Skip to content

Commit 7ca16de

Browse files
Fix some typescript issues (#3775)
# Description of Changes Fixes clockworklabs/SpacetimeDBPrivate#2169 and clockworklabs/SpacetimeDBPrivate#2170. # Expected complexity level and risk 1 # Testing - [x] The issues no longer occur. --------- Co-authored-by: Tyler Cloutier <cloutiertyler@aol.com>
1 parent d4c80b4 commit 7ca16de

1 file changed

Lines changed: 35 additions & 6 deletions

File tree

crates/bindings-typescript/src/server/runtime.ts

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)