tinybase 9.4.0-beta.0 → 9.4.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/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 +145 -7
- package/@types/queries/with-schemas/index.d.ts +157 -7
- 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/index.js +315 -22
- 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 +730 -127
- package/omni/with-schemas/index.js +730 -127
- package/package.json +8 -4
- 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 +334 -22
- package/queries/with-schemas/index.js +334 -22
- 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 +315 -22
|
@@ -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 +
|
|
@@ -4476,6 +4477,51 @@ const createQueries = getCreateFunction((store) => {
|
|
|
4476
4477
|
};
|
|
4477
4478
|
const preStoreListenerIds = mapNew();
|
|
4478
4479
|
const sourceStoreListenerIds = mapNew();
|
|
4480
|
+
const selectAllListenerIds = mapNew();
|
|
4481
|
+
const selectAllRetryListenerIds = mapNew();
|
|
4482
|
+
const selectAllQuerySources = mapNew();
|
|
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
|
+
};
|
|
4479
4525
|
const {
|
|
4480
4526
|
_: [, addListener, callListeners],
|
|
4481
4527
|
delListener: delListenerImpl,
|
|
@@ -4549,11 +4595,72 @@ const createQueries = getCreateFunction((store) => {
|
|
|
4549
4595
|
resetStoreListeners(mapGet(sourceStoreListenerIds, queryId));
|
|
4550
4596
|
mapSet(sourceStoreListenerIds, queryId);
|
|
4551
4597
|
};
|
|
4552
|
-
const
|
|
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
|
+
};
|
|
4622
|
+
const syncSelectAllListeners = (queryId, nextSources = mapNew()) => {
|
|
4623
|
+
const listenerIds = mapEnsure(selectAllListenerIds, queryId, mapNew);
|
|
4624
|
+
mapForEach(listenerIds, (sourceStore, listenerIdsByTableId) => {
|
|
4625
|
+
mapForEach(listenerIdsByTableId, (sourceTableId, listenerId) =>
|
|
4626
|
+
collHas(mapGet(nextSources, sourceStore), sourceTableId)
|
|
4627
|
+
? 0
|
|
4628
|
+
: (sourceStore.delListener(listenerId),
|
|
4629
|
+
mapSet(listenerIdsByTableId, sourceTableId)),
|
|
4630
|
+
);
|
|
4631
|
+
if (collIsEmpty(listenerIdsByTableId)) {
|
|
4632
|
+
mapSet(listenerIds, sourceStore);
|
|
4633
|
+
}
|
|
4634
|
+
});
|
|
4635
|
+
mapForEach(nextSources, (sourceStore, tableIds) => {
|
|
4636
|
+
const listenerIdsByTableId = mapEnsure(listenerIds, sourceStore, mapNew);
|
|
4637
|
+
collForEach(tableIds, (sourceTableId) =>
|
|
4638
|
+
mapEnsure(listenerIdsByTableId, sourceTableId, () =>
|
|
4639
|
+
sourceStore.addTableCellIdsListener(sourceTableId, () =>
|
|
4640
|
+
tryCatchSync(
|
|
4641
|
+
() => setQueryDefinitionImpl(queryId),
|
|
4642
|
+
(error) => {
|
|
4643
|
+
addSelectAllRetryListener(queryId, sourceStore, sourceTableId);
|
|
4644
|
+
throw error;
|
|
4645
|
+
},
|
|
4646
|
+
),
|
|
4647
|
+
),
|
|
4648
|
+
),
|
|
4649
|
+
);
|
|
4650
|
+
});
|
|
4651
|
+
if (collIsEmpty(listenerIds)) {
|
|
4652
|
+
mapSet(selectAllListenerIds, queryId);
|
|
4653
|
+
}
|
|
4654
|
+
};
|
|
4655
|
+
const isResultStoreReferenced = (queryId, resultStore2) =>
|
|
4553
4656
|
!(
|
|
4554
4657
|
collEvery(routedResultListeners, ([, storeListenerIds]) =>
|
|
4555
4658
|
collEvery(storeListenerIds, ([store2]) => store2 !== resultStore2),
|
|
4556
4659
|
) &&
|
|
4660
|
+
collEvery(
|
|
4661
|
+
referencedQueryIds,
|
|
4662
|
+
(queryIds) => !collHas(queryIds, queryId),
|
|
4663
|
+
) &&
|
|
4557
4664
|
arrayEvery(
|
|
4558
4665
|
[preStoreListenerIds, sourceStoreListenerIds],
|
|
4559
4666
|
(storeListenerIds) =>
|
|
@@ -4568,7 +4675,7 @@ const createQueries = getCreateFunction((store) => {
|
|
|
4568
4675
|
hasQuery(queryId) ? 0 : mapSet(preStores, queryId),
|
|
4569
4676
|
);
|
|
4570
4677
|
mapForEach(resultStores, (queryId, resultStore2) =>
|
|
4571
|
-
hasQuery(queryId) || isResultStoreReferenced(resultStore2)
|
|
4678
|
+
hasQuery(queryId) || isResultStoreReferenced(queryId, resultStore2)
|
|
4572
4679
|
? 0
|
|
4573
4680
|
: mapSet(resultStores, queryId),
|
|
4574
4681
|
);
|
|
@@ -4650,7 +4757,13 @@ const createQueries = getCreateFunction((store) => {
|
|
|
4650
4757
|
const rootStore = asQuery ? getResultStore(tableId) : store;
|
|
4651
4758
|
const resultStore2 = getResultStore(queryId);
|
|
4652
4759
|
const paramValues = definition?.[3] ?? getParamValues(queryId);
|
|
4653
|
-
const
|
|
4760
|
+
const nextReferencedQueryIds = stagedDefinition[4];
|
|
4761
|
+
if (asQuery) {
|
|
4762
|
+
setAdd(nextReferencedQueryIds, tableId);
|
|
4763
|
+
}
|
|
4764
|
+
const selectionEntries = [];
|
|
4765
|
+
let hasSelectAll = false;
|
|
4766
|
+
let selectCount = 0;
|
|
4654
4767
|
const joinEntries = [
|
|
4655
4768
|
[void 0, [tableId, void 0, void 0, [], mapNew(), rootStore]],
|
|
4656
4769
|
];
|
|
@@ -4662,21 +4775,39 @@ const createQueries = getCreateFunction((store) => {
|
|
|
4662
4775
|
const joinedTableId = isTrue(arg1) ? arg2 : arg1;
|
|
4663
4776
|
const joinedCellId = isTrue(arg1) ? arg3 : arg2;
|
|
4664
4777
|
const selectEntry = isFunction(arg1)
|
|
4665
|
-
? [
|
|
4778
|
+
? [0, selectCount + EMPTY_STRING, arg1]
|
|
4666
4779
|
: isUndefined(joinedCellId)
|
|
4667
|
-
? [arg1, (getTableCell) => getTableCell(arg1)]
|
|
4780
|
+
? [0, arg1, (getTableCell) => getTableCell(arg1)]
|
|
4668
4781
|
: [
|
|
4782
|
+
0,
|
|
4669
4783
|
joinedCellId,
|
|
4670
4784
|
(getTableCell) =>
|
|
4671
4785
|
isTrue(arg1)
|
|
4672
4786
|
? getTableCell(true, joinedTableId, joinedCellId)
|
|
4673
4787
|
: getTableCell(joinedTableId, joinedCellId),
|
|
4674
4788
|
];
|
|
4675
|
-
|
|
4789
|
+
selectCount++;
|
|
4790
|
+
arrayPush(selectionEntries, selectEntry);
|
|
4676
4791
|
return {
|
|
4677
|
-
as: (selectedCellId) => (selectEntry[
|
|
4792
|
+
as: (selectedCellId) => (selectEntry[1] = selectedCellId),
|
|
4678
4793
|
};
|
|
4679
4794
|
};
|
|
4795
|
+
const selectAll = (arg1, arg2, arg3) => {
|
|
4796
|
+
hasSelectAll = true;
|
|
4797
|
+
const joinedTableId = isTrue(arg1) ? arg2 : arg1;
|
|
4798
|
+
const prefixOrMapper = isTrue(arg1) ? arg3 : arg2;
|
|
4799
|
+
arrayPush(selectionEntries, [
|
|
4800
|
+
1,
|
|
4801
|
+
joinedTableId,
|
|
4802
|
+
isFunction(prefixOrMapper)
|
|
4803
|
+
? prefixOrMapper
|
|
4804
|
+
: (cellId) => (prefixOrMapper ?? EMPTY_STRING) + cellId,
|
|
4805
|
+
isFunction(prefixOrMapper) ||
|
|
4806
|
+
(!isUndefined(prefixOrMapper) && prefixOrMapper !== EMPTY_STRING)
|
|
4807
|
+
? 1
|
|
4808
|
+
: 0,
|
|
4809
|
+
]);
|
|
4810
|
+
};
|
|
4680
4811
|
const join = (arg1, arg2, arg3, arg4) => {
|
|
4681
4812
|
const joinedTableId = isTrue(arg1) ? arg2 : arg1;
|
|
4682
4813
|
const [fromJoinAlias, onArg] = isTrue(arg1)
|
|
@@ -4686,6 +4817,13 @@ const createQueries = getCreateFunction((store) => {
|
|
|
4686
4817
|
: isUndefined(arg3) || isFunction(arg2)
|
|
4687
4818
|
? [void 0, arg2]
|
|
4688
4819
|
: [arg2, arg3];
|
|
4820
|
+
const sourceIsQuery = isTrue(arg1);
|
|
4821
|
+
const sourceStore = sourceIsQuery
|
|
4822
|
+
? getResultStore(joinedTableId)
|
|
4823
|
+
: store;
|
|
4824
|
+
if (sourceIsQuery) {
|
|
4825
|
+
setAdd(nextReferencedQueryIds, joinedTableId);
|
|
4826
|
+
}
|
|
4689
4827
|
const joinEntry = [
|
|
4690
4828
|
joinedTableId,
|
|
4691
4829
|
[
|
|
@@ -4694,7 +4832,7 @@ const createQueries = getCreateFunction((store) => {
|
|
|
4694
4832
|
isFunction(onArg) ? onArg : (getCell) => getCell(onArg),
|
|
4695
4833
|
[],
|
|
4696
4834
|
mapNew(),
|
|
4697
|
-
|
|
4835
|
+
sourceStore,
|
|
4698
4836
|
],
|
|
4699
4837
|
];
|
|
4700
4838
|
arrayPush(joinEntries, joinEntry);
|
|
@@ -4740,21 +4878,86 @@ const createQueries = getCreateFunction((store) => {
|
|
|
4740
4878
|
: (getSelectedOrGroupedCell) =>
|
|
4741
4879
|
getSelectedOrGroupedCell(arg1) === arg2,
|
|
4742
4880
|
);
|
|
4743
|
-
build({select, join, where, group, having, param});
|
|
4744
|
-
resultStore2.delTable(queryId);
|
|
4745
|
-
const selects = mapNew(selectEntries);
|
|
4746
|
-
if (collIsEmpty(selects)) {
|
|
4747
|
-
commit?.();
|
|
4748
|
-
return queries;
|
|
4749
|
-
}
|
|
4881
|
+
build({select, selectAll, join, where, group, having, param});
|
|
4750
4882
|
const joins = mapNew(joinEntries);
|
|
4751
4883
|
mapForEach(joins, (joinAlias, [, fromJoinAlias]) =>
|
|
4752
4884
|
ifNotUndefined(mapGet(joins, fromJoinAlias), ({3: toJoinAliases2}) =>
|
|
4753
4885
|
isUndefined(joinAlias) ? 0 : arrayPush(toJoinAliases2, joinAlias),
|
|
4754
4886
|
),
|
|
4755
4887
|
);
|
|
4888
|
+
const isRootSelectAll = (joinedTableId) => isUndefined(joinedTableId);
|
|
4889
|
+
const getSelectAllJoin = (joinedTableId) =>
|
|
4890
|
+
mapGet(
|
|
4891
|
+
joins,
|
|
4892
|
+
isRootSelectAll(joinedTableId) ? void 0 : joinedTableId,
|
|
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
|
+
}
|
|
4756
4921
|
const groups = mapNew(groupEntries);
|
|
4757
4922
|
const hasGroupsOrHavings = !collIsEmpty(groups) || !isEmpty(havings);
|
|
4923
|
+
const selectEntries = [];
|
|
4924
|
+
const selectAllSources = stagedDefinition[3];
|
|
4925
|
+
arrayForEach(
|
|
4926
|
+
selectionEntries,
|
|
4927
|
+
([selectAll2, selectedOrJoinedTableId, clauseOrMapper]) => {
|
|
4928
|
+
if (selectAll2) {
|
|
4929
|
+
if (hasGroupsOrHavings) {
|
|
4930
|
+
ifNotUndefined(
|
|
4931
|
+
getSelectAllJoin(selectedOrJoinedTableId),
|
|
4932
|
+
([realTableId, , , , , sourceStore]) => {
|
|
4933
|
+
setAdd(
|
|
4934
|
+
mapEnsure(selectAllSources, sourceStore, setNew),
|
|
4935
|
+
realTableId,
|
|
4936
|
+
);
|
|
4937
|
+
arrayForEach(
|
|
4938
|
+
arraySort(sourceStore.getTableCellIds(realTableId)),
|
|
4939
|
+
(cellId) =>
|
|
4940
|
+
arrayPush(selectEntries, [
|
|
4941
|
+
clauseOrMapper(cellId),
|
|
4942
|
+
getUndefined,
|
|
4943
|
+
]),
|
|
4944
|
+
);
|
|
4945
|
+
},
|
|
4946
|
+
);
|
|
4947
|
+
}
|
|
4948
|
+
} else {
|
|
4949
|
+
arrayPush(selectEntries, [
|
|
4950
|
+
selectedOrJoinedTableId,
|
|
4951
|
+
clauseOrMapper,
|
|
4952
|
+
]);
|
|
4953
|
+
}
|
|
4954
|
+
},
|
|
4955
|
+
);
|
|
4956
|
+
const selects = mapNew(selectEntries);
|
|
4957
|
+
if (hasGroupsOrHavings && collIsEmpty(selects)) {
|
|
4958
|
+
commit?.();
|
|
4959
|
+
return queries;
|
|
4960
|
+
}
|
|
4758
4961
|
const selectJoinWhereStore = hasGroupsOrHavings
|
|
4759
4962
|
? (stagedDefinition[2] = createStore())
|
|
4760
4963
|
: resultStore2;
|
|
@@ -4933,18 +5136,85 @@ const createQueries = getCreateFunction((store) => {
|
|
|
4933
5136
|
joinedCellId,
|
|
4934
5137
|
);
|
|
4935
5138
|
};
|
|
4936
|
-
|
|
4937
|
-
|
|
4938
|
-
|
|
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
|
+
};
|
|
5189
|
+
selectJoinWhereStore.transaction(() => {
|
|
5190
|
+
if (!arrayEvery(wheres, (where2) => where2(getJoinCell))) {
|
|
5191
|
+
selectJoinWhereStore.delRow(queryId, rootRowId);
|
|
5192
|
+
} else if (hasGroupsOrHavings) {
|
|
5193
|
+
if (hasSelectAll) {
|
|
5194
|
+
writeSelectAllRow();
|
|
5195
|
+
} else {
|
|
5196
|
+
mapForEach(selects, (asCellId, tableCellGetter) =>
|
|
4939
5197
|
selectJoinWhereStore._[5](
|
|
4940
5198
|
queryId,
|
|
4941
5199
|
rootRowId,
|
|
4942
5200
|
asCellId,
|
|
4943
5201
|
tableCellGetter(getJoinCell, rootRowId),
|
|
4944
5202
|
),
|
|
4945
|
-
)
|
|
4946
|
-
|
|
4947
|
-
|
|
5203
|
+
);
|
|
5204
|
+
}
|
|
5205
|
+
} else if (hasSelectAll) {
|
|
5206
|
+
writeSelectAllRow();
|
|
5207
|
+
} else {
|
|
5208
|
+
mapForEach(selects, (asCellId, tableCellGetter) =>
|
|
5209
|
+
selectJoinWhereStore._[5](
|
|
5210
|
+
queryId,
|
|
5211
|
+
rootRowId,
|
|
5212
|
+
asCellId,
|
|
5213
|
+
tableCellGetter(getJoinCell, rootRowId),
|
|
5214
|
+
),
|
|
5215
|
+
);
|
|
5216
|
+
}
|
|
5217
|
+
});
|
|
4948
5218
|
};
|
|
4949
5219
|
const listenToTable = (
|
|
4950
5220
|
rootRowId,
|
|
@@ -5063,7 +5333,14 @@ const createQueries = getCreateFunction((store) => {
|
|
|
5063
5333
|
}),
|
|
5064
5334
|
);
|
|
5065
5335
|
const setQueryDefinitionImpl = (queryId, definition) => {
|
|
5066
|
-
const stagedDefinition = [
|
|
5336
|
+
const stagedDefinition = [
|
|
5337
|
+
mapNew(),
|
|
5338
|
+
mapNew(),
|
|
5339
|
+
void 0,
|
|
5340
|
+
mapNew(),
|
|
5341
|
+
setNew(),
|
|
5342
|
+
mapNew(),
|
|
5343
|
+
];
|
|
5067
5344
|
let committed = false;
|
|
5068
5345
|
tryCatchSync(
|
|
5069
5346
|
() =>
|
|
@@ -5084,6 +5361,18 @@ const createQueries = getCreateFunction((store) => {
|
|
|
5084
5361
|
collIsEmpty(stagedDefinition[1]) ? void 0 : stagedDefinition[1],
|
|
5085
5362
|
);
|
|
5086
5363
|
mapSet(preStores, queryId, stagedDefinition[2]);
|
|
5364
|
+
syncSelectAllListeners(queryId, stagedDefinition[3]);
|
|
5365
|
+
clearSelectAllRetryListeners(queryId);
|
|
5366
|
+
mapSet(
|
|
5367
|
+
referencedQueryIds,
|
|
5368
|
+
queryId,
|
|
5369
|
+
collIsEmpty(stagedDefinition[4]) ? void 0 : stagedDefinition[4],
|
|
5370
|
+
);
|
|
5371
|
+
mapSet(
|
|
5372
|
+
selectAllQuerySources,
|
|
5373
|
+
queryId,
|
|
5374
|
+
collIsEmpty(stagedDefinition[5]) ? void 0 : stagedDefinition[5],
|
|
5375
|
+
);
|
|
5087
5376
|
committed = true;
|
|
5088
5377
|
}),
|
|
5089
5378
|
(error) => {
|
|
@@ -5133,6 +5422,10 @@ const createQueries = getCreateFunction((store) => {
|
|
|
5133
5422
|
paramStore.delRow(PARAMS_TABLE, queryId);
|
|
5134
5423
|
resetPreStores(queryId);
|
|
5135
5424
|
resetSourceStores(queryId);
|
|
5425
|
+
syncSelectAllListeners(queryId);
|
|
5426
|
+
clearSelectAllRetryListeners(queryId);
|
|
5427
|
+
mapSet(referencedQueryIds, queryId);
|
|
5428
|
+
mapSet(selectAllQuerySources, queryId);
|
|
5136
5429
|
delDefinition(queryId);
|
|
5137
5430
|
cleanStores();
|
|
5138
5431
|
return queries;
|