@undefineds.co/xpod 0.2.44 → 0.3.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/dist/agents/AgentExecutorFactory.js +12 -13
- package/dist/agents/AgentExecutorFactory.js.map +1 -1
- package/dist/agents/config/agent-meta-schema.d.ts +31 -3
- package/dist/agents/config/agent-meta-schema.js +37 -3
- package/dist/agents/config/agent-meta-schema.js.map +1 -1
- package/dist/agents/config/index.d.ts +5 -5
- package/dist/agents/config/index.js +7 -6
- package/dist/agents/config/index.js.map +1 -1
- package/dist/agents/config/parse-agent-instructions.d.ts +12 -0
- package/dist/agents/config/parse-agent-instructions.js +23 -0
- package/dist/agents/config/parse-agent-instructions.js.map +1 -0
- package/dist/agents/config/resolve.d.ts +7 -12
- package/dist/agents/config/resolve.js +272 -156
- package/dist/agents/config/resolve.js.map +1 -1
- package/dist/agents/config/types.d.ts +33 -36
- package/dist/agents/config/types.js +4 -4
- package/dist/agents/config/types.js.map +1 -1
- package/dist/agents/index.d.ts +2 -7
- package/dist/agents/index.js +4 -14
- package/dist/agents/index.js.map +1 -1
- package/dist/agents/types.d.ts +2 -2
- package/dist/agents/types.js.map +1 -1
- package/dist/ai/service/CredentialReaderImpl.js +9 -14
- package/dist/ai/service/CredentialReaderImpl.js.map +1 -1
- package/dist/api/ApiServer.d.ts +7 -0
- package/dist/api/ApiServer.js +5 -1
- package/dist/api/ApiServer.js.map +1 -1
- package/dist/api/chatkit/default-agent.js +1 -1
- package/dist/api/chatkit/default-agent.js.map +1 -1
- package/dist/api/chatkit/index.d.ts +8 -0
- package/dist/api/chatkit/index.js +15 -1
- package/dist/api/chatkit/index.js.map +1 -1
- package/dist/api/chatkit/pod-store.d.ts +80 -17
- package/dist/api/chatkit/pod-store.js +816 -162
- package/dist/api/chatkit/pod-store.js.map +1 -1
- package/dist/api/chatkit/runtime/AcpAgentRuntime.d.ts +41 -0
- package/dist/api/chatkit/runtime/AcpAgentRuntime.js +573 -0
- package/dist/api/chatkit/runtime/AcpAgentRuntime.js.map +1 -0
- package/dist/api/chatkit/runtime/CodexRuntimeProjector.d.ts +27 -0
- package/dist/api/chatkit/runtime/CodexRuntimeProjector.js +157 -0
- package/dist/api/chatkit/runtime/CodexRuntimeProjector.js.map +1 -0
- package/dist/api/chatkit/schema.d.ts +53 -133
- package/dist/api/chatkit/schema.js +11 -175
- package/dist/api/chatkit/schema.js.map +1 -1
- package/dist/api/chatkit/service.d.ts +15 -9
- package/dist/api/chatkit/service.js +82 -234
- package/dist/api/chatkit/service.js.map +1 -1
- package/dist/api/chatkit/store.d.ts +35 -3
- package/dist/api/chatkit/store.js +157 -3
- package/dist/api/chatkit/store.js.map +1 -1
- package/dist/api/chatkit/types.d.ts +16 -2
- package/dist/api/chatkit/types.js +24 -5
- package/dist/api/chatkit/types.js.map +1 -1
- package/dist/api/container/common.js +59 -2
- package/dist/api/container/common.js.map +1 -1
- package/dist/api/container/index.js +15 -0
- package/dist/api/container/index.js.map +1 -1
- package/dist/api/container/routes.js +11 -0
- package/dist/api/container/routes.js.map +1 -1
- package/dist/api/container/types.d.ts +26 -0
- package/dist/api/container/types.js.map +1 -1
- package/dist/api/handlers/InngestHandler.d.ts +11 -0
- package/dist/api/handlers/InngestHandler.js +19 -0
- package/dist/api/handlers/InngestHandler.js.map +1 -0
- package/dist/api/handlers/RunHandler.d.ts +7 -0
- package/dist/api/handlers/RunHandler.js +169 -0
- package/dist/api/handlers/RunHandler.js.map +1 -0
- package/dist/api/handlers/index.d.ts +1 -0
- package/dist/api/handlers/index.js +1 -0
- package/dist/api/handlers/index.js.map +1 -1
- package/dist/api/models/namespaces.d.ts +2 -2
- package/dist/api/models/namespaces.js +1 -4
- package/dist/api/models/namespaces.js.map +1 -1
- package/dist/api/runs/AgentRuntimeTypes.d.ts +83 -0
- package/dist/api/runs/AgentRuntimeTypes.js +3 -0
- package/dist/api/runs/AgentRuntimeTypes.js.map +1 -0
- package/dist/api/runs/EmbeddedInngestService.d.ts +47 -0
- package/dist/api/runs/EmbeddedInngestService.js +203 -0
- package/dist/api/runs/EmbeddedInngestService.js.map +1 -0
- package/dist/api/runs/InngestRunExecutionBackend.d.ts +416 -0
- package/dist/api/runs/InngestRunExecutionBackend.js +225 -0
- package/dist/api/runs/InngestRunExecutionBackend.js.map +1 -0
- package/dist/api/runs/ManagedRunWorker.d.ts +52 -0
- package/dist/api/runs/ManagedRunWorker.js +452 -0
- package/dist/api/runs/ManagedRunWorker.js.map +1 -0
- package/dist/api/runs/PiAgentRuntimeDriver.d.ts +66 -0
- package/dist/api/runs/PiAgentRuntimeDriver.js +614 -0
- package/dist/api/runs/PiAgentRuntimeDriver.js.map +1 -0
- package/dist/api/runs/PiAgentRuntimeWorker.d.ts +1 -0
- package/dist/api/runs/PiAgentRuntimeWorker.js +33 -0
- package/dist/api/runs/PiAgentRuntimeWorker.js.map +1 -0
- package/dist/api/runs/RunAuthContextRegistry.d.ts +19 -0
- package/dist/api/runs/RunAuthContextRegistry.js +59 -0
- package/dist/api/runs/RunAuthContextRegistry.js.map +1 -0
- package/dist/api/runs/RunExecutionBackend.d.ts +57 -0
- package/dist/api/runs/RunExecutionBackend.js +3 -0
- package/dist/api/runs/RunExecutionBackend.js.map +1 -0
- package/dist/api/runs/RunStateCenter.d.ts +82 -0
- package/dist/api/runs/RunStateCenter.js +665 -0
- package/dist/api/runs/RunStateCenter.js.map +1 -0
- package/dist/api/runs/schema.d.ts +55 -0
- package/dist/api/runs/schema.js +14 -0
- package/dist/api/runs/schema.js.map +1 -0
- package/dist/api/runs/store.d.ts +105 -0
- package/dist/api/runs/store.js +116 -0
- package/dist/api/runs/store.js.map +1 -0
- package/dist/api/runtime.d.ts +2 -0
- package/dist/api/runtime.js +40 -1
- package/dist/api/runtime.js.map +1 -1
- package/dist/api/service/VectorStoreService.d.ts +1 -0
- package/dist/api/service/VectorStoreService.js +27 -34
- package/dist/api/service/VectorStoreService.js.map +1 -1
- package/dist/api/service/provider-registry.d.ts +1 -1
- package/dist/api/service/provider-registry.js +1 -1
- package/dist/api/service/provider-registry.js.map +1 -1
- package/dist/api/tasks/InngestTaskScheduler.d.ts +751 -0
- package/dist/api/tasks/InngestTaskScheduler.js +209 -0
- package/dist/api/tasks/InngestTaskScheduler.js.map +1 -0
- package/dist/api/tasks/TaskAuthBinding.d.ts +68 -0
- package/dist/api/tasks/TaskAuthBinding.js +162 -0
- package/dist/api/tasks/TaskAuthBinding.js.map +1 -0
- package/dist/api/tasks/TaskMaterializer.d.ts +55 -0
- package/dist/api/tasks/TaskMaterializer.js +452 -0
- package/dist/api/tasks/TaskMaterializer.js.map +1 -0
- package/dist/api/tasks/TaskService.d.ts +57 -0
- package/dist/api/tasks/TaskService.js +235 -0
- package/dist/api/tasks/TaskService.js.map +1 -0
- package/dist/api/tasks/index.d.ts +6 -0
- package/dist/api/tasks/index.js +25 -0
- package/dist/api/tasks/index.js.map +1 -0
- package/dist/api/tasks/schema.d.ts +23 -0
- package/dist/api/tasks/schema.js +8 -0
- package/dist/api/tasks/schema.js.map +1 -0
- package/dist/api/tasks/store.d.ts +40 -0
- package/dist/api/tasks/store.js +34 -0
- package/dist/api/tasks/store.js.map +1 -0
- package/dist/api/workspace/types.d.ts +3 -0
- package/dist/api/workspace/types.js +23 -0
- package/dist/api/workspace/types.js.map +1 -0
- package/dist/cli/commands/config.d.ts +8 -7
- package/dist/cli/commands/config.js +72 -48
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/login.d.ts +10 -8
- package/dist/cli/commands/login.js +84 -84
- package/dist/cli/commands/login.js.map +1 -1
- package/dist/cli/index.js +3 -124
- package/dist/cli/index.js.map +1 -1
- package/dist/http/search/SearchHttpHandler.js +13 -18
- package/dist/http/search/SearchHttpHandler.js.map +1 -1
- package/dist/runtime/configure-drizzle-solid.js +52 -0
- package/dist/runtime/configure-drizzle-solid.js.map +1 -1
- package/dist/storage/quint/PgQuintStore.d.ts +6 -0
- package/dist/storage/quint/PgQuintStore.js +83 -5
- package/dist/storage/quint/PgQuintStore.js.map +1 -1
- package/dist/storage/quint/PgQuintStore.jsonld +24 -0
- package/dist/storage/quint/SqliteQuintStore.d.ts +1 -0
- package/dist/storage/quint/SqliteQuintStore.js +52 -0
- package/dist/storage/quint/SqliteQuintStore.js.map +1 -1
- package/dist/storage/quint/SqliteQuintStore.jsonld +4 -0
- package/dist/storage/quint/types.d.ts +6 -0
- package/dist/storage/quint/types.js.map +1 -1
- package/dist/storage/sparql/FilterPushdownExtractor.js +23 -11
- package/dist/storage/sparql/FilterPushdownExtractor.js.map +1 -1
- package/dist/storage/vector/VectorIndexingListener.js +13 -18
- package/dist/storage/vector/VectorIndexingListener.js.map +1 -1
- package/dist/util/identifiers/ClusterIdentifierStrategy.js +29 -1
- package/dist/util/identifiers/ClusterIdentifierStrategy.js.map +1 -1
- package/dist/vocab/index.d.ts +2 -6
- package/dist/vocab/index.js +2 -6
- package/dist/vocab/index.js.map +1 -1
- package/dist/vocab/udfs.d.ts +12 -0
- package/dist/vocab/udfs.js +12 -0
- package/dist/vocab/udfs.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/README.md +52 -24
- package/node_modules/@undefineds.co/drizzle-solid/README.zh-CN.md +30 -24
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/discovery/types.d.ts +6 -2
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/discovery/types.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/ldp-executor.d.ts +1 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/ldp-executor.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/ldp-executor.js +43 -10
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/ldp-executor.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/ldp-strategy.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/ldp-strategy.js +1 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/ldp-strategy.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/pod-executor.d.ts +5 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/pod-executor.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/pod-executor.js +44 -13
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/pod-executor.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/sparql-strategy.d.ts +1 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/sparql-strategy.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/sparql-strategy.js +21 -2
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/sparql-strategy.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/types.d.ts +1 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/types.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/expressions.d.ts +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/expressions.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/pod-database.d.ts +76 -41
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/pod-database.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/pod-database.js +443 -114
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/pod-database.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/pod-dialect.d.ts +28 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/pod-dialect.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/pod-dialect.js +142 -31
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/pod-dialect.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/pod-session.d.ts +3 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/pod-session.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/pod-session.js +84 -6
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/pod-session.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/insert-query-builder.d.ts +3 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/insert-query-builder.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/insert-query-builder.js +29 -9
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/insert-query-builder.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/select-query-builder.d.ts +2 -8
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/select-query-builder.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/select-query-builder.js +19 -51
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/select-query-builder.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/types.d.ts +1 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/types.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-conditions.d.ts +2 -2
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-conditions.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-where-policy.js +6 -6
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-where-policy.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/resource-reference.d.ts +4 -4
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/resource-reference.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/resource-reference.js +56 -23
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/resource-reference.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/resource-resolver/base-resolver.d.ts +14 -10
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/resource-resolver/base-resolver.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/resource-resolver/base-resolver.js +55 -23
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/resource-resolver/base-resolver.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/resource-resolver/document-resolver.d.ts +3 -3
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/resource-resolver/document-resolver.js +6 -6
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/resource-resolver/document-resolver.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/resource-resolver/fragment-resolver.d.ts +3 -3
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/resource-resolver/fragment-resolver.js +4 -4
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/resource-resolver/fragment-resolver.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/runtime/pod-runtime.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/runtime/pod-runtime.js +33 -8
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/runtime/pod-runtime.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/schema/defs.d.ts +11 -2
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/schema/defs.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/schema/factories.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/schema/factories.js +3 -2
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/schema/factories.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/schema/pod-table.d.ts +13 -8
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/schema/pod-table.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/schema/pod-table.js +24 -22
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/schema/pod-table.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/schema/solid-schema.d.ts +3 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/schema/solid-schema.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/schema/solid-schema.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/subject/resolver.d.ts +3 -2
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/subject/resolver.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/subject/resolver.js +28 -14
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/subject/resolver.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/triple/handlers/inline.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/triple/handlers/inline.js +3 -2
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/triple/handlers/inline.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/uri/resolver.d.ts +9 -9
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/uri/resolver.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/uri/resolver.js +56 -22
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/uri/resolver.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/driver.d.ts +9 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/driver.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/driver.js +2 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/driver.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/discovery/types.d.ts +6 -2
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/discovery/types.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/ldp-executor.d.ts +1 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/ldp-executor.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/ldp-executor.js +43 -10
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/ldp-executor.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/ldp-strategy.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/ldp-strategy.js +1 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/ldp-strategy.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/pod-executor.d.ts +5 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/pod-executor.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/pod-executor.js +44 -13
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/pod-executor.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/sparql-strategy.d.ts +1 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/sparql-strategy.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/sparql-strategy.js +21 -2
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/sparql-strategy.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/types.d.ts +1 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/types.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/expressions.d.ts +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/expressions.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/pod-database.d.ts +76 -41
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/pod-database.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/pod-database.js +443 -114
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/pod-database.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/pod-dialect.d.ts +28 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/pod-dialect.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/pod-dialect.js +142 -31
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/pod-dialect.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/pod-session.d.ts +3 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/pod-session.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/pod-session.js +84 -6
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/pod-session.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/insert-query-builder.d.ts +3 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/insert-query-builder.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/insert-query-builder.js +29 -9
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/insert-query-builder.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/select-query-builder.d.ts +2 -8
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/select-query-builder.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/select-query-builder.js +19 -51
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/select-query-builder.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/types.d.ts +1 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/types.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-conditions.d.ts +2 -2
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-conditions.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-where-policy.js +6 -6
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-where-policy.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/resource-reference.d.ts +4 -4
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/resource-reference.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/resource-reference.js +56 -23
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/resource-reference.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/resource-resolver/base-resolver.d.ts +14 -10
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/resource-resolver/base-resolver.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/resource-resolver/base-resolver.js +55 -23
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/resource-resolver/base-resolver.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/resource-resolver/document-resolver.d.ts +3 -3
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/resource-resolver/document-resolver.js +6 -6
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/resource-resolver/document-resolver.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/resource-resolver/fragment-resolver.d.ts +3 -3
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/resource-resolver/fragment-resolver.js +4 -4
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/resource-resolver/fragment-resolver.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/runtime/pod-runtime.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/runtime/pod-runtime.js +33 -8
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/runtime/pod-runtime.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/schema/defs.d.ts +11 -2
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/schema/defs.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/schema/factories.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/schema/factories.js +3 -2
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/schema/factories.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/schema/pod-table.d.ts +13 -8
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/schema/pod-table.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/schema/pod-table.js +24 -22
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/schema/pod-table.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/schema/solid-schema.d.ts +3 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/schema/solid-schema.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/schema/solid-schema.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/subject/resolver.d.ts +3 -2
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/subject/resolver.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/subject/resolver.js +28 -14
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/subject/resolver.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/triple/handlers/inline.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/triple/handlers/inline.js +3 -2
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/triple/handlers/inline.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/uri/resolver.d.ts +9 -9
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/uri/resolver.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/uri/resolver.js +56 -22
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/uri/resolver.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/driver.d.ts +9 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/driver.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/driver.js +2 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/driver.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/pod.d.ts +16 -2
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/pod.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/utils/find-by-iri.js +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/utils/find-by-iri.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/pod.d.ts +16 -2
- package/node_modules/@undefineds.co/drizzle-solid/dist/pod.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/utils/find-by-iri.js +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/utils/find-by-iri.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/package.json +1 -1
- package/package.json +5 -3
- package/scripts/patch-jose.js +62 -12
- package/dist/agents/AgentManager.d.ts +0 -116
- package/dist/agents/AgentManager.js +0 -290
- package/dist/agents/AgentManager.js.map +0 -1
- package/dist/agents/IndexAgent.d.ts +0 -70
- package/dist/agents/IndexAgent.js +0 -417
- package/dist/agents/IndexAgent.js.map +0 -1
- package/dist/agents/config/parse-agent-md.d.ts +0 -33
- package/dist/agents/config/parse-agent-md.js +0 -75
- package/dist/agents/config/parse-agent-md.js.map +0 -1
- package/dist/agents/schema/agent-config.d.ts +0 -2
- package/dist/agents/schema/agent-config.js +0 -32
- package/dist/agents/schema/agent-config.js.map +0 -1
- package/dist/agents/schema/create-agent-schema.d.ts +0 -25
- package/dist/agents/schema/create-agent-schema.js +0 -35
- package/dist/agents/schema/create-agent-schema.js.map +0 -1
- package/dist/api/chatkit/runtime/PtyThreadRuntime.d.ts +0 -127
- package/dist/api/chatkit/runtime/PtyThreadRuntime.js +0 -791
- package/dist/api/chatkit/runtime/PtyThreadRuntime.js.map +0 -1
- package/dist/cli/lib/agent-session.d.ts +0 -37
- package/dist/cli/lib/agent-session.js +0 -211
- package/dist/cli/lib/agent-session.js.map +0 -1
- package/dist/cli/lib/ensure-ai-credentials.d.ts +0 -13
- package/dist/cli/lib/ensure-ai-credentials.js +0 -40
- package/dist/cli/lib/ensure-ai-credentials.js.map +0 -1
- package/dist/cli/lib/model-manager.d.ts +0 -37
- package/dist/cli/lib/model-manager.js +0 -251
- package/dist/cli/lib/model-manager.js.map +0 -1
- package/dist/cli/lib/oauth-credential-manager.d.ts +0 -37
- package/dist/cli/lib/oauth-credential-manager.js +0 -129
- package/dist/cli/lib/oauth-credential-manager.js.map +0 -1
- package/dist/cli/lib/oauth-providers/codebuddy.d.ts +0 -25
- package/dist/cli/lib/oauth-providers/codebuddy.js +0 -69
- package/dist/cli/lib/oauth-providers/codebuddy.js.map +0 -1
- package/dist/cli/lib/oauth-providers/index.d.ts +0 -12
- package/dist/cli/lib/oauth-providers/index.js +0 -23
- package/dist/cli/lib/oauth-providers/index.js.map +0 -1
- package/dist/cli/lib/pi-optional.d.ts +0 -84
- package/dist/cli/lib/pi-optional.js +0 -35
- package/dist/cli/lib/pi-optional.js.map +0 -1
- package/dist/cli/lib/pod-ai-config.d.ts +0 -26
- package/dist/cli/lib/pod-ai-config.js +0 -99
- package/dist/cli/lib/pod-ai-config.js.map +0 -1
- package/dist/cli/lib/pod-thread-store.d.ts +0 -57
- package/dist/cli/lib/pod-thread-store.js +0 -312
- package/dist/cli/lib/pod-thread-store.js.map +0 -1
- package/dist/cli/lib/secretary-prompt.d.ts +0 -6
- package/dist/cli/lib/secretary-prompt.js +0 -85
- package/dist/cli/lib/secretary-prompt.js.map +0 -1
- package/dist/task/DrizzleTaskQueue.d.ts +0 -56
- package/dist/task/DrizzleTaskQueue.js +0 -171
- package/dist/task/DrizzleTaskQueue.js.map +0 -1
- package/dist/task/TaskExecutor.d.ts +0 -82
- package/dist/task/TaskExecutor.js +0 -198
- package/dist/task/TaskExecutor.js.map +0 -1
- package/dist/task/index.d.ts +0 -10
- package/dist/task/index.js +0 -20
- package/dist/task/index.js.map +0 -1
- package/dist/task/schema.d.ts +0 -53
- package/dist/task/schema.js +0 -71
- package/dist/task/schema.js.map +0 -1
- package/dist/task/types.d.ts +0 -186
- package/dist/task/types.js +0 -12
- package/dist/task/types.js.map +0 -1
|
@@ -163,6 +163,7 @@ class PgQuintStore extends BaseQuintStore_1.BaseQuintStore {
|
|
|
163
163
|
super(options);
|
|
164
164
|
this.pglite = null;
|
|
165
165
|
this.pgPool = null; // pg.Pool
|
|
166
|
+
this.sharedPoolConfig = null;
|
|
166
167
|
this.pgOptions = {
|
|
167
168
|
driver: 'pglite', // 默认使用 PGLite
|
|
168
169
|
...options,
|
|
@@ -173,17 +174,19 @@ class PgQuintStore extends BaseQuintStore_1.BaseQuintStore {
|
|
|
173
174
|
// 使用共享的连接池(如果提供),避免死锁
|
|
174
175
|
if (this.pgOptions.pool) {
|
|
175
176
|
this.pgPool = this.pgOptions.pool;
|
|
177
|
+
this.sharedPoolConfig = null;
|
|
176
178
|
return new PgExecutor(this.pgPool);
|
|
177
179
|
}
|
|
178
180
|
// 使用共享连接池管理器,避免多个组件创建独立连接池
|
|
179
|
-
this.
|
|
181
|
+
this.sharedPoolConfig = {
|
|
180
182
|
connectionString: this.pgOptions.connectionString,
|
|
181
183
|
host: this.pgOptions.host,
|
|
182
184
|
port: this.pgOptions.port,
|
|
183
185
|
database: this.pgOptions.database,
|
|
184
186
|
user: this.pgOptions.user,
|
|
185
187
|
password: this.pgOptions.password,
|
|
186
|
-
}
|
|
188
|
+
};
|
|
189
|
+
this.pgPool = (0, PostgresPoolManager_1.getSharedPool)(this.sharedPoolConfig);
|
|
187
190
|
return new PgExecutor(this.pgPool);
|
|
188
191
|
}
|
|
189
192
|
else {
|
|
@@ -199,8 +202,14 @@ class PgQuintStore extends BaseQuintStore_1.BaseQuintStore {
|
|
|
199
202
|
this.pglite = null;
|
|
200
203
|
}
|
|
201
204
|
if (this.pgPool) {
|
|
202
|
-
|
|
205
|
+
if (this.sharedPoolConfig) {
|
|
206
|
+
(0, PostgresPoolManager_1.releaseSharedPool)(this.sharedPoolConfig);
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
await this.pgPool.end();
|
|
210
|
+
}
|
|
203
211
|
this.pgPool = null;
|
|
212
|
+
this.sharedPoolConfig = null;
|
|
204
213
|
}
|
|
205
214
|
}
|
|
206
215
|
/**
|
|
@@ -428,6 +437,18 @@ class PgQuintStore extends BaseQuintStore_1.BaseQuintStore {
|
|
|
428
437
|
}
|
|
429
438
|
return { sql, params };
|
|
430
439
|
}
|
|
440
|
+
async count(pattern) {
|
|
441
|
+
const count = await super.count(pattern);
|
|
442
|
+
return Number(count);
|
|
443
|
+
}
|
|
444
|
+
async stats() {
|
|
445
|
+
const stats = await super.stats();
|
|
446
|
+
return {
|
|
447
|
+
totalCount: Number(stats.totalCount),
|
|
448
|
+
vectorCount: Number(stats.vectorCount),
|
|
449
|
+
graphCount: Number(stats.graphCount),
|
|
450
|
+
};
|
|
451
|
+
}
|
|
431
452
|
async ensureTypedObjectSchema() {
|
|
432
453
|
const statements = [
|
|
433
454
|
'ALTER TABLE quints ADD COLUMN IF NOT EXISTS object_kind TEXT',
|
|
@@ -621,14 +642,14 @@ class PgQuintStore extends BaseQuintStore_1.BaseQuintStore {
|
|
|
621
642
|
const predicates = ops.$in.map((value) => this.objectPredicateForOperatorValue(value, '$in', predicate));
|
|
622
643
|
const placeholders = predicates.map((item) => {
|
|
623
644
|
if (item.fields.objectKey === null) {
|
|
624
|
-
return `(${column('object_digest')} = ? AND ${column('object')} = ?)`;
|
|
645
|
+
return `(${column('object_kind')} = ? AND ${column('object_digest')} = ? AND ${column('object')} = ?)`;
|
|
625
646
|
}
|
|
626
647
|
return `(${column('object_kind')} = ? AND ${column('object_key')} = ?)`;
|
|
627
648
|
}).join(' OR ');
|
|
628
649
|
conditions.push(`(${placeholders})`);
|
|
629
650
|
for (const item of predicates) {
|
|
630
651
|
if (item.fields.objectKey === null) {
|
|
631
|
-
params.push(this.objectDigestForIndex(item.serialized, item.fields), item.serialized);
|
|
652
|
+
params.push(item.fields.objectKind, this.objectDigestForIndex(item.serialized, item.fields), item.serialized);
|
|
632
653
|
}
|
|
633
654
|
else {
|
|
634
655
|
params.push(item.fields.objectKind, item.fields.objectKey);
|
|
@@ -660,6 +681,21 @@ class PgQuintStore extends BaseQuintStore_1.BaseQuintStore {
|
|
|
660
681
|
const pattern = ops.$regex.replace(/\.\*/g, '%').replace(/\./g, '_');
|
|
661
682
|
this.addObjectTextCondition(conditions, params, column, 'LIKE', pattern, predicate);
|
|
662
683
|
}
|
|
684
|
+
if (ops.$strStartsWith !== undefined) {
|
|
685
|
+
this.addObjectLexicalStringCondition(conditions, params, column, 'startsWith', ops.$strStartsWith);
|
|
686
|
+
}
|
|
687
|
+
if (ops.$strEndsWith !== undefined) {
|
|
688
|
+
this.addObjectLexicalStringCondition(conditions, params, column, 'endsWith', ops.$strEndsWith);
|
|
689
|
+
}
|
|
690
|
+
if (ops.$strContains !== undefined) {
|
|
691
|
+
this.addObjectLexicalStringCondition(conditions, params, column, 'contains', ops.$strContains);
|
|
692
|
+
}
|
|
693
|
+
if (ops.$strRegex !== undefined) {
|
|
694
|
+
this.addObjectLexicalStringCondition(conditions, params, column, 'regex', ops.$strRegex);
|
|
695
|
+
}
|
|
696
|
+
if (ops.$language !== undefined) {
|
|
697
|
+
this.addObjectLanguageCondition(conditions, params, column, ops.$language);
|
|
698
|
+
}
|
|
663
699
|
if (ops.$isNull === true) {
|
|
664
700
|
conditions.push(`${column('object')} IS NULL`);
|
|
665
701
|
}
|
|
@@ -689,6 +725,8 @@ class PgQuintStore extends BaseQuintStore_1.BaseQuintStore {
|
|
|
689
725
|
params.push(fields.objectKey);
|
|
690
726
|
return;
|
|
691
727
|
}
|
|
728
|
+
conditions.push(`${column('object_kind')} = ?`);
|
|
729
|
+
params.push(fields.objectKind);
|
|
692
730
|
conditions.push(`${column('object_digest')} = ?`);
|
|
693
731
|
params.push(this.objectDigestForIndex(serialized, fields));
|
|
694
732
|
conditions.push(`${column('object')} = ?`);
|
|
@@ -714,6 +752,46 @@ class PgQuintStore extends BaseQuintStore_1.BaseQuintStore {
|
|
|
714
752
|
conditions.push(`${column('object_text')} ${sqlOperator} ?`);
|
|
715
753
|
params.push(value);
|
|
716
754
|
}
|
|
755
|
+
addObjectLexicalStringCondition(conditions, params, column, op, value) {
|
|
756
|
+
const lexical = this.objectLexicalSql(column);
|
|
757
|
+
if (op === 'startsWith') {
|
|
758
|
+
conditions.push(`(${lexical} >= ? AND ${lexical} < ?)`);
|
|
759
|
+
params.push(value, value + '\uffff');
|
|
760
|
+
return;
|
|
761
|
+
}
|
|
762
|
+
if (op === 'endsWith') {
|
|
763
|
+
conditions.push(`RIGHT(${lexical}, LENGTH(?)) = ?`);
|
|
764
|
+
params.push(value, value);
|
|
765
|
+
return;
|
|
766
|
+
}
|
|
767
|
+
if (op === 'contains') {
|
|
768
|
+
conditions.push(`POSITION(? IN ${lexical}) > 0`);
|
|
769
|
+
params.push(value);
|
|
770
|
+
return;
|
|
771
|
+
}
|
|
772
|
+
conditions.push(`${lexical} ~ ?`);
|
|
773
|
+
params.push(value);
|
|
774
|
+
}
|
|
775
|
+
objectLexicalSql(column) {
|
|
776
|
+
return `CASE
|
|
777
|
+
WHEN ${column('object_text')} IS NOT NULL THEN ${column('object_text')}
|
|
778
|
+
WHEN ${column('object_kind')} IN ('iri', 'blankNode') THEN ${column('object_key')}
|
|
779
|
+
WHEN ${column('object_kind')} = 'numeric' THEN split_part(${column('object')}, '${PG_SEP}', 4)
|
|
780
|
+
WHEN ${column('object_kind')} = 'dateTime' THEN split_part(${column('object')}, '${PG_SEP}', 3)
|
|
781
|
+
ELSE NULL
|
|
782
|
+
END`;
|
|
783
|
+
}
|
|
784
|
+
addObjectLanguageCondition(conditions, params, column, lang) {
|
|
785
|
+
const languageLiteralKinds = `${column('object_kind')} IN ('text', 'longText', 'literal')`;
|
|
786
|
+
if (lang === '*') {
|
|
787
|
+
conditions.push(`(${languageLiteralKinds} AND ${column('object')} ~ ?)`);
|
|
788
|
+
params.push('"@[A-Za-z]+(-[A-Za-z0-9]+)*$');
|
|
789
|
+
return;
|
|
790
|
+
}
|
|
791
|
+
const suffix = `"@${lang.toLowerCase()}`;
|
|
792
|
+
conditions.push(`(${languageLiteralKinds} AND (RIGHT(LOWER(${column('object')}), LENGTH(?)) = ? OR LOWER(${column('object')}) LIKE ?))`);
|
|
793
|
+
params.push(suffix, suffix, `%"@${lang.toLowerCase()}-%`);
|
|
794
|
+
}
|
|
717
795
|
objectPredicateForOperatorValue(value, op, predicate) {
|
|
718
796
|
const serialized = this.serializeOpValue(value, true, op);
|
|
719
797
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PgQuintStore.js","sourceRoot":"","sources":["../../../src/storage/quint/PgQuintStore.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;AAEH,iDAA8C;AAC9C,6CAAyC;AAGzC,qDAAoE;AACpE,mDAKyB;AAEzB,+CAMuB;AACvB,yEAAgE;AAiChE;;;GAGG;AACH,MAAM,MAAM,GAAG,QAAQ,CAAC;AAExB;;GAEG;AACH,SAAS,QAAQ,CAAC,GAAW;IAC3B,OAAO,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,SAAS,UAAU,CAAC,GAAW;IAC7B,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC;AACxD,CAAC;AAcD,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,IAAA,wBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACpE,CAAC;AAED;;GAEG;AACH,MAAM,cAAc;IAClB,YAAoB,EAAU;QAAV,OAAE,GAAF,EAAE,CAAQ;IAAG,CAAC;IAElC,KAAK,CAAC,KAAK,CAAU,GAAW,EAAE,MAAc;QAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;QAC5C,MAAM,UAAU,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAI,KAAK,EAAE,UAAU,CAAC,CAAC;QACzD,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,MAAc;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;QAC5C,MAAM,UAAU,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACtD,OAAO,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,UAA6C;QACtE,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC7B,IAAI,CAAC;YACH,KAAK,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;gBACzC,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;gBAC5C,MAAM,UAAU,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7E,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;YACzC,CAAC;YACD,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAChC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAChC,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAW;QACpB,MAAM,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAEO,mBAAmB,CAAC,GAAW;QACrC,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACjD,CAAC;IAEO,UAAU,CAAI,GAAM;QAC1B,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,GAAG,CAAC;QAEhD,MAAM,MAAM,GAAQ,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAU,CAAC,EAAE,CAAC;YACtD,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACtE,CAAC;QACD,OAAO,MAAW,CAAC;IACrB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU;IAGd,YAAY,IAAS;QACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,KAAK,CAAU,GAAW,EAAE,MAAc;QAC9C,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;QAC5C,MAAM,UAAU,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7E,OAAO,CAAC,GAAG,CAAC,uBAAuB,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;QAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,8BAA8B,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,CAAC;QAC9F,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,MAAc;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;QAC5C,MAAM,UAAU,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QACxD,OAAO,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,UAA6C;QACtE,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;QAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,kCAAkC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC,CAAC;QACtE,IAAI,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;YAC9C,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3C,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;gBACtC,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;gBAC5C,MAAM,UAAU,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7E,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;gBACxG,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;YACxC,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;YAC/C,MAAM,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;YAC1D,MAAM,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YAC/B,MAAM,KAAK,CAAC;QACd,CAAC;gBAAS,CAAC;YACT,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;YACjD,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAW;QACpB,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAEO,mBAAmB,CAAC,GAAW;QACrC,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACjD,CAAC;IAEO,UAAU,CAAI,GAAM;QAC1B,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,GAAG,CAAC;QAEhD,MAAM,MAAM,GAAQ,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAU,CAAC,EAAE,CAAC;YACtD,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACtE,CAAC;QACD,OAAO,MAAW,CAAC;IACrB,CAAC;CACF;AAED;;GAEG;AACH,MAAa,YAAa,SAAQ,+BAAc;IAK9C,YAAY,OAA4B;QACtC,KAAK,CAAC,OAAO,CAAC,CAAC;QALT,WAAM,GAAkB,IAAI,CAAC;QAC7B,WAAM,GAAQ,IAAI,CAAC,CAAC,UAAU;QAKpC,IAAI,CAAC,SAAS,GAAG;YACf,MAAM,EAAE,QAAQ,EAAE,cAAc;YAChC,GAAG,OAAO;SACX,CAAC;IACJ,CAAC;IAES,KAAK,CAAC,cAAc;QAC5B,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;YACnC,sBAAsB;YACtB,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;gBACxB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gBAClC,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACrC,CAAC;YAED,2BAA2B;YAC3B,IAAI,CAAC,MAAM,GAAG,IAAA,mCAAa,EAAC;gBAC1B,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,gBAAgB;gBACjD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI;gBACzB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI;gBACzB,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ;gBACjC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI;gBACzB,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ;aAClC,CAAC,CAAC;YACH,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,YAAY;YACZ,IAAI,CAAC,MAAM,GAAG,IAAI,eAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YACjD,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;YAC5B,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAES,KAAK,CAAC,aAAa;QAC3B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAC1B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACrB,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;YACxB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACrB,CAAC;IACH,CAAC;IAED;;OAEG;IACM,KAAK,CAAC,IAAI;QACjB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5C,kBAAkB;QAClB,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;;;;;;;;;;;;KAYxB,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAErC,MAAM,OAAO,GAAG;YACd,+DAA+D;YAC/D,mEAAmE;YACnE,uEAAuE;YACvE,sFAAsF;YACtF,2GAA2G;YAC3G,iHAAiH;YACjH,mJAAmJ;YACnJ,4JAA4J;YAC5J,iFAAiF;YACjF,yEAAyE;YACzE,uEAAuE;SACxE,CAAC;QAEF,KAAK,MAAM,QAAQ,IAAI,OAAO,EAAE,CAAC;YAC/B,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED;;OAEG;IACM,KAAK,CAAC,GAAG,CAAC,KAAY;QAC7B,IAAI,CAAC,UAAU,EAAE,CAAC;QAElB,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAErC,MAAM,IAAI,CAAC,QAAS,CAAC,oBAAoB,CAAC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7E,CAAC;IAED;;OAEG;IACM,KAAK,CAAC,QAAQ,CAAC,SAAkB;QACxC,OAAO,CAAC,GAAG,CAAC,qCAAqC,SAAS,CAAC,MAAM,SAAS,CAAC,CAAC;QAC5E,IAAI,CAAC,UAAU,EAAE,CAAC;QAElB,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;YAC5D,OAAO;QACT,CAAC;QAED,MAAM,UAAU,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YACrC,OAAO,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,qCAAqC,UAAU,CAAC,MAAM,4BAA4B,CAAC,CAAC;QAChG,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,MAAM,IAAI,CAAC,QAAS,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,wCAAwC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC,CAAC;IAC9E,CAAC;IAEQ,KAAK,CAAC,QAAQ,CAAC,SAAkB;QACxC,IAAI,CAAC,UAAU,EAAE,CAAC;QAElB,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAEnC,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YACvC,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YACrC,OAAO;gBACL,GAAG,EAAE;;;;;;SAMJ;gBACD,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC;aAC5D,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,QAAS,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;IACxD,CAAC;IAEQ,KAAK,CAAC,aAAa,CAC1B,QAAkB,EAClB,UAAoB,EACpB,KAAY;QAEZ,IAAI,CAAC,UAAU,EAAE,CAAC;QAElB,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrD,OAAO,IAAI,GAAG,EAAE,CAAC;QACnB,CAAC;QAED,MAAM,mBAAmB,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/D,MAAM,qBAAqB,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEnE,IAAI,GAAG,GAAG;;;0BAGY,mBAAmB;4BACjB,qBAAqB;KAC5C,CAAC;QACF,MAAM,MAAM,GAAU,CAAC,GAAG,QAAQ,EAAE,GAAG,UAAU,CAAC,CAAC;QAEnD,IAAI,KAAK,IAAI,KAAK,CAAC,QAAQ,KAAK,cAAc,EAAE,CAAC;YAC/C,MAAM,UAAU,GAAG,IAAA,wBAAQ,EAAC,KAAK,CAAC,CAAC;YACnC,GAAG,IAAI,gBAAgB,CAAC;YACxB,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1B,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAS,CAAC,KAAK,CAAyD,GAAG,EAAE,MAAM,CAAC,CAAC;QAC7G,MAAM,MAAM,GAAiB,IAAI,GAAG,EAAE,CAAC;QAEvC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC7B,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;YACrC,CAAC;YACD,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAE,CAAC;YAC9C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;gBACrC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YACtC,CAAC;YACD,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5E,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEkB,gBAAgB,CAAC,OAAqB;QACvD,MAAM,UAAU,GAAa,EAAE,CAAC;QAChC,MAAM,MAAM,GAAU,EAAE,CAAC;QACzB,MAAM,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAEhE,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAChE,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QACpE,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QACxE,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACrF,CAAC;QAED,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtF,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;IACjC,CAAC;IAEO,cAAc,CACpB,UAAoB,EACpB,MAAa,EACb,MAAyC,EACzC,KAA4B;QAE5B,IAAI,CAAC,KAAK;YAAE,OAAO;QAEnB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,UAAU,IAAI,KAAK,EAAE,CAAC;YACrD,MAAM,KAAK,GAAG,IAAA,wBAAQ,EAAC,KAAa,CAAC,CAAC;YACtC,UAAU,CAAC,IAAI,CAAC,GAAG,MAAM,MAAM,CAAC,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnB,OAAO;QACT,CAAC;QAED,MAAM,GAAG,GAAG,KAAY,CAAC;QACzB,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YAC3D,UAAU,CAAC,IAAI,CAAC,GAAG,MAAM,MAAM,CAAC,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC3B,OAAO;QACT,CAAC;QAED,KAAK,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAChE,CAAC;IAEkB,oBAAoB,CACrC,UAAoB,EACpB,MAAa,EACb,KAAa,EACb,OAAY;QAEZ,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACrF,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACzF,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC7F,IAAI,CAAC,0BAA0B,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACtE,CAAC;IAEkB,kBAAkB,CAAC,QAAyB,EAAE,OAAsB;QACrF,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC;QAC9C,MAAM,MAAM,GAAU,EAAE,CAAC;QAEzB,IAAI,YAAY,GAAG,MAAM,MAAM,gBAAgB,CAAC;QAEhD,IAAI,MAAM,EAAE,CAAC;YACX,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;gBACvB,YAAY,IAAI,MAAM,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC;YAC7D,CAAC;QACH,CAAC;aAAM,CAAC;YACN,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACzC,YAAY,IAAI,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC;gBACjD,YAAY,IAAI,MAAM,CAAC,kBAAkB,CAAC,YAAY,CAAC;YACzD,CAAC;QACH,CAAC;QAED,IAAI,UAAU,GAAG,WAAW,CAAC;QAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,UAAU,IAAI,iBAAiB,CAAC,UAAU,MAAM,OAAO,CAAC,IAAI,MAAM,EAAE,CAAC;YACrE,UAAU,IAAI,oBAAoB,CAAC,QAAQ,CAAC;QAC9C,CAAC;QAED,MAAM,UAAU,GAAa,EAAE,CAAC;QAEhC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC;YAEtB,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAChE,CAAC;QAED,IAAI,GAAG,GAAG,UAAU,YAAY,SAAS,UAAU,EAAE,CAAC;QAEtD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,GAAG,IAAI,UAAU,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9C,CAAC;QAED,IAAI,OAAO,EAAE,KAAK,EAAE,CAAC;YACnB,GAAG,IAAI,UAAU,CAAC;YAClB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QACD,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;YACpB,GAAG,IAAI,WAAW,CAAC;YACnB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC;QAED,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;IACzB,CAAC;IAEkB,gBAAgB,CAAC,OAAqB,EAAE,OAAsB;QAC/E,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAE/D,IAAI,GAAG,GAAG,uBAAuB,WAAW,EAAE,CAAC;QAE/C,IAAI,OAAO,EAAE,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/C,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;gBAC1C,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;oBACvB,MAAM,UAAU,GAAG,IAAI,CAAC,+BAA+B,CAAC,OAAO,CAAC,CAAC;oBACjE,IAAI,UAAU,KAAK,UAAU,EAAE,CAAC;wBAC9B,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;oBAC9E,CAAC;oBACD,OAAO,YAAY,CAAC;gBACtB,CAAC;gBACD,OAAO,KAAK,CAAC;YACf,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,GAAG,IAAI,aAAa,SAAS,EAAE,CAAC;YAChC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,GAAG,IAAI,OAAO,CAAC;YACjB,CAAC;QACH,CAAC;QAED,IAAI,OAAO,EAAE,KAAK,EAAE,CAAC;YACnB,GAAG,IAAI,UAAU,CAAC;YAClB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QAED,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;YACpB,GAAG,IAAI,WAAW,CAAC;YACnB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC;QAED,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;IACzB,CAAC;IAEO,KAAK,CAAC,uBAAuB;QACnC,MAAM,UAAU,GAAG;YACjB,8DAA8D;YAC9D,6DAA6D;YAC7D,8DAA8D;YAC9D,gEAAgE;SACjE,CAAC;QAEF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,MAAM,IAAI,CAAC,QAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACvC,CAAC;QAED,wEAAwE;QACxE,6EAA6E;QAC7E,MAAM,eAAe,GAAG;YACtB,UAAU;YACV,UAAU;YACV,UAAU;YACV,UAAU;YACV,UAAU;YACV,UAAU;YACV,aAAa;YACb,aAAa;YACb,aAAa;YACb,aAAa;YACb,aAAa;YACb,aAAa;YACb,qBAAqB;YACrB,kCAAkC;YAClC,uBAAuB;YACvB,uBAAuB;YACvB,yBAAyB;YACzB,2BAA2B;YAC3B,wBAAwB;YACxB,qBAAqB;YACrB,oBAAoB;YACpB,oBAAoB;SACrB,CAAC;QAEF,KAAK,MAAM,SAAS,IAAI,eAAe,EAAE,CAAC;YACxC,MAAM,IAAI,CAAC,QAAS,CAAC,IAAI,CAAC,wBAAwB,SAAS,EAAE,CAAC,CAAC;QACjE,CAAC;QAED,MAAM,IAAI,CAAC,QAAS,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;QAEtF,MAAM,eAAe,GAAG;YACtB,YAAY;YACZ,YAAY;YACZ,cAAc;YACd,gBAAgB;YAChB,aAAa;SACd,CAAC;QAEF,KAAK,MAAM,UAAU,IAAI,eAAe,EAAE,CAAC;YACzC,MAAM,IAAI,CAAC,QAAS,CAAC,IAAI,CAAC,4CAA4C,UAAU,EAAE,CAAC,CAAC;QACtF,CAAC;QAED,MAAM,IAAI,CAAC,gCAAgC,EAAE,CAAC;QAC9C,MAAM,IAAI,CAAC,QAAS,CAAC,IAAI,CAAC;;;;KAIzB,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,gCAAgC;QAC5C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAS,CAAC,KAAK,CAKpC;;;;;KAKF,CAAC,CAAC;QAEH,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,WAAW,GAAG,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;YAC7E,MAAM,IAAI,CAAC,QAAS,CAAC,OAAO,CAAC;;;;;;;;;;OAU5B,EAAE;gBACD,WAAW,CAAC,UAAU;gBACtB,WAAW,CAAC,SAAS;gBACrB,WAAW,CAAC,UAAU;gBACtB,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC;gBAClD,GAAG,CAAC,KAAK;gBACT,GAAG,CAAC,OAAO;gBACX,GAAG,CAAC,SAAS;gBACb,GAAG,CAAC,MAAM;aACX,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEO,YAAY,CAAC,KAAY;QAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,MAAc,CAAC,CAAC;QACjF,OAAO;YACL,GAAG,GAAG;YACN,UAAU,EAAE,WAAW,CAAC,UAAU;YAClC,SAAS,EAAE,WAAW,CAAC,SAAS;YAChC,UAAU,EAAE,WAAW,CAAC,UAAU;YAClC,YAAY,EAAE,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC;SACjE,CAAC;IACJ,CAAC;IAEO,kBAAkB,CAAC,SAAiB,EAAE,MAAY;QACxD,OAAO,IAAA,uCAAyB,EAAC,MAAM,EAAE;YACvC,SAAS;YACT,wBAAwB,EAAE,IAAI,CAAC,OAAO,CAAC,wBAAwB;YAC/D,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY;SACxC,CAAC,CAAC;IACL,CAAC;IAEO,wBAAwB,CAAC,SAAiB,EAAE,MAAc;QAChE,OAAO,IAAA,6CAA+B,EAAC,MAAM,EAAE;YAC7C,SAAS;YACT,wBAAwB,EAAE,IAAI,CAAC,OAAO,CAAC,wBAAwB;YAC/D,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY;SACxC,CAAC,CAAC;IACL,CAAC;IAEO,oBAAoB,CAAC,UAAkB,EAAE,MAAyB;QACxE,OAAO,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACrE,CAAC;IAEO,qBAAqB,CAAC,GAAe;QAC3C,MAAM,MAAM,GAAG;YACb,GAAG,CAAC,UAAU;YACd,GAAG,CAAC,SAAS;YACb,GAAG,CAAC,UAAU;YACd,GAAG,CAAC,YAAY;YAChB,GAAG,CAAC,KAAK;YACT,GAAG,CAAC,OAAO;YACX,GAAG,CAAC,SAAS;YACb,GAAG,CAAC,MAAM;YACV,GAAG,CAAC,MAAM;SACX,CAAC;QAEF,IAAI,GAAG,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YAC3B,OAAO,CAAC;oBACN,GAAG,EAAE;;;;;;;;;;;;;SAaJ;oBACD,MAAM;iBACP,CAAC,CAAC;QACL,CAAC;QAED,OAAO,CAAC;gBACN,GAAG,EAAE;;;;;;;;;;;;OAYJ;gBACD,MAAM;aACP,CAAC,CAAC;IACL,CAAC;IAEO,mBAAmB,CACzB,UAAoB,EACpB,MAAa,EACb,KAAyB,EACzB,KAAgB,EAChB,SAA6B;QAE7B,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAEnE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,UAAU,IAAI,KAAK,EAAE,CAAC;YACrD,IAAI,CAAC,uBAAuB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;YAC3E,OAAO;QACT,CAAC;QAED,MAAM,GAAG,GAAG,KAAY,CAAC;QAEzB,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YAC1B,IAAI,CAAC,4BAA4B,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;QAC3F,CAAC;QACD,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YAC1B,IAAI,CAAC,4BAA4B,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;QAC3F,CAAC;QACD,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YAC1B,IAAI,CAAC,4BAA4B,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;QAChG,CAAC;QACD,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC3B,IAAI,CAAC,4BAA4B,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;QACnG,CAAC;QACD,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YAC1B,IAAI,CAAC,4BAA4B,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;QAChG,CAAC;QACD,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC3B,IAAI,CAAC,4BAA4B,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;QACnG,CAAC;QACD,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChD,MAAM,UAAU,GAA6D,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,IAAI,CAAC,+BAA+B,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;YACxK,MAAM,YAAY,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC3C,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;oBACnC,OAAO,IAAI,MAAM,CAAC,eAAe,CAAC,YAAY,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;gBACxE,CAAC;gBACD,OAAO,IAAI,MAAM,CAAC,aAAa,CAAC,YAAY,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC;YAC1E,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAChB,UAAU,CAAC,IAAI,CAAC,IAAI,YAAY,GAAG,CAAC,CAAC;YACrC,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;gBAC9B,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;oBACnC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;gBACxF,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBAC7D,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtD,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,IAAI,CAAC,+BAA+B,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,UAAU,CAAC,CAAC;YAC3H,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,UAAU,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBAC5C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QACD,IAAI,GAAG,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YAClC,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YACtE,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;YACnD,UAAU,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAChD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAC/B,UAAU,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,aAAa,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAChF,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,WAAW,GAAG,QAAQ,CAAC,CAAC;QAC3D,CAAC;QACD,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAChC,IAAI,CAAC,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,GAAG,CAAC,SAAS,EAAE,EAAE,SAAS,CAAC,CAAC;QAClG,CAAC;QACD,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAChC,IAAI,CAAC,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,GAAG,CAAC,SAAS,GAAG,EAAE,SAAS,CAAC,CAAC;QACnG,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC7B,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACrE,IAAI,CAAC,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QACtF,CAAC;QACD,IAAI,GAAG,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YACzB,UAAU,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QACjD,CAAC;QACD,IAAI,GAAG,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;YAC1B,UAAU,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAEO,uBAAuB,CAC7B,UAAoB,EACpB,MAAa,EACb,MAAgC,EAChC,MAAY,EACZ,SAA6B;QAE7B,MAAM,UAAU,GAAG,IAAA,+BAAe,EAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAC3D,IAAI,CAAC,iCAAiC,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IACzF,CAAC;IAEO,4BAA4B,CAClC,UAAoB,EACpB,MAAa,EACb,MAAgC,EAChC,KAAU,EACV,EAAiB,EACjB,SAA6B;QAE7B,MAAM,IAAI,GAAG,IAAI,CAAC,+BAA+B,CAAC,KAAK,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;QACxE,IAAI,EAAE,KAAK,KAAK,EAAE,CAAC;YACjB,UAAU,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC5C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC7B,OAAO;QACT,CAAC;QACD,IAAI,CAAC,iCAAiC,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACnG,CAAC;IAEO,iCAAiC,CACvC,UAAoB,EACpB,MAAa,EACb,MAAgC,EAChC,UAAkB,EAClB,MAAyB;QAEzB,IAAI,MAAM,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YAC9B,UAAU,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAChD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAC/B,UAAU,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAC/C,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC9B,OAAO;QACT,CAAC;QAED,UAAU,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;QAC3D,UAAU,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC1B,CAAC;IAEO,4BAA4B,CAClC,UAAoB,EACpB,MAAa,EACb,MAAgC,EAChC,WAAmB,EACnB,KAAU,EACV,EAAU,EACV,SAA6B;QAE7B,MAAM,IAAI,GAAG,IAAI,CAAC,+BAA+B,CAAC,KAAK,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;QACxE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC7C,UAAU,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACpC,UAAU,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,WAAW,IAAI,CAAC,CAAC;QAC5D,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC/B,CAAC;IAEO,sBAAsB,CAC5B,UAAoB,EACpB,MAAa,EACb,MAAgC,EAChC,WAAmB,EACnB,KAAa,EACb,SAA6B;QAE7B,MAAM,YAAY,GAAG,IAAA,wCAA0B,EAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;QAClG,IAAI,YAAY,EAAE,CAAC;YACjB,IAAI,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC5D,MAAM,IAAI,KAAK,CAAC,2CAA2C,YAAY,EAAE,CAAC,CAAC;YAC7E,CAAC;YACD,UAAU,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAChD,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC5B,CAAC;QACD,UAAU,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,WAAW,IAAI,CAAC,CAAC;QAC7D,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IAEO,+BAA+B,CACrC,KAAU,EACV,EAAU,EACV,SAA6B;QAE7B,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QAC1D,OAAO;YACL,UAAU;YACV,MAAM,EAAE,IAAI,CAAC,yBAAyB,CAAC,UAAU,EAAE,SAAS,CAAC;SAC9D,CAAC;IACJ,CAAC;IAEO,mBAAmB,CAAC,MAAY,EAAE,SAA6B;QACrE,OAAO,IAAA,uCAAyB,EAAC,MAAM,EAAE;YACvC,SAAS;YACT,wBAAwB,EAAE,IAAI,CAAC,OAAO,CAAC,wBAAwB;YAC/D,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY;SACxC,CAAC,CAAC;IACL,CAAC;IAEO,yBAAyB,CAAC,UAAkB,EAAE,SAA6B;QACjF,OAAO,IAAA,6CAA+B,EAAC,UAAU,EAAE;YACjD,SAAS;YACT,wBAAwB,EAAE,IAAI,CAAC,OAAO,CAAC,wBAAwB;YAC/D,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY;SACxC,CAAC,CAAC;IACL,CAAC;IAEO,qBAAqB,CAAC,MAAc,EAAE,SAA6B;QACzE,MAAM,YAAY,GAAG,IAAA,wCAA0B,EAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;QAClG,IAAI,YAAY,EAAE,CAAC;YACjB,IAAI,YAAY,KAAK,UAAU,EAAE,CAAC;gBAChC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;YACzE,CAAC;YACD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;QAC3E,CAAC;QAED,IAAI,IAAA,0CAA0B,EAAC,MAAM,CAAC,EAAE,CAAC;YACvC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;QACxE,CAAC;QACD,IAAI,IAAA,2CAA2B,EAAC,MAAM,CAAC,EAAE,CAAC;YACxC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;QACzE,CAAC;QACD,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3B,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;QACrE,CAAC;QACD,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;QAC1E,CAAC;QACD,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IACpE,CAAC;IAEO,sBAAsB,CAAC,MAAyB,EAAE,EAAU;QAClE,IAAI,MAAM,CAAC,SAAS,KAAK,IAAI,IAAI,MAAM,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;YAClE,OAAO;QACT,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,UAAU,EAAE,yBAAyB,MAAM,CAAC,UAAU,0DAA0D,CAAC,CAAC;IACpI,CAAC;IAEO,0BAA0B,CAChC,UAAoB,EACpB,MAAa,EACb,KAAa,EACb,OAAqB;QAErB,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,OAAO;QAC5B,IAAI,CAAC,mBAAmB,CACtB,UAAU,EACV,MAAM,EACN,KAAK,EACL,OAAO,CAAC,MAAM,EACd,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,SAAS,CAAC,CAC9C,CAAC;IACJ,CAAC;IAEO,qBAAqB,CAAC,KAA4B;QACxD,IAAI,CAAC,KAAK;YAAE,OAAO,SAAS,CAAC;QAC7B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,UAAU,IAAI,KAAK,EAAE,CAAC;YACrD,OAAO,IAAA,wBAAQ,EAAC,KAAa,CAAC,CAAC;QACjC,CAAC;QACD,MAAM,GAAG,GAAG,KAAY,CAAC;QACzB,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QAC9D,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,+BAA+B,CAAC,OAAqB;QAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAChE,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,IAAA,wCAA0B,EAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;QACtF,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACzF,OAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,MAAc,EAAE,SAAS,CAAC,CAAC,UAAU,CAAC;QAChF,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,qBAAqB,CAC3B,UAAoB,EACpB,MAAa,EACb,KAAa,EACb,MAAc,EACd,KAAU,EACV,QAAiB;QAEjB,IAAI,CAAC,KAAK;YAAE,OAAO;QAEnB,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;YACtE,OAAO;QACT,CAAC;QAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,UAAU,IAAI,KAAK,EAAE,CAAC;YACrD,MAAM,KAAK,GAAG,IAAA,wBAAQ,EAAC,KAAK,CAAC,CAAC;YAC9B,UAAU,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,MAAM,MAAM,CAAC,CAAC;YAC1C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnB,OAAO;QACT,CAAC;QAED,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;YAC7D,UAAU,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,MAAM,MAAM,CAAC,CAAC;YAC1C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,2BAA2B,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IACvF,CAAC;IAEO,2BAA2B,CACjC,UAAoB,EACpB,MAAa,EACb,KAAa,EACb,MAAc,EACd,KAAU,EACV,QAAiB;QAEjB,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;YACtE,OAAO;QACT,CAAC;QACD,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YAC5B,UAAU,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,MAAM,MAAM,CAAC,CAAC;YAC1C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC7B,UAAU,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,MAAM,OAAO,CAAC,CAAC;YAC3C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;QAChE,CAAC;QACD,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YAC5B,UAAU,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,MAAM,MAAM,CAAC,CAAC;YAC1C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC7B,UAAU,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,MAAM,OAAO,CAAC,CAAC;YAC3C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;QAChE,CAAC;QACD,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpD,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzD,UAAU,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,MAAM,QAAQ,YAAY,GAAG,CAAC,CAAC;YAC3D,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QAC5F,CAAC;IACH,CAAC;CACF;AAz1BD,oCAy1BC","sourcesContent":["/**\n * PgQuintStore - PostgreSQL implementation of QuintStore\n *\n * 支持两种连接方式:\n * - PGLite: 嵌入式 PostgreSQL,用于测试\n * - pg (node-postgres): 真正的 PostgreSQL 连接,用于生产\n *\n * PostgreSQL 不支持 TEXT 字段中的 \\0 (null) 字符,\n * 所以我们需要对序列化的字符串进行转换。\n */\n\nimport { PGlite } from '@electric-sql/pglite';\nimport { createHash } from 'node:crypto';\nimport type { Term } from '@rdfjs/types';\n\nimport { BaseQuintStore, type SqlExecutor } from './BaseQuintStore';\nimport {\n isSerializedDateTimeLiteral,\n isSerializedNumericLiteral,\n serializeObject,\n termToId,\n} from './serialization';\nimport type { AttributeMap, CompoundPattern, QuintStoreOptions, Quint, QuintPattern, QueryOptions, TermMatch } from './types';\nimport {\n getPredicateObjectDataType,\n objectIndexFieldsFromSerialized,\n objectIndexFieldsFromTerm,\n type ObjectIndexFields,\n type PredicateObjectDataType,\n} from './value-types';\nimport { getSharedPool } from '../database/PostgresPoolManager';\n\n/**\n * PostgreSQL 连接配置\n */\nexport interface PgQuintStoreOptions extends QuintStoreOptions {\n /**\n * 连接方式:\n * - 'pglite': 使用 PGLite 嵌入式数据库(测试用)\n * - 'pg': 使用 node-postgres 连接真正的 PostgreSQL(生产用)\n */\n driver?: 'pglite' | 'pg';\n\n /** PGLite 数据目录,仅当 driver='pglite' 时使用 */\n dataDir?: string;\n\n /** PostgreSQL 连接字符串,仅当 driver='pg' 时使用 */\n connectionString?: string;\n\n /** PostgreSQL 连接配置,仅当 driver='pg' 时使用 */\n host?: string;\n port?: number;\n database?: string;\n user?: string;\n password?: string;\n\n /**\n * 共享的 pg Pool 实例(避免多个组件创建独立连接池导致死锁)\n * 如果提供,将忽略其他连接配置\n */\n pool?: any;\n}\n\n/**\n * PostgreSQL 兼容的分隔符\n * 使用 Unicode 控制字符 U+001F (Unit Separator) 代替 \\0\n */\nconst PG_SEP = '\\u001f';\n\n/**\n * 将使用 \\0 分隔符的字符串转换为使用 PG_SEP 的字符串\n */\nfunction toPgSafe(str: string): string {\n return str.replace(/\\u0000/g, PG_SEP);\n}\n\n/**\n * 将使用 PG_SEP 分隔符的字符串转换回使用 \\0 的字符串\n */\nfunction fromPgSafe(str: string): string {\n return str.replace(new RegExp(PG_SEP, 'g'), '\\u0000');\n}\n\ninterface PgQuintRow {\n graph: string;\n subject: string;\n predicate: string;\n object: string;\n vector: string | null;\n objectKind: PredicateObjectDataType;\n objectKey: string | null;\n objectText: string | null;\n objectDigest: string | null;\n}\n\nfunction digestObject(value: string): string {\n return createHash('sha256').update(toPgSafe(value)).digest('hex');\n}\n\n/**\n * PGLite 执行器\n */\nclass PgliteExecutor implements SqlExecutor {\n constructor(private db: PGlite) {}\n\n async query<T = any>(sql: string, params?: any[]): Promise<T[]> {\n const pgSql = this.convertPlaceholders(sql);\n const safeParams = params?.map(p => typeof p === 'string' ? toPgSafe(p) : p);\n const result = await this.db.query<T>(pgSql, safeParams);\n return result.rows.map(row => this.restoreRow(row));\n }\n\n async execute(sql: string, params?: any[]): Promise<number> {\n const pgSql = this.convertPlaceholders(sql);\n const safeParams = params?.map(p => typeof p === 'string' ? toPgSafe(p) : p);\n const result = await this.db.query(pgSql, safeParams);\n return result.affectedRows ?? 0;\n }\n\n async executeInTransaction(statements: { sql: string; params?: any[] }[]): Promise<void> {\n await this.db.query('BEGIN');\n try {\n for (const { sql, params } of statements) {\n const pgSql = this.convertPlaceholders(sql);\n const safeParams = params?.map(p => typeof p === 'string' ? toPgSafe(p) : p);\n await this.db.query(pgSql, safeParams);\n }\n await this.db.query('COMMIT');\n } catch (error) {\n await this.db.query('ROLLBACK');\n throw error;\n }\n }\n\n async exec(sql: string): Promise<void> {\n await this.db.exec(sql);\n }\n\n private convertPlaceholders(sql: string): string {\n let index = 0;\n return sql.replace(/\\?/g, () => `$${++index}`);\n }\n\n private restoreRow<T>(row: T): T {\n if (!row || typeof row !== 'object') return row;\n\n const result: any = {};\n for (const [key, value] of Object.entries(row as any)) {\n result[key] = typeof value === 'string' ? fromPgSafe(value) : value;\n }\n return result as T;\n }\n}\n\n/**\n * node-postgres 执行器(需要安装 pg 包)\n */\nclass PgExecutor implements SqlExecutor {\n private pool: any; // pg.Pool\n\n constructor(pool: any) {\n this.pool = pool;\n }\n\n async query<T = any>(sql: string, params?: any[]): Promise<T[]> {\n const pgSql = this.convertPlaceholders(sql);\n const safeParams = params?.map(p => typeof p === 'string' ? toPgSafe(p) : p);\n console.log(`[PgExecutor] Query: ${pgSql.slice(0, 60)}...`);\n const start = Date.now();\n const result = await this.pool.query(pgSql, safeParams);\n console.log(`[PgExecutor] Query done in ${Date.now() - start}ms, ${result.rows.length} rows`);\n return result.rows.map((row: any) => this.restoreRow(row));\n }\n\n async execute(sql: string, params?: any[]): Promise<number> {\n const pgSql = this.convertPlaceholders(sql);\n const safeParams = params?.map(p => typeof p === 'string' ? toPgSafe(p) : p);\n const result = await this.pool.query(pgSql, safeParams);\n return result.rowCount ?? 0;\n }\n\n async executeInTransaction(statements: { sql: string; params?: any[] }[]): Promise<void> {\n console.log(`[PgExecutor] Getting connection from pool...`);\n const start = Date.now();\n const client = await this.pool.connect();\n console.log(`[PgExecutor] Got connection in ${Date.now() - start}ms`);\n try {\n console.log(`[PgExecutor] BEGIN transaction`);\n await client.query('BEGIN');\n for (let i = 0; i < statements.length; i++) {\n const { sql, params } = statements[i];\n const pgSql = this.convertPlaceholders(sql);\n const safeParams = params?.map(p => typeof p === 'string' ? toPgSafe(p) : p);\n console.log(`[PgExecutor] Executing statement ${i + 1}/${statements.length}: ${pgSql.slice(0, 60)}...`);\n await client.query(pgSql, safeParams);\n }\n console.log(`[PgExecutor] COMMIT transaction`);\n await client.query('COMMIT');\n } catch (error) {\n console.error(`[PgExecutor] Error, rolling back:`, error);\n await client.query('ROLLBACK');\n throw error;\n } finally {\n console.log(`[PgExecutor] Releasing connection`);\n client.release();\n }\n }\n\n async exec(sql: string): Promise<void> {\n await this.pool.query(sql);\n }\n\n private convertPlaceholders(sql: string): string {\n let index = 0;\n return sql.replace(/\\?/g, () => `$${++index}`);\n }\n\n private restoreRow<T>(row: T): T {\n if (!row || typeof row !== 'object') return row;\n\n const result: any = {};\n for (const [key, value] of Object.entries(row as any)) {\n result[key] = typeof value === 'string' ? fromPgSafe(value) : value;\n }\n return result as T;\n }\n}\n\n/**\n * PostgreSQL QuintStore 实现\n */\nexport class PgQuintStore extends BaseQuintStore {\n private pglite: PGlite | null = null;\n private pgPool: any = null; // pg.Pool\n private pgOptions: PgQuintStoreOptions;\n\n constructor(options: PgQuintStoreOptions) {\n super(options);\n this.pgOptions = {\n driver: 'pglite', // 默认使用 PGLite\n ...options,\n };\n }\n\n protected async createExecutor(): Promise<SqlExecutor> {\n if (this.pgOptions.driver === 'pg') {\n // 使用共享的连接池(如果提供),避免死锁\n if (this.pgOptions.pool) {\n this.pgPool = this.pgOptions.pool;\n return new PgExecutor(this.pgPool);\n }\n\n // 使用共享连接池管理器,避免多个组件创建独立连接池\n this.pgPool = getSharedPool({\n connectionString: this.pgOptions.connectionString,\n host: this.pgOptions.host,\n port: this.pgOptions.port,\n database: this.pgOptions.database,\n user: this.pgOptions.user,\n password: this.pgOptions.password,\n });\n return new PgExecutor(this.pgPool);\n } else {\n // 使用 PGLite\n this.pglite = new PGlite(this.pgOptions.dataDir);\n await this.pglite.waitReady;\n return new PgliteExecutor(this.pglite);\n }\n }\n\n protected async closeExecutor(): Promise<void> {\n if (this.pglite) {\n await this.pglite.close();\n this.pglite = null;\n }\n if (this.pgPool) {\n await this.pgPool.end();\n this.pgPool = null;\n }\n }\n\n /**\n * 重写 open 方法,处理 PostgreSQL 特定的语法\n */\n override async open(): Promise<void> {\n if (this.executor) {\n return;\n }\n\n this.executor = await this.createExecutor();\n\n // PostgreSQL 建表语法\n await this.executor.exec(`\n CREATE TABLE IF NOT EXISTS quints (\n object_kind TEXT,\n object_key TEXT,\n object_text TEXT,\n object_digest TEXT,\n graph TEXT NOT NULL,\n subject TEXT NOT NULL,\n predicate TEXT NOT NULL,\n object TEXT NOT NULL,\n vector TEXT\n )\n `);\n\n await this.ensureTypedObjectSchema();\n\n const indexes = [\n 'CREATE INDEX IF NOT EXISTS idx_quints_graph ON quints (graph)',\n 'CREATE INDEX IF NOT EXISTS idx_quints_subject ON quints (subject)',\n 'CREATE INDEX IF NOT EXISTS idx_quints_predicate ON quints (predicate)',\n 'CREATE INDEX IF NOT EXISTS idx_quints_object_key ON quints (object_kind, object_key)',\n 'CREATE INDEX IF NOT EXISTS idx_quints_predicate_object_key ON quints (predicate, object_kind, object_key)',\n 'CREATE INDEX IF NOT EXISTS idx_quints_predicate_object_digest ON quints (predicate, object_kind, object_digest)',\n 'CREATE UNIQUE INDEX IF NOT EXISTS idx_quints_gspo_key ON quints (graph, subject, predicate, object_kind, object_key) WHERE object_key IS NOT NULL',\n 'CREATE UNIQUE INDEX IF NOT EXISTS idx_quints_gspo_digest ON quints (graph, subject, predicate, object_kind, object_digest) WHERE object_digest IS NOT NULL',\n 'CREATE INDEX IF NOT EXISTS idx_quints_gsp ON quints (graph, subject, predicate)',\n 'CREATE INDEX IF NOT EXISTS idx_quints_sp ON quints (subject, predicate)',\n 'CREATE INDEX IF NOT EXISTS idx_quints_gp ON quints (graph, predicate)',\n ];\n\n for (const indexSql of indexes) {\n await this.executor.exec(indexSql);\n }\n }\n\n /**\n * 重写 put 方法,避免长文本对象进入 PostgreSQL btree 唯一键\n */\n override async put(quint: Quint): Promise<void> {\n this.ensureOpen();\n\n const row = this.quintToPgRow(quint);\n\n await this.executor!.executeInTransaction(this.writeStatementsForRow(row));\n }\n\n /**\n * 重写 multiPut 方法,使用同一事务保持批量写入幂等\n */\n override async multiPut(quintList: Quint[]): Promise<void> {\n console.log(`[PgQuintStore.multiPut] Starting: ${quintList.length} quints`);\n this.ensureOpen();\n\n if (quintList.length === 0) {\n console.log(`[PgQuintStore.multiPut] Empty list, skipping`);\n return;\n }\n\n const statements = quintList.flatMap(quint => {\n const row = this.quintToPgRow(quint);\n return this.writeStatementsForRow(row);\n });\n\n console.log(`[PgQuintStore.multiPut] Executing ${statements.length} statements in transaction`);\n const start = Date.now();\n await this.executor!.executeInTransaction(statements);\n console.log(`[PgQuintStore.multiPut] Completed in ${Date.now() - start}ms`);\n }\n\n override async multiDel(quintList: Quint[]): Promise<void> {\n this.ensureOpen();\n\n if (quintList.length === 0) return;\n\n const statements = quintList.map(quint => {\n const row = this.quintToPgRow(quint);\n return {\n sql: `\n DELETE FROM quints\n WHERE graph = $1\n AND subject = $2\n AND predicate = $3\n AND object = $4\n `,\n params: [row.graph, row.subject, row.predicate, row.object],\n };\n });\n\n await this.executor!.executeInTransaction(statements);\n }\n\n override async getAttributes(\n subjects: string[],\n predicates: string[],\n graph?: Term,\n ): Promise<AttributeMap> {\n this.ensureOpen();\n\n if (subjects.length === 0 || predicates.length === 0) {\n return new Map();\n }\n\n const subjectPlaceholders = subjects.map(() => '?').join(', ');\n const predicatePlaceholders = predicates.map(() => '?').join(', ');\n\n let sql = `\n SELECT subject, predicate, object\n FROM quints\n WHERE subject IN (${subjectPlaceholders})\n AND predicate IN (${predicatePlaceholders})\n `;\n const params: any[] = [...subjects, ...predicates];\n\n if (graph && graph.termType !== 'DefaultGraph') {\n const graphValue = termToId(graph);\n sql += ` AND graph = ?`;\n params.push(graphValue);\n }\n\n const rows = await this.executor!.query<{ subject: string; predicate: string; object: string }>(sql, params);\n const result: AttributeMap = new Map();\n\n for (const row of rows) {\n if (!result.has(row.subject)) {\n result.set(row.subject, new Map());\n }\n const predicateMap = result.get(row.subject)!;\n if (!predicateMap.has(row.predicate)) {\n predicateMap.set(row.predicate, []);\n }\n predicateMap.get(row.predicate)!.push(this.deserializeObject(row.object));\n }\n\n return result;\n }\n\n protected override buildWhereClause(pattern: QuintPattern): { whereClause: string; params: any[] } {\n const conditions: string[] = [];\n const params: any[] = [];\n const predicate = this.extractExactPredicate(pattern.predicate);\n\n this.addPgCondition(conditions, params, 'graph', pattern.graph);\n this.addPgCondition(conditions, params, 'subject', pattern.subject);\n this.addPgCondition(conditions, params, 'predicate', pattern.predicate);\n if (pattern.object) {\n this.addObjectConditions(conditions, params, undefined, pattern.object, predicate);\n }\n\n const whereClause = conditions.length > 0 ? ` WHERE ${conditions.join(' AND ')}` : '';\n return { whereClause, params };\n }\n\n private addPgCondition(\n conditions: string[],\n params: any[],\n column: 'graph' | 'subject' | 'predicate',\n match: TermMatch | undefined,\n ): void {\n if (!match) return;\n\n if (typeof match === 'object' && 'termType' in match) {\n const value = termToId(match as Term);\n conditions.push(`${column} = ?`);\n params.push(value);\n return;\n }\n\n const ops = match as any;\n if (ops.$eq !== undefined) {\n const value = this.serializeOpValue(ops.$eq, false, '$eq');\n conditions.push(`${column} = ?`);\n params.push(String(value));\n return;\n }\n\n super.addConditions(conditions, params, column, match, false);\n }\n\n protected override addAliasedConditions(\n conditions: string[],\n params: any[],\n alias: string,\n pattern: any,\n ): void {\n this.addAliasedPgCondition(conditions, params, alias, 'graph', pattern.graph, false);\n this.addAliasedPgCondition(conditions, params, alias, 'subject', pattern.subject, false);\n this.addAliasedPgCondition(conditions, params, alias, 'predicate', pattern.predicate, false);\n this.addAliasedObjectConditions(conditions, params, alias, pattern);\n }\n\n protected override buildCompoundQuery(compound: CompoundPattern, options?: QueryOptions): { sql: string; params: any[] } {\n const { patterns, joinOn, select } = compound;\n const params: any[] = [];\n\n let selectClause = `q0.${joinOn} as join_value`;\n\n if (select) {\n for (const s of select) {\n selectClause += `, q${s.pattern}.${s.field} as ${s.alias}`;\n }\n } else {\n for (let i = 0; i < patterns.length; i++) {\n selectClause += `, q${i}.object as p${i}_object`;\n selectClause += `, q${i}.predicate as p${i}_predicate`;\n }\n }\n\n let fromClause = 'quints q0';\n for (let i = 1; i < patterns.length; i++) {\n fromClause += ` JOIN quints q${i} ON q0.${joinOn} = q${i}.${joinOn}`;\n fromClause += ` AND q0.graph = q${i}.graph`;\n }\n\n const whereParts: string[] = [];\n\n for (let i = 0; i < patterns.length; i++) {\n const pattern = patterns[i];\n const alias = `q${i}`;\n\n this.addAliasedConditions(whereParts, params, alias, pattern);\n }\n\n let sql = `SELECT ${selectClause} FROM ${fromClause}`;\n\n if (whereParts.length > 0) {\n sql += ` WHERE ${whereParts.join(' AND ')}`;\n }\n\n if (options?.limit) {\n sql += ` LIMIT ?`;\n params.push(options.limit);\n }\n if (options?.offset) {\n sql += ` OFFSET ?`;\n params.push(options.offset);\n }\n\n return { sql, params };\n }\n\n protected override buildSelectQuery(pattern: QuintPattern, options?: QueryOptions): { sql: string; params: any[] } {\n const { whereClause, params } = this.buildWhereClause(pattern);\n\n let sql = `SELECT * FROM quints${whereClause}`;\n\n if (options?.order && options.order.length > 0) {\n const orderCols = options.order.map(field => {\n if (field === 'object') {\n const objectType = this.resolveObjectDataTypeForPattern(pattern);\n if (objectType === 'longText') {\n throw new Error('ORDER BY object is not supported for longText predicates');\n }\n return 'object_key';\n }\n return field;\n }).join(', ');\n sql += ` ORDER BY ${orderCols}`;\n if (options.reverse) {\n sql += ' DESC';\n }\n }\n\n if (options?.limit) {\n sql += ` LIMIT ?`;\n params.push(options.limit);\n }\n\n if (options?.offset) {\n sql += ` OFFSET ?`;\n params.push(options.offset);\n }\n\n return { sql, params };\n }\n\n private async ensureTypedObjectSchema(): Promise<void> {\n const statements = [\n 'ALTER TABLE quints ADD COLUMN IF NOT EXISTS object_kind TEXT',\n 'ALTER TABLE quints ADD COLUMN IF NOT EXISTS object_key TEXT',\n 'ALTER TABLE quints ADD COLUMN IF NOT EXISTS object_text TEXT',\n 'ALTER TABLE quints ADD COLUMN IF NOT EXISTS object_digest TEXT',\n ];\n\n for (const statement of statements) {\n await this.executor!.exec(statement);\n }\n\n // The old Postgres schema indexed complete RDF terms. Long literals can\n // exceed the btree tuple size and surface as 500s while creating containers.\n const obsoleteIndexes = [\n 'idx_spog',\n 'idx_ogsp',\n 'idx_gspo',\n 'idx_sopg',\n 'idx_pogs',\n 'idx_gpos',\n 'idx_pg_spog',\n 'idx_pg_ogsp',\n 'idx_pg_gspo',\n 'idx_pg_sopg',\n 'idx_pg_pogs',\n 'idx_pg_gpos',\n 'idx_pg_graph_prefix',\n 'idx_quints_predicate_object_text',\n 'idx_quints_quint_hash',\n 'idx_quints_graph_hash',\n 'idx_quints_subject_hash',\n 'idx_quints_predicate_hash',\n 'idx_quints_object_hash',\n 'idx_quints_gsp_hash',\n 'idx_quints_sp_hash',\n 'idx_quints_gp_hash',\n ];\n\n for (const indexName of obsoleteIndexes) {\n await this.executor!.exec(`DROP INDEX IF EXISTS ${indexName}`);\n }\n\n await this.executor!.exec('ALTER TABLE quints DROP CONSTRAINT IF EXISTS quints_pkey');\n\n const obsoleteColumns = [\n 'quint_hash',\n 'graph_hash',\n 'subject_hash',\n 'predicate_hash',\n 'object_hash',\n ];\n\n for (const columnName of obsoleteColumns) {\n await this.executor!.exec(`ALTER TABLE quints DROP COLUMN IF EXISTS ${columnName}`);\n }\n\n await this.backfillMissingObjectIndexFields();\n await this.executor!.exec(`\n UPDATE quints\n SET object_kind = 'text'\n WHERE object_kind = 'shortText'\n `);\n }\n\n private async backfillMissingObjectIndexFields(): Promise<void> {\n const rows = await this.executor!.query<{\n graph: string;\n subject: string;\n predicate: string;\n object: string;\n }>(`\n SELECT graph, subject, predicate, object\n FROM quints\n WHERE object_kind IS NULL\n OR (object_key IS NULL AND object_digest IS NULL)\n `);\n\n for (const row of rows) {\n const objectIndex = this.objectIndexForSerialized(row.predicate, row.object);\n await this.executor!.execute(`\n UPDATE quints\n SET object_kind = $1,\n object_key = $2,\n object_text = $3,\n object_digest = $4\n WHERE graph = $5\n AND subject = $6\n AND predicate = $7\n AND object = $8\n `, [\n objectIndex.objectKind,\n objectIndex.objectKey,\n objectIndex.objectText,\n this.objectDigestForIndex(row.object, objectIndex),\n row.graph,\n row.subject,\n row.predicate,\n row.object,\n ]);\n }\n }\n\n private quintToPgRow(quint: Quint): PgQuintRow {\n const row = this.quintToRow(quint);\n const objectIndex = this.objectIndexForTerm(row.predicate, quint.object as Term);\n return {\n ...row,\n objectKind: objectIndex.objectKind,\n objectKey: objectIndex.objectKey,\n objectText: objectIndex.objectText,\n objectDigest: this.objectDigestForIndex(row.object, objectIndex),\n };\n }\n\n private objectIndexForTerm(predicate: string, object: Term): ObjectIndexFields {\n return objectIndexFieldsFromTerm(object, {\n predicate,\n predicateObjectDataTypes: this.options.predicateObjectDataTypes,\n textMaxBytes: this.options.textMaxBytes,\n });\n }\n\n private objectIndexForSerialized(predicate: string, object: string): ObjectIndexFields {\n return objectIndexFieldsFromSerialized(object, {\n predicate,\n predicateObjectDataTypes: this.options.predicateObjectDataTypes,\n textMaxBytes: this.options.textMaxBytes,\n });\n }\n\n private objectDigestForIndex(serialized: string, fields: ObjectIndexFields): string | null {\n return fields.objectKey === null ? digestObject(serialized) : null;\n }\n\n private writeStatementsForRow(row: PgQuintRow): { sql: string; params?: any[] }[] {\n const params = [\n row.objectKind,\n row.objectKey,\n row.objectText,\n row.objectDigest,\n row.graph,\n row.subject,\n row.predicate,\n row.object,\n row.vector,\n ];\n\n if (row.objectKey !== null) {\n return [{\n sql: `\n INSERT INTO quints (\n object_kind, object_key, object_text, object_digest,\n graph, subject, predicate, object, vector\n )\n VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)\n ON CONFLICT (graph, subject, predicate, object_kind, object_key)\n WHERE object_key IS NOT NULL\n DO UPDATE SET\n vector = EXCLUDED.vector,\n object_text = EXCLUDED.object_text,\n object_digest = EXCLUDED.object_digest\n WHERE quints.object = EXCLUDED.object\n `,\n params,\n }];\n }\n\n return [{\n sql: `\n INSERT INTO quints (\n object_kind, object_key, object_text, object_digest,\n graph, subject, predicate, object, vector\n )\n VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)\n ON CONFLICT (graph, subject, predicate, object_kind, object_digest)\n WHERE object_digest IS NOT NULL\n DO UPDATE SET\n object = CASE WHEN quints.object = EXCLUDED.object THEN EXCLUDED.object ELSE NULL END,\n vector = EXCLUDED.vector,\n object_text = EXCLUDED.object_text\n `,\n params,\n }];\n }\n\n private addObjectConditions(\n conditions: string[],\n params: any[],\n alias: string | undefined,\n match: TermMatch,\n predicate: string | undefined,\n ): void {\n const column = (name: string) => alias ? `${alias}.${name}` : name;\n\n if (typeof match === 'object' && 'termType' in match) {\n this.addObjectExactCondition(conditions, params, column, match, predicate);\n return;\n }\n\n const ops = match as any;\n\n if (ops.$eq !== undefined) {\n this.addObjectExactValueCondition(conditions, params, column, ops.$eq, '$eq', predicate);\n }\n if (ops.$ne !== undefined) {\n this.addObjectExactValueCondition(conditions, params, column, ops.$ne, '$ne', predicate);\n }\n if (ops.$gt !== undefined) {\n this.addObjectComparableCondition(conditions, params, column, '>', ops.$gt, '$gt', predicate);\n }\n if (ops.$gte !== undefined) {\n this.addObjectComparableCondition(conditions, params, column, '>=', ops.$gte, '$gte', predicate);\n }\n if (ops.$lt !== undefined) {\n this.addObjectComparableCondition(conditions, params, column, '<', ops.$lt, '$lt', predicate);\n }\n if (ops.$lte !== undefined) {\n this.addObjectComparableCondition(conditions, params, column, '<=', ops.$lte, '$lte', predicate);\n }\n if (ops.$in !== undefined && ops.$in.length > 0) {\n const predicates: Array<{ serialized: string; fields: ObjectIndexFields }> = ops.$in.map((value: any) => this.objectPredicateForOperatorValue(value, '$in', predicate));\n const placeholders = predicates.map((item) => {\n if (item.fields.objectKey === null) {\n return `(${column('object_digest')} = ? AND ${column('object')} = ?)`;\n }\n return `(${column('object_kind')} = ? AND ${column('object_key')} = ?)`;\n }).join(' OR ');\n conditions.push(`(${placeholders})`);\n for (const item of predicates) {\n if (item.fields.objectKey === null) {\n params.push(this.objectDigestForIndex(item.serialized, item.fields), item.serialized);\n } else {\n params.push(item.fields.objectKind, item.fields.objectKey);\n }\n }\n }\n if (ops.$notIn !== undefined && ops.$notIn.length > 0) {\n const values = ops.$notIn.map((value: any) => this.objectPredicateForOperatorValue(value, '$notIn', predicate).serialized);\n for (const value of values) {\n conditions.push(`${column('object')} != ?`);\n params.push(value);\n }\n }\n if (ops.$startsWith !== undefined) {\n const fields = this.objectFieldsForPrefix(ops.$startsWith, predicate);\n this.assertComparableObject(fields, '$startsWith');\n conditions.push(`${column('object_kind')} = ?`);\n params.push(fields.objectKind);\n conditions.push(`${column('object_key')} >= ? AND ${column('object_key')} < ?`);\n params.push(ops.$startsWith, ops.$startsWith + '\\uffff');\n }\n if (ops.$endsWith !== undefined) {\n this.addObjectTextCondition(conditions, params, column, 'LIKE', `%${ops.$endsWith}`, predicate);\n }\n if (ops.$contains !== undefined) {\n this.addObjectTextCondition(conditions, params, column, 'LIKE', `%${ops.$contains}%`, predicate);\n }\n if (ops.$regex !== undefined) {\n const pattern = ops.$regex.replace(/\\.\\*/g, '%').replace(/\\./g, '_');\n this.addObjectTextCondition(conditions, params, column, 'LIKE', pattern, predicate);\n }\n if (ops.$isNull === true) {\n conditions.push(`${column('object')} IS NULL`);\n }\n if (ops.$isNull === false) {\n conditions.push(`${column('object')} IS NOT NULL`);\n }\n }\n\n private addObjectExactCondition(\n conditions: string[],\n params: any[],\n column: (name: string) => string,\n object: Term,\n predicate: string | undefined,\n ): void {\n const serialized = serializeObject(object);\n const fields = this.objectFieldsForTerm(object, predicate);\n this.addObjectExactSerializedCondition(conditions, params, column, serialized, fields);\n }\n\n private addObjectExactValueCondition(\n conditions: string[],\n params: any[],\n column: (name: string) => string,\n value: any,\n op: '$eq' | '$ne',\n predicate: string | undefined,\n ): void {\n const item = this.objectPredicateForOperatorValue(value, op, predicate);\n if (op === '$ne') {\n conditions.push(`${column('object')} != ?`);\n params.push(item.serialized);\n return;\n }\n this.addObjectExactSerializedCondition(conditions, params, column, item.serialized, item.fields);\n }\n\n private addObjectExactSerializedCondition(\n conditions: string[],\n params: any[],\n column: (name: string) => string,\n serialized: string,\n fields: ObjectIndexFields,\n ): void {\n if (fields.objectKey !== null) {\n conditions.push(`${column('object_kind')} = ?`);\n params.push(fields.objectKind);\n conditions.push(`${column('object_key')} = ?`);\n params.push(fields.objectKey);\n return;\n }\n\n conditions.push(`${column('object_digest')} = ?`);\n params.push(this.objectDigestForIndex(serialized, fields));\n conditions.push(`${column('object')} = ?`);\n params.push(serialized);\n }\n\n private addObjectComparableCondition(\n conditions: string[],\n params: any[],\n column: (name: string) => string,\n sqlOperator: string,\n value: any,\n op: string,\n predicate: string | undefined,\n ): void {\n const item = this.objectPredicateForOperatorValue(value, op, predicate);\n this.assertComparableObject(item.fields, op);\n conditions.push(`${column('object_kind')} = ?`);\n params.push(item.fields.objectKind);\n conditions.push(`${column('object_key')} ${sqlOperator} ?`);\n params.push(item.serialized);\n }\n\n private addObjectTextCondition(\n conditions: string[],\n params: any[],\n column: (name: string) => string,\n sqlOperator: string,\n value: string,\n predicate: string | undefined,\n ): void {\n const declaredType = getPredicateObjectDataType(predicate, this.options.predicateObjectDataTypes);\n if (declaredType) {\n if (!['text', 'longText', 'literal'].includes(declaredType)) {\n throw new Error(`Object text search is not supported for ${declaredType}`);\n }\n conditions.push(`${column('object_kind')} = ?`);\n params.push(declaredType);\n }\n conditions.push(`${column('object_text')} ${sqlOperator} ?`);\n params.push(value);\n }\n\n private objectPredicateForOperatorValue(\n value: any,\n op: string,\n predicate: string | undefined,\n ): { serialized: string; fields: ObjectIndexFields } {\n const serialized = this.serializeOpValue(value, true, op);\n return {\n serialized,\n fields: this.objectFieldsForSerialized(serialized, predicate),\n };\n }\n\n private objectFieldsForTerm(object: Term, predicate: string | undefined): ObjectIndexFields {\n return objectIndexFieldsFromTerm(object, {\n predicate,\n predicateObjectDataTypes: this.options.predicateObjectDataTypes,\n textMaxBytes: this.options.textMaxBytes,\n });\n }\n\n private objectFieldsForSerialized(serialized: string, predicate: string | undefined): ObjectIndexFields {\n return objectIndexFieldsFromSerialized(serialized, {\n predicate,\n predicateObjectDataTypes: this.options.predicateObjectDataTypes,\n textMaxBytes: this.options.textMaxBytes,\n });\n }\n\n private objectFieldsForPrefix(prefix: string, predicate: string | undefined): ObjectIndexFields {\n const declaredType = getPredicateObjectDataType(predicate, this.options.predicateObjectDataTypes);\n if (declaredType) {\n if (declaredType === 'longText') {\n return { objectKind: 'longText', objectKey: null, objectText: prefix };\n }\n return { objectKind: declaredType, objectKey: prefix, objectText: null };\n }\n\n if (isSerializedNumericLiteral(prefix)) {\n return { objectKind: 'numeric', objectKey: prefix, objectText: null };\n }\n if (isSerializedDateTimeLiteral(prefix)) {\n return { objectKind: 'dateTime', objectKey: prefix, objectText: null };\n }\n if (prefix.startsWith('\"')) {\n return { objectKind: 'text', objectKey: prefix, objectText: null };\n }\n if (prefix.startsWith('_:')) {\n return { objectKind: 'blankNode', objectKey: prefix, objectText: null };\n }\n return { objectKind: 'iri', objectKey: prefix, objectText: null };\n }\n\n private assertComparableObject(fields: ObjectIndexFields, op: string): void {\n if (fields.objectKey !== null && fields.objectKind !== 'longText') {\n return;\n }\n throw new Error(`Object ${op} is not supported for ${fields.objectKind}; declare/use a comparable data type instead of longText`);\n }\n\n private addAliasedObjectConditions(\n conditions: string[],\n params: any[],\n alias: string,\n pattern: QuintPattern,\n ): void {\n if (!pattern.object) return;\n this.addObjectConditions(\n conditions,\n params,\n alias,\n pattern.object,\n this.extractExactPredicate(pattern.predicate),\n );\n }\n\n private extractExactPredicate(match: TermMatch | undefined): string | undefined {\n if (!match) return undefined;\n if (typeof match === 'object' && 'termType' in match) {\n return termToId(match as Term);\n }\n const ops = match as any;\n if (ops.$eq !== undefined) {\n return String(this.serializeOpValue(ops.$eq, false, '$eq'));\n }\n return undefined;\n }\n\n private resolveObjectDataTypeForPattern(pattern: QuintPattern): PredicateObjectDataType | undefined {\n const predicate = this.extractExactPredicate(pattern.predicate);\n if (predicate) {\n return getPredicateObjectDataType(predicate, this.options.predicateObjectDataTypes);\n }\n if (pattern.object && typeof pattern.object === 'object' && 'termType' in pattern.object) {\n return this.objectFieldsForTerm(pattern.object as Term, predicate).objectKind;\n }\n return undefined;\n }\n\n private addAliasedPgCondition(\n conditions: string[],\n params: any[],\n alias: string,\n column: string,\n match: any,\n isObject: boolean,\n ): void {\n if (!match) return;\n\n if (isObject) {\n this.addObjectConditions(conditions, params, alias, match, undefined);\n return;\n }\n\n if (typeof match === 'object' && 'termType' in match) {\n const value = termToId(match);\n conditions.push(`${alias}.${column} = ?`);\n params.push(value);\n return;\n }\n\n if (match.$eq !== undefined) {\n const value = this.serializeOpValue(match.$eq, false, '$eq');\n conditions.push(`${alias}.${column} = ?`);\n params.push(value);\n return;\n }\n\n this.addFallbackAliasedCondition(conditions, params, alias, column, match, isObject);\n }\n\n private addFallbackAliasedCondition(\n conditions: string[],\n params: any[],\n alias: string,\n column: string,\n match: any,\n isObject: boolean,\n ): void {\n if (isObject) {\n this.addObjectConditions(conditions, params, alias, match, undefined);\n return;\n }\n if (match.$gt !== undefined) {\n conditions.push(`${alias}.${column} > ?`);\n params.push(this.serializeOpValue(match.$gt, false, '$gt'));\n }\n if (match.$gte !== undefined) {\n conditions.push(`${alias}.${column} >= ?`);\n params.push(this.serializeOpValue(match.$gte, false, '$gte'));\n }\n if (match.$lt !== undefined) {\n conditions.push(`${alias}.${column} < ?`);\n params.push(this.serializeOpValue(match.$lt, false, '$lt'));\n }\n if (match.$lte !== undefined) {\n conditions.push(`${alias}.${column} <= ?`);\n params.push(this.serializeOpValue(match.$lte, false, '$lte'));\n }\n if (match.$in !== undefined && match.$in.length > 0) {\n const placeholders = match.$in.map(() => '?').join(', ');\n conditions.push(`${alias}.${column} IN (${placeholders})`);\n params.push(...match.$in.map((value: any) => this.serializeOpValue(value, false, '$in')));\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"PgQuintStore.js","sourceRoot":"","sources":["../../../src/storage/quint/PgQuintStore.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * PgQuintStore - PostgreSQL implementation of QuintStore\n *\n * 支持两种连接方式:\n * - PGLite: 嵌入式 PostgreSQL,用于测试\n * - pg (node-postgres): 真正的 PostgreSQL 连接,用于生产\n *\n * PostgreSQL 不支持 TEXT 字段中的 \\0 (null) 字符,\n * 所以我们需要对序列化的字符串进行转换。\n */\n\nimport { PGlite } from '@electric-sql/pglite';\nimport { createHash } from 'node:crypto';\nimport type { Term } from '@rdfjs/types';\n\nimport { BaseQuintStore, type SqlExecutor } from './BaseQuintStore';\nimport {\n isSerializedDateTimeLiteral,\n isSerializedNumericLiteral,\n serializeObject,\n termToId,\n} from './serialization';\nimport type { AttributeMap, CompoundPattern, QuintStoreOptions, Quint, QuintPattern, QueryOptions, TermMatch } from './types';\nimport {\n getPredicateObjectDataType,\n objectIndexFieldsFromSerialized,\n objectIndexFieldsFromTerm,\n type ObjectIndexFields,\n type PredicateObjectDataType,\n} from './value-types';\nimport { getSharedPool, releaseSharedPool } from '../database/PostgresPoolManager';\n\n/**\n * PostgreSQL 连接配置\n */\nexport interface PgQuintStoreOptions extends QuintStoreOptions {\n /**\n * 连接方式:\n * - 'pglite': 使用 PGLite 嵌入式数据库(测试用)\n * - 'pg': 使用 node-postgres 连接真正的 PostgreSQL(生产用)\n */\n driver?: 'pglite' | 'pg';\n\n /** PGLite 数据目录,仅当 driver='pglite' 时使用 */\n dataDir?: string;\n\n /** PostgreSQL 连接字符串,仅当 driver='pg' 时使用 */\n connectionString?: string;\n\n /** PostgreSQL 连接配置,仅当 driver='pg' 时使用 */\n host?: string;\n port?: number;\n database?: string;\n user?: string;\n password?: string;\n\n /**\n * 共享的 pg Pool 实例(避免多个组件创建独立连接池导致死锁)\n * 如果提供,将忽略其他连接配置\n */\n pool?: any;\n}\n\n/**\n * PostgreSQL 兼容的分隔符\n * 使用 Unicode 控制字符 U+001F (Unit Separator) 代替 \\0\n */\nconst PG_SEP = '\\u001f';\n\n/**\n * 将使用 \\0 分隔符的字符串转换为使用 PG_SEP 的字符串\n */\nfunction toPgSafe(str: string): string {\n return str.replace(/\\u0000/g, PG_SEP);\n}\n\n/**\n * 将使用 PG_SEP 分隔符的字符串转换回使用 \\0 的字符串\n */\nfunction fromPgSafe(str: string): string {\n return str.replace(new RegExp(PG_SEP, 'g'), '\\u0000');\n}\n\ninterface PgQuintRow {\n graph: string;\n subject: string;\n predicate: string;\n object: string;\n vector: string | null;\n objectKind: PredicateObjectDataType;\n objectKey: string | null;\n objectText: string | null;\n objectDigest: string | null;\n}\n\nfunction digestObject(value: string): string {\n return createHash('sha256').update(toPgSafe(value)).digest('hex');\n}\n\n/**\n * PGLite 执行器\n */\nclass PgliteExecutor implements SqlExecutor {\n constructor(private db: PGlite) {}\n\n async query<T = any>(sql: string, params?: any[]): Promise<T[]> {\n const pgSql = this.convertPlaceholders(sql);\n const safeParams = params?.map(p => typeof p === 'string' ? toPgSafe(p) : p);\n const result = await this.db.query<T>(pgSql, safeParams);\n return result.rows.map(row => this.restoreRow(row));\n }\n\n async execute(sql: string, params?: any[]): Promise<number> {\n const pgSql = this.convertPlaceholders(sql);\n const safeParams = params?.map(p => typeof p === 'string' ? toPgSafe(p) : p);\n const result = await this.db.query(pgSql, safeParams);\n return result.affectedRows ?? 0;\n }\n\n async executeInTransaction(statements: { sql: string; params?: any[] }[]): Promise<void> {\n await this.db.query('BEGIN');\n try {\n for (const { sql, params } of statements) {\n const pgSql = this.convertPlaceholders(sql);\n const safeParams = params?.map(p => typeof p === 'string' ? toPgSafe(p) : p);\n await this.db.query(pgSql, safeParams);\n }\n await this.db.query('COMMIT');\n } catch (error) {\n await this.db.query('ROLLBACK');\n throw error;\n }\n }\n\n async exec(sql: string): Promise<void> {\n await this.db.exec(sql);\n }\n\n private convertPlaceholders(sql: string): string {\n let index = 0;\n return sql.replace(/\\?/g, () => `$${++index}`);\n }\n\n private restoreRow<T>(row: T): T {\n if (!row || typeof row !== 'object') return row;\n\n const result: any = {};\n for (const [key, value] of Object.entries(row as any)) {\n result[key] = typeof value === 'string' ? fromPgSafe(value) : value;\n }\n return result as T;\n }\n}\n\n/**\n * node-postgres 执行器(需要安装 pg 包)\n */\nclass PgExecutor implements SqlExecutor {\n private pool: any; // pg.Pool\n\n constructor(pool: any) {\n this.pool = pool;\n }\n\n async query<T = any>(sql: string, params?: any[]): Promise<T[]> {\n const pgSql = this.convertPlaceholders(sql);\n const safeParams = params?.map(p => typeof p === 'string' ? toPgSafe(p) : p);\n console.log(`[PgExecutor] Query: ${pgSql.slice(0, 60)}...`);\n const start = Date.now();\n const result = await this.pool.query(pgSql, safeParams);\n console.log(`[PgExecutor] Query done in ${Date.now() - start}ms, ${result.rows.length} rows`);\n return result.rows.map((row: any) => this.restoreRow(row));\n }\n\n async execute(sql: string, params?: any[]): Promise<number> {\n const pgSql = this.convertPlaceholders(sql);\n const safeParams = params?.map(p => typeof p === 'string' ? toPgSafe(p) : p);\n const result = await this.pool.query(pgSql, safeParams);\n return result.rowCount ?? 0;\n }\n\n async executeInTransaction(statements: { sql: string; params?: any[] }[]): Promise<void> {\n console.log(`[PgExecutor] Getting connection from pool...`);\n const start = Date.now();\n const client = await this.pool.connect();\n console.log(`[PgExecutor] Got connection in ${Date.now() - start}ms`);\n try {\n console.log(`[PgExecutor] BEGIN transaction`);\n await client.query('BEGIN');\n for (let i = 0; i < statements.length; i++) {\n const { sql, params } = statements[i];\n const pgSql = this.convertPlaceholders(sql);\n const safeParams = params?.map(p => typeof p === 'string' ? toPgSafe(p) : p);\n console.log(`[PgExecutor] Executing statement ${i + 1}/${statements.length}: ${pgSql.slice(0, 60)}...`);\n await client.query(pgSql, safeParams);\n }\n console.log(`[PgExecutor] COMMIT transaction`);\n await client.query('COMMIT');\n } catch (error) {\n console.error(`[PgExecutor] Error, rolling back:`, error);\n await client.query('ROLLBACK');\n throw error;\n } finally {\n console.log(`[PgExecutor] Releasing connection`);\n client.release();\n }\n }\n\n async exec(sql: string): Promise<void> {\n await this.pool.query(sql);\n }\n\n private convertPlaceholders(sql: string): string {\n let index = 0;\n return sql.replace(/\\?/g, () => `$${++index}`);\n }\n\n private restoreRow<T>(row: T): T {\n if (!row || typeof row !== 'object') return row;\n\n const result: any = {};\n for (const [key, value] of Object.entries(row as any)) {\n result[key] = typeof value === 'string' ? fromPgSafe(value) : value;\n }\n return result as T;\n }\n}\n\n/**\n * PostgreSQL QuintStore 实现\n */\nexport class PgQuintStore extends BaseQuintStore {\n private pglite: PGlite | null = null;\n private pgPool: any = null; // pg.Pool\n private pgOptions: PgQuintStoreOptions;\n private sharedPoolConfig: {\n connectionString?: string;\n host?: string;\n port?: number;\n database?: string;\n user?: string;\n password?: string;\n } | null = null;\n\n constructor(options: PgQuintStoreOptions) {\n super(options);\n this.pgOptions = {\n driver: 'pglite', // 默认使用 PGLite\n ...options,\n };\n }\n\n protected async createExecutor(): Promise<SqlExecutor> {\n if (this.pgOptions.driver === 'pg') {\n // 使用共享的连接池(如果提供),避免死锁\n if (this.pgOptions.pool) {\n this.pgPool = this.pgOptions.pool;\n this.sharedPoolConfig = null;\n return new PgExecutor(this.pgPool);\n }\n\n // 使用共享连接池管理器,避免多个组件创建独立连接池\n this.sharedPoolConfig = {\n connectionString: this.pgOptions.connectionString,\n host: this.pgOptions.host,\n port: this.pgOptions.port,\n database: this.pgOptions.database,\n user: this.pgOptions.user,\n password: this.pgOptions.password,\n };\n this.pgPool = getSharedPool(this.sharedPoolConfig);\n return new PgExecutor(this.pgPool);\n } else {\n // 使用 PGLite\n this.pglite = new PGlite(this.pgOptions.dataDir);\n await this.pglite.waitReady;\n return new PgliteExecutor(this.pglite);\n }\n }\n\n protected async closeExecutor(): Promise<void> {\n if (this.pglite) {\n await this.pglite.close();\n this.pglite = null;\n }\n if (this.pgPool) {\n if (this.sharedPoolConfig) {\n releaseSharedPool(this.sharedPoolConfig);\n } else {\n await this.pgPool.end();\n }\n this.pgPool = null;\n this.sharedPoolConfig = null;\n }\n }\n\n /**\n * 重写 open 方法,处理 PostgreSQL 特定的语法\n */\n override async open(): Promise<void> {\n if (this.executor) {\n return;\n }\n\n this.executor = await this.createExecutor();\n\n // PostgreSQL 建表语法\n await this.executor.exec(`\n CREATE TABLE IF NOT EXISTS quints (\n object_kind TEXT,\n object_key TEXT,\n object_text TEXT,\n object_digest TEXT,\n graph TEXT NOT NULL,\n subject TEXT NOT NULL,\n predicate TEXT NOT NULL,\n object TEXT NOT NULL,\n vector TEXT\n )\n `);\n\n await this.ensureTypedObjectSchema();\n\n const indexes = [\n 'CREATE INDEX IF NOT EXISTS idx_quints_graph ON quints (graph)',\n 'CREATE INDEX IF NOT EXISTS idx_quints_subject ON quints (subject)',\n 'CREATE INDEX IF NOT EXISTS idx_quints_predicate ON quints (predicate)',\n 'CREATE INDEX IF NOT EXISTS idx_quints_object_key ON quints (object_kind, object_key)',\n 'CREATE INDEX IF NOT EXISTS idx_quints_predicate_object_key ON quints (predicate, object_kind, object_key)',\n 'CREATE INDEX IF NOT EXISTS idx_quints_predicate_object_digest ON quints (predicate, object_kind, object_digest)',\n 'CREATE UNIQUE INDEX IF NOT EXISTS idx_quints_gspo_key ON quints (graph, subject, predicate, object_kind, object_key) WHERE object_key IS NOT NULL',\n 'CREATE UNIQUE INDEX IF NOT EXISTS idx_quints_gspo_digest ON quints (graph, subject, predicate, object_kind, object_digest) WHERE object_digest IS NOT NULL',\n 'CREATE INDEX IF NOT EXISTS idx_quints_gsp ON quints (graph, subject, predicate)',\n 'CREATE INDEX IF NOT EXISTS idx_quints_sp ON quints (subject, predicate)',\n 'CREATE INDEX IF NOT EXISTS idx_quints_gp ON quints (graph, predicate)',\n ];\n\n for (const indexSql of indexes) {\n await this.executor.exec(indexSql);\n }\n }\n\n /**\n * 重写 put 方法,避免长文本对象进入 PostgreSQL btree 唯一键\n */\n override async put(quint: Quint): Promise<void> {\n this.ensureOpen();\n\n const row = this.quintToPgRow(quint);\n\n await this.executor!.executeInTransaction(this.writeStatementsForRow(row));\n }\n\n /**\n * 重写 multiPut 方法,使用同一事务保持批量写入幂等\n */\n override async multiPut(quintList: Quint[]): Promise<void> {\n console.log(`[PgQuintStore.multiPut] Starting: ${quintList.length} quints`);\n this.ensureOpen();\n\n if (quintList.length === 0) {\n console.log(`[PgQuintStore.multiPut] Empty list, skipping`);\n return;\n }\n\n const statements = quintList.flatMap(quint => {\n const row = this.quintToPgRow(quint);\n return this.writeStatementsForRow(row);\n });\n\n console.log(`[PgQuintStore.multiPut] Executing ${statements.length} statements in transaction`);\n const start = Date.now();\n await this.executor!.executeInTransaction(statements);\n console.log(`[PgQuintStore.multiPut] Completed in ${Date.now() - start}ms`);\n }\n\n override async multiDel(quintList: Quint[]): Promise<void> {\n this.ensureOpen();\n\n if (quintList.length === 0) return;\n\n const statements = quintList.map(quint => {\n const row = this.quintToPgRow(quint);\n return {\n sql: `\n DELETE FROM quints\n WHERE graph = $1\n AND subject = $2\n AND predicate = $3\n AND object = $4\n `,\n params: [row.graph, row.subject, row.predicate, row.object],\n };\n });\n\n await this.executor!.executeInTransaction(statements);\n }\n\n override async getAttributes(\n subjects: string[],\n predicates: string[],\n graph?: Term,\n ): Promise<AttributeMap> {\n this.ensureOpen();\n\n if (subjects.length === 0 || predicates.length === 0) {\n return new Map();\n }\n\n const subjectPlaceholders = subjects.map(() => '?').join(', ');\n const predicatePlaceholders = predicates.map(() => '?').join(', ');\n\n let sql = `\n SELECT subject, predicate, object\n FROM quints\n WHERE subject IN (${subjectPlaceholders})\n AND predicate IN (${predicatePlaceholders})\n `;\n const params: any[] = [...subjects, ...predicates];\n\n if (graph && graph.termType !== 'DefaultGraph') {\n const graphValue = termToId(graph);\n sql += ` AND graph = ?`;\n params.push(graphValue);\n }\n\n const rows = await this.executor!.query<{ subject: string; predicate: string; object: string }>(sql, params);\n const result: AttributeMap = new Map();\n\n for (const row of rows) {\n if (!result.has(row.subject)) {\n result.set(row.subject, new Map());\n }\n const predicateMap = result.get(row.subject)!;\n if (!predicateMap.has(row.predicate)) {\n predicateMap.set(row.predicate, []);\n }\n predicateMap.get(row.predicate)!.push(this.deserializeObject(row.object));\n }\n\n return result;\n }\n\n protected override buildWhereClause(pattern: QuintPattern): { whereClause: string; params: any[] } {\n const conditions: string[] = [];\n const params: any[] = [];\n const predicate = this.extractExactPredicate(pattern.predicate);\n\n this.addPgCondition(conditions, params, 'graph', pattern.graph);\n this.addPgCondition(conditions, params, 'subject', pattern.subject);\n this.addPgCondition(conditions, params, 'predicate', pattern.predicate);\n if (pattern.object) {\n this.addObjectConditions(conditions, params, undefined, pattern.object, predicate);\n }\n\n const whereClause = conditions.length > 0 ? ` WHERE ${conditions.join(' AND ')}` : '';\n return { whereClause, params };\n }\n\n private addPgCondition(\n conditions: string[],\n params: any[],\n column: 'graph' | 'subject' | 'predicate',\n match: TermMatch | undefined,\n ): void {\n if (!match) return;\n\n if (typeof match === 'object' && 'termType' in match) {\n const value = termToId(match as Term);\n conditions.push(`${column} = ?`);\n params.push(value);\n return;\n }\n\n const ops = match as any;\n if (ops.$eq !== undefined) {\n const value = this.serializeOpValue(ops.$eq, false, '$eq');\n conditions.push(`${column} = ?`);\n params.push(String(value));\n return;\n }\n\n super.addConditions(conditions, params, column, match, false);\n }\n\n protected override addAliasedConditions(\n conditions: string[],\n params: any[],\n alias: string,\n pattern: any,\n ): void {\n this.addAliasedPgCondition(conditions, params, alias, 'graph', pattern.graph, false);\n this.addAliasedPgCondition(conditions, params, alias, 'subject', pattern.subject, false);\n this.addAliasedPgCondition(conditions, params, alias, 'predicate', pattern.predicate, false);\n this.addAliasedObjectConditions(conditions, params, alias, pattern);\n }\n\n protected override buildCompoundQuery(compound: CompoundPattern, options?: QueryOptions): { sql: string; params: any[] } {\n const { patterns, joinOn, select } = compound;\n const params: any[] = [];\n\n let selectClause = `q0.${joinOn} as join_value`;\n\n if (select) {\n for (const s of select) {\n selectClause += `, q${s.pattern}.${s.field} as ${s.alias}`;\n }\n } else {\n for (let i = 0; i < patterns.length; i++) {\n selectClause += `, q${i}.object as p${i}_object`;\n selectClause += `, q${i}.predicate as p${i}_predicate`;\n }\n }\n\n let fromClause = 'quints q0';\n for (let i = 1; i < patterns.length; i++) {\n fromClause += ` JOIN quints q${i} ON q0.${joinOn} = q${i}.${joinOn}`;\n fromClause += ` AND q0.graph = q${i}.graph`;\n }\n\n const whereParts: string[] = [];\n\n for (let i = 0; i < patterns.length; i++) {\n const pattern = patterns[i];\n const alias = `q${i}`;\n\n this.addAliasedConditions(whereParts, params, alias, pattern);\n }\n\n let sql = `SELECT ${selectClause} FROM ${fromClause}`;\n\n if (whereParts.length > 0) {\n sql += ` WHERE ${whereParts.join(' AND ')}`;\n }\n\n if (options?.limit) {\n sql += ` LIMIT ?`;\n params.push(options.limit);\n }\n if (options?.offset) {\n sql += ` OFFSET ?`;\n params.push(options.offset);\n }\n\n return { sql, params };\n }\n\n protected override buildSelectQuery(pattern: QuintPattern, options?: QueryOptions): { sql: string; params: any[] } {\n const { whereClause, params } = this.buildWhereClause(pattern);\n\n let sql = `SELECT * FROM quints${whereClause}`;\n\n if (options?.order && options.order.length > 0) {\n const orderCols = options.order.map(field => {\n if (field === 'object') {\n const objectType = this.resolveObjectDataTypeForPattern(pattern);\n if (objectType === 'longText') {\n throw new Error('ORDER BY object is not supported for longText predicates');\n }\n return 'object_key';\n }\n return field;\n }).join(', ');\n sql += ` ORDER BY ${orderCols}`;\n if (options.reverse) {\n sql += ' DESC';\n }\n }\n\n if (options?.limit) {\n sql += ` LIMIT ?`;\n params.push(options.limit);\n }\n\n if (options?.offset) {\n sql += ` OFFSET ?`;\n params.push(options.offset);\n }\n\n return { sql, params };\n }\n\n override async count(pattern: QuintPattern): Promise<number> {\n const count = await super.count(pattern);\n return Number(count);\n }\n\n override async stats(): Promise<import('./types').StoreStats> {\n const stats = await super.stats();\n return {\n totalCount: Number(stats.totalCount),\n vectorCount: Number(stats.vectorCount),\n graphCount: Number(stats.graphCount),\n };\n }\n\n private async ensureTypedObjectSchema(): Promise<void> {\n const statements = [\n 'ALTER TABLE quints ADD COLUMN IF NOT EXISTS object_kind TEXT',\n 'ALTER TABLE quints ADD COLUMN IF NOT EXISTS object_key TEXT',\n 'ALTER TABLE quints ADD COLUMN IF NOT EXISTS object_text TEXT',\n 'ALTER TABLE quints ADD COLUMN IF NOT EXISTS object_digest TEXT',\n ];\n\n for (const statement of statements) {\n await this.executor!.exec(statement);\n }\n\n // The old Postgres schema indexed complete RDF terms. Long literals can\n // exceed the btree tuple size and surface as 500s while creating containers.\n const obsoleteIndexes = [\n 'idx_spog',\n 'idx_ogsp',\n 'idx_gspo',\n 'idx_sopg',\n 'idx_pogs',\n 'idx_gpos',\n 'idx_pg_spog',\n 'idx_pg_ogsp',\n 'idx_pg_gspo',\n 'idx_pg_sopg',\n 'idx_pg_pogs',\n 'idx_pg_gpos',\n 'idx_pg_graph_prefix',\n 'idx_quints_predicate_object_text',\n 'idx_quints_quint_hash',\n 'idx_quints_graph_hash',\n 'idx_quints_subject_hash',\n 'idx_quints_predicate_hash',\n 'idx_quints_object_hash',\n 'idx_quints_gsp_hash',\n 'idx_quints_sp_hash',\n 'idx_quints_gp_hash',\n ];\n\n for (const indexName of obsoleteIndexes) {\n await this.executor!.exec(`DROP INDEX IF EXISTS ${indexName}`);\n }\n\n await this.executor!.exec('ALTER TABLE quints DROP CONSTRAINT IF EXISTS quints_pkey');\n\n const obsoleteColumns = [\n 'quint_hash',\n 'graph_hash',\n 'subject_hash',\n 'predicate_hash',\n 'object_hash',\n ];\n\n for (const columnName of obsoleteColumns) {\n await this.executor!.exec(`ALTER TABLE quints DROP COLUMN IF EXISTS ${columnName}`);\n }\n\n await this.backfillMissingObjectIndexFields();\n await this.executor!.exec(`\n UPDATE quints\n SET object_kind = 'text'\n WHERE object_kind = 'shortText'\n `);\n }\n\n private async backfillMissingObjectIndexFields(): Promise<void> {\n const rows = await this.executor!.query<{\n graph: string;\n subject: string;\n predicate: string;\n object: string;\n }>(`\n SELECT graph, subject, predicate, object\n FROM quints\n WHERE object_kind IS NULL\n OR (object_key IS NULL AND object_digest IS NULL)\n `);\n\n for (const row of rows) {\n const objectIndex = this.objectIndexForSerialized(row.predicate, row.object);\n await this.executor!.execute(`\n UPDATE quints\n SET object_kind = $1,\n object_key = $2,\n object_text = $3,\n object_digest = $4\n WHERE graph = $5\n AND subject = $6\n AND predicate = $7\n AND object = $8\n `, [\n objectIndex.objectKind,\n objectIndex.objectKey,\n objectIndex.objectText,\n this.objectDigestForIndex(row.object, objectIndex),\n row.graph,\n row.subject,\n row.predicate,\n row.object,\n ]);\n }\n }\n\n private quintToPgRow(quint: Quint): PgQuintRow {\n const row = this.quintToRow(quint);\n const objectIndex = this.objectIndexForTerm(row.predicate, quint.object as Term);\n return {\n ...row,\n objectKind: objectIndex.objectKind,\n objectKey: objectIndex.objectKey,\n objectText: objectIndex.objectText,\n objectDigest: this.objectDigestForIndex(row.object, objectIndex),\n };\n }\n\n private objectIndexForTerm(predicate: string, object: Term): ObjectIndexFields {\n return objectIndexFieldsFromTerm(object, {\n predicate,\n predicateObjectDataTypes: this.options.predicateObjectDataTypes,\n textMaxBytes: this.options.textMaxBytes,\n });\n }\n\n private objectIndexForSerialized(predicate: string, object: string): ObjectIndexFields {\n return objectIndexFieldsFromSerialized(object, {\n predicate,\n predicateObjectDataTypes: this.options.predicateObjectDataTypes,\n textMaxBytes: this.options.textMaxBytes,\n });\n }\n\n private objectDigestForIndex(serialized: string, fields: ObjectIndexFields): string | null {\n return fields.objectKey === null ? digestObject(serialized) : null;\n }\n\n private writeStatementsForRow(row: PgQuintRow): { sql: string; params?: any[] }[] {\n const params = [\n row.objectKind,\n row.objectKey,\n row.objectText,\n row.objectDigest,\n row.graph,\n row.subject,\n row.predicate,\n row.object,\n row.vector,\n ];\n\n if (row.objectKey !== null) {\n return [{\n sql: `\n INSERT INTO quints (\n object_kind, object_key, object_text, object_digest,\n graph, subject, predicate, object, vector\n )\n VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)\n ON CONFLICT (graph, subject, predicate, object_kind, object_key)\n WHERE object_key IS NOT NULL\n DO UPDATE SET\n vector = EXCLUDED.vector,\n object_text = EXCLUDED.object_text,\n object_digest = EXCLUDED.object_digest\n WHERE quints.object = EXCLUDED.object\n `,\n params,\n }];\n }\n\n return [{\n sql: `\n INSERT INTO quints (\n object_kind, object_key, object_text, object_digest,\n graph, subject, predicate, object, vector\n )\n VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)\n ON CONFLICT (graph, subject, predicate, object_kind, object_digest)\n WHERE object_digest IS NOT NULL\n DO UPDATE SET\n object = CASE WHEN quints.object = EXCLUDED.object THEN EXCLUDED.object ELSE NULL END,\n vector = EXCLUDED.vector,\n object_text = EXCLUDED.object_text\n `,\n params,\n }];\n }\n\n private addObjectConditions(\n conditions: string[],\n params: any[],\n alias: string | undefined,\n match: TermMatch,\n predicate: string | undefined,\n ): void {\n const column = (name: string) => alias ? `${alias}.${name}` : name;\n\n if (typeof match === 'object' && 'termType' in match) {\n this.addObjectExactCondition(conditions, params, column, match, predicate);\n return;\n }\n\n const ops = match as any;\n\n if (ops.$eq !== undefined) {\n this.addObjectExactValueCondition(conditions, params, column, ops.$eq, '$eq', predicate);\n }\n if (ops.$ne !== undefined) {\n this.addObjectExactValueCondition(conditions, params, column, ops.$ne, '$ne', predicate);\n }\n if (ops.$gt !== undefined) {\n this.addObjectComparableCondition(conditions, params, column, '>', ops.$gt, '$gt', predicate);\n }\n if (ops.$gte !== undefined) {\n this.addObjectComparableCondition(conditions, params, column, '>=', ops.$gte, '$gte', predicate);\n }\n if (ops.$lt !== undefined) {\n this.addObjectComparableCondition(conditions, params, column, '<', ops.$lt, '$lt', predicate);\n }\n if (ops.$lte !== undefined) {\n this.addObjectComparableCondition(conditions, params, column, '<=', ops.$lte, '$lte', predicate);\n }\n if (ops.$in !== undefined && ops.$in.length > 0) {\n const predicates: Array<{ serialized: string; fields: ObjectIndexFields }> = ops.$in.map((value: any) => this.objectPredicateForOperatorValue(value, '$in', predicate));\n const placeholders = predicates.map((item) => {\n if (item.fields.objectKey === null) {\n return `(${column('object_kind')} = ? AND ${column('object_digest')} = ? AND ${column('object')} = ?)`;\n }\n return `(${column('object_kind')} = ? AND ${column('object_key')} = ?)`;\n }).join(' OR ');\n conditions.push(`(${placeholders})`);\n for (const item of predicates) {\n if (item.fields.objectKey === null) {\n params.push(item.fields.objectKind, this.objectDigestForIndex(item.serialized, item.fields), item.serialized);\n } else {\n params.push(item.fields.objectKind, item.fields.objectKey);\n }\n }\n }\n if (ops.$notIn !== undefined && ops.$notIn.length > 0) {\n const values = ops.$notIn.map((value: any) => this.objectPredicateForOperatorValue(value, '$notIn', predicate).serialized);\n for (const value of values) {\n conditions.push(`${column('object')} != ?`);\n params.push(value);\n }\n }\n if (ops.$startsWith !== undefined) {\n const fields = this.objectFieldsForPrefix(ops.$startsWith, predicate);\n this.assertComparableObject(fields, '$startsWith');\n conditions.push(`${column('object_kind')} = ?`);\n params.push(fields.objectKind);\n conditions.push(`${column('object_key')} >= ? AND ${column('object_key')} < ?`);\n params.push(ops.$startsWith, ops.$startsWith + '\\uffff');\n }\n if (ops.$endsWith !== undefined) {\n this.addObjectTextCondition(conditions, params, column, 'LIKE', `%${ops.$endsWith}`, predicate);\n }\n if (ops.$contains !== undefined) {\n this.addObjectTextCondition(conditions, params, column, 'LIKE', `%${ops.$contains}%`, predicate);\n }\n if (ops.$regex !== undefined) {\n const pattern = ops.$regex.replace(/\\.\\*/g, '%').replace(/\\./g, '_');\n this.addObjectTextCondition(conditions, params, column, 'LIKE', pattern, predicate);\n }\n if (ops.$strStartsWith !== undefined) {\n this.addObjectLexicalStringCondition(conditions, params, column, 'startsWith', ops.$strStartsWith);\n }\n if (ops.$strEndsWith !== undefined) {\n this.addObjectLexicalStringCondition(conditions, params, column, 'endsWith', ops.$strEndsWith);\n }\n if (ops.$strContains !== undefined) {\n this.addObjectLexicalStringCondition(conditions, params, column, 'contains', ops.$strContains);\n }\n if (ops.$strRegex !== undefined) {\n this.addObjectLexicalStringCondition(conditions, params, column, 'regex', ops.$strRegex);\n }\n if (ops.$language !== undefined) {\n this.addObjectLanguageCondition(conditions, params, column, ops.$language);\n }\n if (ops.$isNull === true) {\n conditions.push(`${column('object')} IS NULL`);\n }\n if (ops.$isNull === false) {\n conditions.push(`${column('object')} IS NOT NULL`);\n }\n }\n\n private addObjectExactCondition(\n conditions: string[],\n params: any[],\n column: (name: string) => string,\n object: Term,\n predicate: string | undefined,\n ): void {\n const serialized = serializeObject(object);\n const fields = this.objectFieldsForTerm(object, predicate);\n this.addObjectExactSerializedCondition(conditions, params, column, serialized, fields);\n }\n\n private addObjectExactValueCondition(\n conditions: string[],\n params: any[],\n column: (name: string) => string,\n value: any,\n op: '$eq' | '$ne',\n predicate: string | undefined,\n ): void {\n const item = this.objectPredicateForOperatorValue(value, op, predicate);\n if (op === '$ne') {\n conditions.push(`${column('object')} != ?`);\n params.push(item.serialized);\n return;\n }\n this.addObjectExactSerializedCondition(conditions, params, column, item.serialized, item.fields);\n }\n\n private addObjectExactSerializedCondition(\n conditions: string[],\n params: any[],\n column: (name: string) => string,\n serialized: string,\n fields: ObjectIndexFields,\n ): void {\n if (fields.objectKey !== null) {\n conditions.push(`${column('object_kind')} = ?`);\n params.push(fields.objectKind);\n conditions.push(`${column('object_key')} = ?`);\n params.push(fields.objectKey);\n return;\n }\n\n conditions.push(`${column('object_kind')} = ?`);\n params.push(fields.objectKind);\n conditions.push(`${column('object_digest')} = ?`);\n params.push(this.objectDigestForIndex(serialized, fields));\n conditions.push(`${column('object')} = ?`);\n params.push(serialized);\n }\n\n private addObjectComparableCondition(\n conditions: string[],\n params: any[],\n column: (name: string) => string,\n sqlOperator: string,\n value: any,\n op: string,\n predicate: string | undefined,\n ): void {\n const item = this.objectPredicateForOperatorValue(value, op, predicate);\n this.assertComparableObject(item.fields, op);\n conditions.push(`${column('object_kind')} = ?`);\n params.push(item.fields.objectKind);\n conditions.push(`${column('object_key')} ${sqlOperator} ?`);\n params.push(item.serialized);\n }\n\n private addObjectTextCondition(\n conditions: string[],\n params: any[],\n column: (name: string) => string,\n sqlOperator: string,\n value: string,\n predicate: string | undefined,\n ): void {\n const declaredType = getPredicateObjectDataType(predicate, this.options.predicateObjectDataTypes);\n if (declaredType) {\n if (!['text', 'longText', 'literal'].includes(declaredType)) {\n throw new Error(`Object text search is not supported for ${declaredType}`);\n }\n conditions.push(`${column('object_kind')} = ?`);\n params.push(declaredType);\n }\n conditions.push(`${column('object_text')} ${sqlOperator} ?`);\n params.push(value);\n }\n\n private addObjectLexicalStringCondition(\n conditions: string[],\n params: any[],\n column: (name: string) => string,\n op: 'startsWith' | 'endsWith' | 'contains' | 'regex',\n value: string,\n ): void {\n const lexical = this.objectLexicalSql(column);\n\n if (op === 'startsWith') {\n conditions.push(`(${lexical} >= ? AND ${lexical} < ?)`);\n params.push(value, value + '\\uffff');\n return;\n }\n\n if (op === 'endsWith') {\n conditions.push(`RIGHT(${lexical}, LENGTH(?)) = ?`);\n params.push(value, value);\n return;\n }\n\n if (op === 'contains') {\n conditions.push(`POSITION(? IN ${lexical}) > 0`);\n params.push(value);\n return;\n }\n\n conditions.push(`${lexical} ~ ?`);\n params.push(value);\n }\n\n private objectLexicalSql(column: (name: string) => string): string {\n return `CASE\n WHEN ${column('object_text')} IS NOT NULL THEN ${column('object_text')}\n WHEN ${column('object_kind')} IN ('iri', 'blankNode') THEN ${column('object_key')}\n WHEN ${column('object_kind')} = 'numeric' THEN split_part(${column('object')}, '${PG_SEP}', 4)\n WHEN ${column('object_kind')} = 'dateTime' THEN split_part(${column('object')}, '${PG_SEP}', 3)\n ELSE NULL\n END`;\n }\n\n private addObjectLanguageCondition(\n conditions: string[],\n params: any[],\n column: (name: string) => string,\n lang: string,\n ): void {\n const languageLiteralKinds = `${column('object_kind')} IN ('text', 'longText', 'literal')`;\n\n if (lang === '*') {\n conditions.push(`(${languageLiteralKinds} AND ${column('object')} ~ ?)`);\n params.push('\"@[A-Za-z]+(-[A-Za-z0-9]+)*$');\n return;\n }\n\n const suffix = `\"@${lang.toLowerCase()}`;\n conditions.push(`(${languageLiteralKinds} AND (RIGHT(LOWER(${column('object')}), LENGTH(?)) = ? OR LOWER(${column('object')}) LIKE ?))`);\n params.push(suffix, suffix, `%\"@${lang.toLowerCase()}-%`);\n }\n\n private objectPredicateForOperatorValue(\n value: any,\n op: string,\n predicate: string | undefined,\n ): { serialized: string; fields: ObjectIndexFields } {\n const serialized = this.serializeOpValue(value, true, op);\n return {\n serialized,\n fields: this.objectFieldsForSerialized(serialized, predicate),\n };\n }\n\n private objectFieldsForTerm(object: Term, predicate: string | undefined): ObjectIndexFields {\n return objectIndexFieldsFromTerm(object, {\n predicate,\n predicateObjectDataTypes: this.options.predicateObjectDataTypes,\n textMaxBytes: this.options.textMaxBytes,\n });\n }\n\n private objectFieldsForSerialized(serialized: string, predicate: string | undefined): ObjectIndexFields {\n return objectIndexFieldsFromSerialized(serialized, {\n predicate,\n predicateObjectDataTypes: this.options.predicateObjectDataTypes,\n textMaxBytes: this.options.textMaxBytes,\n });\n }\n\n private objectFieldsForPrefix(prefix: string, predicate: string | undefined): ObjectIndexFields {\n const declaredType = getPredicateObjectDataType(predicate, this.options.predicateObjectDataTypes);\n if (declaredType) {\n if (declaredType === 'longText') {\n return { objectKind: 'longText', objectKey: null, objectText: prefix };\n }\n return { objectKind: declaredType, objectKey: prefix, objectText: null };\n }\n\n if (isSerializedNumericLiteral(prefix)) {\n return { objectKind: 'numeric', objectKey: prefix, objectText: null };\n }\n if (isSerializedDateTimeLiteral(prefix)) {\n return { objectKind: 'dateTime', objectKey: prefix, objectText: null };\n }\n if (prefix.startsWith('\"')) {\n return { objectKind: 'text', objectKey: prefix, objectText: null };\n }\n if (prefix.startsWith('_:')) {\n return { objectKind: 'blankNode', objectKey: prefix, objectText: null };\n }\n return { objectKind: 'iri', objectKey: prefix, objectText: null };\n }\n\n private assertComparableObject(fields: ObjectIndexFields, op: string): void {\n if (fields.objectKey !== null && fields.objectKind !== 'longText') {\n return;\n }\n throw new Error(`Object ${op} is not supported for ${fields.objectKind}; declare/use a comparable data type instead of longText`);\n }\n\n private addAliasedObjectConditions(\n conditions: string[],\n params: any[],\n alias: string,\n pattern: QuintPattern,\n ): void {\n if (!pattern.object) return;\n this.addObjectConditions(\n conditions,\n params,\n alias,\n pattern.object,\n this.extractExactPredicate(pattern.predicate),\n );\n }\n\n private extractExactPredicate(match: TermMatch | undefined): string | undefined {\n if (!match) return undefined;\n if (typeof match === 'object' && 'termType' in match) {\n return termToId(match as Term);\n }\n const ops = match as any;\n if (ops.$eq !== undefined) {\n return String(this.serializeOpValue(ops.$eq, false, '$eq'));\n }\n return undefined;\n }\n\n private resolveObjectDataTypeForPattern(pattern: QuintPattern): PredicateObjectDataType | undefined {\n const predicate = this.extractExactPredicate(pattern.predicate);\n if (predicate) {\n return getPredicateObjectDataType(predicate, this.options.predicateObjectDataTypes);\n }\n if (pattern.object && typeof pattern.object === 'object' && 'termType' in pattern.object) {\n return this.objectFieldsForTerm(pattern.object as Term, predicate).objectKind;\n }\n return undefined;\n }\n\n private addAliasedPgCondition(\n conditions: string[],\n params: any[],\n alias: string,\n column: string,\n match: any,\n isObject: boolean,\n ): void {\n if (!match) return;\n\n if (isObject) {\n this.addObjectConditions(conditions, params, alias, match, undefined);\n return;\n }\n\n if (typeof match === 'object' && 'termType' in match) {\n const value = termToId(match);\n conditions.push(`${alias}.${column} = ?`);\n params.push(value);\n return;\n }\n\n if (match.$eq !== undefined) {\n const value = this.serializeOpValue(match.$eq, false, '$eq');\n conditions.push(`${alias}.${column} = ?`);\n params.push(value);\n return;\n }\n\n this.addFallbackAliasedCondition(conditions, params, alias, column, match, isObject);\n }\n\n private addFallbackAliasedCondition(\n conditions: string[],\n params: any[],\n alias: string,\n column: string,\n match: any,\n isObject: boolean,\n ): void {\n if (isObject) {\n this.addObjectConditions(conditions, params, alias, match, undefined);\n return;\n }\n if (match.$gt !== undefined) {\n conditions.push(`${alias}.${column} > ?`);\n params.push(this.serializeOpValue(match.$gt, false, '$gt'));\n }\n if (match.$gte !== undefined) {\n conditions.push(`${alias}.${column} >= ?`);\n params.push(this.serializeOpValue(match.$gte, false, '$gte'));\n }\n if (match.$lt !== undefined) {\n conditions.push(`${alias}.${column} < ?`);\n params.push(this.serializeOpValue(match.$lt, false, '$lt'));\n }\n if (match.$lte !== undefined) {\n conditions.push(`${alias}.${column} <= ?`);\n params.push(this.serializeOpValue(match.$lte, false, '$lte'));\n }\n if (match.$in !== undefined && match.$in.length > 0) {\n const placeholders = match.$in.map(() => '?').join(', ');\n conditions.push(`${alias}.${column} IN (${placeholders})`);\n params.push(...match.$in.map((value: any) => this.serializeOpValue(value, false, '$in')));\n }\n }\n}\n"]}
|
|
@@ -222,6 +222,10 @@
|
|
|
222
222
|
"@id": "undefineds:dist/storage/quint/PgQuintStore.jsonld#PgQuintStore__member_pgOptions",
|
|
223
223
|
"memberFieldName": "pgOptions"
|
|
224
224
|
},
|
|
225
|
+
{
|
|
226
|
+
"@id": "undefineds:dist/storage/quint/PgQuintStore.jsonld#PgQuintStore__member_sharedPoolConfig",
|
|
227
|
+
"memberFieldName": "sharedPoolConfig"
|
|
228
|
+
},
|
|
225
229
|
{
|
|
226
230
|
"@id": "undefineds:dist/storage/quint/PgQuintStore.jsonld#PgQuintStore__member_constructor",
|
|
227
231
|
"memberFieldName": "constructor"
|
|
@@ -274,6 +278,14 @@
|
|
|
274
278
|
"@id": "undefineds:dist/storage/quint/PgQuintStore.jsonld#PgQuintStore__member_buildSelectQuery",
|
|
275
279
|
"memberFieldName": "buildSelectQuery"
|
|
276
280
|
},
|
|
281
|
+
{
|
|
282
|
+
"@id": "undefineds:dist/storage/quint/PgQuintStore.jsonld#PgQuintStore__member_count",
|
|
283
|
+
"memberFieldName": "count"
|
|
284
|
+
},
|
|
285
|
+
{
|
|
286
|
+
"@id": "undefineds:dist/storage/quint/PgQuintStore.jsonld#PgQuintStore__member_stats",
|
|
287
|
+
"memberFieldName": "stats"
|
|
288
|
+
},
|
|
277
289
|
{
|
|
278
290
|
"@id": "undefineds:dist/storage/quint/PgQuintStore.jsonld#PgQuintStore__member_ensureTypedObjectSchema",
|
|
279
291
|
"memberFieldName": "ensureTypedObjectSchema"
|
|
@@ -326,6 +338,18 @@
|
|
|
326
338
|
"@id": "undefineds:dist/storage/quint/PgQuintStore.jsonld#PgQuintStore__member_addObjectTextCondition",
|
|
327
339
|
"memberFieldName": "addObjectTextCondition"
|
|
328
340
|
},
|
|
341
|
+
{
|
|
342
|
+
"@id": "undefineds:dist/storage/quint/PgQuintStore.jsonld#PgQuintStore__member_addObjectLexicalStringCondition",
|
|
343
|
+
"memberFieldName": "addObjectLexicalStringCondition"
|
|
344
|
+
},
|
|
345
|
+
{
|
|
346
|
+
"@id": "undefineds:dist/storage/quint/PgQuintStore.jsonld#PgQuintStore__member_objectLexicalSql",
|
|
347
|
+
"memberFieldName": "objectLexicalSql"
|
|
348
|
+
},
|
|
349
|
+
{
|
|
350
|
+
"@id": "undefineds:dist/storage/quint/PgQuintStore.jsonld#PgQuintStore__member_addObjectLanguageCondition",
|
|
351
|
+
"memberFieldName": "addObjectLanguageCondition"
|
|
352
|
+
},
|
|
329
353
|
{
|
|
330
354
|
"@id": "undefineds:dist/storage/quint/PgQuintStore.jsonld#PgQuintStore__member_objectPredicateForOperatorValue",
|
|
331
355
|
"memberFieldName": "objectPredicateForOperatorValue"
|
|
@@ -380,6 +380,29 @@ class SqliteQuintStore {
|
|
|
380
380
|
conditions.push(`${fullColumn} LIKE ?`);
|
|
381
381
|
params.push(`%${ops.$contains}%`);
|
|
382
382
|
}
|
|
383
|
+
if (isObject && ops.$strStartsWith !== undefined) {
|
|
384
|
+
const lexical = this.objectLexicalSql(fullColumn);
|
|
385
|
+
conditions.push(`${lexical} >= ?`);
|
|
386
|
+
conditions.push(`${lexical} < ?`);
|
|
387
|
+
params.push(ops.$strStartsWith);
|
|
388
|
+
params.push(ops.$strStartsWith + '\uffff');
|
|
389
|
+
}
|
|
390
|
+
if (isObject && ops.$strEndsWith !== undefined) {
|
|
391
|
+
conditions.push(`${this.objectLexicalSql(fullColumn)} LIKE ?`);
|
|
392
|
+
params.push(`%${ops.$strEndsWith}`);
|
|
393
|
+
}
|
|
394
|
+
if (isObject && ops.$strContains !== undefined) {
|
|
395
|
+
conditions.push(`${this.objectLexicalSql(fullColumn)} LIKE ?`);
|
|
396
|
+
params.push(`%${ops.$strContains}%`);
|
|
397
|
+
}
|
|
398
|
+
if (isObject && ops.$strRegex !== undefined) {
|
|
399
|
+
conditions.push(`${this.objectLexicalSql(fullColumn)} GLOB ?`);
|
|
400
|
+
params.push(ops.$strRegex.replace(/\.\*/g, '*').replace(/\./g, '?'));
|
|
401
|
+
}
|
|
402
|
+
if (isObject && ops.$language !== undefined) {
|
|
403
|
+
conditions.push(`lower(${fullColumn}) LIKE ?`);
|
|
404
|
+
params.push(ops.$language === '*' ? '%"@%' : `%"@${ops.$language.toLowerCase()}`);
|
|
405
|
+
}
|
|
383
406
|
if (ops.$isNull === true) {
|
|
384
407
|
conditions.push(`${fullColumn} IS NULL`);
|
|
385
408
|
}
|
|
@@ -588,6 +611,25 @@ class SqliteQuintStore {
|
|
|
588
611
|
// SQLite uses GLOB as regex approximation
|
|
589
612
|
conditions.push((0, drizzle_orm_1.sql) `${column} GLOB ${ops.$regex.replace(/\.\*/g, '*').replace(/\./g, '?')}`);
|
|
590
613
|
}
|
|
614
|
+
if (isObject && ops.$strStartsWith !== undefined) {
|
|
615
|
+
const lexical = drizzle_orm_1.sql.raw(this.objectLexicalSql('object'));
|
|
616
|
+
conditions.push((0, drizzle_orm_1.sql) `${lexical} >= ${ops.$strStartsWith}`);
|
|
617
|
+
conditions.push((0, drizzle_orm_1.sql) `${lexical} < ${ops.$strStartsWith + '\uffff'}`);
|
|
618
|
+
}
|
|
619
|
+
if (isObject && ops.$strEndsWith !== undefined) {
|
|
620
|
+
conditions.push((0, drizzle_orm_1.sql) `${drizzle_orm_1.sql.raw(this.objectLexicalSql('object'))} LIKE ${`%${ops.$strEndsWith}`}`);
|
|
621
|
+
}
|
|
622
|
+
if (isObject && ops.$strContains !== undefined) {
|
|
623
|
+
conditions.push((0, drizzle_orm_1.sql) `${drizzle_orm_1.sql.raw(this.objectLexicalSql('object'))} LIKE ${`%${ops.$strContains}%`}`);
|
|
624
|
+
}
|
|
625
|
+
if (isObject && ops.$strRegex !== undefined) {
|
|
626
|
+
conditions.push((0, drizzle_orm_1.sql) `${drizzle_orm_1.sql.raw(this.objectLexicalSql('object'))} GLOB ${ops.$strRegex.replace(/\.\*/g, '*').replace(/\./g, '?')}`);
|
|
627
|
+
}
|
|
628
|
+
if (isObject && ops.$language !== undefined) {
|
|
629
|
+
conditions.push(ops.$language === '*'
|
|
630
|
+
? (0, drizzle_orm_1.sql) `lower(${column}) LIKE ${`%"@%`}`
|
|
631
|
+
: (0, drizzle_orm_1.sql) `lower(${column}) LIKE ${`%"@${ops.$language.toLowerCase()}`}`);
|
|
632
|
+
}
|
|
591
633
|
if (ops.$isNull === true) {
|
|
592
634
|
conditions.push((0, drizzle_orm_1.isNull)(column));
|
|
593
635
|
}
|
|
@@ -602,6 +644,16 @@ class SqliteQuintStore {
|
|
|
602
644
|
addTermConditions(schema_1.quints.object, pattern.object, true);
|
|
603
645
|
return conditions;
|
|
604
646
|
}
|
|
647
|
+
objectLexicalSql(column) {
|
|
648
|
+
return `CASE
|
|
649
|
+
WHEN ${column} LIKE '"%"@%' THEN substr(${column}, 2, instr(substr(${column}, 2), '"') - 1)
|
|
650
|
+
WHEN ${column} LIKE '"%"^^%' THEN substr(${column}, 2, instr(substr(${column}, 2), '"') - 1)
|
|
651
|
+
WHEN ${column} LIKE '"%"' THEN substr(${column}, 2, length(${column}) - 2)
|
|
652
|
+
WHEN ${column} LIKE 'N${serialization_1.SEP}%' THEN substr(${column}, length('N${serialization_1.SEP}') + instr(substr(${column}, length('N${serialization_1.SEP}') + 1), '${serialization_1.SEP}') + instr(substr(${column}, length('N${serialization_1.SEP}') + instr(substr(${column}, length('N${serialization_1.SEP}') + 1), '${serialization_1.SEP}') + 1), '${serialization_1.SEP}') + 1)
|
|
653
|
+
WHEN ${column} LIKE 'D${serialization_1.SEP}%' THEN substr(${column}, length('D${serialization_1.SEP}') + instr(substr(${column}, length('D${serialization_1.SEP}') + 1), '${serialization_1.SEP}') + 1)
|
|
654
|
+
ELSE ${column}
|
|
655
|
+
END`;
|
|
656
|
+
}
|
|
605
657
|
quintToRow(quint) {
|
|
606
658
|
return {
|
|
607
659
|
graph: (0, serialization_1.termToId)(quint.graph),
|