@rocicorp/zero 0.25.0-canary.18 → 0.25.0-canary.21
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/out/replicache/src/persist/idb-databases-store.d.ts +1 -0
- package/out/replicache/src/persist/idb-databases-store.d.ts.map +1 -1
- package/out/replicache/src/persist/idb-databases-store.js +13 -2
- package/out/replicache/src/persist/idb-databases-store.js.map +1 -1
- package/out/zero/package.json.js +1 -1
- package/out/zero/src/adapters/drizzle.d.ts +1 -1
- package/out/zero/src/adapters/drizzle.d.ts.map +1 -1
- package/out/zero/src/adapters/drizzle.js +4 -1
- package/out/zero/src/bindings.d.ts +2 -0
- package/out/zero/src/bindings.d.ts.map +1 -0
- package/out/zero/src/bindings.js +27 -0
- package/out/zero/src/bindings.js.map +1 -0
- package/out/zero/src/react.js +2 -4
- package/out/zero/src/react.js.map +1 -1
- package/out/zero/src/solid.js +2 -2
- package/out/zero/src/zero.js +3 -5
- package/out/zero-cache/src/auth/read-authorizer.d.ts +1 -1
- package/out/zero-cache/src/auth/read-authorizer.d.ts.map +1 -1
- package/out/zero-cache/src/auth/read-authorizer.js.map +1 -1
- package/out/zero-cache/src/auth/write-authorizer.d.ts.map +1 -1
- package/out/zero-cache/src/auth/write-authorizer.js +5 -4
- package/out/zero-cache/src/auth/write-authorizer.js.map +1 -1
- package/out/zero-cache/src/config/zero-config.d.ts +24 -0
- package/out/zero-cache/src/config/zero-config.d.ts.map +1 -1
- package/out/zero-cache/src/config/zero-config.js +23 -4
- package/out/zero-cache/src/config/zero-config.js.map +1 -1
- package/out/zero-cache/src/server/anonymous-otel-start.d.ts +10 -1
- package/out/zero-cache/src/server/anonymous-otel-start.d.ts.map +1 -1
- package/out/zero-cache/src/server/anonymous-otel-start.js +34 -18
- package/out/zero-cache/src/server/anonymous-otel-start.js.map +1 -1
- package/out/zero-cache/src/server/syncer.d.ts.map +1 -1
- package/out/zero-cache/src/server/syncer.js +1 -0
- package/out/zero-cache/src/server/syncer.js.map +1 -1
- package/out/zero-cache/src/services/analyze.d.ts +1 -1
- package/out/zero-cache/src/services/analyze.d.ts.map +1 -1
- package/out/zero-cache/src/services/analyze.js +5 -5
- package/out/zero-cache/src/services/analyze.js.map +1 -1
- package/out/zero-cache/src/services/mutagen/pusher.d.ts +4 -4
- package/out/zero-cache/src/services/view-syncer/active-users-gauge.d.ts +2 -1
- package/out/zero-cache/src/services/view-syncer/active-users-gauge.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/active-users-gauge.js +26 -13
- package/out/zero-cache/src/services/view-syncer/active-users-gauge.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr-purger.d.ts +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr-purger.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr-purger.js +39 -15
- package/out/zero-cache/src/services/view-syncer/cvr-purger.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr-store.d.ts +4 -1
- package/out/zero-cache/src/services/view-syncer/cvr-store.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr-store.js +31 -9
- package/out/zero-cache/src/services/view-syncer/cvr-store.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr.d.ts +3 -0
- package/out/zero-cache/src/services/view-syncer/cvr.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/cvr.js +11 -0
- package/out/zero-cache/src/services/view-syncer/cvr.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/inspect-handler.js +1 -1
- package/out/zero-cache/src/services/view-syncer/inspect-handler.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.d.ts +1 -2
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.js +6 -6
- package/out/zero-cache/src/services/view-syncer/pipeline-driver.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/schema/cvr.d.ts +1 -0
- package/out/zero-cache/src/services/view-syncer/schema/cvr.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/schema/cvr.js +23 -10
- package/out/zero-cache/src/services/view-syncer/schema/cvr.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/schema/init.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/schema/init.js +31 -1
- package/out/zero-cache/src/services/view-syncer/schema/init.js.map +1 -1
- package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts +1 -0
- package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/view-syncer.js +20 -16
- package/out/zero-cache/src/services/view-syncer/view-syncer.js.map +1 -1
- package/out/zero-cache/src/workers/connect-params.d.ts +1 -0
- package/out/zero-cache/src/workers/connect-params.d.ts.map +1 -1
- package/out/zero-cache/src/workers/connect-params.js +2 -0
- package/out/zero-cache/src/workers/connect-params.js.map +1 -1
- package/out/zero-cache/src/workers/syncer-ws-message-handler.d.ts.map +1 -1
- package/out/zero-cache/src/workers/syncer-ws-message-handler.js +2 -0
- package/out/zero-cache/src/workers/syncer-ws-message-handler.js.map +1 -1
- package/out/zero-client/src/client/bindings.d.ts +12 -41
- package/out/zero-client/src/client/bindings.d.ts.map +1 -1
- package/out/zero-client/src/client/custom.d.ts +3 -0
- package/out/zero-client/src/client/custom.d.ts.map +1 -1
- package/out/zero-client/src/client/custom.js +3 -0
- package/out/zero-client/src/client/custom.js.map +1 -1
- package/out/zero-client/src/client/delete-clients-manager.d.ts +1 -1
- package/out/zero-client/src/client/delete-clients-manager.d.ts.map +1 -1
- package/out/zero-client/src/client/delete-clients-manager.js +30 -3
- package/out/zero-client/src/client/delete-clients-manager.js.map +1 -1
- package/out/zero-client/src/client/make-replicache-mutators.js +1 -3
- package/out/zero-client/src/client/make-replicache-mutators.js.map +1 -1
- package/out/zero-client/src/client/options.d.ts +1 -1
- package/out/zero-client/src/client/options.js.map +1 -1
- package/out/zero-client/src/client/version.js +1 -1
- package/out/zero-client/src/client/zero.d.ts +1 -0
- package/out/zero-client/src/client/zero.d.ts.map +1 -1
- package/out/zero-client/src/client/zero.js +43 -26
- package/out/zero-client/src/client/zero.js.map +1 -1
- package/out/zero-client/src/mod.d.ts +6 -4
- package/out/zero-client/src/mod.d.ts.map +1 -1
- package/out/zero-protocol/src/analyze-query-result.d.ts +2 -2
- package/out/zero-protocol/src/analyze-query-result.js +2 -2
- package/out/zero-protocol/src/analyze-query-result.js.map +1 -1
- package/out/zero-protocol/src/down.d.ts +2 -2
- package/out/zero-protocol/src/inspect-down.d.ts +6 -6
- package/out/zero-protocol/src/inspect-up.d.ts +4 -4
- package/out/zero-protocol/src/inspect-up.js +1 -1
- package/out/zero-protocol/src/inspect-up.js.map +1 -1
- package/out/zero-protocol/src/protocol-version.d.ts +1 -1
- package/out/zero-protocol/src/protocol-version.d.ts.map +1 -1
- package/out/zero-protocol/src/protocol-version.js +1 -1
- package/out/zero-protocol/src/protocol-version.js.map +1 -1
- package/out/zero-protocol/src/up.d.ts +1 -1
- package/out/zero-react/src/bindings.d.ts +2 -0
- package/out/zero-react/src/bindings.d.ts.map +1 -0
- package/out/zero-react/src/mod.d.ts +1 -10
- package/out/zero-react/src/mod.d.ts.map +1 -1
- package/out/zero-react/src/{use-zero-connection-state.d.ts → use-connection-state.d.ts} +3 -3
- package/out/zero-react/src/use-connection-state.d.ts.map +1 -0
- package/out/zero-react/src/{use-zero-connection-state.js → use-connection-state.js} +3 -3
- package/out/zero-react/src/use-connection-state.js.map +1 -0
- package/out/zero-react/src/use-query.d.ts +2 -10
- package/out/zero-react/src/use-query.d.ts.map +1 -1
- package/out/zero-react/src/use-query.js +24 -22
- package/out/zero-react/src/use-query.js.map +1 -1
- package/out/zero-react/src/use-zero-online.d.ts +1 -1
- package/out/zero-react/src/use-zero-online.js.map +1 -1
- package/out/zero-react/src/zero-provider.d.ts +1 -5
- package/out/zero-react/src/zero-provider.d.ts.map +1 -1
- package/out/zero-react/src/zero-provider.js +16 -0
- package/out/zero-react/src/zero-provider.js.map +1 -1
- package/out/zero-react/src/zero.d.ts +2 -0
- package/out/zero-react/src/zero.d.ts.map +1 -0
- package/out/zero-schema/src/permissions.d.ts.map +1 -1
- package/out/zero-schema/src/permissions.js +2 -8
- package/out/zero-schema/src/permissions.js.map +1 -1
- package/out/zero-server/src/custom.d.ts +3 -0
- package/out/zero-server/src/custom.d.ts.map +1 -1
- package/out/zero-server/src/custom.js +3 -0
- package/out/zero-server/src/custom.js.map +1 -1
- package/out/zero-solid/src/bindings.d.ts +2 -0
- package/out/zero-solid/src/bindings.d.ts.map +1 -0
- package/out/zero-solid/src/mod.d.ts +1 -8
- package/out/zero-solid/src/mod.d.ts.map +1 -1
- package/out/zero-solid/src/solid-view.d.ts +1 -8
- package/out/zero-solid/src/solid-view.d.ts.map +1 -1
- package/out/zero-solid/src/solid-view.js +31 -0
- package/out/zero-solid/src/solid-view.js.map +1 -1
- package/out/zero-solid/src/{use-zero-connection-state.d.ts → use-connection-state.d.ts} +3 -3
- package/out/zero-solid/src/use-connection-state.d.ts.map +1 -0
- package/out/zero-solid/src/{use-zero-connection-state.js → use-connection-state.js} +3 -3
- package/out/zero-solid/src/use-connection-state.js.map +1 -0
- package/out/zero-solid/src/use-query.d.ts +1 -7
- package/out/zero-solid/src/use-query.d.ts.map +1 -1
- package/out/zero-solid/src/use-query.js +43 -12
- package/out/zero-solid/src/use-query.js.map +1 -1
- package/out/zero-solid/src/use-zero-online.d.ts +1 -1
- package/out/zero-solid/src/use-zero-online.js.map +1 -1
- package/out/zero-solid/src/use-zero.d.ts +1 -5
- package/out/zero-solid/src/use-zero.d.ts.map +1 -1
- package/out/zero-solid/src/use-zero.js +16 -0
- package/out/zero-solid/src/use-zero.js.map +1 -1
- package/out/zero-solid/src/zero.d.ts +2 -0
- package/out/zero-solid/src/zero.d.ts.map +1 -0
- package/out/zql/src/ivm/flipped-join.d.ts.map +1 -1
- package/out/zql/src/ivm/flipped-join.js +29 -27
- package/out/zql/src/ivm/flipped-join.js.map +1 -1
- package/out/zql/src/ivm/join-utils.d.ts +7 -1
- package/out/zql/src/ivm/join-utils.d.ts.map +1 -1
- package/out/zql/src/ivm/join-utils.js +12 -0
- package/out/zql/src/ivm/join-utils.js.map +1 -1
- package/out/zql/src/ivm/join.d.ts.map +1 -1
- package/out/zql/src/ivm/join.js +11 -25
- package/out/zql/src/ivm/join.js.map +1 -1
- package/out/zql/src/mutate/custom.d.ts +3 -0
- package/out/zql/src/mutate/custom.d.ts.map +1 -1
- package/out/zql/src/mutate/custom.js.map +1 -1
- package/out/zql/src/mutate/mutator-registry.d.ts +2 -2
- package/out/zql/src/mutate/mutator-registry.d.ts.map +1 -1
- package/out/zql/src/mutate/mutator-registry.js.map +1 -1
- package/out/zql/src/mutate/mutator.d.ts +1 -1
- package/out/zql/src/mutate/mutator.d.ts.map +1 -1
- package/out/zql/src/mutate/mutator.js.map +1 -1
- package/out/zql/src/planner/planner-debug.d.ts +3 -3
- package/out/zql/src/planner/planner-debug.js.map +1 -1
- package/out/zql/src/query/create-builder.d.ts +2 -1
- package/out/zql/src/query/create-builder.d.ts.map +1 -1
- package/out/zql/src/query/create-builder.js +3 -0
- package/out/zql/src/query/create-builder.js.map +1 -1
- package/out/zql/src/query/query-impl.d.ts +39 -6
- package/out/zql/src/query/query-impl.d.ts.map +1 -1
- package/out/zql/src/query/query-impl.js +414 -23
- package/out/zql/src/query/query-impl.js.map +1 -1
- package/out/zql/src/query/query-registry.d.ts +2 -2
- package/out/zql/src/query/query-registry.d.ts.map +1 -1
- package/out/zql/src/query/query-registry.js.map +1 -1
- package/out/zql/src/query/runnable-query-impl.d.ts +2 -2
- package/out/zql/src/query/runnable-query-impl.d.ts.map +1 -1
- package/out/zql/src/query/runnable-query-impl.js +2 -2
- package/out/zql/src/query/runnable-query-impl.js.map +1 -1
- package/out/zql/src/query/schema-query.d.ts +4 -2
- package/out/zql/src/query/schema-query.d.ts.map +1 -1
- package/out/zql/src/query/static-query.d.ts +2 -16
- package/out/zql/src/query/static-query.d.ts.map +1 -1
- package/out/zql/src/query/static-query.js +10 -37
- package/out/zql/src/query/static-query.js.map +1 -1
- package/package.json +7 -3
- package/out/zero-client/src/client/bindings.js +0 -33
- package/out/zero-client/src/client/bindings.js.map +0 -1
- package/out/zero-react/src/components/inspector.d.ts +0 -9
- package/out/zero-react/src/components/inspector.d.ts.map +0 -1
- package/out/zero-react/src/components/inspector.js +0 -38
- package/out/zero-react/src/components/inspector.js.map +0 -1
- package/out/zero-react/src/components/mark-icon.d.ts +0 -3
- package/out/zero-react/src/components/mark-icon.d.ts.map +0 -1
- package/out/zero-react/src/components/mark-icon.js +0 -28
- package/out/zero-react/src/components/mark-icon.js.map +0 -1
- package/out/zero-react/src/components/zero-inspector.d.ts +0 -8
- package/out/zero-react/src/components/zero-inspector.d.ts.map +0 -1
- package/out/zero-react/src/components/zero-inspector.js +0 -44
- package/out/zero-react/src/components/zero-inspector.js.map +0 -1
- package/out/zero-react/src/use-zero-connection-state.d.ts.map +0 -1
- package/out/zero-react/src/use-zero-connection-state.js.map +0 -1
- package/out/zero-solid/src/use-zero-connection-state.d.ts.map +0 -1
- package/out/zero-solid/src/use-zero-connection-state.js.map +0 -1
- package/out/zql/src/query/abstract-query.d.ts +0 -42
- package/out/zql/src/query/abstract-query.d.ts.map +0 -1
- package/out/zql/src/query/abstract-query.js +0 -405
- package/out/zql/src/query/abstract-query.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"use-zero-connection-state.d.ts","sourceRoot":"","sources":["../../../../zero-solid/src/use-zero-connection-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwC,KAAK,QAAQ,EAAC,MAAM,UAAU,CAAC;AAC9E,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,4CAA4C,CAAC;AAGhF;;;;;GAKG;AACH,wBAAgB,sBAAsB,IAAI,QAAQ,CAAC,eAAe,CAAC,CAclE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"use-zero-connection-state.js","sources":["../../../../zero-solid/src/use-zero-connection-state.ts"],"sourcesContent":["import {createEffect, createSignal, onCleanup, type Accessor} from 'solid-js';\nimport type {ConnectionState} from '../../zero-client/src/client/connection.ts';\nimport {useZero} from './use-zero.ts';\n\n/**\n * Tracks the connection status of the current Zero instance.\n *\n * @returns The connection status of the Zero instance.\n * @see {@link ConnectionState} for more details on the connection state.\n */\nexport function useZeroConnectionState(): Accessor<ConnectionState> {\n const zero = useZero();\n\n const [connectionState, setConnectionState] = createSignal<ConnectionState>(\n zero().connection.state.current,\n );\n\n createEffect(() => {\n const unsubscribe = zero().connection.state.subscribe(setConnectionState);\n\n onCleanup(unsubscribe);\n });\n\n return connectionState;\n}\n"],"names":[],"mappings":";;AAUO,SAAS,yBAAoD;AAClE,QAAM,OAAO,QAAA;AAEb,QAAM,CAAC,iBAAiB,kBAAkB,IAAI;AAAA,IAC5C,KAAA,EAAO,WAAW,MAAM;AAAA,EAAA;AAG1B,eAAa,MAAM;AACjB,UAAM,cAAc,KAAA,EAAO,WAAW,MAAM,UAAU,kBAAkB;AAExE,cAAU,WAAW;AAAA,EACvB,CAAC;AAED,SAAO;AACT;"}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import type { ReadonlyJSONValue } from '../../../shared/src/json.ts';
|
|
2
|
-
import { type AST, type Condition, type Parameter, type SimpleOperator, type System } from '../../../zero-protocol/src/ast.ts';
|
|
3
|
-
import type { Schema } from '../../../zero-types/src/schema.ts';
|
|
4
|
-
import type { Format, ViewFactory } from '../ivm/view.ts';
|
|
5
|
-
import { type ExpressionFactory } from './expression.ts';
|
|
6
|
-
import type { CustomQueryID } from './named.ts';
|
|
7
|
-
import { type QueryInternals, queryInternalsTag } from './query-internals.ts';
|
|
8
|
-
import type { AnyQuery, ExistsOptions, GetFilterType, HumanReadable, PreloadOptions, PullRow, Query, RunOptions } from './query.ts';
|
|
9
|
-
import type { TTL } from './ttl.ts';
|
|
10
|
-
import type { TypedView } from './typed-view.ts';
|
|
11
|
-
type GetFilterTypeAny = GetFilterType<any, any, any>;
|
|
12
|
-
type NewQueryFunction<TSchema extends Schema> = <TTable extends keyof TSchema['tables'] & string, TReturn>(this: unknown, tableName: TTable, ast: AST, format: Format, customQueryID: CustomQueryID | undefined, currentJunction: string | undefined) => Query<TTable, TSchema, TReturn>;
|
|
13
|
-
export declare abstract class AbstractQuery<TTable extends keyof TSchema['tables'] & string, TSchema extends Schema, TReturn = PullRow<TTable, TSchema>> implements Query<TTable, TSchema, TReturn>, QueryInternals<TTable, TSchema, TReturn> {
|
|
14
|
-
#private;
|
|
15
|
-
readonly [queryInternalsTag] = true;
|
|
16
|
-
readonly format: Format;
|
|
17
|
-
readonly customQueryID: CustomQueryID | undefined;
|
|
18
|
-
constructor(schema: TSchema, tableName: TTable, ast: AST, format: Format, system: System, customQueryID: CustomQueryID | undefined, currentJunction: string | undefined, newQuery: NewQueryFunction<TSchema>);
|
|
19
|
-
run(_options?: RunOptions): Promise<HumanReadable<TReturn>>;
|
|
20
|
-
preload(_options?: PreloadOptions): {
|
|
21
|
-
cleanup: () => void;
|
|
22
|
-
complete: Promise<void>;
|
|
23
|
-
};
|
|
24
|
-
materialize(ttl?: TTL): TypedView<HumanReadable<TReturn>>;
|
|
25
|
-
materialize<T>(factory: ViewFactory<TTable, TSchema, TReturn, T>, ttl?: TTL): T;
|
|
26
|
-
nameAndArgs(name: string, args: ReadonlyArray<ReadonlyJSONValue>): Query<TTable, TSchema, TReturn>;
|
|
27
|
-
hash(): string;
|
|
28
|
-
one: () => Query<TTable, TSchema, TReturn | undefined>;
|
|
29
|
-
whereExists: (relationship: string, cbOrOptions?: ((q: AnyQuery) => AnyQuery) | ExistsOptions, options?: ExistsOptions) => Query<TTable, TSchema, TReturn>;
|
|
30
|
-
related: (relationship: string, cb?: (q: AnyQuery) => AnyQuery) => Query<TTable, TSchema, any>;
|
|
31
|
-
where: (fieldOrExpressionFactory: string | ExpressionFactory<TTable, TSchema>, opOrValue?: SimpleOperator | GetFilterTypeAny | Parameter, value?: GetFilterTypeAny | Parameter) => Query<TTable, TSchema, TReturn>;
|
|
32
|
-
start: (row: Partial<Record<string, ReadonlyJSONValue | undefined>>, opts?: {
|
|
33
|
-
inclusive: boolean;
|
|
34
|
-
}) => Query<TTable, TSchema, TReturn>;
|
|
35
|
-
limit: (limit: number) => Query<TTable, TSchema, TReturn>;
|
|
36
|
-
orderBy: <TSelector extends keyof TSchema["tables"][TTable]["columns"]>(field: TSelector, direction: "asc" | "desc") => Query<TTable, TSchema, TReturn>;
|
|
37
|
-
protected _exists: (relationship: string, cb: ((query: AnyQuery) => AnyQuery) | undefined, options?: ExistsOptions) => Condition;
|
|
38
|
-
get ast(): AST;
|
|
39
|
-
}
|
|
40
|
-
export declare function asAbstractQuery<TTable extends keyof TSchema['tables'] & string, TSchema extends Schema, TReturn>(q: Query<TTable, TSchema, TReturn>): AbstractQuery<TTable, TSchema, TReturn>;
|
|
41
|
-
export {};
|
|
42
|
-
//# sourceMappingURL=abstract-query.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"abstract-query.d.ts","sourceRoot":"","sources":["../../../../../zql/src/query/abstract-query.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,6BAA6B,CAAC;AACnE,OAAO,EACL,KAAK,GAAG,EAER,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,MAAM,EAEZ,MAAM,mCAAmC,CAAC;AAE3C,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,mCAAmC,CAAC;AAG9D,OAAO,KAAK,EAAC,MAAM,EAAE,WAAW,EAAC,MAAM,gBAAgB,CAAC;AACxD,OAAO,EACL,KAAK,iBAAiB,EAKvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAC,KAAK,cAAc,EAAE,iBAAiB,EAAC,MAAM,sBAAsB,CAAC;AAC5E,OAAO,KAAK,EACV,QAAQ,EACR,aAAa,EACb,aAAa,EACb,aAAa,EACb,cAAc,EACd,OAAO,EACP,KAAK,EACL,UAAU,EACX,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAC,GAAG,EAAC,MAAM,UAAU,CAAC;AAClC,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAG/C,KAAK,gBAAgB,GAAG,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAErD,KAAK,gBAAgB,CAAC,OAAO,SAAS,MAAM,IAAI,CAC9C,MAAM,SAAS,MAAM,OAAO,CAAC,QAAQ,CAAC,GAAG,MAAM,EAC/C,OAAO,EAEP,IAAI,EAAE,OAAO,EACb,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,aAAa,GAAG,SAAS,EACxC,eAAe,EAAE,MAAM,GAAG,SAAS,KAChC,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAErC,8BAAsB,aAAa,CAC/B,MAAM,SAAS,MAAM,OAAO,CAAC,QAAQ,CAAC,GAAG,MAAM,EAC/C,OAAO,SAAS,MAAM,EACtB,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAEpC,YACE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,EAC/B,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC;;IAE1C,QAAQ,CAAC,CAAC,iBAAiB,CAAC,QAAQ;IAKpC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAIxB,QAAQ,CAAC,aAAa,EAAE,aAAa,GAAG,SAAS,CAAC;gBAIhD,MAAM,EAAE,OAAO,EACf,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,aAAa,GAAG,SAAS,EACxC,eAAe,EAAE,MAAM,GAAG,SAAS,EACnC,QAAQ,EAAE,gBAAgB,CAAC,OAAO,CAAC;IAYrC,GAAG,CAAC,QAAQ,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAI3D,OAAO,CAAC,QAAQ,CAAC,EAAE,cAAc,GAAG;QAClC,OAAO,EAAE,MAAM,IAAI,CAAC;QACpB,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;KACzB;IAID,WAAW,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACzD,WAAW,CAAC,CAAC,EACX,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,EACjD,GAAG,CAAC,EAAE,GAAG,GACR,CAAC;IAQJ,WAAW,CACT,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,aAAa,CAAC,iBAAiB,CAAC,GACrC,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC;IAalC,IAAI,IAAI,MAAM;IAOd,GAAG,QAAO,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC,CAajD;IAEJ,WAAW,GACT,cAAc,MAAM,EACpB,cAAc,CAAC,CAAC,CAAC,EAAE,QAAQ,KAAK,QAAQ,CAAC,GAAG,aAAa,EACzD,UAAU,aAAa,KACtB,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAWhC;IAEF,OAAO,GACL,cAAc,MAAM,EACpB,KAAK,CAAC,CAAC,EAAE,QAAQ,KAAK,QAAQ,KAE7B,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,CA+I5B;IAEF,KAAK,GACH,0BAA0B,MAAM,GAAG,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,EACrE,YAAY,cAAc,GAAG,gBAAgB,GAAG,SAAS,EACzD,QAAQ,gBAAgB,GAAG,SAAS,KACnC,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAgChC;IAEF,KAAK,GACH,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,SAAS,CAAC,CAAC,EAC3D,OAAO;QAAC,SAAS,EAAE,OAAO,CAAA;KAAC,KAC1B,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAa9B;IAEJ,KAAK,GAAI,OAAO,MAAM,KAAG,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAwBtD;IAEF,OAAO,GAAI,SAAS,SAAS,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,EACrE,OAAO,SAAS,EAChB,WAAW,KAAK,GAAG,MAAM,KACxB,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAiBhC;IAEF,SAAS,CAAC,OAAO,GACf,cAAc,MAAM,EACpB,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,KAAK,QAAQ,CAAC,GAAG,SAAS,EAC/C,UAAU,aAAa,KACtB,SAAS,CA6FV;IAEF,IAAI,GAAG,IAAI,GAAG,CAEb;CACF;AACD,wBAAgB,eAAe,CAC7B,MAAM,SAAS,MAAM,OAAO,CAAC,QAAQ,CAAC,GAAG,MAAM,EAC/C,OAAO,SAAS,MAAM,EACtB,OAAO,EACP,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAG7E"}
|
|
@@ -1,405 +0,0 @@
|
|
|
1
|
-
import { assert } from "../../../shared/src/asserts.js";
|
|
2
|
-
import { SUBQ_PREFIX } from "../../../zero-protocol/src/ast.js";
|
|
3
|
-
import { hashOfAST } from "../../../zero-protocol/src/query-hash.js";
|
|
4
|
-
import { NotImplementedError } from "../error.js";
|
|
5
|
-
import { defaultFormat } from "../../../zero-types/src/format.js";
|
|
6
|
-
import { ExpressionBuilder, cmp, and, simplifyCondition } from "./expression.js";
|
|
7
|
-
import { queryInternalsTag } from "./query-internals.js";
|
|
8
|
-
class AbstractQuery {
|
|
9
|
-
[queryInternalsTag] = true;
|
|
10
|
-
#schema;
|
|
11
|
-
#tableName;
|
|
12
|
-
#ast;
|
|
13
|
-
format;
|
|
14
|
-
#hash = "";
|
|
15
|
-
#system;
|
|
16
|
-
#currentJunction;
|
|
17
|
-
customQueryID;
|
|
18
|
-
#newQuery;
|
|
19
|
-
constructor(schema, tableName, ast, format, system, customQueryID, currentJunction, newQuery) {
|
|
20
|
-
this.#schema = schema;
|
|
21
|
-
this.#tableName = tableName;
|
|
22
|
-
this.#ast = ast;
|
|
23
|
-
this.format = format;
|
|
24
|
-
this.#system = system;
|
|
25
|
-
this.#currentJunction = currentJunction;
|
|
26
|
-
this.customQueryID = customQueryID;
|
|
27
|
-
this.#newQuery = newQuery;
|
|
28
|
-
}
|
|
29
|
-
run(_options) {
|
|
30
|
-
throwQueryNotRunnable();
|
|
31
|
-
}
|
|
32
|
-
preload(_options) {
|
|
33
|
-
throwQueryNotRunnable();
|
|
34
|
-
}
|
|
35
|
-
materialize(_factoryOrTTL, _ttl) {
|
|
36
|
-
throwQueryNotRunnable();
|
|
37
|
-
}
|
|
38
|
-
nameAndArgs(name, args) {
|
|
39
|
-
return this.#newQuery(
|
|
40
|
-
this.#tableName,
|
|
41
|
-
this.#ast,
|
|
42
|
-
this.format,
|
|
43
|
-
{
|
|
44
|
-
name,
|
|
45
|
-
args
|
|
46
|
-
},
|
|
47
|
-
this.#currentJunction
|
|
48
|
-
);
|
|
49
|
-
}
|
|
50
|
-
hash() {
|
|
51
|
-
if (!this.#hash) {
|
|
52
|
-
this.#hash = hashOfAST(this.#ast);
|
|
53
|
-
}
|
|
54
|
-
return this.#hash;
|
|
55
|
-
}
|
|
56
|
-
one = () => this.#newQuery(
|
|
57
|
-
this.#tableName,
|
|
58
|
-
{
|
|
59
|
-
...this.#ast,
|
|
60
|
-
limit: 1
|
|
61
|
-
},
|
|
62
|
-
{
|
|
63
|
-
...this.format,
|
|
64
|
-
singular: true
|
|
65
|
-
},
|
|
66
|
-
this.customQueryID,
|
|
67
|
-
this.#currentJunction
|
|
68
|
-
);
|
|
69
|
-
whereExists = (relationship, cbOrOptions, options) => {
|
|
70
|
-
const cb = typeof cbOrOptions === "function" ? cbOrOptions : void 0;
|
|
71
|
-
const opts = typeof cbOrOptions === "function" ? options : cbOrOptions;
|
|
72
|
-
const flipped = opts?.flip;
|
|
73
|
-
return this.where(
|
|
74
|
-
({ exists }) => exists(
|
|
75
|
-
relationship,
|
|
76
|
-
cb,
|
|
77
|
-
flipped !== void 0 ? { flip: flipped } : void 0
|
|
78
|
-
)
|
|
79
|
-
);
|
|
80
|
-
};
|
|
81
|
-
related = (relationship, cb) => {
|
|
82
|
-
if (relationship.startsWith(SUBQ_PREFIX)) {
|
|
83
|
-
throw new Error(
|
|
84
|
-
`Relationship names may not start with "${SUBQ_PREFIX}". That is a reserved prefix.`
|
|
85
|
-
);
|
|
86
|
-
}
|
|
87
|
-
cb = cb ?? ((q) => q);
|
|
88
|
-
const related = this.#schema.relationships[this.#tableName][relationship];
|
|
89
|
-
assert(related, "Invalid relationship");
|
|
90
|
-
if (isOneHop(related)) {
|
|
91
|
-
const { destSchema, destField, sourceField, cardinality } = related[0];
|
|
92
|
-
const q = this.#newQuery(
|
|
93
|
-
destSchema,
|
|
94
|
-
{
|
|
95
|
-
table: destSchema,
|
|
96
|
-
alias: relationship
|
|
97
|
-
},
|
|
98
|
-
{
|
|
99
|
-
relationships: {},
|
|
100
|
-
singular: cardinality === "one"
|
|
101
|
-
},
|
|
102
|
-
this.customQueryID,
|
|
103
|
-
void 0
|
|
104
|
-
);
|
|
105
|
-
const subQuery = asAbstractQuery(cb(q));
|
|
106
|
-
assert(
|
|
107
|
-
isCompoundKey(sourceField),
|
|
108
|
-
"The source of a relationship must specify at last 1 field"
|
|
109
|
-
);
|
|
110
|
-
assert(
|
|
111
|
-
isCompoundKey(destField),
|
|
112
|
-
"The destination of a relationship must specify at last 1 field"
|
|
113
|
-
);
|
|
114
|
-
assert(
|
|
115
|
-
sourceField.length === destField.length,
|
|
116
|
-
"The source and destination of a relationship must have the same number of fields"
|
|
117
|
-
);
|
|
118
|
-
return this.#newQuery(
|
|
119
|
-
this.#tableName,
|
|
120
|
-
{
|
|
121
|
-
...this.#ast,
|
|
122
|
-
related: [
|
|
123
|
-
...this.#ast.related ?? [],
|
|
124
|
-
{
|
|
125
|
-
system: this.#system,
|
|
126
|
-
correlation: {
|
|
127
|
-
parentField: sourceField,
|
|
128
|
-
childField: destField
|
|
129
|
-
},
|
|
130
|
-
subquery: subQuery.#ast
|
|
131
|
-
}
|
|
132
|
-
]
|
|
133
|
-
},
|
|
134
|
-
{
|
|
135
|
-
...this.format,
|
|
136
|
-
relationships: {
|
|
137
|
-
...this.format.relationships,
|
|
138
|
-
[relationship]: subQuery.format
|
|
139
|
-
}
|
|
140
|
-
},
|
|
141
|
-
this.customQueryID,
|
|
142
|
-
this.#currentJunction
|
|
143
|
-
);
|
|
144
|
-
}
|
|
145
|
-
if (isTwoHop(related)) {
|
|
146
|
-
const [firstRelation, secondRelation] = related;
|
|
147
|
-
const { destSchema } = secondRelation;
|
|
148
|
-
const junctionSchema = firstRelation.destSchema;
|
|
149
|
-
const sq = asAbstractQuery(
|
|
150
|
-
cb(
|
|
151
|
-
this.#newQuery(
|
|
152
|
-
destSchema,
|
|
153
|
-
{
|
|
154
|
-
table: destSchema,
|
|
155
|
-
alias: relationship
|
|
156
|
-
},
|
|
157
|
-
{
|
|
158
|
-
relationships: {},
|
|
159
|
-
singular: secondRelation.cardinality === "one"
|
|
160
|
-
},
|
|
161
|
-
this.customQueryID,
|
|
162
|
-
relationship
|
|
163
|
-
)
|
|
164
|
-
)
|
|
165
|
-
);
|
|
166
|
-
assert(isCompoundKey(firstRelation.sourceField), "Invalid relationship");
|
|
167
|
-
assert(isCompoundKey(firstRelation.destField), "Invalid relationship");
|
|
168
|
-
assert(isCompoundKey(secondRelation.sourceField), "Invalid relationship");
|
|
169
|
-
assert(isCompoundKey(secondRelation.destField), "Invalid relationship");
|
|
170
|
-
return this.#newQuery(
|
|
171
|
-
this.#tableName,
|
|
172
|
-
{
|
|
173
|
-
...this.#ast,
|
|
174
|
-
related: [
|
|
175
|
-
...this.#ast.related ?? [],
|
|
176
|
-
{
|
|
177
|
-
system: this.#system,
|
|
178
|
-
correlation: {
|
|
179
|
-
parentField: firstRelation.sourceField,
|
|
180
|
-
childField: firstRelation.destField
|
|
181
|
-
},
|
|
182
|
-
hidden: true,
|
|
183
|
-
subquery: {
|
|
184
|
-
table: junctionSchema,
|
|
185
|
-
alias: relationship,
|
|
186
|
-
related: [
|
|
187
|
-
{
|
|
188
|
-
system: this.#system,
|
|
189
|
-
correlation: {
|
|
190
|
-
parentField: secondRelation.sourceField,
|
|
191
|
-
childField: secondRelation.destField
|
|
192
|
-
},
|
|
193
|
-
subquery: sq.#ast
|
|
194
|
-
}
|
|
195
|
-
]
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
]
|
|
199
|
-
},
|
|
200
|
-
{
|
|
201
|
-
...this.format,
|
|
202
|
-
relationships: {
|
|
203
|
-
...this.format.relationships,
|
|
204
|
-
[relationship]: sq.format
|
|
205
|
-
}
|
|
206
|
-
},
|
|
207
|
-
this.customQueryID,
|
|
208
|
-
this.#currentJunction
|
|
209
|
-
);
|
|
210
|
-
}
|
|
211
|
-
throw new Error(`Invalid relationship ${relationship}`);
|
|
212
|
-
};
|
|
213
|
-
where = (fieldOrExpressionFactory, opOrValue, value) => {
|
|
214
|
-
let cond;
|
|
215
|
-
if (typeof fieldOrExpressionFactory === "function") {
|
|
216
|
-
cond = fieldOrExpressionFactory(
|
|
217
|
-
new ExpressionBuilder(this._exists)
|
|
218
|
-
);
|
|
219
|
-
} else {
|
|
220
|
-
assert(opOrValue !== void 0, "Invalid condition");
|
|
221
|
-
cond = cmp(fieldOrExpressionFactory, opOrValue, value);
|
|
222
|
-
}
|
|
223
|
-
const existingWhere = this.#ast.where;
|
|
224
|
-
if (existingWhere) {
|
|
225
|
-
cond = and(existingWhere, cond);
|
|
226
|
-
}
|
|
227
|
-
const where = simplifyCondition(cond);
|
|
228
|
-
return this.#newQuery(
|
|
229
|
-
this.#tableName,
|
|
230
|
-
{
|
|
231
|
-
...this.#ast,
|
|
232
|
-
where
|
|
233
|
-
},
|
|
234
|
-
this.format,
|
|
235
|
-
this.customQueryID,
|
|
236
|
-
this.#currentJunction
|
|
237
|
-
);
|
|
238
|
-
};
|
|
239
|
-
start = (row, opts) => this.#newQuery(
|
|
240
|
-
this.#tableName,
|
|
241
|
-
{
|
|
242
|
-
...this.#ast,
|
|
243
|
-
start: {
|
|
244
|
-
row,
|
|
245
|
-
exclusive: !opts?.inclusive
|
|
246
|
-
}
|
|
247
|
-
},
|
|
248
|
-
this.format,
|
|
249
|
-
this.customQueryID,
|
|
250
|
-
this.#currentJunction
|
|
251
|
-
);
|
|
252
|
-
limit = (limit) => {
|
|
253
|
-
if (limit < 0) {
|
|
254
|
-
throw new Error("Limit must be non-negative");
|
|
255
|
-
}
|
|
256
|
-
if ((limit | 0) !== limit) {
|
|
257
|
-
throw new Error("Limit must be an integer");
|
|
258
|
-
}
|
|
259
|
-
if (this.#currentJunction) {
|
|
260
|
-
throw new NotImplementedError(
|
|
261
|
-
"Limit is not supported in junction relationships yet. Junction relationship being limited: " + this.#currentJunction
|
|
262
|
-
);
|
|
263
|
-
}
|
|
264
|
-
return this.#newQuery(
|
|
265
|
-
this.#tableName,
|
|
266
|
-
{
|
|
267
|
-
...this.#ast,
|
|
268
|
-
limit
|
|
269
|
-
},
|
|
270
|
-
this.format,
|
|
271
|
-
this.customQueryID,
|
|
272
|
-
this.#currentJunction
|
|
273
|
-
);
|
|
274
|
-
};
|
|
275
|
-
orderBy = (field, direction) => {
|
|
276
|
-
if (this.#currentJunction) {
|
|
277
|
-
throw new NotImplementedError(
|
|
278
|
-
"Order by is not supported in junction relationships yet. Junction relationship being ordered: " + this.#currentJunction
|
|
279
|
-
);
|
|
280
|
-
}
|
|
281
|
-
return this.#newQuery(
|
|
282
|
-
this.#tableName,
|
|
283
|
-
{
|
|
284
|
-
...this.#ast,
|
|
285
|
-
orderBy: [...this.#ast.orderBy ?? [], [field, direction]]
|
|
286
|
-
},
|
|
287
|
-
this.format,
|
|
288
|
-
this.customQueryID,
|
|
289
|
-
this.#currentJunction
|
|
290
|
-
);
|
|
291
|
-
};
|
|
292
|
-
_exists = (relationship, cb, options) => {
|
|
293
|
-
cb = cb ?? ((q) => q);
|
|
294
|
-
const flip = options?.flip;
|
|
295
|
-
const related = this.#schema.relationships[this.#tableName][relationship];
|
|
296
|
-
assert(related, "Invalid relationship");
|
|
297
|
-
if (isOneHop(related)) {
|
|
298
|
-
const { destSchema: destTableName, sourceField, destField } = related[0];
|
|
299
|
-
assert(isCompoundKey(sourceField), "Invalid relationship");
|
|
300
|
-
assert(isCompoundKey(destField), "Invalid relationship");
|
|
301
|
-
const subQuery = asAbstractQuery(
|
|
302
|
-
cb(
|
|
303
|
-
this.#newQuery(
|
|
304
|
-
destTableName,
|
|
305
|
-
{
|
|
306
|
-
table: destTableName,
|
|
307
|
-
alias: `${SUBQ_PREFIX}${relationship}`
|
|
308
|
-
},
|
|
309
|
-
defaultFormat,
|
|
310
|
-
this.customQueryID,
|
|
311
|
-
void 0
|
|
312
|
-
)
|
|
313
|
-
)
|
|
314
|
-
);
|
|
315
|
-
return {
|
|
316
|
-
type: "correlatedSubquery",
|
|
317
|
-
related: {
|
|
318
|
-
system: this.#system,
|
|
319
|
-
correlation: {
|
|
320
|
-
parentField: sourceField,
|
|
321
|
-
childField: destField
|
|
322
|
-
},
|
|
323
|
-
subquery: subQuery.#ast
|
|
324
|
-
},
|
|
325
|
-
op: "EXISTS",
|
|
326
|
-
flip
|
|
327
|
-
};
|
|
328
|
-
}
|
|
329
|
-
if (isTwoHop(related)) {
|
|
330
|
-
const [firstRelation, secondRelation] = related;
|
|
331
|
-
assert(isCompoundKey(firstRelation.sourceField), "Invalid relationship");
|
|
332
|
-
assert(isCompoundKey(firstRelation.destField), "Invalid relationship");
|
|
333
|
-
assert(isCompoundKey(secondRelation.sourceField), "Invalid relationship");
|
|
334
|
-
assert(isCompoundKey(secondRelation.destField), "Invalid relationship");
|
|
335
|
-
const { destSchema } = secondRelation;
|
|
336
|
-
const junctionSchema = firstRelation.destSchema;
|
|
337
|
-
const queryToDest = cb(
|
|
338
|
-
this.#newQuery(
|
|
339
|
-
destSchema,
|
|
340
|
-
{
|
|
341
|
-
table: destSchema,
|
|
342
|
-
alias: `${SUBQ_PREFIX}zhidden_${relationship}`
|
|
343
|
-
},
|
|
344
|
-
defaultFormat,
|
|
345
|
-
this.customQueryID,
|
|
346
|
-
relationship
|
|
347
|
-
)
|
|
348
|
-
);
|
|
349
|
-
return {
|
|
350
|
-
type: "correlatedSubquery",
|
|
351
|
-
related: {
|
|
352
|
-
system: this.#system,
|
|
353
|
-
correlation: {
|
|
354
|
-
parentField: firstRelation.sourceField,
|
|
355
|
-
childField: firstRelation.destField
|
|
356
|
-
},
|
|
357
|
-
subquery: {
|
|
358
|
-
table: junctionSchema,
|
|
359
|
-
alias: `${SUBQ_PREFIX}${relationship}`,
|
|
360
|
-
where: {
|
|
361
|
-
type: "correlatedSubquery",
|
|
362
|
-
related: {
|
|
363
|
-
system: this.#system,
|
|
364
|
-
correlation: {
|
|
365
|
-
parentField: secondRelation.sourceField,
|
|
366
|
-
childField: secondRelation.destField
|
|
367
|
-
},
|
|
368
|
-
subquery: asAbstractQuery(queryToDest).#ast
|
|
369
|
-
},
|
|
370
|
-
op: "EXISTS",
|
|
371
|
-
flip
|
|
372
|
-
}
|
|
373
|
-
}
|
|
374
|
-
},
|
|
375
|
-
op: "EXISTS",
|
|
376
|
-
flip
|
|
377
|
-
};
|
|
378
|
-
}
|
|
379
|
-
throw new Error(`Invalid relationship ${relationship}`);
|
|
380
|
-
};
|
|
381
|
-
get ast() {
|
|
382
|
-
return this.#ast;
|
|
383
|
-
}
|
|
384
|
-
}
|
|
385
|
-
function asAbstractQuery(q) {
|
|
386
|
-
assert(q instanceof AbstractQuery);
|
|
387
|
-
return q;
|
|
388
|
-
}
|
|
389
|
-
function throwQueryNotRunnable() {
|
|
390
|
-
throw new Error("Query is not runnable");
|
|
391
|
-
}
|
|
392
|
-
function isCompoundKey(field) {
|
|
393
|
-
return Array.isArray(field) && field.length >= 1;
|
|
394
|
-
}
|
|
395
|
-
function isOneHop(r) {
|
|
396
|
-
return r.length === 1;
|
|
397
|
-
}
|
|
398
|
-
function isTwoHop(r) {
|
|
399
|
-
return r.length === 2;
|
|
400
|
-
}
|
|
401
|
-
export {
|
|
402
|
-
AbstractQuery,
|
|
403
|
-
asAbstractQuery
|
|
404
|
-
};
|
|
405
|
-
//# sourceMappingURL=abstract-query.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"abstract-query.js","sources":["../../../../../zql/src/query/abstract-query.ts"],"sourcesContent":["import {assert} from '../../../shared/src/asserts.ts';\nimport type {ReadonlyJSONValue} from '../../../shared/src/json.ts';\nimport {\n type AST,\n type CompoundKey,\n type Condition,\n type Parameter,\n type SimpleOperator,\n type System,\n SUBQ_PREFIX,\n} from '../../../zero-protocol/src/ast.ts';\nimport {hashOfAST} from '../../../zero-protocol/src/query-hash.ts';\nimport type {Schema} from '../../../zero-types/src/schema.ts';\nimport {NotImplementedError} from '../error.ts';\nimport {defaultFormat} from '../ivm/default-format.ts';\nimport type {Format, ViewFactory} from '../ivm/view.ts';\nimport {\n type ExpressionFactory,\n ExpressionBuilder,\n and,\n cmp,\n simplifyCondition,\n} from './expression.ts';\nimport type {CustomQueryID} from './named.ts';\nimport {type QueryInternals, queryInternalsTag} from './query-internals.ts';\nimport type {\n AnyQuery,\n ExistsOptions,\n GetFilterType,\n HumanReadable,\n PreloadOptions,\n PullRow,\n Query,\n RunOptions,\n} from './query.ts';\nimport type {TTL} from './ttl.ts';\nimport type {TypedView} from './typed-view.ts';\n\n// oxlint-disable-next-line no-explicit-any\ntype GetFilterTypeAny = GetFilterType<any, any, any>;\n\ntype NewQueryFunction<TSchema extends Schema> = <\n TTable extends keyof TSchema['tables'] & string,\n TReturn,\n>(\n this: unknown,\n tableName: TTable,\n ast: AST,\n format: Format,\n customQueryID: CustomQueryID | undefined,\n currentJunction: string | undefined,\n) => Query<TTable, TSchema, TReturn>;\n\nexport abstract class AbstractQuery<\n TTable extends keyof TSchema['tables'] & string,\n TSchema extends Schema,\n TReturn = PullRow<TTable, TSchema>,\n >\n implements\n Query<TTable, TSchema, TReturn>,\n QueryInternals<TTable, TSchema, TReturn>\n{\n readonly [queryInternalsTag] = true;\n\n readonly #schema: TSchema;\n readonly #tableName: TTable;\n readonly #ast: AST;\n readonly format: Format;\n #hash: string = '';\n readonly #system: System;\n readonly #currentJunction: string | undefined;\n readonly customQueryID: CustomQueryID | undefined;\n readonly #newQuery: NewQueryFunction<TSchema>;\n\n constructor(\n schema: TSchema,\n tableName: TTable,\n ast: AST,\n format: Format,\n system: System,\n customQueryID: CustomQueryID | undefined,\n currentJunction: string | undefined,\n newQuery: NewQueryFunction<TSchema>,\n ) {\n this.#schema = schema;\n this.#tableName = tableName;\n this.#ast = ast;\n this.format = format;\n this.#system = system;\n this.#currentJunction = currentJunction;\n this.customQueryID = customQueryID;\n this.#newQuery = newQuery;\n }\n\n run(_options?: RunOptions): Promise<HumanReadable<TReturn>> {\n throwQueryNotRunnable();\n }\n\n preload(_options?: PreloadOptions): {\n cleanup: () => void;\n complete: Promise<void>;\n } {\n throwQueryNotRunnable();\n }\n\n materialize(ttl?: TTL): TypedView<HumanReadable<TReturn>>;\n materialize<T>(\n factory: ViewFactory<TTable, TSchema, TReturn, T>,\n ttl?: TTL,\n ): T;\n materialize<T>(\n _factoryOrTTL?: ViewFactory<TTable, TSchema, TReturn, T> | TTL,\n _ttl?: TTL,\n ): T | TypedView<HumanReadable<TReturn>> {\n throwQueryNotRunnable();\n }\n\n nameAndArgs(\n name: string,\n args: ReadonlyArray<ReadonlyJSONValue>,\n ): Query<TTable, TSchema, TReturn> {\n return this.#newQuery(\n this.#tableName,\n this.#ast,\n this.format,\n {\n name,\n args,\n },\n this.#currentJunction,\n );\n }\n\n hash(): string {\n if (!this.#hash) {\n this.#hash = hashOfAST(this.#ast);\n }\n return this.#hash;\n }\n\n one = (): Query<TTable, TSchema, TReturn | undefined> =>\n this.#newQuery(\n this.#tableName,\n {\n ...this.#ast,\n limit: 1,\n },\n {\n ...this.format,\n singular: true,\n },\n this.customQueryID,\n this.#currentJunction,\n );\n\n whereExists = (\n relationship: string,\n cbOrOptions?: ((q: AnyQuery) => AnyQuery) | ExistsOptions,\n options?: ExistsOptions,\n ): Query<TTable, TSchema, TReturn> => {\n const cb = typeof cbOrOptions === 'function' ? cbOrOptions : undefined;\n const opts = typeof cbOrOptions === 'function' ? options : cbOrOptions;\n const flipped = opts?.flip;\n return this.where(({exists}) =>\n exists(\n relationship,\n cb,\n flipped !== undefined ? {flip: flipped} : undefined,\n ),\n ) as Query<TTable, TSchema, TReturn>;\n };\n\n related = (\n relationship: string,\n cb?: (q: AnyQuery) => AnyQuery,\n // oxlint-disable-next-line no-explicit-any\n ): Query<TTable, TSchema, any> => {\n if (relationship.startsWith(SUBQ_PREFIX)) {\n throw new Error(\n `Relationship names may not start with \"${SUBQ_PREFIX}\". That is a reserved prefix.`,\n );\n }\n cb = cb ?? (q => q);\n\n const related = this.#schema.relationships[this.#tableName][relationship];\n assert(related, 'Invalid relationship');\n if (isOneHop(related)) {\n const {destSchema, destField, sourceField, cardinality} = related[0];\n const q: AnyQuery = this.#newQuery(\n destSchema,\n {\n table: destSchema,\n alias: relationship,\n },\n {\n relationships: {},\n singular: cardinality === 'one',\n },\n this.customQueryID,\n undefined,\n ) as AnyQuery;\n // Intentionally not setting to `one` as it is a perf degradation\n // and the user should not be making the mistake of setting cardinality to\n // `one` when it is actually not.\n // if (cardinality === 'one') {\n // q = q.one();\n // }\n const subQuery = asAbstractQuery(cb(q));\n assert(\n isCompoundKey(sourceField),\n 'The source of a relationship must specify at last 1 field',\n );\n assert(\n isCompoundKey(destField),\n 'The destination of a relationship must specify at last 1 field',\n );\n assert(\n sourceField.length === destField.length,\n 'The source and destination of a relationship must have the same number of fields',\n );\n\n return this.#newQuery(\n this.#tableName,\n {\n ...this.#ast,\n related: [\n ...(this.#ast.related ?? []),\n {\n system: this.#system,\n correlation: {\n parentField: sourceField,\n childField: destField,\n },\n subquery: subQuery.#ast,\n },\n ],\n },\n {\n ...this.format,\n relationships: {\n ...this.format.relationships,\n [relationship]: subQuery.format,\n },\n },\n this.customQueryID,\n this.#currentJunction,\n ) as AnyQuery;\n }\n\n if (isTwoHop(related)) {\n const [firstRelation, secondRelation] = related;\n const {destSchema} = secondRelation;\n const junctionSchema = firstRelation.destSchema;\n const sq = asAbstractQuery(\n cb(\n this.#newQuery(\n destSchema,\n {\n table: destSchema,\n alias: relationship,\n },\n {\n relationships: {},\n singular: secondRelation.cardinality === 'one',\n },\n this.customQueryID,\n relationship,\n ),\n ),\n );\n\n assert(isCompoundKey(firstRelation.sourceField), 'Invalid relationship');\n assert(isCompoundKey(firstRelation.destField), 'Invalid relationship');\n assert(isCompoundKey(secondRelation.sourceField), 'Invalid relationship');\n assert(isCompoundKey(secondRelation.destField), 'Invalid relationship');\n\n return this.#newQuery(\n this.#tableName,\n {\n ...this.#ast,\n related: [\n ...(this.#ast.related ?? []),\n {\n system: this.#system,\n correlation: {\n parentField: firstRelation.sourceField,\n childField: firstRelation.destField,\n },\n hidden: true,\n subquery: {\n table: junctionSchema,\n alias: relationship,\n related: [\n {\n system: this.#system,\n correlation: {\n parentField: secondRelation.sourceField,\n childField: secondRelation.destField,\n },\n subquery: sq.#ast,\n },\n ],\n },\n },\n ],\n },\n {\n ...this.format,\n relationships: {\n ...this.format.relationships,\n [relationship]: sq.format,\n },\n },\n this.customQueryID,\n this.#currentJunction,\n ) as AnyQuery;\n }\n\n throw new Error(`Invalid relationship ${relationship}`);\n };\n\n where = (\n fieldOrExpressionFactory: string | ExpressionFactory<TTable, TSchema>,\n opOrValue?: SimpleOperator | GetFilterTypeAny | Parameter,\n value?: GetFilterTypeAny | Parameter,\n ): Query<TTable, TSchema, TReturn> => {\n let cond: Condition;\n\n if (typeof fieldOrExpressionFactory === 'function') {\n cond = fieldOrExpressionFactory(\n new ExpressionBuilder(this._exists) as ExpressionBuilder<\n TTable,\n TSchema\n >,\n );\n } else {\n assert(opOrValue !== undefined, 'Invalid condition');\n cond = cmp(fieldOrExpressionFactory, opOrValue, value);\n }\n\n const existingWhere = this.#ast.where;\n if (existingWhere) {\n cond = and(existingWhere, cond);\n }\n\n const where = simplifyCondition(cond);\n\n return this.#newQuery(\n this.#tableName,\n {\n ...this.#ast,\n where,\n },\n this.format,\n this.customQueryID,\n this.#currentJunction,\n );\n };\n\n start = (\n row: Partial<Record<string, ReadonlyJSONValue | undefined>>,\n opts?: {inclusive: boolean},\n ): Query<TTable, TSchema, TReturn> =>\n this.#newQuery(\n this.#tableName,\n {\n ...this.#ast,\n start: {\n row,\n exclusive: !opts?.inclusive,\n },\n },\n this.format,\n this.customQueryID,\n this.#currentJunction,\n );\n\n limit = (limit: number): Query<TTable, TSchema, TReturn> => {\n if (limit < 0) {\n throw new Error('Limit must be non-negative');\n }\n if ((limit | 0) !== limit) {\n throw new Error('Limit must be an integer');\n }\n if (this.#currentJunction) {\n throw new NotImplementedError(\n 'Limit is not supported in junction relationships yet. Junction relationship being limited: ' +\n this.#currentJunction,\n );\n }\n\n return this.#newQuery(\n this.#tableName,\n {\n ...this.#ast,\n limit,\n },\n this.format,\n this.customQueryID,\n this.#currentJunction,\n );\n };\n\n orderBy = <TSelector extends keyof TSchema['tables'][TTable]['columns']>(\n field: TSelector,\n direction: 'asc' | 'desc',\n ): Query<TTable, TSchema, TReturn> => {\n if (this.#currentJunction) {\n throw new NotImplementedError(\n 'Order by is not supported in junction relationships yet. Junction relationship being ordered: ' +\n this.#currentJunction,\n );\n }\n return this.#newQuery(\n this.#tableName,\n {\n ...this.#ast,\n orderBy: [...(this.#ast.orderBy ?? []), [field as string, direction]],\n },\n this.format,\n this.customQueryID,\n this.#currentJunction,\n );\n };\n\n protected _exists = (\n relationship: string,\n cb: ((query: AnyQuery) => AnyQuery) | undefined,\n options?: ExistsOptions,\n ): Condition => {\n cb = cb ?? (q => q);\n const flip = options?.flip;\n const related = this.#schema.relationships[this.#tableName][relationship];\n assert(related, 'Invalid relationship');\n\n if (isOneHop(related)) {\n const {destSchema: destTableName, sourceField, destField} = related[0];\n assert(isCompoundKey(sourceField), 'Invalid relationship');\n assert(isCompoundKey(destField), 'Invalid relationship');\n\n const subQuery = asAbstractQuery(\n cb(\n this.#newQuery(\n destTableName,\n {\n table: destTableName,\n alias: `${SUBQ_PREFIX}${relationship}`,\n },\n defaultFormat,\n this.customQueryID,\n undefined,\n ),\n ),\n );\n return {\n type: 'correlatedSubquery',\n related: {\n system: this.#system,\n correlation: {\n parentField: sourceField,\n childField: destField,\n },\n subquery: subQuery.#ast,\n },\n op: 'EXISTS',\n flip,\n };\n }\n\n if (isTwoHop(related)) {\n const [firstRelation, secondRelation] = related;\n assert(isCompoundKey(firstRelation.sourceField), 'Invalid relationship');\n assert(isCompoundKey(firstRelation.destField), 'Invalid relationship');\n assert(isCompoundKey(secondRelation.sourceField), 'Invalid relationship');\n assert(isCompoundKey(secondRelation.destField), 'Invalid relationship');\n const {destSchema} = secondRelation;\n const junctionSchema = firstRelation.destSchema;\n const queryToDest = cb(\n this.#newQuery(\n destSchema,\n {\n table: destSchema,\n alias: `${SUBQ_PREFIX}zhidden_${relationship}`,\n },\n defaultFormat,\n this.customQueryID,\n relationship,\n ) as AnyQuery,\n );\n\n return {\n type: 'correlatedSubquery',\n related: {\n system: this.#system,\n correlation: {\n parentField: firstRelation.sourceField,\n childField: firstRelation.destField,\n },\n subquery: {\n table: junctionSchema,\n alias: `${SUBQ_PREFIX}${relationship}`,\n where: {\n type: 'correlatedSubquery',\n related: {\n system: this.#system,\n correlation: {\n parentField: secondRelation.sourceField,\n childField: secondRelation.destField,\n },\n subquery: asAbstractQuery(queryToDest).#ast,\n },\n op: 'EXISTS',\n flip,\n },\n },\n },\n op: 'EXISTS',\n flip,\n };\n }\n\n throw new Error(`Invalid relationship ${relationship}`);\n };\n\n get ast(): AST {\n return this.#ast;\n }\n}\nexport function asAbstractQuery<\n TTable extends keyof TSchema['tables'] & string,\n TSchema extends Schema,\n TReturn,\n>(q: Query<TTable, TSchema, TReturn>): AbstractQuery<TTable, TSchema, TReturn> {\n assert(q instanceof AbstractQuery);\n return q;\n}\n\nfunction throwQueryNotRunnable(): never {\n throw new Error('Query is not runnable');\n}\n\nfunction isCompoundKey(field: readonly string[]): field is CompoundKey {\n return Array.isArray(field) && field.length >= 1;\n}\n\nfunction isOneHop<T>(r: readonly T[]): r is readonly [T] {\n return r.length === 1;\n}\n\nfunction isTwoHop<T>(r: readonly T[]): r is readonly [T, T] {\n return r.length === 2;\n}\n"],"names":[],"mappings":"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"}
|