tinybase 9.5.0 → 9.6.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/@types/omni/index.d.ts +4 -0
  2. package/@types/omni/with-schemas/index.d.ts +4 -0
  3. package/@types/persisters/index.d.ts +8 -1
  4. package/@types/persisters/persister-better-sqlite3/index.d.ts +178 -0
  5. package/@types/persisters/persister-better-sqlite3/with-schemas/index.d.ts +202 -0
  6. package/@types/persisters/persister-capacitor-sqlite/index.d.ts +181 -0
  7. package/@types/persisters/persister-capacitor-sqlite/with-schemas/index.d.ts +205 -0
  8. package/@types/persisters/persister-indexed-db/index.d.ts +17 -9
  9. package/@types/persisters/persister-indexed-db/with-schemas/index.d.ts +18 -10
  10. package/@types/persisters/persister-libsql/index.d.ts +27 -0
  11. package/@types/persisters/persister-libsql/with-schemas/index.d.ts +27 -0
  12. package/@types/persisters/persister-pg/index.d.ts +197 -0
  13. package/@types/persisters/persister-pg/with-schemas/index.d.ts +222 -0
  14. package/@types/persisters/persister-supabase/index.d.ts +201 -0
  15. package/@types/persisters/persister-supabase/with-schemas/index.d.ts +217 -0
  16. package/@types/persisters/with-schemas/index.d.ts +8 -1
  17. package/@types/ui-react-dom/index.d.ts +10 -10
  18. package/@types/ui-react-dom/with-schemas/index.d.ts +10 -10
  19. package/@types/ui-react-dom-charts/index.d.ts +7 -7
  20. package/@types/ui-react-dom-charts/with-schemas/index.d.ts +7 -7
  21. package/@types/ui-react-inspector/index.d.ts +1 -1
  22. package/@types/ui-react-inspector/with-schemas/index.d.ts +1 -1
  23. package/@types/ui-solid-dom/index.d.ts +10 -10
  24. package/@types/ui-solid-dom/with-schemas/index.d.ts +10 -10
  25. package/@types/ui-solid-inspector/index.d.ts +1 -1
  26. package/@types/ui-solid-inspector/with-schemas/index.d.ts +1 -1
  27. package/@types/ui-svelte-dom/index.d.ts +10 -10
  28. package/@types/ui-svelte-dom/with-schemas/index.d.ts +10 -10
  29. package/@types/ui-svelte-inspector/index.d.ts +1 -1
  30. package/@types/ui-svelte-inspector/with-schemas/index.d.ts +1 -1
  31. package/agents.md +55 -2
  32. package/min/omni/index.js +1 -1
  33. package/min/omni/index.js.gz +0 -0
  34. package/min/omni/with-schemas/index.js +1 -1
  35. package/min/omni/with-schemas/index.js.gz +0 -0
  36. package/min/persisters/index.js +1 -1
  37. package/min/persisters/index.js.gz +0 -0
  38. package/min/persisters/persister-better-sqlite3/index.js +1 -0
  39. package/min/persisters/persister-better-sqlite3/index.js.gz +0 -0
  40. package/min/persisters/persister-better-sqlite3/with-schemas/index.js +1 -0
  41. package/min/persisters/persister-better-sqlite3/with-schemas/index.js.gz +0 -0
  42. package/min/persisters/persister-capacitor-sqlite/index.js +1 -0
  43. package/min/persisters/persister-capacitor-sqlite/index.js.gz +0 -0
  44. package/min/persisters/persister-capacitor-sqlite/with-schemas/index.js +1 -0
  45. package/min/persisters/persister-capacitor-sqlite/with-schemas/index.js.gz +0 -0
  46. package/min/persisters/persister-cr-sqlite-wasm/index.js +1 -1
  47. package/min/persisters/persister-cr-sqlite-wasm/index.js.gz +0 -0
  48. package/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +1 -1
  49. package/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js.gz +0 -0
  50. package/min/persisters/persister-durable-object-sql-storage/index.js +1 -1
  51. package/min/persisters/persister-durable-object-sql-storage/index.js.gz +0 -0
  52. package/min/persisters/persister-durable-object-sql-storage/with-schemas/index.js +1 -1
  53. package/min/persisters/persister-durable-object-sql-storage/with-schemas/index.js.gz +0 -0
  54. package/min/persisters/persister-electric-sql/index.js +1 -1
  55. package/min/persisters/persister-electric-sql/index.js.gz +0 -0
  56. package/min/persisters/persister-electric-sql/with-schemas/index.js +1 -1
  57. package/min/persisters/persister-electric-sql/with-schemas/index.js.gz +0 -0
  58. package/min/persisters/persister-expo-sqlite/index.js +1 -1
  59. package/min/persisters/persister-expo-sqlite/index.js.gz +0 -0
  60. package/min/persisters/persister-expo-sqlite/with-schemas/index.js +1 -1
  61. package/min/persisters/persister-expo-sqlite/with-schemas/index.js.gz +0 -0
  62. package/min/persisters/persister-indexed-db/index.js +1 -1
  63. package/min/persisters/persister-indexed-db/index.js.gz +0 -0
  64. package/min/persisters/persister-indexed-db/with-schemas/index.js +1 -1
  65. package/min/persisters/persister-indexed-db/with-schemas/index.js.gz +0 -0
  66. package/min/persisters/persister-libsql/index.js +1 -1
  67. package/min/persisters/persister-libsql/index.js.gz +0 -0
  68. package/min/persisters/persister-libsql/with-schemas/index.js +1 -1
  69. package/min/persisters/persister-libsql/with-schemas/index.js.gz +0 -0
  70. package/min/persisters/persister-pg/index.js +1 -0
  71. package/min/persisters/persister-pg/index.js.gz +0 -0
  72. package/min/persisters/persister-pg/with-schemas/index.js +1 -0
  73. package/min/persisters/persister-pg/with-schemas/index.js.gz +0 -0
  74. package/min/persisters/persister-pglite/index.js +1 -1
  75. package/min/persisters/persister-pglite/index.js.gz +0 -0
  76. package/min/persisters/persister-pglite/with-schemas/index.js +1 -1
  77. package/min/persisters/persister-pglite/with-schemas/index.js.gz +0 -0
  78. package/min/persisters/persister-postgres/index.js +1 -1
  79. package/min/persisters/persister-postgres/index.js.gz +0 -0
  80. package/min/persisters/persister-postgres/with-schemas/index.js +1 -1
  81. package/min/persisters/persister-postgres/with-schemas/index.js.gz +0 -0
  82. package/min/persisters/persister-powersync/index.js +1 -1
  83. package/min/persisters/persister-powersync/index.js.gz +0 -0
  84. package/min/persisters/persister-powersync/with-schemas/index.js +1 -1
  85. package/min/persisters/persister-powersync/with-schemas/index.js.gz +0 -0
  86. package/min/persisters/persister-react-native-sqlite/index.js +1 -1
  87. package/min/persisters/persister-react-native-sqlite/index.js.gz +0 -0
  88. package/min/persisters/persister-react-native-sqlite/with-schemas/index.js +1 -1
  89. package/min/persisters/persister-react-native-sqlite/with-schemas/index.js.gz +0 -0
  90. package/min/persisters/persister-sqlite-bun/index.js +1 -1
  91. package/min/persisters/persister-sqlite-bun/index.js.gz +0 -0
  92. package/min/persisters/persister-sqlite-bun/with-schemas/index.js +1 -1
  93. package/min/persisters/persister-sqlite-bun/with-schemas/index.js.gz +0 -0
  94. package/min/persisters/persister-sqlite-wasm/index.js +1 -1
  95. package/min/persisters/persister-sqlite-wasm/index.js.gz +0 -0
  96. package/min/persisters/persister-sqlite-wasm/with-schemas/index.js +1 -1
  97. package/min/persisters/persister-sqlite-wasm/with-schemas/index.js.gz +0 -0
  98. package/min/persisters/persister-sqlite3/index.js +1 -1
  99. package/min/persisters/persister-sqlite3/index.js.gz +0 -0
  100. package/min/persisters/persister-sqlite3/with-schemas/index.js +1 -1
  101. package/min/persisters/persister-sqlite3/with-schemas/index.js.gz +0 -0
  102. package/min/persisters/persister-supabase/index.js +1 -0
  103. package/min/persisters/persister-supabase/index.js.gz +0 -0
  104. package/min/persisters/persister-supabase/with-schemas/index.js +1 -0
  105. package/min/persisters/persister-supabase/with-schemas/index.js.gz +0 -0
  106. package/min/persisters/with-schemas/index.js +1 -1
  107. package/min/persisters/with-schemas/index.js.gz +0 -0
  108. package/omni/index.js +269 -34
  109. package/omni/with-schemas/index.js +269 -34
  110. package/package.json +164 -4
  111. package/persisters/index.js +23 -7
  112. package/persisters/persister-better-sqlite3/index.js +1767 -0
  113. package/persisters/persister-better-sqlite3/with-schemas/index.js +1767 -0
  114. package/persisters/persister-capacitor-sqlite/index.js +1769 -0
  115. package/persisters/persister-capacitor-sqlite/with-schemas/index.js +1769 -0
  116. package/persisters/persister-cr-sqlite-wasm/index.js +20 -6
  117. package/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +20 -6
  118. package/persisters/persister-durable-object-sql-storage/index.js +20 -7
  119. package/persisters/persister-durable-object-sql-storage/with-schemas/index.js +20 -7
  120. package/persisters/persister-electric-sql/index.js +20 -6
  121. package/persisters/persister-electric-sql/with-schemas/index.js +20 -6
  122. package/persisters/persister-expo-sqlite/index.js +20 -6
  123. package/persisters/persister-expo-sqlite/with-schemas/index.js +20 -6
  124. package/persisters/persister-indexed-db/index.js +48 -20
  125. package/persisters/persister-indexed-db/with-schemas/index.js +48 -20
  126. package/persisters/persister-libsql/index.js +20 -6
  127. package/persisters/persister-libsql/with-schemas/index.js +20 -6
  128. package/persisters/persister-pg/index.js +1905 -0
  129. package/persisters/persister-pg/with-schemas/index.js +1905 -0
  130. package/persisters/persister-pglite/index.js +20 -6
  131. package/persisters/persister-pglite/with-schemas/index.js +20 -6
  132. package/persisters/persister-postgres/index.js +20 -6
  133. package/persisters/persister-postgres/with-schemas/index.js +20 -6
  134. package/persisters/persister-powersync/index.js +27 -10
  135. package/persisters/persister-powersync/with-schemas/index.js +27 -10
  136. package/persisters/persister-react-native-sqlite/index.js +20 -6
  137. package/persisters/persister-react-native-sqlite/with-schemas/index.js +20 -6
  138. package/persisters/persister-sqlite-bun/index.js +20 -6
  139. package/persisters/persister-sqlite-bun/with-schemas/index.js +20 -6
  140. package/persisters/persister-sqlite-wasm/index.js +20 -6
  141. package/persisters/persister-sqlite-wasm/with-schemas/index.js +20 -6
  142. package/persisters/persister-sqlite3/index.js +20 -6
  143. package/persisters/persister-sqlite3/with-schemas/index.js +20 -6
  144. package/persisters/persister-supabase/index.js +883 -0
  145. package/persisters/persister-supabase/with-schemas/index.js +883 -0
  146. package/persisters/with-schemas/index.js +23 -7
  147. package/readme.md +14 -14
  148. package/releases.md +163 -66
@@ -250,9 +250,10 @@ const escapeId = (str) =>
250
250
  const escapeIds = (...ids) => escapeId(arrayJoin(ids, '_'));
251
251
  const escapeColumnNames = (...columnNames) =>
252
252
  arrayJoin(arrayMap(columnNames, escapeId), COMMA);
253
- const getPlaceholders = (array, offset = [1]) =>
253
+ const numberedPlaceholder = (offset) => '$' + offset[0]++;
254
+ const getPlaceholders = (array, getPlaceholder, offset = [1]) =>
254
255
  arrayJoin(
255
- arrayMap(array, () => '$' + offset[0]++),
256
+ arrayMap(array, () => getPlaceholder(offset)),
256
257
  COMMA,
257
258
  );
258
259
  const getWhereCondition = (tableName, condition = TRUE) =>
@@ -995,6 +996,7 @@ const getCommandFunctions = (
995
996
  managedTableNames,
996
997
  querySchema,
997
998
  columnType,
999
+ getPlaceholder,
998
1000
  upsert = defaultUpsert,
999
1001
  encode,
1000
1002
  decode,
@@ -1205,7 +1207,7 @@ const getCommandFunctions = (
1205
1207
  DELETE_FROM +
1206
1208
  escapeId(tableName) +
1207
1209
  getWhereCondition(tableName, condition) +
1208
- `AND(${escapeId(rowIdColumnName)}=$1)`,
1210
+ `AND(${escapeId(rowIdColumnName)}=${getPlaceholder([1])})`,
1209
1211
  [rowId],
1210
1212
  );
1211
1213
  } else if (!isEmpty(settingColumnNames)) {
@@ -1224,6 +1226,7 @@ const getCommandFunctions = (
1224
1226
  encode ? encode(row[cellId]) : row[cellId],
1225
1227
  ),
1226
1228
  },
1229
+ getPlaceholder,
1227
1230
  currentColumnNames,
1228
1231
  );
1229
1232
  }
@@ -1257,13 +1260,14 @@ const getCommandFunctions = (
1257
1260
  rowIdColumnName,
1258
1261
  changingColumnNames,
1259
1262
  rows,
1263
+ getPlaceholder,
1260
1264
  currentColumnNames,
1261
1265
  );
1262
1266
  await executeCommand(
1263
1267
  DELETE_FROM +
1264
1268
  escapeId(tableName) +
1265
1269
  getWhereCondition(tableName, condition) + // eslint-disable-next-line max-len
1266
- `AND${escapeId(rowIdColumnName)}NOT IN(${getPlaceholders(deleteRowIds)})`,
1270
+ `AND${escapeId(rowIdColumnName)}NOT IN(${getPlaceholders(deleteRowIds, getPlaceholder)})`,
1267
1271
  deleteRowIds,
1268
1272
  );
1269
1273
  } else if (
@@ -1306,6 +1310,7 @@ const defaultUpsert = async (
1306
1310
  rowIdColumnName,
1307
1311
  changingColumnNames,
1308
1312
  rows,
1313
+ getPlaceholder,
1309
1314
  ) => {
1310
1315
  const offset = [1];
1311
1316
  await executeCommand(
@@ -1319,7 +1324,11 @@ const defaultUpsert = async (
1319
1324
  objToArray(
1320
1325
  rows,
1321
1326
  (row) =>
1322
- '($' + offset[0]++ + ',' + getPlaceholders(row, offset) + ')',
1327
+ '(' +
1328
+ getPlaceholder(offset) +
1329
+ ',' +
1330
+ getPlaceholders(row, getPlaceholder, offset) +
1331
+ ')',
1323
1332
  ),
1324
1333
  COMMA,
1325
1334
  ) +
@@ -1355,6 +1364,7 @@ const createJsonPersister = (
1355
1364
  thing,
1356
1365
  getThing,
1357
1366
  columnType,
1367
+ getPlaceholder,
1358
1368
  upsert,
1359
1369
  _encode,
1360
1370
  _decode,
@@ -1366,6 +1376,7 @@ const createJsonPersister = (
1366
1376
  managedTableNames,
1367
1377
  querySchema,
1368
1378
  columnType,
1379
+ getPlaceholder,
1369
1380
  upsert,
1370
1381
  void 0,
1371
1382
  void 0,
@@ -1433,6 +1444,7 @@ const createTabularPersister = (
1433
1444
  thing,
1434
1445
  getThing,
1435
1446
  columnType,
1447
+ getPlaceholder,
1436
1448
  upsert,
1437
1449
  encode,
1438
1450
  decode,
@@ -1444,6 +1456,7 @@ const createTabularPersister = (
1444
1456
  managedTableNames,
1445
1457
  querySchema,
1446
1458
  columnType,
1459
+ getPlaceholder,
1447
1460
  upsert,
1448
1461
  encode,
1449
1462
  decode,
@@ -1813,12 +1826,13 @@ const createCustomPostgreSqlPersister = (
1813
1826
  async (executeCommand2, managedTableNames) =>
1814
1827
  await executeCommand2(
1815
1828
  SELECT + // eslint-disable-next-line max-len
1816
- ` c.table_name tn,c.column_name cn,CASE WHEN tc.constraint_type IN('PRIMARY KEY','UNIQUE')AND(${SELECT} count(*) FROM information_schema.key_column_usage kcu2 ${WHERE} kcu2.constraint_schema=kcu.constraint_schema AND kcu2.constraint_name=kcu.constraint_name)=1 THEN 1 ELSE 0 END uq FROM information_schema.columns c LEFT JOIN information_schema.key_column_usage kcu ON kcu.table_schema=c.table_schema AND kcu.table_name=c.table_name AND kcu.column_name=c.column_name LEFT JOIN information_schema.table_constraints tc ON tc.constraint_schema=kcu.constraint_schema AND tc.constraint_name=kcu.constraint_name ${WHERE} c.table_schema='public'AND c.table_name IN(${getPlaceholders(managedTableNames)})`,
1829
+ ` c.table_name tn,c.column_name cn,CASE WHEN tc.constraint_type IN('PRIMARY KEY','UNIQUE')AND(${SELECT} count(*) FROM information_schema.key_column_usage kcu2 ${WHERE} kcu2.constraint_schema=kcu.constraint_schema AND kcu2.constraint_name=kcu.constraint_name)=1 THEN 1 ELSE 0 END uq FROM information_schema.columns c LEFT JOIN information_schema.key_column_usage kcu ON kcu.table_schema=c.table_schema AND kcu.table_name=c.table_name AND kcu.column_name=c.column_name LEFT JOIN information_schema.table_constraints tc ON tc.constraint_schema=kcu.constraint_schema AND tc.constraint_name=kcu.constraint_name ${WHERE} c.table_schema='public'AND c.table_name IN(${getPlaceholders(managedTableNames, numberedPlaceholder)})`,
1817
1830
  managedTableNames,
1818
1831
  ),
1819
1832
  thing,
1820
1833
  getThing,
1821
1834
  'text',
1835
+ numberedPlaceholder,
1822
1836
  void 0,
1823
1837
  (cellOrValue) => jsonString(cellOrValue),
1824
1838
  (field) => jsonParse(field),
@@ -250,9 +250,10 @@ const escapeId = (str) =>
250
250
  const escapeIds = (...ids) => escapeId(arrayJoin(ids, '_'));
251
251
  const escapeColumnNames = (...columnNames) =>
252
252
  arrayJoin(arrayMap(columnNames, escapeId), COMMA);
253
- const getPlaceholders = (array, offset = [1]) =>
253
+ const numberedPlaceholder = (offset) => '$' + offset[0]++;
254
+ const getPlaceholders = (array, getPlaceholder, offset = [1]) =>
254
255
  arrayJoin(
255
- arrayMap(array, () => '$' + offset[0]++),
256
+ arrayMap(array, () => getPlaceholder(offset)),
256
257
  COMMA,
257
258
  );
258
259
  const getWhereCondition = (tableName, condition = TRUE) =>
@@ -995,6 +996,7 @@ const getCommandFunctions = (
995
996
  managedTableNames,
996
997
  querySchema,
997
998
  columnType,
999
+ getPlaceholder,
998
1000
  upsert = defaultUpsert,
999
1001
  encode,
1000
1002
  decode,
@@ -1205,7 +1207,7 @@ const getCommandFunctions = (
1205
1207
  DELETE_FROM +
1206
1208
  escapeId(tableName) +
1207
1209
  getWhereCondition(tableName, condition) +
1208
- `AND(${escapeId(rowIdColumnName)}=$1)`,
1210
+ `AND(${escapeId(rowIdColumnName)}=${getPlaceholder([1])})`,
1209
1211
  [rowId],
1210
1212
  );
1211
1213
  } else if (!isEmpty(settingColumnNames)) {
@@ -1224,6 +1226,7 @@ const getCommandFunctions = (
1224
1226
  encode ? encode(row[cellId]) : row[cellId],
1225
1227
  ),
1226
1228
  },
1229
+ getPlaceholder,
1227
1230
  currentColumnNames,
1228
1231
  );
1229
1232
  }
@@ -1257,13 +1260,14 @@ const getCommandFunctions = (
1257
1260
  rowIdColumnName,
1258
1261
  changingColumnNames,
1259
1262
  rows,
1263
+ getPlaceholder,
1260
1264
  currentColumnNames,
1261
1265
  );
1262
1266
  await executeCommand(
1263
1267
  DELETE_FROM +
1264
1268
  escapeId(tableName) +
1265
1269
  getWhereCondition(tableName, condition) + // eslint-disable-next-line max-len
1266
- `AND${escapeId(rowIdColumnName)}NOT IN(${getPlaceholders(deleteRowIds)})`,
1270
+ `AND${escapeId(rowIdColumnName)}NOT IN(${getPlaceholders(deleteRowIds, getPlaceholder)})`,
1267
1271
  deleteRowIds,
1268
1272
  );
1269
1273
  } else if (
@@ -1306,6 +1310,7 @@ const defaultUpsert = async (
1306
1310
  rowIdColumnName,
1307
1311
  changingColumnNames,
1308
1312
  rows,
1313
+ getPlaceholder,
1309
1314
  ) => {
1310
1315
  const offset = [1];
1311
1316
  await executeCommand(
@@ -1319,7 +1324,11 @@ const defaultUpsert = async (
1319
1324
  objToArray(
1320
1325
  rows,
1321
1326
  (row) =>
1322
- '($' + offset[0]++ + ',' + getPlaceholders(row, offset) + ')',
1327
+ '(' +
1328
+ getPlaceholder(offset) +
1329
+ ',' +
1330
+ getPlaceholders(row, getPlaceholder, offset) +
1331
+ ')',
1323
1332
  ),
1324
1333
  COMMA,
1325
1334
  ) +
@@ -1355,6 +1364,7 @@ const createJsonPersister = (
1355
1364
  thing,
1356
1365
  getThing,
1357
1366
  columnType,
1367
+ getPlaceholder,
1358
1368
  upsert,
1359
1369
  _encode,
1360
1370
  _decode,
@@ -1366,6 +1376,7 @@ const createJsonPersister = (
1366
1376
  managedTableNames,
1367
1377
  querySchema,
1368
1378
  columnType,
1379
+ getPlaceholder,
1369
1380
  upsert,
1370
1381
  void 0,
1371
1382
  void 0,
@@ -1433,6 +1444,7 @@ const createTabularPersister = (
1433
1444
  thing,
1434
1445
  getThing,
1435
1446
  columnType,
1447
+ getPlaceholder,
1436
1448
  upsert,
1437
1449
  encode,
1438
1450
  decode,
@@ -1444,6 +1456,7 @@ const createTabularPersister = (
1444
1456
  managedTableNames,
1445
1457
  querySchema,
1446
1458
  columnType,
1459
+ getPlaceholder,
1447
1460
  upsert,
1448
1461
  encode,
1449
1462
  decode,
@@ -1813,12 +1826,13 @@ const createCustomPostgreSqlPersister = (
1813
1826
  async (executeCommand2, managedTableNames) =>
1814
1827
  await executeCommand2(
1815
1828
  SELECT + // eslint-disable-next-line max-len
1816
- ` c.table_name tn,c.column_name cn,CASE WHEN tc.constraint_type IN('PRIMARY KEY','UNIQUE')AND(${SELECT} count(*) FROM information_schema.key_column_usage kcu2 ${WHERE} kcu2.constraint_schema=kcu.constraint_schema AND kcu2.constraint_name=kcu.constraint_name)=1 THEN 1 ELSE 0 END uq FROM information_schema.columns c LEFT JOIN information_schema.key_column_usage kcu ON kcu.table_schema=c.table_schema AND kcu.table_name=c.table_name AND kcu.column_name=c.column_name LEFT JOIN information_schema.table_constraints tc ON tc.constraint_schema=kcu.constraint_schema AND tc.constraint_name=kcu.constraint_name ${WHERE} c.table_schema='public'AND c.table_name IN(${getPlaceholders(managedTableNames)})`,
1829
+ ` c.table_name tn,c.column_name cn,CASE WHEN tc.constraint_type IN('PRIMARY KEY','UNIQUE')AND(${SELECT} count(*) FROM information_schema.key_column_usage kcu2 ${WHERE} kcu2.constraint_schema=kcu.constraint_schema AND kcu2.constraint_name=kcu.constraint_name)=1 THEN 1 ELSE 0 END uq FROM information_schema.columns c LEFT JOIN information_schema.key_column_usage kcu ON kcu.table_schema=c.table_schema AND kcu.table_name=c.table_name AND kcu.column_name=c.column_name LEFT JOIN information_schema.table_constraints tc ON tc.constraint_schema=kcu.constraint_schema AND tc.constraint_name=kcu.constraint_name ${WHERE} c.table_schema='public'AND c.table_name IN(${getPlaceholders(managedTableNames, numberedPlaceholder)})`,
1817
1830
  managedTableNames,
1818
1831
  ),
1819
1832
  thing,
1820
1833
  getThing,
1821
1834
  'text',
1835
+ numberedPlaceholder,
1822
1836
  void 0,
1823
1837
  (cellOrValue) => jsonString(cellOrValue),
1824
1838
  (field) => jsonParse(field),
@@ -249,9 +249,10 @@ const escapeId = (str) =>
249
249
  const escapeIds = (...ids) => escapeId(arrayJoin(ids, '_'));
250
250
  const escapeColumnNames = (...columnNames) =>
251
251
  arrayJoin(arrayMap(columnNames, escapeId), COMMA);
252
- const getPlaceholders = (array, offset = [1]) =>
252
+ const numberedPlaceholder = (offset) => '$' + offset[0]++;
253
+ const getPlaceholders = (array, getPlaceholder, offset = [1]) =>
253
254
  arrayJoin(
254
- arrayMap(array, () => '$' + offset[0]++),
255
+ arrayMap(array, () => getPlaceholder(offset)),
255
256
  COMMA,
256
257
  );
257
258
  const getWhereCondition = (tableName, condition = TRUE) =>
@@ -994,6 +995,7 @@ const getCommandFunctions = (
994
995
  managedTableNames,
995
996
  querySchema,
996
997
  columnType,
998
+ getPlaceholder,
997
999
  upsert = defaultUpsert,
998
1000
  encode,
999
1001
  decode,
@@ -1204,7 +1206,7 @@ const getCommandFunctions = (
1204
1206
  DELETE_FROM +
1205
1207
  escapeId(tableName) +
1206
1208
  getWhereCondition(tableName, condition) +
1207
- `AND(${escapeId(rowIdColumnName)}=$1)`,
1209
+ `AND(${escapeId(rowIdColumnName)}=${getPlaceholder([1])})`,
1208
1210
  [rowId],
1209
1211
  );
1210
1212
  } else if (!isEmpty(settingColumnNames)) {
@@ -1223,6 +1225,7 @@ const getCommandFunctions = (
1223
1225
  encode ? encode(row[cellId]) : row[cellId],
1224
1226
  ),
1225
1227
  },
1228
+ getPlaceholder,
1226
1229
  currentColumnNames,
1227
1230
  );
1228
1231
  }
@@ -1256,13 +1259,14 @@ const getCommandFunctions = (
1256
1259
  rowIdColumnName,
1257
1260
  changingColumnNames,
1258
1261
  rows,
1262
+ getPlaceholder,
1259
1263
  currentColumnNames,
1260
1264
  );
1261
1265
  await executeCommand(
1262
1266
  DELETE_FROM +
1263
1267
  escapeId(tableName) +
1264
1268
  getWhereCondition(tableName, condition) + // eslint-disable-next-line max-len
1265
- `AND${escapeId(rowIdColumnName)}NOT IN(${getPlaceholders(deleteRowIds)})`,
1269
+ `AND${escapeId(rowIdColumnName)}NOT IN(${getPlaceholders(deleteRowIds, getPlaceholder)})`,
1266
1270
  deleteRowIds,
1267
1271
  );
1268
1272
  } else if (
@@ -1305,6 +1309,7 @@ const defaultUpsert = async (
1305
1309
  rowIdColumnName,
1306
1310
  changingColumnNames,
1307
1311
  rows,
1312
+ getPlaceholder,
1308
1313
  ) => {
1309
1314
  const offset = [1];
1310
1315
  await executeCommand(
@@ -1318,7 +1323,11 @@ const defaultUpsert = async (
1318
1323
  objToArray(
1319
1324
  rows,
1320
1325
  (row) =>
1321
- '($' + offset[0]++ + ',' + getPlaceholders(row, offset) + ')',
1326
+ '(' +
1327
+ getPlaceholder(offset) +
1328
+ ',' +
1329
+ getPlaceholders(row, getPlaceholder, offset) +
1330
+ ')',
1322
1331
  ),
1323
1332
  COMMA,
1324
1333
  ) +
@@ -1354,6 +1363,7 @@ const createJsonPersister = (
1354
1363
  thing,
1355
1364
  getThing,
1356
1365
  columnType,
1366
+ getPlaceholder,
1357
1367
  upsert,
1358
1368
  _encode,
1359
1369
  _decode,
@@ -1365,6 +1375,7 @@ const createJsonPersister = (
1365
1375
  managedTableNames,
1366
1376
  querySchema,
1367
1377
  columnType,
1378
+ getPlaceholder,
1368
1379
  upsert,
1369
1380
  void 0,
1370
1381
  void 0,
@@ -1432,6 +1443,7 @@ const createTabularPersister = (
1432
1443
  thing,
1433
1444
  getThing,
1434
1445
  columnType,
1446
+ getPlaceholder,
1435
1447
  upsert,
1436
1448
  encode,
1437
1449
  decode,
@@ -1443,6 +1455,7 @@ const createTabularPersister = (
1443
1455
  managedTableNames,
1444
1456
  querySchema,
1445
1457
  columnType,
1458
+ getPlaceholder,
1446
1459
  upsert,
1447
1460
  encode,
1448
1461
  decode,
@@ -1812,12 +1825,13 @@ const createCustomPostgreSqlPersister = (
1812
1825
  async (executeCommand2, managedTableNames) =>
1813
1826
  await executeCommand2(
1814
1827
  SELECT + // eslint-disable-next-line max-len
1815
- ` c.table_name tn,c.column_name cn,CASE WHEN tc.constraint_type IN('PRIMARY KEY','UNIQUE')AND(${SELECT} count(*) FROM information_schema.key_column_usage kcu2 ${WHERE} kcu2.constraint_schema=kcu.constraint_schema AND kcu2.constraint_name=kcu.constraint_name)=1 THEN 1 ELSE 0 END uq FROM information_schema.columns c LEFT JOIN information_schema.key_column_usage kcu ON kcu.table_schema=c.table_schema AND kcu.table_name=c.table_name AND kcu.column_name=c.column_name LEFT JOIN information_schema.table_constraints tc ON tc.constraint_schema=kcu.constraint_schema AND tc.constraint_name=kcu.constraint_name ${WHERE} c.table_schema='public'AND c.table_name IN(${getPlaceholders(managedTableNames)})`,
1828
+ ` c.table_name tn,c.column_name cn,CASE WHEN tc.constraint_type IN('PRIMARY KEY','UNIQUE')AND(${SELECT} count(*) FROM information_schema.key_column_usage kcu2 ${WHERE} kcu2.constraint_schema=kcu.constraint_schema AND kcu2.constraint_name=kcu.constraint_name)=1 THEN 1 ELSE 0 END uq FROM information_schema.columns c LEFT JOIN information_schema.key_column_usage kcu ON kcu.table_schema=c.table_schema AND kcu.table_name=c.table_name AND kcu.column_name=c.column_name LEFT JOIN information_schema.table_constraints tc ON tc.constraint_schema=kcu.constraint_schema AND tc.constraint_name=kcu.constraint_name ${WHERE} c.table_schema='public'AND c.table_name IN(${getPlaceholders(managedTableNames, numberedPlaceholder)})`,
1816
1829
  managedTableNames,
1817
1830
  ),
1818
1831
  thing,
1819
1832
  getThing,
1820
1833
  'text',
1834
+ numberedPlaceholder,
1821
1835
  void 0,
1822
1836
  (cellOrValue) => jsonString(cellOrValue),
1823
1837
  (field) => jsonParse(field),
@@ -249,9 +249,10 @@ const escapeId = (str) =>
249
249
  const escapeIds = (...ids) => escapeId(arrayJoin(ids, '_'));
250
250
  const escapeColumnNames = (...columnNames) =>
251
251
  arrayJoin(arrayMap(columnNames, escapeId), COMMA);
252
- const getPlaceholders = (array, offset = [1]) =>
252
+ const numberedPlaceholder = (offset) => '$' + offset[0]++;
253
+ const getPlaceholders = (array, getPlaceholder, offset = [1]) =>
253
254
  arrayJoin(
254
- arrayMap(array, () => '$' + offset[0]++),
255
+ arrayMap(array, () => getPlaceholder(offset)),
255
256
  COMMA,
256
257
  );
257
258
  const getWhereCondition = (tableName, condition = TRUE) =>
@@ -994,6 +995,7 @@ const getCommandFunctions = (
994
995
  managedTableNames,
995
996
  querySchema,
996
997
  columnType,
998
+ getPlaceholder,
997
999
  upsert = defaultUpsert,
998
1000
  encode,
999
1001
  decode,
@@ -1204,7 +1206,7 @@ const getCommandFunctions = (
1204
1206
  DELETE_FROM +
1205
1207
  escapeId(tableName) +
1206
1208
  getWhereCondition(tableName, condition) +
1207
- `AND(${escapeId(rowIdColumnName)}=$1)`,
1209
+ `AND(${escapeId(rowIdColumnName)}=${getPlaceholder([1])})`,
1208
1210
  [rowId],
1209
1211
  );
1210
1212
  } else if (!isEmpty(settingColumnNames)) {
@@ -1223,6 +1225,7 @@ const getCommandFunctions = (
1223
1225
  encode ? encode(row[cellId]) : row[cellId],
1224
1226
  ),
1225
1227
  },
1228
+ getPlaceholder,
1226
1229
  currentColumnNames,
1227
1230
  );
1228
1231
  }
@@ -1256,13 +1259,14 @@ const getCommandFunctions = (
1256
1259
  rowIdColumnName,
1257
1260
  changingColumnNames,
1258
1261
  rows,
1262
+ getPlaceholder,
1259
1263
  currentColumnNames,
1260
1264
  );
1261
1265
  await executeCommand(
1262
1266
  DELETE_FROM +
1263
1267
  escapeId(tableName) +
1264
1268
  getWhereCondition(tableName, condition) + // eslint-disable-next-line max-len
1265
- `AND${escapeId(rowIdColumnName)}NOT IN(${getPlaceholders(deleteRowIds)})`,
1269
+ `AND${escapeId(rowIdColumnName)}NOT IN(${getPlaceholders(deleteRowIds, getPlaceholder)})`,
1266
1270
  deleteRowIds,
1267
1271
  );
1268
1272
  } else if (
@@ -1305,6 +1309,7 @@ const defaultUpsert = async (
1305
1309
  rowIdColumnName,
1306
1310
  changingColumnNames,
1307
1311
  rows,
1312
+ getPlaceholder,
1308
1313
  ) => {
1309
1314
  const offset = [1];
1310
1315
  await executeCommand(
@@ -1318,7 +1323,11 @@ const defaultUpsert = async (
1318
1323
  objToArray(
1319
1324
  rows,
1320
1325
  (row) =>
1321
- '($' + offset[0]++ + ',' + getPlaceholders(row, offset) + ')',
1326
+ '(' +
1327
+ getPlaceholder(offset) +
1328
+ ',' +
1329
+ getPlaceholders(row, getPlaceholder, offset) +
1330
+ ')',
1322
1331
  ),
1323
1332
  COMMA,
1324
1333
  ) +
@@ -1354,6 +1363,7 @@ const createJsonPersister = (
1354
1363
  thing,
1355
1364
  getThing,
1356
1365
  columnType,
1366
+ getPlaceholder,
1357
1367
  upsert,
1358
1368
  _encode,
1359
1369
  _decode,
@@ -1365,6 +1375,7 @@ const createJsonPersister = (
1365
1375
  managedTableNames,
1366
1376
  querySchema,
1367
1377
  columnType,
1378
+ getPlaceholder,
1368
1379
  upsert,
1369
1380
  void 0,
1370
1381
  void 0,
@@ -1432,6 +1443,7 @@ const createTabularPersister = (
1432
1443
  thing,
1433
1444
  getThing,
1434
1445
  columnType,
1446
+ getPlaceholder,
1435
1447
  upsert,
1436
1448
  encode,
1437
1449
  decode,
@@ -1443,6 +1455,7 @@ const createTabularPersister = (
1443
1455
  managedTableNames,
1444
1456
  querySchema,
1445
1457
  columnType,
1458
+ getPlaceholder,
1446
1459
  upsert,
1447
1460
  encode,
1448
1461
  decode,
@@ -1812,12 +1825,13 @@ const createCustomPostgreSqlPersister = (
1812
1825
  async (executeCommand2, managedTableNames) =>
1813
1826
  await executeCommand2(
1814
1827
  SELECT + // eslint-disable-next-line max-len
1815
- ` c.table_name tn,c.column_name cn,CASE WHEN tc.constraint_type IN('PRIMARY KEY','UNIQUE')AND(${SELECT} count(*) FROM information_schema.key_column_usage kcu2 ${WHERE} kcu2.constraint_schema=kcu.constraint_schema AND kcu2.constraint_name=kcu.constraint_name)=1 THEN 1 ELSE 0 END uq FROM information_schema.columns c LEFT JOIN information_schema.key_column_usage kcu ON kcu.table_schema=c.table_schema AND kcu.table_name=c.table_name AND kcu.column_name=c.column_name LEFT JOIN information_schema.table_constraints tc ON tc.constraint_schema=kcu.constraint_schema AND tc.constraint_name=kcu.constraint_name ${WHERE} c.table_schema='public'AND c.table_name IN(${getPlaceholders(managedTableNames)})`,
1828
+ ` c.table_name tn,c.column_name cn,CASE WHEN tc.constraint_type IN('PRIMARY KEY','UNIQUE')AND(${SELECT} count(*) FROM information_schema.key_column_usage kcu2 ${WHERE} kcu2.constraint_schema=kcu.constraint_schema AND kcu2.constraint_name=kcu.constraint_name)=1 THEN 1 ELSE 0 END uq FROM information_schema.columns c LEFT JOIN information_schema.key_column_usage kcu ON kcu.table_schema=c.table_schema AND kcu.table_name=c.table_name AND kcu.column_name=c.column_name LEFT JOIN information_schema.table_constraints tc ON tc.constraint_schema=kcu.constraint_schema AND tc.constraint_name=kcu.constraint_name ${WHERE} c.table_schema='public'AND c.table_name IN(${getPlaceholders(managedTableNames, numberedPlaceholder)})`,
1816
1829
  managedTableNames,
1817
1830
  ),
1818
1831
  thing,
1819
1832
  getThing,
1820
1833
  'text',
1834
+ numberedPlaceholder,
1821
1835
  void 0,
1822
1836
  (cellOrValue) => jsonString(cellOrValue),
1823
1837
  (field) => jsonParse(field),
@@ -179,9 +179,10 @@ const escapeId = (str) =>
179
179
  );
180
180
  const escapeColumnNames = (...columnNames) =>
181
181
  arrayJoin(arrayMap(columnNames, escapeId), COMMA);
182
- const getPlaceholders = (array, offset = [1]) =>
182
+ const anonymousPlaceholder = () => '?';
183
+ const getPlaceholders = (array, getPlaceholder, offset = [1]) =>
183
184
  arrayJoin(
184
- arrayMap(array, () => '$' + offset[0]++),
185
+ arrayMap(array, () => getPlaceholder(offset)),
185
186
  COMMA,
186
187
  );
187
188
  const getWhereCondition = (tableName, condition = TRUE) =>
@@ -1002,6 +1003,7 @@ const getCommandFunctions = (
1002
1003
  managedTableNames,
1003
1004
  querySchema,
1004
1005
  columnType,
1006
+ getPlaceholder,
1005
1007
  upsert = defaultUpsert,
1006
1008
  encode,
1007
1009
  decode,
@@ -1212,7 +1214,7 @@ const getCommandFunctions = (
1212
1214
  DELETE_FROM +
1213
1215
  escapeId(tableName) +
1214
1216
  getWhereCondition(tableName, condition) +
1215
- `AND(${escapeId(rowIdColumnName)}=$1)`,
1217
+ `AND(${escapeId(rowIdColumnName)}=${getPlaceholder([1])})`,
1216
1218
  [rowId],
1217
1219
  );
1218
1220
  } else if (!isEmpty(settingColumnNames)) {
@@ -1231,6 +1233,7 @@ const getCommandFunctions = (
1231
1233
  encode ? encode(row[cellId]) : row[cellId],
1232
1234
  ),
1233
1235
  },
1236
+ getPlaceholder,
1234
1237
  currentColumnNames,
1235
1238
  );
1236
1239
  }
@@ -1264,13 +1267,14 @@ const getCommandFunctions = (
1264
1267
  rowIdColumnName,
1265
1268
  changingColumnNames,
1266
1269
  rows,
1270
+ getPlaceholder,
1267
1271
  currentColumnNames,
1268
1272
  );
1269
1273
  await executeCommand(
1270
1274
  DELETE_FROM +
1271
1275
  escapeId(tableName) +
1272
1276
  getWhereCondition(tableName, condition) + // eslint-disable-next-line max-len
1273
- `AND${escapeId(rowIdColumnName)}NOT IN(${getPlaceholders(deleteRowIds)})`,
1277
+ `AND${escapeId(rowIdColumnName)}NOT IN(${getPlaceholders(deleteRowIds, getPlaceholder)})`,
1274
1278
  deleteRowIds,
1275
1279
  );
1276
1280
  } else if (
@@ -1313,6 +1317,7 @@ const defaultUpsert = async (
1313
1317
  rowIdColumnName,
1314
1318
  changingColumnNames,
1315
1319
  rows,
1320
+ getPlaceholder,
1316
1321
  ) => {
1317
1322
  const offset = [1];
1318
1323
  await executeCommand(
@@ -1326,7 +1331,11 @@ const defaultUpsert = async (
1326
1331
  objToArray(
1327
1332
  rows,
1328
1333
  (row) =>
1329
- '($' + offset[0]++ + ',' + getPlaceholders(row, offset) + ')',
1334
+ '(' +
1335
+ getPlaceholder(offset) +
1336
+ ',' +
1337
+ getPlaceholders(row, getPlaceholder, offset) +
1338
+ ')',
1330
1339
  ),
1331
1340
  COMMA,
1332
1341
  ) +
@@ -1362,6 +1371,7 @@ const createJsonPersister = (
1362
1371
  thing,
1363
1372
  getThing,
1364
1373
  columnType,
1374
+ getPlaceholder,
1365
1375
  upsert,
1366
1376
  _encode,
1367
1377
  _decode,
@@ -1373,6 +1383,7 @@ const createJsonPersister = (
1373
1383
  managedTableNames,
1374
1384
  querySchema,
1375
1385
  columnType,
1386
+ getPlaceholder,
1376
1387
  upsert,
1377
1388
  void 0,
1378
1389
  void 0,
@@ -1440,6 +1451,7 @@ const createTabularPersister = (
1440
1451
  thing,
1441
1452
  getThing,
1442
1453
  columnType,
1454
+ getPlaceholder,
1443
1455
  upsert,
1444
1456
  encode,
1445
1457
  decode,
@@ -1451,6 +1463,7 @@ const createTabularPersister = (
1451
1463
  managedTableNames,
1452
1464
  querySchema,
1453
1465
  columnType,
1466
+ getPlaceholder,
1454
1467
  upsert,
1455
1468
  encode,
1456
1469
  decode,
@@ -1710,12 +1723,13 @@ const createCustomSqlitePersister = (
1710
1723
  async (executeCommand2, managedTableNames) =>
1711
1724
  await executeCommand2(
1712
1725
  SELECT + // eslint-disable-next-line max-len
1713
- ` t.name tn,c.name cn,c.pk OR EXISTS(${SELECT} 1 FROM ${PRAGMA}index_list(t.name)i,${PRAGMA}index_info(i.name)ii ${WHERE} i."unique"=1 AND ii.name=c.name AND(${SELECT} count(*) FROM ${PRAGMA}index_info(i.name))=1)uq FROM ${PRAGMA_TABLE}list()t,${PRAGMA_TABLE}info(t.name)c ${WHERE} t.schema='main'AND t.type IN('table','view')AND t.name IN(${getPlaceholders(managedTableNames)})ORDER BY t.name,c.name`,
1726
+ ` t.name tn,c.name cn,c.pk OR EXISTS(${SELECT} 1 FROM ${PRAGMA}index_list(t.name)i,${PRAGMA}index_info(i.name)ii ${WHERE} i."unique"=1 AND ii.name=c.name AND(${SELECT} count(*) FROM ${PRAGMA}index_info(i.name))=1)uq FROM ${PRAGMA_TABLE}list()t,${PRAGMA_TABLE}info(t.name)c ${WHERE} t.schema='main'AND t.type IN('table','view')AND t.name IN(${getPlaceholders(managedTableNames, anonymousPlaceholder)})ORDER BY t.name,c.name`,
1714
1727
  managedTableNames,
1715
1728
  ),
1716
1729
  thing,
1717
1730
  getThing,
1718
1731
  EMPTY_STRING,
1732
+ anonymousPlaceholder,
1719
1733
  upsert,
1720
1734
  (cellOrValue) =>
1721
1735
  isTrue(cellOrValue) ? 1 : isFalse(cellOrValue) ? 0 : cellOrValue,
@@ -1774,14 +1788,17 @@ const powerSyncUpdateThenInsert = async (
1774
1788
  rowIdColumnName,
1775
1789
  changingColumnNames,
1776
1790
  rows,
1791
+ getPlaceholder,
1777
1792
  ) => {
1793
+ const updateOffset = [1];
1778
1794
  const assignments = arrayJoin(
1779
1795
  arrayMap(
1780
1796
  changingColumnNames,
1781
- (columnName, index) => escapeId(columnName) + '=$' + (index + 1),
1797
+ (columnName) => escapeId(columnName) + '=' + getPlaceholder(updateOffset),
1782
1798
  ),
1783
1799
  COMMA,
1784
1800
  );
1801
+ const rowIdPlaceholder = getPlaceholder(updateOffset);
1785
1802
  for (const [id, row] of objToArray(rows, (row2, id2) => [id2, row2])) {
1786
1803
  const rowParams = arrayMap(row, (value) => value ?? null);
1787
1804
  if (
@@ -1794,8 +1811,8 @@ const powerSyncUpdateThenInsert = async (
1794
1811
  ' ' +
1795
1812
  WHERE +
1796
1813
  escapeId(rowIdColumnName) +
1797
- '=$' +
1798
- (size(row) + 1) +
1814
+ '=' +
1815
+ rowIdPlaceholder +
1799
1816
  ' RETURNING' +
1800
1817
  escapeId(rowIdColumnName),
1801
1818
  [...rowParams, id],
@@ -1810,7 +1827,7 @@ const powerSyncUpdateThenInsert = async (
1810
1827
  '(' +
1811
1828
  escapeColumnNames(rowIdColumnName, ...changingColumnNames) +
1812
1829
  ')VALUES(' +
1813
- getPlaceholders([id, ...row], offset) +
1830
+ getPlaceholders([id, ...row], getPlaceholder, offset) +
1814
1831
  ')',
1815
1832
  [id, ...rowParams],
1816
1833
  );