@undefineds.co/xpod 0.3.18 → 0.3.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/config/bun.json +57 -11
- package/config/cloud.json +14 -12
- package/config/local.json +16 -14
- package/config/xpod.json +47 -9
- package/dist/api/matrix/PodMatrixStore.d.ts +4 -7
- package/dist/api/matrix/PodMatrixStore.js +116 -148
- package/dist/api/matrix/PodMatrixStore.js.map +1 -1
- package/dist/api/matrix/types.d.ts +2 -0
- package/dist/api/matrix/types.js.map +1 -1
- package/dist/components/components.jsonld +3 -0
- package/dist/components/context.jsonld +71 -32
- package/dist/http/SubgraphSparqlHttpHandler.d.ts +1 -0
- package/dist/http/SubgraphSparqlHttpHandler.js +27 -4
- package/dist/http/SubgraphSparqlHttpHandler.js.map +1 -1
- package/dist/http/SubgraphSparqlHttpHandler.jsonld +4 -0
- package/dist/http/vector/VectorHttpHandler.d.ts +5 -1
- package/dist/http/vector/VectorHttpHandler.js +5 -5
- package/dist/http/vector/VectorHttpHandler.js.map +1 -1
- package/dist/http/vector/VectorHttpHandler.jsonld +40 -28
- package/dist/index.d.ts +5 -2
- package/dist/index.js +9 -4
- package/dist/index.js.map +1 -1
- package/dist/runtime/Proxy.d.ts +3 -0
- package/dist/runtime/Proxy.js +31 -7
- package/dist/runtime/Proxy.js.map +1 -1
- package/dist/storage/SparqlUpdateResourceStore.js +94 -33
- package/dist/storage/SparqlUpdateResourceStore.js.map +1 -1
- package/dist/storage/accessors/MixDataAccessor.d.ts +22 -5
- package/dist/storage/accessors/MixDataAccessor.js +376 -61
- package/dist/storage/accessors/MixDataAccessor.js.map +1 -1
- package/dist/storage/accessors/MixDataAccessor.jsonld +73 -5
- package/dist/storage/accessors/QuadstoreSparqlDataAccessor.js +32 -10
- package/dist/storage/accessors/QuadstoreSparqlDataAccessor.js.map +1 -1
- package/dist/storage/accessors/QuintStoreSparqlDataAccessor.js +28 -6
- package/dist/storage/accessors/QuintStoreSparqlDataAccessor.js.map +1 -1
- package/dist/storage/accessors/SolidRdfDataAccessor.d.ts +45 -0
- package/dist/storage/accessors/SolidRdfDataAccessor.js +277 -0
- package/dist/storage/accessors/SolidRdfDataAccessor.js.map +1 -0
- package/dist/storage/accessors/SolidRdfDataAccessor.jsonld +161 -0
- package/dist/storage/rdf/Rdf3xIndex.d.ts +122 -0
- package/dist/storage/rdf/Rdf3xIndex.js +2695 -0
- package/dist/storage/rdf/Rdf3xIndex.js.map +1 -0
- package/dist/storage/rdf/Rdf3xIndex.jsonld +528 -0
- package/dist/storage/rdf/Rdf3xSchema.d.ts +20 -0
- package/dist/storage/rdf/Rdf3xSchema.js +65 -0
- package/dist/storage/rdf/Rdf3xSchema.js.map +1 -0
- package/dist/storage/rdf/RdfLocalQueryEngine.d.ts +10 -4
- package/dist/storage/rdf/RdfLocalQueryEngine.js +607 -127
- package/dist/storage/rdf/RdfLocalQueryEngine.js.map +1 -1
- package/dist/storage/rdf/RdfQuadIndex.d.ts +12 -1
- package/dist/storage/rdf/RdfQuadIndex.js +152 -22
- package/dist/storage/rdf/RdfQuadIndex.js.map +1 -1
- package/dist/storage/rdf/RdfQuadIndex.jsonld +36 -4
- package/dist/storage/rdf/RdfSparqlAdapter.d.ts +20 -2
- package/dist/storage/rdf/RdfSparqlAdapter.js +364 -40
- package/dist/storage/rdf/RdfSparqlAdapter.js.map +1 -1
- package/dist/storage/rdf/RdfSparqlAdapter.jsonld +60 -0
- package/dist/storage/rdf/RdfTermDictionary.d.ts +8 -0
- package/dist/storage/rdf/RdfTermDictionary.js +141 -70
- package/dist/storage/rdf/RdfTermDictionary.js.map +1 -1
- package/dist/storage/rdf/RdfTermDictionary.jsonld +24 -0
- package/dist/storage/rdf/RdfTextIndex.js +10 -3
- package/dist/storage/rdf/RdfTextIndex.js.map +1 -1
- package/dist/storage/rdf/SolidRdfEngine.d.ts +15 -6
- package/dist/storage/rdf/SolidRdfEngine.js +218 -25
- package/dist/storage/rdf/SolidRdfEngine.js.map +1 -1
- package/dist/storage/rdf/SolidRdfEngine.jsonld +70 -7
- package/dist/storage/rdf/SolidRdfSparqlEngine.d.ts +11 -7
- package/dist/storage/rdf/SolidRdfSparqlEngine.js +60 -47
- package/dist/storage/rdf/SolidRdfSparqlEngine.js.map +1 -1
- package/dist/storage/rdf/SolidRdfSparqlEngine.jsonld +9 -5
- package/dist/storage/rdf/index.d.ts +2 -2
- package/dist/storage/rdf/index.js +3 -3
- package/dist/storage/rdf/index.js.map +1 -1
- package/dist/storage/rdf/models-benchmark.d.ts +12 -1
- package/dist/storage/rdf/models-benchmark.js +549 -32
- package/dist/storage/rdf/models-benchmark.js.map +1 -1
- package/dist/storage/rdf/types.d.ts +81 -7
- package/dist/storage/rdf/types.js.map +1 -1
- package/dist/storage/sparql/CompatibilitySparqlEngine.d.ts +36 -0
- package/dist/storage/sparql/CompatibilitySparqlEngine.js +96 -0
- package/dist/storage/sparql/CompatibilitySparqlEngine.js.map +1 -0
- package/dist/storage/sparql/CompatibilitySparqlEngine.jsonld +123 -0
- package/dist/storage/sparql/CompatibilitySparqlEngineImpl.d.ts +35 -0
- package/dist/storage/sparql/CompatibilitySparqlEngineImpl.js +112 -0
- package/dist/storage/sparql/CompatibilitySparqlEngineImpl.js.map +1 -0
- package/dist/storage/sparql/SubgraphQueryEngine.d.ts +1 -36
- package/dist/storage/sparql/SubgraphQueryEngine.js +2 -115
- package/dist/storage/sparql/SubgraphQueryEngine.js.map +1 -1
- package/dist/storage/sparql/SubgraphQueryEngine.jsonld +1 -124
- package/dist/terminal/AclPermissionService.d.ts +2 -1
- package/dist/terminal/AclPermissionService.js +26 -3
- package/dist/terminal/AclPermissionService.js.map +1 -1
- package/dist/terminal/TerminalSessionManager.js +25 -3
- package/dist/terminal/TerminalSessionManager.js.map +1 -1
- package/package.json +1 -1
- package/dist/storage/rdf/Rdf3xTripleIndex.d.ts +0 -55
- package/dist/storage/rdf/Rdf3xTripleIndex.js +0 -1235
- package/dist/storage/rdf/Rdf3xTripleIndex.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models-benchmark.js","sourceRoot":"","sources":["../../../src/storage/rdf/models-benchmark.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from 'node:crypto';\nimport { DataFactory } from 'n3';\nimport { termToId } from 'n3';\nimport type { Quad, Term } from '@rdfjs/types';\nimport type { QuintPattern, QueryOptions, QuintStore, StoreStats } from '../quint/types';\nimport { isTerm } from '../quint/types';\nimport type {\n Rdf3xJoinMetrics,\n Rdf3xIndexMetrics,\n Rdf3xIndexStats,\n Rdf3xNumericObjectRangePattern,\n Rdf3xTriplePattern,\n RdfBindingRow,\n RdfIndexMetrics,\n RdfIndexStats,\n RdfLocalQuery,\n RdfLocalQueryMetrics,\n RdfQuadJoinOptions,\n RdfQuadJoinPattern,\n RdfQueryPattern,\n RdfQueryPatternKey,\n RdfShadowDiff,\n} from './types';\nimport { canonicalQuadKey, diffQuads } from './RdfShadowComparator';\nimport type { SolidRdfEngine } from './SolidRdfEngine';\nimport { isRdfNumericDatatype, rdfNumericValue } from './RdfTermSemantics';\n\nconst { namedNode, literal } = DataFactory;\n\nexport type RdfBenchmarkScale = 'small' | 'medium' | 'large';\n\nexport const RDF_MODELS_SYNTHETIC_MESSAGE_QUADS = 4;\n\nconst RDF_MODELS_SCALE_TARGET_QUADS: Record<RdfBenchmarkScale, number> = {\n small: 48,\n medium: 10_000,\n large: 1_000_000,\n};\n\nconst RDF_MODELS_SYNTHETIC_POD_COUNTS: Record<RdfBenchmarkScale, number> = {\n small: 1,\n medium: 1,\n large: 4,\n};\n\nexport interface RdfModelBenchmarkCase {\n name: string;\n resource: string;\n purpose: string;\n minScale: RdfBenchmarkScale;\n query: {\n pattern: QuintPattern;\n options?: QueryOptions;\n };\n expectedPlan: string[];\n}\n\nexport interface RdfModelLocalQueryBenchmarkCase {\n name: string;\n resource: string;\n purpose: string;\n minScale: RdfBenchmarkScale;\n query: RdfLocalQuery;\n expectedPlan: string[];\n}\n\nexport interface RdfModelBenchmarkRunOptions {\n cases?: readonly RdfModelBenchmarkCase[];\n localQueryCases?: readonly RdfModelLocalQueryBenchmarkCase[];\n scale?: RdfBenchmarkScale;\n iterations?: number;\n}\n\nexport interface RdfModelBenchmarkResult {\n name: string;\n resource: string;\n purpose: string;\n minScale: RdfBenchmarkScale;\n query: {\n pattern: JsonPattern;\n options?: QueryOptions;\n };\n expectedPlan: string[];\n planMatched: boolean;\n missingPlan: string[];\n physicalPlan: string[];\n scannedRows: number;\n indexChoice: string;\n joinOrder: string[];\n fallbackReason: string | null;\n returnedRows: number;\n checksum: string;\n orderedChecksum: string;\n durationsMs: number[];\n p50DurationMs: number;\n p95DurationMs: number;\n metrics: RdfIndexMetrics;\n indexStats: RdfIndexStats;\n}\n\nexport interface RdfModelLocalQueryBenchmarkResult {\n name: string;\n resource: string;\n purpose: string;\n minScale: RdfBenchmarkScale;\n query: JsonPattern;\n expectedPlan: string[];\n planMatched: boolean;\n missingPlan: string[];\n physicalPlan: string[];\n scannedRows: number;\n indexChoices: string[];\n fallbackReason: string | null;\n returnedRows: number;\n checksum: string;\n orderedChecksum: string;\n durationsMs: number[];\n p50DurationMs: number;\n p95DurationMs: number;\n metrics: RdfLocalQueryMetrics;\n indexStats: RdfIndexStats;\n}\n\nexport interface RdfModelBenchmarkReport {\n engine: 'solid-rdf';\n scale: RdfBenchmarkScale;\n iterations: number;\n generatedAt: string;\n planMatched: boolean;\n failedPlanCases: string[];\n cases: RdfModelBenchmarkResult[];\n localQueryCases: RdfModelLocalQueryBenchmarkResult[];\n}\n\nexport interface RdfModelShadowBenchmarkRunOptions extends RdfModelBenchmarkRunOptions {}\n\nexport interface RdfModelShadowBenchmarkSide {\n returnedRows: number;\n checksum: string;\n orderedChecksum: string;\n durationsMs: number[];\n p50DurationMs: number;\n p95DurationMs: number;\n storeStats?: StoreStats;\n}\n\nexport interface RdfModelShadowPerformanceComparison {\n p95DeltaMs: number;\n p95Ratio: number;\n matched: boolean;\n}\n\nexport interface RdfModelShadowSpaceComparison {\n databaseDeltaBytes: number;\n tableDeltaBytes: number;\n indexDeltaBytes: number;\n databaseRatio: number;\n tableRatio: number;\n indexRatio: number;\n matched: boolean;\n unavailableReason?: string;\n}\n\nexport interface RdfModelShadowBenchmarkResult {\n name: string;\n resource: string;\n purpose: string;\n minScale: RdfBenchmarkScale;\n query: {\n pattern: JsonPattern;\n options?: QueryOptions;\n };\n expectedPlan: string[];\n planMatched: boolean;\n missingPlan: string[];\n matched: boolean;\n orderedMatch: boolean;\n diff: RdfShadowDiff;\n compatibility: RdfModelShadowBenchmarkSide;\n solidRdf: RdfModelShadowBenchmarkSide & {\n physicalPlan: string[];\n scannedRows: number;\n indexChoice: string;\n joinOrder: string[];\n fallbackReason: string | null;\n metrics: RdfIndexMetrics;\n indexStats: RdfIndexStats;\n };\n performance: RdfModelShadowPerformanceComparison;\n space: RdfModelShadowSpaceComparison;\n}\n\nexport interface RdfModelShadowBenchmarkReport {\n engine: 'shadow';\n compatibilityEngine: 'quint-store';\n candidateEngine: 'solid-rdf';\n scale: RdfBenchmarkScale;\n iterations: number;\n generatedAt: string;\n matched: boolean;\n orderedMatched: boolean;\n planMatched: boolean;\n spaceGateEnforced: boolean;\n performanceMatched: boolean;\n spaceMatched: boolean;\n failedPlanCases: string[];\n failedPerformanceCases: string[];\n failedSpaceCases: string[];\n cases: RdfModelShadowBenchmarkResult[];\n}\n\nexport interface RdfModelRdf3xShadowBenchmarkResult {\n name: string;\n resource: string;\n purpose: string;\n minScale: RdfBenchmarkScale;\n query: {\n pattern: JsonPattern;\n options?: QueryOptions;\n };\n supported: boolean;\n unsupportedReason?: string;\n matched: boolean;\n orderedMatch: boolean;\n diff: RdfShadowDiff;\n solidRdf: RdfModelShadowBenchmarkSide & {\n physicalPlan: string[];\n scannedRows: number;\n indexChoice: string;\n joinOrder: string[];\n fallbackReason: string | null;\n metrics: RdfIndexMetrics;\n indexStats: RdfIndexStats;\n };\n rdf3x?: RdfModelShadowBenchmarkSide & {\n physicalPlan: string[];\n scannedRows: number;\n indexChoice: string;\n joinOrder: string[];\n fallbackReason: string | null;\n metrics: Rdf3xIndexMetrics;\n indexStats: Rdf3xIndexStats;\n };\n}\n\nexport interface RdfModelRdf3xShadowJoinBenchmarkResult {\n name: string;\n resource: string;\n purpose: string;\n minScale: RdfBenchmarkScale;\n query: JsonPattern;\n supported: boolean;\n unsupportedReason?: string;\n matched: boolean;\n orderedMatch: boolean;\n diff: RdfShadowDiff;\n solidRdf: RdfModelShadowBenchmarkSide & {\n physicalPlan: string[];\n scannedRows: number;\n indexChoice: string;\n joinOrder: string[];\n fallbackReason: string | null;\n metrics: RdfIndexMetrics;\n indexStats: RdfIndexStats;\n };\n rdf3x?: RdfModelShadowBenchmarkSide & {\n physicalPlan: string[];\n scannedRows: number;\n indexChoice: string;\n joinOrder: string[];\n fallbackReason: string | null;\n metrics: Rdf3xJoinMetrics;\n indexStats: Rdf3xIndexStats;\n };\n}\n\nexport interface RdfModelRdf3xShadowBenchmarkReport {\n engine: 'rdf3x-shadow';\n primaryEngine: 'solid-rdf';\n candidateEngine: 'solid-rdf3x';\n scale: RdfBenchmarkScale;\n iterations: number;\n generatedAt: string;\n matched: boolean;\n orderedMatched: boolean;\n skippedCases: string[];\n skippedJoinCases: string[];\n failedCases: string[];\n failedJoinCases: string[];\n rebuild: {\n scannedQuads: number;\n uniqueTriples: number;\n memberships: number;\n projectionRows: number;\n durationMs: number;\n };\n cases: RdfModelRdf3xShadowBenchmarkResult[];\n joinCases: RdfModelRdf3xShadowJoinBenchmarkResult[];\n}\n\ninterface Rdf3xJoinBenchmarkShape {\n patterns: RdfQuadJoinPattern[];\n options?: RdfQuadJoinOptions;\n}\n\ntype JsonPattern = Record<string, unknown>;\n\nconst RDF_TYPE = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type';\nconst DCT_CREATED = 'http://purl.org/dc/terms/created';\nconst DCT_MODIFIED = 'http://purl.org/dc/terms/modified';\nconst DCT_TITLE = 'http://purl.org/dc/terms/title';\nconst SIOC_CONTENT = 'http://rdfs.org/sioc/ns#content';\nconst SIOC_HAS_MEMBER = 'http://rdfs.org/sioc/ns#has_member';\nconst UDFS = 'https://undefineds.co/ns#';\nconst MEETING = 'http://www.w3.org/ns/pim/meeting#';\nconst SIOC = 'http://rdfs.org/sioc/ns#';\nconst FOAF_AGENT = 'http://xmlns.com/foaf/0.1/Agent';\nconst VCARD_INDIVIDUAL = 'http://www.w3.org/2006/vcard/ns#Individual';\nconst SCHEMA_CREATIVE_WORK = 'http://schema.org/CreativeWork';\nconst PERFORMANCE_P95_MIN_ABSOLUTE_HEADROOM_MS = 25;\nconst PERFORMANCE_P95_MAX_RATIO = 8;\n\nexport const rdfModelsBenchmarkCases: readonly RdfModelBenchmarkCase[] = [\n {\n name: 'list chats',\n resource: 'chat',\n purpose: 'surface list with graph-scope and type filter',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(RDF_TYPE),\n object: namedNode(`${MEETING}LongChat`),\n graph: { $startsWith: 'https://pod.example/alice/.data/chat/' },\n },\n options: { order: ['subject'], limit: 50 },\n },\n expectedPlan: ['graph-scope', 'type-filter', 'limit'],\n },\n {\n name: 'list tasks',\n resource: 'task',\n purpose: 'task surface list with status/type filtering',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(RDF_TYPE),\n object: namedNode(`${UDFS}Task`),\n graph: { $startsWith: 'https://pod.example/alice/.data/task/' },\n },\n options: { order: ['subject'], limit: 50 },\n },\n expectedPlan: ['graph-scope', 'type-filter', 'limit'],\n },\n {\n name: 'list threads by chat',\n resource: 'thread',\n purpose: 'relation lookup under a chat index graph',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(RDF_TYPE),\n object: namedNode(`${SIOC}Thread`),\n graph: namedNode('https://pod.example/alice/.data/chat/default/index.ttl'),\n },\n options: { order: ['subject'], limit: 100 },\n },\n expectedPlan: ['graph-scope', 'type-filter', 'limit'],\n },\n {\n name: 'list threads by task',\n resource: 'thread',\n purpose: 'relation lookup under a task index graph',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(RDF_TYPE),\n object: namedNode(`${SIOC}Thread`),\n graph: namedNode('https://pod.example/alice/.data/task/default/index.ttl'),\n },\n options: { order: ['subject'], limit: 100 },\n },\n expectedPlan: ['graph-scope', 'type-filter', 'limit'],\n },\n {\n name: 'list messages by thread',\n resource: 'message',\n purpose: 'date-bucketed message lookup through thread inverse membership',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(SIOC_HAS_MEMBER),\n graph: { $startsWith: 'https://pod.example/alice/.data/chat/default/2026/05/' },\n },\n options: { order: ['subject'], limit: 100 },\n },\n expectedPlan: ['graph-scope', 'predicate-filter', 'limit'],\n },\n {\n name: 'latest message',\n resource: 'message',\n purpose: 'ORDER BY + LIMIT over message date bucket',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(DCT_CREATED),\n graph: { $startsWith: 'https://pod.example/alice/.data/chat/default/' },\n },\n options: { order: ['object'], reverse: true, limit: 1 },\n },\n expectedPlan: ['graph-scope', 'predicate-filter', 'order', 'limit'],\n },\n {\n name: 'latest run',\n resource: 'run',\n purpose: 'ORDER BY + LIMIT over date-bucketed run documents',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(DCT_CREATED),\n graph: { $startsWith: 'https://pod.example/alice/.data/task/default/' },\n },\n options: { order: ['object'], reverse: true, limit: 1 },\n },\n expectedPlan: ['graph-scope', 'predicate-filter', 'order', 'limit'],\n },\n {\n name: 'pending runs',\n resource: 'run',\n purpose: 'status filter for scheduler and state center',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(`${UDFS}status`),\n object: literal('queued'),\n graph: { $startsWith: 'https://pod.example/alice/.data/task/' },\n },\n options: { order: ['subject'], limit: 100 },\n },\n expectedPlan: ['graph-scope', 'predicate-object-filter', 'limit'],\n },\n {\n name: 'running runs',\n resource: 'run',\n purpose: 'status filter for active runtime execution',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(`${UDFS}status`),\n object: literal('running'),\n graph: { $startsWith: 'https://pod.example/alice/.data/task/' },\n },\n options: { order: ['subject'], limit: 100 },\n },\n expectedPlan: ['graph-scope', 'predicate-object-filter', 'limit'],\n },\n {\n name: 'runs by workspace',\n resource: 'run',\n purpose: 'workspace relation filter for runtime placement and steering',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(`${UDFS}workspace`),\n object: namedNode('file://macbook.local/Users/alice/project/'),\n graph: { $startsWith: 'https://pod.example/alice/.data/task/default/' },\n },\n options: { order: ['subject'], limit: 100 },\n },\n expectedPlan: ['graph-scope', 'predicate-object-filter', 'limit'],\n },\n {\n name: 'runs by numeric priority',\n resource: 'run',\n purpose: 'typed numeric literal range filter for scheduler priority queues',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(`${UDFS}priority`),\n object: { $gt: literal('9', namedNode('http://www.w3.org/2001/XMLSchema#integer')) },\n graph: { $startsWith: 'https://pod.example/alice/.data/task/' },\n },\n options: { order: ['subject'], limit: 100 },\n },\n expectedPlan: ['graph-scope', 'predicate-object-range-filter', 'limit'],\n },\n {\n name: 'run with steps',\n resource: 'runStep',\n purpose: 'one-to-many run-step relation lookup',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(`${UDFS}run`),\n graph: { $startsWith: 'https://pod.example/alice/.data/task/default/2026/05/' },\n },\n options: { order: ['subject'], limit: 200 },\n },\n expectedPlan: ['graph-scope', 'predicate-filter', 'limit'],\n },\n {\n name: 'task materialization due time',\n resource: 'schedule',\n purpose: 'schedule due-time candidate lookup',\n minScale: 'medium',\n query: {\n pattern: {\n predicate: namedNode(`${UDFS}nextRunAt`),\n object: { $lte: literal('2026-05-18T01:30:00.000Z') },\n graph: { $startsWith: 'https://pod.example/alice/.data/task/' },\n },\n options: { order: ['object'], limit: 100 },\n },\n expectedPlan: ['graph-scope', 'predicate-object-range-filter', 'order', 'limit'],\n },\n {\n name: 'search message literals',\n resource: 'message',\n purpose: 'literal/text index candidate that reconnects to RDF subjects',\n minScale: 'medium',\n query: {\n pattern: {\n predicate: namedNode(SIOC_CONTENT),\n object: { $contains: 'searchable' },\n graph: { $startsWith: 'https://pod.example/alice/.data/chat/' },\n },\n options: { order: ['subject'], limit: 50 },\n },\n expectedPlan: ['text-index', 'rdf-subject-join'],\n },\n {\n name: 'load by exact id',\n resource: 'any',\n purpose: 'base-relative id expands to exact subject IRI',\n minScale: 'small',\n query: {\n pattern: {\n subject: namedNode('https://pod.example/alice/.data/chat/default/index.ttl#this'),\n },\n },\n expectedPlan: ['SPOG'],\n },\n {\n name: 'acl graph prefix scoped query',\n resource: 'any',\n purpose: 'scope filter must avoid unbounded full-pod scans',\n minScale: 'medium',\n query: {\n pattern: {\n graph: { $startsWith: 'https://pod.example/alice/.data/chat/default/' },\n predicate: namedNode(DCT_MODIFIED),\n },\n options: { order: ['subject'], limit: 100 },\n },\n expectedPlan: ['graph-scope', 'predicate-filter', 'limit'],\n },\n {\n name: 'list providers',\n resource: 'aiProvider',\n purpose: 'AI provider settings list and provider/model relation baseline',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(RDF_TYPE),\n object: namedNode(`${UDFS}Provider`),\n graph: { $startsWith: 'https://pod.example/alice/settings/providers/' },\n },\n },\n expectedPlan: ['graph-scope', 'type-filter'],\n },\n {\n name: 'models by provider',\n resource: 'aiModel',\n purpose: 'AI model lookup by provider relation',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(`${UDFS}isProvidedBy`),\n object: namedNode('https://pod.example/alice/settings/providers/anthropic.ttl'),\n },\n },\n expectedPlan: ['POSG'],\n },\n {\n name: 'credentials by provider',\n resource: 'credential',\n purpose: 'credential lookup by provider relation',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(`${UDFS}provider`),\n object: namedNode('https://pod.example/alice/settings/providers/anthropic.ttl'),\n },\n },\n expectedPlan: ['POSG'],\n },\n {\n name: 'list agents',\n resource: 'agent',\n purpose: 'agent identity list under the shared models agent resource base',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(RDF_TYPE),\n object: namedNode(FOAF_AGENT),\n graph: { $startsWith: 'https://pod.example/alice/.data/agents/' },\n },\n options: { order: ['subject'], limit: 50 },\n },\n expectedPlan: ['graph-scope', 'type-filter', 'limit'],\n },\n {\n name: 'list contacts',\n resource: 'contact',\n purpose: 'contact index list under the shared models contact resource base',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(RDF_TYPE),\n object: namedNode(VCARD_INDIVIDUAL),\n graph: { $startsWith: 'https://pod.example/alice/.data/contacts/' },\n },\n options: { order: ['subject'], limit: 50 },\n },\n expectedPlan: ['graph-scope', 'type-filter', 'limit'],\n },\n {\n name: 'list favorites',\n resource: 'favorite',\n purpose: 'favorite list over date-bucketed favorite documents',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(RDF_TYPE),\n object: namedNode(SCHEMA_CREATIVE_WORK),\n graph: { $startsWith: 'https://pod.example/alice/.data/favorites/' },\n },\n options: { order: ['subject'], limit: 50 },\n },\n expectedPlan: ['graph-scope', 'type-filter', 'limit'],\n },\n];\n\nexport const rdfModelsLocalQueryBenchmarkCases: readonly RdfModelLocalQueryBenchmarkCase[] = [\n {\n name: 'latest message by thread local query',\n resource: 'message',\n purpose: 'date-bucketed message timeline keeps ORDER BY/LIMIT inside SQL self-join',\n minScale: 'small',\n query: {\n patterns: [\n {\n subject: { variable: 'message' },\n predicate: namedNode(SIOC_HAS_MEMBER),\n object: namedNode('https://pod.example/alice/.data/chat/default/index.ttl#thread_1'),\n },\n {\n graph: { $startsWith: 'https://pod.example/alice/.data/chat/default/' },\n subject: { variable: 'message' },\n predicate: namedNode(DCT_CREATED),\n object: { variable: 'createdAt' },\n },\n ],\n select: ['message', 'createdAt'],\n orderBy: [\n {\n variable: 'createdAt',\n direction: 'desc',\n },\n ],\n limit: 1,\n },\n expectedPlan: ['join-index', 'join-order-pushdown', 'join-limit-pushdown'],\n },\n {\n name: 'next queued run by workspace local query',\n resource: 'run',\n purpose: 'run state center scheduler query keeps status/workspace/date joins in SQL before LIMIT',\n minScale: 'small',\n query: {\n patterns: [\n {\n graph: { $startsWith: 'https://pod.example/alice/.data/task/default/' },\n subject: { variable: 'run' },\n predicate: namedNode(`${UDFS}status`),\n object: literal('queued'),\n },\n {\n graph: { $startsWith: 'https://pod.example/alice/.data/task/default/' },\n subject: { variable: 'run' },\n predicate: namedNode(`${UDFS}workspace`),\n object: namedNode('file://macbook.local/Users/alice/project/'),\n },\n {\n graph: { $startsWith: 'https://pod.example/alice/.data/task/default/' },\n subject: { variable: 'run' },\n predicate: namedNode(DCT_CREATED),\n object: { variable: 'createdAt' },\n },\n ],\n select: ['run', 'createdAt'],\n orderBy: [\n {\n variable: 'createdAt',\n direction: 'asc',\n },\n ],\n limit: 1,\n },\n expectedPlan: ['join-index', 'join-order-pushdown', 'join-limit-pushdown'],\n },\n {\n name: 'run steps by run local query',\n resource: 'runStep',\n purpose: 'one-to-many run-step lookup keeps type and run relation in SQL self-join',\n minScale: 'small',\n query: {\n patterns: [\n {\n graph: { $startsWith: 'https://pod.example/alice/.data/task/default/2026/05/' },\n subject: { variable: 'step' },\n predicate: namedNode(RDF_TYPE),\n object: namedNode(`${UDFS}RunStep`),\n },\n {\n graph: { $startsWith: 'https://pod.example/alice/.data/task/default/2026/05/' },\n subject: { variable: 'step' },\n predicate: namedNode(`${UDFS}run`),\n object: namedNode('https://pod.example/alice/.data/task/default/2026/05/18/runs.ttl#run_1'),\n },\n ],\n select: ['step'],\n orderBy: [\n {\n variable: 'step',\n direction: 'asc',\n },\n ],\n limit: 50,\n },\n expectedPlan: ['join-index', 'join-order-pushdown', 'join-limit-pushdown'],\n },\n {\n name: 'task materialization active due local query',\n resource: 'schedule',\n purpose: 'task scheduler materialization keeps active status and due-time filter in SQL self-join',\n minScale: 'small',\n query: {\n patterns: [\n {\n graph: { $startsWith: 'https://pod.example/alice/.data/task/default/' },\n subject: { variable: 'schedule' },\n predicate: namedNode(RDF_TYPE),\n object: namedNode(`${UDFS}Schedule`),\n },\n {\n graph: { $startsWith: 'https://pod.example/alice/.data/task/default/' },\n subject: { variable: 'schedule' },\n predicate: namedNode(`${UDFS}status`),\n object: literal('active'),\n },\n {\n graph: { $startsWith: 'https://pod.example/alice/.data/task/default/' },\n subject: { variable: 'schedule' },\n predicate: namedNode(`${UDFS}nextRunAt`),\n object: { variable: 'nextRunAt' },\n },\n ],\n filters: [\n {\n variable: 'nextRunAt',\n operator: '$lte',\n value: literal('2026-05-18T01:30:00.000Z'),\n },\n ],\n select: ['schedule', 'nextRunAt'],\n orderBy: [\n {\n variable: 'nextRunAt',\n direction: 'asc',\n },\n ],\n limit: 100,\n },\n expectedPlan: ['join-index', 'range-filter-pushdown', 'join-order-pushdown', 'join-limit-pushdown'],\n },\n {\n name: 'message count by thread with having',\n resource: 'message',\n purpose: 'grouped message count uses SQL GROUP BY/HAVING before pagination',\n minScale: 'small',\n query: {\n patterns: [\n {\n subject: { variable: 'message' },\n predicate: namedNode(SIOC_HAS_MEMBER),\n object: { variable: 'thread' },\n },\n ],\n groupBy: ['thread'],\n aggregate: {\n type: 'count',\n as: 'count',\n variable: 'message',\n },\n having: [\n {\n variable: 'count',\n operator: '$gt',\n value: literal('2', namedNode('http://www.w3.org/2001/XMLSchema#integer')),\n },\n ],\n select: ['thread', 'count'],\n orderBy: [\n {\n variable: 'count',\n direction: 'desc',\n },\n ],\n limit: 1,\n },\n expectedPlan: ['group-count-index', 'having-pushdown', 'order', 'limit'],\n },\n {\n name: 'message join count distinct',\n resource: 'message',\n purpose: 'message/thread BGP aggregate count stays inside SQL self-join',\n minScale: 'small',\n query: {\n patterns: [\n {\n subject: { variable: 'message' },\n predicate: namedNode(RDF_TYPE),\n object: namedNode(`${MEETING}Message`),\n },\n {\n subject: { variable: 'message' },\n predicate: namedNode(SIOC_HAS_MEMBER),\n object: { variable: 'thread' },\n },\n ],\n aggregates: [\n {\n type: 'count',\n as: 'messageCount',\n variable: 'message',\n },\n {\n type: 'count',\n as: 'threadCount',\n variable: 'thread',\n distinct: true,\n },\n ],\n },\n expectedPlan: ['join-count-index'],\n },\n];\n\nexport function rdfModelsBenchmarkCaseNames(): string[] {\n return rdfModelsBenchmarkCases.map((testCase) => testCase.name);\n}\n\nexport function rdfModelsLocalQueryBenchmarkCaseNames(): string[] {\n return rdfModelsLocalQueryBenchmarkCases.map((testCase) => testCase.name);\n}\n\nexport function rdfModelsBenchmarkScaleTargetQuads(scale: RdfBenchmarkScale): number {\n return RDF_MODELS_SCALE_TARGET_QUADS[scale];\n}\n\nexport function rdfModelsBenchmarkSyntheticPodCount(scale: RdfBenchmarkScale): number {\n return RDF_MODELS_SYNTHETIC_POD_COUNTS[scale];\n}\n\nexport function estimateRdfModelsSyntheticQuadCount(syntheticMessages: number): number {\n return Math.max(0, Math.floor(syntheticMessages)) * RDF_MODELS_SYNTHETIC_MESSAGE_QUADS;\n}\n\nexport function defaultSyntheticMessagesForRdfModelsScale(scale: RdfBenchmarkScale): number {\n if (scale === 'small') {\n return 12;\n }\n return Math.ceil(rdfModelsBenchmarkScaleTargetQuads(scale) / RDF_MODELS_SYNTHETIC_MESSAGE_QUADS);\n}\n\nexport function rdfModelsBenchmarkScaleSatisfied(scale: RdfBenchmarkScale, seedQuadCount: number): boolean {\n return seedQuadCount >= rdfModelsBenchmarkScaleTargetQuads(scale);\n}\n\nexport function runRdfModelsBenchmark(\n engine: SolidRdfEngine,\n options: RdfModelBenchmarkRunOptions = {},\n): RdfModelBenchmarkReport {\n const scale = options.scale ?? 'small';\n const iterations = Math.max(1, Math.floor(options.iterations ?? 1));\n const cases = (options.cases ?? rdfModelsBenchmarkCases)\n .filter((testCase) => scaleRank(testCase.minScale) <= scaleRank(scale));\n const localQueryCases = (options.localQueryCases ?? rdfModelsLocalQueryBenchmarkCases)\n .filter((testCase) => scaleRank(testCase.minScale) <= scaleRank(scale));\n const results = cases.map((testCase) => runBenchmarkCase(engine, testCase, iterations));\n const localQueryResults = localQueryCases.map((testCase) => runLocalQueryBenchmarkCase(engine, testCase, iterations));\n const failedPlanCases = [\n ...results.filter((result) => !result.planMatched).map((result) => result.name),\n ...localQueryResults.filter((result) => !result.planMatched).map((result) => result.name),\n ];\n\n return {\n engine: 'solid-rdf',\n scale,\n iterations,\n generatedAt: new Date().toISOString(),\n planMatched: failedPlanCases.length === 0,\n failedPlanCases,\n cases: results,\n localQueryCases: localQueryResults,\n };\n}\n\nexport async function runRdfModelsShadowBenchmark(\n engine: SolidRdfEngine,\n compatibilityStore: QuintStore,\n options: RdfModelShadowBenchmarkRunOptions = {},\n): Promise<RdfModelShadowBenchmarkReport> {\n const scale = options.scale ?? 'small';\n const iterations = Math.max(1, Math.floor(options.iterations ?? 1));\n const cases = (options.cases ?? rdfModelsBenchmarkCases)\n .filter((testCase) => scaleRank(testCase.minScale) <= scaleRank(scale));\n const results = [];\n const compatibilityStats = await compatibilityStore.stats();\n\n for (const testCase of cases) {\n results.push(await runShadowBenchmarkCase(engine, compatibilityStore, testCase, iterations, compatibilityStats));\n }\n const spaceGateEnforced = scaleRank(scale) >= scaleRank('medium');\n const failedPerformanceCases = results.filter((result) => !result.performance.matched).map((result) => result.name);\n const failedSpaceCases = spaceGateEnforced\n ? results.filter((result) => !result.space.matched).map((result) => result.name)\n : [];\n\n return {\n engine: 'shadow',\n compatibilityEngine: 'quint-store',\n candidateEngine: 'solid-rdf',\n scale,\n iterations,\n generatedAt: new Date().toISOString(),\n matched: results.every((result) => result.matched),\n orderedMatched: results.every((result) => result.orderedMatch),\n planMatched: results.every((result) => result.planMatched),\n spaceGateEnforced,\n performanceMatched: failedPerformanceCases.length === 0,\n spaceMatched: failedSpaceCases.length === 0,\n failedPlanCases: results.filter((result) => !result.planMatched).map((result) => result.name),\n failedPerformanceCases,\n failedSpaceCases,\n cases: results,\n };\n}\n\nexport function runRdfModelsRdf3xShadowBenchmark(\n engine: SolidRdfEngine,\n options: RdfModelBenchmarkRunOptions = {},\n): RdfModelRdf3xShadowBenchmarkReport {\n if (!engine.rdf3xIndex) {\n throw new Error('runRdfModelsRdf3xShadowBenchmark requires SolidRdfEngine.rdf3xIndex');\n }\n const scale = options.scale ?? 'small';\n const iterations = Math.max(1, Math.floor(options.iterations ?? 1));\n const cases = (options.cases ?? rdfModelsBenchmarkCases)\n .filter((testCase) => scaleRank(testCase.minScale) <= scaleRank(scale));\n const localQueryCases = (options.localQueryCases ?? rdfModelsLocalQueryBenchmarkCases)\n .filter((testCase) => scaleRank(testCase.minScale) <= scaleRank(scale));\n const rebuild = engine.rdf3xIndex.rebuildFromCurrentQuads();\n const results = cases.map((testCase) => runRdf3xShadowBenchmarkCase(engine, testCase, iterations));\n const joinResults = localQueryCases.map((testCase) => runRdf3xShadowJoinBenchmarkCase(engine, testCase, iterations));\n const supportedResults = results.filter((result) => result.supported);\n const supportedJoinResults = joinResults.filter((result) => result.supported);\n\n return {\n engine: 'rdf3x-shadow',\n primaryEngine: 'solid-rdf',\n candidateEngine: 'solid-rdf3x',\n scale,\n iterations,\n generatedAt: new Date().toISOString(),\n matched: supportedResults.every((result) => result.matched)\n && supportedJoinResults.every((result) => result.matched),\n orderedMatched: supportedResults.every((result) => result.orderedMatch)\n && supportedJoinResults.every((result) => result.orderedMatch),\n skippedCases: results.filter((result) => !result.supported).map((result) => result.name),\n skippedJoinCases: joinResults.filter((result) => !result.supported).map((result) => result.name),\n failedCases: supportedResults.filter((result) => !result.matched || !result.orderedMatch).map((result) => result.name),\n failedJoinCases: supportedJoinResults\n .filter((result) => !result.matched || !result.orderedMatch)\n .map((result) => result.name),\n rebuild,\n cases: results,\n joinCases: joinResults,\n };\n}\n\nfunction runBenchmarkCase(\n engine: SolidRdfEngine,\n testCase: RdfModelBenchmarkCase,\n iterations: number,\n): RdfModelBenchmarkResult {\n const durationsMs: number[] = [];\n let metrics: RdfIndexMetrics | undefined;\n let keys: string[] = [];\n\n for (let i = 0; i < iterations; i += 1) {\n const start = Date.now();\n const result = engine.scan(testCase.query);\n durationsMs.push(Math.max(0, Date.now() - start));\n metrics = result.metrics;\n keys = result.quads.map(canonicalQuadKey);\n }\n\n const finalMetrics = metrics ?? {\n engine: 'solid-rdf',\n indexChoice: 'not-run',\n matchedRows: 0,\n returnedRows: 0,\n durationMs: 0,\n };\n const missingPlan = missingExpectedPlan(testCase, finalMetrics);\n const execution = benchmarkExecution(finalMetrics);\n\n return {\n name: testCase.name,\n resource: testCase.resource,\n purpose: testCase.purpose,\n minScale: testCase.minScale,\n query: {\n pattern: serializePattern(testCase.query.pattern),\n ...(testCase.query.options ? { options: testCase.query.options } : {}),\n },\n expectedPlan: [...testCase.expectedPlan],\n planMatched: missingPlan.length === 0,\n missingPlan,\n ...execution,\n returnedRows: keys.length,\n checksum: checksum(keys, false),\n orderedChecksum: checksum(keys, true),\n durationsMs,\n p50DurationMs: percentile(durationsMs, 0.5),\n p95DurationMs: percentile(durationsMs, 0.95),\n metrics: finalMetrics,\n indexStats: engine.index.stats(),\n };\n}\n\nfunction runLocalQueryBenchmarkCase(\n engine: SolidRdfEngine,\n testCase: RdfModelLocalQueryBenchmarkCase,\n iterations: number,\n): RdfModelLocalQueryBenchmarkResult {\n const durationsMs: number[] = [];\n let metrics: RdfLocalQueryMetrics | undefined;\n let keys: string[] = [];\n\n for (let i = 0; i < iterations; i += 1) {\n const start = Date.now();\n const result = engine.query(testCase.query);\n durationsMs.push(Math.max(0, Date.now() - start));\n metrics = result.metrics;\n keys = result.bindings.map(bindingKey);\n }\n\n const finalMetrics = metrics ?? {\n engine: 'solid-rdf',\n plan: [],\n scannedRows: 0,\n joinedRows: 0,\n returnedRows: 0,\n durationMs: 0,\n indexChoices: [],\n filtersApplied: 0,\n filtersPushedDown: 0,\n };\n const missingPlan = missingExpectedLocalQueryPlan(testCase, finalMetrics);\n\n return {\n name: testCase.name,\n resource: testCase.resource,\n purpose: testCase.purpose,\n minScale: testCase.minScale,\n query: serializeLocalQuery(testCase.query),\n expectedPlan: [...testCase.expectedPlan],\n planMatched: missingPlan.length === 0,\n missingPlan,\n physicalPlan: finalMetrics.plan,\n scannedRows: finalMetrics.scannedRows,\n indexChoices: [...finalMetrics.indexChoices],\n fallbackReason: null,\n returnedRows: keys.length,\n checksum: checksum(keys, false),\n orderedChecksum: checksum(keys, true),\n durationsMs,\n p50DurationMs: percentile(durationsMs, 0.5),\n p95DurationMs: percentile(durationsMs, 0.95),\n metrics: finalMetrics,\n indexStats: engine.index.stats(),\n };\n}\n\nfunction runRdf3xShadowBenchmarkCase(\n engine: SolidRdfEngine,\n testCase: RdfModelBenchmarkCase,\n iterations: number,\n): RdfModelRdf3xShadowBenchmarkResult {\n const baseResult = baseRdf3xShadowBenchmarkResult(testCase);\n const unsupportedReason = unsupportedRdf3xPatternReason(testCase.query.pattern);\n if (unsupportedReason) {\n return {\n ...baseResult,\n supported: false,\n unsupportedReason,\n matched: false,\n orderedMatch: false,\n diff: {\n missingFromPrimary: [],\n extraInPrimary: [],\n },\n solidRdf: emptySolidRdfBenchmarkSide(engine),\n };\n }\n\n const solidRdfDurationsMs: number[] = [];\n const rdf3xDurationsMs: number[] = [];\n let solidRdfQuads: Quad[] = [];\n let rdf3xQuads: Quad[] = [];\n let solidRdfMetrics: RdfIndexMetrics | undefined;\n let rdf3xMetrics: Rdf3xIndexMetrics | undefined;\n\n for (let i = 0; i < iterations; i += 1) {\n let start = Date.now();\n const solidRdfResult = engine.scan(testCase.query);\n solidRdfDurationsMs.push(Math.max(0, Date.now() - start));\n solidRdfQuads = solidRdfResult.quads;\n solidRdfMetrics = solidRdfResult.metrics;\n\n start = Date.now();\n const rdf3xResult = engine.rdf3xIndex!.scan(rdf3xPatternFor(testCase.query.pattern), testCase.query.options);\n rdf3xDurationsMs.push(Math.max(0, Date.now() - start));\n rdf3xQuads = rdf3xResult.quads;\n rdf3xMetrics = rdf3xResult.metrics;\n }\n\n const solidRdfKeys = solidRdfQuads.map(canonicalQuadKey);\n const rdf3xKeys = rdf3xQuads.map(canonicalQuadKey);\n const diff = diffQuads(solidRdfQuads, rdf3xQuads);\n const orderedMatch = isSemanticallyOrdered(testCase.query.options)\n ? rdf3xKeys.join('\\n') === solidRdfKeys.join('\\n')\n : true;\n const finalSolidRdfMetrics = solidRdfMetrics ?? {\n engine: 'solid-rdf',\n indexChoice: 'not-run',\n matchedRows: 0,\n returnedRows: 0,\n durationMs: 0,\n };\n const finalRdf3xMetrics = rdf3xMetrics ?? {\n engine: 'solid-rdf3x',\n indexChoice: 'none',\n matchedRows: 0,\n returnedRows: 0,\n durationMs: 0,\n } satisfies Rdf3xIndexMetrics;\n\n return {\n ...baseResult,\n supported: true,\n matched: diff.missingFromPrimary.length === 0 && diff.extraInPrimary.length === 0,\n orderedMatch,\n diff,\n solidRdf: {\n ...benchmarkSide(solidRdfKeys, solidRdfDurationsMs),\n ...benchmarkExecution(finalSolidRdfMetrics),\n metrics: finalSolidRdfMetrics,\n indexStats: engine.index.stats(),\n },\n rdf3x: {\n ...benchmarkSide(rdf3xKeys, rdf3xDurationsMs),\n ...rdf3xBenchmarkExecution(finalRdf3xMetrics),\n metrics: finalRdf3xMetrics,\n indexStats: engine.rdf3xIndex!.stats(),\n },\n };\n}\n\nfunction runRdf3xShadowJoinBenchmarkCase(\n engine: SolidRdfEngine,\n testCase: RdfModelLocalQueryBenchmarkCase,\n iterations: number,\n): RdfModelRdf3xShadowJoinBenchmarkResult {\n const unsupportedReason = unsupportedRdf3xJoinQueryReason(testCase.query);\n if (unsupportedReason) {\n return {\n ...baseRdf3xShadowJoinBenchmarkResult(testCase),\n supported: false,\n unsupportedReason,\n matched: false,\n orderedMatch: false,\n diff: {\n missingFromPrimary: [],\n extraInPrimary: [],\n },\n solidRdf: emptySolidRdfBenchmarkSide(engine),\n };\n }\n\n const joinShape = rdf3xJoinShapeFor(testCase.query);\n const solidRdfDurationsMs: number[] = [];\n const rdf3xDurationsMs: number[] = [];\n let solidRdfBindings: RdfBindingRow[] = [];\n let rdf3xBindings: RdfBindingRow[] = [];\n let solidRdfMetrics: RdfIndexMetrics | undefined;\n let rdf3xMetrics: Rdf3xJoinMetrics | undefined;\n\n for (let i = 0; i < iterations; i += 1) {\n let start = Date.now();\n const solidRdfResult = engine.index.joinPatterns(joinShape.patterns, joinShape.options);\n solidRdfDurationsMs.push(Math.max(0, Date.now() - start));\n solidRdfBindings = solidRdfResult.bindings;\n solidRdfMetrics = solidRdfResult.metrics;\n\n start = Date.now();\n const rdf3xResult = engine.rdf3xIndex!.joinPatterns(joinShape.patterns, joinShape.options);\n rdf3xDurationsMs.push(Math.max(0, Date.now() - start));\n rdf3xBindings = rdf3xResult.bindings;\n rdf3xMetrics = rdf3xResult.metrics;\n }\n\n const solidRdfKeys = solidRdfBindings.map(bindingKey);\n const rdf3xKeys = rdf3xBindings.map(bindingKey);\n const diff = diffBindingKeys(solidRdfKeys, rdf3xKeys);\n const orderedMatch = isSemanticallyOrderedJoin(joinShape.options)\n ? rdf3xKeys.join('\\n') === solidRdfKeys.join('\\n')\n : true;\n const finalSolidRdfMetrics = solidRdfMetrics ?? {\n engine: 'solid-rdf',\n indexChoice: 'not-run',\n matchedRows: 0,\n returnedRows: 0,\n durationMs: 0,\n };\n const finalRdf3xMetrics = rdf3xMetrics ?? {\n engine: 'solid-rdf3x',\n indexChoice: 'none',\n matchedRows: 0,\n returnedRows: 0,\n durationMs: 0,\n } satisfies Rdf3xJoinMetrics;\n\n return {\n ...baseRdf3xShadowJoinBenchmarkResult(testCase),\n supported: true,\n matched: diff.missingFromPrimary.length === 0 && diff.extraInPrimary.length === 0,\n orderedMatch,\n diff,\n solidRdf: {\n ...benchmarkSide(solidRdfKeys, solidRdfDurationsMs),\n ...benchmarkExecution(finalSolidRdfMetrics),\n metrics: finalSolidRdfMetrics,\n indexStats: engine.index.stats(),\n },\n rdf3x: {\n ...benchmarkSide(rdf3xKeys, rdf3xDurationsMs),\n ...rdf3xJoinBenchmarkExecution(finalRdf3xMetrics),\n metrics: finalRdf3xMetrics,\n indexStats: engine.rdf3xIndex!.stats(),\n },\n };\n}\n\nfunction baseRdf3xShadowBenchmarkResult(testCase: RdfModelBenchmarkCase): Pick<\n RdfModelRdf3xShadowBenchmarkResult,\n 'name' | 'resource' | 'purpose' | 'minScale' | 'query'\n> {\n return {\n name: testCase.name,\n resource: testCase.resource,\n purpose: testCase.purpose,\n minScale: testCase.minScale,\n query: {\n pattern: serializePattern(testCase.query.pattern),\n ...(testCase.query.options ? { options: testCase.query.options } : {}),\n },\n };\n}\n\nfunction emptySolidRdfBenchmarkSide(engine: SolidRdfEngine): RdfModelRdf3xShadowBenchmarkResult['solidRdf'] {\n const metrics: RdfIndexMetrics = {\n engine: 'solid-rdf',\n indexChoice: 'not-run',\n matchedRows: 0,\n returnedRows: 0,\n durationMs: 0,\n };\n return {\n ...benchmarkSide([], []),\n ...benchmarkExecution(metrics),\n metrics,\n indexStats: engine.index.stats(),\n };\n}\n\nasync function runShadowBenchmarkCase(\n engine: SolidRdfEngine,\n compatibilityStore: QuintStore,\n testCase: RdfModelBenchmarkCase,\n iterations: number,\n compatibilityStats: StoreStats,\n): Promise<RdfModelShadowBenchmarkResult> {\n const compatibilityDurationsMs: number[] = [];\n const solidRdfDurationsMs: number[] = [];\n let compatibilityQuads: Quad[] = [];\n let solidRdfQuads: Quad[] = [];\n let metrics: RdfIndexMetrics | undefined;\n\n for (let i = 0; i < iterations; i += 1) {\n let start = Date.now();\n compatibilityQuads = await compatibilityStore.get(testCase.query.pattern, testCase.query.options);\n compatibilityDurationsMs.push(Math.max(0, Date.now() - start));\n\n start = Date.now();\n const solidRdfResult = engine.scan(testCase.query);\n solidRdfDurationsMs.push(Math.max(0, Date.now() - start));\n solidRdfQuads = solidRdfResult.quads;\n metrics = solidRdfResult.metrics;\n }\n\n const compatibilityKeys = compatibilityQuads.map(canonicalQuadKey);\n const solidRdfKeys = solidRdfQuads.map(canonicalQuadKey);\n const diff = diffQuads(solidRdfQuads, compatibilityQuads);\n const orderedMatch = isSemanticallyOrdered(testCase.query.options)\n ? solidRdfKeys.join('\\n') === compatibilityKeys.join('\\n')\n : true;\n const finalMetrics = metrics ?? {\n engine: 'solid-rdf',\n indexChoice: 'not-run',\n matchedRows: 0,\n returnedRows: 0,\n durationMs: 0,\n };\n const missingPlan = missingExpectedPlan(testCase, finalMetrics);\n const execution = benchmarkExecution(finalMetrics);\n const compatibilitySide = {\n ...benchmarkSide(compatibilityKeys, compatibilityDurationsMs),\n storeStats: compatibilityStats,\n };\n const solidRdfSide = {\n ...benchmarkSide(solidRdfKeys, solidRdfDurationsMs),\n ...execution,\n metrics: finalMetrics,\n indexStats: engine.index.stats(),\n };\n\n return {\n name: testCase.name,\n resource: testCase.resource,\n purpose: testCase.purpose,\n minScale: testCase.minScale,\n query: {\n pattern: serializePattern(testCase.query.pattern),\n ...(testCase.query.options ? { options: testCase.query.options } : {}),\n },\n expectedPlan: [...testCase.expectedPlan],\n planMatched: missingPlan.length === 0,\n missingPlan,\n matched: diff.missingFromPrimary.length === 0 && diff.extraInPrimary.length === 0,\n orderedMatch,\n diff,\n compatibility: compatibilitySide,\n solidRdf: solidRdfSide,\n performance: comparePerformance(compatibilitySide, solidRdfSide),\n space: compareSpace(compatibilityStats, solidRdfSide.indexStats),\n };\n}\n\nfunction benchmarkExecution(metrics: RdfIndexMetrics): {\n physicalPlan: string[];\n scannedRows: number;\n indexChoice: string;\n joinOrder: string[];\n fallbackReason: string | null;\n} {\n return {\n physicalPlan: metrics.queryPlan ?? [],\n scannedRows: metrics.matchedRows,\n indexChoice: metrics.indexChoice,\n joinOrder: [metrics.indexChoice],\n fallbackReason: null,\n };\n}\n\nfunction rdf3xBenchmarkExecution(metrics: Rdf3xIndexMetrics): {\n physicalPlan: string[];\n scannedRows: number;\n indexChoice: string;\n joinOrder: string[];\n fallbackReason: string | null;\n} {\n return {\n physicalPlan: metrics.queryPlan ?? [],\n scannedRows: metrics.matchedRows,\n indexChoice: metrics.indexChoice,\n joinOrder: [metrics.indexChoice],\n fallbackReason: null,\n };\n}\n\nfunction rdf3xJoinBenchmarkExecution(metrics: Rdf3xJoinMetrics): {\n physicalPlan: string[];\n scannedRows: number;\n indexChoice: string;\n joinOrder: string[];\n fallbackReason: string | null;\n} {\n return {\n physicalPlan: metrics.queryPlan ?? [],\n scannedRows: metrics.matchedRows,\n indexChoice: metrics.indexChoice,\n joinOrder: [metrics.indexChoice],\n fallbackReason: null,\n };\n}\n\nfunction baseRdf3xShadowJoinBenchmarkResult(testCase: RdfModelLocalQueryBenchmarkCase): Pick<\n RdfModelRdf3xShadowJoinBenchmarkResult,\n 'name' | 'resource' | 'purpose' | 'minScale' | 'query'\n> {\n return {\n name: testCase.name,\n resource: testCase.resource,\n purpose: testCase.purpose,\n minScale: testCase.minScale,\n query: serializeLocalQuery(testCase.query),\n };\n}\n\nfunction unsupportedRdf3xJoinQueryReason(query: RdfLocalQuery): string | undefined {\n if (query.patterns.length === 0) {\n return 'RDF-3X join shadow requires at least one required BGP pattern';\n }\n if (query.values?.length) {\n return 'RDF-3X join shadow does not support VALUES yet';\n }\n if (query.textSearch?.length || query.vectorSearch?.length) {\n return 'RDF-3X join shadow does not support search sources yet';\n }\n if (query.unions?.length || query.minus?.length || query.exists?.length || query.optional?.length) {\n return 'RDF-3X join shadow only supports required BGP queries';\n }\n if (query.binds?.length || query.filters?.length || query.having?.length) {\n return 'RDF-3X join shadow does not support local query filters or BIND yet';\n }\n if (query.groupBy?.length || query.aggregate || query.aggregates?.length) {\n return 'RDF-3X join shadow does not support aggregate queries yet';\n }\n\n for (const pattern of query.patterns) {\n const joinPattern = rdf3xJoinPatternFor(pattern);\n const unsupportedPattern = unsupportedRdf3xPatternReason(joinPattern.pattern);\n if (unsupportedPattern) {\n return unsupportedPattern;\n }\n }\n return undefined;\n}\n\nfunction rdf3xJoinShapeFor(query: RdfLocalQuery): Rdf3xJoinBenchmarkShape {\n return {\n patterns: query.patterns.map(rdf3xJoinPatternFor),\n options: {\n ...(query.select ? { project: query.select } : {}),\n ...(query.distinct ? { distinct: true } : {}),\n ...(query.orderBy ? { orderBy: query.orderBy } : {}),\n ...(query.limit !== undefined ? { limit: query.limit } : {}),\n ...(query.offset !== undefined ? { offset: query.offset } : {}),\n },\n };\n}\n\nfunction rdf3xJoinPatternFor(pattern: RdfQueryPattern): RdfQuadJoinPattern {\n const compiledPattern: RdfQuadJoinPattern['pattern'] = {};\n const variables: RdfQuadJoinPattern['variables'] = {};\n for (const key of ['graph', 'subject', 'predicate', 'object'] as RdfQueryPatternKey[]) {\n const value = pattern[key];\n if (!value) {\n continue;\n }\n if (isQueryVariable(value)) {\n variables[key] = value.variable;\n } else {\n compiledPattern[key] = value;\n }\n }\n return {\n pattern: compiledPattern,\n variables,\n };\n}\n\nfunction isQueryVariable(value: unknown): value is { variable: string } {\n return value !== null\n && typeof value === 'object'\n && !('termType' in value)\n && 'variable' in value\n && typeof (value as { variable?: unknown }).variable === 'string';\n}\n\nfunction unsupportedRdf3xPatternReason(pattern: QuintPattern): string | undefined {\n for (const key of ['graph', 'subject', 'predicate', 'object'] as const) {\n const value = pattern[key];\n if (!value || isTerm(value as any)) {\n continue;\n }\n if (key === 'graph' && isGraphPrefixPattern(value)) {\n continue;\n }\n if (key === 'object' && isSupportedRdf3xNumericObjectRangePattern(value)) {\n continue;\n }\n return `unsupported ${key} pattern for RDF-3X shadow`;\n }\n return undefined;\n}\n\nfunction rdf3xPatternFor(pattern: QuintPattern): Rdf3xTriplePattern {\n const result: Rdf3xTriplePattern = {};\n for (const key of ['graph', 'subject', 'predicate', 'object'] as const) {\n const value = pattern[key];\n if (!value) {\n continue;\n }\n if (key === 'graph' && isGraphPrefixPattern(value)) {\n result.graph = { $startsWith: value.$startsWith };\n continue;\n }\n if (key === 'object' && isSupportedRdf3xNumericObjectRangePattern(value)) {\n result.object = value;\n continue;\n }\n if (!isTerm(value as any)) {\n throw new Error(`RDF-3X shadow benchmark only supports exact ${key} terms or graph prefixes`);\n }\n result[key] = value as import('@rdfjs/types').Term;\n }\n return result;\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 isSupportedRdf3xNumericObjectRangePattern(value: unknown): value is Rdf3xNumericObjectRangePattern {\n if (value === null || typeof value !== 'object' || 'termType' in value) {\n return false;\n }\n let hasRange = false;\n for (const operator of ['$gt', '$gte', '$lt', '$lte'] as const) {\n const rangeValue = (value as Rdf3xNumericObjectRangePattern)[operator];\n if (rangeValue === undefined) {\n continue;\n }\n hasRange = true;\n if (numericRangeValue(rangeValue) === undefined) {\n return false;\n }\n }\n return hasRange;\n}\n\nfunction numericRangeValue(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\nfunction isSemanticallyOrdered(options?: QueryOptions): boolean {\n return Boolean(options?.order && options.order.length > 0);\n}\n\nfunction isSemanticallyOrderedJoin(options?: RdfQuadJoinOptions): boolean {\n return Boolean(options?.orderBy && options.orderBy.length > 0);\n}\n\nfunction benchmarkSide(keys: string[], durationsMs: number[]): RdfModelShadowBenchmarkSide {\n return {\n returnedRows: keys.length,\n checksum: checksum(keys, false),\n orderedChecksum: checksum(keys, true),\n durationsMs,\n p50DurationMs: percentile(durationsMs, 0.5),\n p95DurationMs: percentile(durationsMs, 0.95),\n };\n}\n\nfunction diffBindingKeys(primaryKeys: string[], candidateKeys: string[]): RdfShadowDiff {\n const primarySet = new Set(primaryKeys);\n const candidateSet = new Set(candidateKeys);\n return {\n missingFromPrimary: Array.from(candidateSet).filter((key) => !primarySet.has(key)).sort(),\n extraInPrimary: Array.from(primarySet).filter((key) => !candidateSet.has(key)).sort(),\n };\n}\n\nfunction comparePerformance(\n compatibility: RdfModelShadowBenchmarkSide,\n solidRdf: RdfModelShadowBenchmarkSide,\n): RdfModelShadowPerformanceComparison {\n const p95DeltaMs = solidRdf.p95DurationMs - compatibility.p95DurationMs;\n const p95Ratio = solidRdf.p95DurationMs / Math.max(1, compatibility.p95DurationMs);\n return {\n p95DeltaMs,\n p95Ratio,\n matched: p95DeltaMs <= PERFORMANCE_P95_MIN_ABSOLUTE_HEADROOM_MS\n || p95Ratio <= PERFORMANCE_P95_MAX_RATIO,\n };\n}\n\nfunction compareSpace(\n compatibility: StoreStats,\n solidRdf: RdfIndexStats,\n): RdfModelShadowSpaceComparison {\n if (\n compatibility.databaseBytes === undefined\n || compatibility.tableBytes === undefined\n || compatibility.indexBytes === undefined\n ) {\n return {\n databaseDeltaBytes: 0,\n tableDeltaBytes: 0,\n indexDeltaBytes: 0,\n databaseRatio: 0,\n tableRatio: 0,\n indexRatio: 0,\n matched: false,\n unavailableReason: 'compatibility store did not report database/table/index bytes',\n };\n }\n\n const databaseDeltaBytes = solidRdf.databaseBytes - compatibility.databaseBytes;\n const tableDeltaBytes = solidRdf.tableBytes - compatibility.tableBytes;\n const indexDeltaBytes = solidRdf.indexBytes - compatibility.indexBytes;\n\n return {\n databaseDeltaBytes,\n tableDeltaBytes,\n indexDeltaBytes,\n databaseRatio: ratio(solidRdf.databaseBytes, compatibility.databaseBytes),\n tableRatio: ratio(solidRdf.tableBytes, compatibility.tableBytes),\n indexRatio: ratio(solidRdf.indexBytes, compatibility.indexBytes),\n matched: databaseDeltaBytes <= 0 && tableDeltaBytes <= 0 && indexDeltaBytes <= 0,\n };\n}\n\nfunction ratio(candidate: number, baseline: number): number {\n if (baseline <= 0) {\n return candidate <= 0 ? 1 : Number.POSITIVE_INFINITY;\n }\n return candidate / baseline;\n}\n\nfunction missingExpectedPlan(testCase: RdfModelBenchmarkCase, metrics: RdfIndexMetrics): string[] {\n return testCase.expectedPlan.filter((label) => !matchesExpectedPlanLabel(label, testCase, metrics));\n}\n\nfunction matchesExpectedPlanLabel(label: string, testCase: RdfModelBenchmarkCase, metrics: RdfIndexMetrics): boolean {\n const pattern = testCase.query.pattern;\n const planText = (metrics.queryPlan ?? []).join('\\n');\n switch (label) {\n case 'graph-scope':\n return Boolean(pattern.graph) && metrics.indexChoice.includes('G');\n case 'type-filter':\n return isTerm(pattern.predicate as any)\n && termToId(pattern.predicate as any) === RDF_TYPE\n && Boolean(pattern.object)\n && metrics.indexChoice !== 'full-scan';\n case 'predicate-filter':\n return Boolean(pattern.predicate) && metrics.indexChoice.includes('P');\n case 'predicate-object-filter':\n return Boolean(pattern.predicate) && Boolean(pattern.object) && metrics.indexChoice.includes('P');\n case 'predicate-object-range-filter':\n return Boolean(pattern.predicate)\n && (planText.includes('_range') || planText.includes('LexicalRange(') || planText.includes('NumericRange('));\n case 'limit':\n return testCase.query.options?.limit !== undefined && planText.includes('LIMIT');\n case 'order':\n return Boolean(testCase.query.options?.order?.length) && planText.includes('ORDER BY');\n case 'text-index':\n return planText.includes('TextSearch(');\n case 'rdf-subject-join':\n return planText.includes('TextSearch(')\n && metrics.indexChoice !== 'full-scan'\n && metrics.matchedRows >= metrics.returnedRows;\n case 'SPOG':\n case 'POSG':\n case 'GSPO':\n case 'GPOS':\n case 'OSPG':\n return metrics.indexChoice === label;\n default:\n return false;\n }\n}\n\nfunction missingExpectedLocalQueryPlan(\n testCase: RdfModelLocalQueryBenchmarkCase,\n metrics: RdfLocalQueryMetrics,\n): string[] {\n return testCase.expectedPlan.filter((label) => !matchesExpectedLocalQueryPlanLabel(label, metrics));\n}\n\nfunction matchesExpectedLocalQueryPlanLabel(label: string, metrics: RdfLocalQueryMetrics): boolean {\n const planText = metrics.plan.join('\\n');\n switch (label) {\n case 'group-count-index':\n return planText.includes('Aggregate(group-count-index)');\n case 'having-pushdown':\n return planText.includes('IndexGroupCountHaving(')\n && !planText.includes('\\nHaving(');\n case 'order':\n return planText.includes('IndexGroupCountOrder(') && !planText.includes('\\nSort');\n case 'limit':\n return planText.includes('IndexGroupCountLimit') && !planText.includes('\\nLimit');\n case 'join-index':\n return planText.includes('IndexJoin(')\n && !planText.includes('\\nIndexScan(');\n case 'join-order-pushdown':\n return planText.includes('IndexJoinOrder(')\n && !planText.includes('\\nSort');\n case 'join-limit-pushdown':\n return planText.includes('IndexJoinLimit')\n && !planText.includes('\\nLimit');\n case 'range-filter-pushdown':\n return metrics.filtersPushedDown > 0\n && planText.includes('LexicalRange(');\n case 'join-count-index':\n return planText.includes('Aggregate(join-count-distinct-index)')\n && planText.includes('IndexJoinCount(')\n && !planText.includes('\\nIndexScan(');\n default:\n return false;\n }\n}\n\nfunction bindingKey(binding: RdfBindingRow): string {\n return Object.keys(binding)\n .sort()\n .map((key) => `${key}=${termToId(binding[key] as any)}`)\n .join('\\u001f');\n}\n\nfunction checksum(keys: string[], ordered: boolean): string {\n const normalized = ordered ? keys : [...keys].sort();\n return createHash('sha256')\n .update(normalized.join('\\n'))\n .digest('hex');\n}\n\nfunction percentile(values: number[], percentileValue: number): number {\n if (values.length === 0) {\n return 0;\n }\n const sorted = [...values].sort((a, b) => a - b);\n const index = Math.min(\n sorted.length - 1,\n Math.max(0, Math.ceil(sorted.length * percentileValue) - 1),\n );\n return sorted[index];\n}\n\nfunction scaleRank(scale: RdfBenchmarkScale): number {\n switch (scale) {\n case 'small':\n return 1;\n case 'medium':\n return 2;\n case 'large':\n return 3;\n default: {\n const exhaustive: never = scale;\n return exhaustive;\n }\n }\n}\n\nfunction serializePattern(pattern: QuintPattern): JsonPattern {\n return Object.fromEntries(\n Object.entries(pattern).map(([key, value]) => [key, serializePatternValue(value)]),\n );\n}\n\nfunction serializeLocalQuery(query: RdfLocalQuery): JsonPattern {\n return serializePatternValue(query) as JsonPattern;\n}\n\nfunction serializePatternValue(value: unknown): unknown {\n if (!value) {\n return value;\n }\n if (isTerm(value as any)) {\n return termToId(value as any);\n }\n if (Array.isArray(value)) {\n return value.map(serializePatternValue);\n }\n if (typeof value === 'object') {\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>)\n .map(([key, nested]) => [key, serializePatternValue(nested)]),\n );\n }\n return value;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"models-benchmark.js","sourceRoot":"","sources":["../../../src/storage/rdf/models-benchmark.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from 'node:crypto';\nimport { DataFactory } from 'n3';\nimport { termToId } from 'n3';\nimport type { Quad, Term } from '@rdfjs/types';\nimport type { QuintPattern, QueryOptions, QuintStore, StoreStats } from '../quint/types';\nimport { isTerm } from '../quint/types';\nimport type {\n Rdf3xJoinMetrics,\n Rdf3xIndexMetrics,\n Rdf3xIndexStats,\n Rdf3xObjectOperatorPattern,\n Rdf3xObjectRangePattern,\n Rdf3xObjectTextSearchPattern,\n Rdf3xPermutationName,\n Rdf3xTermInPattern,\n Rdf3xTermNotInPattern,\n Rdf3xTriplePattern,\n RdfBindingRow,\n RdfEngineStorageStats,\n RdfIndexMetrics,\n RdfIndexStats,\n RdfLocalQuery,\n RdfLocalQueryMetrics,\n RdfQuadJoinCountOptions,\n RdfQuadJoinGroupAggregateHaving,\n RdfQuadJoinGroupAggregateOptions,\n RdfQuadJoinOptions,\n RdfQuadJoinPattern,\n RdfQueryAggregate,\n RdfQueryFilter,\n RdfQueryPattern,\n RdfQueryPatternKey,\n RdfShadowDiff,\n} from './types';\nimport { canonicalQuadKey, diffQuads } from './RdfShadowComparator';\nimport type { SolidRdfEngine } from './SolidRdfEngine';\nimport { isRdfNumericDatatype, rdfNumericValue } from './RdfTermSemantics';\n\nconst { namedNode, literal } = DataFactory;\n\nexport type RdfBenchmarkScale = 'small' | 'medium' | 'large';\n\nexport const RDF_MODELS_SYNTHETIC_MESSAGE_QUADS = 4;\n\nconst RDF_MODELS_SCALE_TARGET_QUADS: Record<RdfBenchmarkScale, number> = {\n small: 48,\n medium: 10_000,\n large: 1_000_000,\n};\n\nconst RDF_MODELS_SYNTHETIC_POD_COUNTS: Record<RdfBenchmarkScale, number> = {\n small: 1,\n medium: 1,\n large: 4,\n};\n\nexport interface RdfModelBenchmarkCase {\n name: string;\n resource: string;\n purpose: string;\n minScale: RdfBenchmarkScale;\n query: {\n pattern: QuintPattern;\n options?: QueryOptions;\n };\n expectedPlan: string[];\n}\n\nexport interface RdfModelLocalQueryBenchmarkCase {\n name: string;\n resource: string;\n purpose: string;\n minScale: RdfBenchmarkScale;\n minReturnedRows?: number;\n query: RdfLocalQuery;\n expectedPlan: string[];\n}\n\nexport interface RdfModelBenchmarkRunOptions {\n cases?: readonly RdfModelBenchmarkCase[];\n localQueryCases?: readonly RdfModelLocalQueryBenchmarkCase[];\n scale?: RdfBenchmarkScale;\n iterations?: number;\n}\n\nexport interface RdfModelBenchmarkResult {\n name: string;\n resource: string;\n purpose: string;\n minScale: RdfBenchmarkScale;\n query: {\n pattern: JsonPattern;\n options?: QueryOptions;\n };\n expectedPlan: string[];\n planMatched: boolean;\n missingPlan: string[];\n physicalPlan: string[];\n scannedRows: number;\n indexChoice: string;\n joinOrder: string[];\n fallbackReason: string | null;\n returnedRows: number;\n checksum: string;\n orderedChecksum: string;\n durationsMs: number[];\n p50DurationMs: number;\n p95DurationMs: number;\n metrics: RdfIndexMetrics;\n indexStats: RdfIndexStats;\n}\n\nexport interface RdfModelLocalQueryBenchmarkResult {\n name: string;\n resource: string;\n purpose: string;\n minScale: RdfBenchmarkScale;\n query: JsonPattern;\n expectedPlan: string[];\n planMatched: boolean;\n missingPlan: string[];\n physicalPlan: string[];\n scannedRows: number;\n indexChoices: string[];\n fallbackReason: string | null;\n returnedRows: number;\n checksum: string;\n orderedChecksum: string;\n durationsMs: number[];\n p50DurationMs: number;\n p95DurationMs: number;\n metrics: RdfLocalQueryMetrics;\n indexStats: RdfIndexStats;\n}\n\nexport interface RdfModelBenchmarkReport {\n engine: 'solid-rdf';\n scale: RdfBenchmarkScale;\n iterations: number;\n generatedAt: string;\n planMatched: boolean;\n failedPlanCases: string[];\n storage: RdfEngineStorageStats;\n cases: RdfModelBenchmarkResult[];\n localQueryCases: RdfModelLocalQueryBenchmarkResult[];\n}\n\nexport interface RdfModelShadowBenchmarkRunOptions extends RdfModelBenchmarkRunOptions {}\n\nexport interface RdfModelShadowBenchmarkSide {\n returnedRows: number;\n checksum: string;\n orderedChecksum: string;\n durationsMs: number[];\n p50DurationMs: number;\n p95DurationMs: number;\n storeStats?: StoreStats;\n}\n\nexport interface RdfModelShadowPerformanceComparison {\n p95DeltaMs: number;\n p95Ratio: number;\n matched: boolean;\n}\n\nexport interface RdfModelShadowSpaceComparison {\n databaseDeltaBytes: number;\n tableDeltaBytes: number;\n indexDeltaBytes: number;\n databaseRatio: number;\n tableRatio: number;\n indexRatio: number;\n matched: boolean;\n unavailableReason?: string;\n}\n\nexport interface RdfModelShadowBenchmarkResult {\n name: string;\n resource: string;\n purpose: string;\n minScale: RdfBenchmarkScale;\n query: {\n pattern: JsonPattern;\n options?: QueryOptions;\n };\n expectedPlan: string[];\n planMatched: boolean;\n missingPlan: string[];\n matched: boolean;\n orderedMatch: boolean;\n diff: RdfShadowDiff;\n compatibility: RdfModelShadowBenchmarkSide;\n solidRdf: RdfModelShadowBenchmarkSide & {\n physicalPlan: string[];\n scannedRows: number;\n indexChoice: string;\n joinOrder: string[];\n fallbackReason: string | null;\n metrics: RdfIndexMetrics;\n indexStats: RdfIndexStats;\n };\n performance: RdfModelShadowPerformanceComparison;\n space: RdfModelShadowSpaceComparison;\n}\n\nexport interface RdfModelShadowBenchmarkReport {\n engine: 'shadow';\n compatibilityEngine: 'quint-store';\n candidateEngine: 'solid-rdf';\n scale: RdfBenchmarkScale;\n iterations: number;\n generatedAt: string;\n matched: boolean;\n orderedMatched: boolean;\n planMatched: boolean;\n spaceGateEnforced: boolean;\n performanceMatched: boolean;\n spaceMatched: boolean;\n failedPlanCases: string[];\n failedPerformanceCases: string[];\n failedSpaceCases: string[];\n cases: RdfModelShadowBenchmarkResult[];\n}\n\nexport interface RdfModelRdf3xShadowBenchmarkResult {\n name: string;\n resource: string;\n purpose: string;\n minScale: RdfBenchmarkScale;\n query: {\n pattern: JsonPattern;\n options?: QueryOptions;\n };\n expectedPlan: string[];\n planMatched: boolean;\n missingPlan: string[];\n supported: boolean;\n unsupportedReason?: string;\n matched: boolean;\n orderedMatch: boolean;\n diff: RdfShadowDiff;\n solidRdf: RdfModelShadowBenchmarkSide & {\n physicalPlan: string[];\n scannedRows: number;\n indexChoice: string;\n joinOrder: string[];\n fallbackReason: string | null;\n metrics: RdfIndexMetrics;\n indexStats: RdfIndexStats;\n };\n rdf3x?: RdfModelShadowBenchmarkSide & {\n physicalPlan: string[];\n scannedRows: number;\n indexChoice: string;\n joinOrder: string[];\n fallbackReason: string | null;\n metrics: Rdf3xIndexMetrics;\n indexStats: Rdf3xIndexStats;\n };\n}\n\nexport interface RdfModelRdf3xShadowJoinBenchmarkResult {\n name: string;\n resource: string;\n purpose: string;\n minScale: RdfBenchmarkScale;\n query: JsonPattern;\n expectedPlan: string[];\n planMatched: boolean;\n missingPlan: string[];\n supported: boolean;\n unsupportedReason?: string;\n matched: boolean;\n orderedMatch: boolean;\n diff: RdfShadowDiff;\n solidRdf: RdfModelShadowBenchmarkSide & {\n physicalPlan: string[];\n scannedRows: number;\n indexChoice: string;\n joinOrder: string[];\n fallbackReason: string | null;\n metrics: RdfIndexMetrics;\n indexStats: RdfIndexStats;\n };\n rdf3x?: RdfModelShadowBenchmarkSide & {\n physicalPlan: string[];\n scannedRows: number;\n indexChoice: string;\n joinOrder: string[];\n fallbackReason: string | null;\n metrics: Rdf3xJoinMetrics;\n indexStats: Rdf3xIndexStats;\n };\n}\n\nexport interface RdfModelRdf3xShadowBenchmarkReport {\n engine: 'rdf3x-shadow';\n primaryEngine: 'solid-rdf';\n candidateEngine: 'solid-rdf3x';\n scale: RdfBenchmarkScale;\n iterations: number;\n generatedAt: string;\n matched: boolean;\n orderedMatched: boolean;\n planMatched: boolean;\n skippedCases: string[];\n skippedJoinCases: string[];\n failedCases: string[];\n failedJoinCases: string[];\n failedPlanCases: string[];\n rebuild: {\n scannedQuads: number;\n uniqueTriples: number;\n memberships: number;\n projectionRows: number;\n durationMs: number;\n };\n storage: RdfEngineStorageStats;\n cases: RdfModelRdf3xShadowBenchmarkResult[];\n joinCases: RdfModelRdf3xShadowJoinBenchmarkResult[];\n}\n\ntype Rdf3xJoinBenchmarkShape =\n | {\n kind: 'join';\n patterns: RdfQuadJoinPattern[];\n options?: RdfQuadJoinOptions;\n }\n | {\n kind: 'join-count' | 'join-aggregate';\n patterns: RdfQuadJoinPattern[];\n options: RdfQuadJoinCountOptions;\n }\n | {\n kind: 'group-count' | 'group-aggregate';\n patterns: RdfQuadJoinPattern[];\n options: RdfQuadJoinGroupAggregateOptions;\n };\n\ntype JsonPattern = Record<string, unknown>;\n\nconst RDF_TYPE = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type';\nconst DCT_CREATED = 'http://purl.org/dc/terms/created';\nconst DCT_MODIFIED = 'http://purl.org/dc/terms/modified';\nconst DCT_TITLE = 'http://purl.org/dc/terms/title';\nconst SIOC_CONTENT = 'http://rdfs.org/sioc/ns#content';\nconst SIOC_HAS_MEMBER = 'http://rdfs.org/sioc/ns#has_member';\nconst UDFS = 'https://undefineds.co/ns#';\nconst MEETING = 'http://www.w3.org/ns/pim/meeting#';\nconst SIOC = 'http://rdfs.org/sioc/ns#';\nconst FOAF_AGENT = 'http://xmlns.com/foaf/0.1/Agent';\nconst VCARD_INDIVIDUAL = 'http://www.w3.org/2006/vcard/ns#Individual';\nconst SCHEMA_CREATIVE_WORK = 'http://schema.org/CreativeWork';\nconst PERFORMANCE_P95_MIN_ABSOLUTE_HEADROOM_MS = 25;\nconst PERFORMANCE_P95_MAX_RATIO = 8;\n\nexport const rdfModelsBenchmarkCases: readonly RdfModelBenchmarkCase[] = [\n {\n name: 'list chats',\n resource: 'chat',\n purpose: 'surface list with graph-scope and type filter',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(RDF_TYPE),\n object: namedNode(`${MEETING}LongChat`),\n graph: { $startsWith: 'https://pod.example/alice/.data/chat/' },\n },\n options: { order: ['subject'], limit: 50 },\n },\n expectedPlan: ['graph-scope', 'type-filter', 'limit'],\n },\n {\n name: 'list tasks',\n resource: 'task',\n purpose: 'task surface list with status/type filtering',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(RDF_TYPE),\n object: namedNode(`${UDFS}Task`),\n graph: { $startsWith: 'https://pod.example/alice/.data/task/' },\n },\n options: { order: ['subject'], limit: 50 },\n },\n expectedPlan: ['graph-scope', 'type-filter', 'limit'],\n },\n {\n name: 'list threads by chat',\n resource: 'thread',\n purpose: 'relation lookup under a chat index graph',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(RDF_TYPE),\n object: namedNode(`${SIOC}Thread`),\n graph: namedNode('https://pod.example/alice/.data/chat/default/index.ttl'),\n },\n options: { order: ['subject'], limit: 100 },\n },\n expectedPlan: ['graph-scope', 'type-filter', 'limit'],\n },\n {\n name: 'list threads by task',\n resource: 'thread',\n purpose: 'relation lookup under a task index graph',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(RDF_TYPE),\n object: namedNode(`${SIOC}Thread`),\n graph: namedNode('https://pod.example/alice/.data/task/default/index.ttl'),\n },\n options: { order: ['subject'], limit: 100 },\n },\n expectedPlan: ['graph-scope', 'type-filter', 'limit'],\n },\n {\n name: 'list messages by thread',\n resource: 'message',\n purpose: 'date-bucketed message lookup through thread inverse membership',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(SIOC_HAS_MEMBER),\n graph: { $startsWith: 'https://pod.example/alice/.data/chat/default/2026/05/' },\n },\n options: { order: ['subject'], limit: 100 },\n },\n expectedPlan: ['graph-scope', 'predicate-filter', 'limit'],\n },\n {\n name: 'latest message',\n resource: 'message',\n purpose: 'ORDER BY + LIMIT over message date bucket',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(DCT_CREATED),\n graph: { $startsWith: 'https://pod.example/alice/.data/chat/default/' },\n },\n options: { order: ['object'], reverse: true, limit: 1 },\n },\n expectedPlan: ['graph-scope', 'predicate-filter', 'order', 'limit'],\n },\n {\n name: 'latest run',\n resource: 'run',\n purpose: 'ORDER BY + LIMIT over date-bucketed run documents',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(DCT_CREATED),\n graph: { $startsWith: 'https://pod.example/alice/.data/task/default/' },\n },\n options: { order: ['object'], reverse: true, limit: 1 },\n },\n expectedPlan: ['graph-scope', 'predicate-filter', 'order', 'limit'],\n },\n {\n name: 'pending runs',\n resource: 'run',\n purpose: 'status filter for scheduler and state center',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(`${UDFS}status`),\n object: literal('queued'),\n graph: { $startsWith: 'https://pod.example/alice/.data/task/' },\n },\n options: { order: ['subject'], limit: 100 },\n },\n expectedPlan: ['graph-scope', 'predicate-object-filter', 'limit'],\n },\n {\n name: 'running runs',\n resource: 'run',\n purpose: 'status filter for active runtime execution',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(`${UDFS}status`),\n object: literal('running'),\n graph: { $startsWith: 'https://pod.example/alice/.data/task/' },\n },\n options: { order: ['subject'], limit: 100 },\n },\n expectedPlan: ['graph-scope', 'predicate-object-filter', 'limit'],\n },\n {\n name: 'runs by workspace',\n resource: 'run',\n purpose: 'workspace relation filter for runtime placement and steering',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(`${UDFS}workspace`),\n object: namedNode('file://macbook.local/Users/alice/project/'),\n graph: { $startsWith: 'https://pod.example/alice/.data/task/default/' },\n },\n options: { order: ['subject'], limit: 100 },\n },\n expectedPlan: ['graph-scope', 'predicate-object-filter', 'limit'],\n },\n {\n name: 'runs by numeric priority',\n resource: 'run',\n purpose: 'typed numeric literal range filter for scheduler priority queues',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(`${UDFS}priority`),\n object: { $gt: literal('9', namedNode('http://www.w3.org/2001/XMLSchema#integer')) },\n graph: { $startsWith: 'https://pod.example/alice/.data/task/' },\n },\n options: { order: ['subject'], limit: 100 },\n },\n expectedPlan: ['graph-scope', 'predicate-object-range-filter', 'limit'],\n },\n {\n name: 'run with steps',\n resource: 'runStep',\n purpose: 'one-to-many run-step relation lookup',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(`${UDFS}run`),\n graph: { $startsWith: 'https://pod.example/alice/.data/task/default/2026/05/' },\n },\n options: { order: ['subject'], limit: 200 },\n },\n expectedPlan: ['graph-scope', 'predicate-filter', 'limit'],\n },\n {\n name: 'task materialization due time',\n resource: 'schedule',\n purpose: 'schedule due-time candidate lookup',\n minScale: 'medium',\n query: {\n pattern: {\n predicate: namedNode(`${UDFS}nextRunAt`),\n object: { $lte: literal('2026-05-18T01:30:00.000Z') },\n graph: { $startsWith: 'https://pod.example/alice/.data/task/' },\n },\n options: { order: ['object'], limit: 100 },\n },\n expectedPlan: ['graph-scope', 'predicate-object-range-filter', 'order', 'limit'],\n },\n {\n name: 'search message literals',\n resource: 'message',\n purpose: 'literal/text index candidate that reconnects to RDF subjects',\n minScale: 'medium',\n query: {\n pattern: {\n predicate: namedNode(SIOC_CONTENT),\n object: { $contains: 'searchable' },\n graph: { $startsWith: 'https://pod.example/alice/.data/chat/' },\n },\n options: { order: ['subject'], limit: 50 },\n },\n expectedPlan: ['text-index', 'rdf-subject-join'],\n },\n {\n name: 'load by exact id',\n resource: 'any',\n purpose: 'base-relative id expands to exact subject IRI',\n minScale: 'small',\n query: {\n pattern: {\n subject: namedNode('https://pod.example/alice/.data/chat/default/index.ttl#this'),\n },\n },\n expectedPlan: ['SPOG'],\n },\n {\n name: 'acl graph prefix scoped query',\n resource: 'any',\n purpose: 'scope filter must avoid unbounded full-pod scans',\n minScale: 'medium',\n query: {\n pattern: {\n graph: { $startsWith: 'https://pod.example/alice/.data/chat/default/' },\n predicate: namedNode(DCT_MODIFIED),\n },\n options: { order: ['subject'], limit: 100 },\n },\n expectedPlan: ['graph-scope', 'predicate-filter', 'limit'],\n },\n {\n name: 'list providers',\n resource: 'aiProvider',\n purpose: 'AI provider settings list and provider/model relation baseline',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(RDF_TYPE),\n object: namedNode(`${UDFS}Provider`),\n graph: { $startsWith: 'https://pod.example/alice/settings/providers/' },\n },\n },\n expectedPlan: ['graph-scope', 'type-filter'],\n },\n {\n name: 'models by provider',\n resource: 'aiModel',\n purpose: 'AI model lookup by provider relation',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(`${UDFS}isProvidedBy`),\n object: namedNode('https://pod.example/alice/settings/providers/anthropic.ttl'),\n },\n },\n expectedPlan: ['POSG'],\n },\n {\n name: 'credentials by provider',\n resource: 'credential',\n purpose: 'credential lookup by provider relation',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(`${UDFS}provider`),\n object: namedNode('https://pod.example/alice/settings/providers/anthropic.ttl'),\n },\n },\n expectedPlan: ['POSG'],\n },\n {\n name: 'list agents',\n resource: 'agent',\n purpose: 'agent identity list under the shared models agent resource base',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(RDF_TYPE),\n object: namedNode(FOAF_AGENT),\n graph: { $startsWith: 'https://pod.example/alice/.data/agents/' },\n },\n options: { order: ['subject'], limit: 50 },\n },\n expectedPlan: ['graph-scope', 'type-filter', 'limit'],\n },\n {\n name: 'list contacts',\n resource: 'contact',\n purpose: 'contact index list under the shared models contact resource base',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(RDF_TYPE),\n object: namedNode(VCARD_INDIVIDUAL),\n graph: { $startsWith: 'https://pod.example/alice/.data/contacts/' },\n },\n options: { order: ['subject'], limit: 50 },\n },\n expectedPlan: ['graph-scope', 'type-filter', 'limit'],\n },\n {\n name: 'list favorites',\n resource: 'favorite',\n purpose: 'favorite list over date-bucketed favorite documents',\n minScale: 'small',\n query: {\n pattern: {\n predicate: namedNode(RDF_TYPE),\n object: namedNode(SCHEMA_CREATIVE_WORK),\n graph: { $startsWith: 'https://pod.example/alice/.data/favorites/' },\n },\n options: { order: ['subject'], limit: 50 },\n },\n expectedPlan: ['graph-scope', 'type-filter', 'limit'],\n },\n];\n\nexport const rdfModelsLocalQueryBenchmarkCases: readonly RdfModelLocalQueryBenchmarkCase[] = [\n {\n name: 'latest message by thread local query',\n resource: 'message',\n purpose: 'date-bucketed message timeline keeps ORDER BY/LIMIT inside SQL self-join',\n minScale: 'small',\n query: {\n patterns: [\n {\n graph: { $startsWith: 'https://pod.example/alice/.data/chat/default/' },\n subject: { variable: 'message' },\n predicate: namedNode(SIOC_HAS_MEMBER),\n object: namedNode('https://pod.example/alice/.data/chat/default/index.ttl#thread_1'),\n },\n {\n graph: { $startsWith: 'https://pod.example/alice/.data/chat/default/' },\n subject: { variable: 'message' },\n predicate: namedNode(DCT_CREATED),\n object: { variable: 'createdAt' },\n },\n ],\n select: ['message', 'createdAt'],\n orderBy: [\n {\n variable: 'createdAt',\n direction: 'desc',\n },\n ],\n limit: 1,\n },\n expectedPlan: ['join-index', 'join-order-pushdown', 'join-limit-pushdown'],\n },\n {\n name: 'next queued run by workspace local query',\n resource: 'run',\n purpose: 'run state center scheduler query keeps status/workspace/date joins in SQL before LIMIT',\n minScale: 'small',\n query: {\n patterns: [\n {\n graph: { $startsWith: 'https://pod.example/alice/.data/task/default/' },\n subject: { variable: 'run' },\n predicate: namedNode(`${UDFS}status`),\n object: literal('queued'),\n },\n {\n graph: { $startsWith: 'https://pod.example/alice/.data/task/default/' },\n subject: { variable: 'run' },\n predicate: namedNode(`${UDFS}workspace`),\n object: namedNode('file://macbook.local/Users/alice/project/'),\n },\n {\n graph: { $startsWith: 'https://pod.example/alice/.data/task/default/' },\n subject: { variable: 'run' },\n predicate: namedNode(DCT_CREATED),\n object: { variable: 'createdAt' },\n },\n ],\n select: ['run', 'createdAt'],\n orderBy: [\n {\n variable: 'createdAt',\n direction: 'asc',\n },\n ],\n limit: 1,\n },\n expectedPlan: ['join-index', 'join-order-pushdown', 'join-limit-pushdown'],\n },\n {\n name: 'run steps by run local query',\n resource: 'runStep',\n purpose: 'one-to-many run-step lookup keeps type and run relation in SQL self-join',\n minScale: 'small',\n query: {\n patterns: [\n {\n graph: { $startsWith: 'https://pod.example/alice/.data/task/default/2026/05/' },\n subject: { variable: 'step' },\n predicate: namedNode(RDF_TYPE),\n object: namedNode(`${UDFS}RunStep`),\n },\n {\n graph: { $startsWith: 'https://pod.example/alice/.data/task/default/2026/05/' },\n subject: { variable: 'step' },\n predicate: namedNode(`${UDFS}run`),\n object: namedNode('https://pod.example/alice/.data/task/default/2026/05/18/runs.ttl#run_1'),\n },\n ],\n select: ['step'],\n orderBy: [\n {\n variable: 'step',\n direction: 'asc',\n },\n ],\n limit: 50,\n },\n expectedPlan: ['join-index', 'join-order-pushdown', 'join-limit-pushdown'],\n },\n {\n name: 'task materialization active due local query',\n resource: 'schedule',\n purpose: 'task scheduler materialization keeps active status and due-time filter in SQL self-join',\n minScale: 'small',\n query: {\n patterns: [\n {\n graph: { $startsWith: 'https://pod.example/alice/.data/task/default/' },\n subject: { variable: 'schedule' },\n predicate: namedNode(RDF_TYPE),\n object: namedNode(`${UDFS}Schedule`),\n },\n {\n graph: { $startsWith: 'https://pod.example/alice/.data/task/default/' },\n subject: { variable: 'schedule' },\n predicate: namedNode(`${UDFS}status`),\n object: literal('active'),\n },\n {\n graph: { $startsWith: 'https://pod.example/alice/.data/task/default/' },\n subject: { variable: 'schedule' },\n predicate: namedNode(`${UDFS}nextRunAt`),\n object: { variable: 'nextRunAt' },\n },\n ],\n filters: [\n {\n variable: 'nextRunAt',\n operator: '$lte',\n value: literal('2026-05-18T01:30:00.000Z'),\n },\n ],\n select: ['schedule', 'nextRunAt'],\n orderBy: [\n {\n variable: 'nextRunAt',\n direction: 'asc',\n },\n ],\n limit: 100,\n },\n expectedPlan: ['join-index', 'range-filter-pushdown', 'join-order-pushdown', 'join-limit-pushdown'],\n },\n {\n name: 'message count by thread with having',\n resource: 'message',\n purpose: 'grouped message count uses SQL GROUP BY/HAVING before pagination',\n minScale: 'small',\n query: {\n patterns: [\n {\n graph: { $startsWith: 'https://pod.example/alice/.data/chat/default/' },\n subject: { variable: 'message' },\n predicate: namedNode(SIOC_HAS_MEMBER),\n object: { variable: 'thread' },\n },\n ],\n groupBy: ['thread'],\n aggregate: {\n type: 'count',\n as: 'count',\n variable: 'message',\n },\n having: [\n {\n variable: 'count',\n operator: '$gt',\n value: literal('2', namedNode('http://www.w3.org/2001/XMLSchema#integer')),\n },\n ],\n select: ['thread', 'count'],\n orderBy: [\n {\n variable: 'count',\n direction: 'desc',\n },\n ],\n limit: 1,\n },\n expectedPlan: ['group-count-index', 'having-pushdown', 'order', 'limit'],\n },\n {\n name: 'message score by thread numeric aggregate',\n resource: 'message',\n purpose: 'grouped numeric message score aggregate stays inside SQL/RDF-3X GROUP BY',\n minScale: 'small',\n minReturnedRows: 1,\n query: {\n patterns: [\n {\n graph: { $startsWith: 'https://pod.example/alice/.data/chat/default/' },\n subject: { variable: 'message' },\n predicate: namedNode(SIOC_HAS_MEMBER),\n object: { variable: 'thread' },\n },\n {\n graph: { $startsWith: 'https://pod.example/alice/.data/chat/default/' },\n subject: { variable: 'message' },\n predicate: namedNode(`${UDFS}score`),\n object: { variable: 'score' },\n },\n ],\n filters: [\n {\n variable: 'score',\n operator: '$termType',\n value: 'numeric',\n },\n ],\n groupBy: ['thread'],\n aggregates: [\n {\n type: 'count',\n as: 'count',\n variable: 'message',\n },\n {\n type: 'sum',\n as: 'scoreTotal',\n variable: 'score',\n },\n {\n type: 'avg',\n as: 'scoreAvg',\n variable: 'score',\n },\n ],\n having: [\n {\n variable: 'scoreTotal',\n operator: '$gt',\n value: literal('4', namedNode('http://www.w3.org/2001/XMLSchema#integer')),\n },\n ],\n select: ['thread', 'count', 'scoreTotal', 'scoreAvg'],\n orderBy: [\n {\n variable: 'scoreTotal',\n direction: 'desc',\n },\n ],\n limit: 1,\n },\n expectedPlan: ['group-aggregate-index', 'having-pushdown', 'order', 'limit'],\n },\n {\n name: 'message join count distinct',\n resource: 'message',\n purpose: 'message/thread BGP aggregate count stays inside SQL self-join',\n minScale: 'small',\n query: {\n patterns: [\n {\n graph: { $startsWith: 'https://pod.example/alice/.data/chat/default/' },\n subject: { variable: 'message' },\n predicate: namedNode(RDF_TYPE),\n object: namedNode(`${MEETING}Message`),\n },\n {\n graph: { $startsWith: 'https://pod.example/alice/.data/chat/default/' },\n subject: { variable: 'message' },\n predicate: namedNode(SIOC_HAS_MEMBER),\n object: { variable: 'thread' },\n },\n ],\n aggregates: [\n {\n type: 'count',\n as: 'messageCount',\n variable: 'message',\n },\n {\n type: 'count',\n as: 'threadCount',\n variable: 'thread',\n distinct: true,\n },\n ],\n },\n expectedPlan: ['join-count-index'],\n },\n];\n\nexport function rdfModelsBenchmarkCaseNames(): string[] {\n return rdfModelsBenchmarkCases.map((testCase) => testCase.name);\n}\n\nexport function rdfModelsLocalQueryBenchmarkCaseNames(): string[] {\n return rdfModelsLocalQueryBenchmarkCases.map((testCase) => testCase.name);\n}\n\nexport function rdfModelsBenchmarkScaleTargetQuads(scale: RdfBenchmarkScale): number {\n return RDF_MODELS_SCALE_TARGET_QUADS[scale];\n}\n\nexport function rdfModelsBenchmarkSyntheticPodCount(scale: RdfBenchmarkScale): number {\n return RDF_MODELS_SYNTHETIC_POD_COUNTS[scale];\n}\n\nexport function estimateRdfModelsSyntheticQuadCount(syntheticMessages: number): number {\n return Math.max(0, Math.floor(syntheticMessages)) * RDF_MODELS_SYNTHETIC_MESSAGE_QUADS;\n}\n\nexport function defaultSyntheticMessagesForRdfModelsScale(scale: RdfBenchmarkScale): number {\n if (scale === 'small') {\n return 12;\n }\n return Math.ceil(rdfModelsBenchmarkScaleTargetQuads(scale) / RDF_MODELS_SYNTHETIC_MESSAGE_QUADS);\n}\n\nexport function rdfModelsBenchmarkScaleSatisfied(scale: RdfBenchmarkScale, seedQuadCount: number): boolean {\n return seedQuadCount >= rdfModelsBenchmarkScaleTargetQuads(scale);\n}\n\nexport function runRdfModelsBenchmark(\n engine: SolidRdfEngine,\n options: RdfModelBenchmarkRunOptions = {},\n): RdfModelBenchmarkReport {\n const scale = options.scale ?? 'small';\n const iterations = Math.max(1, Math.floor(options.iterations ?? 1));\n const cases = (options.cases ?? rdfModelsBenchmarkCases)\n .filter((testCase) => scaleRank(testCase.minScale) <= scaleRank(scale));\n const localQueryCases = (options.localQueryCases ?? rdfModelsLocalQueryBenchmarkCases)\n .filter((testCase) => scaleRank(testCase.minScale) <= scaleRank(scale));\n const results = cases.map((testCase) => runBenchmarkCase(engine, testCase, iterations));\n const localQueryResults = localQueryCases.map((testCase) => runLocalQueryBenchmarkCase(engine, testCase, iterations));\n const failedPlanCases = [\n ...results.filter((result) => !result.planMatched).map((result) => result.name),\n ...localQueryResults.filter((result) => !result.planMatched).map((result) => result.name),\n ];\n\n return {\n engine: 'solid-rdf',\n scale,\n iterations,\n generatedAt: new Date().toISOString(),\n planMatched: failedPlanCases.length === 0,\n failedPlanCases,\n storage: engine.storageStats(),\n cases: results,\n localQueryCases: localQueryResults,\n };\n}\n\nexport async function runRdfModelsShadowBenchmark(\n engine: SolidRdfEngine,\n compatibilityStore: QuintStore,\n options: RdfModelShadowBenchmarkRunOptions = {},\n): Promise<RdfModelShadowBenchmarkReport> {\n const scale = options.scale ?? 'small';\n const iterations = Math.max(1, Math.floor(options.iterations ?? 1));\n const cases = (options.cases ?? rdfModelsBenchmarkCases)\n .filter((testCase) => scaleRank(testCase.minScale) <= scaleRank(scale));\n const results = [];\n const compatibilityStats = await compatibilityStore.stats();\n\n for (const testCase of cases) {\n results.push(await runShadowBenchmarkCase(engine, compatibilityStore, testCase, iterations, compatibilityStats));\n }\n const spaceGateEnforced = scaleRank(scale) >= scaleRank('medium');\n const failedPerformanceCases = results.filter((result) => !result.performance.matched).map((result) => result.name);\n const failedSpaceCases = spaceGateEnforced\n ? results.filter((result) => !result.space.matched).map((result) => result.name)\n : [];\n\n return {\n engine: 'shadow',\n compatibilityEngine: 'quint-store',\n candidateEngine: 'solid-rdf',\n scale,\n iterations,\n generatedAt: new Date().toISOString(),\n matched: results.every((result) => result.matched),\n orderedMatched: results.every((result) => result.orderedMatch),\n planMatched: results.every((result) => result.planMatched),\n spaceGateEnforced,\n performanceMatched: failedPerformanceCases.length === 0,\n spaceMatched: failedSpaceCases.length === 0,\n failedPlanCases: results.filter((result) => !result.planMatched).map((result) => result.name),\n failedPerformanceCases,\n failedSpaceCases,\n cases: results,\n };\n}\n\nexport function runRdfModelsRdf3xShadowBenchmark(\n engine: SolidRdfEngine,\n options: RdfModelBenchmarkRunOptions = {},\n): RdfModelRdf3xShadowBenchmarkReport {\n if (!engine.rdf3xIndex) {\n throw new Error('runRdfModelsRdf3xShadowBenchmark requires SolidRdfEngine.rdf3xIndex');\n }\n const scale = options.scale ?? 'small';\n const iterations = Math.max(1, Math.floor(options.iterations ?? 1));\n const cases = (options.cases ?? rdfModelsBenchmarkCases)\n .filter((testCase) => scaleRank(testCase.minScale) <= scaleRank(scale));\n const localQueryCases = (options.localQueryCases ?? rdfModelsLocalQueryBenchmarkCases)\n .filter((testCase) => scaleRank(testCase.minScale) <= scaleRank(scale));\n const rebuild = engine.rdf3xIndex.rebuildFromCurrentQuads();\n const results = cases.map((testCase) => runRdf3xShadowBenchmarkCase(engine, testCase, iterations));\n const joinResults = localQueryCases.map((testCase) => runRdf3xShadowJoinBenchmarkCase(engine, testCase, iterations));\n const supportedResults = results.filter((result) => result.supported);\n const supportedJoinResults = joinResults.filter((result) => result.supported);\n const failedPlanCases = [\n ...supportedResults.filter((result) => !result.planMatched).map((result) => result.name),\n ...supportedJoinResults.filter((result) => !result.planMatched).map((result) => result.name),\n ];\n\n return {\n engine: 'rdf3x-shadow',\n primaryEngine: 'solid-rdf',\n candidateEngine: 'solid-rdf3x',\n scale,\n iterations,\n generatedAt: new Date().toISOString(),\n matched: supportedResults.every((result) => result.matched)\n && supportedJoinResults.every((result) => result.matched),\n orderedMatched: supportedResults.every((result) => result.orderedMatch)\n && supportedJoinResults.every((result) => result.orderedMatch),\n planMatched: failedPlanCases.length === 0,\n skippedCases: results.filter((result) => !result.supported).map((result) => result.name),\n skippedJoinCases: joinResults.filter((result) => !result.supported).map((result) => result.name),\n failedCases: supportedResults.filter((result) => !result.matched || !result.orderedMatch).map((result) => result.name),\n failedJoinCases: supportedJoinResults\n .filter((result) => !result.matched || !result.orderedMatch)\n .map((result) => result.name),\n failedPlanCases,\n rebuild,\n storage: engine.storageStats(),\n cases: results,\n joinCases: joinResults,\n };\n}\n\nfunction runBenchmarkCase(\n engine: SolidRdfEngine,\n testCase: RdfModelBenchmarkCase,\n iterations: number,\n): RdfModelBenchmarkResult {\n const durationsMs: number[] = [];\n let metrics: RdfIndexMetrics | undefined;\n let keys: string[] = [];\n\n for (let i = 0; i < iterations; i += 1) {\n const start = Date.now();\n const result = engine.scan(testCase.query);\n durationsMs.push(Math.max(0, Date.now() - start));\n metrics = result.metrics;\n keys = result.quads.map(canonicalQuadKey);\n }\n\n const finalMetrics = metrics ?? {\n engine: 'solid-rdf',\n indexChoice: 'not-run',\n matchedRows: 0,\n returnedRows: 0,\n durationMs: 0,\n };\n const missingPlan = missingExpectedPlan(testCase, finalMetrics);\n const execution = benchmarkExecution(finalMetrics);\n\n return {\n name: testCase.name,\n resource: testCase.resource,\n purpose: testCase.purpose,\n minScale: testCase.minScale,\n query: {\n pattern: serializePattern(testCase.query.pattern),\n ...(testCase.query.options ? { options: testCase.query.options } : {}),\n },\n expectedPlan: [...testCase.expectedPlan],\n planMatched: missingPlan.length === 0,\n missingPlan,\n ...execution,\n returnedRows: keys.length,\n checksum: checksum(keys, false),\n orderedChecksum: checksum(keys, true),\n durationsMs,\n p50DurationMs: percentile(durationsMs, 0.5),\n p95DurationMs: percentile(durationsMs, 0.95),\n metrics: finalMetrics,\n indexStats: engine.index.stats(),\n };\n}\n\nfunction runLocalQueryBenchmarkCase(\n engine: SolidRdfEngine,\n testCase: RdfModelLocalQueryBenchmarkCase,\n iterations: number,\n): RdfModelLocalQueryBenchmarkResult {\n const durationsMs: number[] = [];\n let metrics: RdfLocalQueryMetrics | undefined;\n let keys: string[] = [];\n\n for (let i = 0; i < iterations; i += 1) {\n const start = Date.now();\n const result = engine.query(testCase.query);\n durationsMs.push(Math.max(0, Date.now() - start));\n metrics = result.metrics;\n keys = result.bindings.map(bindingKey);\n }\n\n const finalMetrics = metrics ?? {\n engine: 'solid-rdf',\n plan: [],\n scannedRows: 0,\n joinedRows: 0,\n returnedRows: 0,\n durationMs: 0,\n indexChoices: [],\n filtersApplied: 0,\n filtersPushedDown: 0,\n };\n const missingPlan = missingExpectedLocalQueryPlan(testCase, finalMetrics, keys.length);\n\n return {\n name: testCase.name,\n resource: testCase.resource,\n purpose: testCase.purpose,\n minScale: testCase.minScale,\n query: serializeLocalQuery(testCase.query),\n expectedPlan: [...testCase.expectedPlan],\n planMatched: missingPlan.length === 0,\n missingPlan,\n physicalPlan: finalMetrics.plan,\n scannedRows: finalMetrics.scannedRows,\n indexChoices: [...finalMetrics.indexChoices],\n fallbackReason: null,\n returnedRows: keys.length,\n checksum: checksum(keys, false),\n orderedChecksum: checksum(keys, true),\n durationsMs,\n p50DurationMs: percentile(durationsMs, 0.5),\n p95DurationMs: percentile(durationsMs, 0.95),\n metrics: finalMetrics,\n indexStats: engine.index.stats(),\n };\n}\n\nfunction runRdf3xShadowBenchmarkCase(\n engine: SolidRdfEngine,\n testCase: RdfModelBenchmarkCase,\n iterations: number,\n): RdfModelRdf3xShadowBenchmarkResult {\n const baseResult = baseRdf3xShadowBenchmarkResult(testCase);\n const unsupportedReason = unsupportedRdf3xPatternReason(testCase.query.pattern);\n if (unsupportedReason) {\n return {\n ...baseResult,\n supported: false,\n unsupportedReason,\n planMatched: false,\n missingPlan: [unsupportedReason],\n matched: false,\n orderedMatch: false,\n diff: {\n missingFromPrimary: [],\n extraInPrimary: [],\n },\n solidRdf: emptySolidRdfBenchmarkSide(engine),\n };\n }\n\n const solidRdfDurationsMs: number[] = [];\n const rdf3xDurationsMs: number[] = [];\n let solidRdfQuads: Quad[] = [];\n let rdf3xQuads: Quad[] = [];\n let solidRdfMetrics: RdfIndexMetrics | undefined;\n let rdf3xMetrics: Rdf3xIndexMetrics | undefined;\n\n for (let i = 0; i < iterations; i += 1) {\n let start = Date.now();\n const solidRdfResult = engine.scan(testCase.query);\n solidRdfDurationsMs.push(Math.max(0, Date.now() - start));\n solidRdfQuads = solidRdfResult.quads;\n solidRdfMetrics = solidRdfResult.metrics;\n\n start = Date.now();\n const rdf3xResult = engine.rdf3xIndex!.scan(rdf3xPatternFor(testCase.query.pattern), testCase.query.options);\n rdf3xDurationsMs.push(Math.max(0, Date.now() - start));\n rdf3xQuads = rdf3xResult.quads;\n rdf3xMetrics = rdf3xResult.metrics;\n }\n\n const solidRdfKeys = solidRdfQuads.map(canonicalQuadKey);\n const rdf3xKeys = rdf3xQuads.map(canonicalQuadKey);\n const diff = diffQuads(solidRdfQuads, rdf3xQuads);\n const orderedMatch = isSemanticallyOrdered(testCase.query.options)\n ? rdf3xKeys.join('\\n') === solidRdfKeys.join('\\n')\n : true;\n const finalSolidRdfMetrics = solidRdfMetrics ?? {\n engine: 'solid-rdf',\n indexChoice: 'not-run',\n matchedRows: 0,\n returnedRows: 0,\n durationMs: 0,\n };\n const finalRdf3xMetrics = rdf3xMetrics ?? {\n engine: 'solid-rdf3x',\n indexChoice: 'none',\n matchedRows: 0,\n returnedRows: 0,\n durationMs: 0,\n } satisfies Rdf3xIndexMetrics;\n const missingPlan = missingExpectedRdf3xPlan(testCase, finalRdf3xMetrics);\n const planMatched = missingPlan.length === 0;\n\n return {\n ...baseResult,\n supported: true,\n planMatched,\n missingPlan,\n matched: planMatched && diff.missingFromPrimary.length === 0 && diff.extraInPrimary.length === 0,\n orderedMatch,\n diff,\n solidRdf: {\n ...benchmarkSide(solidRdfKeys, solidRdfDurationsMs),\n ...benchmarkExecution(finalSolidRdfMetrics),\n metrics: finalSolidRdfMetrics,\n indexStats: engine.index.stats(),\n },\n rdf3x: {\n ...benchmarkSide(rdf3xKeys, rdf3xDurationsMs),\n ...rdf3xBenchmarkExecution(finalRdf3xMetrics),\n metrics: finalRdf3xMetrics,\n indexStats: engine.rdf3xIndex!.stats(),\n },\n };\n}\n\nfunction runRdf3xShadowJoinBenchmarkCase(\n engine: SolidRdfEngine,\n testCase: RdfModelLocalQueryBenchmarkCase,\n iterations: number,\n): RdfModelRdf3xShadowJoinBenchmarkResult {\n const unsupportedReason = unsupportedRdf3xJoinQueryReason(testCase.query);\n if (unsupportedReason) {\n return {\n ...baseRdf3xShadowJoinBenchmarkResult(testCase),\n supported: false,\n unsupportedReason,\n planMatched: false,\n missingPlan: [unsupportedReason],\n matched: false,\n orderedMatch: false,\n diff: {\n missingFromPrimary: [],\n extraInPrimary: [],\n },\n solidRdf: emptySolidRdfBenchmarkSide(engine),\n };\n }\n\n const joinShape = rdf3xJoinShapeFor(testCase.query);\n const solidRdfDurationsMs: number[] = [];\n const rdf3xDurationsMs: number[] = [];\n let solidRdfBindings: RdfBindingRow[] = [];\n let rdf3xBindings: RdfBindingRow[] = [];\n let solidRdfMetrics: RdfIndexMetrics | undefined;\n let rdf3xMetrics: Rdf3xJoinMetrics | undefined;\n\n for (let i = 0; i < iterations; i += 1) {\n let start = Date.now();\n const solidRdfResult = runSolidRdfJoinShape(engine, joinShape);\n solidRdfDurationsMs.push(Math.max(0, Date.now() - start));\n solidRdfBindings = solidRdfResult.bindings;\n solidRdfMetrics = solidRdfResult.metrics;\n\n start = Date.now();\n const rdf3xResult = runRdf3xJoinShape(engine, joinShape);\n rdf3xDurationsMs.push(Math.max(0, Date.now() - start));\n rdf3xBindings = rdf3xResult.bindings;\n rdf3xMetrics = rdf3xResult.metrics;\n }\n\n const solidRdfKeys = solidRdfBindings.map(bindingKey);\n const rdf3xKeys = rdf3xBindings.map(bindingKey);\n const diff = diffBindingKeys(solidRdfKeys, rdf3xKeys);\n const orderedMatch = isSemanticallyOrderedRdf3xJoinShape(joinShape)\n ? rdf3xKeys.join('\\n') === solidRdfKeys.join('\\n')\n : true;\n const finalSolidRdfMetrics = solidRdfMetrics ?? {\n engine: 'solid-rdf',\n indexChoice: 'not-run',\n matchedRows: 0,\n returnedRows: 0,\n durationMs: 0,\n };\n const finalRdf3xMetrics = rdf3xMetrics ?? {\n engine: 'solid-rdf3x',\n indexChoice: 'none',\n matchedRows: 0,\n returnedRows: 0,\n durationMs: 0,\n } satisfies Rdf3xJoinMetrics;\n const missingPlan = [\n ...missingExpectedRdf3xJoinPlan(testCase, finalRdf3xMetrics, rdf3xKeys.length),\n ...unresolvedPlanFailures(finalSolidRdfMetrics.queryPlan ?? []).map((label) => `solid-rdf:${label}`),\n ];\n const planMatched = missingPlan.length === 0;\n\n return {\n ...baseRdf3xShadowJoinBenchmarkResult(testCase),\n supported: true,\n planMatched,\n missingPlan,\n matched: planMatched\n && diff.missingFromPrimary.length === 0\n && diff.extraInPrimary.length === 0,\n orderedMatch,\n diff,\n solidRdf: {\n ...benchmarkSide(solidRdfKeys, solidRdfDurationsMs),\n ...benchmarkExecution(finalSolidRdfMetrics),\n metrics: finalSolidRdfMetrics,\n indexStats: engine.index.stats(),\n },\n rdf3x: {\n ...benchmarkSide(rdf3xKeys, rdf3xDurationsMs),\n ...rdf3xJoinBenchmarkExecution(finalRdf3xMetrics),\n metrics: finalRdf3xMetrics,\n indexStats: engine.rdf3xIndex!.stats(),\n },\n };\n}\n\nfunction runSolidRdfJoinShape(\n engine: SolidRdfEngine,\n shape: Rdf3xJoinBenchmarkShape,\n): { bindings: RdfBindingRow[]; metrics: RdfIndexMetrics } {\n switch (shape.kind) {\n case 'join':\n return engine.index.joinPatterns(shape.patterns, shape.options);\n case 'join-count':\n return engine.index.countJoinPatterns(shape.patterns, shape.options);\n case 'join-aggregate':\n return engine.index.aggregateJoinPatterns(shape.patterns, shape.options);\n case 'group-count':\n return engine.index.groupCountJoinPatterns(shape.patterns, shape.options);\n case 'group-aggregate':\n return engine.index.groupAggregateJoinPatterns(shape.patterns, shape.options);\n default: {\n const exhaustive: never = shape;\n throw new Error(`Unsupported RDF-3X benchmark shape: ${JSON.stringify(exhaustive)}`);\n }\n }\n}\n\nfunction runRdf3xJoinShape(\n engine: SolidRdfEngine,\n shape: Rdf3xJoinBenchmarkShape,\n): { bindings: RdfBindingRow[]; metrics: Rdf3xJoinMetrics } {\n switch (shape.kind) {\n case 'join':\n return engine.rdf3xIndex!.joinPatterns(shape.patterns, shape.options);\n case 'join-count':\n return engine.rdf3xIndex!.countJoinPatterns(shape.patterns, shape.options);\n case 'join-aggregate':\n return engine.rdf3xIndex!.aggregateJoinPatterns(shape.patterns, shape.options);\n case 'group-count':\n return engine.rdf3xIndex!.groupCountJoinPatterns(shape.patterns, shape.options);\n case 'group-aggregate':\n return engine.rdf3xIndex!.groupAggregateJoinPatterns(shape.patterns, shape.options);\n default: {\n const exhaustive: never = shape;\n throw new Error(`Unsupported RDF-3X benchmark shape: ${JSON.stringify(exhaustive)}`);\n }\n }\n}\n\nfunction baseRdf3xShadowBenchmarkResult(testCase: RdfModelBenchmarkCase): Pick<\n RdfModelRdf3xShadowBenchmarkResult,\n 'name' | 'resource' | 'purpose' | 'minScale' | 'query' | 'expectedPlan'\n> {\n return {\n name: testCase.name,\n resource: testCase.resource,\n purpose: testCase.purpose,\n minScale: testCase.minScale,\n query: {\n pattern: serializePattern(testCase.query.pattern),\n ...(testCase.query.options ? { options: testCase.query.options } : {}),\n },\n expectedPlan: [...testCase.expectedPlan],\n };\n}\n\nfunction emptySolidRdfBenchmarkSide(engine: SolidRdfEngine): RdfModelRdf3xShadowBenchmarkResult['solidRdf'] {\n const metrics: RdfIndexMetrics = {\n engine: 'solid-rdf',\n indexChoice: 'not-run',\n matchedRows: 0,\n returnedRows: 0,\n durationMs: 0,\n };\n return {\n ...benchmarkSide([], []),\n ...benchmarkExecution(metrics),\n metrics,\n indexStats: engine.index.stats(),\n };\n}\n\nasync function runShadowBenchmarkCase(\n engine: SolidRdfEngine,\n compatibilityStore: QuintStore,\n testCase: RdfModelBenchmarkCase,\n iterations: number,\n compatibilityStats: StoreStats,\n): Promise<RdfModelShadowBenchmarkResult> {\n const compatibilityDurationsMs: number[] = [];\n const solidRdfDurationsMs: number[] = [];\n let compatibilityQuads: Quad[] = [];\n let solidRdfQuads: Quad[] = [];\n let metrics: RdfIndexMetrics | undefined;\n\n for (let i = 0; i < iterations; i += 1) {\n let start = Date.now();\n compatibilityQuads = await compatibilityStore.get(testCase.query.pattern, testCase.query.options);\n compatibilityDurationsMs.push(Math.max(0, Date.now() - start));\n\n start = Date.now();\n const solidRdfResult = engine.scan(testCase.query);\n solidRdfDurationsMs.push(Math.max(0, Date.now() - start));\n solidRdfQuads = solidRdfResult.quads;\n metrics = solidRdfResult.metrics;\n }\n\n const compatibilityKeys = compatibilityQuads.map(canonicalQuadKey);\n const solidRdfKeys = solidRdfQuads.map(canonicalQuadKey);\n const diff = diffQuads(solidRdfQuads, compatibilityQuads);\n const orderedMatch = isSemanticallyOrdered(testCase.query.options)\n ? solidRdfKeys.join('\\n') === compatibilityKeys.join('\\n')\n : true;\n const finalMetrics = metrics ?? {\n engine: 'solid-rdf',\n indexChoice: 'not-run',\n matchedRows: 0,\n returnedRows: 0,\n durationMs: 0,\n };\n const missingPlan = missingExpectedPlan(testCase, finalMetrics);\n const execution = benchmarkExecution(finalMetrics);\n const compatibilitySide = {\n ...benchmarkSide(compatibilityKeys, compatibilityDurationsMs),\n storeStats: compatibilityStats,\n };\n const solidRdfSide = {\n ...benchmarkSide(solidRdfKeys, solidRdfDurationsMs),\n ...execution,\n metrics: finalMetrics,\n indexStats: engine.index.stats(),\n };\n\n return {\n name: testCase.name,\n resource: testCase.resource,\n purpose: testCase.purpose,\n minScale: testCase.minScale,\n query: {\n pattern: serializePattern(testCase.query.pattern),\n ...(testCase.query.options ? { options: testCase.query.options } : {}),\n },\n expectedPlan: [...testCase.expectedPlan],\n planMatched: missingPlan.length === 0,\n missingPlan,\n matched: diff.missingFromPrimary.length === 0 && diff.extraInPrimary.length === 0,\n orderedMatch,\n diff,\n compatibility: compatibilitySide,\n solidRdf: solidRdfSide,\n performance: comparePerformance(compatibilitySide, solidRdfSide),\n space: compareSpace(compatibilityStats, solidRdfSide.indexStats),\n };\n}\n\nfunction benchmarkExecution(metrics: RdfIndexMetrics): {\n physicalPlan: string[];\n scannedRows: number;\n indexChoice: string;\n joinOrder: string[];\n fallbackReason: string | null;\n} {\n return {\n physicalPlan: metrics.queryPlan ?? [],\n scannedRows: metrics.matchedRows,\n indexChoice: metrics.indexChoice,\n joinOrder: [metrics.indexChoice],\n fallbackReason: null,\n };\n}\n\nfunction rdf3xBenchmarkExecution(metrics: Rdf3xIndexMetrics): {\n physicalPlan: string[];\n scannedRows: number;\n indexChoice: string;\n joinOrder: string[];\n fallbackReason: string | null;\n} {\n return {\n physicalPlan: metrics.queryPlan ?? [],\n scannedRows: metrics.matchedRows,\n indexChoice: metrics.indexChoice,\n joinOrder: [metrics.indexChoice],\n fallbackReason: null,\n };\n}\n\nfunction rdf3xJoinBenchmarkExecution(metrics: Rdf3xJoinMetrics): {\n physicalPlan: string[];\n scannedRows: number;\n indexChoice: string;\n joinOrder: string[];\n fallbackReason: string | null;\n} {\n return {\n physicalPlan: metrics.queryPlan ?? [],\n scannedRows: metrics.matchedRows,\n indexChoice: metrics.indexChoice,\n joinOrder: [metrics.indexChoice],\n fallbackReason: null,\n };\n}\n\nfunction baseRdf3xShadowJoinBenchmarkResult(testCase: RdfModelLocalQueryBenchmarkCase): Pick<\n RdfModelRdf3xShadowJoinBenchmarkResult,\n 'name' | 'resource' | 'purpose' | 'minScale' | 'query' | 'expectedPlan'\n> {\n return {\n name: testCase.name,\n resource: testCase.resource,\n purpose: testCase.purpose,\n minScale: testCase.minScale,\n query: serializeLocalQuery(testCase.query),\n expectedPlan: [...testCase.expectedPlan],\n };\n}\n\nfunction unsupportedRdf3xJoinQueryReason(query: RdfLocalQuery): string | undefined {\n if (query.patterns.length === 0) {\n return 'RDF-3X join shadow requires at least one required BGP pattern';\n }\n if (query.values?.length) {\n return 'RDF-3X join shadow does not support VALUES yet';\n }\n if (query.textSearch?.length || query.vectorSearch?.length) {\n return 'RDF-3X join shadow does not support search sources yet';\n }\n if (query.unions?.length || query.minus?.length || query.exists?.length || query.optional?.length) {\n return 'RDF-3X join shadow only supports required BGP queries';\n }\n if (query.binds?.length) {\n return 'RDF-3X join shadow does not support BIND yet';\n }\n\n const aggregates = queryAggregates(query);\n const visibleVariables = new Set(query.patterns.flatMap((pattern) => variablesInLocalPattern(pattern)));\n const compiled = rdf3xJoinPatternsFor(query, aggregates);\n if (compiled.unsupportedReason) {\n return compiled.unsupportedReason;\n }\n if ((query.filters?.length ?? 0) > 0 && compiled.pushedFilterIndexes.size < (query.filters?.length ?? 0)) {\n return 'RDF-3X join shadow only supports filters that can be fully pushed into RDF-3X patterns';\n }\n\n if (aggregates.length > 0) {\n const aggregateReason = unsupportedRdf3xAggregateReason(query, aggregates, visibleVariables);\n if (aggregateReason) {\n return aggregateReason;\n }\n }\n if (aggregates.length === 0 && (query.groupBy?.length ?? 0) > 0) {\n return 'RDF-3X join shadow does not support GROUP BY without aggregates';\n }\n if (aggregates.length === 0 && (query.having?.length ?? 0) > 0) {\n return 'RDF-3X join shadow does not support HAVING without aggregates';\n }\n return undefined;\n}\n\nfunction rdf3xJoinShapeFor(query: RdfLocalQuery): Rdf3xJoinBenchmarkShape {\n const aggregates = queryAggregates(query);\n const compiled = rdf3xJoinPatternsFor(query, aggregates);\n if (!compiled.patterns) {\n throw new Error(compiled.unsupportedReason ?? 'RDF-3X join shadow cannot compile query shape');\n }\n if ((query.groupBy?.length ?? 0) > 0) {\n const aggregateAliases = new Set(aggregates.map((aggregate) => aggregate.as));\n const having = rdf3xGroupAggregateHaving(query.having ?? [], aggregateAliases);\n return {\n kind: aggregates.every((aggregate) => aggregate.type === 'count') ? 'group-count' : 'group-aggregate',\n patterns: compiled.patterns,\n options: {\n groupBy: query.groupBy ?? [],\n aggregates,\n ...(having.length > 0 ? { having } : {}),\n ...(query.orderBy ? { orderBy: query.orderBy } : {}),\n ...(query.limit !== undefined ? { limit: query.limit } : {}),\n ...(query.offset !== undefined ? { offset: query.offset } : {}),\n },\n };\n }\n if (aggregates.length > 0) {\n return {\n kind: aggregates.every((aggregate) => aggregate.type === 'count') ? 'join-count' : 'join-aggregate',\n patterns: compiled.patterns,\n options: { aggregates },\n };\n }\n return {\n kind: 'join',\n patterns: compiled.patterns,\n options: {\n ...(query.select ? { project: query.select } : {}),\n ...(query.distinct ? { distinct: true } : {}),\n ...(query.orderBy ? { orderBy: query.orderBy } : {}),\n ...(query.limit !== undefined ? { limit: query.limit } : {}),\n ...(query.offset !== undefined ? { offset: query.offset } : {}),\n },\n };\n}\n\nfunction unsupportedRdf3xAggregateReason(\n query: RdfLocalQuery,\n aggregates: RdfQueryAggregate[],\n visibleVariables: Set<string>,\n): string | undefined {\n if ((query.groupBy?.length ?? 0) > 0) {\n if ((query.groupBy ?? []).some((variableName) => !visibleVariables.has(variableName))) {\n return 'RDF-3X join shadow cannot group by variables outside required BGP';\n }\n const aggregateAliases = new Set(aggregates.map((aggregate) => aggregate.as));\n if ((query.orderBy ?? []).some((entry) => !(query.groupBy ?? []).includes(entry.variable) && !aggregateAliases.has(entry.variable))) {\n return 'RDF-3X join shadow cannot order grouped aggregates by unbound variables';\n }\n if (!canCompileRdf3xGroupAggregateHaving(query.having ?? [], aggregateAliases)) {\n return 'RDF-3X join shadow cannot push this grouped HAVING shape';\n }\n } else if ((query.having?.length ?? 0) > 0) {\n return 'RDF-3X join shadow does not support non-grouped HAVING yet';\n } else if (query.orderBy?.length || query.limit !== undefined || query.offset !== undefined || query.distinct) {\n return 'RDF-3X join shadow does not support ORDER/LIMIT/DISTINCT around non-grouped aggregates yet';\n }\n\n for (const aggregate of aggregates) {\n if (aggregate.variable && !visibleVariables.has(aggregate.variable)) {\n return 'RDF-3X join shadow aggregate variable must be bound by required BGP';\n }\n if (aggregate.type !== 'count' && (!aggregate.variable || aggregate.distinct)) {\n return 'RDF-3X join shadow only supports non-distinct numeric aggregates over bound variables';\n }\n }\n return undefined;\n}\n\nfunction rdf3xJoinPatternsFor(query: RdfLocalQuery, aggregates: RdfQueryAggregate[]): {\n patterns?: RdfQuadJoinPattern[];\n pushedFilterIndexes: Set<number>;\n unsupportedReason?: string;\n} {\n const patterns: RdfQuadJoinPattern[] = [];\n const pushedFilterIndexes = new Set<number>();\n const numericAggregateVariables = new Set(aggregates\n .filter((aggregate) => aggregate.type !== 'count')\n .map((aggregate) => aggregate.variable)\n .filter((variableName): variableName is string => Boolean(variableName)));\n for (const pattern of query.patterns) {\n const compiled = rdf3xJoinPatternFor(pattern, query.filters ?? [], numericAggregateVariables);\n const unsupportedPattern = unsupportedRdf3xPatternReason(compiled.pattern);\n if (unsupportedPattern) {\n return {\n pushedFilterIndexes,\n unsupportedReason: unsupportedPattern,\n };\n }\n compiled.pushedFilterIndexes.forEach((index) => pushedFilterIndexes.add(index));\n patterns.push({\n pattern: compiled.pattern,\n variables: compiled.variables,\n });\n }\n return { patterns, pushedFilterIndexes };\n}\n\nfunction rdf3xJoinPatternFor(\n pattern: RdfQueryPattern,\n filters: RdfQueryFilter[],\n numericAggregateVariables: Set<string>,\n): RdfQuadJoinPattern & { pushedFilterIndexes: number[] } {\n const compiledPattern: RdfQuadJoinPattern['pattern'] = {};\n const variables: RdfQuadJoinPattern['variables'] = {};\n const pushedFilterIndexes = new Set<number>();\n for (const key of ['graph', 'subject', 'predicate', 'object'] as RdfQueryPatternKey[]) {\n const value = pattern[key];\n if (!value) {\n continue;\n }\n if (isQueryVariable(value)) {\n variables[key] = value.variable;\n const pushdown = rdf3xBenchmarkPushdownFilter(value.variable, filters, numericAggregateVariables);\n if (pushdown) {\n if (pushdown.pattern !== undefined) {\n compiledPattern[key] = pushdown.pattern;\n }\n pushdown.filterIndexes.forEach((index) => pushedFilterIndexes.add(index));\n }\n } else {\n compiledPattern[key] = value;\n }\n }\n return {\n pattern: compiledPattern,\n variables,\n pushedFilterIndexes: [...pushedFilterIndexes],\n };\n}\n\nfunction rdf3xBenchmarkPushdownFilter(\n variableName: string,\n filters: RdfQueryFilter[],\n numericAggregateVariables: Set<string>,\n): { pattern?: RdfQuadJoinPattern['pattern'][RdfQueryPatternKey]; filterIndexes: number[] } | undefined {\n const operators: Record<string, unknown> = {};\n const filterIndexes: number[] = [];\n for (let index = 0; index < filters.length; index += 1) {\n const filter = filters[index];\n if (filter.variable !== variableName || filter.variable2 || filter.operand) {\n continue;\n }\n switch (filter.operator) {\n case '$eq':\n case '$sameTerm':\n if (filter.value === undefined || !isTerm(filter.value as any)) {\n return undefined;\n }\n return { pattern: filter.value as Term, filterIndexes: [index] };\n case '$in':\n if (!filter.values?.length || filter.values.some((value) => !isTerm(value as any))) {\n return undefined;\n }\n return { pattern: { $in: filter.values as Term[] }, filterIndexes: [index] };\n case '$notIn':\n if (!filter.values?.length || filter.values.some((value) => !isTerm(value as any))) {\n return undefined;\n }\n return { pattern: { $notIn: filter.values as Term[] }, filterIndexes: [index] };\n case '$gt':\n case '$gte':\n case '$lt':\n case '$lte':\n if (filter.value === undefined) {\n return undefined;\n }\n operators[filter.operator] = filter.value;\n filterIndexes.push(index);\n break;\n case '$termType':\n if (filter.value !== 'numeric' || !numericAggregateVariables.has(variableName)) {\n return undefined;\n }\n filterIndexes.push(index);\n break;\n default:\n return undefined;\n }\n }\n if (Object.keys(operators).length > 0) {\n return { pattern: operators as RdfQuadJoinPattern['pattern'][RdfQueryPatternKey], filterIndexes };\n }\n return filterIndexes.length > 0\n ? { filterIndexes }\n : undefined;\n}\n\nfunction queryAggregates(query: RdfLocalQuery): RdfQueryAggregate[] {\n return query.aggregates && query.aggregates.length > 0\n ? query.aggregates\n : query.aggregate\n ? [query.aggregate]\n : [];\n}\n\nfunction variablesInLocalPattern(pattern: RdfQueryPattern): string[] {\n return ['graph', 'subject', 'predicate', 'object']\n .map((key) => pattern[key as RdfQueryPatternKey])\n .filter(isQueryVariable)\n .map((value) => value.variable);\n}\n\nfunction canCompileRdf3xGroupAggregateHaving(\n having: RdfQueryFilter[],\n aggregateAliases: Set<string>,\n): boolean {\n return having.every((filter) => (\n aggregateAliases.has(filter.variable)\n && !filter.operand\n && !filter.variable2\n && filter.value !== undefined\n && isGroupAggregateHavingOperator(filter.operator)\n && numericRangeValue(filter.value) !== undefined\n ));\n}\n\nfunction rdf3xGroupAggregateHaving(\n having: RdfQueryFilter[],\n aggregateAliases: Set<string>,\n): RdfQuadJoinGroupAggregateHaving[] {\n return having.map((filter) => {\n const value = filter.value === undefined ? undefined : numericRangeValue(filter.value);\n if (\n !aggregateAliases.has(filter.variable)\n || !isGroupAggregateHavingOperator(filter.operator)\n || value === undefined\n ) {\n throw new Error('RDF-3X join shadow cannot compile grouped HAVING');\n }\n return {\n aggregate: filter.variable,\n operator: filter.operator,\n value,\n };\n });\n}\n\nfunction isGroupAggregateHavingOperator(\n operator: RdfQueryFilter['operator'],\n): operator is RdfQuadJoinGroupAggregateHaving['operator'] {\n return operator === '$eq'\n || operator === '$ne'\n || operator === '$gt'\n || operator === '$gte'\n || operator === '$lt'\n || operator === '$lte';\n}\n\nfunction isQueryVariable(value: unknown): value is { variable: string } {\n return value !== null\n && typeof value === 'object'\n && !('termType' in value)\n && 'variable' in value\n && typeof (value as { variable?: unknown }).variable === 'string';\n}\n\nfunction unsupportedRdf3xPatternReason(pattern: QuintPattern): string | undefined {\n for (const key of ['graph', 'subject', 'predicate', 'object'] as const) {\n const value = pattern[key];\n if (!value || isTerm(value as any)) {\n continue;\n }\n if (key === 'graph' && isGraphPrefixPattern(value)) {\n continue;\n }\n if (isRdf3xTermInPattern(value)) {\n continue;\n }\n if (isRdf3xTermNotInPattern(value)) {\n continue;\n }\n if (key === 'object' && isSupportedRdf3xObjectOperatorPattern(value)) {\n continue;\n }\n return `unsupported ${key} pattern for RDF-3X shadow`;\n }\n return undefined;\n}\n\nfunction rdf3xPatternFor(pattern: QuintPattern): Rdf3xTriplePattern {\n const result: Rdf3xTriplePattern = {};\n for (const key of ['graph', 'subject', 'predicate', 'object'] as const) {\n const value = pattern[key];\n if (!value) {\n continue;\n }\n if (key === 'graph' && isGraphPrefixPattern(value)) {\n result.graph = { $startsWith: value.$startsWith };\n continue;\n }\n if (isRdf3xTermInPattern(value)) {\n result[key] = value;\n continue;\n }\n if (isRdf3xTermNotInPattern(value)) {\n result[key] = value;\n continue;\n }\n if (key === 'object' && isSupportedRdf3xObjectOperatorPattern(value)) {\n result.object = value;\n continue;\n }\n if (!isTerm(value as any)) {\n throw new Error(`RDF-3X shadow benchmark only supports exact ${key} terms or graph prefixes`);\n }\n result[key] = value as import('@rdfjs/types').Term;\n }\n return result;\n}\n\nfunction isRdf3xTermInPattern(value: unknown): value is Rdf3xTermInPattern {\n return value !== null\n && typeof value === 'object'\n && !('termType' in value)\n && Object.keys(value).length === 1\n && Array.isArray((value as { $in?: unknown }).$in)\n && ((value as { $in: unknown[] }).$in).length > 0\n && ((value as { $in: unknown[] }).$in).every((entry) => isTerm(entry as any));\n}\n\nfunction isRdf3xTermNotInPattern(value: unknown): value is Rdf3xTermNotInPattern {\n return value !== null\n && typeof value === 'object'\n && !('termType' in value)\n && Object.keys(value).length === 1\n && Array.isArray((value as { $notIn?: unknown }).$notIn)\n && ((value as { $notIn: unknown[] }).$notIn).length > 0\n && ((value as { $notIn: unknown[] }).$notIn).every((entry) => isTerm(entry as any));\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 isSupportedRdf3xObjectOperatorPattern(value: unknown): value is Rdf3xObjectOperatorPattern {\n if (value === null || typeof value !== 'object' || 'termType' in value) {\n return false;\n }\n let hasOperator = false;\n for (const operator of ['$gt', '$gte', '$lt', '$lte'] as const) {\n const rangeValue = (value as Rdf3xObjectRangePattern)[operator];\n if (rangeValue === undefined) {\n continue;\n }\n hasOperator = true;\n if (!isSupportedRdf3xObjectRangeValue(rangeValue)) {\n return false;\n }\n }\n for (const operator of ['$contains', '$endsWith'] satisfies Array<keyof Rdf3xObjectTextSearchPattern>) {\n const textValue = (value as Rdf3xObjectTextSearchPattern)[operator];\n if (textValue === undefined) {\n continue;\n }\n hasOperator = true;\n if (typeof textValue !== 'string') {\n return false;\n }\n }\n return hasOperator;\n}\n\nfunction isSupportedRdf3xObjectRangeValue(value: unknown): boolean {\n if (typeof value === 'number') {\n return Number.isFinite(value);\n }\n if (typeof value === 'string') {\n return true;\n }\n return isTerm(value as any);\n}\n\nfunction numericRangeValue(value: Term | string | number | boolean): number | undefined {\n if (typeof value === 'boolean') {\n return undefined;\n }\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\nfunction isSemanticallyOrdered(options?: QueryOptions): boolean {\n return Boolean(options?.order && options.order.length > 0);\n}\n\nfunction isSemanticallyOrderedRdf3xJoinShape(shape: Rdf3xJoinBenchmarkShape): boolean {\n switch (shape.kind) {\n case 'join':\n case 'group-count':\n case 'group-aggregate':\n return Boolean(shape.options?.orderBy && shape.options.orderBy.length > 0);\n case 'join-count':\n case 'join-aggregate':\n return false;\n default: {\n const exhaustive: never = shape;\n throw new Error(`Unsupported RDF-3X benchmark shape: ${JSON.stringify(exhaustive)}`);\n }\n }\n}\n\nfunction benchmarkSide(keys: string[], durationsMs: number[]): RdfModelShadowBenchmarkSide {\n return {\n returnedRows: keys.length,\n checksum: checksum(keys, false),\n orderedChecksum: checksum(keys, true),\n durationsMs,\n p50DurationMs: percentile(durationsMs, 0.5),\n p95DurationMs: percentile(durationsMs, 0.95),\n };\n}\n\nfunction diffBindingKeys(primaryKeys: string[], candidateKeys: string[]): RdfShadowDiff {\n const primarySet = new Set(primaryKeys);\n const candidateSet = new Set(candidateKeys);\n return {\n missingFromPrimary: Array.from(candidateSet).filter((key) => !primarySet.has(key)).sort(),\n extraInPrimary: Array.from(primarySet).filter((key) => !candidateSet.has(key)).sort(),\n };\n}\n\nfunction comparePerformance(\n compatibility: RdfModelShadowBenchmarkSide,\n solidRdf: RdfModelShadowBenchmarkSide,\n): RdfModelShadowPerformanceComparison {\n const p95DeltaMs = solidRdf.p95DurationMs - compatibility.p95DurationMs;\n const p95Ratio = solidRdf.p95DurationMs / Math.max(1, compatibility.p95DurationMs);\n return {\n p95DeltaMs,\n p95Ratio,\n matched: p95DeltaMs <= PERFORMANCE_P95_MIN_ABSOLUTE_HEADROOM_MS\n || p95Ratio <= PERFORMANCE_P95_MAX_RATIO,\n };\n}\n\nfunction compareSpace(\n compatibility: StoreStats,\n solidRdf: RdfIndexStats,\n): RdfModelShadowSpaceComparison {\n if (\n compatibility.databaseBytes === undefined\n || compatibility.tableBytes === undefined\n || compatibility.indexBytes === undefined\n ) {\n return {\n databaseDeltaBytes: 0,\n tableDeltaBytes: 0,\n indexDeltaBytes: 0,\n databaseRatio: 0,\n tableRatio: 0,\n indexRatio: 0,\n matched: false,\n unavailableReason: 'compatibility store did not report database/table/index bytes',\n };\n }\n\n const databaseDeltaBytes = solidRdf.databaseBytes - compatibility.databaseBytes;\n const tableDeltaBytes = solidRdf.tableBytes - compatibility.tableBytes;\n const indexDeltaBytes = solidRdf.indexBytes - compatibility.indexBytes;\n\n return {\n databaseDeltaBytes,\n tableDeltaBytes,\n indexDeltaBytes,\n databaseRatio: ratio(solidRdf.databaseBytes, compatibility.databaseBytes),\n tableRatio: ratio(solidRdf.tableBytes, compatibility.tableBytes),\n indexRatio: ratio(solidRdf.indexBytes, compatibility.indexBytes),\n matched: databaseDeltaBytes <= 0 && tableDeltaBytes <= 0 && indexDeltaBytes <= 0,\n };\n}\n\nfunction ratio(candidate: number, baseline: number): number {\n if (baseline <= 0) {\n return candidate <= 0 ? 1 : Number.POSITIVE_INFINITY;\n }\n return candidate / baseline;\n}\n\nfunction missingExpectedPlan(testCase: RdfModelBenchmarkCase, metrics: RdfIndexMetrics): string[] {\n return [\n ...testCase.expectedPlan.filter((label) => !matchesExpectedPlanLabel(label, testCase, metrics)),\n ...unresolvedPlanFailures(metrics.queryPlan ?? []),\n ];\n}\n\nfunction matchesExpectedPlanLabel(label: string, testCase: RdfModelBenchmarkCase, metrics: RdfIndexMetrics): boolean {\n const pattern = testCase.query.pattern;\n const planText = (metrics.queryPlan ?? []).join('\\n');\n switch (label) {\n case 'graph-scope':\n return Boolean(pattern.graph) && metrics.indexChoice.includes('G');\n case 'type-filter':\n return isTerm(pattern.predicate as any)\n && termToId(pattern.predicate as any) === RDF_TYPE\n && Boolean(pattern.object)\n && metrics.indexChoice !== 'full-scan';\n case 'predicate-filter':\n return Boolean(pattern.predicate) && metrics.indexChoice.includes('P');\n case 'predicate-object-filter':\n return Boolean(pattern.predicate) && Boolean(pattern.object) && metrics.indexChoice.includes('P');\n case 'predicate-object-range-filter':\n return Boolean(pattern.predicate)\n && (planText.includes('_range') || planText.includes('LexicalRange(') || planText.includes('NumericRange('));\n case 'limit':\n return testCase.query.options?.limit !== undefined && planText.includes('LIMIT');\n case 'order':\n return Boolean(testCase.query.options?.order?.length) && planText.includes('ORDER BY');\n case 'text-index':\n return planText.includes('TextSearch(');\n case 'rdf-subject-join':\n return planText.includes('TextSearch(')\n && metrics.indexChoice !== 'full-scan'\n && metrics.matchedRows >= metrics.returnedRows;\n case 'SPOG':\n case 'POSG':\n case 'GSPO':\n case 'GPOS':\n case 'OSPG':\n return metrics.indexChoice === label;\n default:\n return false;\n }\n}\n\nfunction missingExpectedRdf3xPlan(testCase: RdfModelBenchmarkCase, metrics: Rdf3xIndexMetrics): string[] {\n return [\n ...testCase.expectedPlan.filter((label) => !matchesExpectedRdf3xPlanLabel(label, testCase, metrics)),\n ...unresolvedPlanFailures(metrics.queryPlan ?? []),\n ];\n}\n\nfunction matchesExpectedRdf3xPlanLabel(\n label: string,\n testCase: RdfModelBenchmarkCase,\n metrics: Rdf3xIndexMetrics,\n): boolean {\n const pattern = testCase.query.pattern;\n const planText = (metrics.queryPlan ?? []).join('\\n');\n switch (label) {\n case 'graph-scope':\n return Boolean(pattern.graph)\n && (metrics.indexChoice === 'source-membership'\n || planText.includes('GraphPrefixMembershipFilter')\n || planText.includes('GraphMembershipFilter'));\n case 'type-filter':\n return isTerm(pattern.predicate as any)\n && termToId(pattern.predicate as any) === RDF_TYPE\n && Boolean(pattern.object)\n && metrics.indexChoice !== 'none';\n case 'predicate-filter':\n return Boolean(pattern.predicate) && metrics.indexChoice !== 'none';\n case 'predicate-object-filter':\n return Boolean(pattern.predicate) && Boolean(pattern.object) && metrics.indexChoice !== 'none';\n case 'predicate-object-range-filter':\n return Boolean(pattern.predicate)\n && (planText.includes('NumericRange(') || planText.includes('LexicalRange('));\n case 'limit':\n return testCase.query.options?.limit !== undefined\n && (planText.includes('Pagination') || planText.includes('LIMIT'));\n case 'order':\n return Boolean(testCase.query.options?.order?.length)\n && (planText.includes('ORDER BY') || planText.includes('Rdf3xJoinOrder('));\n case 'text-index':\n return planText.includes('TextSearch(');\n case 'rdf-subject-join':\n return planText.includes('TextSearch(')\n && metrics.indexChoice !== 'none'\n && metrics.matchedRows >= metrics.returnedRows;\n case 'SPOG':\n return matchesRdf3xPermutation(metrics, 'SPO');\n case 'POSG':\n return matchesRdf3xPermutation(metrics, 'POS');\n case 'OSPG':\n return matchesRdf3xPermutation(metrics, 'OSP');\n case 'GSPO':\n return matchesExpectedRdf3xPlanLabel('graph-scope', testCase, metrics)\n && matchesRdf3xPermutation(metrics, 'SPO');\n case 'GPOS':\n return matchesExpectedRdf3xPlanLabel('graph-scope', testCase, metrics)\n && matchesRdf3xPermutation(metrics, 'POS');\n default:\n return false;\n }\n}\n\nfunction matchesRdf3xPermutation(metrics: Rdf3xIndexMetrics, permutation: Rdf3xPermutationName): boolean {\n const planText = (metrics.queryPlan ?? []).join('\\n');\n return metrics.indexChoice === permutation || planText.includes(`Rdf3xPermutationScan(${permutation})`);\n}\n\nfunction missingExpectedLocalQueryPlan(\n testCase: RdfModelLocalQueryBenchmarkCase,\n metrics: RdfLocalQueryMetrics,\n returnedRows: number,\n): string[] {\n return [\n ...testCase.expectedPlan.filter((label) => !matchesExpectedLocalQueryPlanLabel(label, metrics)),\n ...unresolvedPlanFailures(metrics.plan),\n ...minimumReturnedRowsFailures(testCase, returnedRows),\n ];\n}\n\nfunction unresolvedPlanFailures(plan: readonly string[]): string[] {\n return hasUnresolvedPlan(plan) ? ['resolved-terms'] : [];\n}\n\nfunction hasUnresolvedPlan(plan: readonly string[]): boolean {\n return plan.some((entry) => /\\bunresolved\\b/i.test(entry));\n}\n\nfunction minimumReturnedRowsFailures(\n testCase: RdfModelLocalQueryBenchmarkCase,\n returnedRows: number,\n): string[] {\n const minimum = testCase.minReturnedRows ?? 0;\n return returnedRows >= minimum ? [] : [`min-rows:${minimum}`];\n}\n\nfunction matchesExpectedLocalQueryPlanLabel(label: string, metrics: RdfLocalQueryMetrics): boolean {\n const planText = metrics.plan.join('\\n');\n switch (label) {\n case 'group-count-index':\n return planText.includes('Aggregate(group-count-index)');\n case 'group-aggregate-index':\n return planText.includes('Aggregate(group-basic-multi-index)')\n || planText.includes('Aggregate(group-basic-index)');\n case 'having-pushdown':\n return (planText.includes('IndexGroupCountHaving(')\n || planText.includes('IndexGroupAggregateHaving('))\n && !planText.includes('\\nHaving(');\n case 'order':\n return (planText.includes('IndexGroupCountOrder(')\n || planText.includes('IndexGroupAggregateOrder('))\n && !planText.includes('\\nSort');\n case 'limit':\n return (planText.includes('IndexGroupCountLimit')\n || planText.includes('IndexGroupAggregateLimit'))\n && !planText.includes('\\nLimit');\n case 'join-index':\n return planText.includes('IndexJoin(')\n && !planText.includes('\\nIndexScan(');\n case 'join-order-pushdown':\n return planText.includes('IndexJoinOrder(')\n && !planText.includes('\\nSort');\n case 'join-limit-pushdown':\n return planText.includes('IndexJoinLimit')\n && !planText.includes('\\nLimit');\n case 'range-filter-pushdown':\n return metrics.filtersPushedDown > 0\n && planText.includes('LexicalRange(');\n case 'join-count-index':\n return planText.includes('Aggregate(join-count-distinct-index)')\n && planText.includes('IndexJoinCount(')\n && !planText.includes('\\nIndexScan(');\n default:\n return false;\n }\n}\n\nfunction missingExpectedRdf3xJoinPlan(\n testCase: RdfModelLocalQueryBenchmarkCase,\n metrics: Rdf3xJoinMetrics,\n returnedRows: number,\n): string[] {\n return [\n ...testCase.expectedPlan.filter((label) => !matchesExpectedRdf3xJoinPlanLabel(label, metrics)),\n ...unresolvedPlanFailures(metrics.queryPlan ?? []),\n ...minimumReturnedRowsFailures(testCase, returnedRows),\n ];\n}\n\nfunction matchesExpectedRdf3xJoinPlanLabel(label: string, metrics: Rdf3xJoinMetrics): boolean {\n const planText = (metrics.queryPlan ?? []).join('\\n');\n switch (label) {\n case 'group-count-index':\n return planText.includes('Rdf3xJoinGroupCount(');\n case 'group-aggregate-index':\n return planText.includes('Rdf3xJoinGroupAggregate(')\n || planText.includes('Rdf3xJoinGroupAggregateNumeric(');\n case 'having-pushdown':\n return planText.includes('Rdf3xJoinGroupCountHaving(')\n || planText.includes('Rdf3xJoinGroupAggregateHaving(');\n case 'order':\n return planText.includes('Rdf3xJoinGroupCountOrder(')\n || planText.includes('Rdf3xJoinGroupAggregateOrder(');\n case 'limit':\n return planText.includes('Rdf3xJoinGroupCountLimit')\n || planText.includes('Rdf3xJoinGroupAggregateLimit');\n case 'join-index':\n return planText.includes('Rdf3xJoinBGP(');\n case 'join-order-pushdown':\n return planText.includes('Rdf3xJoinOrder(');\n case 'join-limit-pushdown':\n return planText.includes('Rdf3xJoinLimit');\n case 'range-filter-pushdown':\n return planText.includes('LexicalRange(') || planText.includes('NumericRange(');\n case 'join-count-index':\n return planText.includes('Rdf3xJoinCount(');\n default:\n return false;\n }\n}\n\nfunction bindingKey(binding: RdfBindingRow): string {\n return Object.keys(binding)\n .sort()\n .map((key) => `${key}=${termToId(binding[key] as any)}`)\n .join('\\u001f');\n}\n\nfunction checksum(keys: string[], ordered: boolean): string {\n const normalized = ordered ? keys : [...keys].sort();\n return createHash('sha256')\n .update(normalized.join('\\n'))\n .digest('hex');\n}\n\nfunction percentile(values: number[], percentileValue: number): number {\n if (values.length === 0) {\n return 0;\n }\n const sorted = [...values].sort((a, b) => a - b);\n const index = Math.min(\n sorted.length - 1,\n Math.max(0, Math.ceil(sorted.length * percentileValue) - 1),\n );\n return sorted[index];\n}\n\nfunction scaleRank(scale: RdfBenchmarkScale): number {\n switch (scale) {\n case 'small':\n return 1;\n case 'medium':\n return 2;\n case 'large':\n return 3;\n default: {\n const exhaustive: never = scale;\n return exhaustive;\n }\n }\n}\n\nfunction serializePattern(pattern: QuintPattern): JsonPattern {\n return Object.fromEntries(\n Object.entries(pattern).map(([key, value]) => [key, serializePatternValue(value)]),\n );\n}\n\nfunction serializeLocalQuery(query: RdfLocalQuery): JsonPattern {\n return serializePatternValue(query) as JsonPattern;\n}\n\nfunction serializePatternValue(value: unknown): unknown {\n if (!value) {\n return value;\n }\n if (isTerm(value as any)) {\n return termToId(value as any);\n }\n if (Array.isArray(value)) {\n return value.map(serializePatternValue);\n }\n if (typeof value === 'object') {\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>)\n .map(([key, nested]) => [key, serializePatternValue(nested)]),\n );\n }\n return value;\n}\n"]}
|