@undefineds.co/xpod 0.3.6 → 0.3.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/config/cli.json +1 -1
- package/config/cloud.json +54 -22
- package/config/local.json +56 -12
- package/config/resolver.json +10 -2
- package/config/xpod.base.json +50 -0
- package/config/xpod.json +8 -8
- package/dist/agents/config/resolve.js +10 -10
- package/dist/agents/config/resolve.js.map +1 -1
- package/dist/api/chatkit/index.d.ts +1 -1
- package/dist/api/chatkit/index.js.map +1 -1
- package/dist/api/chatkit/pod-store.d.ts +14 -11
- package/dist/api/chatkit/pod-store.js +114 -78
- package/dist/api/chatkit/pod-store.js.map +1 -1
- package/dist/api/chatkit/runtime/AcpAgentRuntime.js +1 -1
- package/dist/api/chatkit/runtime/AcpAgentRuntime.js.map +1 -1
- package/dist/api/chatkit/service.js +1 -1
- package/dist/api/chatkit/service.js.map +1 -1
- package/dist/api/chatkit/types.d.ts +11 -11
- package/dist/api/chatkit/types.js +3 -3
- package/dist/api/chatkit/types.js.map +1 -1
- package/dist/api/container/cloud.js +0 -8
- package/dist/api/container/cloud.js.map +1 -1
- package/dist/api/container/index.js +2 -1
- package/dist/api/container/index.js.map +1 -1
- package/dist/api/container/local.js +0 -7
- package/dist/api/container/local.js.map +1 -1
- package/dist/api/container/routes.js +3 -17
- package/dist/api/container/routes.js.map +1 -1
- package/dist/api/container/types.d.ts +0 -2
- package/dist/api/container/types.js.map +1 -1
- package/dist/api/handlers/PodManagementHandler.d.ts +3 -0
- package/dist/api/handlers/PodManagementHandler.js +71 -1
- package/dist/api/handlers/PodManagementHandler.js.map +1 -1
- package/dist/api/handlers/RunHandler.js +5 -5
- package/dist/api/handlers/RunHandler.js.map +1 -1
- package/dist/api/runs/AgentRuntimeTypes.d.ts +7 -8
- package/dist/api/runs/AgentRuntimeTypes.js.map +1 -1
- package/dist/api/runs/InngestRunExecutionBackend.d.ts +2 -2
- package/dist/api/runs/ManagedRunWorker.d.ts +1 -1
- package/dist/api/runs/ManagedRunWorker.js +6 -6
- package/dist/api/runs/ManagedRunWorker.js.map +1 -1
- package/dist/api/runs/PiAgentRuntimeDriver.d.ts +16 -1
- package/dist/api/runs/PiAgentRuntimeDriver.js +182 -23
- package/dist/api/runs/PiAgentRuntimeDriver.js.map +1 -1
- package/dist/api/runs/RunStateCenter.d.ts +3 -3
- package/dist/api/runs/RunStateCenter.js +13 -13
- package/dist/api/runs/RunStateCenter.js.map +1 -1
- package/dist/api/runs/store.d.ts +4 -4
- package/dist/api/runs/store.js +2 -2
- package/dist/api/runs/store.js.map +1 -1
- package/dist/api/service/VectorStoreService.d.ts +1 -1
- package/dist/api/service/VectorStoreService.js +16 -16
- package/dist/api/service/VectorStoreService.js.map +1 -1
- package/dist/api/tasks/InngestTaskScheduler.d.ts +4 -4
- package/dist/api/tasks/TaskMaterializer.d.ts +3 -3
- package/dist/api/tasks/TaskMaterializer.js +11 -11
- package/dist/api/tasks/TaskMaterializer.js.map +1 -1
- package/dist/api/tasks/TaskService.d.ts +3 -3
- package/dist/api/tasks/TaskService.js +11 -7
- package/dist/api/tasks/TaskService.js.map +1 -1
- package/dist/api/tasks/store.d.ts +10 -4
- package/dist/api/tasks/store.js +14 -4
- package/dist/api/tasks/store.js.map +1 -1
- package/dist/api/workspace/types.d.ts +3 -3
- package/dist/api/workspace/types.js +6 -6
- package/dist/api/workspace/types.js.map +1 -1
- package/dist/cli/commands/config.js +2 -2
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/start.js +9 -3
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/components/components.jsonld +8 -2
- package/dist/components/context.jsonld +302 -51
- package/dist/http/search/SearchHttpHandler.js +8 -8
- package/dist/http/search/SearchHttpHandler.js.map +1 -1
- package/dist/identity/drizzle/PodLookupRepository.d.ts +11 -1
- package/dist/identity/drizzle/PodLookupRepository.js +95 -4
- package/dist/identity/drizzle/PodLookupRepository.js.map +1 -1
- package/dist/identity/drizzle/db.js +4 -43
- package/dist/identity/drizzle/db.js.map +1 -1
- package/dist/identity/drizzle/schema.pg.d.ts +0 -5
- package/dist/identity/drizzle/schema.pg.js +2 -16
- package/dist/identity/drizzle/schema.pg.js.map +1 -1
- package/dist/identity/drizzle/schema.sqlite.d.ts +19 -176
- package/dist/identity/drizzle/schema.sqlite.js +2 -16
- package/dist/identity/drizzle/schema.sqlite.js.map +1 -1
- package/dist/identity/oidc/AutoDetectIdentityProviderHandler.d.ts +4 -4
- package/dist/identity/oidc/AutoDetectIdentityProviderHandler.js +7 -7
- package/dist/identity/oidc/AutoDetectIdentityProviderHandler.js.map +1 -1
- package/dist/identity/oidc/AutoDetectIdentityProviderHandler.jsonld +6 -6
- package/dist/identity/oidc/AutoDetectOidcHandler.d.ts +4 -4
- package/dist/identity/oidc/AutoDetectOidcHandler.js +6 -6
- package/dist/identity/oidc/AutoDetectOidcHandler.js.map +1 -1
- package/dist/identity/oidc/AutoDetectOidcHandler.jsonld +6 -6
- package/dist/identity/oidc/ScopedPickWebIdHandler.d.ts +37 -0
- package/dist/identity/oidc/ScopedPickWebIdHandler.js +211 -0
- package/dist/identity/oidc/ScopedPickWebIdHandler.js.map +1 -0
- package/dist/identity/oidc/ScopedPickWebIdHandler.jsonld +158 -0
- package/dist/index.d.ts +12 -2
- package/dist/index.js +16 -4
- package/dist/index.js.map +1 -1
- package/dist/main.js +8 -2
- package/dist/main.js.map +1 -1
- package/dist/provision/ProvisionPodCreator.d.ts +3 -4
- package/dist/provision/ProvisionPodCreator.js +8 -13
- package/dist/provision/ProvisionPodCreator.js.map +1 -1
- package/dist/provision/ProvisionPodCreator.jsonld +7 -7
- package/dist/runtime/Proxy.d.ts +0 -1
- package/dist/runtime/Proxy.js +0 -9
- package/dist/runtime/Proxy.js.map +1 -1
- package/dist/runtime/bootstrap.d.ts +1 -0
- package/dist/runtime/bootstrap.js +5 -2
- package/dist/runtime/bootstrap.js.map +1 -1
- package/dist/runtime/css-process.d.ts +12 -4
- package/dist/runtime/css-process.js +61 -14
- package/dist/runtime/css-process.js.map +1 -1
- package/dist/runtime/oidc-issuer.d.ts +3 -2
- package/dist/runtime/oidc-issuer.js +3 -2
- package/dist/runtime/oidc-issuer.js.map +1 -1
- package/dist/runtime/runtime-types.d.ts +1 -0
- package/dist/runtime/runtime-types.js.map +1 -1
- package/dist/solidfs/LocalFirstRdfRepresentationResolver.d.ts +21 -0
- package/dist/solidfs/LocalFirstRdfRepresentationResolver.js +38 -0
- package/dist/solidfs/LocalFirstRdfRepresentationResolver.js.map +1 -0
- package/dist/solidfs/LocalSolidFS.d.ts +18 -0
- package/dist/solidfs/LocalSolidFS.js +539 -0
- package/dist/solidfs/LocalSolidFS.js.map +1 -0
- package/dist/solidfs/PodSolidFsHttpClient.d.ts +16 -0
- package/dist/solidfs/PodSolidFsHttpClient.js +93 -0
- package/dist/solidfs/PodSolidFsHttpClient.js.map +1 -0
- package/dist/solidfs/PodSolidFsHydrator.d.ts +27 -0
- package/dist/solidfs/PodSolidFsHydrator.js +127 -0
- package/dist/solidfs/PodSolidFsHydrator.js.map +1 -0
- package/dist/solidfs/PodSolidFsSyncer.d.ts +21 -0
- package/dist/solidfs/PodSolidFsSyncer.js +78 -0
- package/dist/solidfs/PodSolidFsSyncer.js.map +1 -0
- package/dist/solidfs/RdfIndexSolidFsSyncer.d.ts +22 -0
- package/dist/solidfs/RdfIndexSolidFsSyncer.js +131 -0
- package/dist/solidfs/RdfIndexSolidFsSyncer.js.map +1 -0
- package/dist/solidfs/index.d.ts +7 -0
- package/dist/solidfs/index.js +24 -0
- package/dist/solidfs/index.js.map +1 -0
- package/dist/solidfs/types.d.ts +131 -0
- package/dist/solidfs/types.js +19 -0
- package/dist/solidfs/types.js.map +1 -0
- package/dist/storage/RepresentationPartialConvertingStore.js +6 -13
- package/dist/storage/RepresentationPartialConvertingStore.js.map +1 -1
- package/dist/storage/SparqlUpdateResourceStore.d.ts +4 -0
- package/dist/storage/SparqlUpdateResourceStore.js +13 -0
- package/dist/storage/SparqlUpdateResourceStore.js.map +1 -1
- package/dist/storage/SparqlUpdateResourceStore.jsonld +26 -0
- package/dist/storage/accessors/MixDataAccessor.d.ts +85 -4
- package/dist/storage/accessors/MixDataAccessor.js +511 -16
- package/dist/storage/accessors/MixDataAccessor.js.map +1 -1
- package/dist/storage/accessors/MixDataAccessor.jsonld +176 -1
- package/dist/storage/accessors/QuintStoreSparqlDataAccessor.d.ts +7 -0
- package/dist/storage/accessors/QuintStoreSparqlDataAccessor.js +72 -4
- package/dist/storage/accessors/QuintStoreSparqlDataAccessor.js.map +1 -1
- package/dist/storage/accessors/QuintStoreSparqlDataAccessor.jsonld +24 -0
- package/dist/storage/quint/BaseQuintStore.d.ts +3 -0
- package/dist/storage/quint/BaseQuintStore.js +51 -27
- package/dist/storage/quint/BaseQuintStore.js.map +1 -1
- package/dist/storage/quint/PgQuintStore.d.ts +1 -0
- package/dist/storage/quint/PgQuintStore.js +50 -32
- package/dist/storage/quint/PgQuintStore.js.map +1 -1
- package/dist/storage/quint/PgQuintStore.jsonld +4 -3
- package/dist/storage/quint/SqliteQuintStore.d.ts +5 -0
- package/dist/storage/quint/SqliteQuintStore.js +100 -0
- package/dist/storage/quint/SqliteQuintStore.js.map +1 -1
- package/dist/storage/quint/SqliteQuintStore.jsonld +20 -0
- package/dist/storage/quint/types.d.ts +16 -0
- package/dist/storage/quint/types.js.map +1 -1
- package/dist/storage/rdf/Rdf3xTripleIndex.d.ts +55 -0
- package/dist/storage/rdf/Rdf3xTripleIndex.js +1235 -0
- package/dist/storage/rdf/Rdf3xTripleIndex.js.map +1 -0
- package/dist/storage/rdf/RdfContentTypes.d.ts +9 -0
- package/dist/storage/rdf/RdfContentTypes.js +79 -0
- package/dist/storage/rdf/RdfContentTypes.js.map +1 -0
- package/dist/storage/rdf/RdfLocalQueryEngine.d.ts +76 -0
- package/dist/storage/rdf/RdfLocalQueryEngine.js +2636 -0
- package/dist/storage/rdf/RdfLocalQueryEngine.js.map +1 -0
- package/dist/storage/rdf/RdfQuadIndex.d.ts +98 -0
- package/dist/storage/rdf/RdfQuadIndex.js +1840 -0
- package/dist/storage/rdf/RdfQuadIndex.js.map +1 -0
- package/dist/storage/rdf/RdfQuadIndex.jsonld +416 -0
- package/dist/storage/rdf/RdfShadowComparator.d.ts +12 -0
- package/dist/storage/rdf/RdfShadowComparator.js +47 -0
- package/dist/storage/rdf/RdfShadowComparator.js.map +1 -0
- package/dist/storage/rdf/RdfSparqlAdapter.d.ts +147 -0
- package/dist/storage/rdf/RdfSparqlAdapter.js +2420 -0
- package/dist/storage/rdf/RdfSparqlAdapter.js.map +1 -0
- package/dist/storage/rdf/RdfSparqlAdapter.jsonld +414 -0
- package/dist/storage/rdf/RdfTermDictionary.d.ts +27 -0
- package/dist/storage/rdf/RdfTermDictionary.js +352 -0
- package/dist/storage/rdf/RdfTermDictionary.js.map +1 -0
- package/dist/storage/rdf/RdfTermDictionary.jsonld +114 -0
- package/dist/storage/rdf/RdfTermSemantics.d.ts +6 -0
- package/dist/storage/rdf/RdfTermSemantics.js +40 -0
- package/dist/storage/rdf/RdfTermSemantics.js.map +1 -0
- package/dist/storage/rdf/RdfTextIndex.d.ts +23 -0
- package/dist/storage/rdf/RdfTextIndex.js +569 -0
- package/dist/storage/rdf/RdfTextIndex.js.map +1 -0
- package/dist/storage/rdf/RdfVectorIndex.d.ts +22 -0
- package/dist/storage/rdf/RdfVectorIndex.js +631 -0
- package/dist/storage/rdf/RdfVectorIndex.js.map +1 -0
- package/dist/storage/rdf/RdfXmlSerializer.d.ts +2 -0
- package/dist/storage/rdf/RdfXmlSerializer.js +123 -0
- package/dist/storage/rdf/RdfXmlSerializer.js.map +1 -0
- package/dist/storage/rdf/ShadowRdfQuintStore.d.ts +58 -0
- package/dist/storage/rdf/ShadowRdfQuintStore.js +202 -0
- package/dist/storage/rdf/ShadowRdfQuintStore.js.map +1 -0
- package/dist/storage/rdf/ShadowRdfQuintStore.jsonld +308 -0
- package/dist/storage/rdf/SolidRdfEngine.d.ts +51 -0
- package/dist/storage/rdf/SolidRdfEngine.js +264 -0
- package/dist/storage/rdf/SolidRdfEngine.js.map +1 -0
- package/dist/storage/rdf/SolidRdfEngine.jsonld +338 -0
- package/dist/storage/rdf/SolidRdfSparqlEngine.d.ts +92 -0
- package/dist/storage/rdf/SolidRdfSparqlEngine.js +477 -0
- package/dist/storage/rdf/SolidRdfSparqlEngine.js.map +1 -0
- package/dist/storage/rdf/SolidRdfSparqlEngine.jsonld +257 -0
- package/dist/storage/rdf/index.d.ts +15 -0
- package/dist/storage/rdf/index.js +61 -0
- package/dist/storage/rdf/index.js.map +1 -0
- package/dist/storage/rdf/models-benchmark.d.ts +260 -0
- package/dist/storage/rdf/models-benchmark.js +1405 -0
- package/dist/storage/rdf/models-benchmark.js.map +1 -0
- package/dist/storage/rdf/types.d.ts +726 -0
- package/dist/storage/rdf/types.js +3 -0
- package/dist/storage/rdf/types.js.map +1 -0
- package/dist/storage/rdf/types.jsonld +316 -0
- package/dist/storage/vector/VectorIndexingListener.d.ts +5 -5
- package/dist/storage/vector/VectorIndexingListener.js +19 -19
- package/dist/storage/vector/VectorIndexingListener.js.map +1 -1
- package/package.json +3 -2
- package/templates/pod/acp/.acr.hbs +39 -0
- package/templates/pod/acp/README.acr +18 -0
- package/templates/pod/acp/profile/card.acr +22 -0
- package/templates/pod/base/README$.md.hbs +27 -0
- package/templates/pod/base/profile/card$.ttl.hbs +13 -0
- package/templates/pod/wac/.acl.hbs +26 -0
- package/templates/pod/wac/README.acl.hbs +14 -0
- package/templates/pod/wac/profile/card.acl.hbs +19 -0
- package/dist/api/handlers/WebIdProfileHandler.d.ts +0 -16
- package/dist/api/handlers/WebIdProfileHandler.js +0 -423
- package/dist/api/handlers/WebIdProfileHandler.js.map +0 -1
- package/dist/identity/drizzle/WebIdProfileRepository.d.ts +0 -63
- package/dist/identity/drizzle/WebIdProfileRepository.js +0 -168
- package/dist/identity/drizzle/WebIdProfileRepository.js.map +0 -1
- package/dist/identity/drizzle/WebIdProfileRepository.jsonld +0 -112
- package/dist/storage/quint/BaseQuintStore.jsonld +0 -257
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Rdf3xTripleIndex.js","sourceRoot":"","sources":["../../../src/storage/rdf/Rdf3xTripleIndex.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, mkdirSync } from 'node:fs';\nimport { dirname } from 'node:path';\nimport { DataFactory } from 'n3';\nimport type { Quad, Term } from '@rdfjs/types';\nimport { createSqliteRuntime, type SqliteDatabase } from '../SqliteRuntime';\nimport { RdfTermDictionary } from './RdfTermDictionary';\nimport { isRdfNumericDatatype, rdfNumericValue } from './RdfTermSemantics';\nimport type {\n Rdf3xCardinalityEstimate,\n Rdf3xIndexMetrics,\n Rdf3xIndexStats,\n Rdf3xJoinMetrics,\n Rdf3xJoinOptions,\n Rdf3xJoinScanResult,\n Rdf3xPairProjectionName,\n Rdf3xPatternKey,\n Rdf3xPermutationName,\n Rdf3xRebuildResult,\n Rdf3xNumericObjectRangePattern,\n Rdf3xTermKey,\n Rdf3xTermProjectionName,\n Rdf3xTripleIndexOptions,\n Rdf3xTriplePattern,\n Rdf3xTripleScanOptions,\n Rdf3xTripleScanResult,\n RdfIndexSpaceObject,\n RdfQuadJoinPattern,\n} from './types';\nimport type { QuintPattern } from '../quint/types';\n\ntype TripleColumn = 'subject_id' | 'predicate_id' | 'object_id';\n\ninterface Rdf3xPermutation {\n name: Rdf3xPermutationName;\n table: string;\n columns: TripleColumn[];\n}\n\ninterface Rdf3xPairProjection {\n name: Rdf3xPairProjectionName;\n table: string;\n columns: [TripleColumn, TripleColumn];\n remainder: TripleColumn;\n}\n\ninterface Rdf3xTermProjection {\n name: Rdf3xTermProjectionName;\n table: string;\n column: TripleColumn;\n}\n\ninterface Rdf3xResolvedPattern {\n ids: Partial<Record<Rdf3xPatternKey, number>>;\n graphPrefix?: string;\n objectNumericRange?: Rdf3xNumericRange;\n unresolved?: Rdf3xPatternKey;\n}\n\ninterface Rdf3xQuadIdRow {\n graph_id: number;\n subject_id: number;\n predicate_id: number;\n object_id: number;\n}\n\ninterface Rdf3xJoinSource {\n inputIndex: number;\n alias: string;\n membershipAlias: string;\n entry: RdfQuadJoinPattern;\n resolved: Rdf3xResolvedPattern;\n permutation: Rdf3xPermutation;\n estimate: Rdf3xCardinalityEstimate;\n}\n\ninterface Rdf3xCompiledJoin {\n sql: string;\n params: unknown[];\n countSql?: string;\n countParams: unknown[];\n indexChoice: string;\n queryPlan: string[];\n variableColumns: Map<string, string>;\n variableAliases: Map<string, string>;\n unresolved?: Rdf3xPatternKey;\n}\n\ninterface Rdf3xJoinSourceSql {\n from: string;\n conditions: string[];\n params: unknown[];\n queryPlan: string[];\n}\n\ninterface Rdf3xNumericRange {\n min?: number;\n minInclusive?: boolean;\n max?: number;\n maxInclusive?: boolean;\n}\n\nconst TERM_COLUMN: Record<Rdf3xTermKey, TripleColumn> = {\n subject: 'subject_id',\n predicate: 'predicate_id',\n object: 'object_id',\n};\n\nconst ORDER_COLUMN: Record<'graph' | Rdf3xTermKey, 'graph_id' | TripleColumn> = {\n graph: 'graph_id',\n ...TERM_COLUMN,\n};\n\nconst PATTERN_COLUMNS: Record<Rdf3xPatternKey, 'graph_id' | TripleColumn> = {\n graph: 'graph_id',\n ...TERM_COLUMN,\n};\n\nconst TERM_KEYS: Rdf3xTermKey[] = ['subject', 'predicate', 'object'];\n\nconst PERMUTATIONS: Rdf3xPermutation[] = [\n { name: 'SPO', table: 'rdf3x_spo', columns: ['subject_id', 'predicate_id', 'object_id'] },\n { name: 'SOP', table: 'rdf3x_sop', columns: ['subject_id', 'object_id', 'predicate_id'] },\n { name: 'PSO', table: 'rdf3x_pso', columns: ['predicate_id', 'subject_id', 'object_id'] },\n { name: 'POS', table: 'rdf3x_pos', columns: ['predicate_id', 'object_id', 'subject_id'] },\n { name: 'OSP', table: 'rdf3x_osp', columns: ['object_id', 'subject_id', 'predicate_id'] },\n { name: 'OPS', table: 'rdf3x_ops', columns: ['object_id', 'predicate_id', 'subject_id'] },\n];\n\nconst PAIR_PROJECTIONS: Rdf3xPairProjection[] = [\n { name: 'SP', table: 'rdf3x_stat_sp', columns: ['subject_id', 'predicate_id'], remainder: 'object_id' },\n { name: 'SO', table: 'rdf3x_stat_so', columns: ['subject_id', 'object_id'], remainder: 'predicate_id' },\n { name: 'PS', table: 'rdf3x_stat_ps', columns: ['predicate_id', 'subject_id'], remainder: 'object_id' },\n { name: 'PO', table: 'rdf3x_stat_po', columns: ['predicate_id', 'object_id'], remainder: 'subject_id' },\n { name: 'OS', table: 'rdf3x_stat_os', columns: ['object_id', 'subject_id'], remainder: 'predicate_id' },\n { name: 'OP', table: 'rdf3x_stat_op', columns: ['object_id', 'predicate_id'], remainder: 'subject_id' },\n];\n\nconst TERM_PROJECTIONS: Rdf3xTermProjection[] = [\n { name: 'S', table: 'rdf3x_stat_s', column: 'subject_id' },\n { name: 'P', table: 'rdf3x_stat_p', column: 'predicate_id' },\n { name: 'O', table: 'rdf3x_stat_o', column: 'object_id' },\n];\n\nexport class Rdf3xTripleIndex {\n private readonly sqliteRuntime = createSqliteRuntime();\n private db: SqliteDatabase | null = null;\n private dictionary: RdfTermDictionary | null = null;\n\n public constructor(private readonly options: Rdf3xTripleIndexOptions) {}\n\n public open(): void {\n if (this.db) {\n return;\n }\n\n if (this.options.path !== ':memory:') {\n const dir = dirname(this.options.path);\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n }\n\n this.db = this.sqliteRuntime.openDatabase(this.options.path);\n this.dictionary = new RdfTermDictionary(this.db);\n this.dictionary.initialize();\n this.initializeSchema();\n }\n\n public close(): void {\n this.db?.close();\n this.db = null;\n this.dictionary = null;\n }\n\n public clear(): void {\n this.clearRdf3xTables();\n }\n\n public rebuildFromCurrentQuads(): Rdf3xRebuildResult {\n const start = Date.now();\n const db = this.requireDb();\n const scannedQuads = db.prepare<{ count: number }>('SELECT COUNT(*) AS count FROM rdf_quads').get()?.count ?? 0;\n\n db.transaction(() => {\n this.clearRdf3xTables();\n db.prepare(`\n INSERT INTO rdf3x_triple_membership (\n graph_id,\n subject_id,\n predicate_id,\n object_id,\n source_file_id,\n source_line_no\n )\n SELECT\n graph_id,\n subject_id,\n predicate_id,\n object_id,\n source_file_id,\n source_line_no\n FROM rdf_quads\n `).run();\n\n for (const permutation of PERMUTATIONS) {\n db.prepare(`\n INSERT OR IGNORE INTO ${permutation.table} (${permutation.columns.join(', ')})\n SELECT DISTINCT ${permutation.columns.join(', ')}\n FROM rdf_quads\n `).run();\n }\n\n for (const projection of PAIR_PROJECTIONS) {\n this.rebuildPairProjection(projection);\n }\n\n for (const projection of TERM_PROJECTIONS) {\n this.rebuildTermProjection(projection);\n }\n })();\n\n const stats = this.stats();\n return {\n scannedQuads,\n uniqueTriples: stats.uniqueTriples,\n memberships: stats.membershipCount,\n projectionRows: pairProjectionRowTotal(stats.pairProjectionRows) + termProjectionRowTotal(stats.termProjectionRows),\n durationMs: Date.now() - start,\n };\n }\n\n public scan(pattern: Rdf3xTriplePattern, options?: Rdf3xTripleScanOptions): Rdf3xTripleScanResult {\n const start = Date.now();\n const resolved = this.resolvePattern(pattern);\n if (resolved.unresolved) {\n return {\n quads: [],\n metrics: this.metrics('none', 0, 0, start, [`unresolved ${resolved.unresolved}`]),\n };\n }\n\n const permutation = this.choosePermutation(resolved.ids, { objectRange: Boolean(resolved.objectNumericRange) });\n const compiled = this.compileScanSql(permutation, resolved, options);\n const matchedRows = this.requireDb()\n .prepare<{ count: number }>(compiled.countSql)\n .get(...compiled.countParams)?.count ?? 0;\n const rows = this.requireDb().prepare<Rdf3xQuadIdRow>(compiled.sql).all(...compiled.params);\n return {\n quads: this.rowsToQuads(rows),\n metrics: this.metrics(\n permutation.name,\n matchedRows,\n rows.length,\n start,\n [\n `Rdf3xPermutationScan(${permutation.name})`,\n ...compiled.queryPlan,\n compiled.sql,\n ],\n ),\n };\n }\n\n public joinPatterns(patterns: RdfQuadJoinPattern[], options?: Rdf3xJoinOptions): Rdf3xJoinScanResult {\n const start = Date.now();\n if (patterns.length === 0) {\n return {\n bindings: [],\n metrics: this.joinMetrics('none', 0, 0, start, ['Rdf3xJoinBGP(empty)']),\n };\n }\n\n const compiled = this.compileJoinPatterns(patterns, options);\n if (compiled.unresolved) {\n return {\n bindings: [],\n metrics: this.joinMetrics('none', 0, 0, start, [\n ...compiled.queryPlan,\n `unresolved ${compiled.unresolved}`,\n ]),\n };\n }\n\n const rows = this.requireDb().prepare<Record<string, number>>(compiled.sql).all(...compiled.params);\n const matchedRows = compiled.countSql\n ? this.requireDb().prepare<{ count: number }>(compiled.countSql).get(...compiled.countParams)?.count ?? 0\n : rows.length;\n return {\n bindings: this.joinRowsToBindings(rows, compiled.variableAliases),\n metrics: this.joinMetrics(\n compiled.indexChoice,\n matchedRows,\n rows.length,\n start,\n [...compiled.queryPlan, compiled.sql],\n ),\n };\n }\n\n public estimateCardinality(pattern: Rdf3xTriplePattern): Rdf3xCardinalityEstimate {\n const resolved = this.resolvePattern(pattern);\n if (resolved.unresolved) {\n return {\n uniqueTriples: 0,\n matchingQuads: 0,\n source: 'exact-membership',\n indexChoice: 'none',\n };\n }\n\n if (resolved.objectNumericRange) {\n return this.estimateNumericObjectRangeCardinality(resolved);\n }\n\n if (resolved.ids.graph !== undefined || resolved.graphPrefix !== undefined) {\n return this.estimateResolvedMembershipCardinality(resolved);\n }\n\n const termIds = TERM_KEYS.filter((key) => resolved.ids[key] !== undefined);\n const permutation = this.choosePermutation(resolved.ids);\n if (termIds.length === 3) {\n return this.estimateExactTriple(resolved.ids, permutation.name);\n }\n if (termIds.length === 2) {\n return this.estimatePairProjection(resolved.ids, permutation.name);\n }\n if (termIds.length === 1) {\n return this.estimateTermProjection(resolved.ids, permutation.name);\n }\n\n return {\n uniqueTriples: this.rowCount('rdf3x_spo'),\n matchingQuads: this.rowCount('rdf3x_triple_membership'),\n source: 'full-count',\n indexChoice: permutation.name,\n };\n }\n\n public stats(): Rdf3xIndexStats {\n const spaceObjects = this.collectSpaceObjects();\n const accountedBytes = spaceObjects.reduce((sum, object) => sum + object.bytes, 0);\n const databaseBytes = accountedBytes || this.estimateDatabaseBytes();\n return {\n uniqueTriples: this.rowCount('rdf3x_spo'),\n membershipCount: this.rowCount('rdf3x_triple_membership'),\n graphCount: this.requireDb()\n .prepare<{ count: number }>('SELECT COUNT(DISTINCT graph_id) AS count FROM rdf3x_triple_membership')\n .get()?.count ?? 0,\n permutationRows: Object.fromEntries(PERMUTATIONS.map((permutation) => [\n permutation.name,\n this.rowCount(permutation.table),\n ])) as Record<Rdf3xPermutationName, number>,\n pairProjectionRows: Object.fromEntries(PAIR_PROJECTIONS.map((projection) => [\n projection.name,\n this.rowCount(projection.table),\n ])) as Record<Rdf3xPairProjectionName, number>,\n termProjectionRows: Object.fromEntries(TERM_PROJECTIONS.map((projection) => [\n projection.name,\n this.rowCount(projection.table),\n ])) as Record<Rdf3xTermProjectionName, number>,\n databaseBytes,\n tableBytes: sumSpaceObjects(spaceObjects, 'table'),\n indexBytes: sumSpaceObjects(spaceObjects, 'index'),\n spaceObjects,\n };\n }\n\n public collectSpaceObjects(): RdfIndexSpaceObject[] {\n const db = this.requireDb();\n try {\n const schemaRows = db.prepare<{ name: string; type: string; tbl_name: string }>(`\n SELECT name, type, tbl_name\n FROM sqlite_schema\n WHERE type IN ('table', 'index')\n AND (name LIKE 'rdf3x_%' OR tbl_name LIKE 'rdf3x_%')\n `).all();\n const schema = new Map(schemaRows.map((row) => [row.name, row]));\n try {\n const rows = db.prepare<{ name: string; pages: number; bytes: number | null }>(`\n SELECT name, COUNT(*) AS pages, SUM(pgsize) AS bytes\n FROM dbstat\n WHERE name LIKE 'rdf3x_%'\n OR name LIKE 'sqlite_autoindex_rdf3x_%'\n GROUP BY name\n ORDER BY name\n `).all();\n\n if (rows.length > 0) {\n return rows.map((row) => {\n const object = schema.get(row.name);\n const kind = rdf3xSpaceObjectKind(row.name, object?.type, object?.tbl_name);\n return {\n name: row.name,\n kind,\n ...(object?.tbl_name && object.tbl_name !== row.name ? { tableName: object.tbl_name } : {}),\n pages: row.pages,\n bytes: row.bytes ?? 0,\n };\n });\n }\n } catch {\n // dbstat is optional in SQLite builds and often unavailable for in-memory databases.\n }\n\n return this.estimateSpaceObjectsFromSchema(schemaRows);\n } catch {\n return [];\n }\n }\n\n private initializeSchema(): void {\n const permutationTables = PERMUTATIONS.map((permutation) => `\n CREATE TABLE IF NOT EXISTS ${permutation.table} (\n ${permutation.columns[0]} INTEGER NOT NULL,\n ${permutation.columns[1]} INTEGER NOT NULL,\n ${permutation.columns[2]} INTEGER NOT NULL,\n PRIMARY KEY (${permutation.columns.join(', ')})\n );\n `).join('\\n');\n\n const pairProjectionTables = PAIR_PROJECTIONS.map((projection) => `\n CREATE TABLE IF NOT EXISTS ${projection.table} (\n ${projection.columns[0]} INTEGER NOT NULL,\n ${projection.columns[1]} INTEGER NOT NULL,\n triple_count INTEGER NOT NULL,\n membership_count INTEGER NOT NULL,\n min_${projection.remainder} INTEGER,\n max_${projection.remainder} INTEGER,\n PRIMARY KEY (${projection.columns.join(', ')})\n );\n `).join('\\n');\n\n const termProjectionTables = TERM_PROJECTIONS.map((projection) => `\n CREATE TABLE IF NOT EXISTS ${projection.table} (\n ${projection.column} INTEGER NOT NULL PRIMARY KEY,\n triple_count INTEGER NOT NULL,\n membership_count INTEGER NOT NULL\n );\n `).join('\\n');\n\n this.requireDb().exec(`\n CREATE TABLE IF NOT EXISTS rdf3x_triple_membership (\n graph_id INTEGER NOT NULL,\n subject_id INTEGER NOT NULL,\n predicate_id INTEGER NOT NULL,\n object_id INTEGER NOT NULL,\n source_file_id INTEGER,\n source_line_no INTEGER,\n PRIMARY KEY (graph_id, subject_id, predicate_id, object_id)\n );\n\n CREATE INDEX IF NOT EXISTS rdf3x_membership_gspo\n ON rdf3x_triple_membership(graph_id, subject_id, predicate_id, object_id);\n CREATE INDEX IF NOT EXISTS rdf3x_membership_spo\n ON rdf3x_triple_membership(subject_id, predicate_id, object_id);\n CREATE INDEX IF NOT EXISTS rdf3x_membership_source\n ON rdf3x_triple_membership(source_file_id);\n\n ${permutationTables}\n ${pairProjectionTables}\n ${termProjectionTables}\n `);\n }\n\n private clearRdf3xTables(): void {\n const db = this.requireDb();\n db.exec([\n ...PAIR_PROJECTIONS.map((projection) => `DELETE FROM ${projection.table};`),\n ...TERM_PROJECTIONS.map((projection) => `DELETE FROM ${projection.table};`),\n 'DELETE FROM rdf3x_triple_membership;',\n ...PERMUTATIONS.map((permutation) => `DELETE FROM ${permutation.table};`),\n ].join('\\n'));\n }\n\n private rebuildPairProjection(projection: Rdf3xPairProjection): void {\n const [left, right] = projection.columns;\n this.requireDb().prepare(`\n INSERT INTO ${projection.table} (\n ${left},\n ${right},\n triple_count,\n membership_count,\n min_${projection.remainder},\n max_${projection.remainder}\n )\n SELECT\n triple.${left},\n triple.${right},\n triple.triple_count,\n COALESCE(member.membership_count, 0) AS membership_count,\n triple.min_remainder,\n triple.max_remainder\n FROM (\n SELECT\n ${left},\n ${right},\n COUNT(*) AS triple_count,\n MIN(${projection.remainder}) AS min_remainder,\n MAX(${projection.remainder}) AS max_remainder\n FROM rdf3x_spo\n GROUP BY ${left}, ${right}\n ) triple\n LEFT JOIN (\n SELECT\n ${left},\n ${right},\n COUNT(*) AS membership_count\n FROM rdf3x_triple_membership\n GROUP BY ${left}, ${right}\n ) member\n ON member.${left} = triple.${left}\n AND member.${right} = triple.${right}\n `).run();\n }\n\n private rebuildTermProjection(projection: Rdf3xTermProjection): void {\n this.requireDb().prepare(`\n INSERT INTO ${projection.table} (\n ${projection.column},\n triple_count,\n membership_count\n )\n SELECT\n triple.${projection.column},\n triple.triple_count,\n COALESCE(member.membership_count, 0) AS membership_count\n FROM (\n SELECT\n ${projection.column},\n COUNT(*) AS triple_count\n FROM rdf3x_spo\n GROUP BY ${projection.column}\n ) triple\n LEFT JOIN (\n SELECT\n ${projection.column},\n COUNT(*) AS membership_count\n FROM rdf3x_triple_membership\n GROUP BY ${projection.column}\n ) member\n ON member.${projection.column} = triple.${projection.column}\n `).run();\n }\n\n private compileScanSql(\n permutation: Rdf3xPermutation,\n resolved: Rdf3xResolvedPattern,\n options?: Rdf3xTripleScanOptions,\n ): {\n sql: string;\n params: unknown[];\n countSql: string;\n countParams: unknown[];\n queryPlan: string[];\n } {\n const conditions: string[] = [];\n const params: unknown[] = [];\n const queryPlan: string[] = [`Permutation(${permutation.name})`];\n const ids = resolved.ids;\n\n for (const key of TERM_KEYS) {\n const id = ids[key];\n if (id === undefined) {\n continue;\n }\n conditions.push(`idx.${TERM_COLUMN[key]} = ?`);\n params.push(id);\n }\n\n if (ids.graph !== undefined) {\n conditions.push('membership.graph_id = ?');\n params.push(ids.graph);\n queryPlan.push('GraphMembershipFilter');\n }\n\n const graphPrefixJoin = resolved.graphPrefix\n ? ` JOIN rdf_terms graph_prefix\n ON graph_prefix.id = membership.graph_id`\n : '';\n if (resolved.graphPrefix) {\n conditions.push(`graph_prefix.kind = ?\n AND graph_prefix.value >= ?\n AND graph_prefix.value < ?`);\n params.push('iri', resolved.graphPrefix, `${resolved.graphPrefix}\\uffff`);\n queryPlan.push('GraphPrefixMembershipFilter');\n }\n\n if (resolved.objectNumericRange) {\n const range = resolved.objectNumericRange;\n conditions.push('object_numeric.kind = ?');\n params.push('literal');\n if (range.min !== undefined) {\n conditions.push(`object_numeric.numeric_value ${range.minInclusive ? '>=' : '>'} ?`);\n params.push(range.min);\n }\n if (range.max !== undefined) {\n conditions.push(`object_numeric.numeric_value ${range.maxInclusive ? '<=' : '<'} ?`);\n params.push(range.max);\n }\n queryPlan.push(`NumericRange(object${range.min !== undefined ? (range.minInclusive ? '$gte' : '$gt') : ''}${range.max !== undefined ? (range.maxInclusive ? '$lte' : '$lt') : ''})`);\n }\n\n const whereClause = conditions.length > 0 ? ` WHERE ${conditions.join(' AND ')}` : '';\n const orderClause = this.buildOrderClause(options);\n const from = `\n FROM ${permutation.table} idx\n JOIN rdf3x_triple_membership membership\n ON membership.subject_id = idx.subject_id\n AND membership.predicate_id = idx.predicate_id\n AND membership.object_id = idx.object_id\n ${graphPrefixJoin}\n ${resolved.objectNumericRange ? 'JOIN rdf_terms object_numeric ON object_numeric.id = idx.object_id' : ''}\n `;\n const pagination = this.buildPagination(options);\n return {\n sql: `\n SELECT\n membership.graph_id,\n idx.subject_id,\n idx.predicate_id,\n idx.object_id\n ${from}\n ${orderClause.joins}\n ${whereClause}\n ${orderClause.orderBy || ` ORDER BY ${permutation.columns.map((column) => `idx.${column}`).join(', ')}, membership.graph_id`}\n ${pagination.sql}\n `,\n params: [...params, ...pagination.params],\n countSql: `SELECT COUNT(*) AS count ${from} ${whereClause}`,\n countParams: params,\n queryPlan: [\n ...queryPlan,\n ...(orderClause.orderBy ? [`Rdf3xJoinOrder(${(options?.order ?? []).map((entry, index) => `${options?.reverse ? 'desc' : 'asc'}:${entry}:${index}`).join(',')})`] : []),\n ...(pagination.sql ? ['Pagination'] : []),\n ],\n };\n }\n\n private compileJoinPatterns(patterns: RdfQuadJoinPattern[], options?: Rdf3xJoinOptions): Rdf3xCompiledJoin {\n const sources = patterns.map((entry, inputIndex) => {\n const resolved = this.resolveJoinPattern(entry.pattern);\n const permutation = this.choosePermutation(resolved.ids, { objectRange: Boolean(resolved.objectNumericRange) });\n const estimate = resolved.unresolved\n ? {\n uniqueTriples: 0,\n matchingQuads: 0,\n source: 'full-count',\n indexChoice: 'none',\n } satisfies Rdf3xCardinalityEstimate\n : this.estimateResolvedCardinality(resolved);\n return {\n inputIndex,\n alias: `q${inputIndex}`,\n membershipAlias: `m${inputIndex}`,\n entry,\n resolved,\n permutation,\n estimate,\n } satisfies Rdf3xJoinSource;\n });\n const startPattern = this.chooseJoinStart(sources);\n\n const orderedSources = [startPattern, ...sources.filter((source) => source.inputIndex !== startPattern.inputIndex)];\n const queryPlan: string[] = [\n `Rdf3xJoinBGP(${patterns.length})`,\n `Rdf3xJoinOrder(${orderedSources.map((source) => `?${source.inputIndex}:${source.estimate.indexChoice}`).join('>')})`,\n ];\n const variableColumns = new Map<string, string>();\n const variableAliases = new Map<string, string>();\n const conditions: string[] = [];\n const params: unknown[] = [];\n const countParams: unknown[] = [];\n const indexChoices: string[] = [];\n const fromFragments: string[] = [];\n\n for (const [position, source] of orderedSources.entries()) {\n const scanSql = this.joinSourceSql(source, position === 0);\n if (source.resolved.unresolved) {\n return {\n sql: '',\n params: [],\n countParams: [],\n indexChoice: 'none',\n queryPlan,\n variableColumns,\n variableAliases,\n unresolved: source.resolved.unresolved,\n };\n }\n\n fromFragments.push(scanSql.from);\n conditions.push(...scanSql.conditions);\n params.push(...scanSql.params);\n countParams.push(...scanSql.params);\n queryPlan.push(...scanSql.queryPlan);\n indexChoices.push(source.estimate.indexChoice);\n\n for (const key of ['graph', ...TERM_KEYS] as Rdf3xPatternKey[]) {\n const variableName = source.entry.variables[key];\n if (!variableName) {\n continue;\n }\n const column = key === 'graph'\n ? `${source.membershipAlias}.graph_id`\n : `${source.alias}.${TERM_COLUMN[key]}`;\n const existing = variableColumns.get(variableName);\n if (existing) {\n conditions.push(`${existing} = ${column}`);\n } else {\n variableColumns.set(variableName, column);\n }\n }\n }\n\n const projectVariables = options?.project ?? [...variableColumns.keys()];\n const projectionColumns = projectVariables.map((variableName) => {\n const column = variableColumns.get(variableName);\n if (!column) {\n throw new Error(`Rdf3x BGP join cannot project unbound variable: ${variableName}`);\n }\n const alias = `v${variableAliases.size}`;\n variableAliases.set(variableName, alias);\n return `${column} AS ${alias}`;\n });\n const projection = projectionColumns.length > 0\n ? `${options?.distinct ? 'DISTINCT ' : ''}${projectionColumns.join(', ')}`\n : `${options?.distinct ? 'DISTINCT ' : ''}1 AS __empty`;\n const orderClause = this.buildJoinOrderClause(options, variableColumns);\n const whereClause = conditions.length > 0 ? ` WHERE ${conditions.join(' AND ')}` : '';\n const from = fromFragments.join('');\n let sql = `SELECT ${projection} FROM ${from}${orderClause.joins}${whereClause}${orderClause.orderBy}`;\n const sqlParams = [...params];\n const paginated = options?.limit !== undefined || options?.offset !== undefined;\n const countMatchedRows = options?.countMatchedRows ?? true;\n if (options?.limit !== undefined) {\n sql += ' LIMIT ?';\n sqlParams.push(options.limit);\n }\n if (options?.offset !== undefined) {\n if (options.limit === undefined) {\n sql += ' LIMIT -1';\n }\n sql += ' OFFSET ?';\n sqlParams.push(options.offset);\n }\n if (orderClause.orderBy) {\n queryPlan.push(`Rdf3xJoinOrderBy(${(options?.orderBy ?? []).map((entry) => `${entry.direction ?? 'asc'}:${entry.variable}`).join(',')})`);\n }\n if (options?.distinct) {\n queryPlan.push(`Rdf3xJoinDistinct(${projectVariables.map((variableName) => `?${variableName}`).join(',')})`);\n }\n if (paginated) {\n queryPlan.push('Rdf3xJoinLimit');\n }\n return {\n sql,\n params: sqlParams,\n countSql: paginated && countMatchedRows ? `SELECT COUNT(*) AS count FROM ${from}${orderClause.joins}${whereClause}` : undefined,\n countParams,\n indexChoice: `Rdf3xJoinBGP(${indexChoices.join('>')})`,\n queryPlan,\n variableColumns,\n variableAliases,\n };\n }\n\n private joinSourceSql(source: Rdf3xJoinSource, first: boolean): Rdf3xJoinSourceSql {\n const conditions: string[] = [];\n const params: unknown[] = [];\n const queryPlan: string[] = [`Rdf3xPermutationScan(${source.permutation.name})`];\n const alias = source.alias;\n const graphPrefixAlias = `${source.membershipAlias}_graph_prefix`;\n\n for (const key of TERM_KEYS) {\n const id = source.resolved.ids[key];\n if (id === undefined) {\n continue;\n }\n conditions.push(`${alias}.${TERM_COLUMN[key]} = ?`);\n params.push(id);\n }\n\n let from = first\n ? `${source.permutation.table} ${alias}\n JOIN rdf3x_triple_membership ${source.membershipAlias}\n ON ${source.membershipAlias}.subject_id = ${alias}.subject_id\n AND ${source.membershipAlias}.predicate_id = ${alias}.predicate_id\n AND ${source.membershipAlias}.object_id = ${alias}.object_id`\n : ` JOIN ${source.permutation.table} ${alias}\n ON 1 = 1\n JOIN rdf3x_triple_membership ${source.membershipAlias}\n ON ${source.membershipAlias}.subject_id = ${alias}.subject_id\n AND ${source.membershipAlias}.predicate_id = ${alias}.predicate_id\n AND ${source.membershipAlias}.object_id = ${alias}.object_id`;\n\n if (source.resolved.ids.graph !== undefined) {\n conditions.push(`${source.membershipAlias}.graph_id = ?`);\n params.push(source.resolved.ids.graph);\n queryPlan.push('GraphMembershipFilter');\n }\n if (source.resolved.graphPrefix !== undefined) {\n from += ` JOIN rdf_terms ${graphPrefixAlias}\n ON ${graphPrefixAlias}.id = ${source.membershipAlias}.graph_id`;\n conditions.push(`${graphPrefixAlias}.kind = ?\n AND ${graphPrefixAlias}.value >= ?\n AND ${graphPrefixAlias}.value < ?`);\n params.push('iri', source.resolved.graphPrefix, `${source.resolved.graphPrefix}\\uffff`);\n queryPlan.push('GraphPrefixMembershipFilter');\n }\n if (source.resolved.objectNumericRange) {\n from += ` JOIN rdf_terms ${source.alias}_object_numeric\n ON ${source.alias}_object_numeric.id = ${source.alias}.object_id`;\n const range = source.resolved.objectNumericRange;\n conditions.push(`${source.alias}_object_numeric.kind = ?`);\n params.push('literal');\n if (range.min !== undefined) {\n conditions.push(`${source.alias}_object_numeric.numeric_value ${range.minInclusive ? '>=' : '>'} ?`);\n params.push(range.min);\n }\n if (range.max !== undefined) {\n conditions.push(`${source.alias}_object_numeric.numeric_value ${range.maxInclusive ? '<=' : '<'} ?`);\n params.push(range.max);\n }\n queryPlan.push(`NumericRange(object${range.min !== undefined ? (range.minInclusive ? '$gte' : '$gt') : ''}${range.max !== undefined ? (range.maxInclusive ? '$lte' : '$lt') : ''})`);\n }\n\n return {\n from,\n conditions,\n params,\n queryPlan,\n };\n }\n\n private buildJoinOrderClause(\n options: Rdf3xJoinOptions | undefined,\n variableColumns: Map<string, string>,\n ): { joins: string; orderBy: string } {\n if (!options?.orderBy || options.orderBy.length === 0) {\n return { joins: '', orderBy: '' };\n }\n\n const joins = options.orderBy.map((entry, index) => {\n const column = variableColumns.get(entry.variable);\n if (!column) {\n throw new Error(`Rdf3x join cannot order by unbound variable: ${entry.variable}`);\n }\n const alias = `join_order_t${index}`;\n return {\n join: ` JOIN rdf_terms ${alias} ON ${alias}.id = ${column}`,\n order: `${alias}.value${entry.direction === 'desc' ? ' DESC' : ''}`,\n };\n });\n return {\n joins: joins.map((entry) => entry.join).join(''),\n orderBy: ` ORDER BY ${joins.map((entry) => entry.order).join(', ')}`,\n };\n }\n\n private buildOrderClause(options?: Rdf3xTripleScanOptions): { joins: string; orderBy: string } {\n if (!options?.order || options.order.length === 0) {\n return { joins: '', orderBy: '' };\n }\n\n const joins = options.order.map((termName, index) => {\n const column = ORDER_COLUMN[termName];\n const alias = `order_t${index}`;\n const direction = options.reverse ? ' DESC' : '';\n return {\n join: ` JOIN rdf_terms ${alias} ON ${alias}.id = idx.${column}`,\n order: `${alias}.value${direction}`,\n };\n });\n return {\n joins: joins.map((entry) => entry.join).join(''),\n orderBy: ` ORDER BY ${joins.map((entry) => entry.order).join(', ')}`,\n };\n }\n\n private chooseJoinStart(sources: Rdf3xJoinSource[]): Rdf3xJoinSource {\n if (sources.length === 0) {\n throw new Error('Rdf3x join requires at least one source');\n }\n return [...sources].sort((left, right) => this.compareJoinSources(left, right))[0];\n }\n\n private compareJoinSources(left: Rdf3xJoinSource, right: Rdf3xJoinSource): number {\n const leftResolved = left.resolved.unresolved ? Number.POSITIVE_INFINITY : left.estimate.matchingQuads;\n const rightResolved = right.resolved.unresolved ? Number.POSITIVE_INFINITY : right.estimate.matchingQuads;\n if (leftResolved !== rightResolved) {\n return leftResolved - rightResolved;\n }\n if (left.estimate.uniqueTriples !== right.estimate.uniqueTriples) {\n return left.estimate.uniqueTriples - right.estimate.uniqueTriples;\n }\n return left.inputIndex - right.inputIndex;\n }\n\n private estimateResolvedCardinality(resolved: Rdf3xResolvedPattern): Rdf3xCardinalityEstimate {\n const ids = resolved.ids;\n if (resolved.objectNumericRange) {\n return this.estimateNumericObjectRangeCardinality(resolved);\n }\n const termIds = TERM_KEYS.filter((key) => ids[key] !== undefined);\n if (ids.graph !== undefined || resolved.graphPrefix !== undefined) {\n return this.estimateResolvedMembershipCardinality(resolved);\n }\n if (termIds.length === 3) {\n return this.estimateExactTriple(ids, this.choosePermutation(ids).name);\n }\n if (termIds.length === 2) {\n return this.estimatePairProjection(ids, this.choosePermutation(ids).name);\n }\n if (termIds.length === 1) {\n return this.estimateTermProjection(ids, this.choosePermutation(ids).name);\n }\n return {\n uniqueTriples: this.rowCount('rdf3x_spo'),\n matchingQuads: this.rowCount('rdf3x_triple_membership'),\n source: 'full-count',\n indexChoice: this.choosePermutation(ids, { objectRange: Boolean(resolved.objectNumericRange) }).name,\n };\n }\n\n private resolveJoinPattern(pattern: QuintPattern): Rdf3xResolvedPattern {\n const ids: Partial<Record<Rdf3xPatternKey, number>> = {};\n let graphPrefix: string | undefined;\n let objectNumericRange: Rdf3xNumericRange | undefined;\n for (const key of ['graph', ...TERM_KEYS] as Rdf3xPatternKey[]) {\n const match = pattern[key];\n if (!match) {\n continue;\n }\n if (key === 'graph' && isGraphPrefixPattern(match)) {\n graphPrefix = match.$startsWith;\n continue;\n }\n if (key === 'object' && isNumericObjectRangePattern(match)) {\n const resolvedRange = this.resolveNumericObjectRange(match);\n if (!resolvedRange) {\n return { ids, graphPrefix, objectNumericRange: resolvedRange, unresolved: key };\n }\n objectNumericRange = resolvedRange;\n continue;\n }\n if (!isRdfTerm(match)) {\n return { ids, graphPrefix, unresolved: key };\n }\n const id = this.requireDictionary().find(match);\n if (id === undefined) {\n return { ids, graphPrefix, unresolved: key };\n }\n ids[key] = id;\n }\n return {\n ids,\n ...(graphPrefix !== undefined ? { graphPrefix } : {}),\n ...(objectNumericRange !== undefined ? { objectNumericRange } : {}),\n };\n }\n\n private joinMetrics(\n indexChoice: Rdf3xJoinMetrics['indexChoice'],\n matchedRows: number,\n returnedRows: number,\n start: number,\n queryPlan: string[],\n ): Rdf3xJoinMetrics {\n return {\n engine: 'solid-rdf3x',\n indexChoice,\n matchedRows,\n returnedRows,\n durationMs: Date.now() - start,\n queryPlan,\n };\n }\n\n private joinRowsToBindings(\n rows: Array<Record<string, number>>,\n variableAliases: Map<string, string>,\n ): Rdf3xJoinScanResult['bindings'] {\n const aliases = [...variableAliases.entries()];\n const termMap = this.requireDictionary().rowsForIds(rows.flatMap((row) => (\n aliases\n .map(([, alias]) => row[alias])\n .filter((id): id is number => typeof id === 'number')\n )));\n\n return rows.map((row) => {\n const binding: Rdf3xJoinScanResult['bindings'][number] = {};\n for (const [variableName, alias] of aliases) {\n const id = row[alias];\n if (typeof id !== 'number') {\n continue;\n }\n binding[variableName] = requiredTerm(termMap, id);\n }\n return binding;\n });\n }\n\n private buildPagination(options?: Rdf3xTripleScanOptions): { sql: string; params: unknown[] } {\n if (!options) {\n return { sql: '', params: [] };\n }\n\n const clauses: string[] = [];\n const params: unknown[] = [];\n if (options.limit !== undefined) {\n clauses.push('LIMIT ?');\n params.push(Math.max(0, options.limit));\n }\n if (options.offset !== undefined) {\n if (options.limit === undefined) {\n clauses.push('LIMIT -1');\n }\n clauses.push('OFFSET ?');\n params.push(Math.max(0, options.offset));\n }\n return {\n sql: clauses.length > 0 ? ` ${clauses.join(' ')}` : '',\n params,\n };\n }\n\n private estimateExactTriple(\n ids: Partial<Record<Rdf3xPatternKey, number>>,\n indexChoice: Rdf3xPermutationName,\n ): Rdf3xCardinalityEstimate {\n const row = this.requireDb().prepare<{ count: number }>(`\n SELECT COUNT(*) AS count\n FROM rdf3x_spo\n WHERE subject_id = ?\n AND predicate_id = ?\n AND object_id = ?\n `).get(ids.subject, ids.predicate, ids.object);\n const membership = this.requireDb().prepare<{ count: number }>(`\n SELECT COUNT(*) AS count\n FROM rdf3x_triple_membership\n WHERE subject_id = ?\n AND predicate_id = ?\n AND object_id = ?\n `).get(ids.subject, ids.predicate, ids.object);\n return {\n uniqueTriples: row?.count ?? 0,\n matchingQuads: membership?.count ?? 0,\n source: 'exact-triple',\n indexChoice,\n };\n }\n\n private estimatePairProjection(\n ids: Partial<Record<Rdf3xPatternKey, number>>,\n indexChoice: Rdf3xPermutationName,\n ): Rdf3xCardinalityEstimate {\n const projection = this.pairProjectionFor(ids);\n if (!projection) {\n return this.estimateMembershipCardinality(ids);\n }\n\n const [left, right] = projection.columns;\n const row = this.requireDb().prepare<{ triple_count: number; membership_count: number }>(`\n SELECT triple_count, membership_count\n FROM ${projection.table}\n WHERE ${left} = ?\n AND ${right} = ?\n `).get(\n ids[keyForColumn(left)],\n ids[keyForColumn(right)],\n );\n return {\n uniqueTriples: row?.triple_count ?? 0,\n matchingQuads: row?.membership_count ?? 0,\n source: 'projection-stat',\n indexChoice,\n };\n }\n\n private estimateTermProjection(\n ids: Partial<Record<Rdf3xPatternKey, number>>,\n indexChoice: Rdf3xPermutationName,\n ): Rdf3xCardinalityEstimate {\n const key = TERM_KEYS.find((candidate) => ids[candidate] !== undefined);\n if (!key) {\n return this.estimateMembershipCardinality(ids);\n }\n const projection = TERM_PROJECTIONS.find((candidate) => candidate.column === TERM_COLUMN[key]);\n if (!projection) {\n return this.estimateMembershipCardinality(ids);\n }\n\n const row = this.requireDb().prepare<{ triple_count: number; membership_count: number }>(`\n SELECT triple_count, membership_count\n FROM ${projection.table}\n WHERE ${projection.column} = ?\n `).get(ids[key]);\n return {\n uniqueTriples: row?.triple_count ?? 0,\n matchingQuads: row?.membership_count ?? 0,\n source: 'term-stat',\n indexChoice,\n };\n }\n\n private estimateMembershipCardinality(ids: Partial<Record<Rdf3xPatternKey, number>>): Rdf3xCardinalityEstimate {\n return this.estimateResolvedMembershipCardinality({ ids });\n }\n\n private estimateResolvedMembershipCardinality(resolved: Rdf3xResolvedPattern): Rdf3xCardinalityEstimate {\n const { joins, whereClause, params } = this.buildMembershipWhere(resolved);\n const matchingQuads = this.requireDb().prepare<{ count: number }>(`\n SELECT COUNT(*) AS count\n FROM rdf3x_triple_membership\n ${joins}\n ${whereClause}\n `).get(...params)?.count ?? 0;\n const uniqueTriples = this.requireDb().prepare<{ count: number }>(`\n SELECT COUNT(*) AS count\n FROM (\n SELECT DISTINCT subject_id, predicate_id, object_id\n FROM rdf3x_triple_membership\n ${joins}\n ${whereClause}\n ) distinct_triples\n `).get(...params)?.count ?? 0;\n return {\n uniqueTriples,\n matchingQuads,\n source: 'exact-membership',\n indexChoice: 'source-membership',\n };\n }\n\n private buildMembershipWhere(resolved: Rdf3xResolvedPattern): { joins: string; whereClause: string; params: unknown[] } {\n const ids = resolved.ids;\n const conditions: string[] = [];\n const params: unknown[] = [];\n for (const key of ['graph', ...TERM_KEYS] as Rdf3xPatternKey[]) {\n const id = ids[key];\n if (id === undefined) {\n continue;\n }\n conditions.push(`${PATTERN_COLUMNS[key]} = ?`);\n params.push(id);\n }\n const joins = resolved.graphPrefix !== undefined\n ? ` JOIN rdf_terms membership_graph_prefix\n ON membership_graph_prefix.id = rdf3x_triple_membership.graph_id`\n : '';\n if (resolved.graphPrefix !== undefined) {\n conditions.push(`membership_graph_prefix.kind = ?\n AND membership_graph_prefix.value >= ?\n AND membership_graph_prefix.value < ?`);\n params.push('iri', resolved.graphPrefix, `${resolved.graphPrefix}\\uffff`);\n }\n return {\n whereClause: conditions.length > 0 ? ` WHERE ${conditions.join(' AND ')}` : '',\n joins,\n params,\n };\n }\n\n private pairProjectionFor(ids: Partial<Record<Rdf3xPatternKey, number>>): Rdf3xPairProjection | undefined {\n const columns = TERM_KEYS\n .filter((key) => ids[key] !== undefined)\n .map((key) => TERM_COLUMN[key]);\n return PAIR_PROJECTIONS.find((projection) => (\n projection.columns.every((column) => columns.includes(column))\n ));\n }\n\n private resolvePattern(pattern: Rdf3xTriplePattern): Rdf3xResolvedPattern {\n const ids: Partial<Record<Rdf3xPatternKey, number>> = {};\n let graphPrefix: string | undefined;\n let objectNumericRange: Rdf3xNumericRange | undefined;\n for (const key of ['graph', ...TERM_KEYS] as Rdf3xPatternKey[]) {\n const term = pattern[key];\n if (!term) {\n continue;\n }\n if (key === 'graph' && isGraphPrefixPattern(term)) {\n graphPrefix = term.$startsWith;\n continue;\n }\n if (key === 'object' && isNumericObjectRangePattern(term)) {\n const resolvedRange = this.resolveNumericObjectRange(term);\n if (!resolvedRange) {\n return { ids, graphPrefix, objectNumericRange: resolvedRange, unresolved: key };\n }\n objectNumericRange = resolvedRange;\n continue;\n }\n if (key === 'graph' && !isRdfTerm(term)) {\n return { ids, graphPrefix, unresolved: key };\n }\n if (key !== 'graph' && !isRdfTerm(term)) {\n return { ids, graphPrefix, unresolved: key };\n }\n const rdfTerm = term as Term;\n const id = this.requireDictionary().find(rdfTerm);\n if (id === undefined) {\n return { ids, graphPrefix, unresolved: key };\n }\n ids[key] = id;\n }\n return {\n ids,\n ...(graphPrefix !== undefined ? { graphPrefix } : {}),\n ...(objectNumericRange !== undefined ? { objectNumericRange } : {}),\n };\n }\n\n private estimateNumericObjectRangeCardinality(resolved: Rdf3xResolvedPattern): Rdf3xCardinalityEstimate {\n const range = resolved.objectNumericRange;\n if (!range) {\n return this.estimateMembershipCardinality(resolved.ids);\n }\n const { joins, whereClause, params } = this.buildMembershipWhere({\n ids: resolved.ids,\n ...(resolved.graphPrefix !== undefined ? { graphPrefix: resolved.graphPrefix } : {}),\n });\n const numericConditions: string[] = ['object_numeric.kind = ?'];\n const numericParams: unknown[] = ['literal'];\n if (range.min !== undefined) {\n numericConditions.push(`object_numeric.numeric_value ${range.minInclusive ? '>=' : '>'} ?`);\n numericParams.push(range.min);\n }\n if (range.max !== undefined) {\n numericConditions.push(`object_numeric.numeric_value ${range.maxInclusive ? '<=' : '<'} ?`);\n numericParams.push(range.max);\n }\n const membershipWhere = whereClause\n ? `${whereClause} AND ${numericConditions.join(' AND ')}`\n : ` WHERE ${numericConditions.join(' AND ')}`;\n const matchingQuads = this.requireDb().prepare<{ count: number }>(`\n SELECT COUNT(*) AS count\n FROM rdf3x_triple_membership\n ${joins}\n JOIN rdf_terms object_numeric ON object_numeric.id = rdf3x_triple_membership.object_id\n ${membershipWhere}\n `).get(...params, ...numericParams)?.count ?? 0;\n const uniqueTriples = this.requireDb().prepare<{ count: number }>(`\n SELECT COUNT(*) AS count\n FROM (\n SELECT DISTINCT subject_id, predicate_id, object_id\n FROM rdf3x_triple_membership\n ${joins}\n JOIN rdf_terms object_numeric ON object_numeric.id = rdf3x_triple_membership.object_id\n ${membershipWhere}\n ) distinct_triples\n `).get(...params, ...numericParams)?.count ?? 0;\n return {\n uniqueTriples,\n matchingQuads,\n source: 'exact-membership',\n indexChoice: 'source-membership',\n };\n }\n\n private resolveNumericObjectRange(match: Rdf3xNumericObjectRangePattern): Rdf3xNumericRange | undefined {\n const range: Rdf3xNumericRange = {};\n let hasRange = false;\n for (const [operator, inclusive] of [\n ['$gt', false],\n ['$gte', true],\n ['$lt', false],\n ['$lte', true],\n ] as const) {\n const value = match[operator];\n if (value === undefined) {\n continue;\n }\n hasRange = true;\n const numericValue = this.numericValueForPattern(value);\n if (numericValue === undefined) {\n return undefined;\n }\n if (operator === '$gt' || operator === '$gte') {\n range.min = numericValue;\n range.minInclusive = inclusive;\n } else {\n range.max = numericValue;\n range.maxInclusive = inclusive;\n }\n }\n return hasRange ? range : undefined;\n }\n\n private numericValueForPattern(value: Term | string | number): number | undefined {\n if (typeof value === 'number') {\n return Number.isFinite(value) ? value : undefined;\n }\n if (typeof value === 'string') {\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : undefined;\n }\n if (value.termType !== 'Literal' || !isRdfNumericDatatype(value.datatype.value)) {\n return undefined;\n }\n const parsed = rdfNumericValue(value.value);\n return Number.isFinite(parsed) ? parsed : undefined;\n }\n\n private choosePermutation(\n ids: Partial<Record<Rdf3xPatternKey, number>>,\n constraints?: { objectRange?: boolean },\n ): Rdf3xPermutation {\n const has = (key: Rdf3xTermKey): boolean => ids[key] !== undefined;\n const hasObjectConstraint = has('object') || Boolean(constraints?.objectRange);\n if (has('subject') && has('predicate')) return this.permutation('SPO');\n if (has('subject') && hasObjectConstraint) return this.permutation('SOP');\n if (has('predicate') && has('subject')) return this.permutation('PSO');\n if (has('predicate') && hasObjectConstraint) return this.permutation('POS');\n if (hasObjectConstraint && has('subject')) return this.permutation('OSP');\n if (hasObjectConstraint && has('predicate')) return this.permutation('OPS');\n if (has('subject')) return this.permutation('SPO');\n if (has('predicate')) return this.permutation('PSO');\n if (hasObjectConstraint) return this.permutation('OSP');\n return this.permutation('SPO');\n }\n\n private permutation(name: Rdf3xPermutationName): Rdf3xPermutation {\n const permutation = PERMUTATIONS.find((candidate) => candidate.name === name);\n if (!permutation) {\n throw new Error(`Unknown RDF-3X permutation: ${name}`);\n }\n return permutation;\n }\n\n private rowsToQuads(rows: Rdf3xQuadIdRow[]): Quad[] {\n const termMap = this.requireDictionary().rowsForIds(rows.flatMap((row) => [\n row.graph_id,\n row.subject_id,\n row.predicate_id,\n row.object_id,\n ]));\n\n return rows.map((row) => DataFactory.quad(\n requiredTerm(termMap, row.subject_id) as any,\n requiredTerm(termMap, row.predicate_id) as any,\n requiredTerm(termMap, row.object_id) as any,\n requiredTerm(termMap, row.graph_id) as any,\n ));\n }\n\n private rowCount(table: string): number {\n return this.requireDb().prepare<{ count: number }>(`SELECT COUNT(*) AS count FROM ${table}`).get()?.count ?? 0;\n }\n\n private collectPageCount(): number {\n try {\n return this.requireDb().prepare<{ page_count: number }>('PRAGMA page_count').get()?.page_count ?? 0;\n } catch {\n return 0;\n }\n }\n\n private estimateDatabaseBytes(): number {\n const pageSize = this.estimatePageSize();\n const pageCount = this.collectPageCount();\n return pageSize * pageCount;\n }\n\n private estimateSpaceObjectsFromSchema(schemaRows: Array<{ name: string; type: string; tbl_name: string }>): RdfIndexSpaceObject[] {\n const pageSize = this.estimatePageSize();\n return schemaRows.map((object) => ({\n name: object.name,\n kind: rdf3xSpaceObjectKind(object.name, object.type, object.tbl_name),\n ...(object.tbl_name && object.tbl_name !== object.name ? { tableName: object.tbl_name } : {}),\n pages: 1,\n bytes: pageSize,\n estimated: true,\n }));\n }\n\n private estimatePageSize(): number {\n try {\n return this.requireDb().prepare<{ page_size: number }>('PRAGMA page_size').get()?.page_size ?? 4096;\n } catch {\n return 4096;\n }\n }\n\n private metrics(\n indexChoice: Rdf3xIndexMetrics['indexChoice'],\n matchedRows: number,\n returnedRows: number,\n start: number,\n queryPlan: string[],\n ): Rdf3xIndexMetrics {\n return {\n engine: 'solid-rdf3x',\n indexChoice,\n matchedRows,\n returnedRows,\n durationMs: Date.now() - start,\n queryPlan,\n };\n }\n\n private requireDb(): SqliteDatabase {\n if (!this.db) {\n throw new Error('Rdf3xTripleIndex is not open');\n }\n return this.db;\n }\n\n private requireDictionary(): RdfTermDictionary {\n if (!this.dictionary) {\n throw new Error('Rdf3xTripleIndex is not open');\n }\n return this.dictionary;\n }\n}\n\nfunction keyForColumn(column: TripleColumn): Rdf3xTermKey {\n if (column === 'subject_id') return 'subject';\n if (column === 'predicate_id') return 'predicate';\n return 'object';\n}\n\nfunction requiredTerm(termMap: Map<number, Term>, id: number): Term {\n const term = termMap.get(id);\n if (!term) {\n throw new Error(`RDF term not found while reading RDF-3X index: ${id}`);\n }\n return term;\n}\n\nfunction isRdfTerm(value: unknown): value is Term {\n return value !== null && typeof value === 'object' && 'termType' in value;\n}\n\nfunction pairProjectionRowTotal(rows: Record<Rdf3xPairProjectionName, number>): number {\n return Object.values(rows).reduce((sum, count) => sum + count, 0);\n}\n\nfunction termProjectionRowTotal(rows: Record<Rdf3xTermProjectionName, number>): number {\n return Object.values(rows).reduce((sum, count) => sum + count, 0);\n}\n\nfunction sumSpaceObjects(objects: RdfIndexSpaceObject[], kind: RdfIndexSpaceObject['kind']): number {\n return objects\n .filter((object) => object.kind === kind)\n .reduce((sum, object) => sum + object.bytes, 0);\n}\n\nfunction rdf3xSpaceObjectKind(name: string, schemaType?: string, tableName?: string): RdfIndexSpaceObject['kind'] {\n if (schemaType === 'table' && name.startsWith('rdf3x_')) {\n return 'table';\n }\n if (schemaType === 'index' && (name.startsWith('rdf3x_') || tableName?.startsWith('rdf3x_'))) {\n return 'index';\n }\n if (name.startsWith('sqlite_')) {\n return 'internal';\n }\n return 'unknown';\n}\n\nfunction isGraphPrefixPattern(value: unknown): value is { $startsWith: string } {\n return value !== null\n && typeof value === 'object'\n && '$startsWith' in value\n && typeof (value as { $startsWith?: unknown }).$startsWith === 'string';\n}\n\nfunction isNumericObjectRangePattern(value: unknown): value is Rdf3xNumericObjectRangePattern {\n return value !== null\n && typeof value === 'object'\n && !('termType' in value)\n && ['$gt', '$gte', '$lt', '$lte'].some((operator) => operator in value);\n}\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare function normalizeContentType(contentType: string | undefined): string | undefined;
|
|
2
|
+
export declare function rdfContentTypeForPath(filePath: string): string | undefined;
|
|
3
|
+
export declare function isLineAddressableRdfContentType(contentType: string | undefined): boolean;
|
|
4
|
+
export declare function isLineAddressableRdfPath(filePath: string): boolean;
|
|
5
|
+
export declare function isLineAddressableRdf(contentType: string | undefined, filePath?: string): boolean;
|
|
6
|
+
export declare function isRdfDocumentContentType(contentType: string | undefined): boolean;
|
|
7
|
+
export declare function isRdfDocumentPath(filePath: string): boolean;
|
|
8
|
+
export declare function isRdfDocument(contentType: string | undefined, filePath?: string): boolean;
|
|
9
|
+
export declare function isSafeRdfDocumentContentType(contentType: string | undefined): boolean;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.normalizeContentType = normalizeContentType;
|
|
4
|
+
exports.rdfContentTypeForPath = rdfContentTypeForPath;
|
|
5
|
+
exports.isLineAddressableRdfContentType = isLineAddressableRdfContentType;
|
|
6
|
+
exports.isLineAddressableRdfPath = isLineAddressableRdfPath;
|
|
7
|
+
exports.isLineAddressableRdf = isLineAddressableRdf;
|
|
8
|
+
exports.isRdfDocumentContentType = isRdfDocumentContentType;
|
|
9
|
+
exports.isRdfDocumentPath = isRdfDocumentPath;
|
|
10
|
+
exports.isRdfDocument = isRdfDocument;
|
|
11
|
+
exports.isSafeRdfDocumentContentType = isSafeRdfDocumentContentType;
|
|
12
|
+
const CONTENT_TYPE_BY_EXTENSION = {
|
|
13
|
+
'.ttl': 'text/turtle',
|
|
14
|
+
'.jsonld': 'application/ld+json',
|
|
15
|
+
'.nt': 'application/n-triples',
|
|
16
|
+
'.nq': 'application/n-quads',
|
|
17
|
+
'.trig': 'application/trig',
|
|
18
|
+
'.n3': 'text/n3',
|
|
19
|
+
'.rdf': 'application/rdf+xml',
|
|
20
|
+
'.rdfs': 'application/rdf+xml',
|
|
21
|
+
'.owl': 'application/rdf+xml',
|
|
22
|
+
};
|
|
23
|
+
const LINE_ADDRESSABLE_RDF_TYPES = new Set([
|
|
24
|
+
'text/turtle',
|
|
25
|
+
'application/ld+json',
|
|
26
|
+
'application/n-triples',
|
|
27
|
+
'application/n-quads',
|
|
28
|
+
'application/trig',
|
|
29
|
+
'text/n3',
|
|
30
|
+
]);
|
|
31
|
+
const SAFE_RDF_TYPES = new Set([
|
|
32
|
+
...LINE_ADDRESSABLE_RDF_TYPES,
|
|
33
|
+
'application/rdf+xml',
|
|
34
|
+
]);
|
|
35
|
+
function normalizeContentType(contentType) {
|
|
36
|
+
return contentType?.split(';', 1)[0]?.trim().toLowerCase() || undefined;
|
|
37
|
+
}
|
|
38
|
+
function rdfContentTypeForPath(filePath) {
|
|
39
|
+
const pathname = pathnameFromPathOrUrl(filePath).toLowerCase();
|
|
40
|
+
const extension = Object.keys(CONTENT_TYPE_BY_EXTENSION)
|
|
41
|
+
.find((candidate) => pathname.endsWith(candidate));
|
|
42
|
+
return extension ? CONTENT_TYPE_BY_EXTENSION[extension] : undefined;
|
|
43
|
+
}
|
|
44
|
+
function isLineAddressableRdfContentType(contentType) {
|
|
45
|
+
const normalized = normalizeContentType(contentType);
|
|
46
|
+
return Boolean(normalized && LINE_ADDRESSABLE_RDF_TYPES.has(normalized));
|
|
47
|
+
}
|
|
48
|
+
function isLineAddressableRdfPath(filePath) {
|
|
49
|
+
const contentType = rdfContentTypeForPath(filePath);
|
|
50
|
+
return Boolean(contentType && LINE_ADDRESSABLE_RDF_TYPES.has(contentType));
|
|
51
|
+
}
|
|
52
|
+
function isLineAddressableRdf(contentType, filePath) {
|
|
53
|
+
return isLineAddressableRdfContentType(contentType)
|
|
54
|
+
|| Boolean(filePath && isLineAddressableRdfPath(filePath));
|
|
55
|
+
}
|
|
56
|
+
function isRdfDocumentContentType(contentType) {
|
|
57
|
+
const normalized = normalizeContentType(contentType);
|
|
58
|
+
return Boolean(normalized && SAFE_RDF_TYPES.has(normalized));
|
|
59
|
+
}
|
|
60
|
+
function isRdfDocumentPath(filePath) {
|
|
61
|
+
const contentType = rdfContentTypeForPath(filePath);
|
|
62
|
+
return Boolean(contentType && SAFE_RDF_TYPES.has(contentType));
|
|
63
|
+
}
|
|
64
|
+
function isRdfDocument(contentType, filePath) {
|
|
65
|
+
return isRdfDocumentContentType(contentType)
|
|
66
|
+
|| Boolean(filePath && isRdfDocumentPath(filePath));
|
|
67
|
+
}
|
|
68
|
+
function isSafeRdfDocumentContentType(contentType) {
|
|
69
|
+
return isRdfDocumentContentType(contentType);
|
|
70
|
+
}
|
|
71
|
+
function pathnameFromPathOrUrl(input) {
|
|
72
|
+
try {
|
|
73
|
+
return new URL(input).pathname;
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
return input;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=RdfContentTypes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RdfContentTypes.js","sourceRoot":"","sources":["../../../src/storage/rdf/RdfContentTypes.ts"],"names":[],"mappings":"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","sourcesContent":["const CONTENT_TYPE_BY_EXTENSION: Record<string, string> = {\n '.ttl': 'text/turtle',\n '.jsonld': 'application/ld+json',\n '.nt': 'application/n-triples',\n '.nq': 'application/n-quads',\n '.trig': 'application/trig',\n '.n3': 'text/n3',\n '.rdf': 'application/rdf+xml',\n '.rdfs': 'application/rdf+xml',\n '.owl': 'application/rdf+xml',\n};\n\nconst LINE_ADDRESSABLE_RDF_TYPES = new Set([\n 'text/turtle',\n 'application/ld+json',\n 'application/n-triples',\n 'application/n-quads',\n 'application/trig',\n 'text/n3',\n]);\n\nconst SAFE_RDF_TYPES = new Set([\n ...LINE_ADDRESSABLE_RDF_TYPES,\n 'application/rdf+xml',\n]);\n\nexport function normalizeContentType(contentType: string | undefined): string | undefined {\n return contentType?.split(';', 1)[0]?.trim().toLowerCase() || undefined;\n}\n\nexport function rdfContentTypeForPath(filePath: string): string | undefined {\n const pathname = pathnameFromPathOrUrl(filePath).toLowerCase();\n const extension = Object.keys(CONTENT_TYPE_BY_EXTENSION)\n .find((candidate) => pathname.endsWith(candidate));\n return extension ? CONTENT_TYPE_BY_EXTENSION[extension] : undefined;\n}\n\nexport function isLineAddressableRdfContentType(contentType: string | undefined): boolean {\n const normalized = normalizeContentType(contentType);\n return Boolean(normalized && LINE_ADDRESSABLE_RDF_TYPES.has(normalized));\n}\n\nexport function isLineAddressableRdfPath(filePath: string): boolean {\n const contentType = rdfContentTypeForPath(filePath);\n return Boolean(contentType && LINE_ADDRESSABLE_RDF_TYPES.has(contentType));\n}\n\nexport function isLineAddressableRdf(contentType: string | undefined, filePath?: string): boolean {\n return isLineAddressableRdfContentType(contentType)\n || Boolean(filePath && isLineAddressableRdfPath(filePath));\n}\n\nexport function isRdfDocumentContentType(contentType: string | undefined): boolean {\n const normalized = normalizeContentType(contentType);\n return Boolean(normalized && SAFE_RDF_TYPES.has(normalized));\n}\n\nexport function isRdfDocumentPath(filePath: string): boolean {\n const contentType = rdfContentTypeForPath(filePath);\n return Boolean(contentType && SAFE_RDF_TYPES.has(contentType));\n}\n\nexport function isRdfDocument(contentType: string | undefined, filePath?: string): boolean {\n return isRdfDocumentContentType(contentType)\n || Boolean(filePath && isRdfDocumentPath(filePath));\n}\n\nexport function isSafeRdfDocumentContentType(contentType: string | undefined): boolean {\n return isRdfDocumentContentType(contentType);\n}\n\nfunction pathnameFromPathOrUrl(input: string): string {\n try {\n return new URL(input).pathname;\n } catch {\n return input;\n }\n}\n"]}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { RdfQuadIndex } from './RdfQuadIndex';
|
|
2
|
+
import type { RdfTextIndex } from './RdfTextIndex';
|
|
3
|
+
import type { RdfVectorIndex } from './RdfVectorIndex';
|
|
4
|
+
import type { RdfLocalQuery, RdfLocalQueryResult, RdfQueryVariable } from './types';
|
|
5
|
+
export declare class RdfLocalQueryEngine {
|
|
6
|
+
private readonly index;
|
|
7
|
+
private readonly textIndex?;
|
|
8
|
+
private readonly vectorIndex?;
|
|
9
|
+
constructor(index: RdfQuadIndex, textIndex?: RdfTextIndex | undefined, vectorIndex?: RdfVectorIndex | undefined);
|
|
10
|
+
query(query: RdfLocalQuery): RdfLocalQueryResult;
|
|
11
|
+
private chooseRequiredSourceIndex;
|
|
12
|
+
private estimatePatternRows;
|
|
13
|
+
private estimatePatternRowsByDistinctFanout;
|
|
14
|
+
private boundPatternSlots;
|
|
15
|
+
private estimateSourceRows;
|
|
16
|
+
private estimateTuplePatternRows;
|
|
17
|
+
private searchSourceHasBoundVariables;
|
|
18
|
+
private estimateSearchRowsByBoundSource;
|
|
19
|
+
private estimateTextSearchRows;
|
|
20
|
+
private estimateVectorSearchRows;
|
|
21
|
+
private boundVariables;
|
|
22
|
+
private patternRank;
|
|
23
|
+
private sourceRank;
|
|
24
|
+
private joinRequiredSource;
|
|
25
|
+
private joinOptionalGroup;
|
|
26
|
+
private joinUnionGroup;
|
|
27
|
+
private applyDependentValues;
|
|
28
|
+
private applyMinusGroup;
|
|
29
|
+
private applyExistsGroup;
|
|
30
|
+
private joinPattern;
|
|
31
|
+
private requiredBgpPushdown;
|
|
32
|
+
private requiredBgpDistinctProject;
|
|
33
|
+
private canPushRequiredBgpFilters;
|
|
34
|
+
private canPushRequiredBgpOrder;
|
|
35
|
+
private reorderJoinPatterns;
|
|
36
|
+
private compileJoinPattern;
|
|
37
|
+
private tupleValuesForBinding;
|
|
38
|
+
private joinTextSearch;
|
|
39
|
+
private joinVectorSearch;
|
|
40
|
+
private joinTextSearchByBoundSource;
|
|
41
|
+
private joinVectorSearchByBoundSource;
|
|
42
|
+
private canUseBoundSourceSearch;
|
|
43
|
+
private textSearchResults;
|
|
44
|
+
private vectorSearchResults;
|
|
45
|
+
private textSearchOptions;
|
|
46
|
+
private vectorSearchOptions;
|
|
47
|
+
private applyBinds;
|
|
48
|
+
private evaluateBindExpression;
|
|
49
|
+
private singleScanPushdown;
|
|
50
|
+
private countPushdown;
|
|
51
|
+
private joinCountPushdown;
|
|
52
|
+
private joinBasicAggregatePushdown;
|
|
53
|
+
private canPushAggregateFilters;
|
|
54
|
+
private hasNumericAggregateGuards;
|
|
55
|
+
private groupAggregatePushdown;
|
|
56
|
+
private groupAggregateHavingPushdown;
|
|
57
|
+
private distinctCountKey;
|
|
58
|
+
private scanOrderForPattern;
|
|
59
|
+
private canPushAllFiltersForPattern;
|
|
60
|
+
private requiredFiltersNeedingPostApply;
|
|
61
|
+
private canElideRequiredPatternFilterRechecks;
|
|
62
|
+
private compilePattern;
|
|
63
|
+
private bindQuad;
|
|
64
|
+
private countBindings;
|
|
65
|
+
private aggregateBindings;
|
|
66
|
+
private groupAggregateBindings;
|
|
67
|
+
private aggregateLiteral;
|
|
68
|
+
private numericAggregateValues;
|
|
69
|
+
private compilePushdownFilter;
|
|
70
|
+
private compilePushdownFilterWithIndexes;
|
|
71
|
+
private matchesNewlyBoundFilters;
|
|
72
|
+
private matchesFilters;
|
|
73
|
+
private matchesFilter;
|
|
74
|
+
private compareVariableFilter;
|
|
75
|
+
}
|
|
76
|
+
export declare function variable(variableName: string): RdfQueryVariable;
|