From ce984eb4e24ef86e266db61c5dd57d31cd955f07 Mon Sep 17 00:00:00 2001 From: Noa Date: Wed, 26 Nov 2025 10:55:41 -0600 Subject: [PATCH 1/3] Fix insert() return value --- crates/bindings-typescript/src/server/runtime.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/bindings-typescript/src/server/runtime.ts b/crates/bindings-typescript/src/server/runtime.ts index 13a31d4a94f..e34f586e339 100644 --- a/crates/bindings-typescript/src/server/runtime.ts +++ b/crates/bindings-typescript/src/server/runtime.ts @@ -343,7 +343,7 @@ function makeTableView( const ret = { ...row }; integrate_generated_columns?.(ret, ret_buf); - return { ok: true, val: ret }; + return ret; }, delete: (row: RowType): boolean => { const writer = new BinaryWriter(4 + baseSize); From e2873e77dae081b7687645d5bb60424343940eba Mon Sep 17 00:00:00 2001 From: Noa Date: Wed, 26 Nov 2025 11:25:18 -0600 Subject: [PATCH 2/3] Fix integrateGeneratedColumns --- .../bindings-typescript/src/server/runtime.ts | 34 ++++++++++++++++--- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/crates/bindings-typescript/src/server/runtime.ts b/crates/bindings-typescript/src/server/runtime.ts index e34f586e339..b0d0d8740d2 100644 --- a/crates/bindings-typescript/src/server/runtime.ts +++ b/crates/bindings-typescript/src/server/runtime.ts @@ -312,8 +312,30 @@ function makeTableView( const sequences = table.sequences.map(seq => { const col = rowType.value.elements[seq.column]; const colType = col.algebraicType; + let sequenceTrigger: any; + switch (colType.tag) { + case 'U8': + case 'I8': + case 'U16': + case 'I16': + case 'U32': + case 'I32': + sequenceTrigger = 0; + break; + case 'U64': + case 'I64': + case 'U128': + case 'I128': + case 'U256': + case 'I256': + sequenceTrigger = 0n; + break; + default: + throw new TypeError('invalid sequence type'); + } return { colName: col.name!, + sequenceTrigger, read: (reader: BinaryReader) => AlgebraicType.deserializeValue(reader, colType, typespace), }; @@ -323,11 +345,13 @@ function makeTableView( const iter = () => new TableIterator(sys.datastore_table_scan_bsatn(table_id), rowType); - const integrate_generated_columns = hasAutoIncrement + const integrateGeneratedColumns = hasAutoIncrement ? (row: RowType, ret_buf: Uint8Array) => { const reader = new BinaryReader(ret_buf); - for (const { colName, read } of sequences) { - row[colName] = read(reader); + for (const { colName, read, sequenceTrigger } of sequences) { + if (row[colName] === sequenceTrigger) { + row[colName] = read(reader); + } } } : null; @@ -341,7 +365,7 @@ function makeTableView( AlgebraicType.serializeValue(writer, rowType, row, typespace); const ret_buf = sys.datastore_insert_bsatn(table_id, writer.getBuffer()); const ret = { ...row }; - integrate_generated_columns?.(ret, ret_buf); + integrateGeneratedColumns?.(ret, ret_buf); return ret; }, @@ -465,7 +489,7 @@ function makeTableView( index_id, writer.getBuffer() ); - integrate_generated_columns?.(row, ret_buf); + integrateGeneratedColumns?.(row, ret_buf); return row; }, } as UniqueIndex; From 95669e8b87a8be3a712977ebe19118cab6c892fc Mon Sep 17 00:00:00 2001 From: Tyler Cloutier Date: Wed, 26 Nov 2025 15:22:28 -0500 Subject: [PATCH 3/3] Addresses Phoebe's comment --- crates/bindings-typescript/src/server/runtime.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/crates/bindings-typescript/src/server/runtime.ts b/crates/bindings-typescript/src/server/runtime.ts index b0d0d8740d2..5c6c07d024f 100644 --- a/crates/bindings-typescript/src/server/runtime.ts +++ b/crates/bindings-typescript/src/server/runtime.ts @@ -312,7 +312,12 @@ function makeTableView( const sequences = table.sequences.map(seq => { const col = rowType.value.elements[seq.column]; const colType = col.algebraicType; - let sequenceTrigger: any; + + // Determine the sentinel value which users will pass to as a placeholder + // to cause the sequence to advance. + // For small integer SATS types which fit in V8 `number`s, this is `0: number`, + // and for larger integer SATS types it's `0n: BigInt`. + let sequenceTrigger: bigint | number; switch (colType.tag) { case 'U8': case 'I8':