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
@@ -138,9 +138,10 @@ const escapeId = (str) =>
138
138
  );
139
139
  const escapeColumnNames = (...columnNames) =>
140
140
  arrayJoin(arrayMap(columnNames, escapeId), COMMA);
141
- const getPlaceholders = (array, offset = [1]) =>
141
+ const anonymousPlaceholder = () => '?';
142
+ const getPlaceholders = (array, getPlaceholder, offset = [1]) =>
142
143
  arrayJoin(
143
- arrayMap(array, () => '$' + offset[0]++),
144
+ arrayMap(array, () => getPlaceholder(offset)),
144
145
  COMMA,
145
146
  );
146
147
  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,
@@ -138,9 +138,10 @@ const escapeId = (str) =>
138
138
  );
139
139
  const escapeColumnNames = (...columnNames) =>
140
140
  arrayJoin(arrayMap(columnNames, escapeId), COMMA);
141
- const getPlaceholders = (array, offset = [1]) =>
141
+ const anonymousPlaceholder = () => '?';
142
+ const getPlaceholders = (array, getPlaceholder, offset = [1]) =>
142
143
  arrayJoin(
143
- arrayMap(array, () => '$' + offset[0]++),
144
+ arrayMap(array, () => getPlaceholder(offset)),
144
145
  COMMA,
145
146
  );
146
147
  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,
@@ -880,9 +880,10 @@ const escapeId = (str) =>
880
880
  );
881
881
  const escapeColumnNames = (...columnNames) =>
882
882
  arrayJoin(arrayMap(columnNames, escapeId), COMMA);
883
- const getPlaceholders = (array, offset = [1]) =>
883
+ const anonymousPlaceholder = () => '?';
884
+ const getPlaceholders = (array, getPlaceholder, offset = [1]) =>
884
885
  arrayJoin(
885
- arrayMap(array, () => '$' + offset[0]++),
886
+ arrayMap(array, () => getPlaceholder(offset)),
886
887
  COMMA,
887
888
  );
888
889
  const getWhereCondition = (tableName, condition = TRUE) =>
@@ -1019,6 +1020,7 @@ const getCommandFunctions = (
1019
1020
  managedTableNames,
1020
1021
  querySchema,
1021
1022
  columnType,
1023
+ getPlaceholder,
1022
1024
  upsert = defaultUpsert,
1023
1025
  encode,
1024
1026
  decode,
@@ -1229,7 +1231,7 @@ const getCommandFunctions = (
1229
1231
  DELETE_FROM +
1230
1232
  escapeId(tableName) +
1231
1233
  getWhereCondition(tableName, condition) +
1232
- `AND(${escapeId(rowIdColumnName)}=$1)`,
1234
+ `AND(${escapeId(rowIdColumnName)}=${getPlaceholder([1])})`,
1233
1235
  [rowId],
1234
1236
  );
1235
1237
  } else if (!isEmpty(settingColumnNames)) {
@@ -1248,6 +1250,7 @@ const getCommandFunctions = (
1248
1250
  encode ? encode(row[cellId]) : row[cellId],
1249
1251
  ),
1250
1252
  },
1253
+ getPlaceholder,
1251
1254
  currentColumnNames,
1252
1255
  );
1253
1256
  }
@@ -1281,13 +1284,14 @@ const getCommandFunctions = (
1281
1284
  rowIdColumnName,
1282
1285
  changingColumnNames,
1283
1286
  rows,
1287
+ getPlaceholder,
1284
1288
  currentColumnNames,
1285
1289
  );
1286
1290
  await executeCommand(
1287
1291
  DELETE_FROM +
1288
1292
  escapeId(tableName) +
1289
1293
  getWhereCondition(tableName, condition) + // eslint-disable-next-line max-len
1290
- `AND${escapeId(rowIdColumnName)}NOT IN(${getPlaceholders(deleteRowIds)})`,
1294
+ `AND${escapeId(rowIdColumnName)}NOT IN(${getPlaceholders(deleteRowIds, getPlaceholder)})`,
1291
1295
  deleteRowIds,
1292
1296
  );
1293
1297
  } else if (
@@ -1330,6 +1334,7 @@ const defaultUpsert = async (
1330
1334
  rowIdColumnName,
1331
1335
  changingColumnNames,
1332
1336
  rows,
1337
+ getPlaceholder,
1333
1338
  ) => {
1334
1339
  const offset = [1];
1335
1340
  await executeCommand(
@@ -1343,7 +1348,11 @@ const defaultUpsert = async (
1343
1348
  objToArray(
1344
1349
  rows,
1345
1350
  (row) =>
1346
- '($' + offset[0]++ + ',' + getPlaceholders(row, offset) + ')',
1351
+ '(' +
1352
+ getPlaceholder(offset) +
1353
+ ',' +
1354
+ getPlaceholders(row, getPlaceholder, offset) +
1355
+ ')',
1347
1356
  ),
1348
1357
  COMMA,
1349
1358
  ) +
@@ -1379,6 +1388,7 @@ const createJsonPersister = (
1379
1388
  thing,
1380
1389
  getThing,
1381
1390
  columnType,
1391
+ getPlaceholder,
1382
1392
  upsert,
1383
1393
  _encode,
1384
1394
  _decode,
@@ -1390,6 +1400,7 @@ const createJsonPersister = (
1390
1400
  managedTableNames,
1391
1401
  querySchema,
1392
1402
  columnType,
1403
+ getPlaceholder,
1393
1404
  upsert,
1394
1405
  void 0,
1395
1406
  void 0,
@@ -1457,6 +1468,7 @@ const createTabularPersister = (
1457
1468
  thing,
1458
1469
  getThing,
1459
1470
  columnType,
1471
+ getPlaceholder,
1460
1472
  upsert,
1461
1473
  encode,
1462
1474
  decode,
@@ -1468,6 +1480,7 @@ const createTabularPersister = (
1468
1480
  managedTableNames,
1469
1481
  querySchema,
1470
1482
  columnType,
1483
+ getPlaceholder,
1471
1484
  upsert,
1472
1485
  encode,
1473
1486
  decode,
@@ -1727,12 +1740,13 @@ const createCustomSqlitePersister = (
1727
1740
  async (executeCommand2, managedTableNames) =>
1728
1741
  await executeCommand2(
1729
1742
  SELECT + // eslint-disable-next-line max-len
1730
- ` 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`,
1743
+ ` 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`,
1731
1744
  managedTableNames,
1732
1745
  ),
1733
1746
  thing,
1734
1747
  getThing,
1735
1748
  EMPTY_STRING,
1749
+ anonymousPlaceholder,
1736
1750
  upsert,
1737
1751
  (cellOrValue) =>
1738
1752
  isTrue(cellOrValue) ? 1 : isFalse(cellOrValue) ? 0 : cellOrValue,
@@ -1763,7 +1777,6 @@ const createDurableObjectSqlStoragePersister = (
1763
1777
  configOrStoreTableName,
1764
1778
  async (sql, params = []) => {
1765
1779
  if (!arrayHas(['BEGIN', 'END'], sql)) {
1766
- sql = strReplace(sql, /\$\d+/g, '?');
1767
1780
  return getSqlRows(sqlStorage, sql, ...params);
1768
1781
  }
1769
1782
  return [];
@@ -880,9 +880,10 @@ const escapeId = (str) =>
880
880
  );
881
881
  const escapeColumnNames = (...columnNames) =>
882
882
  arrayJoin(arrayMap(columnNames, escapeId), COMMA);
883
- const getPlaceholders = (array, offset = [1]) =>
883
+ const anonymousPlaceholder = () => '?';
884
+ const getPlaceholders = (array, getPlaceholder, offset = [1]) =>
884
885
  arrayJoin(
885
- arrayMap(array, () => '$' + offset[0]++),
886
+ arrayMap(array, () => getPlaceholder(offset)),
886
887
  COMMA,
887
888
  );
888
889
  const getWhereCondition = (tableName, condition = TRUE) =>
@@ -1019,6 +1020,7 @@ const getCommandFunctions = (
1019
1020
  managedTableNames,
1020
1021
  querySchema,
1021
1022
  columnType,
1023
+ getPlaceholder,
1022
1024
  upsert = defaultUpsert,
1023
1025
  encode,
1024
1026
  decode,
@@ -1229,7 +1231,7 @@ const getCommandFunctions = (
1229
1231
  DELETE_FROM +
1230
1232
  escapeId(tableName) +
1231
1233
  getWhereCondition(tableName, condition) +
1232
- `AND(${escapeId(rowIdColumnName)}=$1)`,
1234
+ `AND(${escapeId(rowIdColumnName)}=${getPlaceholder([1])})`,
1233
1235
  [rowId],
1234
1236
  );
1235
1237
  } else if (!isEmpty(settingColumnNames)) {
@@ -1248,6 +1250,7 @@ const getCommandFunctions = (
1248
1250
  encode ? encode(row[cellId]) : row[cellId],
1249
1251
  ),
1250
1252
  },
1253
+ getPlaceholder,
1251
1254
  currentColumnNames,
1252
1255
  );
1253
1256
  }
@@ -1281,13 +1284,14 @@ const getCommandFunctions = (
1281
1284
  rowIdColumnName,
1282
1285
  changingColumnNames,
1283
1286
  rows,
1287
+ getPlaceholder,
1284
1288
  currentColumnNames,
1285
1289
  );
1286
1290
  await executeCommand(
1287
1291
  DELETE_FROM +
1288
1292
  escapeId(tableName) +
1289
1293
  getWhereCondition(tableName, condition) + // eslint-disable-next-line max-len
1290
- `AND${escapeId(rowIdColumnName)}NOT IN(${getPlaceholders(deleteRowIds)})`,
1294
+ `AND${escapeId(rowIdColumnName)}NOT IN(${getPlaceholders(deleteRowIds, getPlaceholder)})`,
1291
1295
  deleteRowIds,
1292
1296
  );
1293
1297
  } else if (
@@ -1330,6 +1334,7 @@ const defaultUpsert = async (
1330
1334
  rowIdColumnName,
1331
1335
  changingColumnNames,
1332
1336
  rows,
1337
+ getPlaceholder,
1333
1338
  ) => {
1334
1339
  const offset = [1];
1335
1340
  await executeCommand(
@@ -1343,7 +1348,11 @@ const defaultUpsert = async (
1343
1348
  objToArray(
1344
1349
  rows,
1345
1350
  (row) =>
1346
- '($' + offset[0]++ + ',' + getPlaceholders(row, offset) + ')',
1351
+ '(' +
1352
+ getPlaceholder(offset) +
1353
+ ',' +
1354
+ getPlaceholders(row, getPlaceholder, offset) +
1355
+ ')',
1347
1356
  ),
1348
1357
  COMMA,
1349
1358
  ) +
@@ -1379,6 +1388,7 @@ const createJsonPersister = (
1379
1388
  thing,
1380
1389
  getThing,
1381
1390
  columnType,
1391
+ getPlaceholder,
1382
1392
  upsert,
1383
1393
  _encode,
1384
1394
  _decode,
@@ -1390,6 +1400,7 @@ const createJsonPersister = (
1390
1400
  managedTableNames,
1391
1401
  querySchema,
1392
1402
  columnType,
1403
+ getPlaceholder,
1393
1404
  upsert,
1394
1405
  void 0,
1395
1406
  void 0,
@@ -1457,6 +1468,7 @@ const createTabularPersister = (
1457
1468
  thing,
1458
1469
  getThing,
1459
1470
  columnType,
1471
+ getPlaceholder,
1460
1472
  upsert,
1461
1473
  encode,
1462
1474
  decode,
@@ -1468,6 +1480,7 @@ const createTabularPersister = (
1468
1480
  managedTableNames,
1469
1481
  querySchema,
1470
1482
  columnType,
1483
+ getPlaceholder,
1471
1484
  upsert,
1472
1485
  encode,
1473
1486
  decode,
@@ -1727,12 +1740,13 @@ const createCustomSqlitePersister = (
1727
1740
  async (executeCommand2, managedTableNames) =>
1728
1741
  await executeCommand2(
1729
1742
  SELECT + // eslint-disable-next-line max-len
1730
- ` 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`,
1743
+ ` 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`,
1731
1744
  managedTableNames,
1732
1745
  ),
1733
1746
  thing,
1734
1747
  getThing,
1735
1748
  EMPTY_STRING,
1749
+ anonymousPlaceholder,
1736
1750
  upsert,
1737
1751
  (cellOrValue) =>
1738
1752
  isTrue(cellOrValue) ? 1 : isFalse(cellOrValue) ? 0 : cellOrValue,
@@ -1763,7 +1777,6 @@ const createDurableObjectSqlStoragePersister = (
1763
1777
  configOrStoreTableName,
1764
1778
  async (sql, params = []) => {
1765
1779
  if (!arrayHas(['BEGIN', 'END'], sql)) {
1766
- sql = strReplace(sql, /\$\d+/g, '?');
1767
1780
  return getSqlRows(sqlStorage, sql, ...params);
1768
1781
  }
1769
1782
  return [];
@@ -138,9 +138,10 @@ const escapeId = (str) =>
138
138
  );
139
139
  const escapeColumnNames = (...columnNames) =>
140
140
  arrayJoin(arrayMap(columnNames, escapeId), COMMA);
141
- const getPlaceholders = (array, offset = [1]) =>
141
+ const anonymousPlaceholder = () => '?';
142
+ const getPlaceholders = (array, getPlaceholder, offset = [1]) =>
142
143
  arrayJoin(
143
- arrayMap(array, () => '$' + offset[0]++),
144
+ arrayMap(array, () => getPlaceholder(offset)),
144
145
  COMMA,
145
146
  );
146
147
  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,