tinybase 10.0.0-beta.0 → 10.0.0-beta.2
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/common/index.d.ts +1 -0
- package/@types/common/with-schemas/index.d.ts +1 -0
- package/@types/indexes/index.d.ts +4 -3
- package/@types/indexes/with-schemas/index.d.ts +4 -3
- package/@types/metrics/index.d.ts +1 -0
- package/@types/metrics/with-schemas/index.d.ts +1 -0
- package/@types/omni/index.d.ts +1 -0
- package/@types/omni/with-schemas/index.d.ts +1 -0
- package/@types/persisters/index.d.ts +1 -0
- package/@types/persisters/persister-partykit-server/index.d.ts +17 -0
- package/@types/persisters/persister-partykit-server/with-schemas/index.d.ts +17 -0
- package/@types/persisters/persister-tinyjoin/index.d.ts +197 -0
- package/@types/persisters/persister-tinyjoin/with-schemas/index.d.ts +221 -0
- package/@types/persisters/with-schemas/index.d.ts +1 -0
- package/@types/queries/index.d.ts +3 -0
- package/@types/queries/with-schemas/index.d.ts +3 -0
- package/@types/relationships/index.d.ts +1 -0
- package/@types/relationships/with-schemas/index.d.ts +1 -0
- package/@types/store/index.d.ts +4 -0
- package/@types/store/with-schemas/index.d.ts +4 -0
- package/@types/ui-react/index.d.ts +2 -0
- package/@types/ui-react/with-schemas/index.d.ts +1 -0
- package/@types/ui-react-dom-charts/index.d.ts +7 -0
- package/@types/ui-react-dom-charts/with-schemas/index.d.ts +7 -0
- package/@types/ui-solid/index.d.ts +2 -0
- package/@types/ui-solid/with-schemas/index.d.ts +1 -0
- package/@types/ui-svelte/index.d.ts +23 -0
- package/@types/ui-svelte/with-schemas/index.d.ts +23 -0
- package/@types/ui-svelte-dom/index.d.ts +10 -0
- package/@types/ui-svelte-dom/with-schemas/index.d.ts +10 -0
- package/@types/ui-svelte-inspector/index.d.ts +1 -0
- package/@types/ui-svelte-inspector/with-schemas/index.d.ts +1 -0
- package/checkpoints/index.js +4 -2
- package/checkpoints/with-schemas/index.js +4 -2
- package/index.js +37 -4
- package/metrics/index.js +2 -1
- package/metrics/with-schemas/index.js +2 -1
- package/min/checkpoints/index.js +1 -1
- package/min/checkpoints/index.js.gz +0 -0
- package/min/checkpoints/with-schemas/index.js +1 -1
- package/min/checkpoints/with-schemas/index.js.gz +0 -0
- package/min/index.js +1 -1
- package/min/index.js.gz +0 -0
- package/min/metrics/index.js +1 -1
- package/min/metrics/index.js.gz +0 -0
- package/min/metrics/with-schemas/index.js +1 -1
- package/min/metrics/with-schemas/index.js.gz +0 -0
- 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 -1
- package/min/persisters/persister-better-sqlite3/index.js.gz +0 -0
- package/min/persisters/persister-better-sqlite3/with-schemas/index.js +1 -1
- package/min/persisters/persister-better-sqlite3/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-capacitor-sqlite/index.js +1 -1
- package/min/persisters/persister-capacitor-sqlite/index.js.gz +0 -0
- package/min/persisters/persister-capacitor-sqlite/with-schemas/index.js +1 -1
- 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-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 -1
- package/min/persisters/persister-pg/index.js.gz +0 -0
- package/min/persisters/persister-pg/with-schemas/index.js +1 -1
- 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-node/index.js +1 -1
- package/min/persisters/persister-sqlite-node/index.js.gz +0 -0
- package/min/persisters/persister-sqlite-node/with-schemas/index.js +1 -1
- package/min/persisters/persister-sqlite-node/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-tinyjoin/index.js +1 -0
- package/min/persisters/persister-tinyjoin/index.js.gz +0 -0
- package/min/persisters/persister-tinyjoin/with-schemas/index.js +1 -0
- package/min/persisters/persister-tinyjoin/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/min/queries/index.js +1 -1
- package/min/queries/index.js.gz +0 -0
- package/min/queries/with-schemas/index.js +1 -1
- package/min/queries/with-schemas/index.js.gz +0 -0
- package/min/relationships/index.js +1 -1
- package/min/relationships/index.js.gz +0 -0
- package/min/relationships/with-schemas/index.js +1 -1
- package/min/relationships/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-local/index.js +1 -1
- package/min/synchronizers/synchronizer-local/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-local/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-local/with-schemas/index.js.gz +0 -0
- package/min/with-schemas/index.js +1 -1
- package/min/with-schemas/index.js.gz +0 -0
- package/omni/index.js +205 -94
- package/omni/with-schemas/index.js +205 -94
- package/package.json +54 -14
- package/persisters/index.js +28 -13
- package/persisters/persister-better-sqlite3/index.js +70 -55
- package/persisters/persister-better-sqlite3/with-schemas/index.js +70 -55
- package/persisters/persister-capacitor-sqlite/index.js +70 -55
- package/persisters/persister-capacitor-sqlite/with-schemas/index.js +70 -55
- package/persisters/persister-cr-sqlite-wasm/index.js +70 -55
- package/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +70 -55
- package/persisters/persister-durable-object-sql-storage/index.js +28 -13
- package/persisters/persister-durable-object-sql-storage/with-schemas/index.js +28 -13
- package/persisters/persister-electric-sql/index.js +70 -55
- package/persisters/persister-electric-sql/with-schemas/index.js +70 -55
- package/persisters/persister-expo-sqlite/index.js +70 -55
- package/persisters/persister-expo-sqlite/with-schemas/index.js +70 -55
- package/persisters/persister-libsql/index.js +91 -78
- package/persisters/persister-libsql/with-schemas/index.js +91 -78
- package/persisters/persister-pg/index.js +77 -62
- package/persisters/persister-pg/with-schemas/index.js +77 -62
- package/persisters/persister-pglite/index.js +28 -13
- package/persisters/persister-pglite/with-schemas/index.js +28 -13
- package/persisters/persister-postgres/index.js +28 -13
- package/persisters/persister-postgres/with-schemas/index.js +28 -13
- package/persisters/persister-powersync/index.js +81 -66
- package/persisters/persister-powersync/with-schemas/index.js +81 -66
- package/persisters/persister-react-native-sqlite/index.js +70 -55
- package/persisters/persister-react-native-sqlite/with-schemas/index.js +70 -55
- package/persisters/persister-sqlite-bun/index.js +70 -55
- package/persisters/persister-sqlite-bun/with-schemas/index.js +70 -55
- package/persisters/persister-sqlite-node/index.js +70 -55
- package/persisters/persister-sqlite-node/with-schemas/index.js +70 -55
- package/persisters/persister-sqlite-wasm/index.js +70 -55
- package/persisters/persister-sqlite-wasm/with-schemas/index.js +70 -55
- package/persisters/persister-sqlite3/index.js +70 -55
- package/persisters/persister-sqlite3/with-schemas/index.js +70 -55
- package/persisters/persister-tinyjoin/index.js +1710 -0
- package/persisters/persister-tinyjoin/with-schemas/index.js +1710 -0
- package/persisters/with-schemas/index.js +28 -13
- package/queries/index.js +2 -1
- package/queries/with-schemas/index.js +2 -1
- package/readme.md +3 -3
- package/relationships/index.js +39 -9
- package/relationships/with-schemas/index.js +39 -9
- package/releases.md +20 -1
- package/synchronizers/synchronizer-local/index.js +1 -1
- package/synchronizers/synchronizer-local/with-schemas/index.js +1 -1
- package/with-schemas/index.js +37 -4
|
@@ -185,10 +185,74 @@ const getPlaceholders = (array, getPlaceholder, offset = [1]) =>
|
|
|
185
185
|
arrayMap(array, () => getPlaceholder(offset)),
|
|
186
186
|
COMMA,
|
|
187
187
|
);
|
|
188
|
-
const
|
|
189
|
-
|
|
188
|
+
const getWhere = (tableName, condition = TRUE, extraCondition) => {
|
|
189
|
+
const conditions = arrayFilter(
|
|
190
|
+
[
|
|
191
|
+
condition == TRUE
|
|
192
|
+
? void 0
|
|
193
|
+
: `(${replaceTableName(condition, escapeId(tableName))})`,
|
|
194
|
+
extraCondition,
|
|
195
|
+
],
|
|
196
|
+
(condition2) => !isUndefined(condition2),
|
|
197
|
+
);
|
|
198
|
+
return isEmpty(conditions)
|
|
199
|
+
? EMPTY_STRING
|
|
200
|
+
: WHERE + arrayJoin(conditions, 'AND');
|
|
201
|
+
};
|
|
190
202
|
const replaceTableName = (condition, tableName) =>
|
|
191
203
|
strReplace(condition, TABLE_NAME_PLACEHOLDER_REGEX, tableName);
|
|
204
|
+
const updateThenInsertUpsert = async (
|
|
205
|
+
executeCommand,
|
|
206
|
+
tableName,
|
|
207
|
+
rowIdColumnName,
|
|
208
|
+
changingColumnNames,
|
|
209
|
+
rows,
|
|
210
|
+
getPlaceholder,
|
|
211
|
+
) => {
|
|
212
|
+
const updateOffset = [1];
|
|
213
|
+
const assignments = arrayJoin(
|
|
214
|
+
arrayMap(
|
|
215
|
+
changingColumnNames,
|
|
216
|
+
(columnName) => escapeId(columnName) + '=' + getPlaceholder(updateOffset),
|
|
217
|
+
),
|
|
218
|
+
COMMA,
|
|
219
|
+
);
|
|
220
|
+
const rowIdPlaceholder = getPlaceholder(updateOffset);
|
|
221
|
+
for (const [id, row] of objToArray(rows, (row2, id2) => [id2, row2])) {
|
|
222
|
+
const rowParams = arrayMap(row, (value) => value ?? null);
|
|
223
|
+
if (
|
|
224
|
+
isEmpty(
|
|
225
|
+
await executeCommand(
|
|
226
|
+
UPDATE +
|
|
227
|
+
escapeId(tableName) +
|
|
228
|
+
' SET' +
|
|
229
|
+
assignments +
|
|
230
|
+
' ' +
|
|
231
|
+
WHERE +
|
|
232
|
+
escapeId(rowIdColumnName) +
|
|
233
|
+
'=' +
|
|
234
|
+
rowIdPlaceholder +
|
|
235
|
+
' RETURNING' +
|
|
236
|
+
escapeId(rowIdColumnName),
|
|
237
|
+
[...rowParams, id],
|
|
238
|
+
),
|
|
239
|
+
)
|
|
240
|
+
) {
|
|
241
|
+
const offset = [1];
|
|
242
|
+
await executeCommand(
|
|
243
|
+
INSERT +
|
|
244
|
+
' INTO' +
|
|
245
|
+
escapeId(tableName) +
|
|
246
|
+
'(' +
|
|
247
|
+
escapeColumnNames(rowIdColumnName, ...changingColumnNames) +
|
|
248
|
+
')VALUES(' +
|
|
249
|
+
getPlaceholders([id, ...row], getPlaceholder, offset) +
|
|
250
|
+
')',
|
|
251
|
+
[id, ...rowParams],
|
|
252
|
+
);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
};
|
|
192
256
|
|
|
193
257
|
const collSize = (coll) => coll?.size ?? 0;
|
|
194
258
|
const collHas = (coll, keyOrValue) => coll?.has(keyOrValue) ?? false;
|
|
@@ -1045,7 +1109,7 @@ const getCommandFunctions = (
|
|
|
1045
1109
|
await executeCommand(
|
|
1046
1110
|
SELECT_STAR_FROM +
|
|
1047
1111
|
escapeId(tableName) +
|
|
1048
|
-
|
|
1112
|
+
getWhere(tableName, condition),
|
|
1049
1113
|
),
|
|
1050
1114
|
(row) => {
|
|
1051
1115
|
const rowId = row[rowIdColumnName];
|
|
@@ -1201,9 +1265,7 @@ const getCommandFunctions = (
|
|
|
1201
1265
|
if (isUndefined(content)) {
|
|
1202
1266
|
if (isUndefined(contentSubIdSet)) {
|
|
1203
1267
|
await executeCommand(
|
|
1204
|
-
DELETE_FROM +
|
|
1205
|
-
escapeId(tableName) +
|
|
1206
|
-
getWhereCondition(tableName, condition),
|
|
1268
|
+
DELETE_FROM + escapeId(tableName) + getWhere(tableName, condition),
|
|
1207
1269
|
);
|
|
1208
1270
|
}
|
|
1209
1271
|
} else {
|
|
@@ -1213,8 +1275,11 @@ const getCommandFunctions = (
|
|
|
1213
1275
|
await executeCommand(
|
|
1214
1276
|
DELETE_FROM +
|
|
1215
1277
|
escapeId(tableName) +
|
|
1216
|
-
|
|
1217
|
-
|
|
1278
|
+
getWhere(
|
|
1279
|
+
tableName,
|
|
1280
|
+
condition,
|
|
1281
|
+
`(${escapeId(rowIdColumnName)}=${getPlaceholder([1])})`,
|
|
1282
|
+
),
|
|
1218
1283
|
[rowId],
|
|
1219
1284
|
);
|
|
1220
1285
|
} else if (!isEmpty(settingColumnNames)) {
|
|
@@ -1273,8 +1338,12 @@ const getCommandFunctions = (
|
|
|
1273
1338
|
await executeCommand(
|
|
1274
1339
|
DELETE_FROM +
|
|
1275
1340
|
escapeId(tableName) +
|
|
1276
|
-
|
|
1277
|
-
|
|
1341
|
+
getWhere(
|
|
1342
|
+
tableName,
|
|
1343
|
+
condition,
|
|
1344
|
+
// eslint-disable-next-line max-len
|
|
1345
|
+
`${escapeId(rowIdColumnName)}NOT IN(${getPlaceholders(deleteRowIds, getPlaceholder)})`,
|
|
1346
|
+
),
|
|
1278
1347
|
deleteRowIds,
|
|
1279
1348
|
);
|
|
1280
1349
|
} else if (
|
|
@@ -1282,9 +1351,7 @@ const getCommandFunctions = (
|
|
|
1282
1351
|
collHas(schemaMap, tableName)
|
|
1283
1352
|
) {
|
|
1284
1353
|
await executeCommand(
|
|
1285
|
-
DELETE_FROM +
|
|
1286
|
-
escapeId(tableName) +
|
|
1287
|
-
getWhereCondition(tableName, condition),
|
|
1354
|
+
DELETE_FROM + escapeId(tableName) + getWhere(tableName, condition),
|
|
1288
1355
|
);
|
|
1289
1356
|
}
|
|
1290
1357
|
}
|
|
@@ -1779,60 +1846,8 @@ const createPowerSyncPersister = (
|
|
|
1779
1846
|
// StoreOnly,
|
|
1780
1847
|
powerSync,
|
|
1781
1848
|
'getPowerSync',
|
|
1782
|
-
|
|
1783
|
-
);
|
|
1784
|
-
};
|
|
1785
|
-
const powerSyncUpdateThenInsert = async (
|
|
1786
|
-
executeCommand,
|
|
1787
|
-
tableName,
|
|
1788
|
-
rowIdColumnName,
|
|
1789
|
-
changingColumnNames,
|
|
1790
|
-
rows,
|
|
1791
|
-
getPlaceholder,
|
|
1792
|
-
) => {
|
|
1793
|
-
const updateOffset = [1];
|
|
1794
|
-
const assignments = arrayJoin(
|
|
1795
|
-
arrayMap(
|
|
1796
|
-
changingColumnNames,
|
|
1797
|
-
(columnName) => escapeId(columnName) + '=' + getPlaceholder(updateOffset),
|
|
1798
|
-
),
|
|
1799
|
-
COMMA,
|
|
1849
|
+
updateThenInsertUpsert,
|
|
1800
1850
|
);
|
|
1801
|
-
const rowIdPlaceholder = getPlaceholder(updateOffset);
|
|
1802
|
-
for (const [id, row] of objToArray(rows, (row2, id2) => [id2, row2])) {
|
|
1803
|
-
const rowParams = arrayMap(row, (value) => value ?? null);
|
|
1804
|
-
if (
|
|
1805
|
-
isEmpty(
|
|
1806
|
-
await executeCommand(
|
|
1807
|
-
UPDATE +
|
|
1808
|
-
escapeId(tableName) +
|
|
1809
|
-
' SET' +
|
|
1810
|
-
assignments +
|
|
1811
|
-
' ' +
|
|
1812
|
-
WHERE +
|
|
1813
|
-
escapeId(rowIdColumnName) +
|
|
1814
|
-
'=' +
|
|
1815
|
-
rowIdPlaceholder +
|
|
1816
|
-
' RETURNING' +
|
|
1817
|
-
escapeId(rowIdColumnName),
|
|
1818
|
-
[...rowParams, id],
|
|
1819
|
-
),
|
|
1820
|
-
)
|
|
1821
|
-
) {
|
|
1822
|
-
const offset = [1];
|
|
1823
|
-
await executeCommand(
|
|
1824
|
-
INSERT +
|
|
1825
|
-
' INTO' +
|
|
1826
|
-
escapeId(tableName) +
|
|
1827
|
-
'(' +
|
|
1828
|
-
escapeColumnNames(rowIdColumnName, ...changingColumnNames) +
|
|
1829
|
-
')VALUES(' +
|
|
1830
|
-
getPlaceholders([id, ...row], getPlaceholder, offset) +
|
|
1831
|
-
')',
|
|
1832
|
-
[id, ...rowParams],
|
|
1833
|
-
);
|
|
1834
|
-
}
|
|
1835
|
-
}
|
|
1836
1851
|
};
|
|
1837
1852
|
|
|
1838
1853
|
export {createPowerSyncPersister};
|
|
@@ -185,10 +185,74 @@ const getPlaceholders = (array, getPlaceholder, offset = [1]) =>
|
|
|
185
185
|
arrayMap(array, () => getPlaceholder(offset)),
|
|
186
186
|
COMMA,
|
|
187
187
|
);
|
|
188
|
-
const
|
|
189
|
-
|
|
188
|
+
const getWhere = (tableName, condition = TRUE, extraCondition) => {
|
|
189
|
+
const conditions = arrayFilter(
|
|
190
|
+
[
|
|
191
|
+
condition == TRUE
|
|
192
|
+
? void 0
|
|
193
|
+
: `(${replaceTableName(condition, escapeId(tableName))})`,
|
|
194
|
+
extraCondition,
|
|
195
|
+
],
|
|
196
|
+
(condition2) => !isUndefined(condition2),
|
|
197
|
+
);
|
|
198
|
+
return isEmpty(conditions)
|
|
199
|
+
? EMPTY_STRING
|
|
200
|
+
: WHERE + arrayJoin(conditions, 'AND');
|
|
201
|
+
};
|
|
190
202
|
const replaceTableName = (condition, tableName) =>
|
|
191
203
|
strReplace(condition, TABLE_NAME_PLACEHOLDER_REGEX, tableName);
|
|
204
|
+
const updateThenInsertUpsert = async (
|
|
205
|
+
executeCommand,
|
|
206
|
+
tableName,
|
|
207
|
+
rowIdColumnName,
|
|
208
|
+
changingColumnNames,
|
|
209
|
+
rows,
|
|
210
|
+
getPlaceholder,
|
|
211
|
+
) => {
|
|
212
|
+
const updateOffset = [1];
|
|
213
|
+
const assignments = arrayJoin(
|
|
214
|
+
arrayMap(
|
|
215
|
+
changingColumnNames,
|
|
216
|
+
(columnName) => escapeId(columnName) + '=' + getPlaceholder(updateOffset),
|
|
217
|
+
),
|
|
218
|
+
COMMA,
|
|
219
|
+
);
|
|
220
|
+
const rowIdPlaceholder = getPlaceholder(updateOffset);
|
|
221
|
+
for (const [id, row] of objToArray(rows, (row2, id2) => [id2, row2])) {
|
|
222
|
+
const rowParams = arrayMap(row, (value) => value ?? null);
|
|
223
|
+
if (
|
|
224
|
+
isEmpty(
|
|
225
|
+
await executeCommand(
|
|
226
|
+
UPDATE +
|
|
227
|
+
escapeId(tableName) +
|
|
228
|
+
' SET' +
|
|
229
|
+
assignments +
|
|
230
|
+
' ' +
|
|
231
|
+
WHERE +
|
|
232
|
+
escapeId(rowIdColumnName) +
|
|
233
|
+
'=' +
|
|
234
|
+
rowIdPlaceholder +
|
|
235
|
+
' RETURNING' +
|
|
236
|
+
escapeId(rowIdColumnName),
|
|
237
|
+
[...rowParams, id],
|
|
238
|
+
),
|
|
239
|
+
)
|
|
240
|
+
) {
|
|
241
|
+
const offset = [1];
|
|
242
|
+
await executeCommand(
|
|
243
|
+
INSERT +
|
|
244
|
+
' INTO' +
|
|
245
|
+
escapeId(tableName) +
|
|
246
|
+
'(' +
|
|
247
|
+
escapeColumnNames(rowIdColumnName, ...changingColumnNames) +
|
|
248
|
+
')VALUES(' +
|
|
249
|
+
getPlaceholders([id, ...row], getPlaceholder, offset) +
|
|
250
|
+
')',
|
|
251
|
+
[id, ...rowParams],
|
|
252
|
+
);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
};
|
|
192
256
|
|
|
193
257
|
const collSize = (coll) => coll?.size ?? 0;
|
|
194
258
|
const collHas = (coll, keyOrValue) => coll?.has(keyOrValue) ?? false;
|
|
@@ -1045,7 +1109,7 @@ const getCommandFunctions = (
|
|
|
1045
1109
|
await executeCommand(
|
|
1046
1110
|
SELECT_STAR_FROM +
|
|
1047
1111
|
escapeId(tableName) +
|
|
1048
|
-
|
|
1112
|
+
getWhere(tableName, condition),
|
|
1049
1113
|
),
|
|
1050
1114
|
(row) => {
|
|
1051
1115
|
const rowId = row[rowIdColumnName];
|
|
@@ -1201,9 +1265,7 @@ const getCommandFunctions = (
|
|
|
1201
1265
|
if (isUndefined(content)) {
|
|
1202
1266
|
if (isUndefined(contentSubIdSet)) {
|
|
1203
1267
|
await executeCommand(
|
|
1204
|
-
DELETE_FROM +
|
|
1205
|
-
escapeId(tableName) +
|
|
1206
|
-
getWhereCondition(tableName, condition),
|
|
1268
|
+
DELETE_FROM + escapeId(tableName) + getWhere(tableName, condition),
|
|
1207
1269
|
);
|
|
1208
1270
|
}
|
|
1209
1271
|
} else {
|
|
@@ -1213,8 +1275,11 @@ const getCommandFunctions = (
|
|
|
1213
1275
|
await executeCommand(
|
|
1214
1276
|
DELETE_FROM +
|
|
1215
1277
|
escapeId(tableName) +
|
|
1216
|
-
|
|
1217
|
-
|
|
1278
|
+
getWhere(
|
|
1279
|
+
tableName,
|
|
1280
|
+
condition,
|
|
1281
|
+
`(${escapeId(rowIdColumnName)}=${getPlaceholder([1])})`,
|
|
1282
|
+
),
|
|
1218
1283
|
[rowId],
|
|
1219
1284
|
);
|
|
1220
1285
|
} else if (!isEmpty(settingColumnNames)) {
|
|
@@ -1273,8 +1338,12 @@ const getCommandFunctions = (
|
|
|
1273
1338
|
await executeCommand(
|
|
1274
1339
|
DELETE_FROM +
|
|
1275
1340
|
escapeId(tableName) +
|
|
1276
|
-
|
|
1277
|
-
|
|
1341
|
+
getWhere(
|
|
1342
|
+
tableName,
|
|
1343
|
+
condition,
|
|
1344
|
+
// eslint-disable-next-line max-len
|
|
1345
|
+
`${escapeId(rowIdColumnName)}NOT IN(${getPlaceholders(deleteRowIds, getPlaceholder)})`,
|
|
1346
|
+
),
|
|
1278
1347
|
deleteRowIds,
|
|
1279
1348
|
);
|
|
1280
1349
|
} else if (
|
|
@@ -1282,9 +1351,7 @@ const getCommandFunctions = (
|
|
|
1282
1351
|
collHas(schemaMap, tableName)
|
|
1283
1352
|
) {
|
|
1284
1353
|
await executeCommand(
|
|
1285
|
-
DELETE_FROM +
|
|
1286
|
-
escapeId(tableName) +
|
|
1287
|
-
getWhereCondition(tableName, condition),
|
|
1354
|
+
DELETE_FROM + escapeId(tableName) + getWhere(tableName, condition),
|
|
1288
1355
|
);
|
|
1289
1356
|
}
|
|
1290
1357
|
}
|
|
@@ -1779,60 +1846,8 @@ const createPowerSyncPersister = (
|
|
|
1779
1846
|
// StoreOnly,
|
|
1780
1847
|
powerSync,
|
|
1781
1848
|
'getPowerSync',
|
|
1782
|
-
|
|
1783
|
-
);
|
|
1784
|
-
};
|
|
1785
|
-
const powerSyncUpdateThenInsert = async (
|
|
1786
|
-
executeCommand,
|
|
1787
|
-
tableName,
|
|
1788
|
-
rowIdColumnName,
|
|
1789
|
-
changingColumnNames,
|
|
1790
|
-
rows,
|
|
1791
|
-
getPlaceholder,
|
|
1792
|
-
) => {
|
|
1793
|
-
const updateOffset = [1];
|
|
1794
|
-
const assignments = arrayJoin(
|
|
1795
|
-
arrayMap(
|
|
1796
|
-
changingColumnNames,
|
|
1797
|
-
(columnName) => escapeId(columnName) + '=' + getPlaceholder(updateOffset),
|
|
1798
|
-
),
|
|
1799
|
-
COMMA,
|
|
1849
|
+
updateThenInsertUpsert,
|
|
1800
1850
|
);
|
|
1801
|
-
const rowIdPlaceholder = getPlaceholder(updateOffset);
|
|
1802
|
-
for (const [id, row] of objToArray(rows, (row2, id2) => [id2, row2])) {
|
|
1803
|
-
const rowParams = arrayMap(row, (value) => value ?? null);
|
|
1804
|
-
if (
|
|
1805
|
-
isEmpty(
|
|
1806
|
-
await executeCommand(
|
|
1807
|
-
UPDATE +
|
|
1808
|
-
escapeId(tableName) +
|
|
1809
|
-
' SET' +
|
|
1810
|
-
assignments +
|
|
1811
|
-
' ' +
|
|
1812
|
-
WHERE +
|
|
1813
|
-
escapeId(rowIdColumnName) +
|
|
1814
|
-
'=' +
|
|
1815
|
-
rowIdPlaceholder +
|
|
1816
|
-
' RETURNING' +
|
|
1817
|
-
escapeId(rowIdColumnName),
|
|
1818
|
-
[...rowParams, id],
|
|
1819
|
-
),
|
|
1820
|
-
)
|
|
1821
|
-
) {
|
|
1822
|
-
const offset = [1];
|
|
1823
|
-
await executeCommand(
|
|
1824
|
-
INSERT +
|
|
1825
|
-
' INTO' +
|
|
1826
|
-
escapeId(tableName) +
|
|
1827
|
-
'(' +
|
|
1828
|
-
escapeColumnNames(rowIdColumnName, ...changingColumnNames) +
|
|
1829
|
-
')VALUES(' +
|
|
1830
|
-
getPlaceholders([id, ...row], getPlaceholder, offset) +
|
|
1831
|
-
')',
|
|
1832
|
-
[id, ...rowParams],
|
|
1833
|
-
);
|
|
1834
|
-
}
|
|
1835
|
-
}
|
|
1836
1851
|
};
|
|
1837
1852
|
|
|
1838
1853
|
export {createPowerSyncPersister};
|
|
@@ -105,50 +105,6 @@ const arrayClear = (array, to = size(array)) => array.splice(0, to);
|
|
|
105
105
|
const arrayPush = (array, ...values) => array.push(...values);
|
|
106
106
|
const arrayShift = (array) => array.shift();
|
|
107
107
|
|
|
108
|
-
const SINGLE_ROW_ID = '_';
|
|
109
|
-
const DEFAULT_ROW_ID_COLUMN_NAME = '_id';
|
|
110
|
-
const SELECT = 'SELECT';
|
|
111
|
-
const WHERE = 'WHERE';
|
|
112
|
-
const TABLE = 'TABLE';
|
|
113
|
-
const INSERT = 'INSERT';
|
|
114
|
-
const DELETE = 'DELETE';
|
|
115
|
-
const UPDATE = 'UPDATE';
|
|
116
|
-
const ALTER_TABLE = 'ALTER ' + TABLE;
|
|
117
|
-
const FROM = 'FROM';
|
|
118
|
-
const DELETE_FROM = DELETE + ' ' + FROM;
|
|
119
|
-
const SELECT_STAR_FROM = SELECT + '*' + FROM;
|
|
120
|
-
const PRAGMA = 'pragma_';
|
|
121
|
-
const DATA_VERSION = 'data_version';
|
|
122
|
-
const SCHEMA_VERSION = 'schema_version';
|
|
123
|
-
const PRAGMA_TABLE = 'pragma_table_';
|
|
124
|
-
const CREATE = 'CREATE ';
|
|
125
|
-
const CREATE_TABLE = CREATE + TABLE;
|
|
126
|
-
const TABLE_NAME_PLACEHOLDER_REGEX = /\$tableName/g;
|
|
127
|
-
const getWrappedCommand = (executeCommand, onSqlCommand) =>
|
|
128
|
-
onSqlCommand
|
|
129
|
-
? async (sql, params) => {
|
|
130
|
-
onSqlCommand(sql, params);
|
|
131
|
-
return await executeCommand(sql, params);
|
|
132
|
-
}
|
|
133
|
-
: executeCommand;
|
|
134
|
-
const escapeId = (str) =>
|
|
135
|
-
arrayJoin(
|
|
136
|
-
arrayMap(strSplit(str, DOT), (part) => `"${strReplace(part, /"/g, '""')}"`),
|
|
137
|
-
DOT,
|
|
138
|
-
);
|
|
139
|
-
const escapeColumnNames = (...columnNames) =>
|
|
140
|
-
arrayJoin(arrayMap(columnNames, escapeId), COMMA);
|
|
141
|
-
const anonymousPlaceholder = () => '?';
|
|
142
|
-
const getPlaceholders = (array, getPlaceholder, offset = [1]) =>
|
|
143
|
-
arrayJoin(
|
|
144
|
-
arrayMap(array, () => getPlaceholder(offset)),
|
|
145
|
-
COMMA,
|
|
146
|
-
);
|
|
147
|
-
const getWhereCondition = (tableName, condition = TRUE) =>
|
|
148
|
-
WHERE + `(${replaceTableName(condition, escapeId(tableName))})`;
|
|
149
|
-
const replaceTableName = (condition, tableName) =>
|
|
150
|
-
strReplace(condition, TABLE_NAME_PLACEHOLDER_REGEX, tableName);
|
|
151
|
-
|
|
152
108
|
const object = Object;
|
|
153
109
|
const getPrototypeOf = (obj) => object.getPrototypeOf(obj);
|
|
154
110
|
const objEntries = object.entries;
|
|
@@ -198,6 +154,62 @@ const objValues = (obj) => object.values(obj);
|
|
|
198
154
|
const objSize = (obj) => size(objIds(obj));
|
|
199
155
|
const objIsEmpty = (obj) => isObject(obj) && objSize(obj) == 0;
|
|
200
156
|
|
|
157
|
+
const SINGLE_ROW_ID = '_';
|
|
158
|
+
const DEFAULT_ROW_ID_COLUMN_NAME = '_id';
|
|
159
|
+
const SELECT = 'SELECT';
|
|
160
|
+
const WHERE = 'WHERE';
|
|
161
|
+
const TABLE = 'TABLE';
|
|
162
|
+
const INSERT = 'INSERT';
|
|
163
|
+
const DELETE = 'DELETE';
|
|
164
|
+
const UPDATE = 'UPDATE';
|
|
165
|
+
const ALTER_TABLE = 'ALTER ' + TABLE;
|
|
166
|
+
const FROM = 'FROM';
|
|
167
|
+
const DELETE_FROM = DELETE + ' ' + FROM;
|
|
168
|
+
const SELECT_STAR_FROM = SELECT + '*' + FROM;
|
|
169
|
+
const PRAGMA = 'pragma_';
|
|
170
|
+
const DATA_VERSION = 'data_version';
|
|
171
|
+
const SCHEMA_VERSION = 'schema_version';
|
|
172
|
+
const PRAGMA_TABLE = 'pragma_table_';
|
|
173
|
+
const CREATE = 'CREATE ';
|
|
174
|
+
const CREATE_TABLE = CREATE + TABLE;
|
|
175
|
+
const TABLE_NAME_PLACEHOLDER_REGEX = /\$tableName/g;
|
|
176
|
+
const getWrappedCommand = (executeCommand, onSqlCommand) =>
|
|
177
|
+
onSqlCommand
|
|
178
|
+
? async (sql, params) => {
|
|
179
|
+
onSqlCommand(sql, params);
|
|
180
|
+
return await executeCommand(sql, params);
|
|
181
|
+
}
|
|
182
|
+
: executeCommand;
|
|
183
|
+
const escapeId = (str) =>
|
|
184
|
+
arrayJoin(
|
|
185
|
+
arrayMap(strSplit(str, DOT), (part) => `"${strReplace(part, /"/g, '""')}"`),
|
|
186
|
+
DOT,
|
|
187
|
+
);
|
|
188
|
+
const escapeColumnNames = (...columnNames) =>
|
|
189
|
+
arrayJoin(arrayMap(columnNames, escapeId), COMMA);
|
|
190
|
+
const anonymousPlaceholder = () => '?';
|
|
191
|
+
const getPlaceholders = (array, getPlaceholder, offset = [1]) =>
|
|
192
|
+
arrayJoin(
|
|
193
|
+
arrayMap(array, () => getPlaceholder(offset)),
|
|
194
|
+
COMMA,
|
|
195
|
+
);
|
|
196
|
+
const getWhere = (tableName, condition = TRUE, extraCondition) => {
|
|
197
|
+
const conditions = arrayFilter(
|
|
198
|
+
[
|
|
199
|
+
condition == TRUE
|
|
200
|
+
? void 0
|
|
201
|
+
: `(${replaceTableName(condition, escapeId(tableName))})`,
|
|
202
|
+
extraCondition,
|
|
203
|
+
],
|
|
204
|
+
(condition2) => !isUndefined(condition2),
|
|
205
|
+
);
|
|
206
|
+
return isEmpty(conditions)
|
|
207
|
+
? EMPTY_STRING
|
|
208
|
+
: WHERE + arrayJoin(conditions, 'AND');
|
|
209
|
+
};
|
|
210
|
+
const replaceTableName = (condition, tableName) =>
|
|
211
|
+
strReplace(condition, TABLE_NAME_PLACEHOLDER_REGEX, tableName);
|
|
212
|
+
|
|
201
213
|
const map = Map;
|
|
202
214
|
const mapNew = (entries) => new map(entries);
|
|
203
215
|
const mapGet = (map2, key) => map2?.get(key);
|
|
@@ -1045,7 +1057,7 @@ const getCommandFunctions = (
|
|
|
1045
1057
|
await executeCommand(
|
|
1046
1058
|
SELECT_STAR_FROM +
|
|
1047
1059
|
escapeId(tableName) +
|
|
1048
|
-
|
|
1060
|
+
getWhere(tableName, condition),
|
|
1049
1061
|
),
|
|
1050
1062
|
(row) => {
|
|
1051
1063
|
const rowId = row[rowIdColumnName];
|
|
@@ -1201,9 +1213,7 @@ const getCommandFunctions = (
|
|
|
1201
1213
|
if (isUndefined(content)) {
|
|
1202
1214
|
if (isUndefined(contentSubIdSet)) {
|
|
1203
1215
|
await executeCommand(
|
|
1204
|
-
DELETE_FROM +
|
|
1205
|
-
escapeId(tableName) +
|
|
1206
|
-
getWhereCondition(tableName, condition),
|
|
1216
|
+
DELETE_FROM + escapeId(tableName) + getWhere(tableName, condition),
|
|
1207
1217
|
);
|
|
1208
1218
|
}
|
|
1209
1219
|
} else {
|
|
@@ -1213,8 +1223,11 @@ const getCommandFunctions = (
|
|
|
1213
1223
|
await executeCommand(
|
|
1214
1224
|
DELETE_FROM +
|
|
1215
1225
|
escapeId(tableName) +
|
|
1216
|
-
|
|
1217
|
-
|
|
1226
|
+
getWhere(
|
|
1227
|
+
tableName,
|
|
1228
|
+
condition,
|
|
1229
|
+
`(${escapeId(rowIdColumnName)}=${getPlaceholder([1])})`,
|
|
1230
|
+
),
|
|
1218
1231
|
[rowId],
|
|
1219
1232
|
);
|
|
1220
1233
|
} else if (!isEmpty(settingColumnNames)) {
|
|
@@ -1273,8 +1286,12 @@ const getCommandFunctions = (
|
|
|
1273
1286
|
await executeCommand(
|
|
1274
1287
|
DELETE_FROM +
|
|
1275
1288
|
escapeId(tableName) +
|
|
1276
|
-
|
|
1277
|
-
|
|
1289
|
+
getWhere(
|
|
1290
|
+
tableName,
|
|
1291
|
+
condition,
|
|
1292
|
+
// eslint-disable-next-line max-len
|
|
1293
|
+
`${escapeId(rowIdColumnName)}NOT IN(${getPlaceholders(deleteRowIds, getPlaceholder)})`,
|
|
1294
|
+
),
|
|
1278
1295
|
deleteRowIds,
|
|
1279
1296
|
);
|
|
1280
1297
|
} else if (
|
|
@@ -1282,9 +1299,7 @@ const getCommandFunctions = (
|
|
|
1282
1299
|
collHas(schemaMap, tableName)
|
|
1283
1300
|
) {
|
|
1284
1301
|
await executeCommand(
|
|
1285
|
-
DELETE_FROM +
|
|
1286
|
-
escapeId(tableName) +
|
|
1287
|
-
getWhereCondition(tableName, condition),
|
|
1302
|
+
DELETE_FROM + escapeId(tableName) + getWhere(tableName, condition),
|
|
1288
1303
|
);
|
|
1289
1304
|
}
|
|
1290
1305
|
}
|