@undefineds.co/xpod 0.3.6 → 0.3.14
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/config/cli.json +1 -1
- package/config/cloud.json +54 -22
- package/config/local.json +56 -12
- package/config/resolver.json +10 -2
- package/config/xpod.base.json +50 -0
- package/config/xpod.json +8 -8
- package/dist/agents/config/resolve.js +10 -10
- package/dist/agents/config/resolve.js.map +1 -1
- package/dist/api/chatkit/index.d.ts +1 -1
- package/dist/api/chatkit/index.js.map +1 -1
- package/dist/api/chatkit/pod-store.d.ts +14 -11
- package/dist/api/chatkit/pod-store.js +114 -78
- package/dist/api/chatkit/pod-store.js.map +1 -1
- package/dist/api/chatkit/runtime/AcpAgentRuntime.js +1 -1
- package/dist/api/chatkit/runtime/AcpAgentRuntime.js.map +1 -1
- package/dist/api/chatkit/service.js +1 -1
- package/dist/api/chatkit/service.js.map +1 -1
- package/dist/api/chatkit/types.d.ts +11 -11
- package/dist/api/chatkit/types.js +3 -3
- package/dist/api/chatkit/types.js.map +1 -1
- package/dist/api/container/cloud.js +0 -8
- package/dist/api/container/cloud.js.map +1 -1
- package/dist/api/container/index.js +2 -1
- package/dist/api/container/index.js.map +1 -1
- package/dist/api/container/local.js +0 -7
- package/dist/api/container/local.js.map +1 -1
- package/dist/api/container/routes.js +3 -17
- package/dist/api/container/routes.js.map +1 -1
- package/dist/api/container/types.d.ts +0 -2
- package/dist/api/container/types.js.map +1 -1
- package/dist/api/handlers/PodManagementHandler.d.ts +3 -0
- package/dist/api/handlers/PodManagementHandler.js +71 -1
- package/dist/api/handlers/PodManagementHandler.js.map +1 -1
- package/dist/api/handlers/RunHandler.js +5 -5
- package/dist/api/handlers/RunHandler.js.map +1 -1
- package/dist/api/runs/AgentRuntimeTypes.d.ts +7 -8
- package/dist/api/runs/AgentRuntimeTypes.js.map +1 -1
- package/dist/api/runs/InngestRunExecutionBackend.d.ts +2 -2
- package/dist/api/runs/ManagedRunWorker.d.ts +1 -1
- package/dist/api/runs/ManagedRunWorker.js +6 -6
- package/dist/api/runs/ManagedRunWorker.js.map +1 -1
- package/dist/api/runs/PiAgentRuntimeDriver.d.ts +16 -1
- package/dist/api/runs/PiAgentRuntimeDriver.js +182 -23
- package/dist/api/runs/PiAgentRuntimeDriver.js.map +1 -1
- package/dist/api/runs/RunStateCenter.d.ts +3 -3
- package/dist/api/runs/RunStateCenter.js +13 -13
- package/dist/api/runs/RunStateCenter.js.map +1 -1
- package/dist/api/runs/store.d.ts +4 -4
- package/dist/api/runs/store.js +2 -2
- package/dist/api/runs/store.js.map +1 -1
- package/dist/api/service/VectorStoreService.d.ts +1 -1
- package/dist/api/service/VectorStoreService.js +16 -16
- package/dist/api/service/VectorStoreService.js.map +1 -1
- package/dist/api/tasks/InngestTaskScheduler.d.ts +4 -4
- package/dist/api/tasks/TaskMaterializer.d.ts +3 -3
- package/dist/api/tasks/TaskMaterializer.js +11 -11
- package/dist/api/tasks/TaskMaterializer.js.map +1 -1
- package/dist/api/tasks/TaskService.d.ts +3 -3
- package/dist/api/tasks/TaskService.js +11 -7
- package/dist/api/tasks/TaskService.js.map +1 -1
- package/dist/api/tasks/store.d.ts +10 -4
- package/dist/api/tasks/store.js +14 -4
- package/dist/api/tasks/store.js.map +1 -1
- package/dist/api/workspace/types.d.ts +3 -3
- package/dist/api/workspace/types.js +6 -6
- package/dist/api/workspace/types.js.map +1 -1
- package/dist/cli/commands/config.js +2 -2
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/start.js +9 -3
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/components/components.jsonld +8 -2
- package/dist/components/context.jsonld +302 -51
- package/dist/http/search/SearchHttpHandler.js +8 -8
- package/dist/http/search/SearchHttpHandler.js.map +1 -1
- package/dist/identity/drizzle/PodLookupRepository.d.ts +11 -1
- package/dist/identity/drizzle/PodLookupRepository.js +95 -4
- package/dist/identity/drizzle/PodLookupRepository.js.map +1 -1
- package/dist/identity/drizzle/db.js +4 -43
- package/dist/identity/drizzle/db.js.map +1 -1
- package/dist/identity/drizzle/schema.pg.d.ts +0 -5
- package/dist/identity/drizzle/schema.pg.js +2 -16
- package/dist/identity/drizzle/schema.pg.js.map +1 -1
- package/dist/identity/drizzle/schema.sqlite.d.ts +19 -176
- package/dist/identity/drizzle/schema.sqlite.js +2 -16
- package/dist/identity/drizzle/schema.sqlite.js.map +1 -1
- package/dist/identity/oidc/AutoDetectIdentityProviderHandler.d.ts +4 -4
- package/dist/identity/oidc/AutoDetectIdentityProviderHandler.js +7 -7
- package/dist/identity/oidc/AutoDetectIdentityProviderHandler.js.map +1 -1
- package/dist/identity/oidc/AutoDetectIdentityProviderHandler.jsonld +6 -6
- package/dist/identity/oidc/AutoDetectOidcHandler.d.ts +4 -4
- package/dist/identity/oidc/AutoDetectOidcHandler.js +6 -6
- package/dist/identity/oidc/AutoDetectOidcHandler.js.map +1 -1
- package/dist/identity/oidc/AutoDetectOidcHandler.jsonld +6 -6
- package/dist/identity/oidc/ScopedPickWebIdHandler.d.ts +37 -0
- package/dist/identity/oidc/ScopedPickWebIdHandler.js +211 -0
- package/dist/identity/oidc/ScopedPickWebIdHandler.js.map +1 -0
- package/dist/identity/oidc/ScopedPickWebIdHandler.jsonld +158 -0
- package/dist/index.d.ts +12 -2
- package/dist/index.js +16 -4
- package/dist/index.js.map +1 -1
- package/dist/main.js +8 -2
- package/dist/main.js.map +1 -1
- package/dist/provision/ProvisionPodCreator.d.ts +3 -4
- package/dist/provision/ProvisionPodCreator.js +8 -13
- package/dist/provision/ProvisionPodCreator.js.map +1 -1
- package/dist/provision/ProvisionPodCreator.jsonld +7 -7
- package/dist/runtime/Proxy.d.ts +0 -1
- package/dist/runtime/Proxy.js +0 -9
- package/dist/runtime/Proxy.js.map +1 -1
- package/dist/runtime/bootstrap.d.ts +1 -0
- package/dist/runtime/bootstrap.js +5 -2
- package/dist/runtime/bootstrap.js.map +1 -1
- package/dist/runtime/css-process.d.ts +12 -4
- package/dist/runtime/css-process.js +61 -14
- package/dist/runtime/css-process.js.map +1 -1
- package/dist/runtime/oidc-issuer.d.ts +3 -2
- package/dist/runtime/oidc-issuer.js +3 -2
- package/dist/runtime/oidc-issuer.js.map +1 -1
- package/dist/runtime/runtime-types.d.ts +1 -0
- package/dist/runtime/runtime-types.js.map +1 -1
- package/dist/solidfs/LocalFirstRdfRepresentationResolver.d.ts +21 -0
- package/dist/solidfs/LocalFirstRdfRepresentationResolver.js +38 -0
- package/dist/solidfs/LocalFirstRdfRepresentationResolver.js.map +1 -0
- package/dist/solidfs/LocalSolidFS.d.ts +18 -0
- package/dist/solidfs/LocalSolidFS.js +539 -0
- package/dist/solidfs/LocalSolidFS.js.map +1 -0
- package/dist/solidfs/PodSolidFsHttpClient.d.ts +16 -0
- package/dist/solidfs/PodSolidFsHttpClient.js +93 -0
- package/dist/solidfs/PodSolidFsHttpClient.js.map +1 -0
- package/dist/solidfs/PodSolidFsHydrator.d.ts +27 -0
- package/dist/solidfs/PodSolidFsHydrator.js +127 -0
- package/dist/solidfs/PodSolidFsHydrator.js.map +1 -0
- package/dist/solidfs/PodSolidFsSyncer.d.ts +21 -0
- package/dist/solidfs/PodSolidFsSyncer.js +78 -0
- package/dist/solidfs/PodSolidFsSyncer.js.map +1 -0
- package/dist/solidfs/RdfIndexSolidFsSyncer.d.ts +22 -0
- package/dist/solidfs/RdfIndexSolidFsSyncer.js +131 -0
- package/dist/solidfs/RdfIndexSolidFsSyncer.js.map +1 -0
- package/dist/solidfs/index.d.ts +7 -0
- package/dist/solidfs/index.js +24 -0
- package/dist/solidfs/index.js.map +1 -0
- package/dist/solidfs/types.d.ts +131 -0
- package/dist/solidfs/types.js +19 -0
- package/dist/solidfs/types.js.map +1 -0
- package/dist/storage/RepresentationPartialConvertingStore.js +6 -13
- package/dist/storage/RepresentationPartialConvertingStore.js.map +1 -1
- package/dist/storage/SparqlUpdateResourceStore.d.ts +4 -0
- package/dist/storage/SparqlUpdateResourceStore.js +13 -0
- package/dist/storage/SparqlUpdateResourceStore.js.map +1 -1
- package/dist/storage/SparqlUpdateResourceStore.jsonld +26 -0
- package/dist/storage/accessors/MixDataAccessor.d.ts +85 -4
- package/dist/storage/accessors/MixDataAccessor.js +511 -16
- package/dist/storage/accessors/MixDataAccessor.js.map +1 -1
- package/dist/storage/accessors/MixDataAccessor.jsonld +176 -1
- package/dist/storage/accessors/QuintStoreSparqlDataAccessor.d.ts +7 -0
- package/dist/storage/accessors/QuintStoreSparqlDataAccessor.js +72 -4
- package/dist/storage/accessors/QuintStoreSparqlDataAccessor.js.map +1 -1
- package/dist/storage/accessors/QuintStoreSparqlDataAccessor.jsonld +24 -0
- package/dist/storage/quint/BaseQuintStore.d.ts +3 -0
- package/dist/storage/quint/BaseQuintStore.js +51 -27
- package/dist/storage/quint/BaseQuintStore.js.map +1 -1
- package/dist/storage/quint/PgQuintStore.d.ts +1 -0
- package/dist/storage/quint/PgQuintStore.js +50 -32
- package/dist/storage/quint/PgQuintStore.js.map +1 -1
- package/dist/storage/quint/PgQuintStore.jsonld +4 -3
- package/dist/storage/quint/SqliteQuintStore.d.ts +5 -0
- package/dist/storage/quint/SqliteQuintStore.js +100 -0
- package/dist/storage/quint/SqliteQuintStore.js.map +1 -1
- package/dist/storage/quint/SqliteQuintStore.jsonld +20 -0
- package/dist/storage/quint/types.d.ts +16 -0
- package/dist/storage/quint/types.js.map +1 -1
- package/dist/storage/rdf/Rdf3xTripleIndex.d.ts +55 -0
- package/dist/storage/rdf/Rdf3xTripleIndex.js +1235 -0
- package/dist/storage/rdf/Rdf3xTripleIndex.js.map +1 -0
- package/dist/storage/rdf/RdfContentTypes.d.ts +9 -0
- package/dist/storage/rdf/RdfContentTypes.js +79 -0
- package/dist/storage/rdf/RdfContentTypes.js.map +1 -0
- package/dist/storage/rdf/RdfLocalQueryEngine.d.ts +76 -0
- package/dist/storage/rdf/RdfLocalQueryEngine.js +2636 -0
- package/dist/storage/rdf/RdfLocalQueryEngine.js.map +1 -0
- package/dist/storage/rdf/RdfQuadIndex.d.ts +98 -0
- package/dist/storage/rdf/RdfQuadIndex.js +1840 -0
- package/dist/storage/rdf/RdfQuadIndex.js.map +1 -0
- package/dist/storage/rdf/RdfQuadIndex.jsonld +416 -0
- package/dist/storage/rdf/RdfShadowComparator.d.ts +12 -0
- package/dist/storage/rdf/RdfShadowComparator.js +47 -0
- package/dist/storage/rdf/RdfShadowComparator.js.map +1 -0
- package/dist/storage/rdf/RdfSparqlAdapter.d.ts +147 -0
- package/dist/storage/rdf/RdfSparqlAdapter.js +2420 -0
- package/dist/storage/rdf/RdfSparqlAdapter.js.map +1 -0
- package/dist/storage/rdf/RdfSparqlAdapter.jsonld +414 -0
- package/dist/storage/rdf/RdfTermDictionary.d.ts +27 -0
- package/dist/storage/rdf/RdfTermDictionary.js +352 -0
- package/dist/storage/rdf/RdfTermDictionary.js.map +1 -0
- package/dist/storage/rdf/RdfTermDictionary.jsonld +114 -0
- package/dist/storage/rdf/RdfTermSemantics.d.ts +6 -0
- package/dist/storage/rdf/RdfTermSemantics.js +40 -0
- package/dist/storage/rdf/RdfTermSemantics.js.map +1 -0
- package/dist/storage/rdf/RdfTextIndex.d.ts +23 -0
- package/dist/storage/rdf/RdfTextIndex.js +569 -0
- package/dist/storage/rdf/RdfTextIndex.js.map +1 -0
- package/dist/storage/rdf/RdfVectorIndex.d.ts +22 -0
- package/dist/storage/rdf/RdfVectorIndex.js +631 -0
- package/dist/storage/rdf/RdfVectorIndex.js.map +1 -0
- package/dist/storage/rdf/RdfXmlSerializer.d.ts +2 -0
- package/dist/storage/rdf/RdfXmlSerializer.js +123 -0
- package/dist/storage/rdf/RdfXmlSerializer.js.map +1 -0
- package/dist/storage/rdf/ShadowRdfQuintStore.d.ts +58 -0
- package/dist/storage/rdf/ShadowRdfQuintStore.js +202 -0
- package/dist/storage/rdf/ShadowRdfQuintStore.js.map +1 -0
- package/dist/storage/rdf/ShadowRdfQuintStore.jsonld +308 -0
- package/dist/storage/rdf/SolidRdfEngine.d.ts +51 -0
- package/dist/storage/rdf/SolidRdfEngine.js +264 -0
- package/dist/storage/rdf/SolidRdfEngine.js.map +1 -0
- package/dist/storage/rdf/SolidRdfEngine.jsonld +338 -0
- package/dist/storage/rdf/SolidRdfSparqlEngine.d.ts +92 -0
- package/dist/storage/rdf/SolidRdfSparqlEngine.js +477 -0
- package/dist/storage/rdf/SolidRdfSparqlEngine.js.map +1 -0
- package/dist/storage/rdf/SolidRdfSparqlEngine.jsonld +257 -0
- package/dist/storage/rdf/index.d.ts +15 -0
- package/dist/storage/rdf/index.js +61 -0
- package/dist/storage/rdf/index.js.map +1 -0
- package/dist/storage/rdf/models-benchmark.d.ts +260 -0
- package/dist/storage/rdf/models-benchmark.js +1405 -0
- package/dist/storage/rdf/models-benchmark.js.map +1 -0
- package/dist/storage/rdf/types.d.ts +726 -0
- package/dist/storage/rdf/types.js +3 -0
- package/dist/storage/rdf/types.js.map +1 -0
- package/dist/storage/rdf/types.jsonld +316 -0
- package/dist/storage/vector/VectorIndexingListener.d.ts +5 -5
- package/dist/storage/vector/VectorIndexingListener.js +19 -19
- package/dist/storage/vector/VectorIndexingListener.js.map +1 -1
- package/package.json +3 -2
- package/templates/pod/acp/.acr.hbs +39 -0
- package/templates/pod/acp/README.acr +18 -0
- package/templates/pod/acp/profile/card.acr +22 -0
- package/templates/pod/base/README$.md.hbs +27 -0
- package/templates/pod/base/profile/card$.ttl.hbs +13 -0
- package/templates/pod/wac/.acl.hbs +26 -0
- package/templates/pod/wac/README.acl.hbs +14 -0
- package/templates/pod/wac/profile/card.acl.hbs +19 -0
- package/dist/api/handlers/WebIdProfileHandler.d.ts +0 -16
- package/dist/api/handlers/WebIdProfileHandler.js +0 -423
- package/dist/api/handlers/WebIdProfileHandler.js.map +0 -1
- package/dist/identity/drizzle/WebIdProfileRepository.d.ts +0 -63
- package/dist/identity/drizzle/WebIdProfileRepository.js +0 -168
- package/dist/identity/drizzle/WebIdProfileRepository.js.map +0 -1
- package/dist/identity/drizzle/WebIdProfileRepository.jsonld +0 -112
- package/dist/storage/quint/BaseQuintStore.jsonld +0 -257
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RdfLocalQueryEngine.js","sourceRoot":"","sources":["../../../src/storage/rdf/RdfLocalQueryEngine.ts"],"names":[],"mappings":"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","sourcesContent":["import { DataFactory, termToId } from 'n3';\nimport type { Term } from '@rdfjs/types';\nimport type { QueryOptions, QuintPattern, TermMatch } from '../quint/types';\nimport { isTerm } from '../quint/types';\nimport { RdfQuadIndex } from './RdfQuadIndex';\nimport type { RdfTextIndex } from './RdfTextIndex';\nimport type { RdfVectorIndex } from './RdfVectorIndex';\nimport { isFiniteNumericLexical, isRdfNumericTerm, rdfNumericValue } from './RdfTermSemantics';\nimport type {\n RdfBindExpression,\n RdfBindingRow,\n RdfLocalQuery,\n RdfLocalQueryMetrics,\n RdfLocalQueryResult,\n RdfQueryBind,\n RdfQueryAggregate,\n RdfQueryFilter,\n RdfQueryFilterValue,\n RdfOptionalQueryGroup,\n RdfQueryPattern,\n RdfQueryPatternKey,\n RdfQueryTermPattern,\n RdfQuadTupleConstraintSource,\n RdfValuesBindingSource,\n RdfTextSearchPattern,\n RdfTextSearchOptions,\n RdfTextSearchResult,\n RdfUnionQueryBranch,\n RdfVectorSearchPattern,\n RdfVectorSearchOptions,\n RdfVectorSearchResult,\n RdfMinusQueryGroup,\n RdfExistsQueryGroup,\n RdfQueryVariable,\n RdfQuadJoinGroupAggregateHaving,\n RdfQuadScanOptions,\n} from './types';\n\nconst TERM_KEYS: RdfQueryPatternKey[] = ['graph', 'subject', 'predicate', 'object'];\nconst PLANNER_SAMPLE_BINDINGS = 16;\nconst XSD_DECIMAL = 'http://www.w3.org/2001/XMLSchema#decimal';\nconst XSD_INTEGER = 'http://www.w3.org/2001/XMLSchema#integer';\n\ninterface SingleScanPushdown {\n options: RdfQuadScanOptions;\n orderPushed: boolean;\n paginationPushed: boolean;\n}\n\ntype CompiledPattern = QuintPattern & {\n pushedDownFilters: number;\n pushedDownFilterIndexes: number[];\n};\n\ntype CompiledJoinPattern = { pattern: CompiledPattern; variables: Partial<Record<RdfQueryPatternKey, string>> };\n\ninterface RequiredBgpPushdown {\n patterns: CompiledJoinPattern[];\n reorderPlan?: string;\n orderPushed: boolean;\n paginationPushed: boolean;\n distinctPushed: boolean;\n project?: string[];\n pushedDownFilters: number;\n}\n\ninterface GroupAggregatePushdown {\n patterns: CompiledJoinPattern[];\n reorderPlan?: string;\n having?: RdfQuadJoinGroupAggregateHaving[];\n pushedDownFilters: number;\n pushedDownHaving: number;\n orderPushed: boolean;\n paginationPushed: boolean;\n countOnly: boolean;\n}\n\ninterface JoinCountPushdown {\n patterns: CompiledJoinPattern[];\n reorderPlan?: string;\n pushedDownFilters: number;\n}\n\ninterface JoinBasicAggregatePushdown {\n patterns: CompiledJoinPattern[];\n reorderPlan?: string;\n pushedDownFilters: number;\n}\n\ninterface PatternRequiredSource {\n kind: 'pattern';\n pattern: RdfQueryPattern;\n originalIndex: number;\n tupleValues?: RdfValuesBindingSource;\n}\n\ninterface TextRequiredSource {\n kind: 'text';\n pattern: RdfTextSearchPattern;\n originalIndex: number;\n results?: RdfTextSearchResult[];\n}\n\ninterface VectorRequiredSource {\n kind: 'vector';\n pattern: RdfVectorSearchPattern;\n originalIndex: number;\n results?: RdfVectorSearchResult[];\n}\n\ninterface ValuesRequiredSource {\n kind: 'values';\n source: RdfValuesBindingSource;\n originalIndex: number;\n}\n\ntype RequiredSource = PatternRequiredSource | TextRequiredSource | VectorRequiredSource | ValuesRequiredSource;\n\nexport class RdfLocalQueryEngine {\n public constructor(\n private readonly index: RdfQuadIndex,\n private readonly textIndex?: RdfTextIndex,\n private readonly vectorIndex?: RdfVectorIndex,\n ) {}\n\n public query(query: RdfLocalQuery): RdfLocalQueryResult {\n const start = Date.now();\n const metrics: RdfLocalQueryMetrics = {\n engine: 'solid-rdf',\n plan: [],\n scannedRows: 0,\n joinedRows: 0,\n returnedRows: 0,\n durationMs: 0,\n indexChoices: [],\n cardinalityEstimates: 0,\n distinctCardinalityEstimates: 0,\n searchCardinalityEstimates: 0,\n filtersApplied: 0,\n filtersPushedDown: 0,\n };\n\n const hasNonPatternSource = (query.values?.length ?? 0) > 0\n || (query.textSearch?.length ?? 0) > 0\n || (query.vectorSearch?.length ?? 0) > 0;\n const requiredPatterns = query.patterns.length > 0\n ? query.patterns\n : query.unions?.length || hasNonPatternSource\n ? []\n : [{}];\n let bindings: RdfBindingRow[] = [{}];\n const requiredFilters = query.filters ?? [];\n const aggregates = queryAggregates(query);\n const singleScanPushdown = this.singleScanPushdown(query, requiredPatterns, requiredFilters);\n const countPushdown = this.countPushdown(query, requiredPatterns, requiredFilters);\n const groupAggregatePushdown = this.groupAggregatePushdown(query, requiredPatterns, requiredFilters, aggregates);\n const joinCountPushdown = this.joinCountPushdown(query, requiredPatterns, requiredFilters, aggregates);\n const joinBasicAggregatePushdown = this.joinBasicAggregatePushdown(query, requiredPatterns, requiredFilters, aggregates);\n let groupedAggregatePushed = false;\n\n if (countPushdown) {\n const countEstimate = countPushdown.distinctKey\n ? this.index.countDistinct(countPushdown.pattern, countPushdown.distinctKey)\n : undefined;\n const count = countEstimate?.rows ?? this.index.count(countPushdown.pattern);\n const result = countLiteral(count);\n metrics.scannedRows = count;\n metrics.joinedRows = count;\n metrics.returnedRows = 1;\n metrics.durationMs = Date.now() - start;\n metrics.indexChoices.push('count');\n metrics.filtersPushedDown += countPushdown.pushedDownFilters;\n metrics.plan.push(`IndexCount(${describePattern(requiredPatterns[0])})`);\n metrics.plan.push(countPushdown.distinctKey ? 'Aggregate(count-distinct-index)' : 'Aggregate(count-index)');\n return {\n bindings: [{ [countPushdown.as]: result }],\n count,\n metrics,\n };\n }\n\n if (joinCountPushdown) {\n const scan = this.index.countJoinPatterns(joinCountPushdown.patterns, {\n aggregates,\n });\n const firstAggregate = aggregates[0];\n const firstCount = firstAggregate ? Number(scan.bindings[0]?.[firstAggregate.as]?.value ?? 0) : 0;\n metrics.scannedRows = scan.metrics.matchedRows;\n metrics.joinedRows = scan.metrics.matchedRows;\n metrics.returnedRows = scan.bindings.length;\n metrics.durationMs = Date.now() - start;\n metrics.indexChoices.push(scan.metrics.indexChoice);\n metrics.filtersPushedDown += joinCountPushdown.pushedDownFilters;\n if (joinCountPushdown.reorderPlan) {\n metrics.plan.push(joinCountPushdown.reorderPlan);\n }\n metrics.plan.push(...storagePlanMarkers(scan.metrics.queryPlan));\n metrics.plan.push(`IndexJoinCount(${joinCountPushdown.patterns.map((source) => describePatternSource(source)).join('|')})`);\n metrics.plan.push(aggregatePlan(aggregates, false));\n metrics.plan.push(aggregates.some((aggregate) => aggregate.distinct)\n ? 'Aggregate(join-count-distinct-index)'\n : 'Aggregate(join-count-index)');\n return {\n bindings: scan.bindings,\n count: firstCount,\n metrics,\n };\n }\n\n if (joinBasicAggregatePushdown) {\n const scan = this.index.aggregateJoinPatterns(joinBasicAggregatePushdown.patterns, {\n aggregates,\n });\n metrics.scannedRows = scan.metrics.matchedRows;\n metrics.joinedRows = scan.metrics.matchedRows;\n metrics.returnedRows = scan.bindings.length;\n metrics.durationMs = Date.now() - start;\n metrics.indexChoices.push(scan.metrics.indexChoice);\n metrics.filtersPushedDown += joinBasicAggregatePushdown.pushedDownFilters;\n if (joinBasicAggregatePushdown.reorderPlan) {\n metrics.plan.push(joinBasicAggregatePushdown.reorderPlan);\n }\n metrics.plan.push(...storagePlanMarkers(scan.metrics.queryPlan));\n metrics.plan.push(`IndexJoinAggregate(${joinBasicAggregatePushdown.patterns.map((source) => describePatternSource(source)).join('|')})`);\n metrics.plan.push(aggregatePlan(aggregates, false));\n metrics.plan.push(aggregates.length > 1\n ? 'Aggregate(join-basic-multi-index)'\n : 'Aggregate(join-basic-index)');\n return {\n bindings: scan.bindings,\n metrics,\n };\n }\n\n const remainingSources = buildRequiredSources(requiredPatterns, query);\n const requiredBgpPushdown = this.requiredBgpPushdown(query, requiredPatterns, requiredFilters);\n if (groupAggregatePushdown) {\n const scan = groupAggregatePushdown.countOnly\n ? this.index.groupCountJoinPatterns(groupAggregatePushdown.patterns, {\n groupBy: query.groupBy ?? [],\n aggregates,\n ...(groupAggregatePushdown.having ? { having: groupAggregatePushdown.having } : {}),\n ...(groupAggregatePushdown.orderPushed ? { orderBy: query.orderBy } : {}),\n ...(groupAggregatePushdown.paginationPushed && query.limit !== undefined ? { limit: Math.max(0, query.limit) } : {}),\n ...(groupAggregatePushdown.paginationPushed && query.offset !== undefined ? { offset: Math.max(0, query.offset) } : {}),\n })\n : this.index.groupAggregateJoinPatterns(groupAggregatePushdown.patterns, {\n groupBy: query.groupBy ?? [],\n aggregates,\n ...(groupAggregatePushdown.having ? { having: groupAggregatePushdown.having } : {}),\n ...(groupAggregatePushdown.orderPushed ? { orderBy: query.orderBy } : {}),\n ...(groupAggregatePushdown.paginationPushed && query.limit !== undefined ? { limit: Math.max(0, query.limit) } : {}),\n ...(groupAggregatePushdown.paginationPushed && query.offset !== undefined ? { offset: Math.max(0, query.offset) } : {}),\n });\n const groupPlanPrefix = groupAggregatePushdown.countOnly ? 'IndexGroupCount' : 'IndexGroupAggregate';\n bindings = scan.bindings;\n metrics.scannedRows += scan.metrics.matchedRows;\n metrics.joinedRows = scan.metrics.matchedRows;\n metrics.indexChoices.push(scan.metrics.indexChoice);\n metrics.filtersPushedDown += groupAggregatePushdown.pushedDownFilters;\n metrics.filtersPushedDown += groupAggregatePushdown.pushedDownHaving;\n if (groupAggregatePushdown.reorderPlan) {\n metrics.plan.push(groupAggregatePushdown.reorderPlan);\n }\n metrics.plan.push(...storagePlanMarkers(scan.metrics.queryPlan));\n metrics.plan.push(`${groupPlanPrefix}(${(query.groupBy ?? []).map((variableName) => `?${variableName}`).join(',')})`);\n if (groupAggregatePushdown.pushedDownHaving > 0) {\n metrics.plan.push(`${groupPlanPrefix}Having(${(query.having ?? []).map(describeFilter).join(',')})`);\n }\n if (groupAggregatePushdown.orderPushed) {\n metrics.plan.push(`${groupPlanPrefix}Order(${describeQueryOrder(query.orderBy ?? [])})`);\n }\n if (groupAggregatePushdown.paginationPushed) {\n metrics.plan.push(`${groupPlanPrefix}Limit`);\n }\n metrics.plan.push(aggregatePlan(aggregates, true));\n metrics.plan.push(groupAggregatePushdown.countOnly\n ? 'Aggregate(group-count-index)'\n : aggregates.length > 1\n ? 'Aggregate(group-basic-multi-index)'\n : 'Aggregate(group-basic-index)');\n remainingSources.splice(0, remainingSources.length);\n groupedAggregatePushed = true;\n } else if (requiredBgpPushdown) {\n const scan = this.index.joinPatterns(requiredBgpPushdown.patterns, {\n ...(requiredBgpPushdown.project ? { project: requiredBgpPushdown.project } : {}),\n ...(requiredBgpPushdown.distinctPushed ? { distinct: true } : {}),\n ...(requiredBgpPushdown.orderPushed ? { orderBy: query.orderBy } : {}),\n ...(requiredBgpPushdown.paginationPushed && query.limit !== undefined ? { limit: Math.max(0, query.limit) } : {}),\n ...(requiredBgpPushdown.paginationPushed && query.offset !== undefined ? { offset: Math.max(0, query.offset) } : {}),\n ...(requiredBgpPushdown.paginationPushed ? { countMatchedRows: false } : {}),\n });\n bindings = scan.bindings;\n metrics.scannedRows += scan.metrics.matchedRows;\n metrics.indexChoices.push(scan.metrics.indexChoice);\n metrics.filtersPushedDown += requiredBgpPushdown.pushedDownFilters;\n if (requiredBgpPushdown.reorderPlan) {\n metrics.plan.push(requiredBgpPushdown.reorderPlan);\n }\n metrics.plan.push(...storagePlanMarkers(scan.metrics.queryPlan));\n metrics.plan.push(`IndexJoin(${requiredBgpPushdown.patterns.map((source) => describePatternSource(source)).join('|')})`);\n if (requiredBgpPushdown.orderPushed) {\n metrics.plan.push(`IndexJoinOrder(${describeQueryOrder(query.orderBy ?? [])})`);\n }\n if (requiredBgpPushdown.distinctPushed) {\n metrics.plan.push(`IndexJoinDistinct(${(requiredBgpPushdown.project ?? []).map((variableName) => `?${variableName}`).join(',')})`);\n }\n if (requiredBgpPushdown.paginationPushed) {\n metrics.plan.push('IndexJoinLimit');\n }\n remainingSources.splice(0, remainingSources.length);\n }\n\n while (remainingSources.length > 0) {\n const sourceIndex = this.chooseRequiredSourceIndex(remainingSources, bindings, requiredFilters, metrics);\n const [source] = remainingSources.splice(sourceIndex, 1);\n bindings = this.joinRequiredSource(\n bindings,\n source,\n requiredFilters,\n metrics,\n singleScanPushdown,\n );\n if (bindings.length === 0) {\n break;\n }\n }\n\n if ((query.binds?.length ?? 0) > 0) {\n bindings = this.applyBinds(bindings, query.binds ?? []);\n metrics.plan.push(`Bind(${(query.binds ?? []).map(describeBind).join(',')})`);\n }\n\n for (const rawOptionalGroup of query.optional ?? []) {\n const optionalGroup = normalizeOptionalGroup(rawOptionalGroup);\n bindings = this.joinOptionalGroup(bindings, optionalGroup, metrics);\n metrics.plan.push(`OptionalJoin(${optionalGroup.patterns.map(describePattern).join(',')})`);\n }\n\n for (const unionGroup of query.unions ?? []) {\n bindings = this.joinUnionGroup(bindings, unionGroup.branches, requiredFilters, metrics);\n metrics.plan.push(`Union(${unionGroup.branches.map((branch) => branch.patterns.map(describePattern).join(',')).join('|')})`);\n if (bindings.length === 0) {\n break;\n }\n }\n\n for (const minusGroup of query.minus ?? []) {\n bindings = this.applyMinusGroup(bindings, minusGroup, metrics);\n metrics.plan.push(`Minus(${minusGroup.patterns.map(describePattern).join(',')})`);\n if (bindings.length === 0) {\n break;\n }\n }\n\n for (const existsGroup of query.exists ?? []) {\n bindings = this.applyExistsGroup(bindings, existsGroup, metrics);\n metrics.plan.push(`Exists(${existsGroup.patterns.map(describePattern).join(',')})`);\n if (bindings.length === 0) {\n break;\n }\n }\n\n const postRequiredFilters = this.requiredFiltersNeedingPostApply(\n query,\n requiredPatterns,\n requiredFilters,\n requiredBgpPushdown,\n );\n if (postRequiredFilters.length > 0 && !groupedAggregatePushed) {\n bindings = bindings.filter((binding) => this.matchesFilters(binding, postRequiredFilters));\n metrics.filtersApplied += postRequiredFilters.length;\n metrics.plan.push(`Filter(${postRequiredFilters.map(describeFilter).join(',')})`);\n }\n\n if (groupedAggregatePushed && groupAggregatePushdown) {\n if ((query.having?.length ?? 0) > groupAggregatePushdown.pushedDownHaving) {\n bindings = bindings.filter((binding) => this.matchesFilters(binding, query.having ?? []));\n metrics.filtersApplied += query.having?.length ?? 0;\n metrics.plan.push(`Having(${(query.having ?? []).map(describeFilter).join(',')})`);\n }\n } else if (aggregates.length > 0 && (query.groupBy?.length ?? 0) > 0) {\n const joinedRows = bindings.length;\n bindings = this.groupAggregateBindings(bindings, query.groupBy ?? [], aggregates);\n metrics.joinedRows = joinedRows;\n metrics.plan.push(aggregatePlan(aggregates, true));\n if ((query.having?.length ?? 0) > 0) {\n bindings = bindings.filter((binding) => this.matchesFilters(binding, query.having ?? []));\n metrics.filtersApplied += query.having?.length ?? 0;\n metrics.plan.push(`Having(${(query.having ?? []).map(describeFilter).join(',')})`);\n }\n } else if (aggregates.length > 0) {\n const { binding: aggregateBinding, firstCount } = this.aggregateBindings(bindings, aggregates);\n const having = query.having ?? [];\n if (having.length > 0 && !this.matchesFilters(aggregateBinding, having)) {\n metrics.joinedRows = bindings.length;\n metrics.returnedRows = 0;\n metrics.durationMs = Date.now() - start;\n metrics.filtersApplied += having.length;\n metrics.plan.push(aggregatePlan(aggregates, false));\n metrics.plan.push(`Having(${having.map(describeFilter).join(',')})`);\n return {\n bindings: [],\n count: firstCount,\n metrics,\n };\n }\n metrics.joinedRows = bindings.length;\n metrics.returnedRows = 1;\n metrics.durationMs = Date.now() - start;\n metrics.plan.push(aggregatePlan(aggregates, false));\n if (having.length > 0) {\n metrics.filtersApplied += having.length;\n metrics.plan.push(`Having(${having.map(describeFilter).join(',')})`);\n }\n return {\n bindings: [aggregateBinding],\n count: firstCount,\n metrics,\n };\n }\n\n const joinedRows = metrics.joinedRows > 0\n ? metrics.joinedRows\n : singleScanPushdown?.paginationPushed\n || requiredBgpPushdown?.paginationPushed\n ? metrics.scannedRows\n : bindings.length;\n\n if (\n query.orderBy\n && query.orderBy.length > 0\n && !singleScanPushdown?.orderPushed\n && !requiredBgpPushdown?.orderPushed\n && !groupAggregatePushdown?.orderPushed\n ) {\n bindings = [...bindings].sort((left, right) => compareBindings(left, right, query.orderBy ?? []));\n metrics.plan.push('Sort');\n }\n\n let projected = query.select && query.select.length > 0\n ? bindings.map((binding) => projectBinding(binding, query.select ?? []))\n : bindings;\n\n if (query.distinct && !requiredBgpPushdown?.distinctPushed) {\n projected = distinctBindings(projected);\n metrics.plan.push('Distinct');\n }\n\n if (\n (query.offset !== undefined || query.limit !== undefined)\n && !singleScanPushdown?.paginationPushed\n && !requiredBgpPushdown?.paginationPushed\n && !groupAggregatePushdown?.paginationPushed\n ) {\n const startOffset = Math.max(0, query.offset ?? 0);\n const endOffset = query.limit === undefined\n ? undefined\n : startOffset + Math.max(0, query.limit);\n projected = projected.slice(startOffset, endOffset);\n metrics.plan.push('Limit');\n }\n\n metrics.joinedRows = joinedRows;\n metrics.returnedRows = projected.length;\n metrics.durationMs = Date.now() - start;\n return {\n bindings: projected,\n metrics,\n };\n }\n\n private chooseRequiredSourceIndex(\n sources: RequiredSource[],\n bindings: RdfBindingRow[],\n filters: RdfQueryFilter[],\n metrics: RdfLocalQueryMetrics,\n ): number {\n const boundVariables = this.boundVariables(bindings);\n const hasBoundVariables = boundVariables.size > 0;\n const sampleBinding = bindings[0] ?? {};\n const choices = sources.map((source, index) => {\n const sourceVariables = variablesInRequiredSource(source);\n const connected = sourceVariables.length === 0\n || sourceVariables.some((variableName) => boundVariables.has(variableName));\n return {\n index,\n disconnectedPenalty: hasBoundVariables && !connected ? 1 : 0,\n estimatedRows: this.estimateSourceRows(source, bindings, filters, metrics),\n rank: this.sourceRank(source, sampleBinding),\n };\n });\n\n choices.sort((left, right) => (\n left.disconnectedPenalty - right.disconnectedPenalty\n || left.estimatedRows - right.estimatedRows\n || left.rank - right.rank\n || left.index - right.index\n ));\n return choices[0]?.index ?? 0;\n }\n\n private estimatePatternRows(\n pattern: RdfQueryPattern,\n bindings: RdfBindingRow[],\n filters: RdfQueryFilter[],\n metrics: RdfLocalQueryMetrics,\n ): number {\n const sample = (bindings.length > 0 ? bindings : [{}]).slice(0, PLANNER_SAMPLE_BINDINGS);\n const fanoutEstimate = this.estimatePatternRowsByDistinctFanout(pattern, sample, filters, metrics);\n if (fanoutEstimate !== undefined) {\n if (bindings.length > sample.length && sample.length > 0) {\n return Math.ceil(fanoutEstimate * (bindings.length / sample.length));\n }\n return fanoutEstimate;\n }\n\n const estimates = new Map<string, number>();\n for (const binding of sample) {\n const compiled = this.compilePattern(pattern, binding, filters);\n if (!compiled) {\n continue;\n }\n metrics.cardinalityEstimates = (metrics.cardinalityEstimates ?? 0) + 1;\n const key = compiledPatternKey(compiled);\n if (!estimates.has(key)) {\n estimates.set(key, this.index.estimateCardinality(compiled).rows);\n metrics.distinctCardinalityEstimates = (metrics.distinctCardinalityEstimates ?? 0) + 1;\n }\n }\n const rows = sample.reduce((sum, binding) => {\n const compiled = this.compilePattern(pattern, binding, filters);\n return compiled ? sum + (estimates.get(compiledPatternKey(compiled)) ?? 0) : sum;\n }, 0);\n if (bindings.length > sample.length && sample.length > 0) {\n return Math.ceil(rows * (bindings.length / sample.length));\n }\n return rows;\n }\n\n private estimatePatternRowsByDistinctFanout(\n pattern: RdfQueryPattern,\n sample: RdfBindingRow[],\n filters: RdfQueryFilter[],\n metrics: RdfLocalQueryMetrics,\n ): number | undefined {\n if (sample.length < 2) {\n return undefined;\n }\n const boundSlots = this.boundPatternSlots(pattern, sample);\n if (boundSlots.length === 0) {\n return undefined;\n }\n const boundVariables = new Set(boundSlots.map((slot) => slot.variable));\n if (filters.some((filter) => boundVariables.has(filter.variable))) {\n return undefined;\n }\n\n const generalized = this.compilePattern(pattern, {}, filters);\n if (!generalized) {\n return undefined;\n }\n\n const total = this.index.estimateCardinality(generalized).rows;\n const distinct = this.index.countDistinctTuple(generalized, boundSlots.map((slot) => slot.key)).rows;\n metrics.cardinalityEstimates = (metrics.cardinalityEstimates ?? 0) + sample.length;\n metrics.distinctCardinalityEstimates = (metrics.distinctCardinalityEstimates ?? 0) + 2;\n if (distinct === 0 || total === 0) {\n return 0;\n }\n return Math.ceil((total / distinct) * sample.length);\n }\n\n private boundPatternSlots(\n pattern: RdfQueryPattern,\n sample: RdfBindingRow[],\n ): Array<{ key: RdfQueryPatternKey; variable: string }> {\n return TERM_KEYS\n .map((key) => ({ key, value: pattern[key] }))\n .filter((slot): slot is { key: RdfQueryPatternKey; value: RdfQueryVariable } => {\n if (!isVariable(slot.value)) {\n return false;\n }\n const variableName = slot.value.variable;\n return sample.every((binding) => Boolean(binding[variableName]));\n })\n .map((slot) => ({ key: slot.key, variable: slot.value.variable }));\n }\n\n private estimateSourceRows(\n source: RequiredSource,\n bindings: RdfBindingRow[],\n filters: RdfQueryFilter[],\n metrics: RdfLocalQueryMetrics,\n ): number {\n if (source.kind === 'pattern') {\n if (source.tupleValues) {\n return this.estimateTuplePatternRows(source, bindings, filters, metrics);\n }\n return this.estimatePatternRows(source.pattern, bindings, filters, metrics);\n }\n if (source.kind === 'values') {\n return source.source.rows.length * Math.max(1, bindings.length);\n }\n\n const sample = (bindings.length > 0 ? bindings : [{}]).slice(0, PLANNER_SAMPLE_BINDINGS);\n if (!this.searchSourceHasBoundVariables(source, sample)) {\n metrics.searchCardinalityEstimates = (metrics.searchCardinalityEstimates ?? 0) + 1;\n const estimate = source.kind === 'text'\n ? this.estimateTextSearchRows(source)\n : this.estimateVectorSearchRows(source);\n return estimate * Math.max(1, bindings.length);\n }\n\n const sourceVariable = source.pattern.source;\n const boundSourceEstimate = sourceVariable && this.canUseBoundSourceSearch(sample, source, sourceVariable)\n ? this.estimateSearchRowsByBoundSource(source, sample, metrics)\n : undefined;\n if (boundSourceEstimate !== undefined) {\n if (bindings.length > sample.length && sample.length > 0) {\n return Math.ceil(boundSourceEstimate * (bindings.length / sample.length));\n }\n return boundSourceEstimate;\n }\n\n const results = source.kind === 'text'\n ? this.textSearchResults(source)\n : this.vectorSearchResults(source);\n let rows = 0;\n\n for (const binding of sample) {\n for (const result of results) {\n const next = source.kind === 'text'\n ? bindTextSearchResult(binding, source.pattern, result as RdfTextSearchResult)\n : bindVectorSearchResult(binding, source.pattern, result as RdfVectorSearchResult);\n if (next) {\n rows++;\n }\n }\n }\n\n if (bindings.length > sample.length && sample.length > 0) {\n return Math.ceil(rows * (bindings.length / sample.length));\n }\n return rows;\n }\n\n private estimateTuplePatternRows(\n source: PatternRequiredSource,\n bindings: RdfBindingRow[],\n filters: RdfQueryFilter[],\n metrics: RdfLocalQueryMetrics,\n ): number {\n const sample = (bindings.length > 0 ? bindings : [{}]).slice(0, PLANNER_SAMPLE_BINDINGS);\n const estimates = new Map<string, number>();\n let rows = 0;\n\n for (const binding of sample) {\n for (const row of source.tupleValues?.rows ?? []) {\n const tupleBinding = mergeTupleValuesBinding(binding, source.tupleValues?.variables ?? [], row);\n if (!tupleBinding) {\n continue;\n }\n const compiled = this.compilePattern(source.pattern, tupleBinding, filters);\n if (!compiled) {\n continue;\n }\n metrics.cardinalityEstimates = (metrics.cardinalityEstimates ?? 0) + 1;\n const key = compiledPatternKey(compiled);\n if (!estimates.has(key)) {\n estimates.set(key, this.index.estimateCardinality(compiled).rows);\n metrics.distinctCardinalityEstimates = (metrics.distinctCardinalityEstimates ?? 0) + 1;\n }\n rows += estimates.get(key) ?? 0;\n }\n }\n\n if (bindings.length > sample.length && sample.length > 0) {\n return Math.ceil(rows * (bindings.length / sample.length));\n }\n return rows;\n }\n\n private searchSourceHasBoundVariables(\n source: TextRequiredSource | VectorRequiredSource,\n sample: RdfBindingRow[],\n ): boolean {\n const variables = variablesInRequiredSource(source);\n return variables.some((variableName) => sample.some((binding) => Boolean(binding[variableName])));\n }\n\n private estimateSearchRowsByBoundSource(\n source: TextRequiredSource | VectorRequiredSource,\n sample: RdfBindingRow[],\n metrics: RdfLocalQueryMetrics,\n ): number | undefined {\n const sourceVariable = source.pattern.source;\n if (!sourceVariable) {\n return undefined;\n }\n\n const estimates = new Map<string, number>();\n let rows = 0;\n let sawBoundSource = false;\n for (const binding of sample) {\n const term = binding[sourceVariable];\n if (!term) {\n return undefined;\n }\n\n sawBoundSource = true;\n if (term.termType !== 'NamedNode') {\n continue;\n }\n\n if (!estimates.has(term.value)) {\n metrics.searchCardinalityEstimates = (metrics.searchCardinalityEstimates ?? 0) + 1;\n estimates.set(term.value, source.kind === 'text'\n ? this.estimateTextSearchRows(source, term.value)\n : this.estimateVectorSearchRows(source, term.value));\n }\n rows += estimates.get(term.value) ?? 0;\n }\n\n return sawBoundSource ? rows : undefined;\n }\n\n private estimateTextSearchRows(source: TextRequiredSource, exactSource?: string): number {\n if (!this.textIndex) {\n throw new Error('RdfLocalQuery textSearch requires a configured RdfTextIndex');\n }\n const options = this.textSearchOptions(source.pattern, exactSource);\n return options ? this.textIndex.estimateSearchCardinality(options).rows : 0;\n }\n\n private estimateVectorSearchRows(source: VectorRequiredSource, exactSource?: string): number {\n if (!this.vectorIndex) {\n throw new Error('RdfLocalQuery vectorSearch requires a configured RdfVectorIndex');\n }\n const options = this.vectorSearchOptions(source.pattern, exactSource);\n return options ? this.vectorIndex.estimateSearchCardinality(options).rows : 0;\n }\n\n private boundVariables(bindings: RdfBindingRow[]): Set<string> {\n const names = new Set<string>();\n for (const binding of bindings.slice(0, PLANNER_SAMPLE_BINDINGS)) {\n for (const name of Object.keys(binding)) {\n names.add(name);\n }\n }\n return names;\n }\n\n private patternRank(pattern: RdfQueryPattern, binding: RdfBindingRow): number {\n let rank = 0;\n for (const key of TERM_KEYS) {\n const value = pattern[key];\n if (!value) continue;\n if (isVariable(value)) {\n if (binding[value.variable]) {\n rank += key === 'graph' ? 0 : 1;\n } else {\n rank += 8;\n }\n } else {\n rank += key === 'graph' ? 0 : 1;\n }\n }\n return rank;\n }\n\n private sourceRank(source: RequiredSource, binding: RdfBindingRow): number {\n if (source.kind === 'pattern') {\n return this.patternRank(source.pattern, binding);\n }\n if (source.kind === 'values') {\n return 0;\n }\n\n const variables = variablesInRequiredSource(source);\n if (variables.some((variableName) => binding[variableName])) {\n return 0;\n }\n return source.kind === 'text' ? 4 : 5;\n }\n\n private joinRequiredSource(\n input: RdfBindingRow[],\n source: RequiredSource,\n filters: RdfQueryFilter[],\n metrics: RdfLocalQueryMetrics,\n singleScanPushdown?: SingleScanPushdown,\n ): RdfBindingRow[] {\n switch (source.kind) {\n case 'pattern': {\n const bindings = this.joinPattern(\n input,\n source,\n filters,\n metrics,\n false,\n singleScanPushdown?.options,\n );\n metrics.plan.push(`IndexScan(${describePattern(source.pattern)})`);\n if (singleScanPushdown?.orderPushed) {\n metrics.plan.push(`IndexOrder(${describeScanOrder(singleScanPushdown.options)})`);\n }\n if (singleScanPushdown?.paginationPushed) {\n metrics.plan.push('IndexLimit');\n }\n return bindings;\n }\n case 'text': {\n const bindings = this.joinTextSearch(input, source, metrics);\n metrics.plan.push(`TextSearch(${describeTextSearch(source.pattern)})`);\n return bindings;\n }\n case 'vector': {\n const bindings = this.joinVectorSearch(input, source, metrics);\n metrics.plan.push(`VectorSearch(${describeVectorSearch(source.pattern)})`);\n return bindings;\n }\n case 'values': {\n const bindings = joinValuesSource(input, source.source);\n metrics.scannedRows += source.source.rows.length;\n metrics.plan.push(`Values(${source.source.variables.map((variableName) => `?${variableName}`).join(',')})`);\n return bindings;\n }\n default: {\n const exhaustive: never = source;\n throw new Error(`Unsupported RDF required source: ${JSON.stringify(exhaustive)}`);\n }\n }\n }\n\n private joinOptionalGroup(\n input: RdfBindingRow[],\n optionalGroup: RdfOptionalQueryGroup,\n metrics: RdfLocalQueryMetrics,\n ): RdfBindingRow[] {\n const optionalFilters = optionalGroup.filters ?? [];\n if (optionalFilters.length > 0) {\n metrics.plan.push(`OptionalFilter(${optionalFilters.map(describeFilter).join(',')})`);\n }\n return input.flatMap((binding) => {\n let matches: RdfBindingRow[] = [binding];\n for (const source of optionalGroup.values ?? []) {\n matches = joinValuesSource(matches, source);\n metrics.scannedRows += source.rows.length;\n metrics.plan.push(`OptionalValues(${source.variables.map((variableName) => `?${variableName}`).join(',')})`);\n if (matches.length === 0) {\n return [binding];\n }\n }\n for (const pattern of optionalGroup.patterns) {\n matches = this.joinPattern(matches, { kind: 'pattern', pattern, originalIndex: -1 }, optionalFilters, metrics, true);\n if (matches.length === 0) {\n return [binding];\n }\n }\n for (const unionGroup of optionalGroup.unions ?? []) {\n matches = this.joinUnionGroup(matches, unionGroup.branches, optionalFilters, metrics);\n metrics.plan.push(`OptionalUnion(${unionGroup.branches.map((branch) => branch.patterns.map(describePattern).join(',')).join('|')})`);\n if (matches.length === 0) {\n return [binding];\n }\n }\n for (const rawNestedOptionalGroup of optionalGroup.optional ?? []) {\n const nestedOptionalGroup = normalizeOptionalGroup(rawNestedOptionalGroup);\n matches = this.joinOptionalGroup(matches, nestedOptionalGroup, metrics);\n metrics.plan.push(`OptionalNestedJoin(${nestedOptionalGroup.patterns.map(describePattern).join(',')})`);\n if (matches.length === 0) {\n return [binding];\n }\n }\n for (const minusGroup of optionalGroup.minus ?? []) {\n matches = this.applyMinusGroup(matches, minusGroup, metrics);\n metrics.plan.push(`OptionalMinus(${minusGroup.patterns.map(describePattern).join(',')})`);\n if (matches.length === 0) {\n return [binding];\n }\n }\n for (const existsGroup of optionalGroup.exists ?? []) {\n matches = this.applyExistsGroup(matches, existsGroup, metrics);\n metrics.plan.push(`OptionalExists(${existsGroup.patterns.map(describePattern).join(',')})`);\n if (matches.length === 0) {\n return [binding];\n }\n }\n if ((optionalGroup.binds?.length ?? 0) > 0) {\n matches = this.applyBinds(matches, optionalGroup.binds ?? []);\n metrics.plan.push(`OptionalBind(${(optionalGroup.binds ?? []).map(describeBind).join(',')})`);\n }\n if (optionalFilters.length > 0) {\n matches = matches.filter((match) => this.matchesFilters(match, optionalFilters));\n metrics.filtersApplied += optionalFilters.length;\n if (matches.length === 0) {\n return [binding];\n }\n }\n return matches;\n });\n }\n\n private joinUnionGroup(\n input: RdfBindingRow[],\n branches: RdfUnionQueryBranch[],\n outerFilters: RdfQueryFilter[],\n metrics: RdfLocalQueryMetrics,\n ): RdfBindingRow[] {\n const output: RdfBindingRow[] = [];\n for (const binding of input) {\n for (const branch of branches) {\n let matches: RdfBindingRow[] = [binding];\n const branchFilters = [...outerFilters, ...(branch.filters ?? [])];\n for (const source of branch.values ?? []) {\n matches = joinValuesSource(matches, source);\n metrics.scannedRows += source.rows.length;\n metrics.plan.push(`UnionValues(${source.variables.map((variableName) => `?${variableName}`).join(',')})`);\n if (matches.length === 0) {\n break;\n }\n }\n if (matches.length === 0) {\n continue;\n }\n for (const pattern of branch.patterns) {\n matches = this.joinPattern(matches, { kind: 'pattern', pattern, originalIndex: -1 }, branchFilters, metrics, false);\n if (matches.length === 0) {\n break;\n }\n }\n if (matches.length === 0) {\n continue;\n }\n if ((branch.binds?.length ?? 0) > 0) {\n matches = this.applyBinds(matches, branch.binds ?? []);\n metrics.plan.push(`UnionBind(${(branch.binds ?? []).map(describeBind).join(',')})`);\n }\n if (matches.length === 0) {\n continue;\n }\n for (const rawOptionalGroup of branch.optional ?? []) {\n const optionalGroup = normalizeOptionalGroup(rawOptionalGroup);\n matches = this.joinOptionalGroup(matches, optionalGroup, metrics);\n metrics.plan.push(`UnionOptionalJoin(${optionalGroup.patterns.map(describePattern).join(',')})`);\n if (matches.length === 0) {\n break;\n }\n }\n if (matches.length === 0) {\n continue;\n }\n if (branch.filters?.length) {\n matches = matches.filter((match) => this.matchesFilters(match, branch.filters ?? []));\n metrics.filtersApplied += branch.filters.length;\n metrics.plan.push(`UnionFilter(${branch.filters.map(describeFilter).join(',')})`);\n }\n output.push(...matches);\n }\n }\n return output;\n }\n\n private applyDependentValues(\n input: RdfBindingRow[],\n sources: RdfValuesBindingSource[] | undefined,\n metrics: RdfLocalQueryMetrics,\n label: 'Minus' | 'Exists',\n ): RdfBindingRow[] {\n let matches = input;\n for (const source of sources ?? []) {\n matches = joinValuesSource(matches, source);\n metrics.scannedRows += source.rows.length;\n metrics.plan.push(`${label}Values(${source.variables.map((variableName) => `?${variableName}`).join(',')})`);\n if (matches.length === 0) {\n break;\n }\n }\n return matches;\n }\n\n private applyMinusGroup(\n input: RdfBindingRow[],\n minusGroup: RdfMinusQueryGroup,\n metrics: RdfLocalQueryMetrics,\n ): RdfBindingRow[] {\n const filters = minusGroup.filters ?? [];\n const output: RdfBindingRow[] = [];\n for (const binding of input) {\n let matches: RdfBindingRow[] = [binding];\n matches = this.applyDependentValues(matches, minusGroup.values, metrics, 'Minus');\n for (const pattern of minusGroup.patterns) {\n matches = this.joinPattern(matches, { kind: 'pattern', pattern, originalIndex: -1 }, filters, metrics, false);\n if (matches.length === 0) {\n break;\n }\n }\n if (matches.length > 0) {\n for (const unionGroup of minusGroup.unions ?? []) {\n matches = this.joinUnionGroup(matches, unionGroup.branches, filters, metrics);\n metrics.plan.push(`MinusUnion(${unionGroup.branches.map((branch) => branch.patterns.map(describePattern).join(',')).join('|')})`);\n if (matches.length === 0) {\n break;\n }\n }\n }\n for (const rawOptionalGroup of minusGroup.optional ?? []) {\n const optionalGroup = normalizeOptionalGroup(rawOptionalGroup);\n matches = this.joinOptionalGroup(matches, optionalGroup, metrics);\n metrics.plan.push(`MinusOptionalJoin(${optionalGroup.patterns.map(describePattern).join(',')})`);\n }\n if ((minusGroup.binds?.length ?? 0) > 0) {\n matches = this.applyBinds(matches, minusGroup.binds ?? []);\n metrics.plan.push(`MinusBind(${(minusGroup.binds ?? []).map(describeBind).join(',')})`);\n }\n if (filters.length > 0) {\n matches = matches.filter((match) => this.matchesFilters(match, filters));\n metrics.filtersApplied += filters.length;\n metrics.plan.push(`MinusFilter(${filters.map(describeFilter).join(',')})`);\n }\n if (matches.length === 0) {\n output.push(binding);\n }\n }\n return output;\n }\n\n private applyExistsGroup(\n input: RdfBindingRow[],\n existsGroup: RdfExistsQueryGroup,\n metrics: RdfLocalQueryMetrics,\n ): RdfBindingRow[] {\n const filters = existsGroup.filters ?? [];\n const output: RdfBindingRow[] = [];\n for (const binding of input) {\n let matches: RdfBindingRow[] = [binding];\n matches = this.applyDependentValues(matches, existsGroup.values, metrics, 'Exists');\n for (const pattern of existsGroup.patterns) {\n matches = this.joinPattern(matches, { kind: 'pattern', pattern, originalIndex: -1 }, filters, metrics, false);\n if (matches.length === 0) {\n break;\n }\n }\n if (matches.length > 0) {\n for (const unionGroup of existsGroup.unions ?? []) {\n matches = this.joinUnionGroup(matches, unionGroup.branches, filters, metrics);\n metrics.plan.push(`ExistsUnion(${unionGroup.branches.map((branch) => branch.patterns.map(describePattern).join(',')).join('|')})`);\n if (matches.length === 0) {\n break;\n }\n }\n }\n for (const rawOptionalGroup of existsGroup.optional ?? []) {\n const optionalGroup = normalizeOptionalGroup(rawOptionalGroup);\n matches = this.joinOptionalGroup(matches, optionalGroup, metrics);\n metrics.plan.push(`ExistsOptionalJoin(${optionalGroup.patterns.map(describePattern).join(',')})`);\n }\n if ((existsGroup.binds?.length ?? 0) > 0) {\n matches = this.applyBinds(matches, existsGroup.binds ?? []);\n metrics.plan.push(`ExistsBind(${(existsGroup.binds ?? []).map(describeBind).join(',')})`);\n }\n if (filters.length > 0) {\n matches = matches.filter((match) => this.matchesFilters(match, filters));\n metrics.filtersApplied += filters.length;\n metrics.plan.push(`ExistsFilter(${filters.map(describeFilter).join(',')})`);\n }\n if (matches.length > 0) {\n output.push(binding);\n }\n }\n return output;\n }\n\n private joinPattern(\n input: RdfBindingRow[],\n source: PatternRequiredSource,\n filters: RdfQueryFilter[],\n metrics: RdfLocalQueryMetrics,\n optional: boolean,\n scanOptions?: QueryOptions,\n ): RdfBindingRow[] {\n const output: RdfBindingRow[] = [];\n const { pattern } = source;\n\n for (const binding of input) {\n const compiled = this.compilePattern(pattern, binding, filters);\n if (!compiled) {\n if (optional) {\n output.push(binding);\n }\n continue;\n }\n const tupleValues = this.tupleValuesForBinding(source, binding);\n const scan = tupleValues\n ? this.index.scanWithTupleConstraints(compiled, tupleValues, scanOptions)\n : this.index.scan(compiled, scanOptions);\n metrics.scannedRows += scan.metrics.matchedRows;\n metrics.indexChoices.push(scan.metrics.indexChoice);\n metrics.filtersPushedDown += compiled.pushedDownFilters;\n metrics.plan.push(...storagePlanMarkers(scan.metrics.queryPlan));\n\n for (const quad of scan.quads) {\n const next = this.bindQuad(pattern, binding, quad);\n const remainingFilters = filtersWithoutIndexes(filters, compiled.pushedDownFilterIndexes);\n if (next && this.matchesNewlyBoundFilters(next, binding, remainingFilters)) {\n output.push(next);\n }\n }\n }\n\n return output;\n }\n\n private requiredBgpPushdown(\n query: RdfLocalQuery,\n requiredPatterns: RdfQueryPattern[],\n filters: RdfQueryFilter[],\n ): RequiredBgpPushdown | undefined {\n if (\n requiredPatterns.length < 1\n || (query.values?.length ?? 0) > 0\n || (query.textSearch?.length ?? 0) > 0\n || (query.vectorSearch?.length ?? 0) > 0\n || (query.unions?.length ?? 0) > 0\n || (query.minus?.length ?? 0) > 0\n || (query.exists?.length ?? 0) > 0\n || (query.optional?.length ?? 0) > 0\n || (query.binds?.length ?? 0) > 0\n || queryAggregates(query).length > 0\n ) {\n return undefined;\n }\n if (requiredPatterns.length === 1 && !query.distinct) {\n return undefined;\n }\n\n if (!this.canPushRequiredBgpFilters(requiredPatterns, filters)) {\n return undefined;\n }\n\n const distinctProject = query.distinct\n ? this.requiredBgpDistinctProject(query, requiredPatterns, filters)\n : undefined;\n if (query.distinct && !distinctProject) {\n return undefined;\n }\n\n const orderPushed = (query.orderBy?.length ?? 0) > 0;\n if (orderPushed && !this.canPushRequiredBgpOrder(requiredPatterns, query.orderBy ?? [])) {\n return undefined;\n }\n\n const sharedVariables = variablesSharedAcrossPatterns(requiredPatterns);\n if (requiredPatterns.length > 1 && sharedVariables.size === 0) {\n return undefined;\n }\n\n const compiled = requiredPatterns.map((pattern) => this.compileJoinPattern(pattern, filters));\n if (compiled.some((entry) => !entry)) {\n return undefined;\n }\n const reordered = this.reorderJoinPatterns(requiredPatterns, compiled as CompiledJoinPattern[], filters);\n return {\n patterns: reordered.patterns,\n ...(reordered.reorderPlan ? { reorderPlan: reordered.reorderPlan } : {}),\n orderPushed,\n paginationPushed: query.limit !== undefined || query.offset !== undefined,\n distinctPushed: Boolean(distinctProject),\n ...(distinctProject ? { project: distinctProject } : {}),\n pushedDownFilters: filters.length,\n };\n }\n\n private requiredBgpDistinctProject(\n query: RdfLocalQuery,\n requiredPatterns: RdfQueryPattern[],\n filters: RdfQueryFilter[],\n ): string[] | undefined {\n const visibleVariables = new Set(requiredPatterns.flatMap((pattern) => variablesInPattern(pattern)));\n const projectedVariables = uniqueStrings(\n query.select && query.select.length > 0\n ? query.select\n : [...visibleVariables],\n );\n if (projectedVariables.some((variableName) => !visibleVariables.has(variableName))) {\n return undefined;\n }\n\n const requiredForRecheck = new Set(filters.flatMap((filter) => filterVariables(filter)));\n for (const order of query.orderBy ?? []) {\n requiredForRecheck.add(order.variable);\n }\n if ([...requiredForRecheck].some((variableName) => !projectedVariables.includes(variableName))) {\n return undefined;\n }\n return projectedVariables;\n }\n\n private canPushRequiredBgpFilters(\n requiredPatterns: RdfQueryPattern[],\n filters: RdfQueryFilter[],\n ): boolean {\n const variables = new Set(requiredPatterns.flatMap((pattern) => variablesInPattern(pattern)));\n return filters.every((filter) => (\n !filter.variable2\n && variables.has(filter.variable)\n && isPushdownFilter(filter)\n && this.compilePushdownFilter(filter.variable, [filter]) !== null\n ));\n }\n\n private canPushRequiredBgpOrder(\n requiredPatterns: RdfQueryPattern[],\n orderBy: NonNullable<RdfLocalQuery['orderBy']>,\n ): boolean {\n if (orderBy.length === 0) {\n return true;\n }\n const variables = new Set(requiredPatterns.flatMap((pattern) => variablesInPattern(pattern)));\n return orderBy.every((entry) => variables.has(entry.variable));\n }\n\n private reorderJoinPatterns(\n requiredPatterns: RdfQueryPattern[],\n compiledPatterns: CompiledJoinPattern[],\n filters: RdfQueryFilter[],\n ): { patterns: CompiledJoinPattern[]; reorderPlan?: string } {\n if (compiledPatterns.length < 2) {\n return { patterns: compiledPatterns };\n }\n\n const candidates = requiredPatterns.map((pattern, index) => {\n const compiled = this.compilePattern(pattern, {}, filters);\n return {\n index,\n variables: new Set(variablesInPattern(pattern)),\n estimatedRows: compiled ? this.index.estimateCardinality(compiled).rows : Number.MAX_SAFE_INTEGER,\n };\n });\n const remaining = [...candidates];\n const selected: typeof candidates = [];\n const selectedVariables = new Set<string>();\n\n while (remaining.length > 0) {\n const hasSelectedVariables = selectedVariables.size > 0;\n remaining.sort((left, right) => {\n const leftConnected = !hasSelectedVariables || hasSharedVariable(left.variables, selectedVariables);\n const rightConnected = !hasSelectedVariables || hasSharedVariable(right.variables, selectedVariables);\n return Number(rightConnected) - Number(leftConnected)\n || left.estimatedRows - right.estimatedRows\n || left.index - right.index;\n });\n const [next] = remaining.splice(0, 1);\n selected.push(next);\n for (const variableName of next.variables) {\n selectedVariables.add(variableName);\n }\n }\n\n const order = selected.map((entry) => entry.index);\n if (order.every((index, position) => index === position)) {\n return { patterns: compiledPatterns };\n }\n\n return {\n patterns: order.map((index) => compiledPatterns[index]),\n reorderPlan: `JoinReorder(${order.join('>')})`,\n };\n }\n\n private compileJoinPattern(\n pattern: RdfQueryPattern,\n filters: RdfQueryFilter[],\n ): CompiledJoinPattern | undefined {\n const variables: Partial<Record<RdfQueryPatternKey, string>> = {};\n for (const key of TERM_KEYS) {\n const value = pattern[key];\n if (isVariable(value)) {\n variables[key] = value.variable;\n }\n }\n\n const compiled = this.compilePattern(pattern, {}, filters);\n return compiled ? { pattern: compiled, variables } : undefined;\n }\n\n private tupleValuesForBinding(\n source: PatternRequiredSource,\n binding: RdfBindingRow,\n ): RdfQuadTupleConstraintSource | undefined {\n if (!source.tupleValues) {\n return undefined;\n }\n const rows = source.tupleValues.rows.filter((row) => (\n source.tupleValues?.variables.every((variableName) => {\n const existing = binding[variableName];\n const value = row[variableName];\n return !existing || !value || sameTerm(existing, value);\n })\n ));\n return tupleConstraintSourceForPattern({ ...source.tupleValues, rows }, source.pattern);\n }\n\n private joinTextSearch(\n input: RdfBindingRow[],\n source: TextRequiredSource,\n metrics: RdfLocalQueryMetrics,\n ): RdfBindingRow[] {\n metrics.indexChoices.push('text-chunk');\n const sourceVariable = source.pattern.source;\n if (sourceVariable && this.canUseBoundSourceSearch(input, source, sourceVariable)) {\n return this.joinTextSearchByBoundSource(input, source, sourceVariable, metrics);\n }\n\n const results = this.textSearchResults(source);\n metrics.scannedRows += results.length;\n\n const output: RdfBindingRow[] = [];\n for (const binding of input) {\n for (const result of results) {\n const next = bindTextSearchResult(binding, source.pattern, result);\n if (next) {\n output.push(next);\n }\n }\n }\n return output;\n }\n\n private joinVectorSearch(\n input: RdfBindingRow[],\n source: VectorRequiredSource,\n metrics: RdfLocalQueryMetrics,\n ): RdfBindingRow[] {\n metrics.indexChoices.push('vector-chunk');\n const sourceVariable = source.pattern.source;\n if (sourceVariable && this.canUseBoundSourceSearch(input, source, sourceVariable)) {\n return this.joinVectorSearchByBoundSource(input, source, sourceVariable, metrics);\n }\n\n const results = this.vectorSearchResults(source);\n metrics.scannedRows += results.length;\n\n const output: RdfBindingRow[] = [];\n for (const binding of input) {\n for (const result of results) {\n const next = bindVectorSearchResult(binding, source.pattern, result);\n if (next) {\n output.push(next);\n }\n }\n }\n return output;\n }\n\n private joinTextSearchByBoundSource(\n input: RdfBindingRow[],\n source: TextRequiredSource,\n sourceVariable: string,\n metrics: RdfLocalQueryMetrics,\n ): RdfBindingRow[] {\n const cache = new Map<string, RdfTextSearchResult[]>();\n const countedSources = new Set<string>();\n let globalResults: RdfTextSearchResult[] | undefined;\n let countedGlobal = false;\n const output: RdfBindingRow[] = [];\n\n for (const binding of input) {\n const term = binding[sourceVariable];\n let results: RdfTextSearchResult[];\n if (!term) {\n globalResults ??= this.textSearchResults(source);\n results = globalResults;\n if (!countedGlobal) {\n metrics.scannedRows += results.length;\n countedGlobal = true;\n }\n } else if (term.termType !== 'NamedNode') {\n continue;\n } else {\n if (!cache.has(term.value)) {\n cache.set(term.value, this.textSearchResults(source, term.value));\n }\n results = cache.get(term.value) ?? [];\n if (!countedSources.has(term.value)) {\n metrics.scannedRows += results.length;\n countedSources.add(term.value);\n }\n }\n\n for (const result of results) {\n const next = bindTextSearchResult(binding, source.pattern, result);\n if (next) {\n output.push(next);\n }\n }\n }\n\n return output;\n }\n\n private joinVectorSearchByBoundSource(\n input: RdfBindingRow[],\n source: VectorRequiredSource,\n sourceVariable: string,\n metrics: RdfLocalQueryMetrics,\n ): RdfBindingRow[] {\n const cache = new Map<string, RdfVectorSearchResult[]>();\n const countedSources = new Set<string>();\n let globalResults: RdfVectorSearchResult[] | undefined;\n let countedGlobal = false;\n const output: RdfBindingRow[] = [];\n\n for (const binding of input) {\n const term = binding[sourceVariable];\n let results: RdfVectorSearchResult[];\n if (!term) {\n globalResults ??= this.vectorSearchResults(source);\n results = globalResults;\n if (!countedGlobal) {\n metrics.scannedRows += results.length;\n countedGlobal = true;\n }\n } else if (term.termType !== 'NamedNode') {\n continue;\n } else {\n if (!cache.has(term.value)) {\n cache.set(term.value, this.vectorSearchResults(source, term.value));\n }\n results = cache.get(term.value) ?? [];\n if (!countedSources.has(term.value)) {\n metrics.scannedRows += results.length;\n countedSources.add(term.value);\n }\n }\n\n for (const result of results) {\n const next = bindVectorSearchResult(binding, source.pattern, result);\n if (next) {\n output.push(next);\n }\n }\n }\n\n return output;\n }\n\n private canUseBoundSourceSearch(\n input: RdfBindingRow[],\n source: TextRequiredSource | VectorRequiredSource,\n sourceVariable: string,\n ): boolean {\n if (hasSearchWindow(source)) {\n return false;\n }\n\n const boundSources = new Set<string>();\n let sawBound = false;\n\n for (const binding of input) {\n const term = binding[sourceVariable];\n if (!term) {\n continue;\n }\n\n sawBound = true;\n if (term.termType !== 'NamedNode') {\n continue;\n }\n\n boundSources.add(term.value);\n }\n\n return sawBound && boundSources.size > 0;\n }\n\n private textSearchResults(source: TextRequiredSource, exactSource?: string): RdfTextSearchResult[] {\n if (exactSource === undefined && source.results) {\n return source.results;\n }\n if (!this.textIndex) {\n throw new Error('RdfLocalQuery textSearch requires a configured RdfTextIndex');\n }\n\n const options = this.textSearchOptions(source.pattern, exactSource);\n const results = options ? this.textIndex.search(options) : [];\n if (exactSource === undefined) {\n source.results = results;\n }\n return results;\n }\n\n private vectorSearchResults(source: VectorRequiredSource, exactSource?: string): RdfVectorSearchResult[] {\n if (exactSource === undefined && source.results) {\n return source.results;\n }\n if (!this.vectorIndex) {\n throw new Error('RdfLocalQuery vectorSearch requires a configured RdfVectorIndex');\n }\n\n const options = this.vectorSearchOptions(source.pattern, exactSource);\n const results = options ? this.vectorIndex.search(options) : [];\n if (exactSource === undefined) {\n source.results = results;\n }\n return results;\n }\n\n private textSearchOptions(pattern: RdfTextSearchPattern, exactSource?: string): RdfTextSearchOptions {\n return {\n query: pattern.query,\n source: exactSource,\n workspace: pattern.scope?.workspace,\n sourcePrefix: pattern.scope?.sourcePrefix,\n limit: pattern.limit,\n offset: pattern.offset,\n orderBy: pattern.orderBy,\n };\n }\n\n private vectorSearchOptions(pattern: RdfVectorSearchPattern, exactSource?: string): RdfVectorSearchOptions {\n return {\n embedding: pattern.embedding,\n metric: pattern.metric,\n model: pattern.vectorModel,\n source: exactSource,\n workspace: pattern.scope?.workspace,\n sourcePrefix: pattern.scope?.sourcePrefix,\n limit: pattern.limit,\n offset: pattern.offset,\n threshold: pattern.threshold,\n orderBy: pattern.orderBy,\n };\n }\n\n private applyBinds(input: RdfBindingRow[], binds: RdfQueryBind[]): RdfBindingRow[] {\n let output = input;\n for (const bind of binds) {\n output = output.flatMap((binding) => {\n if (binding[bind.variable]) {\n return [];\n }\n const value = this.evaluateBindExpression(bind.expression, binding);\n return value ? [{ ...binding, [bind.variable]: value }] : [binding];\n });\n }\n return output;\n }\n\n private evaluateBindExpression(expression: RdfBindExpression, binding: RdfBindingRow): Term | undefined {\n switch (expression.type) {\n case 'term':\n return expression.term;\n case 'variable':\n return binding[expression.variable];\n case 'stringValue': {\n const value = binding[expression.variable];\n return value ? DataFactory.literal(value.value) as Term : undefined;\n }\n case 'stringLength': {\n const value = binding[expression.variable];\n return value ? countLiteral(value.value.length) : undefined;\n }\n case 'lowerCase': {\n const value = this.evaluateBindExpression(expression.expression, binding);\n return value ? DataFactory.literal(value.value.toLocaleLowerCase('en-US')) as Term : undefined;\n }\n case 'upperCase': {\n const value = this.evaluateBindExpression(expression.expression, binding);\n return value ? DataFactory.literal(value.value.toLocaleUpperCase('en-US')) as Term : undefined;\n }\n case 'substring': {\n const value = this.evaluateBindExpression(expression.expression, binding);\n const startTerm = this.evaluateBindExpression(expression.start, binding);\n const startValue = startTerm ? finiteBindNumber(startTerm) : undefined;\n const lengthTerm = expression.length ? this.evaluateBindExpression(expression.length, binding) : undefined;\n const lengthValue = lengthTerm ? finiteBindNumber(lengthTerm) : undefined;\n if (!value || startValue === undefined || (expression.length && lengthValue === undefined)) {\n return undefined;\n }\n const start = Math.max(0, Math.round(startValue) - 1);\n const length = lengthValue === undefined ? undefined : Math.max(0, Math.round(lengthValue));\n return DataFactory.literal(value.value.slice(start, length === undefined ? undefined : start + length)) as Term;\n }\n case 'concat': {\n const values = expression.expressions.map((item) => this.evaluateBindExpression(item, binding));\n return values.every((value): value is Term => Boolean(value))\n ? DataFactory.literal(values.map((value) => value.value).join('')) as Term\n : undefined;\n }\n case 'iri': {\n const value = this.evaluateBindExpression(expression.expression, binding);\n if (!value) {\n return undefined;\n }\n try {\n return DataFactory.namedNode(new URL(value.value, expression.base).href) as Term;\n } catch {\n return undefined;\n }\n }\n default: {\n const exhaustive: never = expression;\n throw new Error(`Unsupported RDF local BIND expression: ${JSON.stringify(exhaustive)}`);\n }\n }\n }\n\n private singleScanPushdown(\n query: RdfLocalQuery,\n requiredPatterns: RdfQueryPattern[],\n filters: RdfQueryFilter[],\n ): SingleScanPushdown | undefined {\n if (\n requiredPatterns.length !== 1\n || (query.values?.length ?? 0) > 0\n || (query.textSearch?.length ?? 0) > 0\n || (query.vectorSearch?.length ?? 0) > 0\n || (query.unions?.length ?? 0) > 0\n || (query.minus?.length ?? 0) > 0\n || (query.exists?.length ?? 0) > 0\n || (query.optional?.length ?? 0) > 0\n || queryAggregates(query).length > 0\n ) {\n return undefined;\n }\n\n const pattern = requiredPatterns[0];\n const order = this.scanOrderForPattern(pattern, query.orderBy ?? []);\n const orderRequested = (query.orderBy?.length ?? 0) > 0;\n const orderPushed = Boolean(order);\n const paginationRequested = query.limit !== undefined || query.offset !== undefined;\n const paginationPushed = paginationRequested\n && !query.distinct\n && (!orderRequested || orderPushed)\n && !patternHasRepeatedVariables(pattern)\n && this.canPushAllFiltersForPattern(pattern, filters);\n\n if (!orderPushed && !paginationPushed) {\n return undefined;\n }\n\n return {\n options: {\n ...(order ?? {}),\n ...(paginationPushed && query.limit !== undefined ? { limit: Math.max(0, query.limit) } : {}),\n ...(paginationPushed && query.offset !== undefined ? { offset: Math.max(0, query.offset) } : {}),\n },\n orderPushed,\n paginationPushed,\n };\n }\n\n private countPushdown(\n query: RdfLocalQuery,\n requiredPatterns: RdfQueryPattern[],\n filters: RdfQueryFilter[],\n ): { as: string; pattern: QuintPattern; distinctKey?: RdfQueryPatternKey; pushedDownFilters: number } | undefined {\n const aggregates = queryAggregates(query);\n if (\n aggregates.length !== 1\n || aggregates[0].type !== 'count'\n || (query.having?.length ?? 0) > 0\n || requiredPatterns.length !== 1\n || (query.values?.length ?? 0) > 0\n || (query.textSearch?.length ?? 0) > 0\n || (query.vectorSearch?.length ?? 0) > 0\n || (query.unions?.length ?? 0) > 0\n || (query.minus?.length ?? 0) > 0\n || (query.exists?.length ?? 0) > 0\n || (query.optional?.length ?? 0) > 0\n || (query.groupBy?.length ?? 0) > 0\n || query.orderBy?.length\n || query.limit !== undefined\n || query.offset !== undefined\n ) {\n return undefined;\n }\n\n const pattern = requiredPatterns[0];\n if (patternHasRepeatedVariables(pattern)) {\n return undefined;\n }\n const aggregate = aggregates[0];\n if (aggregate.variable && !variablesInPattern(pattern).includes(aggregate.variable)) {\n return undefined;\n }\n const distinctKey = aggregate.distinct\n ? this.distinctCountKey(pattern, aggregate.variable)\n : undefined;\n if (aggregate.distinct && !distinctKey) {\n return undefined;\n }\n if (!this.canPushAllFiltersForPattern(pattern, filters)) {\n return undefined;\n }\n\n const compiled = this.compilePattern(pattern, {}, filters);\n return compiled\n ? {\n as: aggregate.as,\n pattern: compiled,\n distinctKey,\n pushedDownFilters: compiled.pushedDownFilters,\n }\n : undefined;\n }\n\n private joinCountPushdown(\n query: RdfLocalQuery,\n requiredPatterns: RdfQueryPattern[],\n filters: RdfQueryFilter[],\n aggregates: RdfQueryAggregate[],\n ): JoinCountPushdown | undefined {\n if (\n aggregates.length === 0\n || requiredPatterns.length < 2\n || (query.having?.length ?? 0) > 0\n || (query.groupBy?.length ?? 0) > 0\n || (query.values?.length ?? 0) > 0\n || (query.textSearch?.length ?? 0) > 0\n || (query.vectorSearch?.length ?? 0) > 0\n || (query.unions?.length ?? 0) > 0\n || (query.minus?.length ?? 0) > 0\n || (query.exists?.length ?? 0) > 0\n || (query.optional?.length ?? 0) > 0\n || (query.binds?.length ?? 0) > 0\n || query.orderBy?.length\n || query.limit !== undefined\n || query.offset !== undefined\n || query.distinct\n ) {\n return undefined;\n }\n if (aggregates.some((aggregate) => aggregate.type !== 'count')) {\n return undefined;\n }\n if (!this.canPushRequiredBgpFilters(requiredPatterns, filters)) {\n return undefined;\n }\n\n const visibleVariables = new Set(requiredPatterns.flatMap((pattern) => variablesInPattern(pattern)));\n if (aggregates.some((aggregate) => aggregate.variable && !visibleVariables.has(aggregate.variable))) {\n return undefined;\n }\n const sharedVariables = variablesSharedAcrossPatterns(requiredPatterns);\n if (sharedVariables.size === 0) {\n return undefined;\n }\n\n const compiled = requiredPatterns.map((pattern) => this.compileJoinPattern(pattern, filters));\n if (compiled.some((entry) => !entry)) {\n return undefined;\n }\n const reordered = this.reorderJoinPatterns(requiredPatterns, compiled as CompiledJoinPattern[], filters);\n return {\n patterns: reordered.patterns,\n ...(reordered.reorderPlan ? { reorderPlan: reordered.reorderPlan } : {}),\n pushedDownFilters: filters.length,\n };\n }\n\n private joinBasicAggregatePushdown(\n query: RdfLocalQuery,\n requiredPatterns: RdfQueryPattern[],\n filters: RdfQueryFilter[],\n aggregates: RdfQueryAggregate[],\n ): JoinBasicAggregatePushdown | undefined {\n if (\n aggregates.length === 0\n || !aggregates.some((aggregate) => aggregate.type !== 'count')\n || requiredPatterns.length === 0\n || (query.having?.length ?? 0) > 0\n || (query.groupBy?.length ?? 0) > 0\n || (query.values?.length ?? 0) > 0\n || (query.textSearch?.length ?? 0) > 0\n || (query.vectorSearch?.length ?? 0) > 0\n || (query.unions?.length ?? 0) > 0\n || (query.minus?.length ?? 0) > 0\n || (query.exists?.length ?? 0) > 0\n || (query.optional?.length ?? 0) > 0\n || (query.binds?.length ?? 0) > 0\n || query.orderBy?.length\n || query.limit !== undefined\n || query.offset !== undefined\n || query.distinct\n ) {\n return undefined;\n }\n\n if (aggregates.some((aggregate) => aggregate.distinct || aggregate.type !== 'count' && !aggregate.variable)) {\n return undefined;\n }\n const visibleVariables = new Set(requiredPatterns.flatMap((pattern) => variablesInPattern(pattern)));\n if (aggregates.some((aggregate) => aggregate.variable && !visibleVariables.has(aggregate.variable))) {\n return undefined;\n }\n const numericAggregateVariables = new Set(aggregates\n .filter((aggregate) => aggregate.type !== 'count')\n .map((aggregate) => aggregate.variable)\n .filter((variableName): variableName is string => Boolean(variableName)));\n if (!this.canPushAggregateFilters(requiredPatterns, filters, numericAggregateVariables)) {\n return undefined;\n }\n const sharedVariables = variablesSharedAcrossPatterns(requiredPatterns);\n if (requiredPatterns.length > 1 && sharedVariables.size === 0) {\n return undefined;\n }\n\n const compiled = requiredPatterns.map((pattern) => this.compileJoinPattern(pattern, filters));\n if (compiled.some((entry) => !entry)) {\n return undefined;\n }\n const reordered = this.reorderJoinPatterns(requiredPatterns, compiled as CompiledJoinPattern[], filters);\n return {\n patterns: reordered.patterns,\n ...(reordered.reorderPlan ? { reorderPlan: reordered.reorderPlan } : {}),\n pushedDownFilters: filters.length,\n };\n }\n\n private canPushAggregateFilters(\n requiredPatterns: RdfQueryPattern[],\n filters: RdfQueryFilter[],\n numericAggregateVariables: Set<string>,\n ): boolean {\n const variables = new Set(requiredPatterns.flatMap((pattern) => variablesInPattern(pattern)));\n return filters.every((filter) => {\n if (!variables.has(filter.variable) || filter.variable2) {\n return false;\n }\n if (isNumericGuardFilter(filter) && numericAggregateVariables.has(filter.variable)) {\n return true;\n }\n return isPushdownFilter(filter) && this.compilePushdownFilter(filter.variable, [filter]) !== null;\n });\n }\n\n private hasNumericAggregateGuards(\n filters: RdfQueryFilter[],\n numericAggregateVariables: Set<string>,\n ): boolean {\n return [...numericAggregateVariables].every((variableName) => (\n filters.some((filter) => isNumericGuardFilter(filter) && filter.variable === variableName)\n ));\n }\n\n private groupAggregatePushdown(\n query: RdfLocalQuery,\n requiredPatterns: RdfQueryPattern[],\n filters: RdfQueryFilter[],\n aggregates: RdfQueryAggregate[],\n ): GroupAggregatePushdown | undefined {\n if (\n aggregates.length === 0\n || (query.groupBy?.length ?? 0) === 0\n || (query.values?.length ?? 0) > 0\n || (query.textSearch?.length ?? 0) > 0\n || (query.vectorSearch?.length ?? 0) > 0\n || (query.unions?.length ?? 0) > 0\n || (query.minus?.length ?? 0) > 0\n || (query.exists?.length ?? 0) > 0\n || (query.optional?.length ?? 0) > 0\n || (query.binds?.length ?? 0) > 0\n || query.distinct\n ) {\n return undefined;\n }\n if (aggregates.some((aggregate) => (\n aggregate.type !== 'count'\n && (!aggregate.variable || aggregate.distinct)\n ))) {\n return undefined;\n }\n const numericAggregateVariables = new Set(aggregates\n .filter((aggregate) => aggregate.type !== 'count')\n .map((aggregate) => aggregate.variable)\n .filter((variableName): variableName is string => Boolean(variableName)));\n if (\n !this.hasNumericAggregateGuards(filters, numericAggregateVariables)\n || !this.canPushAggregateFilters(requiredPatterns, filters, numericAggregateVariables)\n ) {\n return undefined;\n }\n\n const visibleVariables = new Set(requiredPatterns.flatMap((pattern) => variablesInPattern(pattern)));\n if ((query.groupBy ?? []).some((variableName) => !visibleVariables.has(variableName))) {\n return undefined;\n }\n if (aggregates.some((aggregate) => aggregate.variable && !visibleVariables.has(aggregate.variable))) {\n return undefined;\n }\n const countOnly = numericAggregateVariables.size === 0;\n const aggregateVariables = new Set(aggregates.map((aggregate) => aggregate.as));\n if ((query.orderBy ?? []).some((entry) => (\n !(query.groupBy ?? []).includes(entry.variable) && !aggregateVariables.has(entry.variable)\n ))) {\n return undefined;\n }\n const orderPushed = (query.orderBy?.length ?? 0) > 0;\n const havingPushdown = this.groupAggregateHavingPushdown(query.having ?? [], aggregateVariables);\n const havingPushed = (query.having?.length ?? 0) === 0 || havingPushdown !== undefined;\n const paginationPushed = (query.limit !== undefined || query.offset !== undefined) && havingPushed;\n\n const sharedVariables = variablesSharedAcrossPatterns(requiredPatterns);\n if (requiredPatterns.length > 1 && sharedVariables.size === 0) {\n return undefined;\n }\n\n const compiled = requiredPatterns.map((pattern) => this.compileJoinPattern(pattern, filters));\n if (compiled.some((entry) => !entry)) {\n return undefined;\n }\n const reordered = this.reorderJoinPatterns(requiredPatterns, compiled as CompiledJoinPattern[], filters);\n return {\n patterns: reordered.patterns,\n ...(reordered.reorderPlan ? { reorderPlan: reordered.reorderPlan } : {}),\n ...(havingPushdown && havingPushdown.length > 0 ? { having: havingPushdown } : {}),\n pushedDownFilters: filters.length,\n pushedDownHaving: havingPushdown?.length ?? 0,\n orderPushed,\n paginationPushed,\n countOnly,\n };\n }\n\n private groupAggregateHavingPushdown(\n having: RdfQueryFilter[],\n aggregateVariables: Set<string>,\n ): RdfQuadJoinGroupAggregateHaving[] | undefined {\n const compiled: RdfQuadJoinGroupAggregateHaving[] = [];\n for (const filter of having) {\n if (\n !aggregateVariables.has(filter.variable)\n || filter.operand\n || filter.variable2\n || filter.value === undefined\n || !isGroupAggregateHavingOperator(filter.operator)\n ) {\n return undefined;\n }\n const value = filterValueToNumber(filter.value);\n if (value === undefined) {\n return undefined;\n }\n compiled.push({\n aggregate: filter.variable,\n operator: filter.operator,\n value,\n });\n }\n return compiled;\n }\n\n private distinctCountKey(pattern: RdfQueryPattern, variableName?: string): RdfQueryPatternKey | undefined {\n if (!variableName) {\n return undefined;\n }\n const keys = TERM_KEYS.filter((key) => {\n const value = pattern[key];\n return isVariable(value) && value.variable === variableName;\n });\n return keys.length === 1 ? keys[0] : undefined;\n }\n\n private scanOrderForPattern(\n pattern: RdfQueryPattern,\n orderBy: NonNullable<RdfLocalQuery['orderBy']>,\n ): Pick<RdfQuadScanOptions, 'order' | 'orderDirections' | 'reverse'> | undefined {\n if (orderBy.length === 0) {\n return undefined;\n }\n\n const order = orderBy.map((entry) => termKeyForVariable(pattern, entry.variable));\n if (order.some((key) => key === undefined)) {\n return undefined;\n }\n\n const orderDirections = orderBy.map((entry) => entry.direction ?? 'asc');\n const firstDirection = orderDirections[0];\n const sameDirection = orderDirections.every((direction) => direction === firstDirection);\n\n return {\n order: order as RdfQueryPatternKey[],\n ...(sameDirection\n ? { reverse: firstDirection === 'desc' || undefined }\n : { orderDirections }),\n };\n }\n\n private canPushAllFiltersForPattern(pattern: RdfQueryPattern, filters: RdfQueryFilter[]): boolean {\n const variables = new Set(variablesInPattern(pattern));\n return filters.every((filter) => (\n variables.has(filter.variable)\n && isPushdownFilter(filter)\n && this.compilePushdownFilter(filter.variable, [filter]) !== null\n ));\n }\n\n private requiredFiltersNeedingPostApply(\n query: RdfLocalQuery,\n requiredPatterns: RdfQueryPattern[],\n filters: RdfQueryFilter[],\n requiredBgpPushdown?: RequiredBgpPushdown,\n ): RdfQueryFilter[] {\n if (filters.length === 0) {\n return filters;\n }\n if (requiredBgpPushdown) {\n return [];\n }\n if (!this.canElideRequiredPatternFilterRechecks(query, requiredPatterns)) {\n return filters;\n }\n\n const requiredVariables = new Set(requiredPatterns.flatMap((pattern) => variablesInPattern(pattern)));\n return filters.filter((filter) => !(\n requiredVariables.has(filter.variable)\n && this.compilePushdownFilter(filter.variable, [filter]) !== null\n ));\n }\n\n private canElideRequiredPatternFilterRechecks(\n query: RdfLocalQuery,\n requiredPatterns: RdfQueryPattern[],\n ): boolean {\n return requiredPatterns.length > 0\n && (query.values?.length ?? 0) === 0\n && (query.textSearch?.length ?? 0) === 0\n && (query.vectorSearch?.length ?? 0) === 0\n && (query.unions?.length ?? 0) === 0\n && (query.minus?.length ?? 0) === 0\n && (query.exists?.length ?? 0) === 0\n && (query.optional?.length ?? 0) === 0\n && (query.binds?.length ?? 0) === 0\n && queryAggregates(query).length === 0;\n }\n\n private compilePattern(\n pattern: RdfQueryPattern,\n binding: RdfBindingRow,\n filters: RdfQueryFilter[],\n ): CompiledPattern | null {\n const compiled: QuintPattern = {};\n const pushedDownFilterIndexes = new Set<number>();\n for (const key of TERM_KEYS) {\n const value = pattern[key];\n if (!value) continue;\n if (isVariable(value)) {\n const bound = binding[value.variable];\n if (bound) {\n compiled[key] = bound;\n } else {\n const pushdown = this.compilePushdownFilterWithIndexes(value.variable, filters);\n if (pushdown) {\n compiled[key] = pushdown.pattern;\n pushdown.filterIndexes.forEach((index) => pushedDownFilterIndexes.add(index));\n }\n }\n } else {\n compiled[key] = value;\n }\n }\n return isConsistentPattern(compiled)\n ? {\n ...compiled,\n pushedDownFilters: pushedDownFilterIndexes.size,\n pushedDownFilterIndexes: [...pushedDownFilterIndexes],\n }\n : null;\n }\n\n private bindQuad(pattern: RdfQueryPattern, binding: RdfBindingRow, quad: any): RdfBindingRow | null {\n const next = { ...binding };\n for (const key of TERM_KEYS) {\n const value = pattern[key];\n if (!isVariable(value)) continue;\n const term = quad[key] as Term;\n const existing = next[value.variable];\n if (existing && !sameTerm(existing, term)) {\n return null;\n }\n next[value.variable] = term;\n }\n return next;\n }\n\n private countBindings(bindings: RdfBindingRow[], variable?: string, distinct?: boolean): number {\n if (!distinct) {\n return variable ? bindings.filter((binding) => binding[variable]).length : bindings.length;\n }\n if (!variable) {\n return new Set(bindings.map((binding) => bindingKey(binding))).size;\n }\n return new Set(\n bindings\n .map((binding) => binding[variable])\n .filter((term): term is Term => Boolean(term))\n .map((term) => termToId(term as any)),\n ).size;\n }\n\n private aggregateBindings(\n bindings: RdfBindingRow[],\n aggregates: RdfQueryAggregate[],\n ): { binding: RdfBindingRow; firstCount: number } {\n const binding: RdfBindingRow = {};\n let firstCount = 0;\n aggregates.forEach((aggregate, index) => {\n const count = aggregate.type === 'count'\n ? this.countBindings(bindings, aggregate.variable, aggregate.distinct)\n : 0;\n if (index === 0) {\n firstCount = count;\n }\n const term = this.aggregateLiteral(bindings, aggregate);\n if (term) {\n binding[aggregate.as] = term;\n }\n });\n return { binding, firstCount };\n }\n\n private groupAggregateBindings(\n bindings: RdfBindingRow[],\n groupBy: string[],\n aggregates: RdfQueryAggregate[],\n ): RdfBindingRow[] {\n const groups = new Map<string, RdfBindingRow[]>();\n for (const binding of bindings) {\n const groupKey = groupBy.map((variableName) => {\n const term = binding[variableName];\n return term ? termToId(term as any) : '__UNBOUND__';\n }).join('\\u001f');\n const existing = groups.get(groupKey);\n if (existing) {\n existing.push(binding);\n } else {\n groups.set(groupKey, [binding]);\n }\n }\n\n return [...groups.values()].map((groupBindings) => {\n const first = groupBindings[0];\n const grouped: RdfBindingRow = {};\n for (const variableName of groupBy) {\n if (first[variableName]) {\n grouped[variableName] = first[variableName];\n }\n }\n for (const aggregate of aggregates) {\n const term = this.aggregateLiteral(groupBindings, aggregate);\n if (term) {\n grouped[aggregate.as] = term;\n }\n }\n return grouped;\n });\n }\n\n private aggregateLiteral(bindings: RdfBindingRow[], aggregate: RdfQueryAggregate): Term | undefined {\n if (aggregate.type === 'count') {\n return countLiteral(this.countBindings(bindings, aggregate.variable, aggregate.distinct));\n }\n const values = this.numericAggregateValues(bindings, aggregate.variable, aggregate.distinct);\n if (values.length === 0) {\n return aggregate.type === 'sum' ? decimalLiteral(0) : undefined;\n }\n switch (aggregate.type) {\n case 'sum':\n return decimalLiteral(values.reduce((total, value) => total + value, 0));\n case 'avg':\n return decimalLiteral(values.reduce((total, value) => total + value, 0) / values.length);\n case 'min':\n return decimalLiteral(Math.min(...values));\n case 'max':\n return decimalLiteral(Math.max(...values));\n default: {\n const exhaustive: never = aggregate.type;\n throw new Error(`Unsupported RDF local aggregate type: ${exhaustive}`);\n }\n }\n }\n\n private numericAggregateValues(bindings: RdfBindingRow[], variable?: string, distinct?: boolean): number[] {\n if (!variable) {\n return [];\n }\n const values: number[] = [];\n const seen = new Set<string>();\n for (const binding of bindings) {\n const term = binding[variable];\n if (!term || !isNumericTerm(term)) {\n continue;\n }\n if (distinct) {\n const key = termToId(term as any);\n if (seen.has(key)) {\n continue;\n }\n seen.add(key);\n }\n values.push(rdfNumericValue(term.value));\n }\n return values;\n }\n\n private compilePushdownFilter(variableName: string, filters: RdfQueryFilter[]): QuintPattern[keyof QuintPattern] | null {\n return this.compilePushdownFilterWithIndexes(variableName, filters)?.pattern ?? null;\n }\n\n private compilePushdownFilterWithIndexes(\n variableName: string,\n filters: RdfQueryFilter[],\n ): { pattern: QuintPattern[keyof QuintPattern]; filterIndexes: number[] } | null {\n const pushable = filters\n .map((filter, index) => ({ filter, index }))\n .filter(({ filter }) => (\n filter.variable === variableName\n && isPushdownFilter(filter)\n ));\n if (pushable.length === 0) {\n return null;\n }\n const operators: Record<string, unknown> = {};\n const filterIndexes: number[] = [];\n for (const { filter, index } of pushable) {\n switch (filter.operator) {\n case '$eq':\n case '$ne':\n if (filter.value === undefined) return null;\n if (!isTerm(filter.value as any)) return null;\n operators[filter.operator] = filter.value;\n filterIndexes.push(index);\n break;\n case '$gt':\n case '$gte':\n case '$lt':\n case '$lte':\n if (filter.value === undefined) return null;\n operators[filter.operator] = filter.value;\n filterIndexes.push(index);\n break;\n case '$in':\n case '$notIn':\n if (!filter.values || filter.values.length === 0) return null;\n if (filter.values.some((value) => !isTerm(value as any))) return null;\n operators[filter.operator] = filter.values;\n filterIndexes.push(index);\n break;\n case '$sameTerm':\n if (filter.variable2 || filter.value === undefined) return null;\n if (!isTerm(filter.value as any)) return null;\n operators.$eq = filter.value;\n filterIndexes.push(index);\n break;\n case '$termType':\n if (typeof filter.value !== 'string') return null;\n if (!['iri', 'blank', 'literal', 'numeric'].includes(filter.value)) return null;\n operators.$termType = filter.value;\n filterIndexes.push(index);\n break;\n case '$lang':\n if (typeof filter.value !== 'string') return null;\n operators.$language = filter.value;\n filterIndexes.push(index);\n break;\n case '$notLang':\n if (typeof filter.value !== 'string') return null;\n operators.$notLanguage = filter.value;\n filterIndexes.push(index);\n break;\n case '$langMatches':\n if (typeof filter.value !== 'string') return null;\n operators.$langMatches = filter.value;\n filterIndexes.push(index);\n break;\n case '$datatype':\n if (filter.value === undefined || !isTerm(filter.value as any)) return null;\n if ((filter.value as Term).termType !== 'NamedNode') return null;\n operators.$datatype = filter.value;\n filterIndexes.push(index);\n break;\n case '$notDatatype':\n if (filter.value === undefined || !isTerm(filter.value as any)) return null;\n if ((filter.value as Term).termType !== 'NamedNode') return null;\n operators.$notDatatype = filter.value;\n filterIndexes.push(index);\n break;\n case '$startsWith':\n if (typeof filter.value !== 'string') return null;\n operators.$startsWith = filter.value;\n filterIndexes.push(index);\n break;\n case '$contains':\n case '$endsWith':\n if (typeof filter.value !== 'string') return null;\n operators[filter.operator] = filter.value;\n filterIndexes.push(index);\n break;\n case '$regex':\n if (typeof filter.value !== 'string') return null;\n if (filter.flags) return null;\n operators.$regex = filter.value;\n filterIndexes.push(index);\n break;\n default:\n return null;\n }\n }\n return Object.keys(operators).length > 0\n ? { pattern: operators as any, filterIndexes }\n : null;\n }\n\n private matchesNewlyBoundFilters(\n binding: RdfBindingRow,\n previousBinding: RdfBindingRow,\n filters: RdfQueryFilter[],\n ): boolean {\n const newlyBound = filters.filter((filter) => {\n const variables = filterVariables(filter);\n return variables.every((variableName) => binding[variableName])\n && variables.some((variableName) => !previousBinding[variableName]);\n });\n return this.matchesFilters(binding, newlyBound);\n }\n\n private matchesFilters(binding: RdfBindingRow, filters: RdfQueryFilter[]): boolean {\n return filters.every((filter) => this.matchesFilter(binding, filter));\n }\n\n private matchesFilter(binding: RdfBindingRow, filter: RdfQueryFilter): boolean {\n const value = binding[filter.variable];\n if (filter.operator === '$bound') {\n return Boolean(filter.value) ? Boolean(value) : !value;\n }\n if (!value) {\n return false;\n }\n const comparisonValue = filterOperandValue(value, filter.operand);\n\n switch (filter.operator) {\n case '$eq':\n if (filter.variable2) return this.compareVariableFilter(binding, comparisonValue, filter, (comparison) => comparison === 0);\n return filter.value !== undefined && sameTermOrLexical(comparisonValue, filter.value);\n case '$ne':\n if (filter.variable2) return this.compareVariableFilter(binding, comparisonValue, filter, (comparison) => comparison !== 0);\n return filter.value === undefined || !sameTermOrLexical(comparisonValue, filter.value);\n case '$gt':\n if (filter.variable2) return this.compareVariableFilter(binding, comparisonValue, filter, (comparison) => comparison > 0);\n return compareTermsForFilter(comparisonValue, filter.value) > 0;\n case '$gte':\n if (filter.variable2) return this.compareVariableFilter(binding, comparisonValue, filter, (comparison) => comparison >= 0);\n return compareTermsForFilter(comparisonValue, filter.value) >= 0;\n case '$lt':\n if (filter.variable2) return this.compareVariableFilter(binding, comparisonValue, filter, (comparison) => comparison < 0);\n return compareTermsForFilter(comparisonValue, filter.value) < 0;\n case '$lte':\n if (filter.variable2) return this.compareVariableFilter(binding, comparisonValue, filter, (comparison) => comparison <= 0);\n return compareTermsForFilter(comparisonValue, filter.value) <= 0;\n case '$in':\n return (filter.values ?? []).some((candidate) => sameTermOrLexical(comparisonValue, candidate));\n case '$notIn':\n return !(filter.values ?? []).some((candidate) => sameTermOrLexical(comparisonValue, candidate));\n case '$startsWith': {\n const text = filterStringValue(value, comparisonValue);\n return typeof filter.value === 'string' && text.startsWith(filter.value);\n }\n case '$contains': {\n const text = filterStringValue(value, comparisonValue);\n return typeof filter.value === 'string' && text.includes(filter.value);\n }\n case '$endsWith': {\n const text = filterStringValue(value, comparisonValue);\n return typeof filter.value === 'string' && text.endsWith(filter.value);\n }\n case '$regex': {\n const text = filterStringValue(value, comparisonValue);\n return typeof filter.value === 'string' && new RegExp(filter.value, filter.flags).test(text);\n }\n case '$termType':\n return typeof filter.value === 'string' && matchesTermType(value, filter.value);\n case '$sameTerm': {\n const right = filter.variable2 ? binding[filter.variable2] : filter.value;\n return Boolean(right && isTerm(right as any) && sameTerm(value, right as Term));\n }\n case '$lang':\n return typeof filter.value === 'string'\n && value.termType === 'Literal'\n && value.language === filter.value;\n case '$notLang':\n return typeof filter.value === 'string'\n && value.termType === 'Literal'\n && value.language !== filter.value;\n case '$langMatches':\n return typeof filter.value === 'string'\n && value.termType === 'Literal'\n && langMatches(value.language, filter.value);\n case '$datatype':\n return filter.value !== undefined\n && value.termType === 'Literal'\n && sameTermOrLexical(value.datatype, filter.value);\n case '$notDatatype':\n return filter.value !== undefined\n && value.termType === 'Literal'\n && !sameTermOrLexical(value.datatype, filter.value);\n default: {\n const exhaustive: never = filter.operator;\n throw new Error(`Unsupported RDF local query filter operator: ${exhaustive}`);\n }\n }\n }\n\n private compareVariableFilter(\n binding: RdfBindingRow,\n comparisonValue: Term | number | string,\n filter: RdfQueryFilter,\n predicate: (comparison: number) => boolean,\n ): boolean {\n if (!filter.variable2) {\n return false;\n }\n const right = binding[filter.variable2];\n if (!right) {\n return false;\n }\n const rightValue = filterOperandValue(right, filter.operand);\n return predicate(compareFilterValues(comparisonValue, rightValue));\n }\n}\n\nexport function variable(variableName: string): RdfQueryVariable {\n return { variable: variableName };\n}\n\nfunction isVariable(value: RdfQueryTermPattern | undefined): value is RdfQueryVariable {\n return Boolean(value && typeof value === 'object' && 'variable' in value);\n}\n\nfunction variablesInPattern(pattern: RdfQueryPattern): string[] {\n return TERM_KEYS\n .map((key) => pattern[key])\n .filter(isVariable)\n .map((value) => value.variable);\n}\n\nfunction patternHasRepeatedVariables(pattern: RdfQueryPattern): boolean {\n const seen = new Set<string>();\n for (const variableName of variablesInPattern(pattern)) {\n if (seen.has(variableName)) {\n return true;\n }\n seen.add(variableName);\n }\n return false;\n}\n\nfunction variablesSharedAcrossPatterns(patterns: RdfQueryPattern[]): Set<string> {\n const counts = new Map<string, number>();\n for (const pattern of patterns) {\n for (const variableName of new Set(variablesInPattern(pattern))) {\n counts.set(variableName, (counts.get(variableName) ?? 0) + 1);\n }\n }\n return new Set([...counts.entries()]\n .filter(([, count]) => count > 1)\n .map(([variableName]) => variableName));\n}\n\nfunction hasSharedVariable(left: Set<string>, right: Set<string>): boolean {\n for (const variableName of left) {\n if (right.has(variableName)) {\n return true;\n }\n }\n return false;\n}\n\nfunction filterVariables(filter: RdfQueryFilter): string[] {\n return filter.variable2\n ? [filter.variable, filter.variable2]\n : [filter.variable];\n}\n\nfunction buildRequiredSources(patterns: RdfQueryPattern[], query: RdfLocalQuery): RequiredSource[] {\n const patternSources = patterns.map((pattern, originalIndex): PatternRequiredSource => ({\n kind: 'pattern',\n pattern,\n originalIndex,\n }));\n const remainingValues: RequiredSource[] = [];\n\n for (const [originalIndex, source] of (query.values ?? []).entries()) {\n const patternSource = patternSources.find((candidate) => (\n !candidate.tupleValues && canAttachTupleValuesToPattern(source, candidate.pattern)\n ));\n if (patternSource) {\n patternSource.tupleValues = source;\n continue;\n }\n remainingValues.push({\n kind: 'values',\n source,\n originalIndex,\n });\n }\n\n return [\n ...remainingValues,\n ...patternSources,\n ...(query.textSearch ?? []).map((pattern, originalIndex): RequiredSource => ({\n kind: 'text',\n pattern,\n originalIndex,\n })),\n ...(query.vectorSearch ?? []).map((pattern, originalIndex): RequiredSource => ({\n kind: 'vector',\n pattern,\n originalIndex,\n })),\n ];\n}\n\nfunction variablesInRequiredSource(source: RequiredSource): string[] {\n if (source.kind === 'pattern') {\n return uniqueStrings([\n ...variablesInPattern(source.pattern),\n ...(source.tupleValues?.variables ?? []),\n ]);\n }\n if (source.kind === 'values') {\n return source.source.variables;\n }\n\n return [\n source.pattern.source,\n source.pattern.chunk,\n source.pattern.content,\n source.pattern.heading,\n source.pattern.score,\n source.kind === 'vector' ? source.pattern.distance : undefined,\n source.pattern.workspace,\n source.pattern.localPath,\n source.pattern.contentType,\n source.pattern.ordinal,\n source.pattern.level,\n source.pattern.startOffset,\n source.pattern.endOffset,\n source.kind === 'vector' ? source.pattern.model : undefined,\n ].filter((value): value is string => Boolean(value));\n}\n\nfunction uniqueStrings(values: string[]): string[] {\n return [...new Set(values)];\n}\n\nfunction filtersWithoutIndexes(filters: RdfQueryFilter[], indexes: number[]): RdfQueryFilter[] {\n if (indexes.length === 0) {\n return filters;\n }\n const pushedDown = new Set(indexes);\n return filters.filter((_filter, index) => !pushedDown.has(index));\n}\n\nfunction joinValuesSource(input: RdfBindingRow[], source: RdfValuesBindingSource): RdfBindingRow[] {\n const output: RdfBindingRow[] = [];\n for (const binding of input) {\n for (const row of source.rows) {\n const next = mergeTupleValuesBinding(binding, source.variables, row);\n if (next) {\n output.push(next);\n }\n }\n }\n return output;\n}\n\nfunction mergeTupleValuesBinding(\n binding: RdfBindingRow,\n variables: string[],\n row: RdfBindingRow,\n): RdfBindingRow | null {\n const next = { ...binding };\n for (const variableName of variables) {\n const value = row[variableName];\n if (!value) {\n continue;\n }\n const existing = next[variableName];\n if (existing && !sameTerm(existing, value)) {\n return null;\n }\n next[variableName] = value;\n }\n return next;\n}\n\nfunction canAttachTupleValuesToPattern(source: RdfValuesBindingSource, pattern: RdfQueryPattern): boolean {\n if (source.variables.length < 2 || source.rows.length === 0) {\n return false;\n }\n const slots = new Set<RdfQueryPatternKey>();\n for (const variableName of source.variables) {\n if (source.rows.some((row) => !row[variableName])) {\n return false;\n }\n const variableSlots = TERM_KEYS.filter((key) => {\n const value = pattern[key];\n return isVariable(value) && value.variable === variableName;\n });\n if (variableSlots.length !== 1) {\n return false;\n }\n slots.add(variableSlots[0]);\n }\n return slots.size === source.variables.length\n && source.rows.every((row) => source.variables.every((variableName) => Boolean(row[variableName])));\n}\n\nfunction tupleConstraintSourceForPattern(\n source: RdfValuesBindingSource,\n pattern: RdfQueryPattern,\n): RdfQuadTupleConstraintSource {\n const columns = source.variables.map((variableName) => {\n const key = termKeyForVariable(pattern, variableName);\n if (!key) {\n throw new Error(`Tuple VALUES variable is not bound by pattern: ${variableName}`);\n }\n return key;\n });\n\n return {\n columns,\n rows: source.rows.map((row) => {\n const constraint: RdfQuadTupleConstraintSource['rows'][number] = {};\n source.variables.forEach((variableName, index) => {\n constraint[columns[index]] = row[variableName];\n });\n return constraint;\n }),\n };\n}\n\nfunction normalizeOptionalGroup(group: RdfQueryPattern[] | RdfOptionalQueryGroup): RdfOptionalQueryGroup {\n return Array.isArray(group) ? { patterns: group } : group;\n}\n\nfunction compiledPatternKey(pattern: QuintPattern): string {\n return TERM_KEYS\n .map((key) => `${key}:${termMatchKey(pattern[key])}`)\n .join('|');\n}\n\nfunction termMatchKey(match: QuintPattern[keyof QuintPattern] | undefined): string {\n if (!match) {\n return '*';\n }\n if (isTerm(match as any)) {\n return termToId(match as any);\n }\n return JSON.stringify(match, (_key, value) => isTerm(value as any) ? termToId(value as any) : value);\n}\n\nfunction termKeyForVariable(pattern: RdfQueryPattern, variableName: string): RdfQueryPatternKey | undefined {\n return TERM_KEYS.find((key) => {\n const value = pattern[key];\n return isVariable(value) && value.variable === variableName;\n });\n}\n\nfunction isConsistentPattern(pattern: QuintPattern): boolean {\n for (const key of TERM_KEYS) {\n const value = pattern[key];\n if (!value || isTerm(value as TermMatch)) {\n continue;\n }\n }\n return true;\n}\n\nfunction sameTerm(left: Term, right: Term): boolean {\n return termToId(left as any) === termToId(right as any);\n}\n\nfunction filterOperandValue(value: Term, operand: RdfQueryFilter['operand']): Term | number | string {\n switch (operand) {\n case 'stringLength':\n return value.value.length;\n case 'stringValue':\n return value.value;\n case 'lowerStringValue':\n return value.value.toLowerCase();\n case 'upperStringValue':\n return value.value.toUpperCase();\n default:\n return value;\n }\n}\n\nfunction filterStringValue(value: Term, comparisonValue: Term | number | string): string {\n return typeof comparisonValue === 'string' ? comparisonValue : value.value;\n}\n\nfunction sameTermOrLexical(left: Term | number | string, right: RdfQueryFilterValue): boolean {\n if (typeof left === 'number') {\n if (isNumericFilterValue(right)) {\n return left === rdfNumericValue(isTerm(right as any) ? (right as Term).value : String(right));\n }\n return String(left) === String(right);\n }\n if (typeof left === 'string') {\n return left === (isTerm(right as any) ? (right as Term).value : String(right));\n }\n return isTerm(right as any) ? sameTerm(left, right as Term) : left.value === String(right);\n}\n\nfunction compareTermsForFilter(left: Term | number | string, right: RdfQueryFilterValue | undefined): number {\n if (right === undefined) {\n return 1;\n }\n return compareFilterValues(left, isTerm(right as any) ? right as Term : right);\n}\n\nfunction compareFilterValues(left: Term | number | string, right: Term | number | string | boolean): number {\n if (typeof left === 'number') {\n if (isNumericFilterValue(right)) {\n return left - rdfNumericValue(isTerm(right as any) ? (right as Term).value : String(right));\n }\n return String(left).localeCompare(String(right));\n }\n if (typeof left === 'string') {\n const rightValue = isTerm(right as any) ? (right as Term).value : String(right);\n return left.localeCompare(rightValue);\n }\n if (isNumericTerm(left) && isNumericFilterValue(right)) {\n return rdfNumericValue(left.value) - rdfNumericValue(isTerm(right as any) ? (right as Term).value : String(right));\n }\n const rightValue = isTerm(right as any) ? (right as Term).value : String(right);\n return left.value.localeCompare(rightValue);\n}\n\nfunction matchesTermType(term: Term, expected: string): boolean {\n switch (expected) {\n case 'iri':\n return term.termType === 'NamedNode';\n case 'blank':\n return term.termType === 'BlankNode';\n case 'literal':\n return term.termType === 'Literal';\n case 'numeric':\n return isNumericTerm(term);\n default:\n return false;\n }\n}\n\nfunction langMatches(languageTag: string, languageRange: string): boolean {\n if (!languageTag) {\n return false;\n }\n if (languageRange === '*') {\n return true;\n }\n\n const normalizedTag = languageTag.toLowerCase();\n const normalizedRange = languageRange.toLowerCase();\n return normalizedTag === normalizedRange\n || normalizedTag.startsWith(`${normalizedRange}-`);\n}\n\nfunction isNumericFilterValue(value: RdfQueryFilterValue): boolean {\n return isTerm(value as any)\n ? isNumericTerm(value as Term)\n : (typeof value === 'number' || (typeof value === 'string' && isFiniteNumericLexical(value)));\n}\n\nfunction isNumericTerm(term: Term): boolean {\n return isRdfNumericTerm(term);\n}\n\nfunction isPushdownFilter(filter: RdfQueryFilter): boolean {\n if (isNumericGuardFilter(filter)) {\n return true;\n }\n if (filter.operand === 'stringLength') {\n return false;\n }\n if (filter.operand === 'lowerStringValue' || filter.operand === 'upperStringValue') {\n return false;\n }\n if (filter.operand === 'stringValue') {\n return filter.operator === '$startsWith'\n || filter.operator === '$contains'\n || filter.operator === '$endsWith'\n || filter.operator === '$regex';\n }\n return filter.operator === '$eq'\n || filter.operator === '$ne'\n || filter.operator === '$gt'\n || filter.operator === '$gte'\n || filter.operator === '$lt'\n || filter.operator === '$lte'\n || filter.operator === '$in'\n || filter.operator === '$notIn'\n || filter.operator === '$startsWith'\n || filter.operator === '$contains'\n || filter.operator === '$endsWith'\n || filter.operator === '$regex'\n || filter.operator === '$sameTerm'\n || filter.operator === '$termType'\n || filter.operator === '$lang'\n || filter.operator === '$notLang'\n || filter.operator === '$langMatches'\n || filter.operator === '$datatype'\n || filter.operator === '$notDatatype';\n}\n\nfunction isNumericGuardFilter(filter: RdfQueryFilter): boolean {\n return filter.operator === '$termType'\n && filter.value === 'numeric'\n && !filter.variable2\n && !filter.operand;\n}\n\nfunction isGroupAggregateHavingOperator(\n operator: RdfQueryFilter['operator'],\n): operator is RdfQuadJoinGroupAggregateHaving['operator'] {\n return operator === '$eq'\n || operator === '$ne'\n || operator === '$gt'\n || operator === '$gte'\n || operator === '$lt'\n || operator === '$lte';\n}\n\nfunction filterValueToNumber(value: RdfQueryFilterValue): number | undefined {\n if (typeof value === 'number') {\n return Number.isFinite(value) ? value : undefined;\n }\n if (typeof value === 'string') {\n return isFiniteNumericLexical(value) ? rdfNumericValue(value) : undefined;\n }\n if (isTerm(value as any) && isNumericTerm(value as Term)) {\n return rdfNumericValue((value as Term).value);\n }\n return undefined;\n}\n\nfunction projectBinding(binding: RdfBindingRow, select: string[]): RdfBindingRow {\n const projected: RdfBindingRow = {};\n for (const variableName of select) {\n const value = binding[variableName];\n if (value) {\n projected[variableName] = value;\n }\n }\n return projected;\n}\n\nfunction compareBindings(\n left: RdfBindingRow,\n right: RdfBindingRow,\n orderBy: NonNullable<RdfLocalQuery['orderBy']>,\n): number {\n for (const order of orderBy) {\n const leftValue = left[order.variable] ? termToId(left[order.variable] as any) : '';\n const rightValue = right[order.variable] ? termToId(right[order.variable] as any) : '';\n const comparison = leftValue.localeCompare(rightValue);\n if (comparison !== 0) {\n return order.direction === 'desc' ? -comparison : comparison;\n }\n }\n return 0;\n}\n\nfunction bindingKey(binding: RdfBindingRow): string {\n return Object.keys(binding)\n .sort()\n .map((key) => `${key}=${termToId(binding[key] as any)}`)\n .join('\\u001f');\n}\n\nfunction distinctBindings(bindings: RdfBindingRow[]): RdfBindingRow[] {\n const seen = new Set<string>();\n const unique: RdfBindingRow[] = [];\n for (const binding of bindings) {\n const key = bindingKey(binding);\n if (seen.has(key)) {\n continue;\n }\n seen.add(key);\n unique.push(binding);\n }\n return unique;\n}\n\nfunction integerLiteral(value: number): Term {\n return DataFactory.literal(\n String(value),\n DataFactory.namedNode(XSD_INTEGER),\n ) as Term;\n}\n\nfunction countLiteral(count: number): Term {\n return integerLiteral(count);\n}\n\nfunction finiteBindNumber(term: Term): number | undefined {\n if (term.termType !== 'Literal') {\n return undefined;\n }\n const value = Number(term.value);\n return Number.isFinite(value) ? value : undefined;\n}\n\nfunction decimalLiteral(value: number): Term {\n return DataFactory.literal(\n String(value),\n DataFactory.namedNode(XSD_DECIMAL),\n ) as Term;\n}\n\nfunction describePattern(pattern: RdfQueryPattern): string {\n return TERM_KEYS\n .filter((key) => pattern[key])\n .map((key) => `${key}:${describePatternValue(pattern[key])}`)\n .join(',');\n}\n\nfunction describePatternSource(source: { pattern: QuintPattern; variables: Partial<Record<RdfQueryPatternKey, string>> }): string {\n return TERM_KEYS\n .map((key) => {\n const variableName = source.variables[key];\n if (variableName) {\n return `${key}:?${variableName}`;\n }\n const value = source.pattern[key];\n return value ? `${key}:${termMatchKey(value)}` : undefined;\n })\n .filter(Boolean)\n .join(',');\n}\n\nfunction describePatternValue(value: RdfQueryTermPattern | undefined): string {\n if (!value) return '*';\n if (isVariable(value)) return `?${value.variable}`;\n if (isTerm(value as TermMatch)) return termToId(value as any);\n return 'op';\n}\n\nfunction describeFilter(filter: RdfQueryFilter): string {\n return `?${filter.variable}${filter.operand ? `:${filter.operand}` : ''}${filter.operator}`;\n}\n\nfunction describeTextSearch(pattern: RdfTextSearchPattern): string {\n const bindings = [\n pattern.source ? `source:?${pattern.source}` : undefined,\n pattern.chunk ? `chunk:?${pattern.chunk}` : undefined,\n pattern.content ? `content:?${pattern.content}` : undefined,\n pattern.heading ? `heading:?${pattern.heading}` : undefined,\n pattern.score ? `score:?${pattern.score}` : undefined,\n ].filter(Boolean).join(',');\n const scope = pattern.scope?.workspace\n ? `workspace:${pattern.scope.workspace}`\n : pattern.scope?.sourcePrefix\n ? `prefix:${pattern.scope.sourcePrefix}`\n : '*';\n const window = describeSearchWindow(pattern.limit, pattern.offset);\n const order = describeSearchOrder(pattern.orderBy);\n return `${JSON.stringify(pattern.query)}@${scope}${bindings ? ` ${bindings}` : ''}${window}${order}`;\n}\n\nfunction describeVectorSearch(pattern: RdfVectorSearchPattern): string {\n const bindings = [\n pattern.source ? `source:?${pattern.source}` : undefined,\n pattern.chunk ? `chunk:?${pattern.chunk}` : undefined,\n pattern.content ? `content:?${pattern.content}` : undefined,\n pattern.heading ? `heading:?${pattern.heading}` : undefined,\n pattern.score ? `score:?${pattern.score}` : undefined,\n pattern.distance ? `distance:?${pattern.distance}` : undefined,\n ].filter(Boolean).join(',');\n const scope = pattern.scope?.workspace\n ? `workspace:${pattern.scope.workspace}`\n : pattern.scope?.sourcePrefix\n ? `prefix:${pattern.scope.sourcePrefix}`\n : '*';\n const metric = pattern.metric ?? 'cosine';\n const window = describeSearchWindow(pattern.limit, pattern.offset);\n const order = describeSearchOrder(pattern.orderBy);\n return `${metric}:${pattern.embedding.length}d@${scope}${bindings ? ` ${bindings}` : ''}${window}${order}`;\n}\n\nfunction describeSearchWindow(limit?: number, offset?: number): string {\n const parts = [\n limit !== undefined ? `limit:${Math.max(0, limit)}` : undefined,\n offset !== undefined ? `offset:${Math.max(0, offset)}` : undefined,\n ].filter(Boolean);\n return parts.length > 0 ? ` ${parts.join(',')}` : '';\n}\n\nfunction hasSearchWindow(source: TextRequiredSource | VectorRequiredSource): boolean {\n return source.pattern.limit !== undefined || source.pattern.offset !== undefined;\n}\n\nfunction describeSearchOrder(orderBy: Array<{ field: string; direction?: 'asc' | 'desc' }> | undefined): string {\n if (!orderBy?.length) {\n return '';\n }\n return ` order:${orderBy.map((entry) => `${entry.field}:${entry.direction ?? 'asc'}`).join(',')}`;\n}\n\nfunction describeBind(bind: RdfQueryBind): string {\n return `?${bind.variable}:=${describeBindExpression(bind.expression)}`;\n}\n\nfunction describeBindExpression(expression: RdfBindExpression): string {\n switch (expression.type) {\n case 'term':\n if (expression.term.termType === 'Literal' && isFiniteNumericLexical(expression.term.value)) {\n return expression.term.value;\n }\n return termToId(expression.term as any);\n case 'variable':\n return `?${expression.variable}`;\n case 'stringValue':\n return `STR(?${expression.variable})`;\n case 'stringLength':\n return `STRLEN(?${expression.variable})`;\n case 'lowerCase':\n return `LCASE(${describeBindExpression(expression.expression)})`;\n case 'upperCase':\n return `UCASE(${describeBindExpression(expression.expression)})`;\n case 'substring':\n return `SUBSTR(${[\n describeBindExpression(expression.expression),\n describeBindExpression(expression.start),\n expression.length === undefined ? undefined : describeBindExpression(expression.length),\n ].filter(Boolean).join(',')})`;\n case 'concat':\n return `CONCAT(${expression.expressions.map(describeBindExpression).join(',')})`;\n case 'iri':\n return `IRI(${describeBindExpression(expression.expression)})`;\n default: {\n const exhaustive: never = expression;\n return JSON.stringify(exhaustive);\n }\n }\n}\n\nfunction describeScanOrder(options: RdfQuadScanOptions): string {\n const order = options.order ?? [];\n const directions = options.orderDirections ?? order.map(() => (options.reverse ? 'desc' : 'asc'));\n const firstDirection = directions[0] ?? 'asc';\n const sameDirection = directions.every((direction) => direction === firstDirection);\n if (sameDirection) {\n return `${firstDirection}:${order.join(',')}`;\n }\n return order.map((entry, index) => `${directions[index] ?? 'asc'}:${entry}`).join(',');\n}\n\nfunction describeQueryOrder(orderBy: NonNullable<RdfLocalQuery['orderBy']>): string {\n return orderBy.map((entry) => `${entry.direction ?? 'asc'}:${entry.variable}`).join(',');\n}\n\nfunction storagePlanMarkers(queryPlan: string[] | undefined): string[] {\n return (queryPlan ?? []).filter((entry) => (\n entry.startsWith('TextSearch(')\n || entry.startsWith('LexicalRange(')\n || entry.startsWith('NumericRange(')\n || entry.startsWith('PrefixRange(')\n || entry.startsWith('TermIn(')\n || entry.startsWith('TermNotIn(')\n || entry.startsWith('TermType(')\n || entry.startsWith('Language(')\n || entry.startsWith('Datatype(')\n || entry.startsWith('TupleValuesJoin(')\n || entry.startsWith('JoinBGP(')\n || entry.startsWith('JoinOrder(')\n || entry.startsWith('JoinDistinct(')\n || entry.startsWith('JoinLimit')\n || entry.startsWith('JoinGroupCountHaving(')\n || entry.startsWith('JoinGroupAggregateHaving(')\n || entry.startsWith('JoinGroupAggregateNumeric(')\n ));\n}\n\nfunction bindTextSearchResult(\n binding: RdfBindingRow,\n pattern: RdfTextSearchPattern,\n result: RdfTextSearchResult,\n): RdfBindingRow | null {\n const next = { ...binding };\n const chunkResource = `${result.source}#chunk-${encodeURIComponent(result.chunkKey)}`;\n const candidates: Array<[string | undefined, Term | undefined]> = [\n [pattern.source, DataFactory.namedNode(result.source) as Term],\n [pattern.chunk, DataFactory.namedNode(chunkResource) as Term],\n [pattern.content, DataFactory.literal(result.content) as Term],\n [pattern.heading, result.heading ? DataFactory.literal(result.heading) as Term : undefined],\n [pattern.score, decimalLiteral(result.score)],\n [pattern.workspace, DataFactory.namedNode(result.workspace) as Term],\n [pattern.localPath, result.localPath ? DataFactory.literal(result.localPath) as Term : undefined],\n [pattern.contentType, result.contentType ? DataFactory.literal(result.contentType) as Term : undefined],\n [pattern.ordinal, integerLiteral(result.ordinal)],\n [pattern.level, integerLiteral(result.level)],\n [pattern.startOffset, integerLiteral(result.startOffset)],\n [pattern.endOffset, integerLiteral(result.endOffset)],\n ];\n\n for (const [variableName, term] of candidates) {\n if (!variableName || !term) {\n continue;\n }\n const existing = next[variableName];\n if (existing && !sameTerm(existing, term)) {\n return null;\n }\n next[variableName] = term;\n }\n return next;\n}\n\nfunction bindVectorSearchResult(\n binding: RdfBindingRow,\n pattern: RdfVectorSearchPattern,\n result: RdfVectorSearchResult,\n): RdfBindingRow | null {\n const next = { ...binding };\n const chunkResource = `${result.source}#chunk-${encodeURIComponent(result.chunkKey)}`;\n const candidates: Array<[string | undefined, Term | undefined]> = [\n [pattern.source, DataFactory.namedNode(result.source) as Term],\n [pattern.chunk, DataFactory.namedNode(chunkResource) as Term],\n [pattern.content, DataFactory.literal(result.content) as Term],\n [pattern.heading, result.heading ? DataFactory.literal(result.heading) as Term : undefined],\n [pattern.score, decimalLiteral(result.score)],\n [pattern.distance, decimalLiteral(result.distance)],\n [pattern.workspace, DataFactory.namedNode(result.workspace) as Term],\n [pattern.localPath, result.localPath ? DataFactory.literal(result.localPath) as Term : undefined],\n [pattern.contentType, result.contentType ? DataFactory.literal(result.contentType) as Term : undefined],\n [pattern.ordinal, integerLiteral(result.ordinal)],\n [pattern.level, integerLiteral(result.level)],\n [pattern.startOffset, integerLiteral(result.startOffset)],\n [pattern.endOffset, integerLiteral(result.endOffset)],\n [pattern.model, result.model ? DataFactory.literal(result.model) as Term : undefined],\n ];\n\n for (const [variableName, term] of candidates) {\n if (!variableName || !term) {\n continue;\n }\n const existing = next[variableName];\n if (existing && !sameTerm(existing, term)) {\n return null;\n }\n next[variableName] = term;\n }\n return next;\n}\n\nfunction queryAggregates(query: RdfLocalQuery): RdfQueryAggregate[] {\n return query.aggregates ?? (query.aggregate ? [query.aggregate] : []);\n}\n\nfunction aggregatePlan(aggregates: RdfQueryAggregate[], grouped: boolean): string {\n if (aggregates.some((aggregate) => aggregate.type !== 'count')) {\n const prefix = grouped ? 'group-' : '';\n const suffix = aggregates.length > 1 ? '-multi' : '';\n return `Aggregate(${prefix}basic${suffix})`;\n }\n if (aggregates.length === 1) {\n const aggregate = aggregates[0];\n if (grouped) {\n return aggregate.distinct ? 'Aggregate(group-count-distinct)' : 'Aggregate(group-count)';\n }\n return aggregate.distinct ? 'Aggregate(count-distinct)' : 'Aggregate(count)';\n }\n if (grouped) {\n return aggregates.some((aggregate) => aggregate.distinct)\n ? 'Aggregate(group-count-multi-distinct)'\n : 'Aggregate(group-count-multi)';\n }\n return aggregates.some((aggregate) => aggregate.distinct)\n ? 'Aggregate(count-multi-distinct)'\n : 'Aggregate(count-multi)';\n}\n"]}
|