@@ -312,8 +312,35 @@ function makeTableView(
312312 const sequences = table . sequences . map ( seq => {
313313 const col = rowType . value . elements [ seq . column ] ;
314314 const colType = col . algebraicType ;
315+
316+ // Determine the sentinel value which users will pass to as a placeholder
317+ // to cause the sequence to advance.
318+ // For small integer SATS types which fit in V8 `number`s, this is `0: number`,
319+ // and for larger integer SATS types it's `0n: BigInt`.
320+ let sequenceTrigger : bigint | number ;
321+ switch ( colType . tag ) {
322+ case 'U8' :
323+ case 'I8' :
324+ case 'U16' :
325+ case 'I16' :
326+ case 'U32' :
327+ case 'I32' :
328+ sequenceTrigger = 0 ;
329+ break ;
330+ case 'U64' :
331+ case 'I64' :
332+ case 'U128' :
333+ case 'I128' :
334+ case 'U256' :
335+ case 'I256' :
336+ sequenceTrigger = 0n ;
337+ break ;
338+ default :
339+ throw new TypeError ( 'invalid sequence type' ) ;
340+ }
315341 return {
316342 colName : col . name ! ,
343+ sequenceTrigger,
317344 read : ( reader : BinaryReader ) =>
318345 AlgebraicType . deserializeValue ( reader , colType , typespace ) ,
319346 } ;
@@ -323,11 +350,13 @@ function makeTableView(
323350 const iter = ( ) =>
324351 new TableIterator ( sys . datastore_table_scan_bsatn ( table_id ) , rowType ) ;
325352
326- const integrate_generated_columns = hasAutoIncrement
353+ const integrateGeneratedColumns = hasAutoIncrement
327354 ? ( row : RowType < any > , ret_buf : Uint8Array ) => {
328355 const reader = new BinaryReader ( ret_buf ) ;
329- for ( const { colName, read } of sequences ) {
330- row [ colName ] = read ( reader ) ;
356+ for ( const { colName, read, sequenceTrigger } of sequences ) {
357+ if ( row [ colName ] === sequenceTrigger ) {
358+ row [ colName ] = read ( reader ) ;
359+ }
331360 }
332361 }
333362 : null ;
@@ -341,9 +370,9 @@ function makeTableView(
341370 AlgebraicType . serializeValue ( writer , rowType , row , typespace ) ;
342371 const ret_buf = sys . datastore_insert_bsatn ( table_id , writer . getBuffer ( ) ) ;
343372 const ret = { ...row } ;
344- integrate_generated_columns ?.( ret , ret_buf ) ;
373+ integrateGeneratedColumns ?.( ret , ret_buf ) ;
345374
346- return { ok : true , val : ret } ;
375+ return ret ;
347376 } ,
348377 delete : ( row : RowType < any > ) : boolean => {
349378 const writer = new BinaryWriter ( 4 + baseSize ) ;
@@ -465,7 +494,7 @@ function makeTableView(
465494 index_id ,
466495 writer . getBuffer ( )
467496 ) ;
468- integrate_generated_columns ?.( row , ret_buf ) ;
497+ integrateGeneratedColumns ?.( row , ret_buf ) ;
469498 return row ;
470499 } ,
471500 } as UniqueIndex < any , any > ;
0 commit comments