tinybase 9.4.0-beta.1 → 9.4.0
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/persisters/index.d.ts +4 -0
- package/@types/persisters/persister-durable-object-sql-storage/index.d.ts +9 -2
- package/@types/persisters/persister-durable-object-sql-storage/with-schemas/index.d.ts +9 -2
- package/@types/persisters/with-schemas/index.d.ts +4 -0
- package/@types/queries/index.d.ts +4 -0
- package/@types/queries/with-schemas/index.d.ts +4 -0
- package/@types/synchronizers/synchronizer-ws-client/index.d.ts +7 -3
- package/@types/synchronizers/synchronizer-ws-client/with-schemas/index.d.ts +7 -3
- package/@types/synchronizers/synchronizer-ws-server/index.d.ts +9 -3
- package/@types/synchronizers/synchronizer-ws-server/with-schemas/index.d.ts +9 -3
- package/@types/synchronizers/synchronizer-ws-server-simple/index.d.ts +6 -3
- package/@types/synchronizers/synchronizer-ws-server-simple/with-schemas/index.d.ts +6 -3
- 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/index.js +191 -74
- package/min/index.js +1 -1
- package/min/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-automerge/index.js +1 -1
- package/min/persisters/persister-automerge/index.js.gz +0 -0
- package/min/persisters/persister-automerge/with-schemas/index.js +1 -1
- package/min/persisters/persister-automerge/with-schemas/index.js.gz +0 -0
- package/min/persisters/persister-browser/index.js +1 -1
- package/min/persisters/persister-browser/index.js.gz +0 -0
- package/min/persisters/persister-browser/with-schemas/index.js +1 -1
- package/min/persisters/persister-browser/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-durable-object-storage/index.js +1 -1
- package/min/persisters/persister-durable-object-storage/index.js.gz +0 -0
- package/min/persisters/persister-durable-object-storage/with-schemas/index.js +1 -1
- package/min/persisters/persister-durable-object-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-file/index.js +1 -1
- package/min/persisters/persister-file/index.js.gz +0 -0
- package/min/persisters/persister-file/with-schemas/index.js +1 -1
- package/min/persisters/persister-file/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-partykit-client/index.js +1 -1
- package/min/persisters/persister-partykit-client/index.js.gz +0 -0
- package/min/persisters/persister-partykit-client/with-schemas/index.js +1 -1
- package/min/persisters/persister-partykit-client/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-mmkv/index.js +1 -1
- package/min/persisters/persister-react-native-mmkv/index.js.gz +0 -0
- package/min/persisters/persister-react-native-mmkv/with-schemas/index.js +1 -1
- package/min/persisters/persister-react-native-mmkv/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-remote/index.js +1 -1
- package/min/persisters/persister-remote/index.js.gz +0 -0
- package/min/persisters/persister-remote/with-schemas/index.js +1 -1
- package/min/persisters/persister-remote/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-yjs/index.js +1 -1
- package/min/persisters/persister-yjs/index.js.gz +0 -0
- package/min/persisters/persister-yjs/with-schemas/index.js +1 -1
- package/min/persisters/persister-yjs/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/synchronizers/index.js +1 -1
- package/min/synchronizers/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-broadcast-channel/index.js +1 -1
- package/min/synchronizers/synchronizer-broadcast-channel/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-broadcast-channel/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/synchronizers/synchronizer-ws-client/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-client/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-client/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-client/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server-durable-object/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server-durable-object/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server-simple/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server-simple/index.js.gz +0 -0
- package/min/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js +1 -1
- package/min/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js.gz +0 -0
- package/min/synchronizers/with-schemas/index.js +1 -1
- package/min/synchronizers/with-schemas/index.js.gz +0 -0
- package/min/ui-react-inspector/index.js +1 -1
- package/min/ui-react-inspector/index.js.gz +0 -0
- package/min/ui-react-inspector/with-schemas/index.js +1 -1
- package/min/ui-react-inspector/with-schemas/index.js.gz +0 -0
- package/min/ui-solid-inspector/index.js +1 -1
- package/min/ui-solid-inspector/index.js.gz +0 -0
- package/min/ui-solid-inspector/with-schemas/index.js +1 -1
- package/min/ui-solid-inspector/with-schemas/index.js.gz +0 -0
- package/min/ui-svelte-inspector/index.js +1 -1
- package/min/ui-svelte-inspector/index.js.gz +0 -0
- package/min/ui-svelte-inspector/with-schemas/index.js +1 -1
- package/min/ui-svelte-inspector/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 +606 -179
- package/omni/with-schemas/index.js +606 -179
- package/package.json +12 -8
- package/persisters/index.js +49 -10
- package/persisters/persister-automerge/index.js +29 -5
- package/persisters/persister-automerge/with-schemas/index.js +29 -5
- package/persisters/persister-browser/index.js +29 -5
- package/persisters/persister-browser/with-schemas/index.js +29 -5
- package/persisters/persister-cr-sqlite-wasm/index.js +29 -5
- package/persisters/persister-cr-sqlite-wasm/with-schemas/index.js +29 -5
- package/persisters/persister-durable-object-sql-storage/index.js +44 -8
- package/persisters/persister-durable-object-sql-storage/with-schemas/index.js +44 -8
- package/persisters/persister-durable-object-storage/index.js +31 -5
- package/persisters/persister-durable-object-storage/with-schemas/index.js +31 -5
- package/persisters/persister-electric-sql/index.js +29 -5
- package/persisters/persister-electric-sql/with-schemas/index.js +29 -5
- package/persisters/persister-expo-sqlite/index.js +29 -5
- package/persisters/persister-expo-sqlite/with-schemas/index.js +29 -5
- package/persisters/persister-file/index.js +31 -5
- package/persisters/persister-file/with-schemas/index.js +31 -5
- package/persisters/persister-indexed-db/index.js +29 -5
- package/persisters/persister-indexed-db/with-schemas/index.js +29 -5
- package/persisters/persister-libsql/index.js +29 -5
- package/persisters/persister-libsql/with-schemas/index.js +29 -5
- package/persisters/persister-partykit-client/index.js +31 -5
- package/persisters/persister-partykit-client/with-schemas/index.js +31 -5
- package/persisters/persister-pglite/index.js +49 -10
- package/persisters/persister-pglite/with-schemas/index.js +49 -10
- package/persisters/persister-postgres/index.js +49 -10
- package/persisters/persister-postgres/with-schemas/index.js +49 -10
- package/persisters/persister-powersync/index.js +29 -5
- package/persisters/persister-powersync/with-schemas/index.js +29 -5
- package/persisters/persister-react-native-mmkv/index.js +31 -5
- package/persisters/persister-react-native-mmkv/with-schemas/index.js +31 -5
- package/persisters/persister-react-native-sqlite/index.js +29 -5
- package/persisters/persister-react-native-sqlite/with-schemas/index.js +29 -5
- package/persisters/persister-remote/index.js +31 -5
- package/persisters/persister-remote/with-schemas/index.js +31 -5
- package/persisters/persister-sqlite-bun/index.js +29 -5
- package/persisters/persister-sqlite-bun/with-schemas/index.js +29 -5
- package/persisters/persister-sqlite-wasm/index.js +29 -5
- package/persisters/persister-sqlite-wasm/with-schemas/index.js +29 -5
- package/persisters/persister-sqlite3/index.js +29 -5
- package/persisters/persister-sqlite3/with-schemas/index.js +29 -5
- package/persisters/persister-yjs/index.js +29 -5
- package/persisters/persister-yjs/with-schemas/index.js +29 -5
- package/persisters/with-schemas/index.js +49 -10
- package/queries/index.js +205 -74
- package/queries/with-schemas/index.js +205 -74
- package/readme.md +14 -14
- package/releases.md +84 -67
- package/synchronizers/index.js +31 -5
- package/synchronizers/synchronizer-broadcast-channel/index.js +39 -13
- package/synchronizers/synchronizer-broadcast-channel/with-schemas/index.js +39 -13
- package/synchronizers/synchronizer-local/index.js +31 -5
- package/synchronizers/synchronizer-local/with-schemas/index.js +31 -5
- package/synchronizers/synchronizer-ws-client/index.js +220 -61
- package/synchronizers/synchronizer-ws-client/with-schemas/index.js +220 -61
- package/synchronizers/synchronizer-ws-server/index.js +253 -73
- package/synchronizers/synchronizer-ws-server/with-schemas/index.js +253 -73
- package/synchronizers/synchronizer-ws-server-durable-object/index.js +88 -40
- package/synchronizers/synchronizer-ws-server-durable-object/with-schemas/index.js +88 -40
- package/synchronizers/synchronizer-ws-server-simple/index.js +184 -60
- package/synchronizers/synchronizer-ws-server-simple/with-schemas/index.js +184 -60
- package/synchronizers/with-schemas/index.js +31 -5
- package/ui-react-inspector/index.js +29 -5
- package/ui-react-inspector/with-schemas/index.js +29 -5
- package/ui-solid-inspector/index.js +29 -5
- package/ui-solid-inspector/with-schemas/index.js +29 -5
- package/ui-svelte-inspector/index.js +29 -5
- package/ui-svelte-inspector/with-schemas/index.js +29 -5
- package/with-schemas/index.js +191 -74
|
@@ -1245,11 +1245,35 @@ const createCustomPersister = (
|
|
|
1245
1245
|
initialContent,
|
|
1246
1246
|
startSaveFirst = false,
|
|
1247
1247
|
) => {
|
|
1248
|
-
const [call1, call2] = startSaveFirst
|
|
1249
|
-
? [startAutoSave, startAutoLoad]
|
|
1250
|
-
: [startAutoLoad, startAutoSave];
|
|
1251
|
-
|
|
1252
|
-
|
|
1248
|
+
const [call1, call2, stop1, stop2] = startSaveFirst
|
|
1249
|
+
? [startAutoSave, startAutoLoad, stopAutoSave, stopAutoLoad]
|
|
1250
|
+
: [startAutoLoad, startAutoSave, stopAutoLoad, stopAutoSave];
|
|
1251
|
+
const start1 = call1(initialContent);
|
|
1252
|
+
const generation1 = startSaveFirst
|
|
1253
|
+
? autoSaveGeneration
|
|
1254
|
+
: autoLoadGeneration;
|
|
1255
|
+
await start1;
|
|
1256
|
+
const start2 = call2(initialContent);
|
|
1257
|
+
const generation2 = startSaveFirst
|
|
1258
|
+
? autoLoadGeneration
|
|
1259
|
+
: autoSaveGeneration;
|
|
1260
|
+
try {
|
|
1261
|
+
await start2;
|
|
1262
|
+
} catch (error) {
|
|
1263
|
+
if (
|
|
1264
|
+
generation2 ==
|
|
1265
|
+
(startSaveFirst ? autoLoadGeneration : autoSaveGeneration)
|
|
1266
|
+
) {
|
|
1267
|
+
await tryCatchIgnore(stop2);
|
|
1268
|
+
}
|
|
1269
|
+
if (
|
|
1270
|
+
generation1 ==
|
|
1271
|
+
(startSaveFirst ? autoSaveGeneration : autoLoadGeneration)
|
|
1272
|
+
) {
|
|
1273
|
+
await tryCatchIgnore(stop1);
|
|
1274
|
+
}
|
|
1275
|
+
throw error;
|
|
1276
|
+
}
|
|
1253
1277
|
return persister;
|
|
1254
1278
|
};
|
|
1255
1279
|
const stopAutoPersisting = async (stopSaveFirst = false) => {
|
package/with-schemas/index.js
CHANGED
|
@@ -261,6 +261,7 @@ const collForEach = (coll, cb) => coll?.forEach(cb);
|
|
|
261
261
|
const collDel = (coll, keyOrValue) => coll?.delete(keyOrValue);
|
|
262
262
|
|
|
263
263
|
const ERROR_HLC = 13;
|
|
264
|
+
const ERROR_QUERY_SELECT_ALL_CYCLE = 16;
|
|
264
265
|
const errorNew = (code, details) =>
|
|
265
266
|
new Error(
|
|
266
267
|
TINYBASE +
|
|
@@ -4477,7 +4478,50 @@ const createQueries = getCreateFunction((store) => {
|
|
|
4477
4478
|
const preStoreListenerIds = mapNew();
|
|
4478
4479
|
const sourceStoreListenerIds = mapNew();
|
|
4479
4480
|
const selectAllListenerIds = mapNew();
|
|
4481
|
+
const selectAllRetryListenerIds = mapNew();
|
|
4482
|
+
const selectAllQuerySources = mapNew();
|
|
4480
4483
|
const referencedQueryIds = mapNew();
|
|
4484
|
+
const assertNoMappedSelectAllCycle = (queryId, nextQuerySources) => {
|
|
4485
|
+
const getQuerySources = (sourceQueryId) =>
|
|
4486
|
+
sourceQueryId === queryId
|
|
4487
|
+
? nextQuerySources
|
|
4488
|
+
: mapGet(selectAllQuerySources, sourceQueryId);
|
|
4489
|
+
const reachesQuery = (
|
|
4490
|
+
sourceQueryId,
|
|
4491
|
+
targetQueryId,
|
|
4492
|
+
visitedQueryIds = setNew(),
|
|
4493
|
+
) => {
|
|
4494
|
+
if (sourceQueryId === targetQueryId) {
|
|
4495
|
+
return true;
|
|
4496
|
+
}
|
|
4497
|
+
if (collHas(visitedQueryIds, sourceQueryId)) {
|
|
4498
|
+
return false;
|
|
4499
|
+
}
|
|
4500
|
+
setAdd(visitedQueryIds, sourceQueryId);
|
|
4501
|
+
return !collEvery(
|
|
4502
|
+
getQuerySources(sourceQueryId),
|
|
4503
|
+
(_changesCellId, nextQueryId) =>
|
|
4504
|
+
!reachesQuery(nextQueryId, targetQueryId, visitedQueryIds),
|
|
4505
|
+
);
|
|
4506
|
+
};
|
|
4507
|
+
const hasMappedCycle = (sourceQueryId, querySources) =>
|
|
4508
|
+
!collEvery(
|
|
4509
|
+
querySources,
|
|
4510
|
+
(changesCellId, nextQueryId) =>
|
|
4511
|
+
!changesCellId || !reachesQuery(nextQueryId, sourceQueryId),
|
|
4512
|
+
);
|
|
4513
|
+
if (
|
|
4514
|
+
hasMappedCycle(queryId, nextQuerySources) ||
|
|
4515
|
+
!collEvery(
|
|
4516
|
+
selectAllQuerySources,
|
|
4517
|
+
(querySources, sourceQueryId) =>
|
|
4518
|
+
sourceQueryId === queryId ||
|
|
4519
|
+
!hasMappedCycle(sourceQueryId, querySources),
|
|
4520
|
+
)
|
|
4521
|
+
) {
|
|
4522
|
+
errorThrow(ERROR_QUERY_SELECT_ALL_CYCLE);
|
|
4523
|
+
}
|
|
4524
|
+
};
|
|
4481
4525
|
const {
|
|
4482
4526
|
_: [, addListener, callListeners],
|
|
4483
4527
|
delListener: delListenerImpl,
|
|
@@ -4551,6 +4595,30 @@ const createQueries = getCreateFunction((store) => {
|
|
|
4551
4595
|
resetStoreListeners(mapGet(sourceStoreListenerIds, queryId));
|
|
4552
4596
|
mapSet(sourceStoreListenerIds, queryId);
|
|
4553
4597
|
};
|
|
4598
|
+
const clearSelectAllRetryListeners = (queryId) =>
|
|
4599
|
+
ifNotUndefined(
|
|
4600
|
+
mapGet(selectAllRetryListenerIds, queryId),
|
|
4601
|
+
(listenerIds) => {
|
|
4602
|
+
mapForEach(listenerIds, (sourceStore, listenerIdsByTableId) =>
|
|
4603
|
+
mapForEach(listenerIdsByTableId, (_sourceTableId, listenerId) =>
|
|
4604
|
+
sourceStore.delListener(listenerId),
|
|
4605
|
+
),
|
|
4606
|
+
);
|
|
4607
|
+
mapSet(selectAllRetryListenerIds, queryId);
|
|
4608
|
+
},
|
|
4609
|
+
);
|
|
4610
|
+
const addSelectAllRetryListener = (queryId, sourceStore, sourceTableId) => {
|
|
4611
|
+
const listenerIdsByTableId = mapEnsure(
|
|
4612
|
+
mapEnsure(selectAllRetryListenerIds, queryId, mapNew),
|
|
4613
|
+
sourceStore,
|
|
4614
|
+
mapNew,
|
|
4615
|
+
);
|
|
4616
|
+
mapEnsure(listenerIdsByTableId, sourceTableId, () =>
|
|
4617
|
+
sourceStore.addTableListener(sourceTableId, () =>
|
|
4618
|
+
setQueryDefinitionImpl(queryId),
|
|
4619
|
+
),
|
|
4620
|
+
);
|
|
4621
|
+
};
|
|
4554
4622
|
const syncSelectAllListeners = (queryId, nextSources = mapNew()) => {
|
|
4555
4623
|
const listenerIds = mapEnsure(selectAllListenerIds, queryId, mapNew);
|
|
4556
4624
|
mapForEach(listenerIds, (sourceStore, listenerIdsByTableId) => {
|
|
@@ -4569,7 +4637,13 @@ const createQueries = getCreateFunction((store) => {
|
|
|
4569
4637
|
collForEach(tableIds, (sourceTableId) =>
|
|
4570
4638
|
mapEnsure(listenerIdsByTableId, sourceTableId, () =>
|
|
4571
4639
|
sourceStore.addTableCellIdsListener(sourceTableId, () =>
|
|
4572
|
-
|
|
4640
|
+
tryCatchSync(
|
|
4641
|
+
() => setQueryDefinitionImpl(queryId),
|
|
4642
|
+
(error) => {
|
|
4643
|
+
addSelectAllRetryListener(queryId, sourceStore, sourceTableId);
|
|
4644
|
+
throw error;
|
|
4645
|
+
},
|
|
4646
|
+
),
|
|
4573
4647
|
),
|
|
4574
4648
|
),
|
|
4575
4649
|
);
|
|
@@ -4728,6 +4802,10 @@ const createQueries = getCreateFunction((store) => {
|
|
|
4728
4802
|
isFunction(prefixOrMapper)
|
|
4729
4803
|
? prefixOrMapper
|
|
4730
4804
|
: (cellId) => (prefixOrMapper ?? EMPTY_STRING) + cellId,
|
|
4805
|
+
isFunction(prefixOrMapper) ||
|
|
4806
|
+
(!isUndefined(prefixOrMapper) && prefixOrMapper !== EMPTY_STRING)
|
|
4807
|
+
? 1
|
|
4808
|
+
: 0,
|
|
4731
4809
|
]);
|
|
4732
4810
|
};
|
|
4733
4811
|
const join = (arg1, arg2, arg3, arg4) => {
|
|
@@ -4801,28 +4879,49 @@ const createQueries = getCreateFunction((store) => {
|
|
|
4801
4879
|
getSelectedOrGroupedCell(arg1) === arg2,
|
|
4802
4880
|
);
|
|
4803
4881
|
build({select, selectAll, join, where, group, having, param});
|
|
4804
|
-
resultStore2.delTable(queryId);
|
|
4805
|
-
if (isEmpty(selectionEntries)) {
|
|
4806
|
-
commit?.();
|
|
4807
|
-
return queries;
|
|
4808
|
-
}
|
|
4809
4882
|
const joins = mapNew(joinEntries);
|
|
4810
4883
|
mapForEach(joins, (joinAlias, [, fromJoinAlias]) =>
|
|
4811
4884
|
ifNotUndefined(mapGet(joins, fromJoinAlias), ({3: toJoinAliases2}) =>
|
|
4812
4885
|
isUndefined(joinAlias) ? 0 : arrayPush(toJoinAliases2, joinAlias),
|
|
4813
4886
|
),
|
|
4814
4887
|
);
|
|
4815
|
-
const
|
|
4816
|
-
const hasGroupsOrHavings = !collIsEmpty(groups) || !isEmpty(havings);
|
|
4817
|
-
const selectEntries = [];
|
|
4818
|
-
const selectAllSources = stagedDefinition[3];
|
|
4888
|
+
const isRootSelectAll = (joinedTableId) => isUndefined(joinedTableId);
|
|
4819
4889
|
const getSelectAllJoin = (joinedTableId) =>
|
|
4820
4890
|
mapGet(
|
|
4821
4891
|
joins,
|
|
4822
|
-
|
|
4823
|
-
? void 0
|
|
4824
|
-
: joinedTableId,
|
|
4892
|
+
isRootSelectAll(joinedTableId) ? void 0 : joinedTableId,
|
|
4825
4893
|
);
|
|
4894
|
+
const nextSelectAllQuerySources = stagedDefinition[5];
|
|
4895
|
+
arrayForEach(
|
|
4896
|
+
selectionEntries,
|
|
4897
|
+
([selectAll2, selectedOrJoinedTableId, , changesCellId = 0]) =>
|
|
4898
|
+
selectAll2
|
|
4899
|
+
? ifNotUndefined(
|
|
4900
|
+
getSelectAllJoin(selectedOrJoinedTableId),
|
|
4901
|
+
([sourceQueryId, , , , , sourceStore]) =>
|
|
4902
|
+
sourceStore === store
|
|
4903
|
+
? 0
|
|
4904
|
+
: mapSet(
|
|
4905
|
+
nextSelectAllQuerySources,
|
|
4906
|
+
sourceQueryId,
|
|
4907
|
+
mapGet(nextSelectAllQuerySources, sourceQueryId) ||
|
|
4908
|
+
changesCellId
|
|
4909
|
+
? 1
|
|
4910
|
+
: 0,
|
|
4911
|
+
),
|
|
4912
|
+
)
|
|
4913
|
+
: 0,
|
|
4914
|
+
);
|
|
4915
|
+
assertNoMappedSelectAllCycle(queryId, nextSelectAllQuerySources);
|
|
4916
|
+
resultStore2.delTable(queryId);
|
|
4917
|
+
if (isEmpty(selectionEntries)) {
|
|
4918
|
+
commit?.();
|
|
4919
|
+
return queries;
|
|
4920
|
+
}
|
|
4921
|
+
const groups = mapNew(groupEntries);
|
|
4922
|
+
const hasGroupsOrHavings = !collIsEmpty(groups) || !isEmpty(havings);
|
|
4923
|
+
const selectEntries = [];
|
|
4924
|
+
const selectAllSources = stagedDefinition[3];
|
|
4826
4925
|
arrayForEach(
|
|
4827
4926
|
selectionEntries,
|
|
4828
4927
|
([selectAll2, selectedOrJoinedTableId, clauseOrMapper]) => {
|
|
@@ -4840,11 +4939,7 @@ const createQueries = getCreateFunction((store) => {
|
|
|
4840
4939
|
(cellId) =>
|
|
4841
4940
|
arrayPush(selectEntries, [
|
|
4842
4941
|
clauseOrMapper(cellId),
|
|
4843
|
-
|
|
4844
|
-
isUndefined(selectedOrJoinedTableId) ||
|
|
4845
|
-
selectedOrJoinedTableId === tableId
|
|
4846
|
-
? getTableCell(cellId)
|
|
4847
|
-
: getTableCell(selectedOrJoinedTableId, cellId),
|
|
4942
|
+
getUndefined,
|
|
4848
4943
|
]),
|
|
4849
4944
|
);
|
|
4850
4945
|
},
|
|
@@ -5041,67 +5136,74 @@ const createQueries = getCreateFunction((store) => {
|
|
|
5041
5136
|
joinedCellId,
|
|
5042
5137
|
);
|
|
5043
5138
|
};
|
|
5139
|
+
const writeSelectAllRow = () => {
|
|
5140
|
+
const resultRow = objNew();
|
|
5141
|
+
arrayForEach(
|
|
5142
|
+
selectionEntries,
|
|
5143
|
+
([selectAll2, selectedOrJoinedTableId, clauseOrMapper]) => {
|
|
5144
|
+
if (selectAll2) {
|
|
5145
|
+
ifNotUndefined(
|
|
5146
|
+
getSelectAllJoin(selectedOrJoinedTableId),
|
|
5147
|
+
([realTableId, , , , remoteIdPairs, sourceStore]) => {
|
|
5148
|
+
const sourceRowId = isRootSelectAll(
|
|
5149
|
+
selectedOrJoinedTableId,
|
|
5150
|
+
)
|
|
5151
|
+
? rootRowId
|
|
5152
|
+
: mapGet(remoteIdPairs, rootRowId)?.[0];
|
|
5153
|
+
ifNotUndefined(sourceRowId, (sourceRowId2) =>
|
|
5154
|
+
arrayForEach(
|
|
5155
|
+
arraySort(
|
|
5156
|
+
sourceStore.getCellIds(realTableId, sourceRowId2),
|
|
5157
|
+
),
|
|
5158
|
+
(cellId) =>
|
|
5159
|
+
objSet(
|
|
5160
|
+
resultRow,
|
|
5161
|
+
clauseOrMapper(cellId),
|
|
5162
|
+
sourceStore.getCell(
|
|
5163
|
+
realTableId,
|
|
5164
|
+
sourceRowId2,
|
|
5165
|
+
cellId,
|
|
5166
|
+
),
|
|
5167
|
+
),
|
|
5168
|
+
),
|
|
5169
|
+
);
|
|
5170
|
+
},
|
|
5171
|
+
);
|
|
5172
|
+
} else {
|
|
5173
|
+
const selectedCell = clauseOrMapper(getJoinCell, rootRowId);
|
|
5174
|
+
const selectedCellId = selectedOrJoinedTableId;
|
|
5175
|
+
if (isUndefined(selectedCell)) {
|
|
5176
|
+
objDel(resultRow, selectedCellId);
|
|
5177
|
+
} else {
|
|
5178
|
+
objSet(resultRow, selectedCellId, selectedCell);
|
|
5179
|
+
}
|
|
5180
|
+
}
|
|
5181
|
+
},
|
|
5182
|
+
);
|
|
5183
|
+
if (objIsEmpty(resultRow)) {
|
|
5184
|
+
selectJoinWhereStore.delRow(queryId, rootRowId);
|
|
5185
|
+
} else {
|
|
5186
|
+
selectJoinWhereStore.setRow(queryId, rootRowId, resultRow);
|
|
5187
|
+
}
|
|
5188
|
+
};
|
|
5044
5189
|
selectJoinWhereStore.transaction(() => {
|
|
5045
5190
|
if (!arrayEvery(wheres, (where2) => where2(getJoinCell))) {
|
|
5046
5191
|
selectJoinWhereStore.delRow(queryId, rootRowId);
|
|
5047
5192
|
} else if (hasGroupsOrHavings) {
|
|
5048
|
-
|
|
5049
|
-
|
|
5050
|
-
queryId,
|
|
5051
|
-
rootRowId,
|
|
5052
|
-
asCellId,
|
|
5053
|
-
tableCellGetter(getJoinCell, rootRowId),
|
|
5054
|
-
),
|
|
5055
|
-
);
|
|
5056
|
-
} else if (hasSelectAll) {
|
|
5057
|
-
const resultRow = objNew();
|
|
5058
|
-
arrayForEach(
|
|
5059
|
-
selectionEntries,
|
|
5060
|
-
([selectAll2, selectedOrJoinedTableId, clauseOrMapper]) => {
|
|
5061
|
-
if (selectAll2) {
|
|
5062
|
-
ifNotUndefined(
|
|
5063
|
-
getSelectAllJoin(selectedOrJoinedTableId),
|
|
5064
|
-
([realTableId, , , , remoteIdPairs, sourceStore]) => {
|
|
5065
|
-
const sourceRowId =
|
|
5066
|
-
isUndefined(selectedOrJoinedTableId) ||
|
|
5067
|
-
selectedOrJoinedTableId === tableId
|
|
5068
|
-
? rootRowId
|
|
5069
|
-
: mapGet(remoteIdPairs, rootRowId)?.[0];
|
|
5070
|
-
ifNotUndefined(sourceRowId, (sourceRowId2) =>
|
|
5071
|
-
arrayForEach(
|
|
5072
|
-
arraySort(
|
|
5073
|
-
sourceStore.getCellIds(realTableId, sourceRowId2),
|
|
5074
|
-
),
|
|
5075
|
-
(cellId) =>
|
|
5076
|
-
objSet(
|
|
5077
|
-
resultRow,
|
|
5078
|
-
clauseOrMapper(cellId),
|
|
5079
|
-
sourceStore.getCell(
|
|
5080
|
-
realTableId,
|
|
5081
|
-
sourceRowId2,
|
|
5082
|
-
cellId,
|
|
5083
|
-
),
|
|
5084
|
-
),
|
|
5085
|
-
),
|
|
5086
|
-
);
|
|
5087
|
-
},
|
|
5088
|
-
);
|
|
5089
|
-
} else {
|
|
5090
|
-
const selectedCell = clauseOrMapper(getJoinCell, rootRowId);
|
|
5091
|
-
const selectedCellId = selectedOrJoinedTableId;
|
|
5092
|
-
if (isUndefined(selectedCell)) {
|
|
5093
|
-
objDel(resultRow, selectedCellId);
|
|
5094
|
-
} else {
|
|
5095
|
-
objSet(resultRow, selectedCellId, selectedCell);
|
|
5096
|
-
}
|
|
5097
|
-
}
|
|
5098
|
-
},
|
|
5099
|
-
);
|
|
5100
|
-
if (objIsEmpty(resultRow)) {
|
|
5101
|
-
selectJoinWhereStore.delRow(queryId, rootRowId);
|
|
5193
|
+
if (hasSelectAll) {
|
|
5194
|
+
writeSelectAllRow();
|
|
5102
5195
|
} else {
|
|
5103
|
-
|
|
5196
|
+
mapForEach(selects, (asCellId, tableCellGetter) =>
|
|
5197
|
+
selectJoinWhereStore._[5](
|
|
5198
|
+
queryId,
|
|
5199
|
+
rootRowId,
|
|
5200
|
+
asCellId,
|
|
5201
|
+
tableCellGetter(getJoinCell, rootRowId),
|
|
5202
|
+
),
|
|
5203
|
+
);
|
|
5104
5204
|
}
|
|
5205
|
+
} else if (hasSelectAll) {
|
|
5206
|
+
writeSelectAllRow();
|
|
5105
5207
|
} else {
|
|
5106
5208
|
mapForEach(selects, (asCellId, tableCellGetter) =>
|
|
5107
5209
|
selectJoinWhereStore._[5](
|
|
@@ -5231,7 +5333,14 @@ const createQueries = getCreateFunction((store) => {
|
|
|
5231
5333
|
}),
|
|
5232
5334
|
);
|
|
5233
5335
|
const setQueryDefinitionImpl = (queryId, definition) => {
|
|
5234
|
-
const stagedDefinition = [
|
|
5336
|
+
const stagedDefinition = [
|
|
5337
|
+
mapNew(),
|
|
5338
|
+
mapNew(),
|
|
5339
|
+
void 0,
|
|
5340
|
+
mapNew(),
|
|
5341
|
+
setNew(),
|
|
5342
|
+
mapNew(),
|
|
5343
|
+
];
|
|
5235
5344
|
let committed = false;
|
|
5236
5345
|
tryCatchSync(
|
|
5237
5346
|
() =>
|
|
@@ -5253,11 +5362,17 @@ const createQueries = getCreateFunction((store) => {
|
|
|
5253
5362
|
);
|
|
5254
5363
|
mapSet(preStores, queryId, stagedDefinition[2]);
|
|
5255
5364
|
syncSelectAllListeners(queryId, stagedDefinition[3]);
|
|
5365
|
+
clearSelectAllRetryListeners(queryId);
|
|
5256
5366
|
mapSet(
|
|
5257
5367
|
referencedQueryIds,
|
|
5258
5368
|
queryId,
|
|
5259
5369
|
collIsEmpty(stagedDefinition[4]) ? void 0 : stagedDefinition[4],
|
|
5260
5370
|
);
|
|
5371
|
+
mapSet(
|
|
5372
|
+
selectAllQuerySources,
|
|
5373
|
+
queryId,
|
|
5374
|
+
collIsEmpty(stagedDefinition[5]) ? void 0 : stagedDefinition[5],
|
|
5375
|
+
);
|
|
5261
5376
|
committed = true;
|
|
5262
5377
|
}),
|
|
5263
5378
|
(error) => {
|
|
@@ -5308,7 +5423,9 @@ const createQueries = getCreateFunction((store) => {
|
|
|
5308
5423
|
resetPreStores(queryId);
|
|
5309
5424
|
resetSourceStores(queryId);
|
|
5310
5425
|
syncSelectAllListeners(queryId);
|
|
5426
|
+
clearSelectAllRetryListeners(queryId);
|
|
5311
5427
|
mapSet(referencedQueryIds, queryId);
|
|
5428
|
+
mapSet(selectAllQuerySources, queryId);
|
|
5312
5429
|
delDefinition(queryId);
|
|
5313
5430
|
cleanStores();
|
|
5314
5431
|
return queries;
|