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.
- package/@types/omni/index.d.ts +4 -0
- package/@types/omni/with-schemas/index.d.ts +4 -0
- package/@types/persisters/index.d.ts +8 -1
- package/@types/persisters/persister-better-sqlite3/index.d.ts +178 -0
- package/@types/persisters/persister-better-sqlite3/with-schemas/index.d.ts +202 -0
- package/@types/persisters/persister-capacitor-sqlite/index.d.ts +181 -0
- package/@types/persisters/persister-capacitor-sqlite/with-schemas/index.d.ts +205 -0
- package/@types/persisters/persister-indexed-db/index.d.ts +17 -9
- package/@types/persisters/persister-indexed-db/with-schemas/index.d.ts +18 -10
- package/@types/persisters/persister-libsql/index.d.ts +27 -0
- package/@types/persisters/persister-libsql/with-schemas/index.d.ts +27 -0
- package/@types/persisters/persister-pg/index.d.ts +197 -0
- package/@types/persisters/persister-pg/with-schemas/index.d.ts +222 -0
- package/@types/persisters/persister-supabase/index.d.ts +201 -0
- package/@types/persisters/persister-supabase/with-schemas/index.d.ts +217 -0
- package/@types/persisters/with-schemas/index.d.ts +8 -1
- package/@types/ui-react-dom/index.d.ts +10 -10
- package/@types/ui-react-dom/with-schemas/index.d.ts +10 -10
- package/@types/ui-react-dom-charts/index.d.ts +7 -7
- package/@types/ui-react-dom-charts/with-schemas/index.d.ts +7 -7
- package/@types/ui-react-inspector/index.d.ts +1 -1
- package/@types/ui-react-inspector/with-schemas/index.d.ts +1 -1
- package/@types/ui-solid-dom/index.d.ts +10 -10
- package/@types/ui-solid-dom/with-schemas/index.d.ts +10 -10
- package/@types/ui-solid-inspector/index.d.ts +1 -1
- package/@types/ui-solid-inspector/with-schemas/index.d.ts +1 -1
- package/@types/ui-svelte-dom/index.d.ts +10 -10
- package/@types/ui-svelte-dom/with-schemas/index.d.ts +10 -10
- package/@types/ui-svelte-inspector/index.d.ts +1 -1
- package/@types/ui-svelte-inspector/with-schemas/index.d.ts +1 -1
- package/agents.md +55 -2
- package/min/omni/index.js +1 -1
- package/min/omni/index.js.gz +0 -0
- package/min/omni/with-schemas/index.js +1 -1
- package/min/omni/with-schemas/index.js.gz +0 -0
- package/min/persisters/index.js +1 -1
- package/min/persisters/index.js.gz +0 -0
- package/min/persisters/persister-better-sqlite3/index.js +1 -0
- package/min/persisters/persister-better-sqlite3/index.js.gz +0 -0
- package/min/persisters/persister-better-sqlite3/with-schemas/index.js +1 -0
- package/min/persisters/persister-better-sqlite3/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-capacitor-sqlite/index.js +1 -0
- package/min/persisters/persister-capacitor-sqlite/index.js.gz +0 -0
- package/min/persisters/persister-capacitor-sqlite/with-schemas/index.js +1 -0
- package/min/persisters/persister-capacitor-sqlite/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-cr-sqlite-wasm/index.js +1 -1
- package/min/persisters/persister-cr-sqlite-wasm/index.js.gz +0 -0
- package/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +1 -1
- package/min/persisters/persister-cr-sqlite-wasm/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-durable-object-sql-storage/index.js +1 -1
- package/min/persisters/persister-durable-object-sql-storage/index.js.gz +0 -0
- package/min/persisters/persister-durable-object-sql-storage/with-schemas/index.js +1 -1
- package/min/persisters/persister-durable-object-sql-storage/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-electric-sql/index.js +1 -1
- package/min/persisters/persister-electric-sql/index.js.gz +0 -0
- package/min/persisters/persister-electric-sql/with-schemas/index.js +1 -1
- package/min/persisters/persister-electric-sql/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-expo-sqlite/index.js +1 -1
- package/min/persisters/persister-expo-sqlite/index.js.gz +0 -0
- package/min/persisters/persister-expo-sqlite/with-schemas/index.js +1 -1
- package/min/persisters/persister-expo-sqlite/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-indexed-db/index.js +1 -1
- package/min/persisters/persister-indexed-db/index.js.gz +0 -0
- package/min/persisters/persister-indexed-db/with-schemas/index.js +1 -1
- package/min/persisters/persister-indexed-db/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-libsql/index.js +1 -1
- package/min/persisters/persister-libsql/index.js.gz +0 -0
- package/min/persisters/persister-libsql/with-schemas/index.js +1 -1
- package/min/persisters/persister-libsql/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-pg/index.js +1 -0
- package/min/persisters/persister-pg/index.js.gz +0 -0
- package/min/persisters/persister-pg/with-schemas/index.js +1 -0
- package/min/persisters/persister-pg/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-pglite/index.js +1 -1
- package/min/persisters/persister-pglite/index.js.gz +0 -0
- package/min/persisters/persister-pglite/with-schemas/index.js +1 -1
- package/min/persisters/persister-pglite/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-postgres/index.js +1 -1
- package/min/persisters/persister-postgres/index.js.gz +0 -0
- package/min/persisters/persister-postgres/with-schemas/index.js +1 -1
- package/min/persisters/persister-postgres/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-powersync/index.js +1 -1
- package/min/persisters/persister-powersync/index.js.gz +0 -0
- package/min/persisters/persister-powersync/with-schemas/index.js +1 -1
- package/min/persisters/persister-powersync/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-react-native-sqlite/index.js +1 -1
- package/min/persisters/persister-react-native-sqlite/index.js.gz +0 -0
- package/min/persisters/persister-react-native-sqlite/with-schemas/index.js +1 -1
- package/min/persisters/persister-react-native-sqlite/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-sqlite-bun/index.js +1 -1
- package/min/persisters/persister-sqlite-bun/index.js.gz +0 -0
- package/min/persisters/persister-sqlite-bun/with-schemas/index.js +1 -1
- package/min/persisters/persister-sqlite-bun/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-sqlite-wasm/index.js +1 -1
- package/min/persisters/persister-sqlite-wasm/index.js.gz +0 -0
- package/min/persisters/persister-sqlite-wasm/with-schemas/index.js +1 -1
- package/min/persisters/persister-sqlite-wasm/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-sqlite3/index.js +1 -1
- package/min/persisters/persister-sqlite3/index.js.gz +0 -0
- package/min/persisters/persister-sqlite3/with-schemas/index.js +1 -1
- package/min/persisters/persister-sqlite3/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-supabase/index.js +1 -0
- package/min/persisters/persister-supabase/index.js.gz +0 -0
- package/min/persisters/persister-supabase/with-schemas/index.js +1 -0
- package/min/persisters/persister-supabase/with-schemas/index.js.gz +0 -0
- package/min/persisters/with-schemas/index.js +1 -1
- package/min/persisters/with-schemas/index.js.gz +0 -0
- package/omni/index.js +269 -34
- package/omni/with-schemas/index.js +269 -34
- package/package.json +164 -4
- package/persisters/index.js +23 -7
- package/persisters/persister-better-sqlite3/index.js +1767 -0
- package/persisters/persister-better-sqlite3/with-schemas/index.js +1767 -0
- package/persisters/persister-capacitor-sqlite/index.js +1769 -0
- package/persisters/persister-capacitor-sqlite/with-schemas/index.js +1769 -0
- package/persisters/persister-cr-sqlite-wasm/index.js +20 -6
- package/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +20 -6
- package/persisters/persister-durable-object-sql-storage/index.js +20 -7
- package/persisters/persister-durable-object-sql-storage/with-schemas/index.js +20 -7
- package/persisters/persister-electric-sql/index.js +20 -6
- package/persisters/persister-electric-sql/with-schemas/index.js +20 -6
- package/persisters/persister-expo-sqlite/index.js +20 -6
- package/persisters/persister-expo-sqlite/with-schemas/index.js +20 -6
- package/persisters/persister-indexed-db/index.js +48 -20
- package/persisters/persister-indexed-db/with-schemas/index.js +48 -20
- package/persisters/persister-libsql/index.js +20 -6
- package/persisters/persister-libsql/with-schemas/index.js +20 -6
- package/persisters/persister-pg/index.js +1905 -0
- package/persisters/persister-pg/with-schemas/index.js +1905 -0
- package/persisters/persister-pglite/index.js +20 -6
- package/persisters/persister-pglite/with-schemas/index.js +20 -6
- package/persisters/persister-postgres/index.js +20 -6
- package/persisters/persister-postgres/with-schemas/index.js +20 -6
- package/persisters/persister-powersync/index.js +27 -10
- package/persisters/persister-powersync/with-schemas/index.js +27 -10
- package/persisters/persister-react-native-sqlite/index.js +20 -6
- package/persisters/persister-react-native-sqlite/with-schemas/index.js +20 -6
- package/persisters/persister-sqlite-bun/index.js +20 -6
- package/persisters/persister-sqlite-bun/with-schemas/index.js +20 -6
- package/persisters/persister-sqlite-wasm/index.js +20 -6
- package/persisters/persister-sqlite-wasm/with-schemas/index.js +20 -6
- package/persisters/persister-sqlite3/index.js +20 -6
- package/persisters/persister-sqlite3/with-schemas/index.js +20 -6
- package/persisters/persister-supabase/index.js +883 -0
- package/persisters/persister-supabase/with-schemas/index.js +883 -0
- package/persisters/with-schemas/index.js +23 -7
- package/readme.md +14 -14
- 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
|
|
141
|
+
const anonymousPlaceholder = () => '?';
|
|
142
|
+
const getPlaceholders = (array, getPlaceholder, offset = [1]) =>
|
|
142
143
|
arrayJoin(
|
|
143
|
-
arrayMap(array, () =>
|
|
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
|
-
'(
|
|
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,
|
|
@@ -140,9 +140,10 @@ const escapeId = (str) =>
|
|
|
140
140
|
);
|
|
141
141
|
const escapeColumnNames = (...columnNames) =>
|
|
142
142
|
arrayJoin(arrayMap(columnNames, escapeId), COMMA);
|
|
143
|
-
const
|
|
143
|
+
const anonymousPlaceholder = () => '?';
|
|
144
|
+
const getPlaceholders = (array, getPlaceholder, offset = [1]) =>
|
|
144
145
|
arrayJoin(
|
|
145
|
-
arrayMap(array, () =>
|
|
146
|
+
arrayMap(array, () => getPlaceholder(offset)),
|
|
146
147
|
COMMA,
|
|
147
148
|
);
|
|
148
149
|
const getWhereCondition = (tableName, condition = TRUE) =>
|
|
@@ -1004,6 +1005,7 @@ const getCommandFunctions = (
|
|
|
1004
1005
|
managedTableNames,
|
|
1005
1006
|
querySchema,
|
|
1006
1007
|
columnType,
|
|
1008
|
+
getPlaceholder,
|
|
1007
1009
|
upsert = defaultUpsert,
|
|
1008
1010
|
encode,
|
|
1009
1011
|
decode,
|
|
@@ -1214,7 +1216,7 @@ const getCommandFunctions = (
|
|
|
1214
1216
|
DELETE_FROM +
|
|
1215
1217
|
escapeId(tableName) +
|
|
1216
1218
|
getWhereCondition(tableName, condition) +
|
|
1217
|
-
`AND(${escapeId(rowIdColumnName)}=$1)`,
|
|
1219
|
+
`AND(${escapeId(rowIdColumnName)}=${getPlaceholder([1])})`,
|
|
1218
1220
|
[rowId],
|
|
1219
1221
|
);
|
|
1220
1222
|
} else if (!isEmpty(settingColumnNames)) {
|
|
@@ -1233,6 +1235,7 @@ const getCommandFunctions = (
|
|
|
1233
1235
|
encode ? encode(row[cellId]) : row[cellId],
|
|
1234
1236
|
),
|
|
1235
1237
|
},
|
|
1238
|
+
getPlaceholder,
|
|
1236
1239
|
currentColumnNames,
|
|
1237
1240
|
);
|
|
1238
1241
|
}
|
|
@@ -1266,13 +1269,14 @@ const getCommandFunctions = (
|
|
|
1266
1269
|
rowIdColumnName,
|
|
1267
1270
|
changingColumnNames,
|
|
1268
1271
|
rows,
|
|
1272
|
+
getPlaceholder,
|
|
1269
1273
|
currentColumnNames,
|
|
1270
1274
|
);
|
|
1271
1275
|
await executeCommand(
|
|
1272
1276
|
DELETE_FROM +
|
|
1273
1277
|
escapeId(tableName) +
|
|
1274
1278
|
getWhereCondition(tableName, condition) + // eslint-disable-next-line max-len
|
|
1275
|
-
`AND${escapeId(rowIdColumnName)}NOT IN(${getPlaceholders(deleteRowIds)})`,
|
|
1279
|
+
`AND${escapeId(rowIdColumnName)}NOT IN(${getPlaceholders(deleteRowIds, getPlaceholder)})`,
|
|
1276
1280
|
deleteRowIds,
|
|
1277
1281
|
);
|
|
1278
1282
|
} else if (
|
|
@@ -1315,6 +1319,7 @@ const defaultUpsert = async (
|
|
|
1315
1319
|
rowIdColumnName,
|
|
1316
1320
|
changingColumnNames,
|
|
1317
1321
|
rows,
|
|
1322
|
+
getPlaceholder,
|
|
1318
1323
|
) => {
|
|
1319
1324
|
const offset = [1];
|
|
1320
1325
|
await executeCommand(
|
|
@@ -1328,7 +1333,11 @@ const defaultUpsert = async (
|
|
|
1328
1333
|
objToArray(
|
|
1329
1334
|
rows,
|
|
1330
1335
|
(row) =>
|
|
1331
|
-
'(
|
|
1336
|
+
'(' +
|
|
1337
|
+
getPlaceholder(offset) +
|
|
1338
|
+
',' +
|
|
1339
|
+
getPlaceholders(row, getPlaceholder, offset) +
|
|
1340
|
+
')',
|
|
1332
1341
|
),
|
|
1333
1342
|
COMMA,
|
|
1334
1343
|
) +
|
|
@@ -1364,6 +1373,7 @@ const createJsonPersister = (
|
|
|
1364
1373
|
thing,
|
|
1365
1374
|
getThing,
|
|
1366
1375
|
columnType,
|
|
1376
|
+
getPlaceholder,
|
|
1367
1377
|
upsert,
|
|
1368
1378
|
_encode,
|
|
1369
1379
|
_decode,
|
|
@@ -1375,6 +1385,7 @@ const createJsonPersister = (
|
|
|
1375
1385
|
managedTableNames,
|
|
1376
1386
|
querySchema,
|
|
1377
1387
|
columnType,
|
|
1388
|
+
getPlaceholder,
|
|
1378
1389
|
upsert,
|
|
1379
1390
|
void 0,
|
|
1380
1391
|
void 0,
|
|
@@ -1442,6 +1453,7 @@ const createTabularPersister = (
|
|
|
1442
1453
|
thing,
|
|
1443
1454
|
getThing,
|
|
1444
1455
|
columnType,
|
|
1456
|
+
getPlaceholder,
|
|
1445
1457
|
upsert,
|
|
1446
1458
|
encode,
|
|
1447
1459
|
decode,
|
|
@@ -1453,6 +1465,7 @@ const createTabularPersister = (
|
|
|
1453
1465
|
managedTableNames,
|
|
1454
1466
|
querySchema,
|
|
1455
1467
|
columnType,
|
|
1468
|
+
getPlaceholder,
|
|
1456
1469
|
upsert,
|
|
1457
1470
|
encode,
|
|
1458
1471
|
decode,
|
|
@@ -1712,12 +1725,13 @@ const createCustomSqlitePersister = (
|
|
|
1712
1725
|
async (executeCommand2, managedTableNames) =>
|
|
1713
1726
|
await executeCommand2(
|
|
1714
1727
|
SELECT + // eslint-disable-next-line max-len
|
|
1715
|
-
` 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`,
|
|
1728
|
+
` 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`,
|
|
1716
1729
|
managedTableNames,
|
|
1717
1730
|
),
|
|
1718
1731
|
thing,
|
|
1719
1732
|
getThing,
|
|
1720
1733
|
EMPTY_STRING,
|
|
1734
|
+
anonymousPlaceholder,
|
|
1721
1735
|
upsert,
|
|
1722
1736
|
(cellOrValue) =>
|
|
1723
1737
|
isTrue(cellOrValue) ? 1 : isFalse(cellOrValue) ? 0 : cellOrValue,
|
|
@@ -140,9 +140,10 @@ const escapeId = (str) =>
|
|
|
140
140
|
);
|
|
141
141
|
const escapeColumnNames = (...columnNames) =>
|
|
142
142
|
arrayJoin(arrayMap(columnNames, escapeId), COMMA);
|
|
143
|
-
const
|
|
143
|
+
const anonymousPlaceholder = () => '?';
|
|
144
|
+
const getPlaceholders = (array, getPlaceholder, offset = [1]) =>
|
|
144
145
|
arrayJoin(
|
|
145
|
-
arrayMap(array, () =>
|
|
146
|
+
arrayMap(array, () => getPlaceholder(offset)),
|
|
146
147
|
COMMA,
|
|
147
148
|
);
|
|
148
149
|
const getWhereCondition = (tableName, condition = TRUE) =>
|
|
@@ -1004,6 +1005,7 @@ const getCommandFunctions = (
|
|
|
1004
1005
|
managedTableNames,
|
|
1005
1006
|
querySchema,
|
|
1006
1007
|
columnType,
|
|
1008
|
+
getPlaceholder,
|
|
1007
1009
|
upsert = defaultUpsert,
|
|
1008
1010
|
encode,
|
|
1009
1011
|
decode,
|
|
@@ -1214,7 +1216,7 @@ const getCommandFunctions = (
|
|
|
1214
1216
|
DELETE_FROM +
|
|
1215
1217
|
escapeId(tableName) +
|
|
1216
1218
|
getWhereCondition(tableName, condition) +
|
|
1217
|
-
`AND(${escapeId(rowIdColumnName)}=$1)`,
|
|
1219
|
+
`AND(${escapeId(rowIdColumnName)}=${getPlaceholder([1])})`,
|
|
1218
1220
|
[rowId],
|
|
1219
1221
|
);
|
|
1220
1222
|
} else if (!isEmpty(settingColumnNames)) {
|
|
@@ -1233,6 +1235,7 @@ const getCommandFunctions = (
|
|
|
1233
1235
|
encode ? encode(row[cellId]) : row[cellId],
|
|
1234
1236
|
),
|
|
1235
1237
|
},
|
|
1238
|
+
getPlaceholder,
|
|
1236
1239
|
currentColumnNames,
|
|
1237
1240
|
);
|
|
1238
1241
|
}
|
|
@@ -1266,13 +1269,14 @@ const getCommandFunctions = (
|
|
|
1266
1269
|
rowIdColumnName,
|
|
1267
1270
|
changingColumnNames,
|
|
1268
1271
|
rows,
|
|
1272
|
+
getPlaceholder,
|
|
1269
1273
|
currentColumnNames,
|
|
1270
1274
|
);
|
|
1271
1275
|
await executeCommand(
|
|
1272
1276
|
DELETE_FROM +
|
|
1273
1277
|
escapeId(tableName) +
|
|
1274
1278
|
getWhereCondition(tableName, condition) + // eslint-disable-next-line max-len
|
|
1275
|
-
`AND${escapeId(rowIdColumnName)}NOT IN(${getPlaceholders(deleteRowIds)})`,
|
|
1279
|
+
`AND${escapeId(rowIdColumnName)}NOT IN(${getPlaceholders(deleteRowIds, getPlaceholder)})`,
|
|
1276
1280
|
deleteRowIds,
|
|
1277
1281
|
);
|
|
1278
1282
|
} else if (
|
|
@@ -1315,6 +1319,7 @@ const defaultUpsert = async (
|
|
|
1315
1319
|
rowIdColumnName,
|
|
1316
1320
|
changingColumnNames,
|
|
1317
1321
|
rows,
|
|
1322
|
+
getPlaceholder,
|
|
1318
1323
|
) => {
|
|
1319
1324
|
const offset = [1];
|
|
1320
1325
|
await executeCommand(
|
|
@@ -1328,7 +1333,11 @@ const defaultUpsert = async (
|
|
|
1328
1333
|
objToArray(
|
|
1329
1334
|
rows,
|
|
1330
1335
|
(row) =>
|
|
1331
|
-
'(
|
|
1336
|
+
'(' +
|
|
1337
|
+
getPlaceholder(offset) +
|
|
1338
|
+
',' +
|
|
1339
|
+
getPlaceholders(row, getPlaceholder, offset) +
|
|
1340
|
+
')',
|
|
1332
1341
|
),
|
|
1333
1342
|
COMMA,
|
|
1334
1343
|
) +
|
|
@@ -1364,6 +1373,7 @@ const createJsonPersister = (
|
|
|
1364
1373
|
thing,
|
|
1365
1374
|
getThing,
|
|
1366
1375
|
columnType,
|
|
1376
|
+
getPlaceholder,
|
|
1367
1377
|
upsert,
|
|
1368
1378
|
_encode,
|
|
1369
1379
|
_decode,
|
|
@@ -1375,6 +1385,7 @@ const createJsonPersister = (
|
|
|
1375
1385
|
managedTableNames,
|
|
1376
1386
|
querySchema,
|
|
1377
1387
|
columnType,
|
|
1388
|
+
getPlaceholder,
|
|
1378
1389
|
upsert,
|
|
1379
1390
|
void 0,
|
|
1380
1391
|
void 0,
|
|
@@ -1442,6 +1453,7 @@ const createTabularPersister = (
|
|
|
1442
1453
|
thing,
|
|
1443
1454
|
getThing,
|
|
1444
1455
|
columnType,
|
|
1456
|
+
getPlaceholder,
|
|
1445
1457
|
upsert,
|
|
1446
1458
|
encode,
|
|
1447
1459
|
decode,
|
|
@@ -1453,6 +1465,7 @@ const createTabularPersister = (
|
|
|
1453
1465
|
managedTableNames,
|
|
1454
1466
|
querySchema,
|
|
1455
1467
|
columnType,
|
|
1468
|
+
getPlaceholder,
|
|
1456
1469
|
upsert,
|
|
1457
1470
|
encode,
|
|
1458
1471
|
decode,
|
|
@@ -1712,12 +1725,13 @@ const createCustomSqlitePersister = (
|
|
|
1712
1725
|
async (executeCommand2, managedTableNames) =>
|
|
1713
1726
|
await executeCommand2(
|
|
1714
1727
|
SELECT + // eslint-disable-next-line max-len
|
|
1715
|
-
` 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`,
|
|
1728
|
+
` 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`,
|
|
1716
1729
|
managedTableNames,
|
|
1717
1730
|
),
|
|
1718
1731
|
thing,
|
|
1719
1732
|
getThing,
|
|
1720
1733
|
EMPTY_STRING,
|
|
1734
|
+
anonymousPlaceholder,
|
|
1721
1735
|
upsert,
|
|
1722
1736
|
(cellOrValue) =>
|
|
1723
1737
|
isTrue(cellOrValue) ? 1 : isFalse(cellOrValue) ? 0 : cellOrValue,
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
const TINYBASE = 'tinybase';
|
|
2
2
|
const EMPTY_STRING = '';
|
|
3
|
+
const M = 'm';
|
|
3
4
|
const T = 't';
|
|
4
5
|
const V = 'v';
|
|
5
6
|
const UNDEFINED = '\uFFFC';
|
|
@@ -773,7 +774,10 @@ const createCustomPersister = (
|
|
|
773
774
|
return objFreeze(persister);
|
|
774
775
|
};
|
|
775
776
|
|
|
776
|
-
const
|
|
777
|
+
const CONTENT_OBJECT_STORE_NAMES = [T, V];
|
|
778
|
+
const MERGEABLE_OBJECT_STORE_NAMES = [M];
|
|
779
|
+
const OBJECT_STORE_NAMES = [...CONTENT_OBJECT_STORE_NAMES, M];
|
|
780
|
+
const VERSION = 3;
|
|
777
781
|
const KEY_PATH = {keyPath: 'k'};
|
|
778
782
|
const objectStoreMatch = async (objectStore, obj) => {
|
|
779
783
|
const actions = objToArray(obj, (v, k) =>
|
|
@@ -799,6 +803,7 @@ const createIndexedDbPersister = (
|
|
|
799
803
|
onIgnoredError,
|
|
800
804
|
) => {
|
|
801
805
|
const forObjectStores = async (
|
|
806
|
+
objectStoreNames,
|
|
802
807
|
forObjectStore,
|
|
803
808
|
params = [],
|
|
804
809
|
create = 0,
|
|
@@ -807,7 +812,7 @@ const createIndexedDbPersister = (
|
|
|
807
812
|
promiseNew((resolve, reject) => {
|
|
808
813
|
const request = (WINDOW ? WINDOW.indexedDB : indexedDB).open(
|
|
809
814
|
dbName,
|
|
810
|
-
create ?
|
|
815
|
+
create ? VERSION : void 0,
|
|
811
816
|
);
|
|
812
817
|
let blocked = 0;
|
|
813
818
|
request.onupgradeneeded = () =>
|
|
@@ -828,7 +833,7 @@ const createIndexedDbPersister = (
|
|
|
828
833
|
async () => {
|
|
829
834
|
request.result.onversionchange = () => request.result.close();
|
|
830
835
|
const transaction = request.result.transaction(
|
|
831
|
-
|
|
836
|
+
objectStoreNames,
|
|
832
837
|
mode,
|
|
833
838
|
);
|
|
834
839
|
const transactionComplete = promiseNew((resolve2, reject2) => {
|
|
@@ -838,7 +843,7 @@ const createIndexedDbPersister = (
|
|
|
838
843
|
});
|
|
839
844
|
const [result] = await promiseAll([
|
|
840
845
|
promiseAll(
|
|
841
|
-
arrayMap(
|
|
846
|
+
arrayMap(objectStoreNames, (objectStoreName, index) =>
|
|
842
847
|
forObjectStore(
|
|
843
848
|
transaction.objectStore(objectStoreName),
|
|
844
849
|
params[index],
|
|
@@ -857,22 +862,45 @@ const createIndexedDbPersister = (
|
|
|
857
862
|
);
|
|
858
863
|
request.onerror = () => reject(errorNew(ERROR_INDEXED_DB_OPEN));
|
|
859
864
|
});
|
|
860
|
-
const
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
]),
|
|
867
|
-
),
|
|
865
|
+
const getObjectStoreEntries = async (objectStore) =>
|
|
866
|
+
objNew(
|
|
867
|
+
arrayMap(await execObjectStore(objectStore, 'getAll'), ({k, v}) => [
|
|
868
|
+
k,
|
|
869
|
+
v,
|
|
870
|
+
]),
|
|
868
871
|
);
|
|
869
|
-
const
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
872
|
+
const getPersisted = async () => {
|
|
873
|
+
if (!store.isMergeable()) {
|
|
874
|
+
return await forObjectStores(
|
|
875
|
+
CONTENT_OBJECT_STORE_NAMES,
|
|
876
|
+
getObjectStoreEntries,
|
|
877
|
+
);
|
|
878
|
+
}
|
|
879
|
+
const [mergeable] = await forObjectStores(
|
|
880
|
+
MERGEABLE_OBJECT_STORE_NAMES,
|
|
881
|
+
getObjectStoreEntries,
|
|
875
882
|
);
|
|
883
|
+
return objHas(mergeable, T) ? [mergeable[T], mergeable[V]] : void 0;
|
|
884
|
+
};
|
|
885
|
+
const setPersisted = async (getContent) => {
|
|
886
|
+
const content = getContent();
|
|
887
|
+
await (store.isMergeable()
|
|
888
|
+
? forObjectStores(
|
|
889
|
+
MERGEABLE_OBJECT_STORE_NAMES,
|
|
890
|
+
(objectStore, mergeable) => objectStoreMatch(objectStore, mergeable),
|
|
891
|
+
[{[T]: content[0], [V]: content[1]}],
|
|
892
|
+
1,
|
|
893
|
+
'readwrite',
|
|
894
|
+
)
|
|
895
|
+
: forObjectStores(
|
|
896
|
+
CONTENT_OBJECT_STORE_NAMES,
|
|
897
|
+
(objectStore, tablesOrValues) =>
|
|
898
|
+
objectStoreMatch(objectStore, tablesOrValues),
|
|
899
|
+
content,
|
|
900
|
+
1,
|
|
901
|
+
'readwrite',
|
|
902
|
+
));
|
|
903
|
+
};
|
|
876
904
|
const addPersisterListener = (listener) =>
|
|
877
905
|
getPersisted().then((content) => {
|
|
878
906
|
let active = 1;
|
|
@@ -915,8 +943,8 @@ const createIndexedDbPersister = (
|
|
|
915
943
|
addPersisterListener,
|
|
916
944
|
delPersisterListener,
|
|
917
945
|
onIgnoredError,
|
|
918
|
-
|
|
919
|
-
//
|
|
946
|
+
3,
|
|
947
|
+
// StoreOrMergeableStore,
|
|
920
948
|
{getDbName: () => dbName},
|
|
921
949
|
);
|
|
922
950
|
};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
const TINYBASE = 'tinybase';
|
|
2
2
|
const EMPTY_STRING = '';
|
|
3
|
+
const M = 'm';
|
|
3
4
|
const T = 't';
|
|
4
5
|
const V = 'v';
|
|
5
6
|
const UNDEFINED = '\uFFFC';
|
|
@@ -773,7 +774,10 @@ const createCustomPersister = (
|
|
|
773
774
|
return objFreeze(persister);
|
|
774
775
|
};
|
|
775
776
|
|
|
776
|
-
const
|
|
777
|
+
const CONTENT_OBJECT_STORE_NAMES = [T, V];
|
|
778
|
+
const MERGEABLE_OBJECT_STORE_NAMES = [M];
|
|
779
|
+
const OBJECT_STORE_NAMES = [...CONTENT_OBJECT_STORE_NAMES, M];
|
|
780
|
+
const VERSION = 3;
|
|
777
781
|
const KEY_PATH = {keyPath: 'k'};
|
|
778
782
|
const objectStoreMatch = async (objectStore, obj) => {
|
|
779
783
|
const actions = objToArray(obj, (v, k) =>
|
|
@@ -799,6 +803,7 @@ const createIndexedDbPersister = (
|
|
|
799
803
|
onIgnoredError,
|
|
800
804
|
) => {
|
|
801
805
|
const forObjectStores = async (
|
|
806
|
+
objectStoreNames,
|
|
802
807
|
forObjectStore,
|
|
803
808
|
params = [],
|
|
804
809
|
create = 0,
|
|
@@ -807,7 +812,7 @@ const createIndexedDbPersister = (
|
|
|
807
812
|
promiseNew((resolve, reject) => {
|
|
808
813
|
const request = (WINDOW ? WINDOW.indexedDB : indexedDB).open(
|
|
809
814
|
dbName,
|
|
810
|
-
create ?
|
|
815
|
+
create ? VERSION : void 0,
|
|
811
816
|
);
|
|
812
817
|
let blocked = 0;
|
|
813
818
|
request.onupgradeneeded = () =>
|
|
@@ -828,7 +833,7 @@ const createIndexedDbPersister = (
|
|
|
828
833
|
async () => {
|
|
829
834
|
request.result.onversionchange = () => request.result.close();
|
|
830
835
|
const transaction = request.result.transaction(
|
|
831
|
-
|
|
836
|
+
objectStoreNames,
|
|
832
837
|
mode,
|
|
833
838
|
);
|
|
834
839
|
const transactionComplete = promiseNew((resolve2, reject2) => {
|
|
@@ -838,7 +843,7 @@ const createIndexedDbPersister = (
|
|
|
838
843
|
});
|
|
839
844
|
const [result] = await promiseAll([
|
|
840
845
|
promiseAll(
|
|
841
|
-
arrayMap(
|
|
846
|
+
arrayMap(objectStoreNames, (objectStoreName, index) =>
|
|
842
847
|
forObjectStore(
|
|
843
848
|
transaction.objectStore(objectStoreName),
|
|
844
849
|
params[index],
|
|
@@ -857,22 +862,45 @@ const createIndexedDbPersister = (
|
|
|
857
862
|
);
|
|
858
863
|
request.onerror = () => reject(errorNew(ERROR_INDEXED_DB_OPEN));
|
|
859
864
|
});
|
|
860
|
-
const
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
]),
|
|
867
|
-
),
|
|
865
|
+
const getObjectStoreEntries = async (objectStore) =>
|
|
866
|
+
objNew(
|
|
867
|
+
arrayMap(await execObjectStore(objectStore, 'getAll'), ({k, v}) => [
|
|
868
|
+
k,
|
|
869
|
+
v,
|
|
870
|
+
]),
|
|
868
871
|
);
|
|
869
|
-
const
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
872
|
+
const getPersisted = async () => {
|
|
873
|
+
if (!store.isMergeable()) {
|
|
874
|
+
return await forObjectStores(
|
|
875
|
+
CONTENT_OBJECT_STORE_NAMES,
|
|
876
|
+
getObjectStoreEntries,
|
|
877
|
+
);
|
|
878
|
+
}
|
|
879
|
+
const [mergeable] = await forObjectStores(
|
|
880
|
+
MERGEABLE_OBJECT_STORE_NAMES,
|
|
881
|
+
getObjectStoreEntries,
|
|
875
882
|
);
|
|
883
|
+
return objHas(mergeable, T) ? [mergeable[T], mergeable[V]] : void 0;
|
|
884
|
+
};
|
|
885
|
+
const setPersisted = async (getContent) => {
|
|
886
|
+
const content = getContent();
|
|
887
|
+
await (store.isMergeable()
|
|
888
|
+
? forObjectStores(
|
|
889
|
+
MERGEABLE_OBJECT_STORE_NAMES,
|
|
890
|
+
(objectStore, mergeable) => objectStoreMatch(objectStore, mergeable),
|
|
891
|
+
[{[T]: content[0], [V]: content[1]}],
|
|
892
|
+
1,
|
|
893
|
+
'readwrite',
|
|
894
|
+
)
|
|
895
|
+
: forObjectStores(
|
|
896
|
+
CONTENT_OBJECT_STORE_NAMES,
|
|
897
|
+
(objectStore, tablesOrValues) =>
|
|
898
|
+
objectStoreMatch(objectStore, tablesOrValues),
|
|
899
|
+
content,
|
|
900
|
+
1,
|
|
901
|
+
'readwrite',
|
|
902
|
+
));
|
|
903
|
+
};
|
|
876
904
|
const addPersisterListener = (listener) =>
|
|
877
905
|
getPersisted().then((content) => {
|
|
878
906
|
let active = 1;
|
|
@@ -915,8 +943,8 @@ const createIndexedDbPersister = (
|
|
|
915
943
|
addPersisterListener,
|
|
916
944
|
delPersisterListener,
|
|
917
945
|
onIgnoredError,
|
|
918
|
-
|
|
919
|
-
//
|
|
946
|
+
3,
|
|
947
|
+
// StoreOrMergeableStore,
|
|
920
948
|
{getDbName: () => dbName},
|
|
921
949
|
);
|
|
922
950
|
};
|