@undefineds.co/xpod 0.3.18 → 0.3.23

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.
Files changed (115) hide show
  1. package/config/bun.json +57 -11
  2. package/config/cloud.json +14 -12
  3. package/config/local.json +16 -14
  4. package/config/xpod.json +47 -9
  5. package/dist/api/matrix/PodMatrixStore.d.ts +4 -7
  6. package/dist/api/matrix/PodMatrixStore.js +116 -148
  7. package/dist/api/matrix/PodMatrixStore.js.map +1 -1
  8. package/dist/api/matrix/types.d.ts +2 -0
  9. package/dist/api/matrix/types.js.map +1 -1
  10. package/dist/api/runs/PiAgentRuntimeDriver.d.ts +1 -0
  11. package/dist/api/runs/PiAgentRuntimeDriver.js +4 -1
  12. package/dist/api/runs/PiAgentRuntimeDriver.js.map +1 -1
  13. package/dist/components/components.jsonld +3 -0
  14. package/dist/components/context.jsonld +71 -32
  15. package/dist/http/SubgraphSparqlHttpHandler.d.ts +1 -0
  16. package/dist/http/SubgraphSparqlHttpHandler.js +27 -4
  17. package/dist/http/SubgraphSparqlHttpHandler.js.map +1 -1
  18. package/dist/http/SubgraphSparqlHttpHandler.jsonld +4 -0
  19. package/dist/http/vector/VectorHttpHandler.d.ts +5 -1
  20. package/dist/http/vector/VectorHttpHandler.js +5 -5
  21. package/dist/http/vector/VectorHttpHandler.js.map +1 -1
  22. package/dist/http/vector/VectorHttpHandler.jsonld +40 -28
  23. package/dist/index.d.ts +5 -2
  24. package/dist/index.js +9 -4
  25. package/dist/index.js.map +1 -1
  26. package/dist/runtime/Proxy.d.ts +3 -0
  27. package/dist/runtime/Proxy.js +31 -7
  28. package/dist/runtime/Proxy.js.map +1 -1
  29. package/dist/solidfs/LocalSolidFS.js +31 -124
  30. package/dist/solidfs/LocalSolidFS.js.map +1 -1
  31. package/dist/solidfs/SolidFsPathUtils.d.ts +13 -0
  32. package/dist/solidfs/SolidFsPathUtils.js +114 -0
  33. package/dist/solidfs/SolidFsPathUtils.js.map +1 -0
  34. package/dist/solidfs/SolidFsSyncJournal.d.ts +117 -0
  35. package/dist/solidfs/SolidFsSyncJournal.js +553 -0
  36. package/dist/solidfs/SolidFsSyncJournal.js.map +1 -0
  37. package/dist/solidfs/index.d.ts +1 -0
  38. package/dist/solidfs/index.js +1 -0
  39. package/dist/solidfs/index.js.map +1 -1
  40. package/dist/solidfs/types.d.ts +1 -0
  41. package/dist/solidfs/types.js.map +1 -1
  42. package/dist/storage/SparqlUpdateResourceStore.js +94 -33
  43. package/dist/storage/SparqlUpdateResourceStore.js.map +1 -1
  44. package/dist/storage/accessors/MixDataAccessor.d.ts +22 -5
  45. package/dist/storage/accessors/MixDataAccessor.js +376 -61
  46. package/dist/storage/accessors/MixDataAccessor.js.map +1 -1
  47. package/dist/storage/accessors/MixDataAccessor.jsonld +73 -5
  48. package/dist/storage/accessors/QuadstoreSparqlDataAccessor.js +32 -10
  49. package/dist/storage/accessors/QuadstoreSparqlDataAccessor.js.map +1 -1
  50. package/dist/storage/accessors/QuintStoreSparqlDataAccessor.js +28 -6
  51. package/dist/storage/accessors/QuintStoreSparqlDataAccessor.js.map +1 -1
  52. package/dist/storage/accessors/SolidRdfDataAccessor.d.ts +45 -0
  53. package/dist/storage/accessors/SolidRdfDataAccessor.js +277 -0
  54. package/dist/storage/accessors/SolidRdfDataAccessor.js.map +1 -0
  55. package/dist/storage/accessors/SolidRdfDataAccessor.jsonld +161 -0
  56. package/dist/storage/rdf/Rdf3xIndex.d.ts +122 -0
  57. package/dist/storage/rdf/Rdf3xIndex.js +2695 -0
  58. package/dist/storage/rdf/Rdf3xIndex.js.map +1 -0
  59. package/dist/storage/rdf/Rdf3xIndex.jsonld +528 -0
  60. package/dist/storage/rdf/Rdf3xSchema.d.ts +20 -0
  61. package/dist/storage/rdf/Rdf3xSchema.js +65 -0
  62. package/dist/storage/rdf/Rdf3xSchema.js.map +1 -0
  63. package/dist/storage/rdf/RdfLocalQueryEngine.d.ts +10 -4
  64. package/dist/storage/rdf/RdfLocalQueryEngine.js +607 -127
  65. package/dist/storage/rdf/RdfLocalQueryEngine.js.map +1 -1
  66. package/dist/storage/rdf/RdfQuadIndex.d.ts +12 -1
  67. package/dist/storage/rdf/RdfQuadIndex.js +152 -22
  68. package/dist/storage/rdf/RdfQuadIndex.js.map +1 -1
  69. package/dist/storage/rdf/RdfQuadIndex.jsonld +36 -4
  70. package/dist/storage/rdf/RdfSparqlAdapter.d.ts +20 -2
  71. package/dist/storage/rdf/RdfSparqlAdapter.js +364 -40
  72. package/dist/storage/rdf/RdfSparqlAdapter.js.map +1 -1
  73. package/dist/storage/rdf/RdfSparqlAdapter.jsonld +60 -0
  74. package/dist/storage/rdf/RdfTermDictionary.d.ts +8 -0
  75. package/dist/storage/rdf/RdfTermDictionary.js +141 -70
  76. package/dist/storage/rdf/RdfTermDictionary.js.map +1 -1
  77. package/dist/storage/rdf/RdfTermDictionary.jsonld +24 -0
  78. package/dist/storage/rdf/RdfTextIndex.js +10 -3
  79. package/dist/storage/rdf/RdfTextIndex.js.map +1 -1
  80. package/dist/storage/rdf/SolidRdfEngine.d.ts +15 -6
  81. package/dist/storage/rdf/SolidRdfEngine.js +218 -25
  82. package/dist/storage/rdf/SolidRdfEngine.js.map +1 -1
  83. package/dist/storage/rdf/SolidRdfEngine.jsonld +70 -7
  84. package/dist/storage/rdf/SolidRdfSparqlEngine.d.ts +11 -7
  85. package/dist/storage/rdf/SolidRdfSparqlEngine.js +60 -47
  86. package/dist/storage/rdf/SolidRdfSparqlEngine.js.map +1 -1
  87. package/dist/storage/rdf/SolidRdfSparqlEngine.jsonld +9 -5
  88. package/dist/storage/rdf/index.d.ts +2 -2
  89. package/dist/storage/rdf/index.js +3 -3
  90. package/dist/storage/rdf/index.js.map +1 -1
  91. package/dist/storage/rdf/models-benchmark.d.ts +12 -1
  92. package/dist/storage/rdf/models-benchmark.js +549 -32
  93. package/dist/storage/rdf/models-benchmark.js.map +1 -1
  94. package/dist/storage/rdf/types.d.ts +81 -7
  95. package/dist/storage/rdf/types.js.map +1 -1
  96. package/dist/storage/sparql/CompatibilitySparqlEngine.d.ts +36 -0
  97. package/dist/storage/sparql/CompatibilitySparqlEngine.js +96 -0
  98. package/dist/storage/sparql/CompatibilitySparqlEngine.js.map +1 -0
  99. package/dist/storage/sparql/CompatibilitySparqlEngine.jsonld +123 -0
  100. package/dist/storage/sparql/CompatibilitySparqlEngineImpl.d.ts +35 -0
  101. package/dist/storage/sparql/CompatibilitySparqlEngineImpl.js +112 -0
  102. package/dist/storage/sparql/CompatibilitySparqlEngineImpl.js.map +1 -0
  103. package/dist/storage/sparql/SubgraphQueryEngine.d.ts +1 -36
  104. package/dist/storage/sparql/SubgraphQueryEngine.js +2 -115
  105. package/dist/storage/sparql/SubgraphQueryEngine.js.map +1 -1
  106. package/dist/storage/sparql/SubgraphQueryEngine.jsonld +1 -124
  107. package/dist/terminal/AclPermissionService.d.ts +2 -1
  108. package/dist/terminal/AclPermissionService.js +26 -3
  109. package/dist/terminal/AclPermissionService.js.map +1 -1
  110. package/dist/terminal/TerminalSessionManager.js +25 -3
  111. package/dist/terminal/TerminalSessionManager.js.map +1 -1
  112. package/package.json +1 -1
  113. package/dist/storage/rdf/Rdf3xTripleIndex.d.ts +0 -55
  114. package/dist/storage/rdf/Rdf3xTripleIndex.js +0 -1235
  115. package/dist/storage/rdf/Rdf3xTripleIndex.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"Rdf3xTripleIndex.js","sourceRoot":"","sources":["../../../src/storage/rdf/Rdf3xTripleIndex.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 } from './RdfTermDictionary';\nimport { isRdfNumericDatatype, rdfNumericValue } from './RdfTermSemantics';\nimport type {\n Rdf3xCardinalityEstimate,\n Rdf3xIndexMetrics,\n Rdf3xIndexStats,\n Rdf3xJoinMetrics,\n Rdf3xJoinOptions,\n Rdf3xJoinScanResult,\n Rdf3xPairProjectionName,\n Rdf3xPatternKey,\n Rdf3xPermutationName,\n Rdf3xRebuildResult,\n Rdf3xNumericObjectRangePattern,\n Rdf3xTermKey,\n Rdf3xTermProjectionName,\n Rdf3xTripleIndexOptions,\n Rdf3xTriplePattern,\n Rdf3xTripleScanOptions,\n Rdf3xTripleScanResult,\n RdfIndexSpaceObject,\n RdfQuadJoinPattern,\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 table: 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 graphPrefix?: string;\n objectNumericRange?: Rdf3xNumericRange;\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 entry: RdfQuadJoinPattern;\n resolved: Rdf3xResolvedPattern;\n permutation: Rdf3xPermutation;\n estimate: Rdf3xCardinalityEstimate;\n}\n\ninterface Rdf3xCompiledJoin {\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 Rdf3xNumericRange {\n min?: number;\n minInclusive?: boolean;\n max?: number;\n maxInclusive?: boolean;\n}\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'];\n\nconst PERMUTATIONS: Rdf3xPermutation[] = [\n { name: 'SPO', table: 'rdf3x_spo', columns: ['subject_id', 'predicate_id', 'object_id'] },\n { name: 'SOP', table: 'rdf3x_sop', columns: ['subject_id', 'object_id', 'predicate_id'] },\n { name: 'PSO', table: 'rdf3x_pso', columns: ['predicate_id', 'subject_id', 'object_id'] },\n { name: 'POS', table: 'rdf3x_pos', columns: ['predicate_id', 'object_id', 'subject_id'] },\n { name: 'OSP', table: 'rdf3x_osp', columns: ['object_id', 'subject_id', 'predicate_id'] },\n { name: 'OPS', table: 'rdf3x_ops', columns: ['object_id', 'predicate_id', 'subject_id'] },\n];\n\nconst PAIR_PROJECTIONS: Rdf3xPairProjection[] = [\n { name: 'SP', table: 'rdf3x_stat_sp', columns: ['subject_id', 'predicate_id'], remainder: 'object_id' },\n { name: 'SO', table: 'rdf3x_stat_so', columns: ['subject_id', 'object_id'], remainder: 'predicate_id' },\n { name: 'PS', table: 'rdf3x_stat_ps', columns: ['predicate_id', 'subject_id'], remainder: 'object_id' },\n { name: 'PO', table: 'rdf3x_stat_po', columns: ['predicate_id', 'object_id'], remainder: 'subject_id' },\n { name: 'OS', table: 'rdf3x_stat_os', columns: ['object_id', 'subject_id'], remainder: 'predicate_id' },\n { name: 'OP', table: 'rdf3x_stat_op', columns: ['object_id', 'predicate_id'], remainder: 'subject_id' },\n];\n\nconst TERM_PROJECTIONS: Rdf3xTermProjection[] = [\n { name: 'S', table: 'rdf3x_stat_s', column: 'subject_id' },\n { name: 'P', table: 'rdf3x_stat_p', column: 'predicate_id' },\n { name: 'O', table: 'rdf3x_stat_o', column: 'object_id' },\n];\n\nexport class Rdf3xTripleIndex {\n private readonly sqliteRuntime = createSqliteRuntime();\n private db: SqliteDatabase | null = null;\n private dictionary: RdfTermDictionary | null = null;\n\n public constructor(private readonly options: Rdf3xTripleIndexOptions) {}\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 }\n\n public rebuildFromCurrentQuads(): Rdf3xRebuildResult {\n const start = Date.now();\n const db = this.requireDb();\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 db.prepare(`\n INSERT INTO rdf3x_triple_membership (\n graph_id,\n subject_id,\n predicate_id,\n object_id,\n source_file_id,\n source_line_no\n )\n SELECT\n graph_id,\n subject_id,\n predicate_id,\n object_id,\n source_file_id,\n source_line_no\n FROM rdf_quads\n `).run();\n\n for (const permutation of PERMUTATIONS) {\n db.prepare(`\n INSERT OR IGNORE INTO ${permutation.table} (${permutation.columns.join(', ')})\n SELECT DISTINCT ${permutation.columns.join(', ')}\n FROM rdf_quads\n `).run();\n }\n\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 })();\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 durationMs: Date.now() - start,\n };\n }\n\n public scan(pattern: Rdf3xTriplePattern, options?: Rdf3xTripleScanOptions): 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 permutation = this.choosePermutation(resolved.ids, { objectRange: Boolean(resolved.objectNumericRange) });\n const compiled = this.compileScanSql(permutation, resolved, options);\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 permutation.name,\n matchedRows,\n rows.length,\n start,\n [\n `Rdf3xPermutationScan(${permutation.name})`,\n ...compiled.queryPlan,\n compiled.sql,\n ],\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 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.objectNumericRange) {\n return this.estimateNumericObjectRangeCardinality(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 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.rowCount('rdf3x_spo'),\n matchingQuads: this.rowCount('rdf3x_triple_membership'),\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 return {\n uniqueTriples: this.rowCount('rdf3x_spo'),\n membershipCount: this.rowCount('rdf3x_triple_membership'),\n graphCount: this.requireDb()\n .prepare<{ count: number }>('SELECT COUNT(DISTINCT graph_id) AS count FROM rdf3x_triple_membership')\n .get()?.count ?? 0,\n permutationRows: Object.fromEntries(PERMUTATIONS.map((permutation) => [\n permutation.name,\n this.rowCount(permutation.table),\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 const permutationTables = PERMUTATIONS.map((permutation) => `\n CREATE TABLE IF NOT EXISTS ${permutation.table} (\n ${permutation.columns[0]} INTEGER NOT NULL,\n ${permutation.columns[1]} INTEGER NOT NULL,\n ${permutation.columns[2]} INTEGER NOT NULL,\n PRIMARY KEY (${permutation.columns.join(', ')})\n );\n `).join('\\n');\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 );\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 );\n `).join('\\n');\n\n this.requireDb().exec(`\n CREATE TABLE IF NOT EXISTS rdf3x_triple_membership (\n graph_id INTEGER NOT NULL,\n subject_id INTEGER NOT NULL,\n predicate_id INTEGER NOT NULL,\n object_id INTEGER NOT NULL,\n source_file_id INTEGER,\n source_line_no INTEGER,\n PRIMARY KEY (graph_id, subject_id, predicate_id, object_id)\n );\n\n CREATE INDEX IF NOT EXISTS rdf3x_membership_gspo\n ON rdf3x_triple_membership(graph_id, subject_id, predicate_id, object_id);\n CREATE INDEX IF NOT EXISTS rdf3x_membership_spo\n ON rdf3x_triple_membership(subject_id, predicate_id, object_id);\n CREATE INDEX IF NOT EXISTS rdf3x_membership_source\n ON rdf3x_triple_membership(source_file_id);\n\n ${permutationTables}\n ${pairProjectionTables}\n ${termProjectionTables}\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 rdf3x_triple_membership;',\n ...PERMUTATIONS.map((permutation) => `DELETE FROM ${permutation.table};`),\n ].join('\\n'));\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(*) AS triple_count,\n MIN(${projection.remainder}) AS min_remainder,\n MAX(${projection.remainder}) AS max_remainder\n FROM rdf3x_spo\n GROUP BY ${left}, ${right}\n ) triple\n LEFT JOIN (\n SELECT\n ${left},\n ${right},\n COUNT(*) AS membership_count\n FROM rdf3x_triple_membership\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 rdf3x_spo\n GROUP BY ${projection.column}\n ) triple\n LEFT JOIN (\n SELECT\n ${projection.column},\n COUNT(*) AS membership_count\n FROM rdf3x_triple_membership\n GROUP BY ${projection.column}\n ) member\n ON member.${projection.column} = triple.${projection.column}\n `).run();\n }\n\n private compileScanSql(\n permutation: Rdf3xPermutation,\n resolved: Rdf3xResolvedPattern,\n options?: Rdf3xTripleScanOptions,\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\n if (ids.graph !== undefined) {\n conditions.push('membership.graph_id = ?');\n params.push(ids.graph);\n queryPlan.push('GraphMembershipFilter');\n }\n\n const graphPrefixJoin = resolved.graphPrefix\n ? ` JOIN rdf_terms graph_prefix\n ON graph_prefix.id = membership.graph_id`\n : '';\n if (resolved.graphPrefix) {\n conditions.push(`graph_prefix.kind = ?\n AND graph_prefix.value >= ?\n AND graph_prefix.value < ?`);\n params.push('iri', resolved.graphPrefix, `${resolved.graphPrefix}\\uffff`);\n queryPlan.push('GraphPrefixMembershipFilter');\n }\n\n if (resolved.objectNumericRange) {\n const range = resolved.objectNumericRange;\n conditions.push('object_numeric.kind = ?');\n params.push('literal');\n if (range.min !== undefined) {\n conditions.push(`object_numeric.numeric_value ${range.minInclusive ? '>=' : '>'} ?`);\n params.push(range.min);\n }\n if (range.max !== undefined) {\n conditions.push(`object_numeric.numeric_value ${range.maxInclusive ? '<=' : '<'} ?`);\n params.push(range.max);\n }\n queryPlan.push(`NumericRange(object${range.min !== undefined ? (range.minInclusive ? '$gte' : '$gt') : ''}${range.max !== undefined ? (range.maxInclusive ? '$lte' : '$lt') : ''})`);\n }\n\n const whereClause = conditions.length > 0 ? ` WHERE ${conditions.join(' AND ')}` : '';\n const orderClause = this.buildOrderClause(options);\n const from = `\n FROM ${permutation.table} idx\n JOIN rdf3x_triple_membership membership\n ON membership.subject_id = idx.subject_id\n AND membership.predicate_id = idx.predicate_id\n AND membership.object_id = idx.object_id\n ${graphPrefixJoin}\n ${resolved.objectNumericRange ? 'JOIN rdf_terms object_numeric ON object_numeric.id = idx.object_id' : ''}\n `;\n const pagination = this.buildPagination(options);\n return {\n sql: `\n SELECT\n membership.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(', ')}, membership.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(${(options?.order ?? []).map((entry, index) => `${options?.reverse ? 'desc' : 'asc'}:${entry}:${index}`).join(',')})`] : []),\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, { objectRange: Boolean(resolved.objectNumericRange) });\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 entry,\n resolved,\n permutation,\n estimate,\n } satisfies Rdf3xJoinSource;\n });\n const startPattern = this.chooseJoinStart(sources);\n\n const orderedSources = [startPattern, ...sources.filter((source) => source.inputIndex !== startPattern.inputIndex)];\n const queryPlan: string[] = [\n `Rdf3xJoinBGP(${patterns.length})`,\n `Rdf3xJoinOrder(${orderedSources.map((source) => `?${source.inputIndex}:${source.estimate.indexChoice}`).join('>')})`,\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 const scanSql = this.joinSourceSql(source, position === 0);\n if (source.resolved.unresolved) {\n return {\n sql: '',\n params: [],\n countParams: [],\n indexChoice: 'none',\n queryPlan,\n variableColumns,\n variableAliases,\n unresolved: source.resolved.unresolved,\n };\n }\n\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 = key === 'graph'\n ? `${source.membershipAlias}.graph_id`\n : `${source.alias}.${TERM_COLUMN[key]}`;\n const existing = variableColumns.get(variableName);\n if (existing) {\n conditions.push(`${existing} = ${column}`);\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 orderClause = this.buildJoinOrderClause(options, variableColumns);\n const whereClause = conditions.length > 0 ? ` WHERE ${conditions.join(' AND ')}` : '';\n const from = fromFragments.join('');\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 if (options?.distinct) {\n queryPlan.push(`Rdf3xJoinDistinct(${projectVariables.map((variableName) => `?${variableName}`).join(',')})`);\n }\n if (paginated) {\n queryPlan.push('Rdf3xJoinLimit');\n }\n return {\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(source: Rdf3xJoinSource, first: boolean): Rdf3xJoinSourceSql {\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\n let from = first\n ? `${source.permutation.table} ${alias}\n JOIN rdf3x_triple_membership ${source.membershipAlias}\n ON ${source.membershipAlias}.subject_id = ${alias}.subject_id\n AND ${source.membershipAlias}.predicate_id = ${alias}.predicate_id\n AND ${source.membershipAlias}.object_id = ${alias}.object_id`\n : ` JOIN ${source.permutation.table} ${alias}\n ON 1 = 1\n JOIN rdf3x_triple_membership ${source.membershipAlias}\n ON ${source.membershipAlias}.subject_id = ${alias}.subject_id\n AND ${source.membershipAlias}.predicate_id = ${alias}.predicate_id\n AND ${source.membershipAlias}.object_id = ${alias}.object_id`;\n\n if (source.resolved.ids.graph !== undefined) {\n conditions.push(`${source.membershipAlias}.graph_id = ?`);\n params.push(source.resolved.ids.graph);\n queryPlan.push('GraphMembershipFilter');\n }\n if (source.resolved.graphPrefix !== undefined) {\n from += ` JOIN rdf_terms ${graphPrefixAlias}\n ON ${graphPrefixAlias}.id = ${source.membershipAlias}.graph_id`;\n conditions.push(`${graphPrefixAlias}.kind = ?\n AND ${graphPrefixAlias}.value >= ?\n AND ${graphPrefixAlias}.value < ?`);\n params.push('iri', source.resolved.graphPrefix, `${source.resolved.graphPrefix}\\uffff`);\n queryPlan.push('GraphPrefixMembershipFilter');\n }\n if (source.resolved.objectNumericRange) {\n from += ` JOIN rdf_terms ${source.alias}_object_numeric\n ON ${source.alias}_object_numeric.id = ${source.alias}.object_id`;\n const range = source.resolved.objectNumericRange;\n conditions.push(`${source.alias}_object_numeric.kind = ?`);\n params.push('literal');\n if (range.min !== undefined) {\n conditions.push(`${source.alias}_object_numeric.numeric_value ${range.minInclusive ? '>=' : '>'} ?`);\n params.push(range.min);\n }\n if (range.max !== undefined) {\n conditions.push(`${source.alias}_object_numeric.numeric_value ${range.maxInclusive ? '<=' : '<'} ?`);\n params.push(range.max);\n }\n queryPlan.push(`NumericRange(object${range.min !== undefined ? (range.minInclusive ? '$gte' : '$gt') : ''}${range.max !== undefined ? (range.maxInclusive ? '$lte' : '$lt') : ''})`);\n }\n\n return {\n from,\n conditions,\n params,\n queryPlan,\n };\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 buildOrderClause(options?: Rdf3xTripleScanOptions): { 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.reverse ? ' DESC' : '';\n return {\n join: ` JOIN rdf_terms ${alias} ON ${alias}.id = idx.${column}`,\n order: `${alias}.value${direction}`,\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 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.objectNumericRange) {\n return this.estimateNumericObjectRangeCardinality(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.rowCount('rdf3x_spo'),\n matchingQuads: this.rowCount('rdf3x_triple_membership'),\n source: 'full-count',\n indexChoice: this.choosePermutation(ids, { objectRange: Boolean(resolved.objectNumericRange) }).name,\n };\n }\n\n private resolveJoinPattern(pattern: QuintPattern): Rdf3xResolvedPattern {\n const ids: Partial<Record<Rdf3xPatternKey, number>> = {};\n let graphPrefix: string | undefined;\n let objectNumericRange: Rdf3xNumericRange | 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 (key === 'object' && isNumericObjectRangePattern(match)) {\n const resolvedRange = this.resolveNumericObjectRange(match);\n if (!resolvedRange) {\n return { ids, graphPrefix, objectNumericRange: resolvedRange, unresolved: key };\n }\n objectNumericRange = resolvedRange;\n continue;\n }\n if (!isRdfTerm(match)) {\n return { ids, graphPrefix, unresolved: key };\n }\n const id = this.requireDictionary().find(match);\n if (id === undefined) {\n return { ids, graphPrefix, unresolved: key };\n }\n ids[key] = id;\n }\n return {\n ids,\n ...(graphPrefix !== undefined ? { graphPrefix } : {}),\n ...(objectNumericRange !== undefined ? { objectNumericRange } : {}),\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 ): 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 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 rdf3x_spo\n WHERE subject_id = ?\n AND predicate_id = ?\n AND object_id = ?\n `).get(ids.subject, ids.predicate, ids.object);\n const membership = this.requireDb().prepare<{ count: number }>(`\n SELECT COUNT(*) AS count\n FROM rdf3x_triple_membership\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 { joins, whereClause, params } = this.buildMembershipWhere(resolved);\n const matchingQuads = this.requireDb().prepare<{ count: number }>(`\n SELECT COUNT(*) AS count\n FROM rdf3x_triple_membership\n ${joins}\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 rdf3x_triple_membership\n ${joins}\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): { joins: string; whereClause: string; params: unknown[] } {\n const ids = resolved.ids;\n const conditions: string[] = [];\n const params: unknown[] = [];\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(`${PATTERN_COLUMNS[key]} = ?`);\n params.push(id);\n }\n const joins = resolved.graphPrefix !== undefined\n ? ` JOIN rdf_terms membership_graph_prefix\n ON membership_graph_prefix.id = rdf3x_triple_membership.graph_id`\n : '';\n if (resolved.graphPrefix !== undefined) {\n conditions.push(`membership_graph_prefix.kind = ?\n AND membership_graph_prefix.value >= ?\n AND membership_graph_prefix.value < ?`);\n params.push('iri', resolved.graphPrefix, `${resolved.graphPrefix}\\uffff`);\n }\n return {\n whereClause: conditions.length > 0 ? ` WHERE ${conditions.join(' AND ')}` : '',\n joins,\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 resolvePattern(pattern: Rdf3xTriplePattern): Rdf3xResolvedPattern {\n const ids: Partial<Record<Rdf3xPatternKey, number>> = {};\n let graphPrefix: string | undefined;\n let objectNumericRange: Rdf3xNumericRange | 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 (key === 'object' && isNumericObjectRangePattern(term)) {\n const resolvedRange = this.resolveNumericObjectRange(term);\n if (!resolvedRange) {\n return { ids, graphPrefix, objectNumericRange: resolvedRange, unresolved: key };\n }\n objectNumericRange = resolvedRange;\n continue;\n }\n if (key === 'graph' && !isRdfTerm(term)) {\n return { ids, graphPrefix, unresolved: key };\n }\n if (key !== 'graph' && !isRdfTerm(term)) {\n return { ids, graphPrefix, unresolved: key };\n }\n const rdfTerm = term as Term;\n const id = this.requireDictionary().find(rdfTerm);\n if (id === undefined) {\n return { ids, graphPrefix, unresolved: key };\n }\n ids[key] = id;\n }\n return {\n ids,\n ...(graphPrefix !== undefined ? { graphPrefix } : {}),\n ...(objectNumericRange !== undefined ? { objectNumericRange } : {}),\n };\n }\n\n private estimateNumericObjectRangeCardinality(resolved: Rdf3xResolvedPattern): Rdf3xCardinalityEstimate {\n const range = resolved.objectNumericRange;\n if (!range) {\n return this.estimateMembershipCardinality(resolved.ids);\n }\n const { joins, whereClause, params } = this.buildMembershipWhere({\n ids: resolved.ids,\n ...(resolved.graphPrefix !== undefined ? { graphPrefix: resolved.graphPrefix } : {}),\n });\n const numericConditions: string[] = ['object_numeric.kind = ?'];\n const numericParams: unknown[] = ['literal'];\n if (range.min !== undefined) {\n numericConditions.push(`object_numeric.numeric_value ${range.minInclusive ? '>=' : '>'} ?`);\n numericParams.push(range.min);\n }\n if (range.max !== undefined) {\n numericConditions.push(`object_numeric.numeric_value ${range.maxInclusive ? '<=' : '<'} ?`);\n numericParams.push(range.max);\n }\n const membershipWhere = whereClause\n ? `${whereClause} AND ${numericConditions.join(' AND ')}`\n : ` WHERE ${numericConditions.join(' AND ')}`;\n const matchingQuads = this.requireDb().prepare<{ count: number }>(`\n SELECT COUNT(*) AS count\n FROM rdf3x_triple_membership\n ${joins}\n JOIN rdf_terms object_numeric ON object_numeric.id = rdf3x_triple_membership.object_id\n ${membershipWhere}\n `).get(...params, ...numericParams)?.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 rdf3x_triple_membership\n ${joins}\n JOIN rdf_terms object_numeric ON object_numeric.id = rdf3x_triple_membership.object_id\n ${membershipWhere}\n ) distinct_triples\n `).get(...params, ...numericParams)?.count ?? 0;\n return {\n uniqueTriples,\n matchingQuads,\n source: 'exact-membership',\n indexChoice: 'source-membership',\n };\n }\n\n private resolveNumericObjectRange(match: Rdf3xNumericObjectRangePattern): Rdf3xNumericRange | undefined {\n const range: Rdf3xNumericRange = {};\n let hasRange = false;\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 if (numericValue === undefined) {\n return undefined;\n }\n if (operator === '$gt' || operator === '$gte') {\n range.min = numericValue;\n range.minInclusive = inclusive;\n } else {\n range.max = numericValue;\n range.maxInclusive = inclusive;\n }\n }\n return hasRange ? range : undefined;\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 choosePermutation(\n ids: Partial<Record<Rdf3xPatternKey, number>>,\n constraints?: { objectRange?: boolean },\n ): Rdf3xPermutation {\n const has = (key: Rdf3xTermKey): boolean => ids[key] !== undefined;\n const hasObjectConstraint = has('object') || Boolean(constraints?.objectRange);\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 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('Rdf3xTripleIndex is not open');\n }\n return this.db;\n }\n\n private requireDictionary(): RdfTermDictionary {\n if (!this.dictionary) {\n throw new Error('Rdf3xTripleIndex 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 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 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 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 && '$startsWith' in value\n && typeof (value as { $startsWith?: unknown }).$startsWith === 'string';\n}\n\nfunction isNumericObjectRangePattern(value: unknown): value is Rdf3xNumericObjectRangePattern {\n return value !== null\n && typeof value === 'object'\n && !('termType' in value)\n && ['$gt', '$gte', '$lt', '$lte'].some((operator) => operator in value);\n}\n"]}