@undefineds.co/xpod 0.3.24 → 0.3.26

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 (89) hide show
  1. package/config/cloud.json +6 -5
  2. package/config/main.json +0 -3
  3. package/config/xpod.base.json +0 -32
  4. package/dist/api/container/index.js +3 -0
  5. package/dist/api/container/index.js.map +1 -1
  6. package/dist/api/container/routes.js +2 -0
  7. package/dist/api/container/routes.js.map +1 -1
  8. package/dist/api/container/types.d.ts +5 -0
  9. package/dist/api/container/types.js.map +1 -1
  10. package/dist/authorization/AuthMode.d.ts +8 -0
  11. package/dist/authorization/AuthMode.js +51 -0
  12. package/dist/authorization/AuthMode.js.map +1 -0
  13. package/dist/authorization/PodAuthorizationResources.d.ts +18 -0
  14. package/dist/authorization/PodAuthorizationResources.js +108 -0
  15. package/dist/authorization/PodAuthorizationResources.js.map +1 -0
  16. package/dist/cli/commands/start.js +11 -2
  17. package/dist/cli/commands/start.js.map +1 -1
  18. package/dist/components/components.jsonld +3 -2
  19. package/dist/components/context.jsonld +115 -14
  20. package/dist/index.d.ts +5 -3
  21. package/dist/index.js +6 -5
  22. package/dist/index.js.map +1 -1
  23. package/dist/main.js +11 -2
  24. package/dist/main.js.map +1 -1
  25. package/dist/provision/LocalPodProvisioningService.d.ts +6 -2
  26. package/dist/provision/LocalPodProvisioningService.js +36 -33
  27. package/dist/provision/LocalPodProvisioningService.js.map +1 -1
  28. package/dist/provision/LocalPodProvisioningService.jsonld +65 -8
  29. package/dist/runtime/XpodRuntime.js +0 -1
  30. package/dist/runtime/XpodRuntime.js.map +1 -1
  31. package/dist/runtime/bootstrap.d.ts +4 -2
  32. package/dist/runtime/bootstrap.js +82 -12
  33. package/dist/runtime/bootstrap.js.map +1 -1
  34. package/dist/runtime/css-process.d.ts +6 -1
  35. package/dist/runtime/css-process.js +55 -7
  36. package/dist/runtime/css-process.js.map +1 -1
  37. package/dist/runtime/lifecycle.d.ts +2 -3
  38. package/dist/runtime/lifecycle.js +2 -2
  39. package/dist/runtime/lifecycle.js.map +1 -1
  40. package/dist/runtime/runtime-types.d.ts +2 -1
  41. package/dist/runtime/runtime-types.js.map +1 -1
  42. package/dist/storage/accessors/SolidRdfDataAccessor.d.ts +2 -3
  43. package/dist/storage/accessors/SolidRdfDataAccessor.js +48 -42
  44. package/dist/storage/accessors/SolidRdfDataAccessor.js.map +1 -1
  45. package/dist/storage/accessors/SolidRdfDataAccessor.jsonld +1 -1
  46. package/dist/storage/keyvalue/BaseKeyValueStorage.d.ts +33 -0
  47. package/dist/storage/keyvalue/BaseKeyValueStorage.js +106 -0
  48. package/dist/storage/keyvalue/BaseKeyValueStorage.js.map +1 -0
  49. package/dist/storage/keyvalue/BaseKeyValueStorage.jsonld +177 -0
  50. package/dist/storage/keyvalue/PostgresKeyValueStorage.d.ts +9 -18
  51. package/dist/storage/keyvalue/PostgresKeyValueStorage.js +24 -96
  52. package/dist/storage/keyvalue/PostgresKeyValueStorage.js.map +1 -1
  53. package/dist/storage/keyvalue/PostgresKeyValueStorage.jsonld +15 -58
  54. package/dist/storage/keyvalue/SqliteKeyValueStorage.d.ts +9 -15
  55. package/dist/storage/keyvalue/SqliteKeyValueStorage.js +36 -104
  56. package/dist/storage/keyvalue/SqliteKeyValueStorage.js.map +1 -1
  57. package/dist/storage/keyvalue/SqliteKeyValueStorage.jsonld +21 -52
  58. package/dist/storage/quint/BaseQuintStore.d.ts +4 -1
  59. package/dist/storage/quint/BaseQuintStore.js +59 -46
  60. package/dist/storage/quint/BaseQuintStore.js.map +1 -1
  61. package/dist/storage/quint/PgQuintStore.d.ts +4 -3
  62. package/dist/storage/quint/PgQuintStore.js.map +1 -1
  63. package/dist/storage/quint/SqliteQuintStore.d.ts +43 -54
  64. package/dist/storage/quint/SqliteQuintStore.js +197 -520
  65. package/dist/storage/quint/SqliteQuintStore.js.map +1 -1
  66. package/dist/storage/quint/SqliteQuintStore.jsonld +38 -86
  67. package/dist/storage/rdf/PostgresRdfEngine.d.ts +118 -0
  68. package/dist/storage/rdf/PostgresRdfEngine.js +2609 -0
  69. package/dist/storage/rdf/PostgresRdfEngine.js.map +1 -0
  70. package/dist/storage/rdf/PostgresRdfEngine.jsonld +657 -0
  71. package/dist/storage/rdf/SolidRdfEngine.d.ts +2 -2
  72. package/dist/storage/rdf/SolidRdfEngine.js.map +1 -1
  73. package/dist/storage/rdf/SolidRdfEngine.jsonld +3 -0
  74. package/dist/storage/rdf/SolidRdfSparqlEngine.d.ts +3 -3
  75. package/dist/storage/rdf/SolidRdfSparqlEngine.js +20 -20
  76. package/dist/storage/rdf/SolidRdfSparqlEngine.js.map +1 -1
  77. package/dist/storage/rdf/SolidRdfSparqlEngine.jsonld +1 -1
  78. package/dist/storage/rdf/index.d.ts +2 -1
  79. package/dist/storage/rdf/index.js +3 -1
  80. package/dist/storage/rdf/index.js.map +1 -1
  81. package/dist/storage/rdf/types.d.ts +19 -0
  82. package/dist/storage/rdf/types.js.map +1 -1
  83. package/dist/storage/rdf/types.jsonld +115 -0
  84. package/package.json +2 -2
  85. package/config/runtime-open.json +0 -22
  86. package/dist/authorization/AuthModeSelector.d.ts +0 -10
  87. package/dist/authorization/AuthModeSelector.js +0 -27
  88. package/dist/authorization/AuthModeSelector.js.map +0 -1
  89. package/dist/authorization/AuthModeSelector.jsonld +0 -81
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PostgresRdfEngine.js","sourceRoot":"","sources":["../../../src/storage/rdf/PostgresRdfEngine.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from 'node:crypto';\nimport { mkdtempSync } from 'node:fs';\nimport { rm } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport { tmpdir } from 'node:os';\nimport { DataFactory } from 'n3';\nimport type { Quad, Term } from '@rdfjs/types';\nimport { PGlite } from '@electric-sql/pglite';\nimport { getSharedPool, releaseSharedPool } from '../database/PostgresPoolManager';\nimport { RDF_TERM_VALUE_HEAD_LENGTH, rdfTermValueHead } from './RdfTermDictionary';\nimport { isRdfNumericDatatype, rdfNumericValue } from './RdfTermSemantics';\nimport { SolidRdfEngine } from './SolidRdfEngine';\nimport {\n RDF3X_GRAPH_PROJECTION_TABLE,\n RDF3X_PAIR_PROJECTION_TABLE_BY_NAME,\n RDF3X_TERM_PROJECTION_TABLE_BY_NAME,\n} from './Rdf3xSchema';\nimport type {\n RdfBindingRow,\n RdfDerivedIndexRefreshResult,\n RdfEngineLike,\n RdfEngineStorageStats,\n RdfIndexMetrics,\n RdfIndexPutOptions,\n RdfIndexSpaceObject,\n RdfIndexStats,\n RdfLocalQuery,\n RdfLocalQueryMetrics,\n RdfLocalQueryResult,\n RdfPatternQuery,\n RdfQueryFilter,\n RdfQueryPattern,\n RdfQueryPatternKey,\n RdfQueryTermPattern,\n RdfQuadIndexScanResult,\n RdfSourceInput,\n Rdf3xIndexStats,\n Rdf3xObjectRangePattern,\n Rdf3xObjectTextSearchPattern,\n Rdf3xPairProjectionName,\n Rdf3xTermMetadataPattern,\n Rdf3xTermProjectionName,\n Rdf3xTermTypePatternValue,\n RdfTermKind,\n} from './types';\nimport type { QueryOptions, QuintPattern, TermMatch, TermName, TermOperators } from '../quint/types';\nimport { isTerm } from '../quint/types';\n\nconst { namedNode, quad } = DataFactory;\nconst XSD_STRING = 'http://www.w3.org/2001/XMLSchema#string';\nconst XSD_INTEGER = 'http://www.w3.org/2001/XMLSchema#integer';\nconst XSD_DECIMAL = 'http://www.w3.org/2001/XMLSchema#decimal';\nconst RDF_LANG_STRING = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#langString';\nconst POSTGRES_RDF_SCHEMA_VERSION = 1;\nconst POSTGRES_RDF3X_SCHEMA_VERSION = 1;\nconst PG_STRING_ESCAPE = '\\u001f';\n\ntype PgPatternKey = 'graph' | 'subject' | 'predicate' | 'object';\ntype PgTermKey = 'subject' | 'predicate' | 'object';\ntype PgIndexedColumn = 'graph_id' | 'subject_id' | 'predicate_id' | 'object_id';\ntype PgPermutationName = 'SPO' | 'SOP' | 'PSO' | 'POS' | 'OSP' | 'OPS';\n\ninterface PgPermutation {\n name: PgPermutationName;\n indexName: string;\n columns: PgIndexedColumn[];\n}\n\ninterface PgPairProjection {\n name: Rdf3xPairProjectionName;\n table: string;\n columns: [PgIndexedColumn, PgIndexedColumn];\n remainder: PgIndexedColumn;\n}\n\ninterface PgTermProjection {\n name: Rdf3xTermProjectionName;\n table: string;\n column: PgIndexedColumn;\n}\n\ninterface PgResolvedPattern {\n ids: Partial<Record<PgPatternKey, number>>;\n idSets: Partial<Record<PgPatternKey, number[]>>;\n excludedIdSets: Partial<Record<PgPatternKey, number[]>>;\n termFilters: Partial<Record<PgPatternKey, PgResolvedTermFilter>>;\n graphPrefix?: string;\n objectRange?: PgObjectRange;\n unresolved?: PgPatternKey;\n}\n\ninterface PgResolvedTermFilter {\n termType?: Rdf3xTermTypePatternValue;\n language?: string;\n notLanguage?: string;\n langMatches?: string;\n datatype?: PgResolvedDatatypeFilter;\n notDatatype?: PgResolvedDatatypeFilter;\n textSearches?: PgTextSearch[];\n}\n\ntype PgResolvedDatatypeFilter =\n | { kind: 'id'; id: number }\n | { kind: 'xsd-string' }\n | { kind: 'unknown' };\n\ninterface PgTextSearch {\n operator: '$contains' | '$endsWith';\n value: string;\n}\n\ninterface PgObjectRange {\n mode: 'numeric' | 'lexical';\n min?: number | string;\n minInclusive?: boolean;\n max?: number | string;\n maxInclusive?: boolean;\n}\n\ninterface PgQuadIdRow {\n graph_id: number;\n subject_id: number;\n predicate_id: number;\n object_id: number;\n}\n\ninterface PgCompiledScan {\n sql: string;\n params: unknown[];\n countSql: string;\n countParams: unknown[];\n indexChoice: string;\n queryPlan: string[];\n}\n\ninterface PgCompiledJoinPattern {\n pattern: QuintPattern;\n variables: Partial<Record<PgPatternKey, string>>;\n equalities: PgPatternEquality[];\n}\n\ninterface PgJoinSource {\n inputIndex: number;\n alias: string;\n entry: PgCompiledJoinPattern;\n resolved: PgResolvedPattern;\n permutation: PgPermutation;\n estimateRows: number;\n}\n\ninterface PgCompiledJoin {\n sql: string;\n params: unknown[];\n countSql?: string;\n countParams: unknown[];\n indexChoice: string;\n queryPlan: string[];\n variableAliases: Map<string, string>;\n unresolved?: PgPatternKey;\n}\n\ninterface PgLocalQueryNativeResult {\n result?: RdfLocalQueryResult;\n unsupported?: boolean;\n}\n\ninterface PgPatternEquality {\n variable: string;\n left: PgPatternKey;\n right: PgPatternKey;\n}\n\ninterface PgAggregateSqlExpression {\n variableName: string;\n alias: string;\n type: 'integer';\n expression: string;\n sql: string;\n}\n\nconst TERM_KEYS: PgTermKey[] = ['subject', 'predicate', 'object'];\nconst PATTERN_KEYS: PgPatternKey[] = ['graph', 'subject', 'predicate', 'object'];\nconst RDF_FACTS_TABLE = 'rdf_quads';\n\nconst TERM_COLUMN: Record<PgPatternKey, PgIndexedColumn> = {\n graph: 'graph_id',\n subject: 'subject_id',\n predicate: 'predicate_id',\n object: 'object_id',\n};\n\nconst PERMUTATIONS: PgPermutation[] = [\n { name: 'SPO', indexName: 'rdf_quads_spog', columns: ['subject_id', 'predicate_id', 'object_id', 'graph_id'] },\n { name: 'SOP', indexName: 'rdf_quads_sopg', columns: ['subject_id', 'object_id', 'predicate_id', 'graph_id'] },\n { name: 'PSO', indexName: 'rdf_quads_psog', columns: ['predicate_id', 'subject_id', 'object_id', 'graph_id'] },\n { name: 'POS', indexName: 'rdf_quads_posg', columns: ['predicate_id', 'object_id', 'subject_id', 'graph_id'] },\n { name: 'OSP', indexName: 'rdf_quads_ospg', columns: ['object_id', 'subject_id', 'predicate_id', 'graph_id'] },\n { name: 'OPS', indexName: 'rdf_quads_opsg', columns: ['object_id', 'predicate_id', 'subject_id', 'graph_id'] },\n];\n\nconst PAIR_PROJECTIONS: PgPairProjection[] = [\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: PgTermProjection[] = [\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 OBJECT_RANGE_KINDS: RdfTermKind[] = ['iri', 'literal', 'blank'];\n\ninterface AsyncSqlExecutor {\n query<T = Record<string, unknown>>(sql: string, params?: unknown[]): Promise<T[]>;\n exec(sql: string, params?: unknown[]): Promise<void>;\n transaction<T>(fn: (tx: AsyncSqlExecutor) => Promise<T>): Promise<T>;\n close(): Promise<void>;\n}\n\nexport interface PostgresRdfEngineOptions {\n driver?: 'pglite' | 'pg';\n dataDir?: string;\n connectionString?: string;\n host?: string;\n port?: number;\n database?: string;\n user?: string;\n password?: string;\n pool?: any;\n autoOpen?: boolean;\n}\n\ninterface PostgresRdfTermRow {\n id: number;\n kind: RdfTermKind;\n value: string;\n value_head: string;\n datatype_id: number | null;\n lang: string | null;\n hash: string;\n normalized_text: string | null;\n numeric_value: number | null;\n created_at: string;\n}\n\ninterface PostgresRdfSourceRow {\n id: number;\n source: string;\n workspace: string;\n local_path: string | null;\n content_type: string | null;\n last_indexed_at: string | null;\n source_version: string | null;\n}\n\ninterface PostgresRdfQuadRow {\n graph_id: number;\n subject_id: number;\n predicate_id: number;\n object_id: number;\n source_file_id: number | null;\n source_line_no: number | null;\n}\n\ninterface RdfTermIdentity {\n kind: RdfTermKind;\n value: string;\n valueHead: string;\n datatypeId: number | null;\n lang: string | null;\n normalizedText: string | null;\n numericValue: number | null;\n hash: string;\n}\n\nfunction toPgSafe(value: string): string {\n return value\n .replaceAll(PG_STRING_ESCAPE, `${PG_STRING_ESCAPE}${PG_STRING_ESCAPE}`)\n .replaceAll('\\u0000', `${PG_STRING_ESCAPE}0`);\n}\n\nfunction fromPgSafe(value: string): string {\n let result = '';\n for (let i = 0; i < value.length; i += 1) {\n const char = value[i];\n if (char !== PG_STRING_ESCAPE) {\n result += char;\n continue;\n }\n const next = value[i + 1];\n if (next === '0') {\n result += '\\u0000';\n i += 1;\n } else if (next === PG_STRING_ESCAPE) {\n result += PG_STRING_ESCAPE;\n i += 1;\n } else {\n // Legacy rows from the earlier direct replacement format used a bare\n // separator as a null-byte placeholder.\n result += '\\u0000';\n }\n }\n return result;\n}\n\nfunction normalizePgValue(value: unknown): unknown {\n if (typeof value === 'string') {\n return toPgSafe(value);\n }\n if (Array.isArray(value)) {\n return value.map((item) => normalizePgValue(item));\n }\n return value;\n}\n\nclass PgliteExecutor implements AsyncSqlExecutor {\n public constructor(private readonly db: PGlite) {}\n\n public async query<T = Record<string, unknown>>(sql: string, params: unknown[] = []): Promise<T[]> {\n const result = await this.db.query(sql, params.map((value) => normalizePgValue(value)));\n return (result.rows as T[]).map((row) => restoreRow(row));\n }\n\n public async exec(sql: string, params: unknown[] = []): Promise<void> {\n await this.db.query(sql, params.map((value) => normalizePgValue(value)));\n }\n\n public async transaction<T>(fn: (tx: AsyncSqlExecutor) => Promise<T>): Promise<T> {\n await this.db.query('BEGIN');\n try {\n const result = await fn(this);\n await this.db.query('COMMIT');\n return result;\n } catch (error) {\n await this.db.query('ROLLBACK');\n throw error;\n }\n }\n\n public async close(): Promise<void> {\n await this.db.close();\n }\n}\n\nclass PgPoolExecutor implements AsyncSqlExecutor {\n public constructor(private readonly pool: any, private readonly client?: any) {}\n\n public async query<T = Record<string, unknown>>(sql: string, params: unknown[] = []): Promise<T[]> {\n const result = this.client\n ? await this.client.query(sql, params.map((value) => normalizePgValue(value)))\n : await this.pool.query(sql, params.map((value) => normalizePgValue(value)));\n return (result.rows as T[]).map((row: T) => restoreRow(row));\n }\n\n public async exec(sql: string, params: unknown[] = []): Promise<void> {\n if (this.client) {\n await this.client.query(sql, params.map((value) => normalizePgValue(value)));\n return;\n }\n await this.pool.query(sql, params.map((value) => normalizePgValue(value)));\n }\n\n public async transaction<T>(fn: (tx: AsyncSqlExecutor) => Promise<T>): Promise<T> {\n if (this.client) {\n const result = await fn(this);\n return result;\n }\n\n const client = await this.pool.connect();\n const tx = new PgPoolExecutor(this.pool, client);\n try {\n await client.query('BEGIN');\n const result = await fn(tx);\n await client.query('COMMIT');\n return result;\n } catch (error) {\n try {\n await client.query('ROLLBACK');\n } catch {\n }\n throw error;\n } finally {\n client.release();\n }\n }\n\n public async close(): Promise<void> {\n if (this.client) {\n return;\n }\n await this.pool.end();\n }\n}\n\nclass PgSqlBuilder {\n private params: unknown[] = [];\n\n public constructor(initialParams: unknown[] = []) {\n this.params = [...initialParams];\n }\n\n public add(value: unknown): string {\n this.params.push(value);\n return `$${this.params.length}`;\n }\n\n public addAll(values: unknown[]): string {\n return values.map((value) => this.add(value)).join(', ');\n }\n\n public snapshot(): unknown[] {\n return [...this.params];\n }\n}\n\nclass PostgresRdfTermDictionary {\n private readonly termCache = new Map<string, number>();\n private readonly idCache = new Map<number, Term>();\n\n public constructor(private readonly executor: AsyncSqlExecutor) {}\n\n public async initialize(): Promise<void> {\n await this.executor.exec(`\n CREATE TABLE IF NOT EXISTS rdf_terms (\n id BIGSERIAL PRIMARY KEY,\n kind TEXT NOT NULL,\n value TEXT NOT NULL,\n value_head TEXT NOT NULL,\n datatype_id BIGINT,\n lang TEXT,\n hash TEXT NOT NULL UNIQUE,\n normalized_text TEXT,\n numeric_value DOUBLE PRECISION,\n created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n )\n `);\n await this.executor.exec(`\n CREATE UNIQUE INDEX IF NOT EXISTS rdf_terms_identity_hash ON rdf_terms (hash)\n `);\n await this.executor.exec('CREATE INDEX IF NOT EXISTS rdf_terms_kind_value_head ON rdf_terms (kind, value_head)');\n await this.executor.exec('CREATE INDEX IF NOT EXISTS rdf_terms_kind_datatype ON rdf_terms (kind, datatype_id)');\n await this.executor.exec('CREATE INDEX IF NOT EXISTS rdf_terms_kind_lang ON rdf_terms (kind, lang)');\n await this.executor.exec('CREATE INDEX IF NOT EXISTS rdf_terms_kind_numeric_value ON rdf_terms (kind, numeric_value)');\n }\n\n public async getOrCreate(term: Term): Promise<number> {\n const identity = await this.toIdentity(term);\n const cacheKey = this.identityCacheKey(identity);\n const cached = this.termCache.get(cacheKey);\n if (cached !== undefined) {\n return cached;\n }\n\n const row = await this.executor.query<{ id: number }>(`\n INSERT INTO rdf_terms (\n kind,\n value,\n value_head,\n datatype_id,\n lang,\n hash,\n normalized_text,\n numeric_value\n )\n VALUES ($1, $2, $3, $4, $5, $6, $7, $8)\n ON CONFLICT (hash) DO UPDATE\n SET hash = EXCLUDED.hash\n RETURNING id\n `, [\n identity.kind,\n identity.value,\n identity.valueHead,\n identity.datatypeId,\n identity.lang,\n identity.hash,\n identity.normalizedText,\n identity.numericValue,\n ]);\n const id = row[0]?.id;\n if (id === undefined) {\n throw new Error('Failed to insert RDF term');\n }\n this.termCache.set(cacheKey, id);\n this.idCache.set(id, term);\n return id;\n }\n\n public async find(term: Term): Promise<number | undefined> {\n const identity = await this.toIdentity(term);\n const cacheKey = this.identityCacheKey(identity);\n const cached = this.termCache.get(cacheKey);\n if (cached !== undefined) {\n return cached;\n }\n\n const rows = await this.executor.query<PostgresRdfTermRow>('SELECT * FROM rdf_terms WHERE hash = $1', [identity.hash]);\n const id = rows.find((row) => this.rowMatchesIdentity(row, identity))?.id;\n if (id !== undefined) {\n this.termCache.set(cacheKey, id);\n }\n return id;\n }\n\n public async termForId(id: number): Promise<Term> {\n const cached = this.idCache.get(id);\n if (cached) {\n return cached;\n }\n const row = await this.executor.query<PostgresRdfTermRow>('SELECT * FROM rdf_terms WHERE id = $1', [id]);\n const termRow = row[0];\n if (!termRow) {\n throw new Error(`RDF term not found: ${id}`);\n }\n const term = await this.rowToTerm(termRow);\n this.idCache.set(id, term);\n return term;\n }\n\n public async rowsForIds(ids: number[]): Promise<Map<number, Term>> {\n const result = new Map<number, Term>();\n const uniqueIds = Array.from(new Set(ids));\n if (uniqueIds.length === 0) {\n return result;\n }\n\n const rows = await this.executor.query<PostgresRdfTermRow>('SELECT * FROM rdf_terms WHERE id = ANY($1::bigint[])', [uniqueIds]);\n for (const row of rows) {\n const term = await this.rowToTerm(row);\n this.idCache.set(row.id, term);\n result.set(row.id, term);\n }\n return result;\n }\n\n public async rowsByNormalizedTextRegex(kinds: RdfTermKind[], pattern: string): Promise<number[]> {\n if (kinds.length === 0) {\n return [];\n }\n const rows = await this.executor.query<{ id: number; value: string }>(`\n SELECT id, value\n FROM rdf_terms\n WHERE kind = ANY($1::text[])\n AND normalized_text IS NOT NULL\n `, [kinds]);\n const regex = new RegExp(pattern);\n return rows\n .filter((row) => regex.test(row.value.toLowerCase()))\n .map((row) => row.id);\n }\n\n public async count(): Promise<number> {\n const row = await this.executor.query<{ count: number }>('SELECT COUNT(*) AS count FROM rdf_terms');\n return row[0]?.count ?? 0;\n }\n\n private async toIdentity(term: Term): Promise<RdfTermIdentity> {\n switch (term.termType) {\n case 'NamedNode':\n return this.identity('iri', term.value, null, null, term.value, null);\n case 'BlankNode':\n return this.identity('blank', term.value, null, null, term.value, null);\n case 'DefaultGraph':\n return this.identity('default_graph', '', null, null, null, null);\n case 'Literal': {\n const datatypeValue = term.datatype?.value || XSD_STRING;\n const datatypeId = datatypeValue === XSD_STRING && !term.language\n ? null\n : await this.getOrCreate(namedNode(datatypeValue));\n return this.identity(\n 'literal',\n term.value,\n datatypeId,\n term.language || null,\n term.value,\n this.numericValueForLiteral(term.value, datatypeValue),\n );\n }\n case 'Variable':\n throw new Error(`Variables cannot be indexed as RDF terms: ${term.value}`);\n case 'Quad':\n throw new Error('Nested RDF-star quads are not supported by the first PostgresRdfEngine index');\n default: {\n const exhaustive: never = term;\n throw new Error(`Unsupported RDF term: ${String(exhaustive)}`);\n }\n }\n }\n\n private identity(\n kind: RdfTermKind,\n value: string,\n datatypeId: number | null,\n lang: string | null,\n normalizedText: string | null,\n numericValue: number | null,\n ): RdfTermIdentity {\n const hash = createHash('sha256')\n .update(kind)\n .update('\\0')\n .update(value)\n .update('\\0')\n .update(String(datatypeId ?? ''))\n .update('\\0')\n .update(lang ?? '')\n .digest('hex');\n return {\n kind,\n value,\n valueHead: rdfTermValueHead(value),\n datatypeId,\n lang,\n normalizedText: normalizedText ? normalizedText.toLowerCase() : null,\n numericValue,\n hash,\n };\n }\n\n private numericValueForLiteral(value: string, datatypeValue: string): number | null {\n if (!isRdfNumericDatatype(datatypeValue)) {\n return null;\n }\n const numeric = rdfNumericValue(value);\n return Number.isFinite(numeric) ? numeric : null;\n }\n\n private identityCacheKey(identity: RdfTermIdentity): string {\n return [\n identity.kind,\n identity.value,\n identity.datatypeId ?? '',\n identity.lang ?? '',\n ].join('\\u001f');\n }\n\n private rowMatchesIdentity(row: PostgresRdfTermRow, identity: RdfTermIdentity): boolean {\n return row.kind === identity.kind\n && row.value === identity.value\n && row.datatype_id === identity.datatypeId\n && row.lang === identity.lang;\n }\n\n private async rowToTerm(row: PostgresRdfTermRow): Promise<Term> {\n switch (row.kind) {\n case 'iri':\n return DataFactory.namedNode(row.value);\n case 'blank':\n return DataFactory.blankNode(row.value);\n case 'default_graph':\n return DataFactory.defaultGraph();\n case 'literal': {\n const value = row.value;\n if (row.lang) {\n return DataFactory.literal(value, row.lang);\n }\n if (row.datatype_id) {\n const datatype = await this.termForId(row.datatype_id);\n if (datatype.termType === 'NamedNode' && datatype.value !== XSD_STRING && datatype.value !== RDF_LANG_STRING) {\n return DataFactory.literal(value, datatype);\n }\n }\n return DataFactory.literal(value);\n }\n default:\n throw new Error(`Unsupported RDF term kind in row: ${row.kind}`);\n }\n }\n}\n\nexport class PostgresRdfEngine implements RdfEngineLike {\n private executor: AsyncSqlExecutor | null = null;\n private termDictionary: PostgresRdfTermDictionary | null = null;\n private cacheEngine: SolidRdfEngine | null = null;\n private cacheDir: string | null = null;\n private cachePath: string | null = null;\n private factsDataVersion = 0;\n private cacheDirty = true;\n private initialized = false;\n private initializing: Promise<void> | null = null;\n private readonly pgOptions: PostgresRdfEngineOptions;\n private sharedPoolConfig: {\n connectionString?: string;\n host?: string;\n port?: number;\n database?: string;\n user?: string;\n password?: string;\n } | null = null;\n private pglite: PGlite | null = null;\n private pgPool: any = null;\n private rdf3xDataVersion = 0;\n private rdf3xDirty = true;\n\n public constructor(options: PostgresRdfEngineOptions) {\n this.pgOptions = {\n ...options,\n driver: options.driver ?? (options.connectionString || options.pool ? 'pg' : 'pglite'),\n };\n if (options.autoOpen) {\n void this.open();\n }\n }\n\n public async open(): Promise<void> {\n if (this.initialized) {\n return;\n }\n\n this.initializing ??= Promise.resolve()\n .then(async () => {\n await this.openExecutor();\n this.termDictionary = new PostgresRdfTermDictionary(this.requireExecutor());\n await this.termDictionary.initialize();\n await this.initializeSchema();\n this.factsDataVersion = await this.readFactsDataVersion();\n this.rdf3xDataVersion = await this.readRdf3xFactsDataVersion();\n this.rdf3xDirty = this.rdf3xDataVersion !== this.factsDataVersion;\n this.initialized = true;\n })\n .finally(() => {\n this.initializing = null;\n });\n\n await this.initializing;\n }\n\n public async close(): Promise<void> {\n if (this.initializing) {\n await this.initializing.catch(() => {});\n }\n if (this.cacheEngine) {\n await this.cacheEngine.close();\n this.cacheEngine = null;\n }\n if (this.cacheDir) {\n await rm(this.cacheDir, { recursive: true, force: true });\n this.cacheDir = null;\n this.cachePath = null;\n }\n this.executor = null;\n if (this.pglite) {\n await this.pglite.close();\n this.pglite = null;\n }\n if (this.pgPool) {\n if (this.sharedPoolConfig) {\n releaseSharedPool(this.sharedPoolConfig);\n } else {\n await this.pgPool.end();\n }\n this.pgPool = null;\n this.sharedPoolConfig = null;\n }\n this.termDictionary = null;\n this.initialized = false;\n this.cacheDirty = true;\n this.factsDataVersion = 0;\n this.rdf3xDataVersion = 0;\n this.rdf3xDirty = true;\n }\n\n public async put(quads: Quad | Quad[], options?: RdfIndexPutOptions): Promise<void> {\n await this.ensureReady();\n const quadList = Array.isArray(quads) ? quads : [quads];\n const executor = this.requireExecutor();\n try {\n await executor.transaction(async (tx) => {\n const scopedDictionary = new PostgresRdfTermDictionary(tx);\n await scopedDictionary.initialize();\n const sourceId = options?.source ? await this.upsertSource(options.source, tx) : null;\n await this.insertQuads(tx, scopedDictionary, quadList, sourceId, options?.sourceLineNo ?? null);\n await this.bumpFactsDataVersion(tx);\n });\n this.factsDataVersion = await this.readFactsDataVersion();\n this.markDerivedDirty();\n } catch (error) {\n this.cacheDirty = true;\n throw error;\n }\n }\n\n public async replaceSource(quads: Quad[], source: RdfSourceInput): Promise<void> {\n await this.ensureReady();\n const executor = this.requireExecutor();\n try {\n await executor.transaction(async (tx) => {\n const scopedDictionary = new PostgresRdfTermDictionary(tx);\n await scopedDictionary.initialize();\n const sourceId = await this.upsertSource(source, tx);\n await tx.exec('DELETE FROM rdf_quads WHERE source_file_id = $1', [sourceId]);\n await this.insertQuads(tx, scopedDictionary, quads, sourceId, null);\n await this.bumpFactsDataVersion(tx);\n });\n this.factsDataVersion = await this.readFactsDataVersion();\n this.markDerivedDirty();\n } catch (error) {\n this.cacheDirty = true;\n throw error;\n }\n }\n\n public async deleteSource(source: string): Promise<number> {\n await this.ensureReady();\n const executor = this.requireExecutor();\n try {\n const sourceRow = await this.findSourceRow(source, executor);\n if (!sourceRow) {\n return 0;\n }\n const result = await executor.transaction(async (tx) => {\n const deleteResult = await tx.query<{ count: number }>('DELETE FROM rdf_quads WHERE source_file_id = $1 RETURNING 1', [sourceRow.id]);\n await tx.exec('DELETE FROM rdf_sources WHERE id = $1', [sourceRow.id]);\n await this.bumpFactsDataVersion(tx);\n return deleteResult.length;\n });\n this.factsDataVersion = await this.readFactsDataVersion();\n this.markDerivedDirty();\n return result;\n } catch (error) {\n this.cacheDirty = true;\n throw error;\n }\n }\n\n public async delete(pattern: QuintPattern): Promise<number> {\n await this.ensureReady();\n const scan = await this.scan({ pattern });\n if (scan.quads.length === 0) {\n return 0;\n }\n const executor = this.requireExecutor();\n try {\n await executor.transaction(async (tx) => {\n const scopedDictionary = new PostgresRdfTermDictionary(tx);\n await scopedDictionary.initialize();\n for (const value of scan.quads) {\n await this.deleteExactQuad(tx, scopedDictionary, value);\n }\n await this.bumpFactsDataVersion(tx);\n });\n this.factsDataVersion = await this.readFactsDataVersion();\n this.markDerivedDirty();\n return scan.quads.length;\n } catch (error) {\n this.cacheDirty = true;\n throw error;\n }\n }\n\n public async applyDelta(deletes: QuintPattern[], inserts: Quad[], options?: RdfIndexPutOptions): Promise<{ deletedRows: number; insertedRows: number }> {\n await this.ensureReady();\n if (deletes.length === 0 && inserts.length === 0) {\n return { deletedRows: 0, insertedRows: 0 };\n }\n\n const deleteQuads: Quad[] = [];\n for (const pattern of deletes) {\n deleteQuads.push(...(await this.scan({ pattern })).quads);\n }\n const uniqueDeleteQuads = uniqueQuads(deleteQuads);\n const executor = this.requireExecutor();\n let deletedRows = 0;\n try {\n deletedRows = await executor.transaction(async (tx) => {\n const scopedDictionary = new PostgresRdfTermDictionary(tx);\n await scopedDictionary.initialize();\n let deletedRows = 0;\n for (const value of uniqueDeleteQuads) {\n const deleted = await this.deleteExactQuad(tx, scopedDictionary, value);\n deletedRows += deleted;\n }\n const sourceId = options?.source ? await this.upsertSource(options.source, tx) : null;\n await this.insertQuads(tx, scopedDictionary, inserts, sourceId, options?.sourceLineNo ?? null);\n if (deletedRows > 0 || inserts.length > 0) {\n await this.bumpFactsDataVersion(tx);\n }\n return deletedRows;\n });\n this.factsDataVersion = await this.readFactsDataVersion();\n this.markDerivedDirty();\n return {\n deletedRows,\n insertedRows: inserts.length,\n };\n } catch (error) {\n this.cacheDirty = true;\n throw error;\n }\n }\n\n public async scan(query: RdfPatternQuery): Promise<RdfQuadIndexScanResult> {\n await this.ensureReady();\n if (!isPgRdf3xCompatiblePattern(query.pattern)) {\n await this.ensureCacheReady();\n const fallback = await this.requireCache().scan(query);\n fallback.metrics.queryPlan = ['PostgresRdf3xScanFallback', ...(fallback.metrics.queryPlan ?? [])];\n return fallback;\n }\n return this.scanNative(query.pattern, query.options);\n }\n\n public async query(query: RdfLocalQuery): Promise<RdfLocalQueryResult> {\n await this.ensureReady();\n const native = await this.queryNative(query);\n if (native.result) {\n return native.result;\n }\n await this.ensureCacheReady();\n const fallback = await this.requireCache().query(query);\n fallback.metrics.plan.unshift('PostgresRdf3xFallback');\n return fallback;\n }\n\n public async refreshDerivedIndexes(): Promise<RdfDerivedIndexRefreshResult> {\n await this.ensureReady();\n const factsDataVersion = await this.readFactsDataVersion();\n const previousFactsDataVersion = await this.readRdf3xFactsDataVersion();\n if (previousFactsDataVersion === factsDataVersion && !this.rdf3xDirty) {\n return {\n derivedIndexProfile: 'rdf3x',\n factsDataVersion,\n rdf3x: {\n refreshed: false,\n previousFactsDataVersion,\n factsDataVersion,\n syncedWithFacts: true,\n },\n };\n }\n const rebuild = await this.rebuildRdf3xDerivedIndexes(factsDataVersion);\n this.rdf3xDataVersion = factsDataVersion;\n this.rdf3xDirty = false;\n return {\n derivedIndexProfile: 'rdf3x',\n factsDataVersion,\n rdf3x: {\n refreshed: previousFactsDataVersion !== factsDataVersion,\n previousFactsDataVersion,\n factsDataVersion,\n syncedWithFacts: true,\n rebuild,\n },\n };\n }\n\n public async storageStats(): Promise<RdfEngineStorageStats> {\n await this.ensureReady();\n const facts = await this.factsStats();\n const rdf3x = await this.rdf3xStats();\n const factsBytes = facts.databaseBytes;\n const derivedBytes = rdf3x.databaseBytes;\n const totalBytes = factsBytes + derivedBytes;\n return {\n derivedIndexProfile: 'rdf3x',\n facts,\n rdf3x: {\n stats: rdf3x,\n syncedWithFacts: rdf3x.factsDataVersion === await this.readFactsDataVersion(),\n },\n factsBytes,\n derivedBytes,\n totalBytes,\n derivedToFactsRatio: factsBytes === 0 ? 0 : derivedBytes / factsBytes,\n totalToFactsRatio: factsBytes === 0 ? 0 : totalBytes / factsBytes,\n };\n }\n\n private async initializeSchema(): Promise<void> {\n const executor = this.requireExecutor();\n await this.ensureCompatibleSchemaVersion(executor);\n await executor.exec(`\n CREATE TABLE IF NOT EXISTS rdf_sources (\n id BIGSERIAL PRIMARY KEY,\n source TEXT NOT NULL UNIQUE,\n workspace TEXT NOT NULL,\n local_path TEXT,\n content_type TEXT,\n last_indexed_at TIMESTAMPTZ,\n source_version TEXT\n )\n `);\n await executor.exec(`\n CREATE TABLE IF NOT EXISTS rdf_quads (\n graph_id BIGINT NOT NULL,\n subject_id BIGINT NOT NULL,\n predicate_id BIGINT NOT NULL,\n object_id BIGINT NOT NULL,\n source_file_id BIGINT,\n source_line_no BIGINT,\n PRIMARY KEY (graph_id, subject_id, predicate_id, object_id)\n )\n `);\n await executor.exec('CREATE INDEX IF NOT EXISTS rdf_quads_spog ON rdf_quads (subject_id, predicate_id, object_id, graph_id)');\n await executor.exec('CREATE INDEX IF NOT EXISTS rdf_quads_sopg ON rdf_quads (subject_id, object_id, predicate_id, graph_id)');\n await executor.exec('CREATE INDEX IF NOT EXISTS rdf_quads_psog ON rdf_quads (predicate_id, subject_id, object_id, graph_id)');\n await executor.exec('CREATE INDEX IF NOT EXISTS rdf_quads_posg ON rdf_quads (predicate_id, object_id, subject_id, graph_id)');\n await executor.exec('CREATE INDEX IF NOT EXISTS rdf_quads_ospg ON rdf_quads (object_id, subject_id, predicate_id, graph_id)');\n await executor.exec('CREATE INDEX IF NOT EXISTS rdf_quads_opsg ON rdf_quads (object_id, predicate_id, subject_id, graph_id)');\n await executor.exec('CREATE INDEX IF NOT EXISTS rdf_quads_gspo ON rdf_quads (graph_id, subject_id, predicate_id, object_id)');\n await executor.exec('CREATE INDEX IF NOT EXISTS rdf_quads_gpos ON rdf_quads (graph_id, predicate_id, object_id, subject_id)');\n await executor.exec('CREATE INDEX IF NOT EXISTS rdf_quads_source ON rdf_quads (source_file_id, source_line_no)');\n await executor.exec(`\n CREATE TABLE IF NOT EXISTS rdf_index_metadata (\n key TEXT PRIMARY KEY,\n value TEXT NOT NULL\n )\n `);\n await executor.exec(`\n INSERT INTO rdf_index_metadata (key, value)\n VALUES ('schema_version', '${POSTGRES_RDF_SCHEMA_VERSION}')\n ON CONFLICT (key) DO NOTHING\n `);\n await executor.exec(`\n INSERT INTO rdf_index_metadata (key, value)\n VALUES ('data_version', '0')\n ON CONFLICT (key) DO NOTHING\n `);\n await this.initializeRdf3xSchema(executor);\n }\n\n private async ensureCompatibleSchemaVersion(executor: AsyncSqlExecutor): Promise<void> {\n await executor.exec(`\n CREATE TABLE IF NOT EXISTS rdf_index_metadata (\n key TEXT PRIMARY KEY,\n value TEXT NOT NULL\n )\n `);\n const row = await executor.query<{ value: string }>(\"SELECT value FROM rdf_index_metadata WHERE key = 'schema_version'\");\n const version = row[0]?.value;\n if (version === undefined || version === String(POSTGRES_RDF_SCHEMA_VERSION)) {\n return;\n }\n\n await executor.transaction(async (tx) => {\n await tx.exec('DROP TABLE IF EXISTS rdf_quads');\n await tx.exec('DROP TABLE IF EXISTS rdf_sources');\n await tx.exec('DROP TABLE IF EXISTS rdf_terms');\n await tx.exec('DELETE FROM rdf_index_metadata');\n await tx.exec(\n \"INSERT INTO rdf_index_metadata (key, value) VALUES ('schema_version', $1)\",\n [String(POSTGRES_RDF_SCHEMA_VERSION)],\n );\n await tx.exec(\"INSERT INTO rdf_index_metadata (key, value) VALUES ('data_version', '0')\");\n });\n }\n\n private async initializeRdf3xSchema(executor: AsyncSqlExecutor): Promise<void> {\n await executor.exec(`\n CREATE TABLE IF NOT EXISTS rdf3x_metadata (\n key TEXT PRIMARY KEY,\n value TEXT NOT NULL\n )\n `);\n const row = await executor.query<{ value: string }>(\"SELECT value FROM rdf3x_metadata WHERE key = 'schema_version'\");\n const version = row[0]?.value;\n if (version !== undefined && version !== String(POSTGRES_RDF3X_SCHEMA_VERSION)) {\n await this.dropRdf3xDerivedSchema(executor);\n }\n\n await executor.exec(`\n CREATE TABLE IF NOT EXISTS ${RDF3X_GRAPH_PROJECTION_TABLE} (\n graph_id BIGINT PRIMARY KEY,\n membership_count BIGINT NOT NULL\n )\n `);\n for (const projection of PAIR_PROJECTIONS) {\n await executor.exec(`\n CREATE TABLE IF NOT EXISTS ${projection.table} (\n ${projection.columns[0]} BIGINT NOT NULL,\n ${projection.columns[1]} BIGINT NOT NULL,\n triple_count BIGINT NOT NULL,\n membership_count BIGINT NOT NULL,\n min_${projection.remainder} BIGINT,\n max_${projection.remainder} BIGINT,\n PRIMARY KEY (${projection.columns.join(', ')})\n )\n `);\n }\n for (const projection of TERM_PROJECTIONS) {\n await executor.exec(`\n CREATE TABLE IF NOT EXISTS ${projection.table} (\n ${projection.column} BIGINT PRIMARY KEY,\n triple_count BIGINT NOT NULL,\n membership_count BIGINT NOT NULL\n )\n `);\n }\n await executor.exec(`\n INSERT INTO rdf3x_metadata (key, value)\n VALUES ('schema_version', $1)\n ON CONFLICT (key) DO UPDATE SET value = EXCLUDED.value\n `, [String(POSTGRES_RDF3X_SCHEMA_VERSION)]);\n await executor.exec(`\n INSERT INTO rdf3x_metadata (key, value)\n VALUES ('facts_data_version', '0')\n ON CONFLICT (key) DO NOTHING\n `);\n }\n\n private async dropRdf3xDerivedSchema(executor: AsyncSqlExecutor): Promise<void> {\n for (const table of [\n ...PAIR_PROJECTIONS.map((projection) => projection.table),\n ...TERM_PROJECTIONS.map((projection) => projection.table),\n RDF3X_GRAPH_PROJECTION_TABLE,\n ]) {\n await executor.exec(`DROP TABLE IF EXISTS ${table}`);\n }\n await executor.exec('DELETE FROM rdf3x_metadata');\n }\n\n private async clearRdf3xDerivedTables(executor: AsyncSqlExecutor): Promise<void> {\n for (const projection of PAIR_PROJECTIONS) {\n await executor.exec(`DELETE FROM ${projection.table}`);\n }\n for (const projection of TERM_PROJECTIONS) {\n await executor.exec(`DELETE FROM ${projection.table}`);\n }\n await executor.exec(`DELETE FROM ${RDF3X_GRAPH_PROJECTION_TABLE}`);\n }\n\n private async rebuildRdf3xDerivedIndexes(factsDataVersion: number): Promise<NonNullable<RdfDerivedIndexRefreshResult['rdf3x']>['rebuild']> {\n const start = Date.now();\n const executor = this.requireExecutor();\n const scannedQuads = await this.scalarCount(`SELECT COUNT(*) AS count FROM ${RDF_FACTS_TABLE}`);\n await executor.transaction(async (tx) => {\n await this.clearRdf3xDerivedTables(tx);\n for (const projection of PAIR_PROJECTIONS) {\n await tx.exec(`\n INSERT INTO ${projection.table} (\n ${projection.columns[0]},\n ${projection.columns[1]},\n triple_count,\n membership_count,\n min_${projection.remainder},\n max_${projection.remainder}\n )\n SELECT\n triple.${projection.columns[0]},\n triple.${projection.columns[1]},\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 ${projection.columns[0]},\n ${projection.columns[1]},\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 ${projection.columns[0]}, ${projection.columns[1]}\n ) triple\n LEFT JOIN (\n SELECT\n ${projection.columns[0]},\n ${projection.columns[1]},\n COUNT(*) AS membership_count\n FROM ${RDF_FACTS_TABLE}\n GROUP BY ${projection.columns[0]}, ${projection.columns[1]}\n ) member\n ON member.${projection.columns[0]} = triple.${projection.columns[0]}\n AND member.${projection.columns[1]} = triple.${projection.columns[1]}\n `);\n }\n for (const projection of TERM_PROJECTIONS) {\n await tx.exec(`\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 `);\n }\n await tx.exec(`\n INSERT INTO ${RDF3X_GRAPH_PROJECTION_TABLE} (\n graph_id,\n membership_count\n )\n SELECT graph_id, COUNT(*) AS membership_count\n FROM ${RDF_FACTS_TABLE}\n GROUP BY graph_id\n `);\n await tx.exec(`\n INSERT INTO rdf3x_metadata (key, value)\n VALUES ('facts_data_version', $1)\n ON CONFLICT (key) DO UPDATE SET value = EXCLUDED.value\n `, [String(factsDataVersion)]);\n });\n const stats = await this.rdf3xStats();\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 private async scanNative(pattern: QuintPattern, options?: QueryOptions): Promise<RdfQuadIndexScanResult> {\n const start = Date.now();\n const resolved = await this.resolvePattern(pattern);\n if (resolved.unresolved) {\n return {\n quads: [],\n metrics: this.indexMetrics('none', 0, 0, start, [`unresolved ${resolved.unresolved}`]),\n };\n }\n const compiled = this.compileScanSql(resolved, options);\n const matchedRows = await this.scalarCount(compiled.countSql, compiled.countParams);\n const rows = await this.requireExecutor().query<PgQuadIdRow>(compiled.sql, compiled.params);\n return {\n quads: await this.rowsToQuads(rows),\n metrics: this.indexMetrics(compiled.indexChoice, matchedRows, rows.length, start, [\n ...compiled.queryPlan,\n compiled.sql,\n ]),\n };\n }\n\n private async queryNative(query: RdfLocalQuery): Promise<PgLocalQueryNativeResult> {\n if (!this.canTryNativeQuery(query)) {\n return { unsupported: true };\n }\n const start = Date.now();\n const aggregates = queryAggregates(query);\n const requiredPatterns = query.patterns.length > 0 ? query.patterns : [{}];\n const compiledPatterns = await this.compileNativeJoinPatterns(requiredPatterns, query.filters ?? []);\n if (!compiledPatterns) {\n return { unsupported: true };\n }\n if (!this.allFiltersPushed(query.filters ?? [], compiledPatterns)) {\n return { unsupported: true };\n }\n\n if (aggregates.length > 0) {\n if (!query.patterns.length) {\n return { unsupported: true };\n }\n const aggregateResult = await this.queryNativeAggregate(query, compiledPatterns, aggregates, start);\n return aggregateResult ? { result: aggregateResult } : { unsupported: true };\n }\n\n const visibleVariables = uniqueStrings(requiredPatterns.flatMap((pattern) => variablesInPattern(pattern)));\n const project = query.select && query.select.length > 0 ? query.select : visibleVariables;\n if (project.some((variableName) => !visibleVariables.includes(variableName))) {\n return { unsupported: true };\n }\n if ((query.orderBy ?? []).some((entry) => !visibleVariables.includes(entry.variable))) {\n return { unsupported: true };\n }\n\n const compiled = await this.compileJoinSql(compiledPatterns, {\n project,\n distinct: query.distinct,\n orderBy: query.orderBy,\n limit: query.limit,\n offset: query.offset,\n countMatchedRows: query.limit !== undefined || query.offset !== undefined,\n });\n if (compiled.unresolved) {\n return {\n result: {\n bindings: [],\n metrics: this.localMetrics(start, 0, 0, 0, [compiled.indexChoice], [\n ...compiled.queryPlan,\n `unresolved ${compiled.unresolved}`,\n ], query.filters?.length ?? 0),\n },\n };\n }\n const rows = await this.requireExecutor().query<Record<string, number>>(compiled.sql, compiled.params);\n const matchedRows = compiled.countSql\n ? await this.scalarCount(compiled.countSql, compiled.countParams)\n : rows.length;\n const bindings = await this.joinRowsToBindings(rows, compiled.variableAliases);\n const plan = [\n ...storagePlanMarkers(compiled.queryPlan),\n `PostgresRdf3xJoin(${compiledPatterns.map((entry) => describePatternSource(entry)).join('|')})`,\n ...(query.distinct ? [`PostgresRdf3xJoinDistinct(${project.map((variableName) => `?${variableName}`).join(',')})`] : []),\n ...(query.limit !== undefined || query.offset !== undefined ? ['PostgresRdf3xJoinLimit'] : []),\n ];\n return {\n result: {\n bindings,\n metrics: this.localMetrics(start, matchedRows, matchedRows, bindings.length, [compiled.indexChoice], plan, query.filters?.length ?? 0),\n },\n };\n }\n\n private async queryNativeAggregate(\n query: RdfLocalQuery,\n patterns: PgCompiledJoinPattern[],\n aggregates: ReturnType<typeof queryAggregates>,\n start: number,\n ): Promise<RdfLocalQueryResult | undefined> {\n if (!this.canNativeAggregate(query, aggregates)) {\n return undefined;\n }\n const visibleVariables = uniqueStrings(query.patterns.flatMap((pattern) => variablesInPattern(pattern)));\n const compiled = await this.compileJoinSql(patterns, {\n project: visibleVariables,\n countMatchedRows: false,\n });\n if (compiled.unresolved) {\n return {\n bindings: [],\n count: 0,\n metrics: this.localMetrics(start, 0, 0, 0, [compiled.indexChoice], [\n ...compiled.queryPlan,\n `unresolved ${compiled.unresolved}`,\n ], query.filters?.length ?? 0),\n };\n }\n\n const aggregateAliases = new Map<string, string>();\n const aggregateTypes = new Map<string, 'integer' | 'decimal'>();\n const aggregateColumns = aggregates.map((aggregate, index) => this.compileAggregateColumn(\n aggregate,\n index,\n compiled.variableAliases,\n aggregateAliases,\n aggregateTypes,\n ));\n const groupColumns = (query.groupBy ?? []).map((variableName) => {\n const alias = compiled.variableAliases.get(variableName);\n if (!alias) {\n throw new Error(`Postgres RDF-3X group aggregate cannot read unbound variable: ${variableName}`);\n }\n return { variableName, alias, column: `source.${alias}` };\n });\n const projection = [\n ...groupColumns.map((group) => `${group.column} AS ${group.alias}`),\n ...aggregateColumns.map((aggregate) => aggregate.sql),\n ].filter(Boolean).join(', ');\n let sql = `SELECT ${projection} FROM (${compiled.sql}) source`;\n if (groupColumns.length > 0) {\n sql += ` GROUP BY ${groupColumns.map((group) => group.column).join(', ')}`;\n }\n const builder = new PgSqlBuilder(compiled.params);\n const havingClause = this.buildAggregateHavingClause(query.having ?? [], aggregateColumns, builder);\n sql += havingClause.sql;\n sql += this.buildAggregateOrderClause(query.orderBy ?? [], compiled.variableAliases, aggregateColumns);\n const pagination = this.buildPagination(query, builder);\n sql += pagination.sql;\n const params = builder.snapshot();\n const rows = await this.requireExecutor().query<Record<string, number>>(sql, params);\n const matchedRows = groupColumns.length > 0\n ? await this.scalarCount(\n `SELECT COUNT(*) AS count FROM (\n SELECT ${groupColumns.map((group) => group.column).join(', ')}\n FROM (${compiled.sql}) source\n GROUP BY ${groupColumns.map((group) => group.column).join(', ')}\n ${havingClause.sql}\n ) grouped_count`,\n builder.snapshot().slice(0, builder.snapshot().length - pagination.paramCount),\n )\n : rows.length;\n const bindings = await this.joinRowsToBindings(rows, new Map(groupColumns.map((group) => [group.variableName, group.alias])), aggregateAliases, aggregateTypes);\n const firstCount = !groupColumns.length && aggregates[0] ? Number(bindings[0]?.[aggregates[0].as]?.value ?? 0) : undefined;\n const plan = [\n ...storagePlanMarkers(compiled.queryPlan),\n groupColumns.length > 0 ? 'PostgresRdf3xGroupCount' : 'PostgresRdf3xJoinCount',\n aggregatePlan(aggregates, groupColumns.length > 0),\n ...(havingClause.sql ? [`PostgresRdf3xAggregateHaving(${(query.having ?? []).map(describeFilter).join(',')})`] : []),\n ...((query.orderBy ?? []).length > 0 ? [`PostgresRdf3xAggregateOrder(${describeQueryOrder(query.orderBy ?? [])})`] : []),\n ...(pagination.sql ? ['PostgresRdf3xAggregateLimit'] : []),\n ];\n return {\n bindings,\n ...(firstCount !== undefined ? { count: firstCount } : {}),\n metrics: this.localMetrics(start, matchedRows, matchedRows, bindings.length, [compiled.indexChoice], plan, query.filters?.length ?? 0),\n };\n }\n\n private canNativeAggregate(\n query: RdfLocalQuery,\n aggregates: ReturnType<typeof queryAggregates>,\n ): boolean {\n if (aggregates.length === 0 || aggregates.some((aggregate) => aggregate.type !== 'count')) {\n return false;\n }\n const visibleVariables = uniqueStrings(query.patterns.flatMap((pattern) => variablesInPattern(pattern)));\n const aggregateVariables = new Set(aggregates.map((aggregate) => aggregate.as));\n if ((query.groupBy ?? []).some((variableName) => !visibleVariables.includes(variableName))) {\n return false;\n }\n if (aggregates.some((aggregate) => (\n aggregate.variable !== undefined && !visibleVariables.includes(aggregate.variable)\n ))) {\n return false;\n }\n if (aggregates.some((aggregate) => (\n aggregate.distinctVariables !== undefined\n && aggregate.distinctVariables.some((variableName) => !visibleVariables.includes(variableName))\n ))) {\n return false;\n }\n if ((query.having ?? []).some((filter) => !this.canNativeAggregateHaving(filter, aggregateVariables))) {\n return false;\n }\n if ((query.orderBy ?? []).some((entry) => (\n !visibleVariables.includes(entry.variable) && !aggregateVariables.has(entry.variable)\n ))) {\n return false;\n }\n if ((query.groupBy ?? []).length === 0) {\n return !query.distinct\n && (query.having ?? []).length === 0\n && (query.orderBy ?? []).length === 0\n && query.limit === undefined\n && query.offset === undefined\n && (query.select ?? []).every((variableName) => aggregateVariables.has(variableName));\n }\n return !query.distinct && (query.orderBy ?? []).every((entry) => (\n (query.groupBy ?? []).includes(entry.variable) || aggregateVariables.has(entry.variable)\n )) && (query.select ?? []).every((variableName) => (\n (query.groupBy ?? []).includes(variableName) || aggregateVariables.has(variableName)\n ));\n }\n\n private canNativeAggregateHaving(filter: RdfQueryFilter, aggregateVariables: Set<string>): boolean {\n return aggregateVariables.has(filter.variable)\n && !filter.operand\n && !filter.variable2\n && filter.value !== undefined\n && isNativeAggregateHavingOperator(filter.operator)\n && typeof filter.value !== 'boolean'\n && this.aggregateFilterValue(filter.value) !== undefined;\n }\n\n private compileAggregateColumn(\n aggregate: NonNullable<RdfLocalQuery['aggregates']>[number],\n index: number,\n variableAliases: Map<string, string>,\n aggregateAliases: Map<string, string>,\n aggregateTypes: Map<string, 'integer' | 'decimal'>,\n ): PgAggregateSqlExpression {\n const alias = `a${index}`;\n aggregateAliases.set(aggregate.as, alias);\n aggregateTypes.set(aggregate.as, 'integer');\n if (!aggregate.variable) {\n const expression = aggregate.distinct\n ? `COUNT(DISTINCT ${joinSolutionMappingKeyExpression(variableAliases, aggregate.distinctVariables)})`\n : 'COUNT(*)';\n return {\n variableName: aggregate.as,\n alias,\n type: 'integer',\n expression,\n sql: `${expression} AS ${alias}`,\n };\n }\n const variableAlias = variableAliases.get(aggregate.variable);\n if (!variableAlias) {\n throw new Error(`Postgres RDF-3X aggregate cannot read unbound variable: ${aggregate.variable}`);\n }\n const expression = `COUNT(${aggregate.distinct ? 'DISTINCT ' : ''}source.${variableAlias})`;\n return {\n variableName: aggregate.as,\n alias,\n type: 'integer',\n expression,\n sql: `${expression} AS ${alias}`,\n };\n }\n\n private buildAggregateHavingClause(\n filters: RdfQueryFilter[],\n aggregates: PgAggregateSqlExpression[],\n builder: PgSqlBuilder,\n ): { sql: string } {\n if (filters.length === 0) {\n return { sql: '' };\n }\n return {\n sql: ` HAVING ${filters.map((filter) => {\n const aggregate = aggregates.find((entry) => entry.variableName === filter.variable);\n if (!aggregate) {\n throw new Error(`Postgres RDF-3X aggregate cannot HAVING on unknown aggregate: ${filter.variable}`);\n }\n return `${aggregate.expression} ${aggregateSqlOperator(filter.operator)} ${builder.add(this.aggregateFilterValue(filter.value))}`;\n }).join(' AND ')}`,\n };\n }\n\n private buildAggregateOrderClause(\n orderBy: NonNullable<RdfLocalQuery['orderBy']>,\n variableAliases: Map<string, string>,\n aggregates: PgAggregateSqlExpression[],\n ): string {\n if (orderBy.length === 0) {\n return '';\n }\n const order = orderBy.map((entry) => {\n const aggregate = aggregates.find((candidate) => candidate.variableName === entry.variable);\n if (aggregate) {\n return `${aggregate.alias} ${entry.direction === 'desc' ? 'DESC' : 'ASC'}`;\n }\n const alias = variableAliases.get(entry.variable);\n if (!alias) {\n throw new Error(`Postgres RDF-3X aggregate cannot order by unbound variable: ${entry.variable}`);\n }\n return `source.${alias} ${entry.direction === 'desc' ? 'DESC' : 'ASC'}`;\n });\n return ` ORDER BY ${order.join(', ')}`;\n }\n\n private aggregateFilterValue(value: RdfQueryFilter['value']): number | undefined {\n if (typeof value === 'number') return Number.isFinite(value) ? value : undefined;\n if (typeof value === 'string') {\n const numeric = Number(value);\n return Number.isFinite(numeric) ? numeric : undefined;\n }\n if (value && typeof value === 'object' && 'termType' in value) {\n const numeric = rdfNumericValue(value.value);\n return Number.isFinite(numeric) ? numeric : undefined;\n }\n return undefined;\n }\n\n private canTryNativeQuery(query: RdfLocalQuery): boolean {\n return (query.values?.length ?? 0) === 0\n && (query.textSearch?.length ?? 0) === 0\n && (query.vectorSearch?.length ?? 0) === 0\n && (query.unions?.length ?? 0) === 0\n && (query.minus?.length ?? 0) === 0\n && (query.exists?.length ?? 0) === 0\n && (query.optional?.length ?? 0) === 0\n && (query.binds?.length ?? 0) === 0;\n }\n\n private async compileNativeJoinPatterns(\n patterns: RdfQueryPattern[],\n filters: RdfQueryFilter[],\n ): Promise<Array<PgCompiledJoinPattern & { pushedDownFilterIndexes: number[] }> | undefined> {\n const result: Array<PgCompiledJoinPattern & { pushedDownFilterIndexes: number[] }> = [];\n for (const pattern of patterns) {\n const compiled: QuintPattern = {};\n const variables: Partial<Record<PgPatternKey, string>> = {};\n const slotsByVariable = new Map<string, PgPatternKey[]>();\n const pushed = new Set<number>();\n for (const key of PATTERN_KEYS) {\n const value = pattern[key];\n if (!value) continue;\n if (isVariable(value)) {\n variables[key] = value.variable;\n slotsByVariable.set(value.variable, [...(slotsByVariable.get(value.variable) ?? []), key]);\n const pushdown = this.compilePushdownFilterWithIndexes(value.variable, filters);\n if (pushdown) {\n compiled[key] = pushdown.pattern;\n pushdown.filterIndexes.forEach((index) => pushed.add(index));\n }\n } else {\n compiled[key] = value;\n }\n }\n result.push({\n pattern: compiled,\n variables,\n equalities: patternEqualities(slotsByVariable),\n pushedDownFilterIndexes: [...pushed],\n });\n }\n return result;\n }\n\n private allFiltersPushed(\n filters: RdfQueryFilter[],\n patterns: Array<PgCompiledJoinPattern & { pushedDownFilterIndexes: number[] }>,\n ): boolean {\n const pushed = new Set(patterns.flatMap((pattern) => pattern.pushedDownFilterIndexes));\n return filters.every((_filter, index) => pushed.has(index));\n }\n\n private compilePushdownFilterWithIndexes(\n variableName: string,\n filters: RdfQueryFilter[],\n ): { pattern: QuintPattern[keyof QuintPattern]; filterIndexes: number[] } | null {\n const operators: Record<string, unknown> = {};\n const filterIndexes: number[] = [];\n for (const [index, filter] of filters.entries()) {\n if (filter.variable !== variableName || filter.variable2 || !this.isPushdownFilter(filter)) {\n continue;\n }\n switch (filter.operator) {\n case '$eq':\n case '$ne':\n if (filter.value === undefined || !isTerm(filter.value as any)) return null;\n operators[filter.operator] = filter.value;\n filterIndexes.push(index);\n break;\n case '$gt':\n case '$gte':\n case '$lt':\n case '$lte':\n if (filter.value === undefined) return null;\n operators[filter.operator] = filter.value;\n filterIndexes.push(index);\n break;\n case '$in':\n case '$notIn':\n if (!filter.values?.length || filter.values.some((value) => !isTerm(value as any))) return null;\n operators[filter.operator] = filter.values;\n filterIndexes.push(index);\n break;\n case '$sameTerm':\n if (filter.value === undefined || !isTerm(filter.value as any)) return null;\n operators.$eq = filter.value;\n filterIndexes.push(index);\n break;\n case '$termType':\n if (typeof filter.value !== 'string' || !['iri', 'blank', 'literal', 'numeric'].includes(filter.value)) return null;\n operators.$termType = filter.value;\n filterIndexes.push(index);\n break;\n case '$lang':\n if (typeof filter.value !== 'string') return null;\n operators.$language = filter.value;\n filterIndexes.push(index);\n break;\n case '$notLang':\n if (typeof filter.value !== 'string') return null;\n operators.$notLanguage = filter.value;\n filterIndexes.push(index);\n break;\n case '$langMatches':\n if (typeof filter.value !== 'string') return null;\n operators.$langMatches = filter.value;\n filterIndexes.push(index);\n break;\n case '$datatype':\n case '$notDatatype':\n if (filter.value === undefined || !isTerm(filter.value as any) || (filter.value as Term).termType !== 'NamedNode') return null;\n operators[filter.operator] = filter.value;\n filterIndexes.push(index);\n break;\n case '$startsWith':\n if (typeof filter.value !== 'string') return null;\n operators.$startsWith = filter.value;\n filterIndexes.push(index);\n break;\n case '$contains':\n case '$endsWith':\n if (typeof filter.value !== 'string') return null;\n operators[filter.operator] = filter.value;\n filterIndexes.push(index);\n break;\n default:\n return null;\n }\n }\n return Object.keys(operators).length > 0 ? { pattern: operators as TermMatch, filterIndexes } : null;\n }\n\n private isPushdownFilter(filter: RdfQueryFilter): boolean {\n if (filter.operand === 'stringLength' || filter.operand === 'lowerStringValue' || filter.operand === 'upperStringValue') {\n return false;\n }\n if (filter.operand === 'stringValue') {\n return filter.operator === '$startsWith'\n || filter.operator === '$contains'\n || filter.operator === '$endsWith';\n }\n return filter.operator === '$eq'\n || filter.operator === '$ne'\n || filter.operator === '$gt'\n || filter.operator === '$gte'\n || filter.operator === '$lt'\n || filter.operator === '$lte'\n || filter.operator === '$in'\n || filter.operator === '$notIn'\n || filter.operator === '$startsWith'\n || filter.operator === '$contains'\n || filter.operator === '$endsWith'\n || filter.operator === '$sameTerm'\n || filter.operator === '$termType'\n || filter.operator === '$lang'\n || filter.operator === '$notLang'\n || filter.operator === '$langMatches'\n || filter.operator === '$datatype'\n || filter.operator === '$notDatatype';\n }\n\n private async resolvePattern(pattern: QuintPattern): Promise<PgResolvedPattern> {\n const ids: Partial<Record<PgPatternKey, number>> = {};\n const idSets: Partial<Record<PgPatternKey, number[]>> = {};\n const excludedIdSets: Partial<Record<PgPatternKey, number[]>> = {};\n const termFilters: Partial<Record<PgPatternKey, PgResolvedTermFilter>> = {};\n let graphPrefix: string | undefined;\n let objectRange: PgObjectRange | undefined;\n\n for (const key of PATTERN_KEYS) {\n const value = pattern[key];\n if (!value) {\n continue;\n }\n if (isTerm(value as any)) {\n const id = await this.requireDictionary().find(value as Term);\n if (id === undefined) {\n return { ids, idSets, excludedIdSets, termFilters, unresolved: key };\n }\n ids[key] = id;\n continue;\n }\n const operators = value as TermOperators;\n if (operators.$eq !== undefined) {\n const id = await this.termOperatorValueId(operators.$eq);\n if (id === undefined) return { ids, idSets, excludedIdSets, termFilters, unresolved: key };\n ids[key] = id;\n }\n if (operators.$in !== undefined) {\n const set = uniqueNumbers((await Promise.all(operators.$in.map((entry) => this.termOperatorValueId(entry))))\n .filter((id): id is number => id !== undefined));\n if (set.length === 0) return { ids, idSets, excludedIdSets, termFilters, unresolved: key };\n idSets[key] = set;\n }\n if (operators.$notIn !== undefined) {\n const set = uniqueNumbers((await Promise.all(operators.$notIn.map((entry) => this.termOperatorValueId(entry))))\n .filter((id): id is number => id !== undefined));\n if (set.length > 0) excludedIdSets[key] = set;\n }\n if (operators.$ne !== undefined) {\n const id = await this.termOperatorValueId(operators.$ne);\n if (id !== undefined) excludedIdSets[key] = uniqueNumbers([...(excludedIdSets[key] ?? []), id]);\n }\n if (key === 'graph' && operators.$startsWith !== undefined) {\n graphPrefix = operators.$startsWith;\n }\n const filter = await this.resolveTermFilter(key, operators);\n if (filter) termFilters[key] = filter;\n if (key === 'object') {\n objectRange = this.resolveObjectRange(operators);\n }\n }\n return { ids, idSets, excludedIdSets, termFilters, ...(graphPrefix !== undefined ? { graphPrefix } : {}), ...(objectRange ? { objectRange } : {}) };\n }\n\n private async resolveTermFilter(key: PgPatternKey, operators: TermOperators): Promise<PgResolvedTermFilter | undefined> {\n const filter: PgResolvedTermFilter = {};\n if (operators.$termType !== undefined) filter.termType = operators.$termType;\n if (operators.$language !== undefined) filter.language = operators.$language;\n if (operators.$notLanguage !== undefined) filter.notLanguage = operators.$notLanguage;\n if (operators.$langMatches !== undefined) filter.langMatches = operators.$langMatches;\n if (operators.$datatype !== undefined) filter.datatype = await this.resolveDatatypeFilter(operators.$datatype);\n if (operators.$notDatatype !== undefined) filter.notDatatype = await this.resolveDatatypeFilter(operators.$notDatatype);\n if (key === 'object') {\n const textSearches: PgTextSearch[] = [];\n if (operators.$contains !== undefined) textSearches.push({ operator: '$contains', value: operators.$contains });\n if (operators.$endsWith !== undefined) textSearches.push({ operator: '$endsWith', value: operators.$endsWith });\n if (textSearches.length > 0) filter.textSearches = textSearches;\n }\n return Object.keys(filter).length > 0 ? filter : undefined;\n }\n\n private async resolveDatatypeFilter(datatype: Term): Promise<PgResolvedDatatypeFilter> {\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 = await this.requireDictionary().find(datatype);\n return id === undefined ? { kind: 'unknown' } : { kind: 'id', id };\n }\n\n private resolveObjectRange(match: TermOperators): PgObjectRange | undefined {\n const numericRange: PgObjectRange = { mode: 'numeric' };\n const lexicalRange: PgObjectRange = { 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) continue;\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') return Number.isFinite(value) ? value : undefined;\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)) return undefined;\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') return Number.isFinite(value) ? String(value) : undefined;\n if (typeof value === 'string') return value;\n return value.value;\n }\n\n private async termOperatorValueId(value: unknown): Promise<number | undefined> {\n if (!value || typeof value !== 'object' || !('termType' in value)) {\n throw new Error('PostgresRdfEngine exact operators only support RDF terms');\n }\n return this.requireDictionary().find(value as Term);\n }\n\n private compileScanSql(resolved: PgResolvedPattern, options?: QueryOptions): PgCompiledScan {\n const builder = new PgSqlBuilder();\n const conditions: string[] = [];\n const joins: string[] = [];\n const queryPlan: string[] = [];\n const useMembershipSource = shouldUseMembershipSource(resolved);\n const permutation = this.choosePermutation(resolved);\n const alias = 'q';\n this.appendResolvedPatternConditions(resolved, alias, conditions, joins, builder, queryPlan);\n const order = this.buildOrderClause(options, alias);\n const pagination = this.buildPagination(options, builder);\n const from = `${RDF_FACTS_TABLE} ${alias}`;\n const whereClause = conditions.length > 0 ? ` WHERE ${conditions.join(' AND ')}` : '';\n return {\n sql: `\n SELECT ${alias}.graph_id, ${alias}.subject_id, ${alias}.predicate_id, ${alias}.object_id\n FROM ${from}${joins.join('')}\n ${whereClause}\n ${order || ` ORDER BY ${permutation.columns.map((column) => `${alias}.${column}`).join(', ')}`}\n ${pagination.sql}\n `,\n params: builder.snapshot(),\n countSql: `SELECT COUNT(*) AS count FROM ${from}${joins.join('')}${whereClause}`,\n countParams: builder.snapshot().slice(0, builder.snapshot().length - pagination.paramCount),\n indexChoice: useMembershipSource ? 'source-membership' : permutation.name,\n queryPlan: [\n ...(useMembershipSource ? ['Rdf3xMembershipScan'] : [`Rdf3xPermutationScan(${permutation.name})`]),\n ...queryPlan,\n ...(order ? [`Rdf3xJoinOrder(${describeScanOrder(options)})`] : []),\n ...(pagination.sql ? ['Pagination'] : []),\n ],\n };\n }\n\n private async compileJoinSql(\n patterns: PgCompiledJoinPattern[],\n options?: {\n project?: string[];\n distinct?: boolean;\n orderBy?: RdfLocalQuery['orderBy'];\n limit?: number;\n offset?: number;\n countMatchedRows?: boolean;\n },\n ): Promise<PgCompiledJoin> {\n const resolvedSources: PgJoinSource[] = [];\n for (const [inputIndex, entry] of patterns.entries()) {\n const resolved = await this.resolvePattern(entry.pattern);\n const permutation = this.choosePermutation(resolved);\n const estimateRows = resolved.unresolved ? 0 : await this.estimateResolvedRows(resolved);\n resolvedSources.push({\n inputIndex,\n alias: `q${inputIndex}`,\n entry,\n resolved,\n permutation,\n estimateRows,\n });\n }\n const orderedSources = this.orderJoinSources(resolvedSources);\n const builder = new PgSqlBuilder();\n const conditions: string[] = [];\n const joins: string[] = [];\n const queryPlan: string[] = [\n `Rdf3xJoinBGP(${patterns.length})`,\n `Rdf3xJoinOrder(${orderedSources.map((source) => `?${source.inputIndex}:${source.estimateRows}`).join('>')})`,\n ];\n const variableColumns = new Map<string, string>();\n const variableAliases = new Map<string, string>();\n const indexChoices: string[] = [];\n\n for (const [position, source] of orderedSources.entries()) {\n if (source.resolved.unresolved) {\n return {\n sql: '',\n params: [],\n countParams: [],\n indexChoice: 'none',\n queryPlan,\n variableAliases,\n unresolved: source.resolved.unresolved,\n };\n }\n const alias = source.alias;\n if (position === 0) {\n joins.push(`${RDF_FACTS_TABLE} ${alias}`);\n } else {\n const mergeConditions = this.mergeJoinConditions(source, variableColumns);\n joins.push(` JOIN ${RDF_FACTS_TABLE} ${alias} ON ${mergeConditions.length > 0 ? mergeConditions.join(' AND ') : '1 = 1'}`);\n if (mergeConditions.length > 0) {\n queryPlan.push(`Rdf3xMergeJoin(${mergeConditions.length})`);\n }\n }\n this.appendResolvedPatternConditions(source.resolved, alias, conditions, joins, builder, queryPlan);\n this.appendPatternEqualityConditions(source.entry.equalities, alias, conditions, queryPlan);\n indexChoices.push(shouldUseMembershipSource(source.resolved) ? 'source-membership' : source.permutation.name);\n\n for (const key of PATTERN_KEYS) {\n const variableName = source.entry.variables[key];\n if (!variableName) continue;\n const column = `${alias}.${TERM_COLUMN[key]}`;\n if (!variableColumns.has(variableName)) {\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) throw new Error(`Postgres RDF-3X join cannot project unbound variable: ${variableName}`);\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 whereClause = conditions.length > 0 ? ` WHERE ${conditions.join(' AND ')}` : '';\n const orderClause = this.buildJoinOrderClause(options?.orderBy, variableColumns);\n const pagination = this.buildPagination(options, builder);\n const from = joins.join('');\n const sql = `\n SELECT ${projection}\n FROM ${from}${orderClause.joins}\n ${whereClause}\n ${orderClause.orderBy}\n ${pagination.sql}\n `;\n return {\n sql,\n params: builder.snapshot(),\n countSql: pagination.sql && options?.countMatchedRows !== false\n ? `SELECT COUNT(*) AS count FROM ${from}${orderClause.joins}${whereClause}`\n : undefined,\n countParams: builder.snapshot().slice(0, builder.snapshot().length - pagination.paramCount),\n indexChoice: `Rdf3xJoinBGP(${indexChoices.join('>')})`,\n queryPlan: [\n ...queryPlan,\n ...(orderClause.orderBy ? [`Rdf3xJoinOrderBy(${(options?.orderBy ?? []).map((entry) => `${entry.direction ?? 'asc'}:${entry.variable}`).join(',')})`] : []),\n ...(options?.distinct ? [`Rdf3xJoinDistinct(${projectVariables.map((variableName) => `?${variableName}`).join(',')})`] : []),\n ...(pagination.sql ? ['Rdf3xJoinLimit'] : []),\n sql,\n ],\n variableAliases,\n };\n }\n\n private appendResolvedPatternConditions(\n resolved: PgResolvedPattern,\n alias: string,\n conditions: string[],\n joins: string[],\n builder: PgSqlBuilder,\n queryPlan: string[],\n ): void {\n for (const key of PATTERN_KEYS) {\n const column = `${alias}.${TERM_COLUMN[key]}`;\n const id = resolved.ids[key];\n if (id !== undefined) {\n conditions.push(`${column} = ${builder.add(id)}`);\n if (key === 'graph') queryPlan.push('GraphMembershipFilter');\n }\n const ids = resolved.idSets[key];\n if (ids?.length) {\n conditions.push(`${column} = ANY(${builder.add(ids)}::bigint[])`);\n queryPlan.push(`TermIn(${key})`);\n }\n const excluded = resolved.excludedIdSets[key];\n if (excluded?.length) {\n conditions.push(`NOT (${column} = ANY(${builder.add(excluded)}::bigint[]))`);\n queryPlan.push(`TermNotIn(${key})`);\n }\n const filter = resolved.termFilters[key];\n if (filter) {\n const filterAlias = `${alias}_${key}_term_filter`;\n joins.push(` JOIN rdf_terms ${filterAlias} ON ${filterAlias}.id = ${column}`);\n this.appendTermFilterCondition(key, filterAlias, filter, conditions, builder, queryPlan);\n }\n }\n if (resolved.graphPrefix !== undefined) {\n const graphAlias = `${alias}_graph_prefix`;\n joins.push(` JOIN rdf_terms ${graphAlias} ON ${graphAlias}.id = ${alias}.graph_id`);\n conditions.push(`${graphAlias}.kind = ${builder.add('iri')}`);\n conditions.push(`${graphAlias}.value_head >= ${builder.add(rdfTermValueHead(resolved.graphPrefix))}`);\n conditions.push(`${graphAlias}.value_head < ${builder.add(`${rdfTermValueHead(resolved.graphPrefix)}\\uffff`)}`);\n conditions.push(`${graphAlias}.value >= ${builder.add(resolved.graphPrefix)}`);\n conditions.push(`${graphAlias}.value < ${builder.add(`${resolved.graphPrefix}\\uffff`)}`);\n queryPlan.push('GraphPrefixMembershipFilter');\n }\n if (resolved.objectRange) {\n const rangeAlias = `${alias}_object_range`;\n joins.push(` JOIN rdf_terms ${rangeAlias} ON ${rangeAlias}.id = ${alias}.object_id`);\n this.appendObjectRangeCondition(rangeAlias, resolved.objectRange, conditions, builder, queryPlan);\n }\n }\n\n private appendPatternEqualityConditions(\n equalities: PgPatternEquality[],\n alias: string,\n conditions: string[],\n queryPlan: string[],\n ): void {\n for (const equality of equalities) {\n conditions.push(`${alias}.${TERM_COLUMN[equality.left]} = ${alias}.${TERM_COLUMN[equality.right]}`);\n queryPlan.push(`Rdf3xPatternEquality(?${equality.variable}:${equality.left}=${equality.right})`);\n }\n }\n\n private appendTermFilterCondition(\n key: PgPatternKey,\n alias: string,\n filter: PgResolvedTermFilter,\n conditions: string[],\n builder: PgSqlBuilder,\n queryPlan: string[],\n ): void {\n if (filter.termType !== undefined) {\n this.appendTermTypeCondition(key, alias, filter.termType, conditions, builder);\n queryPlan.push(`TermType(${key}:${filter.termType})`);\n }\n if (filter.language !== undefined) {\n this.appendLanguageCondition(key, alias, '$language', filter.language, conditions, builder);\n queryPlan.push(`Language(${key}$language)`);\n }\n if (filter.notLanguage !== undefined) {\n this.appendLanguageCondition(key, alias, '$notLanguage', filter.notLanguage, conditions, builder);\n queryPlan.push(`Language(${key}$notLanguage)`);\n }\n if (filter.langMatches !== undefined) {\n this.appendLanguageCondition(key, alias, '$langMatches', filter.langMatches, conditions, builder);\n queryPlan.push(`Language(${key}$langMatches)`);\n }\n if (filter.datatype !== undefined) {\n this.appendDatatypeCondition(key, alias, '$datatype', filter.datatype, conditions, builder);\n queryPlan.push(`Datatype(${key}$datatype)`);\n }\n if (filter.notDatatype !== undefined) {\n this.appendDatatypeCondition(key, alias, '$notDatatype', filter.notDatatype, conditions, builder);\n queryPlan.push(`Datatype(${key}$notDatatype)`);\n }\n for (const search of filter.textSearches ?? []) {\n this.appendTextSearchCondition(key, alias, search, conditions, builder, queryPlan);\n }\n }\n\n private appendTermTypeCondition(\n key: PgPatternKey,\n alias: string,\n termType: Rdf3xTermTypePatternValue,\n conditions: string[],\n builder: PgSqlBuilder,\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 = ${builder.add(termType)}`);\n }\n\n private appendLanguageCondition(\n key: PgPatternKey,\n alias: string,\n operator: '$language' | '$notLanguage' | '$langMatches',\n language: string,\n conditions: string[],\n builder: PgSqlBuilder,\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, '') = ${builder.add(language)}`);\n return;\n }\n if (operator === '$notLanguage') {\n conditions.push(`${alias}.kind = 'literal' AND COALESCE(${alias}.lang, '') != ${builder.add(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(${builder.add(language)}) OR lower(${alias}.lang) LIKE lower(${builder.add(`${escapeLikePattern(language)}-%`)}) ESCAPE '\\\\')`);\n }\n\n private appendDatatypeCondition(\n key: PgPatternKey,\n alias: string,\n operator: '$datatype' | '$notDatatype',\n datatype: PgResolvedDatatypeFilter,\n conditions: string[],\n builder: PgSqlBuilder,\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 = ${builder.add(datatype.id)}`\n : `${alias}.kind = 'literal' AND (${alias}.datatype_id IS NULL OR ${alias}.datatype_id != ${builder.add(datatype.id)})`);\n }\n\n private appendTextSearchCondition(\n key: PgPatternKey,\n alias: string,\n search: PgTextSearch,\n conditions: string[],\n builder: PgSqlBuilder,\n queryPlan: string[],\n ): void {\n const kinds = termKindsForPatternKey(key);\n const kindArray = builder.add(kinds);\n const normalized = search.value.toLowerCase();\n switch (search.operator) {\n case '$contains':\n conditions.push(`${alias}.kind = ANY(${kindArray}::text[])\n AND ${alias}.normalized_text LIKE ${builder.add(`%${escapeLikePattern(normalized)}%`)} ESCAPE '\\\\'\n AND strpos(${alias}.value, ${builder.add(search.value)}) > 0`);\n queryPlan.push(`TextSearch(${key}$contains)`);\n return;\n case '$endsWith':\n conditions.push(`${alias}.kind = ANY(${kindArray}::text[])\n AND ${alias}.normalized_text LIKE ${builder.add(`%${escapeLikePattern(normalized)}`)} ESCAPE '\\\\'\n AND right(${alias}.value, length(${builder.add(search.value)})) = ${builder.add(search.value)}`);\n queryPlan.push(`TextSearch(${key}$endsWith)`);\n return;\n default: {\n const exhaustive: never = search.operator;\n throw new Error(`Unsupported PostgreSQL RDF-3X text search operator: ${exhaustive}`);\n }\n }\n }\n\n private appendObjectRangeCondition(\n alias: string,\n range: PgObjectRange,\n conditions: string[],\n builder: PgSqlBuilder,\n queryPlan: string[],\n ): void {\n if (range.mode === 'numeric') {\n conditions.push(`${alias}.kind = 'literal'`);\n conditions.push(`${alias}.numeric_value IS NOT NULL`);\n if (range.min !== undefined) conditions.push(`${alias}.numeric_value ${range.minInclusive ? '>=' : '>'} ${builder.add(range.min)}`);\n if (range.max !== undefined) conditions.push(`${alias}.numeric_value ${range.maxInclusive ? '<=' : '<'} ${builder.add(range.max)}`);\n queryPlan.push(`NumericRange(object${rangeSuffix(range)})`);\n return;\n }\n conditions.push(`${alias}.kind = ANY(${builder.add(OBJECT_RANGE_KINDS)}::text[])`);\n if (range.min !== undefined) conditions.push(`${alias}.value ${range.minInclusive ? '>=' : '>'} ${builder.add(range.min)}`);\n if (range.max !== undefined) conditions.push(`${alias}.value ${range.maxInclusive ? '<=' : '<'} ${builder.add(range.max)}`);\n queryPlan.push(`LexicalRange(object${rangeSuffix(range)})`);\n }\n\n private mergeJoinConditions(source: PgJoinSource, variableColumns: Map<string, string>): string[] {\n const conditions: string[] = [];\n for (const key of PATTERN_KEYS) {\n const variableName = source.entry.variables[key];\n if (!variableName) continue;\n const existing = variableColumns.get(variableName);\n if (existing) {\n conditions.push(`${existing} = ${source.alias}.${TERM_COLUMN[key]}`);\n }\n }\n return conditions;\n }\n\n private choosePermutation(resolved: PgResolvedPattern): PgPermutation {\n const has = (key: PgTermKey): boolean => resolved.ids[key] !== undefined || Boolean(resolved.idSets[key]?.length);\n const hasObjectConstraint = has('object') || Boolean(resolved.objectRange) || Boolean(resolved.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: PgPermutationName): PgPermutation {\n const permutation = PERMUTATIONS.find((candidate) => candidate.name === name);\n if (!permutation) throw new Error(`Unknown PostgreSQL RDF-3X permutation: ${name}`);\n return permutation;\n }\n\n private async estimateResolvedRows(resolved: PgResolvedPattern): Promise<number> {\n const compiled = this.compileScanSql(resolved, { limit: 0 });\n return this.scalarCount(compiled.countSql, compiled.countParams);\n }\n\n private orderJoinSources(sources: PgJoinSource[]): PgJoinSource[] {\n const remaining = [...sources];\n const selected: PgJoinSource[] = [];\n const selectedVariables = new Set<string>();\n while (remaining.length > 0) {\n const hasSelectedVariables = selectedVariables.size > 0;\n remaining.sort((left, right) => {\n const leftConnected = !hasSelectedVariables || joinSourceVariables(left).some((variableName) => selectedVariables.has(variableName));\n const rightConnected = !hasSelectedVariables || joinSourceVariables(right).some((variableName) => selectedVariables.has(variableName));\n return Number(rightConnected) - Number(leftConnected)\n || left.estimateRows - right.estimateRows\n || left.inputIndex - right.inputIndex;\n });\n const [next] = remaining.splice(0, 1);\n selected.push(next);\n for (const variableName of joinSourceVariables(next)) {\n selectedVariables.add(variableName);\n }\n }\n return selected;\n }\n\n private buildOrderClause(options: QueryOptions | undefined, alias: string): string {\n if (!options?.order || options.order.length === 0) return '';\n const directions = 'orderDirections' in options && Array.isArray((options as QueryOptions & { orderDirections?: Array<'asc' | 'desc'> }).orderDirections)\n ? (options as QueryOptions & { orderDirections?: Array<'asc' | 'desc'> }).orderDirections as Array<'asc' | 'desc'>\n : options.order.map(() => (options.reverse ? 'desc' : 'asc'));\n return ` ORDER BY ${options.order.map((key, index) => `${alias}.${TERM_COLUMN[key]} ${(directions[index] ?? 'asc').toUpperCase()}`).join(', ')}`;\n }\n\n private buildJoinOrderClause(\n orderBy: RdfLocalQuery['orderBy'] | undefined,\n variableColumns: Map<string, string>,\n ): { joins: string; orderBy: string } {\n if (!orderBy || orderBy.length === 0) return { joins: '', orderBy: '' };\n const joins: string[] = [];\n const orders: string[] = [];\n for (const [index, entry] of orderBy.entries()) {\n const column = variableColumns.get(entry.variable);\n if (!column) throw new Error(`Postgres RDF-3X join cannot order by unbound variable: ${entry.variable}`);\n const alias = `join_order_t${index}`;\n joins.push(` JOIN rdf_terms ${alias} ON ${alias}.id = ${column}`);\n orders.push(`${alias}.value ${entry.direction === 'desc' ? 'DESC' : 'ASC'}`);\n }\n return { joins: joins.join(''), orderBy: ` ORDER BY ${orders.join(', ')}` };\n }\n\n private buildPagination(\n options: { limit?: number; offset?: number } | undefined,\n builder: PgSqlBuilder,\n ): { sql: string; paramCount: number } {\n let sql = '';\n let paramCount = 0;\n if (options?.limit !== undefined) {\n sql += ` LIMIT ${builder.add(Math.max(0, options.limit))}`;\n paramCount++;\n }\n if (options?.offset !== undefined) {\n if (options.limit === undefined) {\n sql += ' LIMIT ALL';\n }\n sql += ` OFFSET ${builder.add(Math.max(0, options.offset))}`;\n paramCount++;\n }\n return { sql, paramCount };\n }\n\n private async rowsToQuads(rows: PgQuadIdRow[]): Promise<Quad[]> {\n const ids = rows.flatMap((row) => [row.graph_id, row.subject_id, row.predicate_id, row.object_id]);\n const terms = await this.requireDictionary().rowsForIds(ids);\n return rows.map((row) => quad(\n this.requiredTerm(terms, row.subject_id) as any,\n this.requiredTerm(terms, row.predicate_id) as any,\n this.requiredTerm(terms, row.object_id) as any,\n this.requiredTerm(terms, row.graph_id) as any,\n ));\n }\n\n private async joinRowsToBindings(\n rows: Array<Record<string, unknown>>,\n variableAliases: Map<string, string>,\n aggregateAliases?: Map<string, string>,\n aggregateTypes?: Map<string, 'integer' | 'decimal'>,\n ): Promise<RdfBindingRow[]> {\n const termIds = rows.flatMap((row) => [...variableAliases.values()]\n .map((alias) => row[alias])\n .map(pgInteger)\n .filter((value): value is number => value !== undefined));\n const terms = await this.requireDictionary().rowsForIds(termIds);\n return rows.map((row) => {\n const binding: RdfBindingRow = {};\n for (const [variableName, alias] of variableAliases) {\n const id = pgInteger(row[alias]);\n if (id !== undefined) binding[variableName] = this.requiredTerm(terms, id);\n }\n for (const [variableName, alias] of aggregateAliases ?? []) {\n const value = pgInteger(row[alias]);\n if (value !== undefined) {\n binding[variableName] = DataFactory.literal(\n String(value),\n DataFactory.namedNode(aggregateTypes?.get(variableName) === 'decimal' ? XSD_DECIMAL : XSD_INTEGER),\n ) as Term;\n }\n }\n return binding;\n });\n }\n\n private indexMetrics(\n indexChoice: string,\n matchedRows: number,\n returnedRows: number,\n start: number,\n queryPlan: string[],\n ): RdfIndexMetrics {\n return {\n engine: 'solid-rdf',\n indexChoice,\n matchedRows,\n returnedRows,\n durationMs: Date.now() - start,\n queryPlan,\n };\n }\n\n private localMetrics(\n start: number,\n scannedRows: number,\n joinedRows: number,\n returnedRows: number,\n indexChoices: string[],\n plan: string[],\n filtersPushedDown = 0,\n ): RdfLocalQueryMetrics {\n return {\n engine: 'solid-rdf',\n plan,\n scannedRows,\n joinedRows,\n returnedRows,\n durationMs: Date.now() - start,\n indexChoices,\n cardinalityEstimates: 0,\n distinctCardinalityEstimates: 0,\n searchCardinalityEstimates: 0,\n filtersApplied: 0,\n filtersPushedDown,\n };\n }\n\n private async rebuildCacheFromStore(): Promise<void> {\n if (this.cacheEngine) {\n await this.cacheEngine.close();\n this.cacheEngine = null;\n }\n if (this.cacheDir) {\n await rm(this.cacheDir, { recursive: true, force: true });\n }\n this.cacheDir = mkdtempSync(join(tmpdir(), 'xpod-pg-rdf-cache-'));\n this.cachePath = join(this.cacheDir, 'rdf-cache.sqlite');\n this.cacheEngine = new SolidRdfEngine({\n index: { path: this.cachePath },\n autoOpen: true,\n });\n const sources = await this.requireExecutor().query<PostgresRdfSourceRow>('SELECT * FROM rdf_sources ORDER BY id');\n const nullSourceRows = await this.requireExecutor().query<PostgresRdfQuadRow>('SELECT * FROM rdf_quads WHERE source_file_id IS NULL ORDER BY graph_id, subject_id, predicate_id, object_id');\n await this.loadCacheQuads(nullSourceRows, undefined);\n\n for (const source of sources) {\n const quadRows = await this.requireExecutor().query<PostgresRdfQuadRow>(\n 'SELECT * FROM rdf_quads WHERE source_file_id = $1 ORDER BY graph_id, subject_id, predicate_id, object_id',\n [source.id],\n );\n await this.loadCacheQuads(quadRows, source);\n }\n await this.requireCache().refreshDerivedIndexes();\n this.factsDataVersion = await this.readFactsDataVersion();\n this.cacheDirty = false;\n }\n\n private async loadCacheQuads(rows: PostgresRdfQuadRow[], source?: PostgresRdfSourceRow): Promise<void> {\n if (rows.length === 0) {\n return;\n }\n const dictionary = this.requireDictionary();\n const termIds = Array.from(new Set(rows.flatMap((row) => [row.graph_id, row.subject_id, row.predicate_id, row.object_id])));\n const terms = await dictionary.rowsForIds(termIds);\n const quads = rows.map((row) => quad(\n this.requiredTerm(terms, row.subject_id) as any,\n this.requiredTerm(terms, row.predicate_id) as any,\n this.requiredTerm(terms, row.object_id) as any,\n this.requiredTerm(terms, row.graph_id) as any,\n ));\n const sourceInput = source ? this.sourceRowToInput(source) : undefined;\n if (sourceInput) {\n this.requireCache().replaceSource(quads, sourceInput);\n } else {\n this.requireCache().put(quads);\n }\n }\n\n private async insertQuads(\n executor: AsyncSqlExecutor,\n dictionary: PostgresRdfTermDictionary,\n quads: Quad[],\n sourceId: number | null,\n sourceLineNo: number | null,\n ): Promise<void> {\n for (const quadValue of quads) {\n const graphId = await dictionary.getOrCreate(quadValue.graph);\n const subjectId = await dictionary.getOrCreate(quadValue.subject);\n const predicateId = await dictionary.getOrCreate(quadValue.predicate);\n const objectId = await dictionary.getOrCreate(quadValue.object);\n await executor.exec(`\n INSERT INTO rdf_quads (\n graph_id,\n subject_id,\n predicate_id,\n object_id,\n source_file_id,\n source_line_no\n )\n VALUES ($1, $2, $3, $4, $5, $6)\n ON CONFLICT (graph_id, subject_id, predicate_id, object_id)\n DO UPDATE SET\n source_file_id = EXCLUDED.source_file_id,\n source_line_no = EXCLUDED.source_line_no\n `, [graphId, subjectId, predicateId, objectId, sourceId, sourceLineNo]);\n }\n }\n\n private async deleteExactQuad(\n executor: AsyncSqlExecutor,\n dictionary: PostgresRdfTermDictionary,\n value: Quad,\n ): Promise<number> {\n const graphId = await dictionary.find(value.graph);\n const subjectId = await dictionary.find(value.subject);\n const predicateId = await dictionary.find(value.predicate);\n const objectId = await dictionary.find(value.object);\n if (graphId === undefined || subjectId === undefined || predicateId === undefined || objectId === undefined) {\n return 0;\n }\n const result = await executor.query<{ one: number }>(\n `\n DELETE FROM rdf_quads\n WHERE graph_id = $1\n AND subject_id = $2\n AND predicate_id = $3\n AND object_id = $4\n RETURNING 1 AS one\n `,\n [graphId, subjectId, predicateId, objectId],\n );\n return result.length;\n }\n\n private sourceRowToInput(row: PostgresRdfSourceRow): RdfSourceInput {\n return {\n source: row.source,\n workspace: row.workspace,\n localPath: row.local_path !== null ? row.local_path : undefined,\n contentType: row.content_type !== null ? row.content_type : undefined,\n sourceVersion: row.source_version !== null ? row.source_version : undefined,\n };\n }\n\n private async upsertSource(source: RdfSourceInput, executor = this.requireExecutor()): Promise<number> {\n const row = await executor.query<{ id: number }>(`\n INSERT INTO rdf_sources (\n source,\n workspace,\n local_path,\n content_type,\n source_version,\n last_indexed_at\n )\n VALUES ($1, $2, $3, $4, $5, NOW())\n ON CONFLICT (source) DO UPDATE\n SET\n workspace = EXCLUDED.workspace,\n local_path = EXCLUDED.local_path,\n content_type = EXCLUDED.content_type,\n source_version = EXCLUDED.source_version,\n last_indexed_at = NOW()\n RETURNING id\n `, [\n source.source,\n source.workspace,\n source.localPath ?? null,\n source.contentType ?? null,\n source.sourceVersion ?? null,\n ]);\n const id = row[0]?.id;\n if (id === undefined) {\n throw new Error(`Failed to upsert RDF source ${source.source}`);\n }\n return id;\n }\n\n private async findSourceRow(source: string, executor = this.requireExecutor()): Promise<PostgresRdfSourceRow | undefined> {\n const rows = await executor.query<PostgresRdfSourceRow>('SELECT * FROM rdf_sources WHERE source = $1', [source]);\n return rows[0];\n }\n\n private async bumpFactsDataVersion(executor = this.requireExecutor()): Promise<void> {\n await executor.exec(`\n UPDATE rdf_index_metadata\n SET value = (COALESCE(NULLIF(value, ''), '0')::bigint + 1)::text\n WHERE key = 'data_version'\n `);\n }\n\n private async readFactsDataVersion(): Promise<number> {\n const row = await this.requireExecutor().query<{ value: string }>(\"SELECT value FROM rdf_index_metadata WHERE key = 'data_version'\");\n return Number(row[0]?.value ?? 0) || 0;\n }\n\n private async readRdf3xFactsDataVersion(): Promise<number> {\n try {\n const row = await this.requireExecutor().query<{ value: string }>(\"SELECT value FROM rdf3x_metadata WHERE key = 'facts_data_version'\");\n return Number(row[0]?.value ?? 0) || 0;\n } catch {\n return 0;\n }\n }\n\n private async ensureReady(): Promise<void> {\n await this.open();\n const currentVersion = await this.readFactsDataVersion();\n if (currentVersion !== this.factsDataVersion) {\n this.factsDataVersion = currentVersion;\n this.markDerivedDirty();\n }\n }\n\n private async ensureCacheReady(): Promise<void> {\n await this.ensureReady();\n if (this.cacheDirty || !this.cacheEngine) {\n await this.rebuildCacheFromStore();\n }\n }\n\n private markDerivedDirty(): void {\n this.rdf3xDirty = true;\n this.cacheDirty = true;\n }\n\n private async scalarCount(sql: string, params: unknown[] = []): Promise<number> {\n const row = await this.requireExecutor().query<{ count: number }>(sql, params);\n return Number(row[0]?.count ?? 0) || 0;\n }\n\n private async factsStats(): Promise<RdfIndexStats> {\n const [termCount, quadCount, sourceCount, graphCount] = await Promise.all([\n this.scalarCount('SELECT COUNT(*) AS count FROM rdf_terms'),\n this.scalarCount(`SELECT COUNT(*) AS count FROM ${RDF_FACTS_TABLE}`),\n this.scalarCount('SELECT COUNT(*) AS count FROM rdf_sources'),\n this.scalarCount(`SELECT COUNT(DISTINCT graph_id) AS count FROM ${RDF_FACTS_TABLE}`),\n ]);\n const spaceObjects = await this.collectSpaceObjects(false);\n const databaseBytes = spaceObjects.reduce((sum, object) => sum + object.bytes, 0);\n return {\n termCount,\n quadCount,\n sourceCount,\n graphCount,\n databaseBytes,\n tableBytes: sumSpaceObjects(spaceObjects, 'table'),\n indexBytes: sumSpaceObjects(spaceObjects, 'index'),\n spaceObjects,\n serializedTermTextBytes: await this.scalarCount('SELECT COALESCE(SUM(length(value)), 0) AS count FROM rdf_terms'),\n literalDatatypeDistribution: [],\n cardinalityDistributions: {\n graphs: [],\n predicates: [],\n predicateObjects: [],\n subjectPredicates: [],\n },\n };\n }\n\n private async rdf3xStats(): Promise<Rdf3xIndexStats> {\n const spaceObjects = await this.collectSpaceObjects(true);\n const databaseBytes = spaceObjects.reduce((sum, object) => sum + object.bytes, 0);\n const uniqueTriples = await this.scalarCount(`\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 `);\n return {\n uniqueTriples,\n membershipCount: await this.scalarCount(`SELECT COUNT(*) AS count FROM ${RDF_FACTS_TABLE}`),\n graphCount: await this.scalarCount(`SELECT COUNT(*) AS count FROM ${RDF3X_GRAPH_PROJECTION_TABLE}`),\n factsDataVersion: await this.readRdf3xFactsDataVersion(),\n permutationRows: Object.fromEntries(PERMUTATIONS.map((permutation) => [permutation.name, uniqueTriples])) as Rdf3xIndexStats['permutationRows'],\n pairProjectionRows: Object.fromEntries(await Promise.all(PAIR_PROJECTIONS.map(async (projection) => [\n projection.name,\n await this.scalarCount(`SELECT COUNT(*) AS count FROM ${projection.table}`),\n ]))) as Rdf3xIndexStats['pairProjectionRows'],\n termProjectionRows: Object.fromEntries(await Promise.all(TERM_PROJECTIONS.map(async (projection) => [\n projection.name,\n await this.scalarCount(`SELECT COUNT(*) AS count FROM ${projection.table}`),\n ]))) as Rdf3xIndexStats['termProjectionRows'],\n databaseBytes,\n tableBytes: sumSpaceObjects(spaceObjects, 'table'),\n indexBytes: sumSpaceObjects(spaceObjects, 'index'),\n spaceObjects,\n };\n }\n\n private async collectSpaceObjects(derived: boolean): Promise<RdfIndexSpaceObject[]> {\n try {\n const rows = await this.requireExecutor().query<{\n name: string;\n kind: 'table' | 'index';\n table_name: string | null;\n bytes: number;\n }>(`\n SELECT\n rel.relname AS name,\n CASE WHEN rel.relkind = 'i' THEN 'index' ELSE 'table' END AS kind,\n tbl.relname AS table_name,\n pg_total_relation_size(rel.oid) AS bytes\n FROM pg_class rel\n LEFT JOIN pg_index idx ON idx.indexrelid = rel.oid\n LEFT JOIN pg_class tbl ON tbl.oid = idx.indrelid\n WHERE rel.relkind IN ('r', 'i')\n AND ${derived\n ? \"(rel.relname LIKE 'rdf3x_%' OR tbl.relname LIKE 'rdf3x_%')\"\n : \"(rel.relname LIKE 'rdf_%' OR tbl.relname LIKE 'rdf_%') AND rel.relname NOT LIKE 'rdf3x_%' AND COALESCE(tbl.relname, '') NOT LIKE 'rdf3x_%'\"}\n ORDER BY rel.relname\n `);\n return rows.map((row) => ({\n name: row.name,\n kind: row.kind,\n ...(row.table_name && row.table_name !== row.name ? { tableName: row.table_name } : {}),\n bytes: Number(row.bytes ?? 0),\n pages: 0,\n estimated: false,\n }));\n } catch {\n const tables = derived\n ? ['rdf3x_metadata', RDF3X_GRAPH_PROJECTION_TABLE, ...PAIR_PROJECTIONS.map((projection) => projection.table), ...TERM_PROJECTIONS.map((projection) => projection.table)]\n : ['rdf_terms', 'rdf_sources', RDF_FACTS_TABLE, 'rdf_index_metadata'];\n const rows = await Promise.all(tables.map(async (table) => ({\n name: table,\n kind: 'table' as const,\n rows: await this.scalarCount(`SELECT COUNT(*) AS count FROM ${table}`).catch(() => 0),\n })));\n return rows.map((row) => ({\n name: row.name,\n kind: row.kind,\n bytes: Math.max(4096, row.rows * 128),\n pages: Math.max(1, Math.ceil(Math.max(4096, row.rows * 128) / 4096)),\n estimated: true,\n }));\n }\n }\n\n private requireExecutor(): AsyncSqlExecutor {\n if (!this.executor) {\n throw new Error('PostgresRdfEngine is not open');\n }\n return this.executor;\n }\n\n private requireDictionary(): PostgresRdfTermDictionary {\n if (!this.termDictionary) {\n throw new Error('PostgresRdfEngine term dictionary is not initialized');\n }\n return this.termDictionary;\n }\n\n private requireCache(): SolidRdfEngine {\n if (!this.cacheEngine) {\n throw new Error('PostgresRdfEngine cache is not initialized');\n }\n return this.cacheEngine;\n }\n\n private 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 quad row: ${id}`);\n }\n return term;\n }\n\n private async openExecutor(): Promise<void> {\n if (this.executor) {\n return;\n }\n if (this.pgOptions.pool) {\n this.pgPool = this.pgOptions.pool;\n this.sharedPoolConfig = null;\n this.executor = new PgPoolExecutor(this.pgPool);\n return;\n }\n\n if (this.pgOptions.driver === 'pglite') {\n this.pglite = new PGlite(this.pgOptions.dataDir);\n await this.pglite.waitReady;\n this.executor = new PgliteExecutor(this.pglite);\n return;\n }\n\n this.sharedPoolConfig = {\n connectionString: this.pgOptions.connectionString,\n host: this.pgOptions.host,\n port: this.pgOptions.port,\n database: this.pgOptions.database,\n user: this.pgOptions.user,\n password: this.pgOptions.password,\n };\n this.pgPool = getSharedPool(this.sharedPoolConfig);\n this.executor = new PgPoolExecutor(this.pgPool);\n }\n}\n\nfunction restoreRow<T>(row: T): T {\n if (!row || typeof row !== 'object') {\n return row;\n }\n const restored: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(row as Record<string, unknown>)) {\n restored[key] = restoreValue(key, value);\n }\n return restored as T;\n}\n\nfunction restoreValue(key: string, value: unknown): unknown {\n if (typeof value !== 'string') {\n return value;\n }\n if (isIntegerResultKey(key) && /^-?\\d+$/.test(value)) {\n return Number(value);\n }\n return fromPgSafe(value);\n}\n\nfunction isIntegerResultKey(key: string): boolean {\n return INTEGER_RESULT_KEYS.has(key) || INTEGER_ALIAS_RESULT_KEY.test(key);\n}\n\nfunction pgInteger(value: unknown): number | undefined {\n if (typeof value === 'number') {\n return Number.isFinite(value) ? value : undefined;\n }\n if (typeof value === 'string' && /^-?\\d+$/.test(value)) {\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : undefined;\n }\n return undefined;\n}\n\nfunction isVariable(value: RdfQueryTermPattern | undefined): value is { variable: string } {\n return Boolean(value && typeof value === 'object' && 'variable' in value);\n}\n\nfunction variablesInPattern(pattern: RdfQueryPattern): string[] {\n return uniqueStrings(PATTERN_KEYS\n .map((key) => pattern[key])\n .filter(isVariable)\n .map((value) => value.variable));\n}\n\nfunction isPgRdf3xCompatiblePattern(pattern: QuintPattern): boolean {\n return PATTERN_KEYS.every((key) => {\n const value = pattern[key];\n if (!value || isTerm(value as any)) return true;\n if (value === null || typeof value !== 'object' || 'termType' in value) return false;\n const operators = value as Record<string, unknown>;\n const allowed = new Set<string>([\n '$eq',\n '$ne',\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(operators).length === 0 || Object.keys(operators).some((operator) => !allowed.has(operator))) return false;\n if (operators.$eq !== undefined && !isTerm(operators.$eq as any)) return false;\n if (operators.$ne !== undefined && !isTerm(operators.$ne as any)) return false;\n if (operators.$in !== undefined && (!Array.isArray(operators.$in) || operators.$in.length === 0 || !operators.$in.every((entry) => isTerm(entry as any)))) return false;\n if (operators.$notIn !== undefined && (!Array.isArray(operators.$notIn) || operators.$notIn.length === 0 || !operators.$notIn.every((entry) => isTerm(entry as any)))) return false;\n if (operators.$startsWith !== undefined && typeof operators.$startsWith !== 'string') return false;\n if (operators.$termType !== undefined && !['iri', 'blank', 'literal', 'numeric'].includes(operators.$termType as string)) return false;\n for (const languageOperator of ['$language', '$notLanguage', '$langMatches']) {\n if (operators[languageOperator] !== undefined && typeof operators[languageOperator] !== 'string') return false;\n }\n for (const datatypeOperator of ['$datatype', '$notDatatype']) {\n const datatype = operators[datatypeOperator];\n if (datatype !== undefined && (!isTerm(datatype as any) || (datatype as Term).termType !== 'NamedNode')) return false;\n }\n if (key === 'object') {\n for (const rangeOperator of ['$gt', '$gte', '$lt', '$lte']) {\n const value = operators[rangeOperator];\n if (value !== undefined && !isObjectRangeValue(value)) return false;\n }\n for (const textOperator of ['$contains', '$endsWith']) {\n if (operators[textOperator] !== undefined && typeof operators[textOperator] !== 'string') return false;\n }\n }\n return true;\n });\n}\n\nfunction isObjectRangeValue(value: unknown): boolean {\n return typeof value === 'number'\n ? Number.isFinite(value)\n : typeof value === 'string'\n ? true\n : isTerm(value as any);\n}\n\nfunction shouldUseMembershipSource(resolved: PgResolvedPattern): 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 termKindsForPatternKey(key: PgPatternKey): 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 pattern key: ${exhaustive}`);\n }\n }\n}\n\nfunction escapeLikePattern(value: string): string {\n return value.replace(/[\\\\%_]/g, (char) => `\\\\${char}`);\n}\n\nfunction rangeSuffix(range: PgObjectRange): string {\n return `${range.min !== undefined ? (range.minInclusive ? '$gte' : '$gt') : ''}${range.max !== undefined ? (range.maxInclusive ? '$lte' : '$lt') : ''}`;\n}\n\nfunction describeScanOrder(options?: QueryOptions): string {\n const order = options?.order ?? [];\n const directions = 'orderDirections' in (options ?? {})\n ? ((options as QueryOptions & { orderDirections?: Array<'asc' | 'desc'> })?.orderDirections ?? [])\n : order.map(() => (options?.reverse ? 'desc' : 'asc'));\n return order.map((entry, index) => `${directions[index] ?? 'asc'}:${entry}`).join(',');\n}\n\nfunction describePatternSource(source: { pattern: QuintPattern; variables: Partial<Record<PgPatternKey, string>> }): string {\n return PATTERN_KEYS\n .map((key) => {\n const variableName = source.variables[key];\n if (variableName) return `${key}:?${variableName}`;\n const value = source.pattern[key];\n return value ? `${key}:${termMatchKey(value)}` : undefined;\n })\n .filter(Boolean)\n .join(',');\n}\n\nfunction termMatchKey(match: QuintPattern[keyof QuintPattern] | undefined): string {\n if (!match) return '*';\n if (isTerm(match as any)) return `${(match as Term).termType}:${(match as Term).value}`;\n return JSON.stringify(match);\n}\n\nfunction queryAggregates(query: RdfLocalQuery): NonNullable<RdfLocalQuery['aggregates']> {\n if (query.aggregates && query.aggregates.length > 0) return query.aggregates;\n return query.aggregate ? [query.aggregate] : [];\n}\n\nfunction aggregatePlan(aggregates: NonNullable<RdfLocalQuery['aggregates']>, grouped: boolean): string {\n return `Aggregate(${grouped ? 'group-' : ''}${aggregates.map((aggregate) => (\n `${aggregate.type}${aggregate.distinct ? ':DISTINCT' : ''}(${aggregate.variable ? `?${aggregate.variable}` : '*'})`\n )).join(',')})`;\n}\n\nfunction describeFilter(filter: RdfQueryFilter): string {\n return `?${filter.variable}${filter.operator}`;\n}\n\nfunction describeQueryOrder(orderBy: NonNullable<RdfLocalQuery['orderBy']>): string {\n return orderBy.map((entry) => `${entry.direction ?? 'asc'}:${entry.variable}`).join(',');\n}\n\nfunction isNativeAggregateHavingOperator(operator: RdfQueryFilter['operator']): boolean {\n return operator === '$eq'\n || operator === '$ne'\n || operator === '$gt'\n || operator === '$gte'\n || operator === '$lt'\n || operator === '$lte';\n}\n\nfunction aggregateSqlOperator(operator: RdfQueryFilter['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 throw new Error(`Unsupported PostgreSQL RDF-3X aggregate HAVING operator: ${operator}`);\n }\n}\n\nfunction patternEqualities(slotsByVariable: Map<string, PgPatternKey[]>): PgPatternEquality[] {\n const equalities: PgPatternEquality[] = [];\n for (const [variable, slots] of slotsByVariable) {\n const [first, ...rest] = slots;\n if (!first) continue;\n for (const slot of rest) {\n equalities.push({ variable, left: first, right: slot });\n }\n }\n return equalities;\n}\n\nfunction storagePlanMarkers(queryPlan: string[] | undefined): string[] {\n return (queryPlan ?? []).filter((entry) => (\n entry.startsWith('TextSearch(')\n || entry.startsWith('Rdf3x')\n || entry === 'GraphMembershipFilter'\n || entry === 'GraphPrefixMembershipFilter'\n || entry.startsWith('LexicalRange(')\n || entry.startsWith('NumericRange(')\n || entry.startsWith('TermIn(')\n || entry.startsWith('TermNotIn(')\n || entry.startsWith('TermType(')\n || entry.startsWith('Language(')\n || entry.startsWith('Datatype(')\n ));\n}\n\nfunction uniqueStrings(values: string[]): string[] {\n return [...new Set(values)];\n}\n\nfunction uniqueNumbers(values: number[]): number[] {\n return [...new Set(values)];\n}\n\nfunction joinSourceVariables(source: PgJoinSource): string[] {\n return uniqueStrings(Object.values(source.entry.variables).filter((value): value is string => Boolean(value)));\n}\n\nfunction joinSolutionMappingKeyExpression(variableAliases: Map<string, string>, variables?: string[]): string {\n const variableNames = uniqueStrings(variables ?? [...variableAliases.keys()]);\n if (variableNames.length === 0) return '1';\n return variableNames.map((variableName) => {\n const alias = variableAliases.get(variableName);\n if (!alias) throw new Error(`Postgres RDF-3X COUNT(DISTINCT *) cannot read unbound variable: ${variableName}`);\n return `source.${alias}`;\n }).join(` || ':' || `);\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\nconst INTEGER_RESULT_KEYS = new Set([\n 'id',\n 'graph_id',\n 'subject_id',\n 'predicate_id',\n 'object_id',\n 'source_file_id',\n 'source_line_no',\n 'datatype_id',\n 'count',\n 'term_count',\n 'quad_count',\n 'source_count',\n 'graph_count',\n]);\nconst INTEGER_ALIAS_RESULT_KEY = /^(?:v|a)\\d+$/;\n\nfunction uniqueQuads(quads: Quad[]): Quad[] {\n const seen = new Set<string>();\n const result: Quad[] = [];\n for (const value of quads) {\n const key = [\n value.graph.termType,\n value.graph.value,\n value.subject.termType,\n value.subject.value,\n value.predicate.termType,\n value.predicate.value,\n value.object.termType,\n value.object.value,\n value.object.termType === 'Literal' ? value.object.language : '',\n value.object.termType === 'Literal' ? value.object.datatype.value : '',\n ].join('\\u001f');\n if (!seen.has(key)) {\n seen.add(key);\n result.push(value);\n }\n }\n return result;\n}\n"]}