@undefineds.co/xpod 0.3.18 → 0.3.22
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/bun.json +57 -11
- package/config/cloud.json +14 -12
- package/config/local.json +16 -14
- package/config/xpod.json +47 -9
- package/dist/api/matrix/PodMatrixStore.d.ts +4 -7
- package/dist/api/matrix/PodMatrixStore.js +116 -148
- package/dist/api/matrix/PodMatrixStore.js.map +1 -1
- package/dist/api/matrix/types.d.ts +2 -0
- package/dist/api/matrix/types.js.map +1 -1
- package/dist/components/components.jsonld +3 -0
- package/dist/components/context.jsonld +71 -32
- package/dist/http/SubgraphSparqlHttpHandler.d.ts +1 -0
- package/dist/http/SubgraphSparqlHttpHandler.js +27 -4
- package/dist/http/SubgraphSparqlHttpHandler.js.map +1 -1
- package/dist/http/SubgraphSparqlHttpHandler.jsonld +4 -0
- package/dist/http/vector/VectorHttpHandler.d.ts +5 -1
- package/dist/http/vector/VectorHttpHandler.js +5 -5
- package/dist/http/vector/VectorHttpHandler.js.map +1 -1
- package/dist/http/vector/VectorHttpHandler.jsonld +40 -28
- package/dist/index.d.ts +5 -2
- package/dist/index.js +9 -4
- package/dist/index.js.map +1 -1
- package/dist/runtime/Proxy.d.ts +3 -0
- package/dist/runtime/Proxy.js +31 -7
- package/dist/runtime/Proxy.js.map +1 -1
- package/dist/storage/SparqlUpdateResourceStore.js +94 -33
- package/dist/storage/SparqlUpdateResourceStore.js.map +1 -1
- package/dist/storage/accessors/MixDataAccessor.d.ts +22 -5
- package/dist/storage/accessors/MixDataAccessor.js +376 -61
- package/dist/storage/accessors/MixDataAccessor.js.map +1 -1
- package/dist/storage/accessors/MixDataAccessor.jsonld +73 -5
- package/dist/storage/accessors/QuadstoreSparqlDataAccessor.js +32 -10
- package/dist/storage/accessors/QuadstoreSparqlDataAccessor.js.map +1 -1
- package/dist/storage/accessors/QuintStoreSparqlDataAccessor.js +28 -6
- package/dist/storage/accessors/QuintStoreSparqlDataAccessor.js.map +1 -1
- package/dist/storage/accessors/SolidRdfDataAccessor.d.ts +45 -0
- package/dist/storage/accessors/SolidRdfDataAccessor.js +277 -0
- package/dist/storage/accessors/SolidRdfDataAccessor.js.map +1 -0
- package/dist/storage/accessors/SolidRdfDataAccessor.jsonld +161 -0
- package/dist/storage/rdf/Rdf3xIndex.d.ts +122 -0
- package/dist/storage/rdf/Rdf3xIndex.js +2695 -0
- package/dist/storage/rdf/Rdf3xIndex.js.map +1 -0
- package/dist/storage/rdf/Rdf3xIndex.jsonld +528 -0
- package/dist/storage/rdf/Rdf3xSchema.d.ts +20 -0
- package/dist/storage/rdf/Rdf3xSchema.js +65 -0
- package/dist/storage/rdf/Rdf3xSchema.js.map +1 -0
- package/dist/storage/rdf/RdfLocalQueryEngine.d.ts +10 -4
- package/dist/storage/rdf/RdfLocalQueryEngine.js +607 -127
- package/dist/storage/rdf/RdfLocalQueryEngine.js.map +1 -1
- package/dist/storage/rdf/RdfQuadIndex.d.ts +12 -1
- package/dist/storage/rdf/RdfQuadIndex.js +152 -22
- package/dist/storage/rdf/RdfQuadIndex.js.map +1 -1
- package/dist/storage/rdf/RdfQuadIndex.jsonld +36 -4
- package/dist/storage/rdf/RdfSparqlAdapter.d.ts +20 -2
- package/dist/storage/rdf/RdfSparqlAdapter.js +364 -40
- package/dist/storage/rdf/RdfSparqlAdapter.js.map +1 -1
- package/dist/storage/rdf/RdfSparqlAdapter.jsonld +60 -0
- package/dist/storage/rdf/RdfTermDictionary.d.ts +8 -0
- package/dist/storage/rdf/RdfTermDictionary.js +141 -70
- package/dist/storage/rdf/RdfTermDictionary.js.map +1 -1
- package/dist/storage/rdf/RdfTermDictionary.jsonld +24 -0
- package/dist/storage/rdf/RdfTextIndex.js +10 -3
- package/dist/storage/rdf/RdfTextIndex.js.map +1 -1
- package/dist/storage/rdf/SolidRdfEngine.d.ts +15 -6
- package/dist/storage/rdf/SolidRdfEngine.js +218 -25
- package/dist/storage/rdf/SolidRdfEngine.js.map +1 -1
- package/dist/storage/rdf/SolidRdfEngine.jsonld +70 -7
- package/dist/storage/rdf/SolidRdfSparqlEngine.d.ts +11 -7
- package/dist/storage/rdf/SolidRdfSparqlEngine.js +60 -47
- package/dist/storage/rdf/SolidRdfSparqlEngine.js.map +1 -1
- package/dist/storage/rdf/SolidRdfSparqlEngine.jsonld +9 -5
- package/dist/storage/rdf/index.d.ts +2 -2
- package/dist/storage/rdf/index.js +3 -3
- package/dist/storage/rdf/index.js.map +1 -1
- package/dist/storage/rdf/models-benchmark.d.ts +12 -1
- package/dist/storage/rdf/models-benchmark.js +549 -32
- package/dist/storage/rdf/models-benchmark.js.map +1 -1
- package/dist/storage/rdf/types.d.ts +81 -7
- package/dist/storage/rdf/types.js.map +1 -1
- package/dist/storage/sparql/CompatibilitySparqlEngine.d.ts +36 -0
- package/dist/storage/sparql/CompatibilitySparqlEngine.js +96 -0
- package/dist/storage/sparql/CompatibilitySparqlEngine.js.map +1 -0
- package/dist/storage/sparql/CompatibilitySparqlEngine.jsonld +123 -0
- package/dist/storage/sparql/CompatibilitySparqlEngineImpl.d.ts +35 -0
- package/dist/storage/sparql/CompatibilitySparqlEngineImpl.js +112 -0
- package/dist/storage/sparql/CompatibilitySparqlEngineImpl.js.map +1 -0
- package/dist/storage/sparql/SubgraphQueryEngine.d.ts +1 -36
- package/dist/storage/sparql/SubgraphQueryEngine.js +2 -115
- package/dist/storage/sparql/SubgraphQueryEngine.js.map +1 -1
- package/dist/storage/sparql/SubgraphQueryEngine.jsonld +1 -124
- package/dist/terminal/AclPermissionService.d.ts +2 -1
- package/dist/terminal/AclPermissionService.js +26 -3
- package/dist/terminal/AclPermissionService.js.map +1 -1
- package/dist/terminal/TerminalSessionManager.js +25 -3
- package/dist/terminal/TerminalSessionManager.js.map +1 -1
- package/package.json +1 -1
- package/dist/storage/rdf/Rdf3xTripleIndex.d.ts +0 -55
- package/dist/storage/rdf/Rdf3xTripleIndex.js +0 -1235
- package/dist/storage/rdf/Rdf3xTripleIndex.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Rdf3xIndex.js","sourceRoot":"","sources":["../../../src/storage/rdf/Rdf3xIndex.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, mkdirSync } from 'node:fs';\nimport { dirname } from 'node:path';\nimport { DataFactory } from 'n3';\nimport type { Quad, Term } from '@rdfjs/types';\nimport { createSqliteRuntime, type SqliteDatabase } from '../SqliteRuntime';\nimport { RdfTermDictionary, rdfTermValueHead } from './RdfTermDictionary';\nimport { isRdfNumericDatatype, rdfNumericValue } from './RdfTermSemantics';\nimport {\n RDF3X_DERIVED_INDEXES,\n RDF3X_DERIVED_TABLES,\n RDF3X_GRAPH_PROJECTION_TABLE,\n RDF3X_PAIR_PROJECTION_TABLE_BY_NAME,\n RDF3X_TERM_PROJECTION_TABLE_BY_NAME,\n dropRdf3xDerivedSchemaObjects,\n dropRdf3xMaterializedFactCopies,\n} from './Rdf3xSchema';\nimport type {\n Rdf3xCardinalityEstimate,\n Rdf3xCountResult,\n Rdf3xGraphPrefixPattern,\n Rdf3xIndexMetrics,\n Rdf3xIndexStats,\n Rdf3xJoinMetrics,\n Rdf3xJoinOptions,\n Rdf3xJoinScanResult,\n Rdf3xObjectRangePattern,\n Rdf3xObjectTextSearchPattern,\n Rdf3xPairProjectionName,\n Rdf3xPatternKey,\n Rdf3xPermutationName,\n Rdf3xRebuildResult,\n Rdf3xTermKey,\n Rdf3xTermInPattern,\n Rdf3xTermMetadataPattern,\n Rdf3xTermNotInPattern,\n Rdf3xTermProjectionName,\n Rdf3xTermTypePatternValue,\n Rdf3xIndexOptions,\n Rdf3xTriplePattern,\n Rdf3xTripleScanOptions,\n Rdf3xTripleScanResult,\n RdfIndexSpaceObject,\n RdfQuadJoinCountOptions,\n RdfQuadJoinGroupAggregateOptions,\n RdfQuadJoinPattern,\n RdfQuadTupleConstraintSource,\n RdfQueryAggregate,\n RdfValuesBindingSource,\n RdfTermKind,\n} from './types';\nimport type { QuintPattern } from '../quint/types';\n\ntype TripleColumn = 'subject_id' | 'predicate_id' | 'object_id';\n\ninterface Rdf3xPermutation {\n name: Rdf3xPermutationName;\n indexName: string;\n columns: TripleColumn[];\n}\n\ninterface Rdf3xPairProjection {\n name: Rdf3xPairProjectionName;\n table: string;\n columns: [TripleColumn, TripleColumn];\n remainder: TripleColumn;\n}\n\ninterface Rdf3xTermProjection {\n name: Rdf3xTermProjectionName;\n table: string;\n column: TripleColumn;\n}\n\ninterface Rdf3xResolvedPattern {\n ids: Partial<Record<Rdf3xPatternKey, number>>;\n idSets?: Partial<Record<Rdf3xPatternKey, number[]>>;\n excludedIdSets?: Partial<Record<Rdf3xPatternKey, number[]>>;\n termFilters?: Partial<Record<Rdf3xPatternKey, Rdf3xResolvedTermFilter>>;\n graphPrefix?: string;\n objectRange?: Rdf3xObjectRange;\n unresolved?: Rdf3xPatternKey;\n}\n\ninterface Rdf3xQuadIdRow {\n graph_id: number;\n subject_id: number;\n predicate_id: number;\n object_id: number;\n}\n\ninterface Rdf3xJoinSource {\n inputIndex: number;\n alias: string;\n membershipAlias: string;\n sourceKind: 'permutation' | 'membership';\n entry: RdfQuadJoinPattern;\n resolved: Rdf3xResolvedPattern;\n permutation: Rdf3xPermutation;\n estimate: Rdf3xCardinalityEstimate;\n}\n\ninterface Rdf3xCompiledJoin {\n from: string;\n joins: string;\n whereClause: string;\n sql: string;\n params: unknown[];\n countSql?: string;\n countParams: unknown[];\n indexChoice: string;\n queryPlan: string[];\n variableColumns: Map<string, string>;\n variableAliases: Map<string, string>;\n unresolved?: Rdf3xPatternKey;\n}\n\ninterface Rdf3xJoinSourceSql {\n from: string;\n conditions: string[];\n params: unknown[];\n queryPlan: string[];\n}\n\ninterface Rdf3xMergeJoinPlan {\n conditions: string[];\n keys: Set<Rdf3xPatternKey>;\n variables: string[];\n}\n\ninterface Rdf3xObjectRange {\n mode: 'numeric' | 'lexical';\n min?: number | string;\n minInclusive?: boolean;\n max?: number | string;\n maxInclusive?: boolean;\n}\n\ninterface Rdf3xResolvedTermFilter {\n termType?: Rdf3xTermTypePatternValue;\n language?: string;\n notLanguage?: string;\n langMatches?: string;\n datatype?: Rdf3xResolvedDatatypeFilter;\n notDatatype?: Rdf3xResolvedDatatypeFilter;\n textSearches?: Rdf3xTextSearch[];\n}\n\ntype Rdf3xResolvedDatatypeFilter =\n | { kind: 'id'; id: number }\n | { kind: 'xsd-string' }\n | { kind: 'unknown' };\n\ninterface Rdf3xTextSearch {\n operator: '$contains' | '$endsWith';\n value: string;\n}\n\ntype Rdf3xAggregateValueType = 'integer' | 'decimal';\n\nconst XSD_INTEGER = 'http://www.w3.org/2001/XMLSchema#integer';\nconst XSD_DECIMAL = 'http://www.w3.org/2001/XMLSchema#decimal';\nconst XSD_STRING = 'http://www.w3.org/2001/XMLSchema#string';\nconst OBJECT_RANGE_KINDS: RdfTermKind[] = ['iri', 'literal', 'blank'];\nconst RDF3X_INDEX_SCHEMA_VERSION = 1;\n\nconst TERM_COLUMN: Record<Rdf3xTermKey, TripleColumn> = {\n subject: 'subject_id',\n predicate: 'predicate_id',\n object: 'object_id',\n};\n\nconst ORDER_COLUMN: Record<'graph' | Rdf3xTermKey, 'graph_id' | TripleColumn> = {\n graph: 'graph_id',\n ...TERM_COLUMN,\n};\n\nconst PATTERN_COLUMNS: Record<Rdf3xPatternKey, 'graph_id' | TripleColumn> = {\n graph: 'graph_id',\n ...TERM_COLUMN,\n};\n\nconst TERM_KEYS: Rdf3xTermKey[] = ['subject', 'predicate', 'object'];\nconst RDF_FACTS_TABLE = 'rdf_quads';\n\nconst PERMUTATIONS: Rdf3xPermutation[] = [\n { name: 'SPO', indexName: 'rdf_quads_spog', columns: ['subject_id', 'predicate_id', 'object_id'] },\n { name: 'SOP', indexName: 'rdf_quads_sopg', columns: ['subject_id', 'object_id', 'predicate_id'] },\n { name: 'PSO', indexName: 'rdf_quads_psog', columns: ['predicate_id', 'subject_id', 'object_id'] },\n { name: 'POS', indexName: 'rdf_quads_posg', columns: ['predicate_id', 'object_id', 'subject_id'] },\n { name: 'OSP', indexName: 'rdf_quads_ospg', columns: ['object_id', 'subject_id', 'predicate_id'] },\n { name: 'OPS', indexName: 'rdf_quads_opsg', columns: ['object_id', 'predicate_id', 'subject_id'] },\n];\n\nconst PAIR_PROJECTIONS: Rdf3xPairProjection[] = [\n { name: 'SP', table: RDF3X_PAIR_PROJECTION_TABLE_BY_NAME.SP, columns: ['subject_id', 'predicate_id'], remainder: 'object_id' },\n { name: 'SO', table: RDF3X_PAIR_PROJECTION_TABLE_BY_NAME.SO, columns: ['subject_id', 'object_id'], remainder: 'predicate_id' },\n { name: 'PS', table: RDF3X_PAIR_PROJECTION_TABLE_BY_NAME.PS, columns: ['predicate_id', 'subject_id'], remainder: 'object_id' },\n { name: 'PO', table: RDF3X_PAIR_PROJECTION_TABLE_BY_NAME.PO, columns: ['predicate_id', 'object_id'], remainder: 'subject_id' },\n { name: 'OS', table: RDF3X_PAIR_PROJECTION_TABLE_BY_NAME.OS, columns: ['object_id', 'subject_id'], remainder: 'predicate_id' },\n { name: 'OP', table: RDF3X_PAIR_PROJECTION_TABLE_BY_NAME.OP, columns: ['object_id', 'predicate_id'], remainder: 'subject_id' },\n];\n\nconst TERM_PROJECTIONS: Rdf3xTermProjection[] = [\n { name: 'S', table: RDF3X_TERM_PROJECTION_TABLE_BY_NAME.S, column: 'subject_id' },\n { name: 'P', table: RDF3X_TERM_PROJECTION_TABLE_BY_NAME.P, column: 'predicate_id' },\n { name: 'O', table: RDF3X_TERM_PROJECTION_TABLE_BY_NAME.O, column: 'object_id' },\n];\n\nconst GRAPH_PROJECTION_TABLE = RDF3X_GRAPH_PROJECTION_TABLE;\n\nexport class Rdf3xIndex {\n private readonly sqliteRuntime = createSqliteRuntime();\n private db: SqliteDatabase | null = null;\n private dictionary: RdfTermDictionary | null = null;\n\n public constructor(private readonly options: Rdf3xIndexOptions) {}\n\n public open(): void {\n if (this.db) {\n return;\n }\n\n if (this.options.path !== ':memory:') {\n const dir = dirname(this.options.path);\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n }\n\n this.db = this.sqliteRuntime.openDatabase(this.options.path);\n this.dictionary = new RdfTermDictionary(this.db);\n this.dictionary.initialize();\n this.initializeSchema();\n }\n\n public close(): void {\n this.db?.close();\n this.db = null;\n this.dictionary = null;\n }\n\n public clear(): void {\n this.clearRdf3xTables();\n this.setFactsDataVersion(0);\n }\n\n public rebuildFromCurrentQuads(): Rdf3xRebuildResult {\n const start = Date.now();\n const db = this.requireDb();\n const factsDataVersion = this.currentFactsDataVersion();\n const scannedQuads = db.prepare<{ count: number }>('SELECT COUNT(*) AS count FROM rdf_quads').get()?.count ?? 0;\n\n db.transaction(() => {\n this.clearRdf3xTables();\n for (const projection of PAIR_PROJECTIONS) {\n this.rebuildPairProjection(projection);\n }\n\n for (const projection of TERM_PROJECTIONS) {\n this.rebuildTermProjection(projection);\n }\n this.rebuildGraphProjection();\n\n this.setFactsDataVersion(factsDataVersion);\n })();\n\n const stats = this.stats();\n return {\n scannedQuads,\n uniqueTriples: stats.uniqueTriples,\n memberships: stats.membershipCount,\n projectionRows: pairProjectionRowTotal(stats.pairProjectionRows) + termProjectionRowTotal(stats.termProjectionRows),\n factsDataVersion,\n durationMs: Date.now() - start,\n };\n }\n\n public factsDataVersion(): number {\n const row = this.requireDb()\n .prepare<{ value: string }>(\"SELECT value FROM rdf3x_metadata WHERE key = 'facts_data_version'\")\n .get();\n return Number(row?.value ?? 0) || 0;\n }\n\n public isSyncedWithCurrentQuads(): boolean {\n return this.factsDataVersion() === this.currentFactsDataVersion();\n }\n\n public scan(pattern: Rdf3xTriplePattern, options?: Rdf3xTripleScanOptions): Rdf3xTripleScanResult {\n return this.scanInternal(pattern, options);\n }\n\n public scanWithTupleConstraints(\n pattern: Rdf3xTriplePattern,\n tupleValues: RdfQuadTupleConstraintSource,\n options?: Rdf3xTripleScanOptions,\n ): Rdf3xTripleScanResult {\n return this.scanInternal(pattern, options, tupleValues);\n }\n\n public countDistinct(pattern: Rdf3xTriplePattern, distinctKey: Rdf3xPatternKey): Rdf3xCountResult {\n const start = Date.now();\n const resolved = this.resolvePattern(pattern);\n if (resolved.unresolved) {\n return {\n count: 0,\n metrics: this.metrics('none', 0, 0, start, [`unresolved ${resolved.unresolved}`]),\n };\n }\n\n const useMembershipSource = shouldUseMembershipSource(resolved);\n const permutation = this.choosePermutation(resolved.ids, {\n idSets: resolved.idSets,\n objectRange: Boolean(resolved.objectRange),\n termFilters: resolved.termFilters,\n });\n const compiled = useMembershipSource\n ? this.compileMembershipDistinctCountSql(resolved, distinctKey)\n : this.compileDistinctCountSql(permutation, resolved, distinctKey);\n const count = this.requireDb()\n .prepare<{ count: number }>(compiled.sql)\n .get(...compiled.params)?.count ?? 0;\n return {\n count,\n metrics: this.metrics(\n useMembershipSource ? 'source-membership' : permutation.name,\n count,\n 1,\n start,\n [\n ...(useMembershipSource ? [] : [`Rdf3xPermutationScan(${permutation.name})`]),\n ...compiled.queryPlan,\n compiled.sql,\n ],\n ),\n };\n }\n\n private scanInternal(\n pattern: Rdf3xTriplePattern,\n options?: Rdf3xTripleScanOptions,\n tupleValues?: RdfQuadTupleConstraintSource,\n ): Rdf3xTripleScanResult {\n const start = Date.now();\n const resolved = this.resolvePattern(pattern);\n if (resolved.unresolved) {\n return {\n quads: [],\n metrics: this.metrics('none', 0, 0, start, [`unresolved ${resolved.unresolved}`]),\n };\n }\n\n const useMembershipSource = shouldUseMembershipSource(resolved);\n const permutation = this.choosePermutation(resolved.ids, {\n idSets: resolved.idSets,\n objectRange: Boolean(resolved.objectRange),\n termFilters: resolved.termFilters,\n });\n const compiled = useMembershipSource\n ? this.compileMembershipScanSql(resolved, options, tupleValues)\n : this.compileScanSql(permutation, resolved, options, tupleValues);\n const matchedRows = this.requireDb()\n .prepare<{ count: number }>(compiled.countSql)\n .get(...compiled.countParams)?.count ?? 0;\n const rows = this.requireDb().prepare<Rdf3xQuadIdRow>(compiled.sql).all(...compiled.params);\n return {\n quads: this.rowsToQuads(rows),\n metrics: this.metrics(\n useMembershipSource ? 'source-membership' : permutation.name,\n matchedRows,\n rows.length,\n start,\n [\n ...(useMembershipSource ? [] : [`Rdf3xPermutationScan(${permutation.name})`]),\n ...compiled.queryPlan,\n compiled.sql,\n ],\n ),\n };\n }\n\n private compileDistinctCountSql(\n permutation: Rdf3xPermutation,\n resolved: Rdf3xResolvedPattern,\n distinctKey: Rdf3xPatternKey,\n ): {\n sql: string;\n params: unknown[];\n queryPlan: string[];\n } {\n const conditions: string[] = [];\n const params: unknown[] = [];\n const queryPlan: string[] = [`Permutation(${permutation.name})`];\n const ids = resolved.ids;\n\n for (const key of TERM_KEYS) {\n const id = ids[key];\n if (id === undefined) {\n continue;\n }\n conditions.push(`idx.${TERM_COLUMN[key]} = ?`);\n params.push(id);\n }\n this.appendResolvedIdSetConditions(\n resolved,\n TERM_KEYS,\n (key) => `idx.${TERM_COLUMN[key as Rdf3xTermKey]}`,\n conditions,\n params,\n queryPlan,\n );\n this.appendResolvedExcludedIdSetConditions(\n resolved,\n TERM_KEYS,\n (key) => `idx.${TERM_COLUMN[key as Rdf3xTermKey]}`,\n conditions,\n params,\n queryPlan,\n );\n\n if (ids.graph !== undefined) {\n conditions.push('idx.graph_id = ?');\n params.push(ids.graph);\n queryPlan.push('GraphMembershipFilter');\n }\n this.appendResolvedExcludedIdSetConditions(\n resolved,\n ['graph'],\n () => 'idx.graph_id',\n conditions,\n params,\n queryPlan,\n );\n\n const graphPrefixJoin = resolved.graphPrefix\n ? ` JOIN rdf_terms graph_prefix\n ON graph_prefix.id = idx.graph_id`\n : '';\n if (resolved.graphPrefix) {\n conditions.push(`graph_prefix.kind = ?\n AND graph_prefix.value_head >= ?\n AND graph_prefix.value_head < ?\n AND graph_prefix.value >= ?\n AND graph_prefix.value < ?`);\n params.push('iri', rdfTermValueHead(resolved.graphPrefix), `${rdfTermValueHead(resolved.graphPrefix)}\\uffff`, resolved.graphPrefix, `${resolved.graphPrefix}\\uffff`);\n queryPlan.push('GraphPrefixMembershipFilter');\n }\n\n if (resolved.objectRange) {\n this.appendObjectRangeCondition('object_range', resolved.objectRange, conditions, params, queryPlan);\n }\n const termFilterJoins: string[] = [];\n this.appendTermFilterJoinsAndConditions(\n resolved,\n ['graph', ...TERM_KEYS],\n (key) => `idx.${PATTERN_COLUMNS[key]}`,\n termFilterJoins,\n conditions,\n params,\n queryPlan,\n 'distinct_term_filter',\n );\n\n const distinctColumn = distinctKey === 'graph'\n ? 'idx.graph_id'\n : `idx.${TERM_COLUMN[distinctKey]}`;\n const whereClause = conditions.length > 0 ? ` WHERE ${conditions.join(' AND ')}` : '';\n const from = `\n FROM ${this.permutationSource(permutation, 'idx')}\n ${termFilterJoins.join('')}\n ${graphPrefixJoin}\n ${resolved.objectRange ? 'JOIN rdf_terms object_range ON object_range.id = idx.object_id' : ''}\n `;\n return {\n sql: `SELECT COUNT(DISTINCT ${distinctColumn}) AS count ${from} ${whereClause}`,\n params,\n queryPlan: [\n ...queryPlan,\n `Rdf3xDistinctCount(?${distinctKey})`,\n ],\n };\n }\n\n private compileMembershipDistinctCountSql(\n resolved: Rdf3xResolvedPattern,\n distinctKey: Rdf3xPatternKey,\n ): {\n sql: string;\n params: unknown[];\n queryPlan: string[];\n } {\n const conditions: string[] = [];\n const params: unknown[] = [];\n const queryPlan: string[] = ['Rdf3xMembershipScan'];\n const ids = resolved.ids;\n const alias = 'membership';\n const graphAlias = `${alias}_graph`;\n const graphPrefixAlias = 'graph_prefix';\n\n for (const key of ['graph', ...TERM_KEYS] as Rdf3xPatternKey[]) {\n const id = ids[key];\n if (id === undefined) {\n continue;\n }\n conditions.push(`${alias}.${PATTERN_COLUMNS[key]} = ?`);\n params.push(id);\n }\n this.appendResolvedIdSetConditions(\n resolved,\n ['graph', ...TERM_KEYS],\n (key) => `${alias}.${PATTERN_COLUMNS[key]}`,\n conditions,\n params,\n queryPlan,\n );\n this.appendResolvedExcludedIdSetConditions(\n resolved,\n ['graph', ...TERM_KEYS],\n (key) => `${alias}.${PATTERN_COLUMNS[key]}`,\n conditions,\n params,\n queryPlan,\n );\n\n if (ids.graph !== undefined) {\n queryPlan.push('GraphMembershipFilter');\n }\n\n const useGraphPrefixSource = resolved.graphPrefix !== undefined\n && ids.graph === undefined\n && !resolved.idSets?.graph?.length\n && !resolved.excludedIdSets?.graph?.length;\n let from = useGraphPrefixSource\n ? `${GRAPH_PROJECTION_TABLE} ${graphAlias}\n JOIN rdf_terms ${graphPrefixAlias}\n ON ${graphPrefixAlias}.id = ${graphAlias}.graph_id\n JOIN ${this.factSource(alias)}\n ON ${alias}.graph_id = ${graphAlias}.graph_id`\n : this.factSource(alias);\n\n if (resolved.graphPrefix !== undefined) {\n if (!useGraphPrefixSource) {\n from += ` JOIN rdf_terms ${graphPrefixAlias}\n ON ${graphPrefixAlias}.id = ${alias}.graph_id`;\n }\n conditions.push(`${graphPrefixAlias}.kind = ?\n AND ${graphPrefixAlias}.value_head >= ?\n AND ${graphPrefixAlias}.value_head < ?\n AND ${graphPrefixAlias}.value >= ?\n AND ${graphPrefixAlias}.value < ?`);\n params.push('iri', rdfTermValueHead(resolved.graphPrefix), `${rdfTermValueHead(resolved.graphPrefix)}\\uffff`, resolved.graphPrefix, `${resolved.graphPrefix}\\uffff`);\n queryPlan.push('GraphPrefixMembershipFilter');\n }\n\n if (resolved.objectRange) {\n from += ` JOIN rdf_terms object_range\n ON object_range.id = ${alias}.object_id`;\n this.appendObjectRangeCondition('object_range', resolved.objectRange, conditions, params, queryPlan);\n }\n const termFilterJoins: string[] = [];\n this.appendTermFilterJoinsAndConditions(\n resolved,\n ['graph', ...TERM_KEYS],\n (key) => `${alias}.${PATTERN_COLUMNS[key]}`,\n termFilterJoins,\n conditions,\n params,\n queryPlan,\n 'membership_distinct_term_filter',\n );\n from += termFilterJoins.join('');\n\n const distinctColumn = `${alias}.${PATTERN_COLUMNS[distinctKey]}`;\n const whereClause = conditions.length > 0 ? ` WHERE ${conditions.join(' AND ')}` : '';\n return {\n sql: `SELECT COUNT(DISTINCT ${distinctColumn}) AS count FROM ${from} ${whereClause}`,\n params,\n queryPlan: [\n ...queryPlan,\n `Rdf3xDistinctCount(?${distinctKey})`,\n ],\n };\n }\n\n public joinPatterns(patterns: RdfQuadJoinPattern[], options?: Rdf3xJoinOptions): Rdf3xJoinScanResult {\n const start = Date.now();\n if (patterns.length === 0) {\n return {\n bindings: [],\n metrics: this.joinMetrics('none', 0, 0, start, ['Rdf3xJoinBGP(empty)']),\n };\n }\n\n const compiled = this.compileJoinPatterns(patterns, options);\n if (compiled.unresolved) {\n return {\n bindings: [],\n metrics: this.joinMetrics('none', 0, 0, start, [\n ...compiled.queryPlan,\n `unresolved ${compiled.unresolved}`,\n ]),\n };\n }\n\n const rows = this.requireDb().prepare<Record<string, number>>(compiled.sql).all(...compiled.params);\n const matchedRows = compiled.countSql\n ? this.requireDb().prepare<{ count: number }>(compiled.countSql).get(...compiled.countParams)?.count ?? 0\n : rows.length;\n return {\n bindings: this.joinRowsToBindings(rows, compiled.variableAliases),\n metrics: this.joinMetrics(\n compiled.indexChoice,\n matchedRows,\n rows.length,\n start,\n [...compiled.queryPlan, compiled.sql],\n ),\n };\n }\n\n public countJoinPatterns(\n patterns: RdfQuadJoinPattern[],\n options: RdfQuadJoinCountOptions,\n ): Rdf3xJoinScanResult {\n return this.aggregateJoinPatternsInternal(patterns, options, 'Rdf3xJoinCount');\n }\n\n public aggregateJoinPatterns(\n patterns: RdfQuadJoinPattern[],\n options: RdfQuadJoinCountOptions,\n ): Rdf3xJoinScanResult {\n return this.aggregateJoinPatternsInternal(patterns, options, 'Rdf3xJoinAggregate');\n }\n\n public groupCountJoinPatterns(\n patterns: RdfQuadJoinPattern[],\n options: RdfQuadJoinGroupAggregateOptions,\n ): Rdf3xJoinScanResult {\n return this.groupAggregateJoinPatternsInternal(patterns, options, 'Rdf3xJoinGroupCount');\n }\n\n public groupAggregateJoinPatterns(\n patterns: RdfQuadJoinPattern[],\n options: RdfQuadJoinGroupAggregateOptions,\n ): Rdf3xJoinScanResult {\n return this.groupAggregateJoinPatternsInternal(patterns, options, 'Rdf3xJoinGroupAggregate');\n }\n\n private aggregateJoinPatternsInternal(\n patterns: RdfQuadJoinPattern[],\n options: RdfQuadJoinCountOptions,\n label: 'Rdf3xJoinCount' | 'Rdf3xJoinAggregate',\n ): Rdf3xJoinScanResult {\n const start = Date.now();\n if (patterns.length === 0) {\n return {\n bindings: [],\n metrics: this.joinMetrics('none', 0, 0, start, [`${label}(empty)`]),\n };\n }\n\n const compiled = this.compileJoinPatterns(patterns);\n if (compiled.unresolved) {\n return {\n bindings: [],\n metrics: this.joinMetrics('none', 0, 0, start, [...compiled.queryPlan, `unresolved ${compiled.unresolved}`]),\n };\n }\n\n const aggregateAliases = new Map<string, string>();\n const aggregateTypes = new Map<string, Rdf3xAggregateValueType>();\n const numericJoins = new Map<string, string>();\n const numericJoinSql: string[] = [];\n const projection = options.aggregates.map((aggregate, index) => {\n const alias = `a${index}`;\n aggregateAliases.set(aggregate.as, alias);\n return this.buildJoinAggregateColumn(\n aggregate,\n alias,\n compiled.variableColumns,\n aggregateTypes,\n numericJoins,\n numericJoinSql,\n 'RDF-3X BGP',\n );\n }).join(', ');\n const aggregateJoins = numericJoinSql.join('');\n const sql = `SELECT ${projection} FROM ${compiled.from}${compiled.joins}${aggregateJoins}${compiled.whereClause}`;\n const rows = this.requireDb().prepare<Record<string, number>>(sql).all(...compiled.params);\n const matchedRows = this.requireDb()\n .prepare<{ count: number }>(`SELECT COUNT(*) AS count FROM ${compiled.from}${compiled.joins}${aggregateJoins}${compiled.whereClause}`)\n .get(...compiled.params)?.count ?? 0;\n return {\n bindings: this.joinRowsToBindings(rows, compiled.variableAliases, aggregateAliases, aggregateTypes),\n metrics: this.joinMetrics(\n compiled.indexChoice,\n matchedRows,\n rows.length,\n start,\n [\n ...compiled.queryPlan,\n ...(numericJoinSql.length > 0 ? [`Rdf3xJoinAggregateNumeric(${[...numericJoins.keys()].map((variableName) => `?${variableName}`).join(',')})`] : []),\n `${label}(${options.aggregates.map((aggregate) => (\n `${aggregate.type}${aggregate.distinct ? ':DISTINCT' : ''}(${aggregate.variable ? `?${aggregate.variable}` : '*'})`\n )).join(',')})`,\n sql,\n ],\n ),\n };\n }\n\n private groupAggregateJoinPatternsInternal(\n patterns: RdfQuadJoinPattern[],\n options: RdfQuadJoinGroupAggregateOptions,\n label: 'Rdf3xJoinGroupCount' | 'Rdf3xJoinGroupAggregate',\n ): Rdf3xJoinScanResult {\n const start = Date.now();\n if (patterns.length === 0) {\n return {\n bindings: [],\n metrics: this.joinMetrics('none', 0, 0, start, [`${label}(empty)`]),\n };\n }\n\n const compiled = this.compileJoinPatterns(patterns);\n if (compiled.unresolved) {\n return {\n bindings: [],\n metrics: this.joinMetrics('none', 0, 0, start, [...compiled.queryPlan, `unresolved ${compiled.unresolved}`]),\n };\n }\n\n const aggregateAliases = new Map<string, string>();\n const aggregateSqlAliases = new Map<string, string>();\n const aggregateTypes = new Map<string, Rdf3xAggregateValueType>();\n const numericJoins = new Map<string, string>();\n const numericJoinSql: string[] = [];\n const groupColumns = options.groupBy.map((variableName) => {\n const column = compiled.variableColumns.get(variableName);\n if (!column) {\n throw new Error(`RDF-3X BGP group aggregate cannot group by unbound variable: ${variableName}`);\n }\n return column;\n });\n const aggregateColumns = options.aggregates.map((aggregate, index) => {\n const alias = `a${index}`;\n aggregateAliases.set(aggregate.as, alias);\n aggregateSqlAliases.set(aggregate.as, alias);\n return this.buildJoinAggregateColumn(\n aggregate,\n alias,\n compiled.variableColumns,\n aggregateTypes,\n numericJoins,\n numericJoinSql,\n 'RDF-3X BGP group aggregate',\n );\n });\n const projection = [\n ...options.groupBy.map((variableName) => {\n const alias = compiled.variableAliases.get(variableName);\n const column = compiled.variableColumns.get(variableName);\n if (!alias || !column) {\n throw new Error(`RDF-3X BGP group aggregate cannot project unbound group variable: ${variableName}`);\n }\n return `${column} AS ${alias}`;\n }),\n ...aggregateColumns,\n ].join(', ');\n const groupBy = groupColumns.join(', ');\n const aggregateJoins = numericJoinSql.join('');\n const havingClause = this.buildGroupAggregateHavingClause(options.having, aggregateSqlAliases);\n const orderScope = this.buildGroupAggregateOrderScope(options, compiled.variableColumns, aggregateSqlAliases);\n const fromSql = `${compiled.from}${compiled.joins}${aggregateJoins}${compiled.whereClause}`;\n const sourceFromSql = `${compiled.from}${compiled.joins}${aggregateJoins}${orderScope.joins}${compiled.whereClause}`;\n const orderClause = orderScope.orderBy;\n let sql = `SELECT ${projection} FROM ${sourceFromSql} GROUP BY ${groupBy}${havingClause.sql}${orderClause}`;\n const params = [...compiled.params, ...havingClause.params];\n const paginated = options.limit !== undefined || options.offset !== undefined;\n if (options.limit !== undefined) {\n sql += ' LIMIT ?';\n params.push(options.limit);\n }\n if (options.offset !== undefined) {\n if (options.limit === undefined) {\n sql += ' LIMIT -1';\n }\n sql += ' OFFSET ?';\n params.push(options.offset);\n }\n const rows = this.requireDb().prepare<Record<string, number>>(sql).all(...params);\n const matchedRows = this.requireDb()\n .prepare<{ count: number }>(`SELECT COUNT(*) AS count FROM ${fromSql}`)\n .get(...compiled.params)?.count ?? 0;\n return {\n bindings: this.joinRowsToBindings(rows, compiled.variableAliases, aggregateAliases, aggregateTypes),\n metrics: this.joinMetrics(\n compiled.indexChoice,\n matchedRows,\n rows.length,\n start,\n [\n ...compiled.queryPlan,\n ...(numericJoinSql.length > 0 ? [`Rdf3xJoinGroupAggregateNumeric(${[...numericJoins.keys()].map((variableName) => `?${variableName}`).join(',')})`] : []),\n `${label}(${options.groupBy.map((variableName) => `?${variableName}`).join(',')})`,\n ...(havingClause.sql ? [`${label}Having(${(options.having ?? []).map((entry) => `${entry.aggregate}${entry.operator}`).join(',')})`] : []),\n ...(orderClause ? [`${label}Order(${(options.orderBy ?? []).map((entry) => `${entry.direction ?? 'asc'}:${entry.variable}`).join(',')})`] : []),\n ...(paginated ? [`${label}Limit`] : []),\n sql,\n ],\n ),\n };\n }\n\n public estimateCardinality(pattern: Rdf3xTriplePattern): Rdf3xCardinalityEstimate {\n const resolved = this.resolvePattern(pattern);\n if (resolved.unresolved) {\n return {\n uniqueTriples: 0,\n matchingQuads: 0,\n source: 'exact-membership',\n indexChoice: 'none',\n };\n }\n\n if (resolved.objectRange || hasResolvedTermFilters(resolved)) {\n return this.estimateObjectRangeCardinality(resolved);\n }\n\n if (hasResolvedIdSets(resolved) || hasResolvedExcludedIdSets(resolved)) {\n return this.estimateResolvedMembershipCardinality(resolved);\n }\n\n if (resolved.ids.graph !== undefined || resolved.graphPrefix !== undefined) {\n return this.estimateResolvedMembershipCardinality(resolved);\n }\n\n const termIds = TERM_KEYS.filter((key) => resolved.ids[key] !== undefined);\n const permutation = this.choosePermutation(resolved.ids, {\n idSets: resolved.idSets,\n termFilters: resolved.termFilters,\n });\n if (termIds.length === 3) {\n return this.estimateExactTriple(resolved.ids, permutation.name);\n }\n if (termIds.length === 2) {\n return this.estimatePairProjection(resolved.ids, permutation.name);\n }\n if (termIds.length === 1) {\n return this.estimateTermProjection(resolved.ids, permutation.name);\n }\n\n return {\n uniqueTriples: this.uniqueTripleCount(),\n matchingQuads: this.rowCount(RDF_FACTS_TABLE),\n source: 'full-count',\n indexChoice: permutation.name,\n };\n }\n\n public stats(): Rdf3xIndexStats {\n const spaceObjects = this.collectSpaceObjects();\n const accountedBytes = spaceObjects.reduce((sum, object) => sum + object.bytes, 0);\n const databaseBytes = accountedBytes || this.estimateDatabaseBytes();\n const uniqueTriples = this.uniqueTripleCount();\n return {\n uniqueTriples,\n membershipCount: this.rowCount(RDF_FACTS_TABLE),\n graphCount: this.rowCount(GRAPH_PROJECTION_TABLE),\n factsDataVersion: this.factsDataVersion(),\n permutationRows: Object.fromEntries(PERMUTATIONS.map((permutation) => [\n permutation.name,\n uniqueTriples,\n ])) as Record<Rdf3xPermutationName, number>,\n pairProjectionRows: Object.fromEntries(PAIR_PROJECTIONS.map((projection) => [\n projection.name,\n this.rowCount(projection.table),\n ])) as Record<Rdf3xPairProjectionName, number>,\n termProjectionRows: Object.fromEntries(TERM_PROJECTIONS.map((projection) => [\n projection.name,\n this.rowCount(projection.table),\n ])) as Record<Rdf3xTermProjectionName, number>,\n databaseBytes,\n tableBytes: sumSpaceObjects(spaceObjects, 'table'),\n indexBytes: sumSpaceObjects(spaceObjects, 'index'),\n spaceObjects,\n };\n }\n\n public collectSpaceObjects(): RdfIndexSpaceObject[] {\n const db = this.requireDb();\n try {\n const schemaRows = db.prepare<{ name: string; type: string; tbl_name: string }>(`\n SELECT name, type, tbl_name\n FROM sqlite_schema\n WHERE type IN ('table', 'index')\n AND (name LIKE 'rdf3x_%' OR tbl_name LIKE 'rdf3x_%')\n `).all();\n const schema = new Map(schemaRows.map((row) => [row.name, row]));\n try {\n const rows = db.prepare<{ name: string; pages: number; bytes: number | null }>(`\n SELECT name, COUNT(*) AS pages, SUM(pgsize) AS bytes\n FROM dbstat\n WHERE name LIKE 'rdf3x_%'\n OR name LIKE 'sqlite_autoindex_rdf3x_%'\n GROUP BY name\n ORDER BY name\n `).all();\n\n if (rows.length > 0) {\n return rows.map((row) => {\n const object = schema.get(row.name);\n const kind = rdf3xSpaceObjectKind(row.name, object?.type, object?.tbl_name);\n return {\n name: row.name,\n kind,\n ...(object?.tbl_name && object.tbl_name !== row.name ? { tableName: object.tbl_name } : {}),\n pages: row.pages,\n bytes: row.bytes ?? 0,\n };\n });\n }\n } catch {\n // dbstat is optional in SQLite builds and often unavailable for in-memory databases.\n }\n\n return this.estimateSpaceObjectsFromSchema(schemaRows);\n } catch {\n return [];\n }\n }\n\n private initializeSchema(): void {\n this.dropMaterializedFactCopies();\n this.dropLegacyRowidTables();\n this.prepareSchemaVersion();\n\n const pairProjectionTables = PAIR_PROJECTIONS.map((projection) => `\n CREATE TABLE IF NOT EXISTS ${projection.table} (\n ${projection.columns[0]} INTEGER NOT NULL,\n ${projection.columns[1]} INTEGER NOT NULL,\n triple_count INTEGER NOT NULL,\n membership_count INTEGER NOT NULL,\n min_${projection.remainder} INTEGER,\n max_${projection.remainder} INTEGER,\n PRIMARY KEY (${projection.columns.join(', ')})\n ) WITHOUT ROWID;\n `).join('\\n');\n\n const termProjectionTables = TERM_PROJECTIONS.map((projection) => `\n CREATE TABLE IF NOT EXISTS ${projection.table} (\n ${projection.column} INTEGER NOT NULL PRIMARY KEY,\n triple_count INTEGER NOT NULL,\n membership_count INTEGER NOT NULL\n ) WITHOUT ROWID;\n `).join('\\n');\n\n this.requireDb().exec(`\n CREATE TABLE IF NOT EXISTS ${GRAPH_PROJECTION_TABLE} (\n graph_id INTEGER NOT NULL PRIMARY KEY,\n membership_count INTEGER NOT NULL\n ) WITHOUT ROWID;\n\n CREATE TABLE IF NOT EXISTS rdf3x_metadata (\n key TEXT PRIMARY KEY,\n value TEXT NOT NULL\n ) WITHOUT ROWID;\n\n ${pairProjectionTables}\n ${termProjectionTables}\n `);\n this.setMetadataValue('schema_version', String(RDF3X_INDEX_SCHEMA_VERSION));\n }\n\n private dropMaterializedFactCopies(): void {\n dropRdf3xMaterializedFactCopies(this.requireDb());\n }\n\n private dropLegacyRowidTables(): void {\n const db = this.requireDb();\n try {\n const rows = db.prepare<{ name: string; wr: number }>(`\n SELECT name, wr\n FROM pragma_table_list\n WHERE name IN (${RDF3X_DERIVED_TABLES.map(() => '?').join(', ')})\n `).all(...RDF3X_DERIVED_TABLES);\n if (!rows.some((row) => row.wr === 0)) {\n return;\n }\n } catch {\n return;\n }\n\n db.exec([\n ...RDF3X_DERIVED_INDEXES.map((index) => `DROP INDEX IF EXISTS ${index};`),\n ...RDF3X_DERIVED_TABLES.map((table) => `DROP TABLE IF EXISTS ${table};`),\n ].join('\\n'));\n }\n\n private clearRdf3xTables(): void {\n const db = this.requireDb();\n db.exec([\n ...PAIR_PROJECTIONS.map((projection) => `DELETE FROM ${projection.table};`),\n ...TERM_PROJECTIONS.map((projection) => `DELETE FROM ${projection.table};`),\n `DELETE FROM ${GRAPH_PROJECTION_TABLE};`,\n ].join('\\n'));\n }\n\n private prepareSchemaVersion(): void {\n this.ensureMetadataTable();\n const row = this.requireDb()\n .prepare<{ value: string }>(\"SELECT value FROM rdf3x_metadata WHERE key = 'schema_version'\")\n .get();\n if (!row || row.value === String(RDF3X_INDEX_SCHEMA_VERSION)) {\n return;\n }\n this.dropRdf3xSchema();\n this.ensureMetadataTable();\n }\n\n private ensureMetadataTable(): void {\n this.requireDb().exec(`\n CREATE TABLE IF NOT EXISTS rdf3x_metadata (\n key TEXT PRIMARY KEY,\n value TEXT NOT NULL\n ) WITHOUT ROWID;\n `);\n }\n\n private dropRdf3xSchema(): void {\n dropRdf3xDerivedSchemaObjects(this.requireDb());\n }\n\n private currentFactsDataVersion(): number {\n try {\n const row = this.requireDb()\n .prepare<{ value: string }>(\"SELECT value FROM rdf_index_metadata WHERE key = 'data_version'\")\n .get();\n return Number(row?.value ?? 0) || 0;\n } catch {\n return 0;\n }\n }\n\n private setFactsDataVersion(version: number): void {\n this.requireDb().prepare(`\n INSERT INTO rdf3x_metadata (key, value)\n VALUES ('facts_data_version', ?)\n ON CONFLICT (key)\n DO UPDATE SET value = excluded.value\n `).run(String(version));\n }\n\n private setMetadataValue(key: string, value: string): void {\n this.requireDb().prepare(`\n INSERT INTO rdf3x_metadata (key, value)\n VALUES (?, ?)\n ON CONFLICT (key)\n DO UPDATE SET value = excluded.value\n `).run(key, value);\n }\n\n private rebuildPairProjection(projection: Rdf3xPairProjection): void {\n const [left, right] = projection.columns;\n this.requireDb().prepare(`\n INSERT INTO ${projection.table} (\n ${left},\n ${right},\n triple_count,\n membership_count,\n min_${projection.remainder},\n max_${projection.remainder}\n )\n SELECT\n triple.${left},\n triple.${right},\n triple.triple_count,\n COALESCE(member.membership_count, 0) AS membership_count,\n triple.min_remainder,\n triple.max_remainder\n FROM (\n SELECT\n ${left},\n ${right},\n COUNT(DISTINCT ${projection.remainder}) AS triple_count,\n MIN(${projection.remainder}) AS min_remainder,\n MAX(${projection.remainder}) AS max_remainder\n FROM ${RDF_FACTS_TABLE}\n GROUP BY ${left}, ${right}\n ) triple\n LEFT JOIN (\n SELECT\n ${left},\n ${right},\n COUNT(*) AS membership_count\n FROM ${RDF_FACTS_TABLE}\n GROUP BY ${left}, ${right}\n ) member\n ON member.${left} = triple.${left}\n AND member.${right} = triple.${right}\n `).run();\n }\n\n private rebuildTermProjection(projection: Rdf3xTermProjection): void {\n this.requireDb().prepare(`\n INSERT INTO ${projection.table} (\n ${projection.column},\n triple_count,\n membership_count\n )\n SELECT\n triple.${projection.column},\n triple.triple_count,\n COALESCE(member.membership_count, 0) AS membership_count\n FROM (\n SELECT\n ${projection.column},\n COUNT(*) AS triple_count\n FROM (\n SELECT DISTINCT subject_id, predicate_id, object_id\n FROM ${RDF_FACTS_TABLE}\n ) distinct_triples\n GROUP BY ${projection.column}\n ) triple\n LEFT JOIN (\n SELECT\n ${projection.column},\n COUNT(*) AS membership_count\n FROM ${RDF_FACTS_TABLE}\n GROUP BY ${projection.column}\n ) member\n ON member.${projection.column} = triple.${projection.column}\n `).run();\n }\n\n private rebuildGraphProjection(): void {\n this.requireDb().prepare(`\n INSERT INTO ${GRAPH_PROJECTION_TABLE} (\n graph_id,\n membership_count\n )\n SELECT\n graph_id,\n COUNT(*) AS membership_count\n FROM ${RDF_FACTS_TABLE}\n GROUP BY graph_id\n `).run();\n }\n\n private compileScanSql(\n permutation: Rdf3xPermutation,\n resolved: Rdf3xResolvedPattern,\n options?: Rdf3xTripleScanOptions,\n tupleValues?: RdfQuadTupleConstraintSource,\n ): {\n sql: string;\n params: unknown[];\n countSql: string;\n countParams: unknown[];\n queryPlan: string[];\n } {\n const conditions: string[] = [];\n const params: unknown[] = [];\n const queryPlan: string[] = [`Permutation(${permutation.name})`];\n const ids = resolved.ids;\n\n for (const key of TERM_KEYS) {\n const id = ids[key];\n if (id === undefined) {\n continue;\n }\n conditions.push(`idx.${TERM_COLUMN[key]} = ?`);\n params.push(id);\n }\n this.appendResolvedIdSetConditions(\n resolved,\n TERM_KEYS,\n (key) => `idx.${TERM_COLUMN[key as Rdf3xTermKey]}`,\n conditions,\n params,\n queryPlan,\n );\n this.appendResolvedExcludedIdSetConditions(\n resolved,\n TERM_KEYS,\n (key) => `idx.${TERM_COLUMN[key as Rdf3xTermKey]}`,\n conditions,\n params,\n queryPlan,\n );\n\n if (ids.graph !== undefined) {\n conditions.push('idx.graph_id = ?');\n params.push(ids.graph);\n queryPlan.push('GraphMembershipFilter');\n }\n this.appendResolvedExcludedIdSetConditions(\n resolved,\n ['graph'],\n () => 'idx.graph_id',\n conditions,\n params,\n queryPlan,\n );\n\n const graphPrefixJoin = resolved.graphPrefix\n ? ` JOIN rdf_terms graph_prefix\n ON graph_prefix.id = idx.graph_id`\n : '';\n const tupleJoin = tupleValues\n ? this.buildTupleConstraintJoin(tupleValues, 'rdf3x_tuple_values_scan', 'idx', 'idx')\n : { join: '', queryPlan: [] };\n if (resolved.graphPrefix) {\n conditions.push(`graph_prefix.kind = ?\n AND graph_prefix.value_head >= ?\n AND graph_prefix.value_head < ?\n AND graph_prefix.value >= ?\n AND graph_prefix.value < ?`);\n params.push('iri', rdfTermValueHead(resolved.graphPrefix), `${rdfTermValueHead(resolved.graphPrefix)}\\uffff`, resolved.graphPrefix, `${resolved.graphPrefix}\\uffff`);\n queryPlan.push('GraphPrefixMembershipFilter');\n }\n\n if (resolved.objectRange) {\n this.appendObjectRangeCondition('object_range', resolved.objectRange, conditions, params, queryPlan);\n }\n const termFilterJoins: string[] = [];\n this.appendTermFilterJoinsAndConditions(\n resolved,\n ['graph', ...TERM_KEYS],\n (key) => `idx.${PATTERN_COLUMNS[key]}`,\n termFilterJoins,\n conditions,\n params,\n queryPlan,\n 'scan_term_filter',\n );\n\n const whereClause = conditions.length > 0 ? ` WHERE ${conditions.join(' AND ')}` : '';\n const orderClause = this.buildOrderClause(options, {\n graph: 'idx.graph_id',\n subject: 'idx.subject_id',\n predicate: 'idx.predicate_id',\n object: 'idx.object_id',\n });\n const from = `\n FROM ${this.permutationSource(permutation, 'idx')}\n ${tupleJoin.join}\n ${termFilterJoins.join('')}\n ${graphPrefixJoin}\n ${resolved.objectRange ? 'JOIN rdf_terms object_range ON object_range.id = idx.object_id' : ''}\n `;\n const pagination = this.buildPagination(options);\n return {\n sql: `\n SELECT\n idx.graph_id,\n idx.subject_id,\n idx.predicate_id,\n idx.object_id\n ${from}\n ${orderClause.joins}\n ${whereClause}\n ${orderClause.orderBy || ` ORDER BY ${permutation.columns.map((column) => `idx.${column}`).join(', ')}, idx.graph_id`}\n ${pagination.sql}\n `,\n params: [...params, ...pagination.params],\n countSql: `SELECT COUNT(*) AS count ${from} ${whereClause}`,\n countParams: params,\n queryPlan: [\n ...queryPlan,\n ...(orderClause.orderBy ? [`Rdf3xJoinOrder(${describeScanOrder(options)})`] : []),\n ...tupleJoin.queryPlan,\n ...(pagination.sql ? ['Pagination'] : []),\n ],\n };\n }\n\n private compileMembershipScanSql(\n resolved: Rdf3xResolvedPattern,\n options?: Rdf3xTripleScanOptions,\n tupleValues?: RdfQuadTupleConstraintSource,\n ): {\n sql: string;\n params: unknown[];\n countSql: string;\n countParams: unknown[];\n queryPlan: string[];\n } {\n const conditions: string[] = [];\n const params: unknown[] = [];\n const queryPlan: string[] = ['Rdf3xMembershipScan'];\n const ids = resolved.ids;\n const alias = 'membership';\n const graphAlias = `${alias}_graph`;\n const graphPrefixAlias = 'graph_prefix';\n\n for (const key of ['graph', ...TERM_KEYS] as Rdf3xPatternKey[]) {\n const id = ids[key];\n if (id === undefined) {\n continue;\n }\n conditions.push(`${alias}.${PATTERN_COLUMNS[key]} = ?`);\n params.push(id);\n }\n this.appendResolvedIdSetConditions(\n resolved,\n ['graph', ...TERM_KEYS],\n (key) => `${alias}.${PATTERN_COLUMNS[key]}`,\n conditions,\n params,\n queryPlan,\n );\n this.appendResolvedExcludedIdSetConditions(\n resolved,\n ['graph', ...TERM_KEYS],\n (key) => `${alias}.${PATTERN_COLUMNS[key]}`,\n conditions,\n params,\n queryPlan,\n );\n\n if (ids.graph !== undefined) {\n queryPlan.push('GraphMembershipFilter');\n }\n\n const useGraphPrefixSource = resolved.graphPrefix !== undefined\n && ids.graph === undefined\n && !resolved.idSets?.graph?.length\n && !resolved.excludedIdSets?.graph?.length;\n let from = useGraphPrefixSource\n ? `${GRAPH_PROJECTION_TABLE} ${graphAlias}\n JOIN rdf_terms ${graphPrefixAlias}\n ON ${graphPrefixAlias}.id = ${graphAlias}.graph_id\n JOIN ${this.factSource(alias)}\n ON ${alias}.graph_id = ${graphAlias}.graph_id`\n : this.factSource(alias);\n\n const tupleJoin = tupleValues\n ? this.buildTupleConstraintJoin(tupleValues, 'rdf3x_tuple_values_scan', alias, alias)\n : { join: '', queryPlan: [] };\n from += tupleJoin.join;\n\n if (resolved.graphPrefix !== undefined) {\n if (!useGraphPrefixSource) {\n from += ` JOIN rdf_terms ${graphPrefixAlias}\n ON ${graphPrefixAlias}.id = ${alias}.graph_id`;\n }\n conditions.push(`${graphPrefixAlias}.kind = ?\n AND ${graphPrefixAlias}.value_head >= ?\n AND ${graphPrefixAlias}.value_head < ?\n AND ${graphPrefixAlias}.value >= ?\n AND ${graphPrefixAlias}.value < ?`);\n params.push('iri', rdfTermValueHead(resolved.graphPrefix), `${rdfTermValueHead(resolved.graphPrefix)}\\uffff`, resolved.graphPrefix, `${resolved.graphPrefix}\\uffff`);\n queryPlan.push('GraphPrefixMembershipFilter');\n }\n\n if (resolved.objectRange) {\n from += ` JOIN rdf_terms object_range\n ON object_range.id = ${alias}.object_id`;\n this.appendObjectRangeCondition('object_range', resolved.objectRange, conditions, params, queryPlan);\n }\n const termFilterJoins: string[] = [];\n this.appendTermFilterJoinsAndConditions(\n resolved,\n ['graph', ...TERM_KEYS],\n (key) => `${alias}.${PATTERN_COLUMNS[key]}`,\n termFilterJoins,\n conditions,\n params,\n queryPlan,\n 'membership_scan_term_filter',\n );\n from += termFilterJoins.join('');\n\n const whereClause = conditions.length > 0 ? ` WHERE ${conditions.join(' AND ')}` : '';\n const orderClause = this.buildOrderClause(options, {\n graph: `${alias}.graph_id`,\n subject: `${alias}.subject_id`,\n predicate: `${alias}.predicate_id`,\n object: `${alias}.object_id`,\n });\n const pagination = this.buildPagination(options);\n return {\n sql: `\n SELECT\n ${alias}.graph_id,\n ${alias}.subject_id,\n ${alias}.predicate_id,\n ${alias}.object_id\n FROM ${from}\n ${orderClause.joins}\n ${whereClause}\n ${orderClause.orderBy || ` ORDER BY ${alias}.graph_id, ${alias}.subject_id, ${alias}.predicate_id, ${alias}.object_id`}\n ${pagination.sql}\n `,\n params: [...params, ...pagination.params],\n countSql: `SELECT COUNT(*) AS count FROM ${from} ${whereClause}`,\n countParams: params,\n queryPlan: [\n ...queryPlan,\n ...(orderClause.orderBy ? [`Rdf3xJoinOrder(${describeScanOrder(options)})`] : []),\n ...tupleJoin.queryPlan,\n ...(pagination.sql ? ['Pagination'] : []),\n ],\n };\n }\n\n private compileJoinPatterns(patterns: RdfQuadJoinPattern[], options?: Rdf3xJoinOptions): Rdf3xCompiledJoin {\n const sources = patterns.map((entry, inputIndex) => {\n const resolved = this.resolveJoinPattern(entry.pattern);\n const permutation = this.choosePermutation(resolved.ids, {\n idSets: resolved.idSets,\n objectRange: Boolean(resolved.objectRange),\n termFilters: resolved.termFilters,\n });\n const estimate = resolved.unresolved\n ? {\n uniqueTriples: 0,\n matchingQuads: 0,\n source: 'full-count',\n indexChoice: 'none',\n } satisfies Rdf3xCardinalityEstimate\n : this.estimateResolvedCardinality(resolved);\n return {\n inputIndex,\n alias: `q${inputIndex}`,\n membershipAlias: `m${inputIndex}`,\n sourceKind: shouldUseMembershipSource(resolved) ? 'membership' : 'permutation',\n entry,\n resolved,\n permutation,\n estimate,\n } satisfies Rdf3xJoinSource;\n });\n const orderedSources = this.orderJoinSources(sources);\n const indexOnly = this.canUseIndexOnlyJoin(sources, options);\n const queryPlan: string[] = [\n `Rdf3xJoinBGP(${patterns.length})`,\n `Rdf3xJoinOrder(${orderedSources.map((source) => `?${source.inputIndex}:${source.estimate.indexChoice}`).join('>')})`,\n ...(indexOnly ? ['Rdf3xIndexOnlyJoin'] : []),\n ];\n const variableColumns = new Map<string, string>();\n const variableAliases = new Map<string, string>();\n const conditions: string[] = [];\n const params: unknown[] = [];\n const countParams: unknown[] = [];\n const indexChoices: string[] = [];\n const fromFragments: string[] = [];\n\n for (const [position, source] of orderedSources.entries()) {\n if (source.resolved.unresolved) {\n return {\n from: '',\n joins: '',\n whereClause: '',\n sql: '',\n params: [],\n countParams: [],\n indexChoice: 'none',\n queryPlan,\n variableColumns,\n variableAliases,\n unresolved: source.resolved.unresolved,\n };\n }\n\n const mergeJoin = this.buildMergeJoinPlan(source, variableColumns);\n const scanSql = this.joinSourceSql(source, position === 0, mergeJoin, indexOnly);\n fromFragments.push(scanSql.from);\n conditions.push(...scanSql.conditions);\n params.push(...scanSql.params);\n countParams.push(...scanSql.params);\n queryPlan.push(...scanSql.queryPlan);\n indexChoices.push(source.estimate.indexChoice);\n\n for (const key of ['graph', ...TERM_KEYS] as Rdf3xPatternKey[]) {\n const variableName = source.entry.variables[key];\n if (!variableName) {\n continue;\n }\n const column = this.joinSourceColumnRef(source, key);\n const existing = variableColumns.get(variableName);\n if (existing) {\n if (!mergeJoin.keys.has(key)) {\n conditions.push(`${existing} = ${column}`);\n }\n } else {\n variableColumns.set(variableName, column);\n }\n }\n }\n\n const projectVariables = options?.project ?? [...variableColumns.keys()];\n const projectionColumns = projectVariables.map((variableName) => {\n const column = variableColumns.get(variableName);\n if (!column) {\n throw new Error(`Rdf3x BGP join cannot project unbound variable: ${variableName}`);\n }\n const alias = `v${variableAliases.size}`;\n variableAliases.set(variableName, alias);\n return `${column} AS ${alias}`;\n });\n const projection = projectionColumns.length > 0\n ? `${options?.distinct ? 'DISTINCT ' : ''}${projectionColumns.join(', ')}`\n : `${options?.distinct ? 'DISTINCT ' : ''}1 AS __empty`;\n const valueJoins = this.buildJoinValuesJoins(options?.values ?? [], variableColumns);\n const orderClause = this.buildJoinOrderClause(options, variableColumns);\n const whereClause = conditions.length > 0 ? ` WHERE ${conditions.join(' AND ')}` : '';\n const from = `${fromFragments.join('')}${valueJoins.joins}`;\n let sql = `SELECT ${projection} FROM ${from}${orderClause.joins}${whereClause}${orderClause.orderBy}`;\n const sqlParams = [...params];\n const paginated = options?.limit !== undefined || options?.offset !== undefined;\n const countMatchedRows = options?.countMatchedRows ?? true;\n if (options?.limit !== undefined) {\n sql += ' LIMIT ?';\n sqlParams.push(options.limit);\n }\n if (options?.offset !== undefined) {\n if (options.limit === undefined) {\n sql += ' LIMIT -1';\n }\n sql += ' OFFSET ?';\n sqlParams.push(options.offset);\n }\n if (orderClause.orderBy) {\n queryPlan.push(`Rdf3xJoinOrderBy(${(options?.orderBy ?? []).map((entry) => `${entry.direction ?? 'asc'}:${entry.variable}`).join(',')})`);\n }\n queryPlan.push(...valueJoins.queryPlan);\n if (options?.distinct) {\n queryPlan.push(`Rdf3xJoinDistinct(${projectVariables.map((variableName) => `?${variableName}`).join(',')})`);\n }\n if (paginated) {\n queryPlan.push('Rdf3xJoinLimit');\n }\n return {\n from,\n joins: orderClause.joins,\n whereClause,\n sql,\n params: sqlParams,\n countSql: paginated && countMatchedRows ? `SELECT COUNT(*) AS count FROM ${from}${orderClause.joins}${whereClause}` : undefined,\n countParams,\n indexChoice: `Rdf3xJoinBGP(${indexChoices.join('>')})`,\n queryPlan,\n variableColumns,\n variableAliases,\n };\n }\n\n private joinSourceSql(\n source: Rdf3xJoinSource,\n first: boolean,\n mergeJoin: Rdf3xMergeJoinPlan,\n indexOnly: boolean,\n ): Rdf3xJoinSourceSql {\n if (source.sourceKind === 'membership') {\n return this.membershipJoinSourceSql(source, first, mergeJoin);\n }\n\n const conditions: string[] = [];\n const params: unknown[] = [];\n const queryPlan: string[] = [`Rdf3xPermutationScan(${source.permutation.name})`];\n const alias = source.alias;\n const graphPrefixAlias = `${source.membershipAlias}_graph_prefix`;\n\n for (const key of TERM_KEYS) {\n const id = source.resolved.ids[key];\n if (id === undefined) {\n continue;\n }\n conditions.push(`${alias}.${TERM_COLUMN[key]} = ?`);\n params.push(id);\n }\n this.appendResolvedIdSetConditions(\n source.resolved,\n TERM_KEYS,\n (key) => `${alias}.${TERM_COLUMN[key as Rdf3xTermKey]}`,\n conditions,\n params,\n queryPlan,\n );\n this.appendResolvedExcludedIdSetConditions(\n source.resolved,\n TERM_KEYS,\n (key) => `${alias}.${TERM_COLUMN[key as Rdf3xTermKey]}`,\n conditions,\n params,\n queryPlan,\n );\n\n let from = first\n ? this.permutationSource(source.permutation, alias)\n : ` JOIN ${this.permutationSource(source.permutation, alias)}\n ON ${mergeJoin.conditions.length > 0 ? mergeJoin.conditions.join(' AND ') : '1 = 1'}`;\n if (!first && mergeJoin.variables.length > 0) {\n queryPlan.push(`Rdf3xMergeJoin(${mergeJoin.variables.map((variableName) => `?${variableName}`).join(',')})`);\n }\n\n if (source.resolved.ids.graph !== undefined) {\n conditions.push(`${alias}.graph_id = ?`);\n params.push(source.resolved.ids.graph);\n queryPlan.push('GraphMembershipFilter');\n }\n this.appendResolvedIdSetConditions(\n source.resolved,\n ['graph'],\n () => `${alias}.graph_id`,\n conditions,\n params,\n queryPlan,\n );\n this.appendResolvedExcludedIdSetConditions(\n source.resolved,\n ['graph'],\n () => `${alias}.graph_id`,\n conditions,\n params,\n queryPlan,\n );\n if (source.resolved.graphPrefix !== undefined) {\n from += ` JOIN rdf_terms ${graphPrefixAlias}\n ON ${graphPrefixAlias}.id = ${alias}.graph_id`;\n conditions.push(`${graphPrefixAlias}.kind = ?\n AND ${graphPrefixAlias}.value_head >= ?\n AND ${graphPrefixAlias}.value_head < ?\n AND ${graphPrefixAlias}.value >= ?\n AND ${graphPrefixAlias}.value < ?`);\n params.push('iri', rdfTermValueHead(source.resolved.graphPrefix), `${rdfTermValueHead(source.resolved.graphPrefix)}\\uffff`, source.resolved.graphPrefix, `${source.resolved.graphPrefix}\\uffff`);\n queryPlan.push('GraphPrefixMembershipFilter');\n }\n if (source.resolved.objectRange) {\n const alias = `${source.alias}_object_range`;\n from += ` JOIN rdf_terms ${alias}\n ON ${alias}.id = ${source.alias}.object_id`;\n this.appendObjectRangeCondition(alias, source.resolved.objectRange, conditions, params, queryPlan);\n }\n const termFilterJoins: string[] = [];\n this.appendTermFilterJoinsAndConditions(\n source.resolved,\n ['graph', ...TERM_KEYS],\n (key) => this.joinSourceColumnRef(source, key),\n termFilterJoins,\n conditions,\n params,\n queryPlan,\n `${source.alias}_term_filter`,\n );\n from += termFilterJoins.join('');\n\n return {\n from,\n conditions,\n params,\n queryPlan,\n };\n }\n\n private membershipJoinSourceSql(\n source: Rdf3xJoinSource,\n first: boolean,\n mergeJoin: Rdf3xMergeJoinPlan,\n ): Rdf3xJoinSourceSql {\n const conditions: string[] = [];\n const params: unknown[] = [];\n const queryPlan: string[] = ['Rdf3xMembershipScan'];\n const alias = source.membershipAlias;\n const graphAlias = `${alias}_graph`;\n const graphPrefixAlias = `${alias}_graph_prefix`;\n const useGraphPrefixSource = first\n && source.resolved.graphPrefix !== undefined\n && source.resolved.ids.graph === undefined\n && !source.resolved.idSets?.graph?.length\n && !source.resolved.excludedIdSets?.graph?.length;\n\n for (const key of ['graph', ...TERM_KEYS] as Rdf3xPatternKey[]) {\n const id = source.resolved.ids[key];\n if (id === undefined) {\n continue;\n }\n conditions.push(`${this.joinSourceColumnRef(source, key)} = ?`);\n params.push(id);\n }\n this.appendResolvedIdSetConditions(\n source.resolved,\n ['graph', ...TERM_KEYS],\n (key) => this.joinSourceColumnRef(source, key),\n conditions,\n params,\n queryPlan,\n );\n this.appendResolvedExcludedIdSetConditions(\n source.resolved,\n ['graph', ...TERM_KEYS],\n (key) => this.joinSourceColumnRef(source, key),\n conditions,\n params,\n queryPlan,\n );\n\n let from = '';\n if (useGraphPrefixSource) {\n from = `${GRAPH_PROJECTION_TABLE} ${graphAlias}\n JOIN rdf_terms ${graphPrefixAlias}\n ON ${graphPrefixAlias}.id = ${graphAlias}.graph_id\n JOIN ${this.factSource(alias)}\n ON ${alias}.graph_id = ${graphAlias}.graph_id`;\n } else {\n from = first\n ? this.factSource(alias)\n : ` JOIN ${this.factSource(alias)}\n ON ${mergeJoin.conditions.length > 0 ? mergeJoin.conditions.join(' AND ') : '1 = 1'}`;\n }\n if (!first && mergeJoin.variables.length > 0) {\n queryPlan.push(`Rdf3xMergeJoin(${mergeJoin.variables.map((variableName) => `?${variableName}`).join(',')})`);\n }\n\n if (source.resolved.ids.graph !== undefined) {\n queryPlan.push('GraphMembershipFilter');\n }\n if (source.resolved.graphPrefix !== undefined) {\n if (!useGraphPrefixSource) {\n from += ` JOIN rdf_terms ${graphPrefixAlias}\n ON ${graphPrefixAlias}.id = ${alias}.graph_id`;\n }\n conditions.push(`${graphPrefixAlias}.kind = ?\n AND ${graphPrefixAlias}.value_head >= ?\n AND ${graphPrefixAlias}.value_head < ?\n AND ${graphPrefixAlias}.value >= ?\n AND ${graphPrefixAlias}.value < ?`);\n params.push('iri', rdfTermValueHead(source.resolved.graphPrefix), `${rdfTermValueHead(source.resolved.graphPrefix)}\\uffff`, source.resolved.graphPrefix, `${source.resolved.graphPrefix}\\uffff`);\n queryPlan.push('GraphPrefixMembershipFilter');\n }\n if (source.resolved.objectRange) {\n const rangeAlias = `${alias}_object_range`;\n from += ` JOIN rdf_terms ${rangeAlias}\n ON ${rangeAlias}.id = ${alias}.object_id`;\n this.appendObjectRangeCondition(rangeAlias, source.resolved.objectRange, conditions, params, queryPlan);\n }\n const termFilterJoins: string[] = [];\n this.appendTermFilterJoinsAndConditions(\n source.resolved,\n ['graph', ...TERM_KEYS],\n (key) => this.joinSourceColumnRef(source, key),\n termFilterJoins,\n conditions,\n params,\n queryPlan,\n `${alias}_term_filter`,\n );\n from += termFilterJoins.join('');\n\n return {\n from,\n conditions,\n params,\n queryPlan,\n };\n }\n\n private canUseIndexOnlyJoin(\n sources: Rdf3xJoinSource[],\n options: Rdf3xJoinOptions | undefined,\n ): boolean {\n if (!options?.distinct) {\n return false;\n }\n if (options.limit !== undefined || options.offset !== undefined) {\n return false;\n }\n return sources.every((source) => (\n !source.resolved.unresolved\n && source.resolved.ids.graph === undefined\n && !source.resolved.idSets?.graph?.length\n && !source.resolved.excludedIdSets?.graph?.length\n && !source.resolved.termFilters?.graph\n && source.resolved.graphPrefix === undefined\n && !source.entry.variables.graph\n ));\n }\n\n private buildMergeJoinPlan(\n source: Rdf3xJoinSource,\n variableColumns: Map<string, string>,\n ): Rdf3xMergeJoinPlan {\n const conditions: string[] = [];\n const keys = new Set<Rdf3xPatternKey>();\n const variables = new Set<string>();\n\n for (const key of TERM_KEYS) {\n const variableName = source.entry.variables[key];\n if (!variableName) {\n continue;\n }\n const existing = variableColumns.get(variableName);\n if (!existing) {\n continue;\n }\n conditions.push(`${existing} = ${this.joinSourceColumnRef(source, key)}`);\n keys.add(key);\n variables.add(variableName);\n }\n\n return {\n conditions,\n keys,\n variables: [...variables],\n };\n }\n\n private joinSourceColumnRef(source: Rdf3xJoinSource, key: Rdf3xPatternKey): string {\n const alias = source.sourceKind === 'membership' ? source.membershipAlias : source.alias;\n return `${alias}.${PATTERN_COLUMNS[key]}`;\n }\n\n private buildTupleConstraintJoin(\n source: RdfQuadTupleConstraintSource,\n tableName: string,\n indexAlias: string,\n membershipAlias: string,\n ): { join: string; queryPlan: string[] } {\n const columns = uniquePatternKeys(source.columns);\n if (columns.length === 0) {\n return { join: '', queryPlan: [] };\n }\n\n this.populateTupleConstraintTable(tableName, columns, source.rows);\n const alias = 'tuple_values';\n const onClause = columns\n .map((key) => `${alias}.${this.tupleColumnName(key)} = ${this.tupleColumnRef(key, indexAlias, membershipAlias)}`)\n .join(' AND ');\n return {\n join: ` JOIN ${tableName} ${alias} ON ${onClause}`,\n queryPlan: [`TupleValuesJoin(${columns.join(',')})`],\n };\n }\n\n private buildJoinValuesJoins(\n sources: RdfValuesBindingSource[],\n variableColumns: Map<string, string>,\n ): { joins: string; queryPlan: string[] } {\n if (sources.length === 0) {\n return { joins: '', queryPlan: [] };\n }\n\n const joins: string[] = [];\n const queryPlan: string[] = [];\n sources.forEach((source, sourceIndex) => {\n const tableName = `rdf3x_join_values_${sourceIndex}`;\n const alias = `join_values_${sourceIndex}`;\n this.populateJoinValuesTable(tableName, source);\n const onClause = source.variables.map((variableName, variableIndex) => {\n const column = variableColumns.get(variableName);\n if (!column) {\n throw new Error(`Rdf3x BGP join VALUES cannot constrain unbound variable: ${variableName}`);\n }\n return `${alias}.${this.joinValueColumnName(variableIndex)} = ${column}`;\n }).join(' AND ');\n joins.push(` JOIN ${tableName} ${alias} ON ${onClause}`);\n queryPlan.push(`Rdf3xJoinTupleValues(${source.variables.map((variableName) => `?${variableName}`).join(',')})`);\n });\n return {\n joins: joins.join(''),\n queryPlan,\n };\n }\n\n private populateJoinValuesTable(tableName: string, source: RdfValuesBindingSource): void {\n const db = this.requireDb();\n const columnDefs = source.variables\n .map((_variableName, index) => `${this.joinValueColumnName(index)} INTEGER NOT NULL`)\n .join(', ');\n db.exec(`DROP TABLE IF EXISTS ${tableName}`);\n db.exec(`CREATE TEMP TABLE ${tableName} (${columnDefs})`);\n\n const valueRows = source.rows\n .map((row) => source.variables.map((variableName) => this.termIdForTupleConstraint(row[variableName])))\n .filter((ids): ids is number[] => ids.every((id) => id !== undefined));\n if (valueRows.length === 0) {\n return;\n }\n\n const insertColumns = source.variables\n .map((_variableName, index) => this.joinValueColumnName(index))\n .join(', ');\n const placeholders = `(${source.variables.map(() => '?').join(', ')})`;\n const insert = db.prepare(`INSERT INTO ${tableName} (${insertColumns}) VALUES ${placeholders}`);\n for (const valueRow of valueRows) {\n insert.run(...valueRow);\n }\n }\n\n private joinValueColumnName(index: number): string {\n return `value_${index}_id`;\n }\n\n private populateTupleConstraintTable(\n tableName: string,\n columns: Rdf3xPatternKey[],\n rows: RdfQuadTupleConstraintSource['rows'],\n ): void {\n const db = this.requireDb();\n const columnDefs = columns.map((key) => `${this.tupleColumnName(key)} INTEGER NOT NULL`).join(', ');\n const primaryKey = columns.map((key) => this.tupleColumnName(key)).join(', ');\n db.exec(`DROP TABLE IF EXISTS ${tableName}`);\n db.exec(`CREATE TEMP TABLE ${tableName} (${columnDefs}, PRIMARY KEY (${primaryKey}))`);\n\n const valueRows = rows\n .map((row) => columns.map((key) => this.termIdForTupleConstraint(row[key])))\n .filter((ids): ids is number[] => ids.every((id) => id !== undefined));\n if (valueRows.length === 0) {\n return;\n }\n\n const insertColumns = columns.map((key) => this.tupleColumnName(key)).join(', ');\n const placeholders = `(${columns.map(() => '?').join(', ')})`;\n const insert = db.prepare(`INSERT OR IGNORE INTO ${tableName} (${insertColumns}) VALUES ${placeholders}`);\n for (const valueRow of valueRows) {\n insert.run(...valueRow);\n }\n }\n\n private termIdForTupleConstraint(term: Term | undefined): number | undefined {\n if (!term) {\n return undefined;\n }\n return this.requireDictionary().find(term);\n }\n\n private tupleColumnName(key: Rdf3xPatternKey): 'graph_id' | TripleColumn {\n return key === 'graph' ? 'graph_id' : TERM_COLUMN[key];\n }\n\n private tupleColumnRef(key: Rdf3xPatternKey, indexAlias: string, membershipAlias: string): string {\n return key === 'graph' ? `${membershipAlias}.graph_id` : `${indexAlias}.${TERM_COLUMN[key]}`;\n }\n\n private buildJoinOrderClause(\n options: Rdf3xJoinOptions | undefined,\n variableColumns: Map<string, string>,\n ): { joins: string; orderBy: string } {\n if (!options?.orderBy || options.orderBy.length === 0) {\n return { joins: '', orderBy: '' };\n }\n\n const joins = options.orderBy.map((entry, index) => {\n const column = variableColumns.get(entry.variable);\n if (!column) {\n throw new Error(`Rdf3x join cannot order by unbound variable: ${entry.variable}`);\n }\n const alias = `join_order_t${index}`;\n return {\n join: ` JOIN rdf_terms ${alias} ON ${alias}.id = ${column}`,\n order: `${alias}.value${entry.direction === 'desc' ? ' DESC' : ''}`,\n };\n });\n return {\n joins: joins.map((entry) => entry.join).join(''),\n orderBy: ` ORDER BY ${joins.map((entry) => entry.order).join(', ')}`,\n };\n }\n\n private buildJoinAggregateColumn(\n aggregate: RdfQueryAggregate,\n alias: string,\n variableColumns: Map<string, string>,\n aggregateTypes: Map<string, Rdf3xAggregateValueType>,\n numericJoins: Map<string, string>,\n numericJoinSql: string[],\n errorPrefix: string,\n ): string {\n if (aggregate.type === 'count' && !aggregate.variable) {\n aggregateTypes.set(aggregate.as, 'integer');\n return `${aggregate.distinct ? `COUNT(DISTINCT ${joinSolutionMappingKeyExpression(variableColumns, aggregate.distinctVariables, errorPrefix)})` : 'COUNT(*)'} AS ${alias}`;\n }\n if (!aggregate.variable) {\n throw new Error(`${errorPrefix} ${aggregate.type} aggregate requires a bound variable`);\n }\n const column = variableColumns.get(aggregate.variable);\n if (!column) {\n throw new Error(`${errorPrefix} aggregate cannot read unbound variable: ${aggregate.variable}`);\n }\n if (aggregate.type === 'count') {\n aggregateTypes.set(aggregate.as, 'integer');\n return `COUNT(${aggregate.distinct ? 'DISTINCT ' : ''}${column}) AS ${alias}`;\n }\n if (aggregate.distinct) {\n throw new Error(`${errorPrefix} ${aggregate.type} DISTINCT aggregate is not supported in SQL aggregate path`);\n }\n aggregateTypes.set(aggregate.as, 'decimal');\n const termAlias = numericJoins.get(aggregate.variable) ?? `rdf3x_agg_numeric_t${numericJoins.size}`;\n if (!numericJoins.has(aggregate.variable)) {\n numericJoins.set(aggregate.variable, termAlias);\n numericJoinSql.push(` JOIN rdf_terms ${termAlias} ON ${termAlias}.id = ${column} AND ${termAlias}.kind = 'literal' AND ${termAlias}.numeric_value IS NOT NULL`);\n }\n switch (aggregate.type) {\n case 'sum':\n return `COALESCE(SUM(${termAlias}.numeric_value), 0) AS ${alias}`;\n case 'avg':\n return `AVG(${termAlias}.numeric_value) AS ${alias}`;\n case 'min':\n return `MIN(${termAlias}.numeric_value) AS ${alias}`;\n case 'max':\n return `MAX(${termAlias}.numeric_value) AS ${alias}`;\n default: {\n const exhaustive: never = aggregate.type;\n throw new Error(`Unsupported RDF-3X BGP aggregate type: ${exhaustive}`);\n }\n }\n }\n\n private buildGroupAggregateHavingClause(\n having: RdfQuadJoinGroupAggregateOptions['having'] | undefined,\n aggregateAliases: Map<string, string>,\n ): { sql: string; params: number[] } {\n if (!having || having.length === 0) {\n return { sql: '', params: [] };\n }\n\n const conditions: string[] = [];\n const params: number[] = [];\n for (const entry of having) {\n const alias = aggregateAliases.get(entry.aggregate);\n if (!alias) {\n throw new Error(`RDF-3X BGP group aggregate cannot HAVING on unknown aggregate: ${entry.aggregate}`);\n }\n conditions.push(`${alias} ${this.havingSqlOperator(entry.operator)} ?`);\n params.push(entry.value);\n }\n return {\n sql: ` HAVING ${conditions.join(' AND ')}`,\n params,\n };\n }\n\n private havingSqlOperator(operator: NonNullable<RdfQuadJoinGroupAggregateOptions['having']>[number]['operator']): string {\n switch (operator) {\n case '$eq':\n return '=';\n case '$ne':\n return '!=';\n case '$gt':\n return '>';\n case '$gte':\n return '>=';\n case '$lt':\n return '<';\n case '$lte':\n return '<=';\n default: {\n const exhaustive: never = operator;\n throw new Error(`Unsupported RDF-3X BGP group aggregate HAVING operator: ${exhaustive}`);\n }\n }\n }\n\n private buildGroupAggregateOrderScope(\n options: RdfQuadJoinGroupAggregateOptions,\n variableColumns: Map<string, string>,\n aggregateAliases: Map<string, string>,\n ): { joins: string; orderBy: string } {\n if (!options.orderBy || options.orderBy.length === 0) {\n return { joins: '', orderBy: '' };\n }\n\n const joins: string[] = [];\n const orders = options.orderBy.map((entry, index) => {\n const aggregateAlias = aggregateAliases.get(entry.variable);\n if (aggregateAlias) {\n return `${aggregateAlias}${entry.direction === 'desc' ? ' DESC' : ''}`;\n }\n const column = variableColumns.get(entry.variable);\n if (!column) {\n throw new Error(`RDF-3X BGP group aggregate cannot order by unbound variable: ${entry.variable}`);\n }\n const alias = `rdf3x_group_order_t${index}`;\n joins.push(` JOIN rdf_terms ${alias} ON ${alias}.id = ${column}`);\n return `${alias}.value${entry.direction === 'desc' ? ' DESC' : ''}`;\n });\n return {\n joins: joins.join(''),\n orderBy: ` ORDER BY ${orders.join(', ')}`,\n };\n }\n\n private buildOrderClause(\n options?: Rdf3xTripleScanOptions,\n columnRefs?: Record<'graph' | Rdf3xTermKey, string>,\n ): { joins: string; orderBy: string } {\n if (!options?.order || options.order.length === 0) {\n return { joins: '', orderBy: '' };\n }\n\n const joins = options.order.map((termName, index) => {\n const column = ORDER_COLUMN[termName];\n const alias = `order_t${index}`;\n const direction = options.orderDirections?.[index] ?? (options.reverse ? 'desc' : 'asc');\n const columnRef = columnRefs?.[termName] ?? (termName === 'graph' ? 'membership.graph_id' : `idx.${column}`);\n return {\n join: ` JOIN rdf_terms ${alias} ON ${alias}.id = ${columnRef}`,\n order: `${alias}.value${direction === 'desc' ? ' DESC' : ''}`,\n };\n });\n return {\n joins: joins.map((entry) => entry.join).join(''),\n orderBy: ` ORDER BY ${joins.map((entry) => entry.order).join(', ')}`,\n };\n }\n\n private chooseJoinStart(sources: Rdf3xJoinSource[]): Rdf3xJoinSource {\n if (sources.length === 0) {\n throw new Error('Rdf3x join requires at least one source');\n }\n return [...sources].sort((left, right) => this.compareJoinSources(left, right))[0];\n }\n\n private orderJoinSources(sources: Rdf3xJoinSource[]): Rdf3xJoinSource[] {\n const remaining = [...sources];\n const ordered: Rdf3xJoinSource[] = [];\n const boundVariables = new Set<string>();\n\n while (remaining.length > 0) {\n const next = ordered.length === 0\n ? this.chooseJoinStart(remaining)\n : this.chooseNextJoinSource(remaining, boundVariables);\n ordered.push(next);\n for (const variableName of this.sourceVariables(next)) {\n boundVariables.add(variableName);\n }\n remaining.splice(remaining.findIndex((source) => source.inputIndex === next.inputIndex), 1);\n }\n\n return ordered;\n }\n\n private chooseNextJoinSource(\n sources: Rdf3xJoinSource[],\n boundVariables: Set<string>,\n ): Rdf3xJoinSource {\n return [...sources].sort((left, right) => (\n this.compareJoinConnectivity(left, right, boundVariables)\n || this.compareJoinFanout(left, right, boundVariables)\n || this.compareJoinSources(left, right)\n ))[0];\n }\n\n private compareJoinConnectivity(\n left: Rdf3xJoinSource,\n right: Rdf3xJoinSource,\n boundVariables: Set<string>,\n ): number {\n const leftConnected = this.boundVariableCount(left, boundVariables);\n const rightConnected = this.boundVariableCount(right, boundVariables);\n if (leftConnected !== rightConnected) {\n return rightConnected - leftConnected;\n }\n return 0;\n }\n\n private boundVariableCount(source: Rdf3xJoinSource, boundVariables: Set<string>): number {\n return this.sourceVariables(source).filter((variableName) => boundVariables.has(variableName)).length;\n }\n\n private compareJoinFanout(\n left: Rdf3xJoinSource,\n right: Rdf3xJoinSource,\n boundVariables: Set<string>,\n ): number {\n const leftFanout = this.estimateJoinFanout(left, boundVariables);\n const rightFanout = this.estimateJoinFanout(right, boundVariables);\n if (leftFanout !== rightFanout) {\n return leftFanout - rightFanout;\n }\n return 0;\n }\n\n private estimateJoinFanout(source: Rdf3xJoinSource, boundVariables: Set<string>): number {\n if (source.resolved.unresolved) {\n return Number.POSITIVE_INFINITY;\n }\n\n const boundKeys = this.boundPatternKeys(source, boundVariables);\n if (boundKeys.length === 0) {\n return source.estimate.matchingQuads;\n }\n\n const distinctBoundTuples = this.countDistinctResolvedMembershipTuple(source.resolved, boundKeys);\n if (distinctBoundTuples === 0) {\n return source.estimate.matchingQuads === 0 ? 0 : Number.POSITIVE_INFINITY;\n }\n return source.estimate.matchingQuads / distinctBoundTuples;\n }\n\n private boundPatternKeys(source: Rdf3xJoinSource, boundVariables: Set<string>): Rdf3xPatternKey[] {\n return uniquePatternKeys((['graph', ...TERM_KEYS] as Rdf3xPatternKey[]).filter((key) => {\n const variableName = source.entry.variables[key];\n return variableName ? boundVariables.has(variableName) : false;\n }));\n }\n\n private sourceVariables(source: Rdf3xJoinSource): string[] {\n return [...new Set(Object.values(source.entry.variables).filter((value): value is string => Boolean(value)))];\n }\n\n private compareJoinSources(left: Rdf3xJoinSource, right: Rdf3xJoinSource): number {\n const leftResolved = left.resolved.unresolved ? Number.POSITIVE_INFINITY : left.estimate.matchingQuads;\n const rightResolved = right.resolved.unresolved ? Number.POSITIVE_INFINITY : right.estimate.matchingQuads;\n if (leftResolved !== rightResolved) {\n return leftResolved - rightResolved;\n }\n if (left.estimate.uniqueTriples !== right.estimate.uniqueTriples) {\n return left.estimate.uniqueTriples - right.estimate.uniqueTriples;\n }\n return left.inputIndex - right.inputIndex;\n }\n\n private estimateResolvedCardinality(resolved: Rdf3xResolvedPattern): Rdf3xCardinalityEstimate {\n const ids = resolved.ids;\n if (resolved.objectRange || hasResolvedTermFilters(resolved)) {\n return this.estimateObjectRangeCardinality(resolved);\n }\n if (hasResolvedIdSets(resolved) || hasResolvedExcludedIdSets(resolved)) {\n return this.estimateResolvedMembershipCardinality(resolved);\n }\n const termIds = TERM_KEYS.filter((key) => ids[key] !== undefined);\n if (ids.graph !== undefined || resolved.graphPrefix !== undefined) {\n return this.estimateResolvedMembershipCardinality(resolved);\n }\n if (termIds.length === 3) {\n return this.estimateExactTriple(ids, this.choosePermutation(ids).name);\n }\n if (termIds.length === 2) {\n return this.estimatePairProjection(ids, this.choosePermutation(ids).name);\n }\n if (termIds.length === 1) {\n return this.estimateTermProjection(ids, this.choosePermutation(ids).name);\n }\n return {\n uniqueTriples: this.uniqueTripleCount(),\n matchingQuads: this.rowCount(RDF_FACTS_TABLE),\n source: 'full-count',\n indexChoice: this.choosePermutation(ids, {\n idSets: resolved.idSets,\n objectRange: Boolean(resolved.objectRange),\n termFilters: resolved.termFilters,\n }).name,\n };\n }\n\n private resolveJoinPattern(pattern: QuintPattern): Rdf3xResolvedPattern {\n const ids: Partial<Record<Rdf3xPatternKey, number>> = {};\n const idSets: Partial<Record<Rdf3xPatternKey, number[]>> = {};\n const excludedIdSets: Partial<Record<Rdf3xPatternKey, number[]>> = {};\n const termFilters: Partial<Record<Rdf3xPatternKey, Rdf3xResolvedTermFilter>> = {};\n let graphPrefix: string | undefined;\n let objectRange: Rdf3xObjectRange | undefined;\n for (const key of ['graph', ...TERM_KEYS] as Rdf3xPatternKey[]) {\n const match = pattern[key];\n if (!match) {\n continue;\n }\n if (key === 'graph' && isGraphPrefixPattern(match)) {\n graphPrefix = match.$startsWith;\n continue;\n }\n if (isTermInPattern(match)) {\n const resolvedIds = this.resolveTermInIds(match);\n if (resolvedIds.length === 0) {\n return { ids, idSets, excludedIdSets, graphPrefix, objectRange, unresolved: key };\n }\n idSets[key] = resolvedIds;\n continue;\n }\n if (isTermNotInPattern(match)) {\n const resolvedIds = this.resolveTermNotInIds(match);\n if (resolvedIds.length > 0) {\n excludedIdSets[key] = resolvedIds;\n }\n continue;\n }\n if (isOperatorPattern(match)) {\n const resolved = this.resolveOperatorPattern(key, match);\n if (resolved.unresolved) {\n return { ids, idSets, excludedIdSets, termFilters, graphPrefix, objectRange, unresolved: key };\n }\n if (resolved.graphPrefix !== undefined) graphPrefix = resolved.graphPrefix;\n if (resolved.idSet) idSets[key] = resolved.idSet;\n if (resolved.excludedIdSet) excludedIdSets[key] = resolved.excludedIdSet;\n if (resolved.objectRange) objectRange = resolved.objectRange;\n if (resolved.termFilter) termFilters[key] = resolved.termFilter;\n continue;\n }\n if (key === 'object' && isObjectRangePattern(match)) {\n const resolvedRange = this.resolveObjectRange(match);\n if (!resolvedRange) {\n return { ids, idSets, excludedIdSets, termFilters, graphPrefix, objectRange: resolvedRange, unresolved: key };\n }\n objectRange = resolvedRange;\n continue;\n }\n if (!isRdfTerm(match)) {\n return { ids, idSets, excludedIdSets, termFilters, graphPrefix, unresolved: key };\n }\n const id = this.requireDictionary().find(match);\n if (id === undefined) {\n return { ids, idSets, excludedIdSets, termFilters, graphPrefix, unresolved: key };\n }\n ids[key] = id;\n }\n return {\n ids,\n ...(Object.keys(idSets).length > 0 ? { idSets } : {}),\n ...(Object.keys(excludedIdSets).length > 0 ? { excludedIdSets } : {}),\n ...(Object.keys(termFilters).length > 0 ? { termFilters } : {}),\n ...(graphPrefix !== undefined ? { graphPrefix } : {}),\n ...(objectRange !== undefined ? { objectRange } : {}),\n };\n }\n\n private joinMetrics(\n indexChoice: Rdf3xJoinMetrics['indexChoice'],\n matchedRows: number,\n returnedRows: number,\n start: number,\n queryPlan: string[],\n ): Rdf3xJoinMetrics {\n return {\n engine: 'solid-rdf3x',\n indexChoice,\n matchedRows,\n returnedRows,\n durationMs: Date.now() - start,\n queryPlan,\n };\n }\n\n private joinRowsToBindings(\n rows: Array<Record<string, number>>,\n variableAliases: Map<string, string>,\n aggregateAliases?: Map<string, string>,\n aggregateTypes?: Map<string, Rdf3xAggregateValueType>,\n ): Rdf3xJoinScanResult['bindings'] {\n const aliases = [...variableAliases.entries()];\n const termMap = this.requireDictionary().rowsForIds(rows.flatMap((row) => (\n aliases\n .map(([, alias]) => row[alias])\n .filter((id): id is number => typeof id === 'number')\n )));\n\n return rows.map((row) => {\n const binding: Rdf3xJoinScanResult['bindings'][number] = {};\n for (const [variableName, alias] of aliases) {\n const id = row[alias];\n if (typeof id !== 'number') {\n continue;\n }\n binding[variableName] = requiredTerm(termMap, id);\n }\n for (const [variableName, alias] of aggregateAliases ?? []) {\n const value = row[alias];\n if (typeof value === 'number') {\n const datatype = aggregateTypes?.get(variableName) === 'decimal' ? XSD_DECIMAL : XSD_INTEGER;\n binding[variableName] = DataFactory.literal(String(value), DataFactory.namedNode(datatype)) as Term;\n }\n }\n return binding;\n });\n }\n\n private buildPagination(options?: Rdf3xTripleScanOptions): { sql: string; params: unknown[] } {\n if (!options) {\n return { sql: '', params: [] };\n }\n\n const clauses: string[] = [];\n const params: unknown[] = [];\n if (options.limit !== undefined) {\n clauses.push('LIMIT ?');\n params.push(Math.max(0, options.limit));\n }\n if (options.offset !== undefined) {\n if (options.limit === undefined) {\n clauses.push('LIMIT -1');\n }\n clauses.push('OFFSET ?');\n params.push(Math.max(0, options.offset));\n }\n return {\n sql: clauses.length > 0 ? ` ${clauses.join(' ')}` : '',\n params,\n };\n }\n\n private estimateExactTriple(\n ids: Partial<Record<Rdf3xPatternKey, number>>,\n indexChoice: Rdf3xPermutationName,\n ): Rdf3xCardinalityEstimate {\n const row = this.requireDb().prepare<{ count: number }>(`\n SELECT COUNT(*) AS count\n FROM (\n SELECT 1\n FROM ${RDF_FACTS_TABLE}\n WHERE subject_id = ?\n AND predicate_id = ?\n AND object_id = ?\n LIMIT 1\n ) exact_triple\n `).get(ids.subject, ids.predicate, ids.object);\n const membership = this.requireDb().prepare<{ count: number }>(`\n SELECT COUNT(*) AS count\n FROM ${RDF_FACTS_TABLE}\n WHERE subject_id = ?\n AND predicate_id = ?\n AND object_id = ?\n `).get(ids.subject, ids.predicate, ids.object);\n return {\n uniqueTriples: row?.count ?? 0,\n matchingQuads: membership?.count ?? 0,\n source: 'exact-triple',\n indexChoice,\n };\n }\n\n private estimatePairProjection(\n ids: Partial<Record<Rdf3xPatternKey, number>>,\n indexChoice: Rdf3xPermutationName,\n ): Rdf3xCardinalityEstimate {\n const projection = this.pairProjectionFor(ids);\n if (!projection) {\n return this.estimateMembershipCardinality(ids);\n }\n\n const [left, right] = projection.columns;\n const row = this.requireDb().prepare<{ triple_count: number; membership_count: number }>(`\n SELECT triple_count, membership_count\n FROM ${projection.table}\n WHERE ${left} = ?\n AND ${right} = ?\n `).get(\n ids[keyForColumn(left)],\n ids[keyForColumn(right)],\n );\n return {\n uniqueTriples: row?.triple_count ?? 0,\n matchingQuads: row?.membership_count ?? 0,\n source: 'projection-stat',\n indexChoice,\n };\n }\n\n private estimateTermProjection(\n ids: Partial<Record<Rdf3xPatternKey, number>>,\n indexChoice: Rdf3xPermutationName,\n ): Rdf3xCardinalityEstimate {\n const key = TERM_KEYS.find((candidate) => ids[candidate] !== undefined);\n if (!key) {\n return this.estimateMembershipCardinality(ids);\n }\n const projection = TERM_PROJECTIONS.find((candidate) => candidate.column === TERM_COLUMN[key]);\n if (!projection) {\n return this.estimateMembershipCardinality(ids);\n }\n\n const row = this.requireDb().prepare<{ triple_count: number; membership_count: number }>(`\n SELECT triple_count, membership_count\n FROM ${projection.table}\n WHERE ${projection.column} = ?\n `).get(ids[key]);\n return {\n uniqueTriples: row?.triple_count ?? 0,\n matchingQuads: row?.membership_count ?? 0,\n source: 'term-stat',\n indexChoice,\n };\n }\n\n private estimateMembershipCardinality(ids: Partial<Record<Rdf3xPatternKey, number>>): Rdf3xCardinalityEstimate {\n return this.estimateResolvedMembershipCardinality({ ids });\n }\n\n private estimateResolvedMembershipCardinality(resolved: Rdf3xResolvedPattern): Rdf3xCardinalityEstimate {\n const { from, whereClause, params } = this.buildMembershipWhere(resolved);\n const matchingQuads = this.requireDb().prepare<{ count: number }>(`\n SELECT COUNT(*) AS count\n FROM ${from}\n ${whereClause}\n `).get(...params)?.count ?? 0;\n const uniqueTriples = this.requireDb().prepare<{ count: number }>(`\n SELECT COUNT(*) AS count\n FROM (\n SELECT DISTINCT subject_id, predicate_id, object_id\n FROM ${from}\n ${whereClause}\n ) distinct_triples\n `).get(...params)?.count ?? 0;\n return {\n uniqueTriples,\n matchingQuads,\n source: 'exact-membership',\n indexChoice: 'source-membership',\n };\n }\n\n private buildMembershipWhere(resolved: Rdf3xResolvedPattern): { from: string; whereClause: string; params: unknown[] } {\n const ids = resolved.ids;\n const conditions: string[] = [];\n const params: unknown[] = [];\n const alias = 'membership';\n const useGraphPrefixSource = resolved.graphPrefix !== undefined\n && ids.graph === undefined\n && !resolved.idSets?.graph?.length\n && !resolved.excludedIdSets?.graph?.length;\n for (const key of ['graph', ...TERM_KEYS] as Rdf3xPatternKey[]) {\n const id = ids[key];\n if (id === undefined) {\n continue;\n }\n conditions.push(`${alias}.${PATTERN_COLUMNS[key]} = ?`);\n params.push(id);\n }\n this.appendResolvedIdSetConditions(\n resolved,\n ['graph', ...TERM_KEYS],\n (key) => `${alias}.${PATTERN_COLUMNS[key]}`,\n conditions,\n params,\n );\n this.appendResolvedExcludedIdSetConditions(\n resolved,\n ['graph', ...TERM_KEYS],\n (key) => `${alias}.${PATTERN_COLUMNS[key]}`,\n conditions,\n params,\n );\n let from = this.factSource(alias);\n if (useGraphPrefixSource) {\n from = `${GRAPH_PROJECTION_TABLE} membership_graph\n JOIN rdf_terms membership_graph_prefix\n ON membership_graph_prefix.id = membership_graph.graph_id\n JOIN ${this.factSource(alias)}\n ON ${alias}.graph_id = membership_graph.graph_id`;\n } else if (resolved.graphPrefix !== undefined) {\n from += ` JOIN rdf_terms membership_graph_prefix\n ON membership_graph_prefix.id = ${alias}.graph_id`;\n }\n if (resolved.graphPrefix !== undefined) {\n conditions.push(`membership_graph_prefix.kind = ?\n AND membership_graph_prefix.value_head >= ?\n AND membership_graph_prefix.value_head < ?\n AND membership_graph_prefix.value >= ?\n AND membership_graph_prefix.value < ?`);\n params.push('iri', rdfTermValueHead(resolved.graphPrefix), `${rdfTermValueHead(resolved.graphPrefix)}\\uffff`, resolved.graphPrefix, `${resolved.graphPrefix}\\uffff`);\n }\n const termFilterJoins: string[] = [];\n this.appendTermFilterJoinsAndConditions(\n resolved,\n ['graph', ...TERM_KEYS],\n (key) => `${alias}.${PATTERN_COLUMNS[key]}`,\n termFilterJoins,\n conditions,\n params,\n undefined,\n 'membership_estimate_term_filter',\n );\n from += termFilterJoins.join('');\n return {\n whereClause: conditions.length > 0 ? ` WHERE ${conditions.join(' AND ')}` : '',\n from,\n params,\n };\n }\n\n private pairProjectionFor(ids: Partial<Record<Rdf3xPatternKey, number>>): Rdf3xPairProjection | undefined {\n const columns = TERM_KEYS\n .filter((key) => ids[key] !== undefined)\n .map((key) => TERM_COLUMN[key]);\n return PAIR_PROJECTIONS.find((projection) => (\n projection.columns.every((column) => columns.includes(column))\n ));\n }\n\n private appendResolvedIdSetConditions(\n resolved: Rdf3xResolvedPattern,\n keys: Rdf3xPatternKey[],\n columnForKey: (key: Rdf3xPatternKey) => string,\n conditions: string[],\n params: unknown[],\n queryPlan?: string[],\n ): void {\n for (const key of keys) {\n const ids = resolved.idSets?.[key];\n if (!ids || ids.length === 0) {\n continue;\n }\n conditions.push(`${columnForKey(key)} IN (${ids.map(() => '?').join(', ')})`);\n params.push(...ids);\n queryPlan?.push(`TermIn(${key})`);\n if (key === 'graph') {\n queryPlan?.push('GraphMembershipFilter');\n }\n }\n }\n\n private appendResolvedExcludedIdSetConditions(\n resolved: Rdf3xResolvedPattern,\n keys: Rdf3xPatternKey[],\n columnForKey: (key: Rdf3xPatternKey) => string,\n conditions: string[],\n params: unknown[],\n queryPlan?: string[],\n ): void {\n for (const key of keys) {\n const ids = resolved.excludedIdSets?.[key];\n if (!ids || ids.length === 0) {\n continue;\n }\n conditions.push(`${columnForKey(key)} NOT IN (${ids.map(() => '?').join(', ')})`);\n params.push(...ids);\n queryPlan?.push(`TermNotIn(${key})`);\n if (key === 'graph') {\n queryPlan?.push('GraphMembershipFilter');\n }\n }\n }\n\n private resolvePattern(pattern: Rdf3xTriplePattern): Rdf3xResolvedPattern {\n const ids: Partial<Record<Rdf3xPatternKey, number>> = {};\n const idSets: Partial<Record<Rdf3xPatternKey, number[]>> = {};\n const excludedIdSets: Partial<Record<Rdf3xPatternKey, number[]>> = {};\n const termFilters: Partial<Record<Rdf3xPatternKey, Rdf3xResolvedTermFilter>> = {};\n let graphPrefix: string | undefined;\n let objectRange: Rdf3xObjectRange | undefined;\n for (const key of ['graph', ...TERM_KEYS] as Rdf3xPatternKey[]) {\n const term = pattern[key];\n if (!term) {\n continue;\n }\n if (key === 'graph' && isGraphPrefixPattern(term)) {\n graphPrefix = term.$startsWith;\n continue;\n }\n if (isTermInPattern(term)) {\n const resolvedIds = this.resolveTermInIds(term);\n if (resolvedIds.length === 0) {\n return { ids, idSets, graphPrefix, objectRange, unresolved: key };\n }\n idSets[key] = resolvedIds;\n continue;\n }\n if (isTermNotInPattern(term)) {\n const resolvedIds = this.resolveTermNotInIds(term);\n if (resolvedIds.length > 0) {\n excludedIdSets[key] = resolvedIds;\n }\n continue;\n }\n if (isOperatorPattern(term)) {\n const resolved = this.resolveOperatorPattern(key, term);\n if (resolved.unresolved) {\n return { ids, idSets, termFilters, graphPrefix, objectRange, unresolved: key };\n }\n if (resolved.graphPrefix !== undefined) graphPrefix = resolved.graphPrefix;\n if (resolved.idSet) idSets[key] = resolved.idSet;\n if (resolved.excludedIdSet) excludedIdSets[key] = resolved.excludedIdSet;\n if (resolved.objectRange) objectRange = resolved.objectRange;\n if (resolved.termFilter) termFilters[key] = resolved.termFilter;\n continue;\n }\n if (key === 'object' && isObjectRangePattern(term)) {\n const resolvedRange = this.resolveObjectRange(term);\n if (!resolvedRange) {\n return { ids, idSets, termFilters, graphPrefix, objectRange: resolvedRange, unresolved: key };\n }\n objectRange = resolvedRange;\n continue;\n }\n if (key === 'graph' && !isRdfTerm(term)) {\n return { ids, idSets, termFilters, graphPrefix, unresolved: key };\n }\n if (key !== 'graph' && !isRdfTerm(term)) {\n return { ids, idSets, termFilters, graphPrefix, unresolved: key };\n }\n const rdfTerm = term as Term;\n const id = this.requireDictionary().find(rdfTerm);\n if (id === undefined) {\n return { ids, idSets, termFilters, graphPrefix, unresolved: key };\n }\n ids[key] = id;\n }\n return {\n ids,\n ...(Object.keys(idSets).length > 0 ? { idSets } : {}),\n ...(Object.keys(excludedIdSets).length > 0 ? { excludedIdSets } : {}),\n ...(Object.keys(termFilters).length > 0 ? { termFilters } : {}),\n ...(graphPrefix !== undefined ? { graphPrefix } : {}),\n ...(objectRange !== undefined ? { objectRange } : {}),\n };\n }\n\n private resolveTermInIds(pattern: Rdf3xTermInPattern): number[] {\n return uniqueNumbers(pattern.$in\n .map((term) => this.requireDictionary().find(term))\n .filter((id): id is number => id !== undefined));\n }\n\n private resolveTermNotInIds(pattern: Rdf3xTermNotInPattern): number[] {\n return uniqueNumbers(pattern.$notIn\n .map((term) => this.requireDictionary().find(term))\n .filter((id): id is number => id !== undefined));\n }\n\n private resolveOperatorPattern(\n key: Rdf3xPatternKey,\n pattern: Rdf3xTermMetadataPattern & Partial<Rdf3xObjectRangePattern & Rdf3xObjectTextSearchPattern & Rdf3xGraphPrefixPattern & Rdf3xTermInPattern & Rdf3xTermNotInPattern>,\n ): {\n graphPrefix?: string;\n idSet?: number[];\n excludedIdSet?: number[];\n objectRange?: Rdf3xObjectRange;\n termFilter?: Rdf3xResolvedTermFilter;\n unresolved?: boolean;\n } {\n if (!isSupportedOperatorPattern(key, pattern)) {\n return { unresolved: true };\n }\n\n const result: {\n graphPrefix?: string;\n idSet?: number[];\n excludedIdSet?: number[];\n objectRange?: Rdf3xObjectRange;\n termFilter?: Rdf3xResolvedTermFilter;\n unresolved?: boolean;\n } = {};\n if (key === 'graph' && pattern.$startsWith !== undefined) {\n result.graphPrefix = pattern.$startsWith;\n }\n if (pattern.$in !== undefined) {\n const resolvedIds = this.resolveTermInIds({ $in: pattern.$in });\n if (resolvedIds.length === 0) {\n return { unresolved: true };\n }\n result.idSet = resolvedIds;\n }\n if (pattern.$notIn !== undefined) {\n const resolvedIds = this.resolveTermNotInIds({ $notIn: pattern.$notIn });\n if (resolvedIds.length > 0) {\n result.excludedIdSet = resolvedIds;\n }\n }\n if (key === 'object' && hasObjectRangeOperator(pattern)) {\n const objectRange = this.resolveObjectRange(pattern);\n if (!objectRange) {\n return { unresolved: true };\n }\n result.objectRange = objectRange;\n }\n const termFilter = this.resolveTermMetadataFilter(pattern);\n if (termFilter) {\n result.termFilter = termFilter;\n }\n return result;\n }\n\n private resolveTermMetadataFilter(pattern: Rdf3xTermMetadataPattern & Partial<Rdf3xObjectTextSearchPattern>): Rdf3xResolvedTermFilter | undefined {\n const filter: Rdf3xResolvedTermFilter = {};\n if (pattern.$termType !== undefined) {\n filter.termType = pattern.$termType;\n }\n if (pattern.$language !== undefined) {\n filter.language = pattern.$language;\n }\n if (pattern.$notLanguage !== undefined) {\n filter.notLanguage = pattern.$notLanguage;\n }\n if (pattern.$langMatches !== undefined) {\n filter.langMatches = pattern.$langMatches;\n }\n if (pattern.$datatype !== undefined) {\n filter.datatype = this.resolveDatatypeFilter(pattern.$datatype);\n }\n if (pattern.$notDatatype !== undefined) {\n filter.notDatatype = this.resolveDatatypeFilter(pattern.$notDatatype);\n }\n const textSearches = this.resolveTextSearchFilter(pattern);\n if (textSearches) {\n filter.textSearches = textSearches;\n }\n return Object.keys(filter).length > 0 ? filter : undefined;\n }\n\n private resolveTextSearchFilter(pattern: Partial<Rdf3xObjectTextSearchPattern>): Rdf3xTextSearch[] | undefined {\n const searches: Rdf3xTextSearch[] = [];\n if (pattern.$contains !== undefined) {\n searches.push({ operator: '$contains', value: pattern.$contains });\n }\n if (pattern.$endsWith !== undefined) {\n searches.push({ operator: '$endsWith', value: pattern.$endsWith });\n }\n return searches.length > 0 ? searches : undefined;\n }\n\n private resolveDatatypeFilter(datatype: Term): Rdf3xResolvedDatatypeFilter {\n if (datatype.termType !== 'NamedNode') {\n return { kind: 'unknown' };\n }\n if (datatype.value === XSD_STRING) {\n return { kind: 'xsd-string' };\n }\n const id = this.requireDictionary().find(datatype);\n return id === undefined ? { kind: 'unknown' } : { kind: 'id', id };\n }\n\n private countDistinctResolvedMembershipTuple(\n resolved: Rdf3xResolvedPattern,\n keys: Rdf3xPatternKey[],\n ): number {\n const distinctKeys = uniquePatternKeys(keys);\n if (distinctKeys.length === 0) {\n return 0;\n }\n\n const { from, whereClause, params } = this.buildMembershipWhere({\n ids: resolved.ids,\n ...(resolved.idSets !== undefined ? { idSets: resolved.idSets } : {}),\n ...(resolved.excludedIdSets !== undefined ? { excludedIdSets: resolved.excludedIdSets } : {}),\n ...(resolved.graphPrefix !== undefined ? { graphPrefix: resolved.graphPrefix } : {}),\n });\n const rangeConditions: string[] = [];\n const rangeParams: unknown[] = [];\n const rangePlan: string[] = [];\n const rangeJoin = resolved.objectRange\n ? ' JOIN rdf_terms fanout_object_range ON fanout_object_range.id = membership.object_id'\n : '';\n if (resolved.objectRange) {\n this.appendObjectRangeCondition('fanout_object_range', resolved.objectRange, rangeConditions, rangeParams, rangePlan);\n }\n const combinedWhereClause = rangeConditions.length > 0\n ? `${whereClause || ' WHERE 1 = 1'} AND ${rangeConditions.join(' AND ')}`\n : whereClause;\n const projection = distinctKeys\n .map((key) => `membership.${PATTERN_COLUMNS[key]}`)\n .join(', ');\n return this.requireDb().prepare<{ count: number }>(`\n SELECT COUNT(*) AS count\n FROM (\n SELECT DISTINCT ${projection}\n FROM ${from}\n ${rangeJoin}\n ${combinedWhereClause}\n ) distinct_bound_tuples\n `).get(...params, ...rangeParams)?.count ?? 0;\n }\n\n private estimateObjectRangeCardinality(resolved: Rdf3xResolvedPattern): Rdf3xCardinalityEstimate {\n const range = resolved.objectRange;\n if (!range) {\n return this.estimateResolvedMembershipCardinality(resolved);\n }\n const { from, whereClause, params } = this.buildMembershipWhere({\n ids: resolved.ids,\n ...(resolved.idSets !== undefined ? { idSets: resolved.idSets } : {}),\n ...(resolved.excludedIdSets !== undefined ? { excludedIdSets: resolved.excludedIdSets } : {}),\n ...(resolved.graphPrefix !== undefined ? { graphPrefix: resolved.graphPrefix } : {}),\n });\n const rangeConditions: string[] = [];\n const rangeParams: unknown[] = [];\n const rangePlan: string[] = [];\n this.appendObjectRangeCondition('object_range', range, rangeConditions, rangeParams, rangePlan);\n const membershipWhere = whereClause\n ? `${whereClause} AND ${rangeConditions.join(' AND ')}`\n : ` WHERE ${rangeConditions.join(' AND ')}`;\n const matchingQuads = this.requireDb().prepare<{ count: number }>(`\n SELECT COUNT(*) AS count\n FROM ${from}\n JOIN rdf_terms object_range ON object_range.id = membership.object_id\n ${membershipWhere}\n `).get(...params, ...rangeParams)?.count ?? 0;\n const uniqueTriples = this.requireDb().prepare<{ count: number }>(`\n SELECT COUNT(*) AS count\n FROM (\n SELECT DISTINCT subject_id, predicate_id, object_id\n FROM ${from}\n JOIN rdf_terms object_range ON object_range.id = membership.object_id\n ${membershipWhere}\n ) distinct_triples\n `).get(...params, ...rangeParams)?.count ?? 0;\n return {\n uniqueTriples,\n matchingQuads,\n source: 'exact-membership',\n indexChoice: 'source-membership',\n };\n }\n\n private appendObjectRangeCondition(\n alias: string,\n range: Rdf3xObjectRange,\n conditions: string[],\n params: unknown[],\n queryPlan: string[],\n ): void {\n if (range.mode === 'numeric') {\n conditions.push(`${alias}.kind = ?`);\n params.push('literal');\n conditions.push(`${alias}.numeric_value IS NOT NULL`);\n if (range.min !== undefined) {\n conditions.push(`${alias}.numeric_value ${range.minInclusive ? '>=' : '>'} ?`);\n params.push(range.min);\n }\n if (range.max !== undefined) {\n conditions.push(`${alias}.numeric_value ${range.maxInclusive ? '<=' : '<'} ?`);\n params.push(range.max);\n }\n queryPlan.push(`NumericRange(object${rangeSuffix(range)})`);\n return;\n }\n\n conditions.push(`${alias}.kind IN (${OBJECT_RANGE_KINDS.map(() => '?').join(', ')})`);\n params.push(...OBJECT_RANGE_KINDS);\n if (range.min !== undefined) {\n conditions.push(`${alias}.value ${range.minInclusive ? '>=' : '>'} ?`);\n params.push(range.min);\n }\n if (range.max !== undefined) {\n conditions.push(`${alias}.value ${range.maxInclusive ? '<=' : '<'} ?`);\n params.push(range.max);\n }\n queryPlan.push(`LexicalRange(object${rangeSuffix(range)})`);\n }\n\n private appendTermFilterJoinsAndConditions(\n resolved: Rdf3xResolvedPattern,\n keys: Rdf3xPatternKey[],\n columnForKey: (key: Rdf3xPatternKey) => string,\n joins: string[],\n conditions: string[],\n params: unknown[],\n queryPlan?: string[],\n aliasPrefix = 'term_filter',\n ): void {\n for (const key of keys) {\n const filter = resolved.termFilters?.[key];\n if (!filter) {\n continue;\n }\n const alias = `${aliasPrefix}_${key}`;\n joins.push(` JOIN rdf_terms ${alias} ON ${alias}.id = ${columnForKey(key)}`);\n this.appendTermFilterCondition(key, alias, filter, conditions, params, queryPlan);\n }\n }\n\n private appendTermFilterCondition(\n key: Rdf3xPatternKey,\n alias: string,\n filter: Rdf3xResolvedTermFilter,\n conditions: string[],\n params: unknown[],\n queryPlan?: string[],\n ): void {\n if (filter.termType !== undefined) {\n this.appendTermTypeCondition(key, alias, filter.termType, conditions, params);\n queryPlan?.push(`TermType(${key}:${filter.termType})`);\n }\n if (filter.language !== undefined) {\n this.appendLanguageCondition(key, alias, '$language', filter.language, conditions, params);\n queryPlan?.push(`Language(${key}$language)`);\n }\n if (filter.notLanguage !== undefined) {\n this.appendLanguageCondition(key, alias, '$notLanguage', filter.notLanguage, conditions, params);\n queryPlan?.push(`Language(${key}$notLanguage)`);\n }\n if (filter.langMatches !== undefined) {\n this.appendLanguageCondition(key, alias, '$langMatches', filter.langMatches, conditions, params);\n queryPlan?.push(`Language(${key}$langMatches)`);\n }\n if (filter.datatype !== undefined) {\n this.appendDatatypeCondition(key, alias, '$datatype', filter.datatype, conditions, params);\n queryPlan?.push(`Datatype(${key}$datatype)`);\n }\n if (filter.notDatatype !== undefined) {\n this.appendDatatypeCondition(key, alias, '$notDatatype', filter.notDatatype, conditions, params);\n queryPlan?.push(`Datatype(${key}$notDatatype)`);\n }\n for (const search of filter.textSearches ?? []) {\n this.appendTextSearchCondition(key, alias, search, conditions, params, queryPlan);\n }\n }\n\n private appendTextSearchCondition(\n key: Rdf3xPatternKey,\n alias: string,\n search: Rdf3xTextSearch,\n conditions: string[],\n params: unknown[],\n queryPlan?: string[],\n ): void {\n const kinds = termKindsForPatternKey(key);\n const kindPlaceholders = kinds.map(() => '?').join(', ');\n const normalized = search.value.toLowerCase();\n switch (search.operator) {\n case '$contains':\n conditions.push(`${alias}.kind IN (${kindPlaceholders})\n AND ${alias}.normalized_text LIKE ? ESCAPE '\\\\'\n AND instr(${alias}.value, ?) > 0`);\n params.push(...kinds, `%${escapeLikePattern(normalized)}%`, search.value);\n queryPlan?.push(`TextSearch(${key}$contains)`);\n return;\n case '$endsWith':\n conditions.push(`${alias}.kind IN (${kindPlaceholders})\n AND ${alias}.normalized_text LIKE ? ESCAPE '\\\\'\n AND substr(${alias}.value, -length(?)) = ?`);\n params.push(...kinds, `%${escapeLikePattern(normalized)}`, search.value, search.value);\n queryPlan?.push(`TextSearch(${key}$endsWith)`);\n return;\n default: {\n const exhaustive: never = search.operator;\n throw new Error(`Unsupported RDF-3X text search operator: ${exhaustive}`);\n }\n }\n }\n\n private appendTermTypeCondition(\n key: Rdf3xPatternKey,\n alias: string,\n termType: Rdf3xTermTypePatternValue,\n conditions: string[],\n params: unknown[],\n ): void {\n const possibleKinds = termKindsForPatternKey(key);\n if (termType === 'numeric') {\n conditions.push(possibleKinds.includes('literal')\n ? `${alias}.kind = 'literal' AND ${alias}.numeric_value IS NOT NULL`\n : '1 = 0');\n return;\n }\n if (!possibleKinds.includes(termType)) {\n conditions.push('1 = 0');\n return;\n }\n conditions.push(`${alias}.kind = ?`);\n params.push(termType);\n }\n\n private appendLanguageCondition(\n key: Rdf3xPatternKey,\n alias: string,\n operator: '$language' | '$notLanguage' | '$langMatches',\n language: string,\n conditions: string[],\n params: unknown[],\n ): void {\n if (!termKindsForPatternKey(key).includes('literal')) {\n conditions.push('1 = 0');\n return;\n }\n if (operator === '$language') {\n conditions.push(`${alias}.kind = 'literal' AND COALESCE(${alias}.lang, '') = ?`);\n params.push(language);\n return;\n }\n if (operator === '$notLanguage') {\n conditions.push(`${alias}.kind = 'literal' AND COALESCE(${alias}.lang, '') != ?`);\n params.push(language);\n return;\n }\n if (language === '*') {\n conditions.push(`${alias}.kind = 'literal' AND ${alias}.lang IS NOT NULL AND ${alias}.lang != ''`);\n return;\n }\n conditions.push(`${alias}.kind = 'literal'\n AND (lower(${alias}.lang) = lower(?) OR lower(${alias}.lang) LIKE lower(?) ESCAPE '\\\\')`);\n params.push(language, `${escapeLikePattern(language)}-%`);\n }\n\n private appendDatatypeCondition(\n key: Rdf3xPatternKey,\n alias: string,\n operator: '$datatype' | '$notDatatype',\n datatype: Rdf3xResolvedDatatypeFilter,\n conditions: string[],\n params: unknown[],\n ): void {\n if (!termKindsForPatternKey(key).includes('literal')) {\n conditions.push('1 = 0');\n return;\n }\n if (datatype.kind === 'xsd-string') {\n conditions.push(operator === '$datatype'\n ? `${alias}.kind = 'literal' AND ${alias}.lang IS NULL AND ${alias}.datatype_id IS NULL`\n : `${alias}.kind = 'literal' AND NOT (${alias}.lang IS NULL AND ${alias}.datatype_id IS NULL)`);\n return;\n }\n if (datatype.kind === 'unknown') {\n conditions.push(operator === '$datatype' ? '1 = 0' : `${alias}.kind = 'literal'`);\n return;\n }\n conditions.push(operator === '$datatype'\n ? `${alias}.kind = 'literal' AND ${alias}.datatype_id = ?`\n : `${alias}.kind = 'literal' AND (${alias}.datatype_id IS NULL OR ${alias}.datatype_id != ?)`);\n params.push(datatype.id);\n }\n\n private resolveObjectRange(match: Rdf3xObjectRangePattern): Rdf3xObjectRange | undefined {\n const numericRange: Rdf3xObjectRange = { mode: 'numeric' };\n const lexicalRange: Rdf3xObjectRange = { mode: 'lexical' };\n let hasRange = false;\n let allNumeric = true;\n for (const [operator, inclusive] of [\n ['$gt', false],\n ['$gte', true],\n ['$lt', false],\n ['$lte', true],\n ] as const) {\n const value = match[operator];\n if (value === undefined) {\n continue;\n }\n hasRange = true;\n const numericValue = this.numericValueForPattern(value);\n const lexicalValue = this.lexicalValueForPattern(value);\n allNumeric = allNumeric && numericValue !== undefined;\n if (lexicalValue === undefined) return undefined;\n if (operator === '$gt' || operator === '$gte') {\n if (numericValue !== undefined) numericRange.min = numericValue;\n numericRange.minInclusive = inclusive;\n lexicalRange.min = lexicalValue;\n lexicalRange.minInclusive = inclusive;\n } else {\n if (numericValue !== undefined) numericRange.max = numericValue;\n numericRange.maxInclusive = inclusive;\n lexicalRange.max = lexicalValue;\n lexicalRange.maxInclusive = inclusive;\n }\n }\n if (!hasRange) return undefined;\n return allNumeric ? numericRange : lexicalRange;\n }\n\n private numericValueForPattern(value: Term | string | number): number | undefined {\n if (typeof value === 'number') {\n return Number.isFinite(value) ? value : undefined;\n }\n if (typeof value === 'string') {\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : undefined;\n }\n if (value.termType !== 'Literal' || !isRdfNumericDatatype(value.datatype.value)) {\n return undefined;\n }\n const parsed = rdfNumericValue(value.value);\n return Number.isFinite(parsed) ? parsed : undefined;\n }\n\n private lexicalValueForPattern(value: Term | string | number): string | undefined {\n if (typeof value === 'number') {\n return Number.isFinite(value) ? String(value) : undefined;\n }\n if (typeof value === 'string') {\n return value;\n }\n return value.value;\n }\n\n private choosePermutation(\n ids: Partial<Record<Rdf3xPatternKey, number>>,\n constraints?: {\n idSets?: Partial<Record<Rdf3xPatternKey, number[]>>;\n objectRange?: boolean;\n termFilters?: Partial<Record<Rdf3xPatternKey, Rdf3xResolvedTermFilter>>;\n },\n ): Rdf3xPermutation {\n const has = (key: Rdf3xTermKey): boolean => ids[key] !== undefined || Boolean(constraints?.idSets?.[key]?.length);\n const hasObjectConstraint = has('object')\n || Boolean(constraints?.objectRange)\n || Boolean(constraints?.termFilters?.object);\n if (has('subject') && has('predicate')) return this.permutation('SPO');\n if (has('subject') && hasObjectConstraint) return this.permutation('SOP');\n if (has('predicate') && has('subject')) return this.permutation('PSO');\n if (has('predicate') && hasObjectConstraint) return this.permutation('POS');\n if (hasObjectConstraint && has('subject')) return this.permutation('OSP');\n if (hasObjectConstraint && has('predicate')) return this.permutation('OPS');\n if (has('subject')) return this.permutation('SPO');\n if (has('predicate')) return this.permutation('PSO');\n if (hasObjectConstraint) return this.permutation('OSP');\n return this.permutation('SPO');\n }\n\n private permutation(name: Rdf3xPermutationName): Rdf3xPermutation {\n const permutation = PERMUTATIONS.find((candidate) => candidate.name === name);\n if (!permutation) {\n throw new Error(`Unknown RDF-3X permutation: ${name}`);\n }\n return permutation;\n }\n\n private rowsToQuads(rows: Rdf3xQuadIdRow[]): Quad[] {\n const termMap = this.requireDictionary().rowsForIds(rows.flatMap((row) => [\n row.graph_id,\n row.subject_id,\n row.predicate_id,\n row.object_id,\n ]));\n\n return rows.map((row) => DataFactory.quad(\n requiredTerm(termMap, row.subject_id) as any,\n requiredTerm(termMap, row.predicate_id) as any,\n requiredTerm(termMap, row.object_id) as any,\n requiredTerm(termMap, row.graph_id) as any,\n ));\n }\n\n private permutationSource(permutation: Rdf3xPermutation, alias: string): string {\n return `${RDF_FACTS_TABLE} AS ${alias} INDEXED BY ${permutation.indexName}`;\n }\n\n private factSource(alias: string): string {\n return `${RDF_FACTS_TABLE} AS ${alias}`;\n }\n\n private uniqueTripleCount(): number {\n return this.requireDb().prepare<{ count: number }>(`\n SELECT COUNT(*) AS count\n FROM (\n SELECT DISTINCT subject_id, predicate_id, object_id\n FROM ${RDF_FACTS_TABLE}\n ) distinct_triples\n `).get()?.count ?? 0;\n }\n\n private rowCount(table: string): number {\n return this.requireDb().prepare<{ count: number }>(`SELECT COUNT(*) AS count FROM ${table}`).get()?.count ?? 0;\n }\n\n private collectPageCount(): number {\n try {\n return this.requireDb().prepare<{ page_count: number }>('PRAGMA page_count').get()?.page_count ?? 0;\n } catch {\n return 0;\n }\n }\n\n private estimateDatabaseBytes(): number {\n const pageSize = this.estimatePageSize();\n const pageCount = this.collectPageCount();\n return pageSize * pageCount;\n }\n\n private estimateSpaceObjectsFromSchema(schemaRows: Array<{ name: string; type: string; tbl_name: string }>): RdfIndexSpaceObject[] {\n const pageSize = this.estimatePageSize();\n return schemaRows.map((object) => ({\n name: object.name,\n kind: rdf3xSpaceObjectKind(object.name, object.type, object.tbl_name),\n ...(object.tbl_name && object.tbl_name !== object.name ? { tableName: object.tbl_name } : {}),\n pages: 1,\n bytes: pageSize,\n estimated: true,\n }));\n }\n\n private estimatePageSize(): number {\n try {\n return this.requireDb().prepare<{ page_size: number }>('PRAGMA page_size').get()?.page_size ?? 4096;\n } catch {\n return 4096;\n }\n }\n\n private metrics(\n indexChoice: Rdf3xIndexMetrics['indexChoice'],\n matchedRows: number,\n returnedRows: number,\n start: number,\n queryPlan: string[],\n ): Rdf3xIndexMetrics {\n return {\n engine: 'solid-rdf3x',\n indexChoice,\n matchedRows,\n returnedRows,\n durationMs: Date.now() - start,\n queryPlan,\n };\n }\n\n private requireDb(): SqliteDatabase {\n if (!this.db) {\n throw new Error('Rdf3xIndex is not open');\n }\n return this.db;\n }\n\n private requireDictionary(): RdfTermDictionary {\n if (!this.dictionary) {\n throw new Error('Rdf3xIndex is not open');\n }\n return this.dictionary;\n }\n}\n\nfunction keyForColumn(column: TripleColumn): Rdf3xTermKey {\n if (column === 'subject_id') return 'subject';\n if (column === 'predicate_id') return 'predicate';\n return 'object';\n}\n\nfunction shouldUseMembershipSource(resolved: Rdf3xResolvedPattern): boolean {\n return resolved.ids.graph !== undefined\n || Boolean(resolved.idSets?.graph?.length)\n || Boolean(resolved.excludedIdSets?.graph?.length)\n || resolved.graphPrefix !== undefined;\n}\n\nfunction requiredTerm(termMap: Map<number, Term>, id: number): Term {\n const term = termMap.get(id);\n if (!term) {\n throw new Error(`RDF term not found while reading RDF-3X index: ${id}`);\n }\n return term;\n}\n\nfunction isRdfTerm(value: unknown): value is Term {\n return value !== null && typeof value === 'object' && 'termType' in value;\n}\n\nfunction isTermInPattern(value: unknown): value is Rdf3xTermInPattern {\n return value !== null\n && typeof value === 'object'\n && !('termType' in value)\n && Object.keys(value).length === 1\n && Array.isArray((value as { $in?: unknown }).$in)\n && ((value as { $in: unknown[] }).$in).every(isRdfTerm);\n}\n\nfunction isTermNotInPattern(value: unknown): value is Rdf3xTermNotInPattern {\n return value !== null\n && typeof value === 'object'\n && !('termType' in value)\n && Object.keys(value).length === 1\n && Array.isArray((value as { $notIn?: unknown }).$notIn)\n && ((value as { $notIn: unknown[] }).$notIn).every(isRdfTerm);\n}\n\nfunction isOperatorPattern(value: unknown): value is Rdf3xTermMetadataPattern & Partial<Rdf3xObjectRangePattern & Rdf3xObjectTextSearchPattern & Rdf3xGraphPrefixPattern & Rdf3xTermInPattern & Rdf3xTermNotInPattern> {\n return value !== null && typeof value === 'object' && !('termType' in value);\n}\n\nfunction isSupportedOperatorPattern(\n key: Rdf3xPatternKey,\n value: Rdf3xTermMetadataPattern & Partial<Rdf3xObjectRangePattern & Rdf3xObjectTextSearchPattern & Rdf3xGraphPrefixPattern & Rdf3xTermInPattern & Rdf3xTermNotInPattern>,\n): boolean {\n const allowed = new Set<string>([\n '$in',\n '$notIn',\n '$termType',\n '$language',\n '$notLanguage',\n '$langMatches',\n '$datatype',\n '$notDatatype',\n ...(key === 'graph' ? ['$startsWith'] : []),\n ...(key === 'object' ? ['$gt', '$gte', '$lt', '$lte', '$contains', '$endsWith'] : []),\n ]);\n if (Object.keys(value).some((operator) => !allowed.has(operator))) {\n return false;\n }\n if (value.$in !== undefined && (!Array.isArray(value.$in) || !value.$in.every(isRdfTerm) || value.$in.length === 0)) {\n return false;\n }\n if (value.$notIn !== undefined && (!Array.isArray(value.$notIn) || !value.$notIn.every(isRdfTerm) || value.$notIn.length === 0)) {\n return false;\n }\n if (value.$startsWith !== undefined && typeof value.$startsWith !== 'string') {\n return false;\n }\n if (value.$termType !== undefined && !['iri', 'blank', 'literal', 'numeric'].includes(value.$termType)) {\n return false;\n }\n for (const languageOperator of ['$language', '$notLanguage', '$langMatches'] as const) {\n if (value[languageOperator] !== undefined && typeof value[languageOperator] !== 'string') {\n return false;\n }\n }\n for (const datatypeOperator of ['$datatype', '$notDatatype'] as const) {\n if (value[datatypeOperator] !== undefined) {\n const datatype = value[datatypeOperator];\n if (!isRdfTerm(datatype) || datatype.termType !== 'NamedNode') {\n return false;\n }\n }\n }\n if (key === 'object') {\n for (const rangeOperator of ['$gt', '$gte', '$lt', '$lte'] as const) {\n const rangeValue = value[rangeOperator];\n if (rangeValue !== undefined && !isRdf3xObjectRangeValue(rangeValue)) {\n return false;\n }\n }\n for (const textOperator of ['$contains', '$endsWith'] as const) {\n if (value[textOperator] !== undefined && typeof value[textOperator] !== 'string') {\n return false;\n }\n }\n }\n return Object.keys(value).length > 0;\n}\n\nfunction hasObjectRangeOperator(value: Partial<Rdf3xObjectRangePattern>): boolean {\n return value.$gt !== undefined\n || value.$gte !== undefined\n || value.$lt !== undefined\n || value.$lte !== undefined;\n}\n\nfunction termKindsForPatternKey(key: Rdf3xPatternKey): RdfTermKind[] {\n switch (key) {\n case 'object':\n return ['iri', 'literal', 'blank'];\n case 'subject':\n return ['iri', 'blank'];\n case 'graph':\n return ['iri', 'default_graph'];\n case 'predicate':\n return ['iri'];\n default: {\n const exhaustive: never = key;\n throw new Error(`Unsupported RDF-3X pattern key: ${exhaustive}`);\n }\n }\n}\n\nfunction escapeLikePattern(value: string): string {\n return value.replace(/[\\\\%_]/g, (char) => `\\\\${char}`);\n}\n\nfunction hasResolvedIdSets(resolved: Rdf3xResolvedPattern): boolean {\n return Object.values(resolved.idSets ?? {}).some((ids) => (ids?.length ?? 0) > 0);\n}\n\nfunction hasResolvedExcludedIdSets(resolved: Rdf3xResolvedPattern): boolean {\n return Object.values(resolved.excludedIdSets ?? {}).some((ids) => (ids?.length ?? 0) > 0);\n}\n\nfunction hasResolvedTermFilters(resolved: Rdf3xResolvedPattern): boolean {\n return Object.values(resolved.termFilters ?? {}).some(Boolean);\n}\n\nfunction uniqueNumbers(values: number[]): number[] {\n return [...new Set(values)];\n}\n\nfunction pairProjectionRowTotal(rows: Record<Rdf3xPairProjectionName, number>): number {\n return Object.values(rows).reduce((sum, count) => sum + count, 0);\n}\n\nfunction termProjectionRowTotal(rows: Record<Rdf3xTermProjectionName, number>): number {\n return Object.values(rows).reduce((sum, count) => sum + count, 0);\n}\n\nfunction sumSpaceObjects(objects: RdfIndexSpaceObject[], kind: RdfIndexSpaceObject['kind']): number {\n return objects\n .filter((object) => object.kind === kind)\n .reduce((sum, object) => sum + object.bytes, 0);\n}\n\nfunction uniquePatternKeys(values: Rdf3xPatternKey[]): Rdf3xPatternKey[] {\n return (['graph', 'subject', 'predicate', 'object'] as Rdf3xPatternKey[])\n .filter((key) => values.includes(key));\n}\n\nfunction uniqueVariableNames(values: string[]): string[] {\n return [...new Set(values)];\n}\n\nfunction joinSolutionMappingKeyExpression(\n variableColumns: Map<string, string>,\n variables: string[] | undefined,\n errorPrefix: string,\n): string {\n const variableNames = uniqueVariableNames(variables ?? [...variableColumns.keys()]);\n if (variableNames.length === 0) {\n return '1';\n }\n return variableNames.map((variableName) => {\n const column = variableColumns.get(variableName);\n if (!column) {\n throw new Error(`${errorPrefix} COUNT(DISTINCT *) cannot read unbound variable: ${variableName}`);\n }\n return column;\n }).join(` || ':' || `);\n}\n\nfunction rdf3xSpaceObjectKind(name: string, schemaType?: string, tableName?: string): RdfIndexSpaceObject['kind'] {\n if (schemaType === 'table' && name.startsWith('rdf3x_')) {\n return 'table';\n }\n if (schemaType === 'index' && (name.startsWith('rdf3x_') || tableName?.startsWith('rdf3x_'))) {\n return 'index';\n }\n if (name.startsWith('sqlite_')) {\n return 'internal';\n }\n return 'unknown';\n}\n\nfunction isGraphPrefixPattern(value: unknown): value is { $startsWith: string } {\n return value !== null\n && typeof value === 'object'\n && Object.keys(value).length === 1\n && '$startsWith' in value\n && typeof (value as { $startsWith?: unknown }).$startsWith === 'string';\n}\n\nfunction rangeSuffix(range: Rdf3xObjectRange): string {\n return `${range.min !== undefined ? (range.minInclusive ? '$gte' : '$gt') : ''}${range.max !== undefined ? (range.maxInclusive ? '$lte' : '$lt') : ''}`;\n}\n\nfunction describeScanOrder(options?: Rdf3xTripleScanOptions): string {\n const order = options?.order ?? [];\n const directions = options?.orderDirections ?? order.map(() => (options?.reverse ? 'desc' : 'asc'));\n return order.map((entry, index) => `${directions[index] ?? 'asc'}:${entry}`).join(',');\n}\n\nfunction isObjectRangePattern(value: unknown): value is Rdf3xObjectRangePattern {\n return value !== null\n && typeof value === 'object'\n && !('termType' in value)\n && ['$gt', '$gte', '$lt', '$lte'].some((operator) => operator in value);\n}\n\nfunction isRdf3xObjectRangeValue(value: unknown): boolean {\n if (typeof value === 'number') {\n return Number.isFinite(value);\n }\n if (typeof value === 'string') {\n return true;\n }\n return isRdfTerm(value);\n}\n"]}
|