@undefineds.co/xpod 0.3.75 → 0.4.0-rc.140
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/bin/xpod.js +43 -8
- package/config/bun.json +45 -48
- package/config/cloud.json +13 -90
- package/config/components-ignore.json +0 -1
- package/config/local.json +111 -63
- package/config/resolver.json +4 -2
- package/config/terminal.json +4 -1
- package/config/xpod.base.json +16 -8
- package/config/xpod.json +51 -54
- package/dist/acceptance/PublicCloudSemanticConformance.d.ts +4 -0
- package/dist/acceptance/PublicCloudSemanticConformance.js +214 -0
- package/dist/acceptance/QleverSearchConformance.d.ts +39 -0
- package/dist/acceptance/QleverSearchConformance.js +686 -0
- package/dist/acceptance/QleverSemanticConformance.d.ts +3 -0
- package/dist/acceptance/QleverSemanticConformance.js +178 -0
- package/dist/acceptance/RdfSemanticConformance.d.ts +114 -0
- package/dist/acceptance/RdfSemanticConformance.js +307 -0
- package/dist/acceptance/run-installed-qlever-conformance.d.ts +12 -0
- package/dist/acceptance/run-installed-qlever-conformance.js +87 -0
- package/dist/acceptance/run-installed-rdf-conformance.d.ts +12 -0
- package/dist/acceptance/run-installed-rdf-conformance.js +88 -0
- package/dist/ai/service/EmbeddingProviderError.d.ts +7 -0
- package/dist/ai/service/EmbeddingProviderError.js +42 -0
- package/dist/api/ai-gateway/connect/index.js +5 -2
- package/dist/api/auth/AuthContext.d.ts +5 -0
- package/dist/api/auth/AuthContext.js +10 -0
- package/dist/api/container/common.js +20 -1
- package/dist/api/container/rdf.d.ts +1 -0
- package/dist/api/container/rdf.js +43 -4
- package/dist/api/container/types.d.ts +4 -0
- package/dist/api/runs/InngestRunExecutionBackend.d.ts +2 -2
- package/dist/api/runs/PiAgentRuntimeDriver.d.ts +2 -0
- package/dist/api/runs/PiAgentRuntimeDriver.js +1 -0
- package/dist/api/runs/RdfRunContextRetriever.d.ts +8 -0
- package/dist/api/runs/RdfRunContextRetriever.js +23 -1
- package/dist/api/runtime.js +20 -6
- package/dist/api/service/RdfSearchIndexingService.d.ts +37 -3
- package/dist/api/service/RdfSearchIndexingService.js +130 -18
- package/dist/api/service/RdfSearchIndexingSolidFsSyncer.d.ts +8 -0
- package/dist/api/service/RdfSearchIndexingSolidFsSyncer.js +102 -15
- package/dist/api/service/RdfSearchReconciliationWorker.d.ts +76 -0
- package/dist/api/service/RdfSearchReconciliationWorker.js +294 -0
- package/dist/api/tasks/InngestTaskScheduler.d.ts +4 -4
- package/dist/components/components.jsonld +9 -12
- package/dist/components/context.jsonld +227 -348
- package/dist/document/MarkdownRetrievalPointProjector.d.ts +33 -0
- package/dist/document/MarkdownRetrievalPointProjector.js +196 -0
- package/dist/document/MarkdownRetrievalPointProjector.jsonld +135 -0
- package/dist/document/ReaderMaterialization.d.ts +34 -0
- package/dist/document/ReaderMaterialization.js +3 -0
- package/dist/document/ReaderMaterialization.jsonld +151 -0
- package/dist/document/ReaderMaterializationRepository.d.ts +27 -0
- package/dist/document/ReaderMaterializationRepository.js +400 -0
- package/dist/document/ReaderMaterializationRepository.jsonld +84 -0
- package/dist/document/index.d.ts +3 -1
- package/dist/document/index.js +3 -1
- package/dist/http/SubgraphSparqlHttpHandler.js +34 -54
- package/dist/http/search/SearchHttpHandler.js +14 -12
- package/dist/http/terminal/TerminalHttpHandler.d.ts +3 -0
- package/dist/http/terminal/TerminalHttpHandler.js +1 -0
- package/dist/http/terminal/TerminalHttpHandler.jsonld +11 -0
- package/dist/identity/drizzle/DrizzleIndexedStorage.js +19 -39
- package/dist/identity/drizzle/db.d.ts +1 -0
- package/dist/identity/drizzle/db.js +35 -0
- package/dist/index.d.ts +9 -17
- package/dist/index.js +14 -22
- package/dist/provision/ProvisionPodCreator.d.ts +1 -1
- package/dist/provision/ProvisionPodCreator.js +4 -3
- package/dist/search/RdfSearchIntentSink.d.ts +17 -0
- package/dist/search/RdfSearchIntentSink.js +46 -0
- package/dist/search/RdfSearchIntentSink.jsonld +47 -0
- package/dist/search/RdfSearchReconciliationRepository.d.ts +81 -0
- package/dist/search/RdfSearchReconciliationRepository.js +771 -0
- package/dist/solidfs/LocalRdfAuthorityRecoveryInitializer.d.ts +15 -0
- package/dist/solidfs/LocalRdfAuthorityRecoveryInitializer.js +48 -0
- package/dist/solidfs/LocalRdfAuthorityRecoveryInitializer.jsonld +99 -0
- package/dist/solidfs/RdfIndexSolidFsSyncer.js +22 -4
- package/dist/solidfs/SolidFsSyncJournal.d.ts +7 -1
- package/dist/solidfs/SolidFsSyncJournal.js +20 -5
- package/dist/solidfs/SolidFsSyncJournal.jsonld +43 -0
- package/dist/solidfs/index.d.ts +1 -0
- package/dist/solidfs/index.js +1 -0
- package/dist/storage/SparqlUpdateResourceStore.js +3 -3
- package/dist/storage/accessors/MixDataAccessor.d.ts +21 -29
- package/dist/storage/accessors/MixDataAccessor.js +182 -399
- package/dist/storage/accessors/MixDataAccessor.jsonld +109 -87
- package/dist/storage/accessors/SolidRdfDataAccessor.d.ts +12 -8
- package/dist/storage/accessors/SolidRdfDataAccessor.js +189 -59
- package/dist/storage/accessors/SolidRdfDataAccessor.jsonld +14 -29
- package/dist/storage/rdf/LocalQleverNativeSparqlClient.d.ts +55 -0
- package/dist/storage/rdf/LocalQleverNativeSparqlClient.js +519 -0
- package/dist/storage/rdf/LocalQleverNativeSparqlClient.jsonld +314 -0
- package/dist/storage/rdf/PostgresRdfEngine.d.ts +3 -1
- package/dist/storage/rdf/PostgresRdfEngine.js +111 -74
- package/dist/storage/rdf/PostgresRdfEngine.jsonld +12 -22
- package/dist/storage/rdf/PostgresRdfSchemaValidation.d.ts +8 -0
- package/dist/storage/rdf/PostgresRdfSchemaValidation.js +82 -0
- package/dist/storage/rdf/PostgresRdfTextIndex.d.ts +6 -3
- package/dist/storage/rdf/PostgresRdfTextIndex.js +158 -80
- package/dist/storage/rdf/PostgresRdfTextIndex.jsonld +16 -4
- package/dist/storage/rdf/PostgresRdfVectorIndex.d.ts +4 -5
- package/dist/storage/rdf/PostgresRdfVectorIndex.js +124 -120
- package/dist/storage/rdf/PostgresRdfVectorIndex.jsonld +14 -18
- package/dist/storage/rdf/QleverSparqlEngine.d.ts +35 -0
- package/dist/storage/rdf/QleverSparqlEngine.js +185 -0
- package/dist/storage/rdf/QleverSparqlEngine.jsonld +70 -0
- package/dist/storage/rdf/Rdf3xIndex.js +20 -16
- package/dist/storage/rdf/RdfAccessScope.d.ts +4 -0
- package/dist/storage/rdf/RdfAccessScope.js +74 -9
- package/dist/storage/rdf/RdfAccessScope.jsonld +16 -0
- package/dist/storage/rdf/RdfEngineRdfJsSource.d.ts +14 -0
- package/dist/storage/rdf/RdfEngineRdfJsSource.js +179 -0
- package/dist/storage/rdf/RdfQuadIndex.d.ts +13 -14
- package/dist/storage/rdf/RdfQuadIndex.js +286 -99
- package/dist/storage/rdf/RdfQuadIndex.jsonld +10 -22
- package/dist/storage/rdf/RdfQueryExecutor.js +10 -4
- package/dist/storage/rdf/RdfQuerySparqlEngine.d.ts +33 -0
- package/dist/storage/rdf/RdfQuerySparqlEngine.js +215 -0
- package/dist/storage/rdf/RdfQuerySparqlEngine.jsonld +78 -0
- package/dist/storage/rdf/RdfSparqlAdapter.d.ts +0 -4
- package/dist/storage/rdf/RdfSparqlAdapter.js +75 -173
- package/dist/storage/rdf/RdfSparqlBoundary.d.ts +37 -0
- package/dist/storage/rdf/RdfSparqlBoundary.js +247 -0
- package/dist/storage/rdf/RdfSparqlSerialization.d.ts +3 -0
- package/dist/storage/rdf/RdfSparqlSerialization.js +19 -0
- package/dist/storage/rdf/RdfSqliteConnection.d.ts +7 -0
- package/dist/storage/rdf/RdfSqliteConnection.js +23 -0
- package/dist/storage/rdf/RdfTermDictionary.d.ts +0 -8
- package/dist/storage/rdf/RdfTermDictionary.js +0 -136
- package/dist/storage/rdf/RdfTermDictionary.jsonld +0 -32
- package/dist/storage/rdf/RdfTermSemantics.d.ts +6 -0
- package/dist/storage/rdf/RdfTermSemantics.js +29 -0
- package/dist/storage/rdf/RdfTextIndex.d.ts +5 -6
- package/dist/storage/rdf/RdfTextIndex.js +187 -115
- package/dist/storage/rdf/RdfTextIndex.jsonld +10 -14
- package/dist/storage/rdf/RdfVectorIndex.d.ts +4 -4
- package/dist/storage/rdf/RdfVectorIndex.js +156 -233
- package/dist/storage/rdf/RdfVectorIndex.jsonld +10 -14
- package/dist/storage/rdf/SolidRdfEngine.d.ts +16 -21
- package/dist/storage/rdf/SolidRdfEngine.js +28 -308
- package/dist/storage/rdf/SolidRdfEngine.jsonld +26 -148
- package/dist/storage/rdf/XpodComunicaQueryEngine.d.ts +10 -0
- package/dist/storage/rdf/XpodComunicaQueryEngine.js +72 -0
- package/dist/storage/rdf/index.d.ts +7 -6
- package/dist/storage/rdf/index.js +17 -12
- package/dist/storage/rdf/models-benchmark.d.ts +5 -1
- package/dist/storage/rdf/models-benchmark.js +17 -19
- package/dist/storage/rdf/types.d.ts +68 -6
- package/dist/storage/rdf/types.jsonld +69 -0
- package/dist/storage/sparql/SubgraphQueryEngine.d.ts +13 -7
- package/dist/storage/sparql/SubgraphQueryEngine.js +6 -6
- package/dist/storage/vector/index.d.ts +0 -1
- package/dist/storage/vector/index.js +0 -1
- package/dist/terminal/AclPermissionService.d.ts +4 -5
- package/dist/terminal/AclPermissionService.js +55 -75
- package/dist/terminal/TerminalSessionManager.d.ts +3 -2
- package/dist/terminal/TerminalSessionManager.js +3 -3
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/ldp-executor.d.ts +1 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/ldp-executor.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/ldp-executor.js +29 -26
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/ldp-executor.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/sparql-strategy.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/sparql-strategy.js +9 -4
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/execution/sparql-strategy.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/notifications/notifications-client.d.ts +1 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/notifications/notifications-client.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/notifications/notifications-client.js +6 -3
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/notifications/notifications-client.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/pod-database.js +3 -3
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/pod-database.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/select-query-builder.d.ts +6 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/select-query-builder.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/select-query-builder.js +13 -3
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-builders/select-query-builder.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-where-policy.d.ts +1 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-where-policy.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-where-policy.js +31 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/query-where-policy.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/sparql/builder/expression-builder.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/sparql/builder/expression-builder.js +5 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/sparql/builder/expression-builder.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/sparql-executor.d.ts +1 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/sparql-executor.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/sparql-executor.js +45 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/core/sparql-executor.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/ldp-executor.d.ts +1 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/ldp-executor.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/ldp-executor.js +29 -26
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/ldp-executor.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/sparql-strategy.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/sparql-strategy.js +9 -4
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/execution/sparql-strategy.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/notifications/notifications-client.d.ts +1 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/notifications/notifications-client.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/notifications/notifications-client.js +6 -3
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/notifications/notifications-client.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/pod-database.js +3 -3
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/pod-database.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/select-query-builder.d.ts +6 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/select-query-builder.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/select-query-builder.js +14 -4
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-builders/select-query-builder.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-where-policy.d.ts +1 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-where-policy.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-where-policy.js +30 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/query-where-policy.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/sparql/builder/expression-builder.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/sparql/builder/expression-builder.js +5 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/sparql/builder/expression-builder.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/sparql-executor.d.ts +1 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/sparql-executor.d.ts.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/sparql-executor.js +45 -0
- package/node_modules/@undefineds.co/drizzle-solid/dist/esm/core/sparql-executor.js.map +1 -1
- package/node_modules/@undefineds.co/drizzle-solid/package.json +5 -4
- package/package.json +22 -8
- package/static/app/assets/{index-36TJKN-3.js → index-BikOyGPu.js} +34 -34
- package/static/app/assets/inrupt-smoke.js +2 -2
- package/static/app/assets/main.css +1 -1
- package/static/app/assets/main.js +11 -11
- package/static/auth-callback/assets/{AiConfigContext-BvBdu_A3.js → AiConfigContext-iQ74JmRZ.js} +1 -1
- package/static/auth-callback/assets/{AiConfigPage-BpDw4jco.js → AiConfigPage-BBDKE1gJ.js} +1 -1
- package/static/auth-callback/assets/{DocumentProcessingPanel-BmZ_jzRr.js → DocumentProcessingPanel-D9NntIEK.js} +1 -1
- package/static/auth-callback/assets/{IndexLifecyclePanel-BfQBjN4z.js → IndexLifecyclePanel-BG07yBdA.js} +1 -1
- package/static/auth-callback/assets/{IndexSubjectPanel-BlsnatPt.js → IndexSubjectPanel-B-bUnU3G.js} +1 -1
- package/static/auth-callback/assets/{ModelAssignmentsPanel-KA6Mdndz.js → ModelAssignmentsPanel-C7I-Nqy-.js} +1 -1
- package/static/auth-callback/assets/{ModelsPage-C7jymyIY.js → ModelsPage-C2hxyrmI.js} +1 -1
- package/static/auth-callback/assets/{NetworkPage-k2ShktNm.js → NetworkPage-IGIc2q1Y.js} +1 -1
- package/static/auth-callback/assets/{PaneListHeader-mLMe_dvU.js → PaneListHeader-CebuPl_g.js} +1 -1
- package/static/auth-callback/assets/{SearchIndexingPanel-CqV9um_t.js → SearchIndexingPanel-6HnZSg00.js} +1 -1
- package/static/auth-callback/assets/{StatusSubjectPanel-BgMBTbr2.js → StatusSubjectPanel-votxBkr5.js} +1 -1
- package/static/auth-callback/assets/{StatusWorkspace-zbSyhdG2.js → StatusWorkspace-Cksl61zX.js} +1 -1
- package/static/auth-callback/assets/{SystemSettingsPage-CtW79nW6.js → SystemSettingsPage-CKZFUaZT.js} +1 -1
- package/static/auth-callback/assets/{SystemSettingsSubjectPanel-ZOPKYUtZ.js → SystemSettingsSubjectPanel-pzfUcCf4.js} +1 -1
- package/static/auth-callback/assets/{activity-BQ-CQE3O.js → activity-DQL6kZHZ.js} +1 -1
- package/static/auth-callback/assets/auth-callback-B_s8Ye5Z.css +1 -0
- package/static/auth-callback/assets/{auth-callback-Htr_CB_g.js → auth-callback-BxQMd_Mc.js} +39 -39
- package/static/auth-callback/assets/{badge-D5SGTJeO.js → badge-DvW4LUHH.js} +1 -1
- package/static/auth-callback/assets/{download-DK183Ldo.js → download-Cx_uaCR1.js} +1 -1
- package/static/auth-callback/assets/{external-link-LDHy_4bn.js → external-link-D6L6ExH1.js} +1 -1
- package/static/auth-callback/assets/{index-BWrvgHqK.js → index-BAS_hxGu.js} +1 -1
- package/static/auth-callback/assets/{index-2WmlePQ9.js → index-BmBjpCoD.js} +1 -1
- package/static/auth-callback/assets/{index-browser-DUd4E4-x.js → index-browser-pdn4D3M4.js} +1 -1
- package/static/auth-callback/assets/{key-round-ibX79Kr-.js → key-round-BTBzOggq.js} +1 -1
- package/static/auth-callback/assets/{rotate-ccw-B2_VMaiX.js → rotate-ccw-eV7Cx8sB.js} +1 -1
- package/static/auth-callback/assets/{skeleton-F4nrpycc.js → skeleton-Bg4GYgBM.js} +1 -1
- package/static/auth-callback/assets/{waypoints-DImIq93f.js → waypoints-CJbydf0B.js} +1 -1
- package/static/auth-callback/assets/{workspace-layout-IVCSYU21.js → workspace-layout-C6Hh8Xf-.js} +1 -1
- package/static/auth-callback/auth-callback.html +2 -2
- package/static/dashboard/assets/{AiConfigContext-cjjfYTo9.js → AiConfigContext-BkJj28vK.js} +1 -1
- package/static/dashboard/assets/{AiConfigPage-CO0DSD_j.js → AiConfigPage-Cs9B4uyp.js} +1 -1
- package/static/dashboard/assets/{DocumentProcessingPanel-DMGnH8Oj.js → DocumentProcessingPanel-BBWmM7mS.js} +1 -1
- package/static/dashboard/assets/{IndexLifecyclePanel-DSkIOCL5.js → IndexLifecyclePanel-D5xGTT_i.js} +1 -1
- package/static/dashboard/assets/{IndexSubjectPanel-qWN_DbAp.js → IndexSubjectPanel-d-mjDthn.js} +1 -1
- package/static/dashboard/assets/{ModelAssignmentsPanel-DCf83uM3.js → ModelAssignmentsPanel-C-OLNbqf.js} +1 -1
- package/static/dashboard/assets/{ModelsPage-CMnvSrl5.js → ModelsPage-CBrLjuUn.js} +1 -1
- package/static/dashboard/assets/{NetworkPage-C8Gkwclb.js → NetworkPage-BlYk8L1z.js} +1 -1
- package/static/dashboard/assets/{PaneListHeader-BtU_8cDK.js → PaneListHeader-A5oZJQC0.js} +1 -1
- package/static/dashboard/assets/{SearchIndexingPanel-DEn12pNU.js → SearchIndexingPanel-Bs1j8ZP2.js} +1 -1
- package/static/dashboard/assets/{StatusSubjectPanel-B1_ILg2d.js → StatusSubjectPanel-Qao3orvi.js} +1 -1
- package/static/dashboard/assets/{StatusWorkspace-BG6nMNCo.js → StatusWorkspace-rDM0yDtk.js} +1 -1
- package/static/dashboard/assets/{SystemSettingsPage-BnWYIXaM.js → SystemSettingsPage-FPRPkKaR.js} +1 -1
- package/static/dashboard/assets/{SystemSettingsSubjectPanel-C_mYVPWb.js → SystemSettingsSubjectPanel-CjlJAxnX.js} +1 -1
- package/static/dashboard/assets/{activity-DYJ7PdRl.js → activity-CJ5K6hYC.js} +1 -1
- package/static/dashboard/assets/{badge-BIaZco1P.js → badge-L-NMOi1P.js} +1 -1
- package/static/dashboard/assets/dashboard-B_s8Ye5Z.css +1 -0
- package/static/dashboard/assets/{dashboard-Dl40_MEa.js → dashboard-DyjAyYxx.js} +34 -34
- package/static/dashboard/assets/{download-By16k9VK.js → download-Bi4u5K5B.js} +1 -1
- package/static/dashboard/assets/{external-link-B92xOG_d.js → external-link-jmhLDfvT.js} +1 -1
- package/static/dashboard/assets/{index-BajZpJ48.js → index-BoaGJBxf.js} +1 -1
- package/static/dashboard/assets/{index-wsVPom_x.js → index-C22TAEi4.js} +1 -1
- package/static/dashboard/assets/{key-round-Clo5FOwA.js → key-round-Dk1VmMrn.js} +1 -1
- package/static/dashboard/assets/{rotate-ccw-smWSfi1L.js → rotate-ccw-DIfLsSwi.js} +1 -1
- package/static/dashboard/assets/{skeleton-BrTaGeJw.js → skeleton-BGPJMHb-.js} +1 -1
- package/static/dashboard/assets/{waypoints-DGPQInE7.js → waypoints-CY53egpu.js} +1 -1
- package/static/dashboard/assets/{workspace-layout-CPU4XRmb.js → workspace-layout-CoHkcx70.js} +1 -1
- package/static/dashboard/dashboard.html +2 -2
- package/static/settings/assets/{AiConfigContext-CT29_OyW.js → AiConfigContext-BcEPlEJe.js} +1 -1
- package/static/settings/assets/{AiConfigPage-WIE95S28.js → AiConfigPage-D-t3ZUhg.js} +1 -1
- package/static/settings/assets/{DocumentProcessingPanel-KG8Sq999.js → DocumentProcessingPanel-m2SasiMO.js} +1 -1
- package/static/settings/assets/{IndexLifecyclePanel-iKvtHDXY.js → IndexLifecyclePanel-BNmAvx8V.js} +1 -1
- package/static/settings/assets/{IndexSubjectPanel-BQdSCkk4.js → IndexSubjectPanel-C5-L2AcW.js} +1 -1
- package/static/settings/assets/{ModelAssignmentsPanel-P8QcVB0F.js → ModelAssignmentsPanel-Cfpkf02Y.js} +1 -1
- package/static/settings/assets/{ModelsPage-UZkZGqor.js → ModelsPage-DZrACwVN.js} +1 -1
- package/static/settings/assets/{NetworkPage-Dcpcvg15.js → NetworkPage-BlrGGfqL.js} +1 -1
- package/static/settings/assets/{PaneListHeader--gHtZws5.js → PaneListHeader-C3TCs1RI.js} +1 -1
- package/static/settings/assets/{SearchIndexingPanel-DdgJSJYQ.js → SearchIndexingPanel-Cyp3CUzX.js} +1 -1
- package/static/settings/assets/{StatusSubjectPanel-UOxp_XVL.js → StatusSubjectPanel-gRkb8WEX.js} +1 -1
- package/static/settings/assets/{StatusWorkspace-CPNXuD12.js → StatusWorkspace-Dptx4Ec2.js} +1 -1
- package/static/settings/assets/{SystemSettingsPage-B6ySeVPw.js → SystemSettingsPage-BWgGUQbs.js} +1 -1
- package/static/settings/assets/{SystemSettingsSubjectPanel-I7zWmpiI.js → SystemSettingsSubjectPanel-VflUvpgC.js} +1 -1
- package/static/settings/assets/{activity-CFhmzahP.js → activity-D7iNhTkQ.js} +1 -1
- package/static/settings/assets/{badge-BBdUc5B-.js → badge-DO0r_RT4.js} +1 -1
- package/static/settings/assets/{download-WJE9-yxQ.js → download-CsJlNSbd.js} +1 -1
- package/static/settings/assets/{external-link-RKoYyCp_.js → external-link-BCR7SHme.js} +1 -1
- package/static/settings/assets/{index-Bq2o0Bif.js → index-Cgq16ekN.js} +1 -1
- package/static/settings/assets/{index-DvxneI5O.js → index-SrhQvcrU.js} +1 -1
- package/static/settings/assets/{index-browser-Qmo6EsFT.js → index-browser-THpcMCnz.js} +1 -1
- package/static/settings/assets/{key-round-r-D9sQUK.js → key-round-Dd3jk1BT.js} +1 -1
- package/static/settings/assets/{rotate-ccw-D3IIhbPH.js → rotate-ccw-tiL14i1d.js} +1 -1
- package/static/settings/assets/settings-B_s8Ye5Z.css +1 -0
- package/static/settings/assets/{settings-D8oDBXWg.js → settings-CVLDPejo.js} +34 -34
- package/static/settings/assets/{skeleton-DrL4RQuw.js → skeleton-DBxLuNgU.js} +1 -1
- package/static/settings/assets/{waypoints-C5sRhpJw.js → waypoints-DS3e3hv7.js} +1 -1
- package/static/settings/assets/{workspace-layout-B4ALmWsM.js → workspace-layout-mucrxyTK.js} +1 -1
- package/static/settings/settings.html +2 -2
- package/config/search.json +0 -66
- package/dist/document/HeadingChunker.jsonld +0 -41
- package/dist/security/secret-cell/DeploymentRootKeyProvider.jsonld +0 -124
- package/dist/security/secret-cell/SecretCellVault.jsonld +0 -207
- package/dist/storage/PostgresDerivedIndexJournal.d.ts +0 -47
- package/dist/storage/PostgresDerivedIndexJournal.js +0 -408
- package/dist/storage/PostgresDerivedIndexJournal.jsonld +0 -303
- package/dist/storage/RdfDerivedIndexingListener.d.ts +0 -32
- package/dist/storage/RdfDerivedIndexingListener.js +0 -135
- package/dist/storage/RdfDerivedIndexingListener.jsonld +0 -228
- package/dist/storage/accessors/QuadstoreSparqlDataAccessor.d.ts +0 -148
- package/dist/storage/accessors/QuadstoreSparqlDataAccessor.js +0 -436
- package/dist/storage/accessors/QuadstoreSparqlDataAccessor.jsonld +0 -172
- package/dist/storage/accessors/QuintStoreSparqlDataAccessor.d.ts +0 -102
- package/dist/storage/accessors/QuintStoreSparqlDataAccessor.js +0 -474
- package/dist/storage/accessors/QuintStoreSparqlDataAccessor.jsonld +0 -192
- package/dist/storage/rdf/RdfSparqlAdapter.jsonld +0 -486
- package/dist/storage/rdf/ShadowRdfQuintStore.d.ts +0 -59
- package/dist/storage/rdf/ShadowRdfQuintStore.js +0 -216
- package/dist/storage/rdf/ShadowRdfQuintStore.jsonld +0 -312
- package/dist/storage/rdf/SolidRdfSparqlEngine.d.ts +0 -107
- package/dist/storage/rdf/SolidRdfSparqlEngine.js +0 -1117
- package/dist/storage/rdf/SolidRdfSparqlEngine.jsonld +0 -312
- package/dist/storage/sparql/AlgebraUtils.d.ts +0 -48
- package/dist/storage/sparql/AlgebraUtils.js +0 -118
- package/dist/storage/sparql/CompatibilitySparqlEngine.d.ts +0 -37
- package/dist/storage/sparql/CompatibilitySparqlEngine.js +0 -96
- package/dist/storage/sparql/CompatibilitySparqlEngine.jsonld +0 -123
- package/dist/storage/sparql/CompatibilitySparqlEngineImpl.d.ts +0 -36
- package/dist/storage/sparql/CompatibilitySparqlEngineImpl.js +0 -124
- package/dist/storage/sparql/ComunicaOptimizedEngine.d.ts +0 -59
- package/dist/storage/sparql/ComunicaOptimizedEngine.js +0 -254
- package/dist/storage/sparql/ComunicaQuintEngine.d.ts +0 -143
- package/dist/storage/sparql/ComunicaQuintEngine.js +0 -781
- package/dist/storage/sparql/ExpressionEvaluator.d.ts +0 -54
- package/dist/storage/sparql/ExpressionEvaluator.js +0 -340
- package/dist/storage/sparql/FilterPushdownExtractor.d.ts +0 -74
- package/dist/storage/sparql/FilterPushdownExtractor.js +0 -421
- package/dist/storage/sparql/OptimizedQuadstoreEngine.d.ts +0 -65
- package/dist/storage/sparql/OptimizedQuadstoreEngine.js +0 -327
- package/dist/storage/sparql/OptimizedQuadstoreSource.d.ts +0 -46
- package/dist/storage/sparql/OptimizedQuadstoreSource.js +0 -118
- package/dist/storage/sparql/PatternBuilder.d.ts +0 -41
- package/dist/storage/sparql/PatternBuilder.js +0 -118
- package/dist/storage/sparql/QueryOptimizer.d.ts +0 -125
- package/dist/storage/sparql/QueryOptimizer.js +0 -375
- package/dist/storage/sparql/QuintEngine.d.ts +0 -92
- package/dist/storage/sparql/QuintEngine.js +0 -150
- package/dist/storage/sparql/QuintQuerySource.d.ts +0 -241
- package/dist/storage/sparql/QuintQuerySource.js +0 -1069
- package/dist/storage/sparql/SimpleSparqlExecutor.d.ts +0 -40
- package/dist/storage/sparql/SimpleSparqlExecutor.js +0 -131
- package/dist/storage/vector/VectorIndexingListener.d.ts +0 -114
- package/dist/storage/vector/VectorIndexingListener.js +0 -346
- package/static/auth-callback/assets/auth-callback-rWdEQY5f.css +0 -1
- package/static/dashboard/assets/dashboard-rWdEQY5f.css +0 -1
- package/static/settings/assets/settings-rWdEQY5f.css +0 -1
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* QueryOptimizer - 统一的查询优化层
|
|
3
|
-
*
|
|
4
|
-
* 职责:
|
|
5
|
-
* 1. 分析 SPARQL algebra,识别可优化的模式
|
|
6
|
-
* 2. 选择最优执行策略
|
|
7
|
-
* 3. 执行优化后的查询
|
|
8
|
-
*
|
|
9
|
-
* 支持的优化:
|
|
10
|
-
* - OPTIONAL 优化:批量获取属性,避免指数级 LEFT JOIN
|
|
11
|
-
* - Compound Query:多 pattern SQL JOIN,避免 JS 层 hash join
|
|
12
|
-
* - FILTER 下推:条件下推到 SQL 层
|
|
13
|
-
*
|
|
14
|
-
* 设计原则:
|
|
15
|
-
* - 所有优化逻辑集中在此类
|
|
16
|
-
* - 对外暴露统一的接口
|
|
17
|
-
* - 优化失败时优雅降级到 Comunica 默认行为
|
|
18
|
-
*/
|
|
19
|
-
import type { Bindings } from '@rdfjs/types';
|
|
20
|
-
import type { Algebra } from 'sparqlalgebrajs';
|
|
21
|
-
import type { QuintStore } from '../quint/types';
|
|
22
|
-
/**
|
|
23
|
-
* OPTIONAL 优化分析结果
|
|
24
|
-
*/
|
|
25
|
-
export interface OptionalAnalysis {
|
|
26
|
-
/** 是否可优化 */
|
|
27
|
-
canOptimize: boolean;
|
|
28
|
-
/** 核心查询(不含 OPTIONAL) */
|
|
29
|
-
coreOperation?: Algebra.Operation;
|
|
30
|
-
/** subject 变量名 */
|
|
31
|
-
subjectVar?: string;
|
|
32
|
-
/** 要获取的属性 predicates */
|
|
33
|
-
optionalPredicates?: string[];
|
|
34
|
-
/** 各 OPTIONAL 的变量名 */
|
|
35
|
-
optionalVars?: Map<string, string>;
|
|
36
|
-
/** 不能优化的原因 */
|
|
37
|
-
reason?: string;
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Compound Query 优化分析结果
|
|
41
|
-
*/
|
|
42
|
-
export interface CompoundAnalysis {
|
|
43
|
-
/** 是否可优化 */
|
|
44
|
-
canOptimize: boolean;
|
|
45
|
-
/** 所有 patterns */
|
|
46
|
-
patterns?: Algebra.Pattern[];
|
|
47
|
-
/** JOIN 变量名 */
|
|
48
|
-
joinVar?: string;
|
|
49
|
-
/** JOIN 字段 */
|
|
50
|
-
joinField?: 'subject' | 'predicate' | 'object' | 'graph';
|
|
51
|
-
/** 不能优化的原因 */
|
|
52
|
-
reason?: string;
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* 查询优化结果
|
|
56
|
-
*/
|
|
57
|
-
export interface OptimizationResult {
|
|
58
|
-
/** 优化类型 */
|
|
59
|
-
type: 'optional' | 'compound' | 'none';
|
|
60
|
-
/** 分析结果 */
|
|
61
|
-
analysis: OptionalAnalysis | CompoundAnalysis | null;
|
|
62
|
-
}
|
|
63
|
-
export interface QueryOptimizerOptions {
|
|
64
|
-
debug?: boolean;
|
|
65
|
-
bindingsFactory: any;
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* QueryOptimizer - 查询优化器
|
|
69
|
-
*/
|
|
70
|
-
export declare class QueryOptimizer {
|
|
71
|
-
private readonly store;
|
|
72
|
-
private readonly debug;
|
|
73
|
-
private readonly bindingsFactory;
|
|
74
|
-
constructor(store: QuintStore, options: QueryOptimizerOptions);
|
|
75
|
-
/**
|
|
76
|
-
* 分析查询,确定最佳优化策略
|
|
77
|
-
*/
|
|
78
|
-
analyzeQuery(algebra: Algebra.Operation): OptimizationResult;
|
|
79
|
-
/**
|
|
80
|
-
* 执行 OPTIONAL 优化查询
|
|
81
|
-
*
|
|
82
|
-
* @param analysis OPTIONAL 分析结果
|
|
83
|
-
* @param coreBindings 核心查询的绑定结果
|
|
84
|
-
* @param orderOptions 排序选项(可选)
|
|
85
|
-
*/
|
|
86
|
-
executeOptionalOptimized(analysis: OptionalAnalysis, coreBindings: Bindings[], orderOptions?: {
|
|
87
|
-
varName: string;
|
|
88
|
-
reverse?: boolean;
|
|
89
|
-
}): Promise<Bindings[]>;
|
|
90
|
-
/**
|
|
91
|
-
* 对 Bindings 数组按指定变量排序
|
|
92
|
-
*/
|
|
93
|
-
private sortBindings;
|
|
94
|
-
/**
|
|
95
|
-
* 分析查询是否可以进行 OPTIONAL 优化
|
|
96
|
-
*
|
|
97
|
-
* 可优化条件:
|
|
98
|
-
* 1. 有核心条件(BGP 或带 FILTER 的 BGP)
|
|
99
|
-
* 2. 有 OPTIONAL(>= 1 个)
|
|
100
|
-
* 3. 所有 OPTIONAL 都是简单的属性获取:?s <pred> ?var
|
|
101
|
-
* 4. 所有 OPTIONAL 使用同一个 subject 变量
|
|
102
|
-
* 5. OPTIONAL 内部没有额外的 FILTER
|
|
103
|
-
*/
|
|
104
|
-
analyzeOptional(algebra: Algebra.Operation): OptionalAnalysis;
|
|
105
|
-
/**
|
|
106
|
-
* 分析查询是否可以进行 Compound Query 优化
|
|
107
|
-
*/
|
|
108
|
-
analyzeCompound(algebra: Algebra.Operation): CompoundAnalysis;
|
|
109
|
-
/**
|
|
110
|
-
* 从核心操作提取 subject 变量
|
|
111
|
-
*/
|
|
112
|
-
private extractSubjectVariable;
|
|
113
|
-
/**
|
|
114
|
-
* 从 OPTIONAL 的右操作数提取简单 pattern 信息
|
|
115
|
-
*/
|
|
116
|
-
private extractSimplePattern;
|
|
117
|
-
/**
|
|
118
|
-
* 从 JOIN 操作提取所有 patterns
|
|
119
|
-
*/
|
|
120
|
-
private extractPatternsFromJoin;
|
|
121
|
-
/**
|
|
122
|
-
* 组装 OPTIONAL 优化结果
|
|
123
|
-
*/
|
|
124
|
-
private assembleOptionalResults;
|
|
125
|
-
}
|
|
@@ -1,375 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* QueryOptimizer - 统一的查询优化层
|
|
4
|
-
*
|
|
5
|
-
* 职责:
|
|
6
|
-
* 1. 分析 SPARQL algebra,识别可优化的模式
|
|
7
|
-
* 2. 选择最优执行策略
|
|
8
|
-
* 3. 执行优化后的查询
|
|
9
|
-
*
|
|
10
|
-
* 支持的优化:
|
|
11
|
-
* - OPTIONAL 优化:批量获取属性,避免指数级 LEFT JOIN
|
|
12
|
-
* - Compound Query:多 pattern SQL JOIN,避免 JS 层 hash join
|
|
13
|
-
* - FILTER 下推:条件下推到 SQL 层
|
|
14
|
-
*
|
|
15
|
-
* 设计原则:
|
|
16
|
-
* - 所有优化逻辑集中在此类
|
|
17
|
-
* - 对外暴露统一的接口
|
|
18
|
-
* - 优化失败时优雅降级到 Comunica 默认行为
|
|
19
|
-
*/
|
|
20
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
-
exports.QueryOptimizer = void 0;
|
|
22
|
-
const rdf_data_factory_1 = require("rdf-data-factory");
|
|
23
|
-
const dataFactory = new rdf_data_factory_1.DataFactory();
|
|
24
|
-
/**
|
|
25
|
-
* QueryOptimizer - 查询优化器
|
|
26
|
-
*/
|
|
27
|
-
class QueryOptimizer {
|
|
28
|
-
constructor(store, options) {
|
|
29
|
-
this.store = store;
|
|
30
|
-
this.debug = options.debug ?? false;
|
|
31
|
-
this.bindingsFactory = options.bindingsFactory;
|
|
32
|
-
}
|
|
33
|
-
// ============================================================
|
|
34
|
-
// 公共接口
|
|
35
|
-
// ============================================================
|
|
36
|
-
/**
|
|
37
|
-
* 分析查询,确定最佳优化策略
|
|
38
|
-
*/
|
|
39
|
-
analyzeQuery(algebra) {
|
|
40
|
-
// 先检查 OPTIONAL 优化(优先级最高)
|
|
41
|
-
if (this.store.getAttributes) {
|
|
42
|
-
const optionalAnalysis = this.analyzeOptional(algebra);
|
|
43
|
-
if (optionalAnalysis.canOptimize) {
|
|
44
|
-
return { type: 'optional', analysis: optionalAnalysis };
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
// 检查 Compound Query 优化
|
|
48
|
-
if (this.store.getCompound) {
|
|
49
|
-
const compoundAnalysis = this.analyzeCompound(algebra);
|
|
50
|
-
if (compoundAnalysis.canOptimize) {
|
|
51
|
-
return { type: 'compound', analysis: compoundAnalysis };
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
return { type: 'none', analysis: null };
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* 执行 OPTIONAL 优化查询
|
|
58
|
-
*
|
|
59
|
-
* @param analysis OPTIONAL 分析结果
|
|
60
|
-
* @param coreBindings 核心查询的绑定结果
|
|
61
|
-
* @param orderOptions 排序选项(可选)
|
|
62
|
-
*/
|
|
63
|
-
async executeOptionalOptimized(analysis, coreBindings, orderOptions) {
|
|
64
|
-
const { subjectVar, optionalPredicates, optionalVars } = analysis;
|
|
65
|
-
if (!subjectVar || !optionalPredicates || !optionalVars) {
|
|
66
|
-
throw new Error('Invalid OptionalAnalysis');
|
|
67
|
-
}
|
|
68
|
-
if (coreBindings.length === 0) {
|
|
69
|
-
return [];
|
|
70
|
-
}
|
|
71
|
-
// 提取所有 subject 值
|
|
72
|
-
const subjects = [];
|
|
73
|
-
for (const binding of coreBindings) {
|
|
74
|
-
const subjectTerm = binding.get(dataFactory.variable(subjectVar));
|
|
75
|
-
if (subjectTerm && subjectTerm.termType === 'NamedNode') {
|
|
76
|
-
subjects.push(subjectTerm.value);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
if (this.debug) {
|
|
80
|
-
console.log(`[QueryOptimizer] OPTIONAL: ${coreBindings.length} bindings, ${subjects.length} subjects`);
|
|
81
|
-
}
|
|
82
|
-
// 批量获取属性
|
|
83
|
-
const attributeMap = await this.store.getAttributes(subjects, optionalPredicates, undefined // TODO: 支持 graph 过滤
|
|
84
|
-
);
|
|
85
|
-
if (this.debug) {
|
|
86
|
-
console.log(`[QueryOptimizer] getAttributes returned data for ${attributeMap.size} subjects`);
|
|
87
|
-
}
|
|
88
|
-
// 组装结果
|
|
89
|
-
let results = this.assembleOptionalResults(coreBindings, attributeMap, subjectVar, optionalVars);
|
|
90
|
-
// 应用排序
|
|
91
|
-
if (orderOptions?.varName && results.length > 1) {
|
|
92
|
-
results = this.sortBindings(results, orderOptions.varName, orderOptions.reverse ?? false);
|
|
93
|
-
if (this.debug) {
|
|
94
|
-
console.log(`[QueryOptimizer] Applied ORDER BY ?${orderOptions.varName} ${orderOptions.reverse ? 'DESC' : 'ASC'}`);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
return results;
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* 对 Bindings 数组按指定变量排序
|
|
101
|
-
*/
|
|
102
|
-
sortBindings(bindings, varName, reverse) {
|
|
103
|
-
const orderVar = dataFactory.variable(varName);
|
|
104
|
-
return [...bindings].sort((a, b) => {
|
|
105
|
-
const aVal = a.get(orderVar);
|
|
106
|
-
const bVal = b.get(orderVar);
|
|
107
|
-
// null/undefined 值排在最后
|
|
108
|
-
if (!aVal && !bVal)
|
|
109
|
-
return 0;
|
|
110
|
-
if (!aVal)
|
|
111
|
-
return 1;
|
|
112
|
-
if (!bVal)
|
|
113
|
-
return -1;
|
|
114
|
-
// 比较值
|
|
115
|
-
let cmp;
|
|
116
|
-
if (aVal.termType === 'Literal' && bVal.termType === 'Literal') {
|
|
117
|
-
// 对于字面量,先尝试数值比较
|
|
118
|
-
const aNum = parseFloat(aVal.value);
|
|
119
|
-
const bNum = parseFloat(bVal.value);
|
|
120
|
-
if (!isNaN(aNum) && !isNaN(bNum)) {
|
|
121
|
-
cmp = aNum - bNum;
|
|
122
|
-
}
|
|
123
|
-
else {
|
|
124
|
-
// 字符串比较
|
|
125
|
-
cmp = aVal.value.localeCompare(bVal.value);
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
else {
|
|
129
|
-
// 其他类型用字符串比较
|
|
130
|
-
cmp = aVal.value.localeCompare(bVal.value);
|
|
131
|
-
}
|
|
132
|
-
return reverse ? -cmp : cmp;
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
|
-
// ============================================================
|
|
136
|
-
// OPTIONAL 优化
|
|
137
|
-
// ============================================================
|
|
138
|
-
/**
|
|
139
|
-
* 分析查询是否可以进行 OPTIONAL 优化
|
|
140
|
-
*
|
|
141
|
-
* 可优化条件:
|
|
142
|
-
* 1. 有核心条件(BGP 或带 FILTER 的 BGP)
|
|
143
|
-
* 2. 有 OPTIONAL(>= 1 个)
|
|
144
|
-
* 3. 所有 OPTIONAL 都是简单的属性获取:?s <pred> ?var
|
|
145
|
-
* 4. 所有 OPTIONAL 使用同一个 subject 变量
|
|
146
|
-
* 5. OPTIONAL 内部没有额外的 FILTER
|
|
147
|
-
*/
|
|
148
|
-
analyzeOptional(algebra) {
|
|
149
|
-
// 从 project -> slice -> orderby -> ... 找到实际的查询结构
|
|
150
|
-
let current = algebra;
|
|
151
|
-
while (current.type === 'project' || current.type === 'slice' ||
|
|
152
|
-
current.type === 'distinct' || current.type === 'reduced' ||
|
|
153
|
-
current.type === 'orderby') {
|
|
154
|
-
current = current.input;
|
|
155
|
-
}
|
|
156
|
-
// 穿透 filter 节点,保留 filter expression 供后续包回 coreOp
|
|
157
|
-
let outerFilter = null;
|
|
158
|
-
if (current.type === 'filter') {
|
|
159
|
-
outerFilter = current.expression;
|
|
160
|
-
current = current.input;
|
|
161
|
-
}
|
|
162
|
-
// 收集所有 leftjoin(OPTIONAL)和核心操作
|
|
163
|
-
const leftJoins = [];
|
|
164
|
-
let coreOp = null;
|
|
165
|
-
const collectLeftJoins = (op) => {
|
|
166
|
-
if (op.type === 'leftjoin') {
|
|
167
|
-
const lj = op;
|
|
168
|
-
leftJoins.push(lj);
|
|
169
|
-
collectLeftJoins(lj.input[0]);
|
|
170
|
-
}
|
|
171
|
-
else {
|
|
172
|
-
// 如果有外层 FILTER,把它包回 coreOp 上,确保核心查询仍带 FILTER 条件
|
|
173
|
-
if (outerFilter && op) {
|
|
174
|
-
coreOp = { type: 'filter', input: op, expression: outerFilter };
|
|
175
|
-
}
|
|
176
|
-
else {
|
|
177
|
-
coreOp = op;
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
};
|
|
181
|
-
collectLeftJoins(current);
|
|
182
|
-
if (leftJoins.length < 1) {
|
|
183
|
-
return { canOptimize: false, reason: 'No OPTIONAL found' };
|
|
184
|
-
}
|
|
185
|
-
if (!coreOp) {
|
|
186
|
-
return { canOptimize: false, reason: 'No core operation found' };
|
|
187
|
-
}
|
|
188
|
-
// 分析核心操作获取 subject 变量
|
|
189
|
-
const subjectVar = this.extractSubjectVariable(coreOp);
|
|
190
|
-
if (!subjectVar) {
|
|
191
|
-
return { canOptimize: false, reason: 'Cannot determine subject variable from core operation' };
|
|
192
|
-
}
|
|
193
|
-
// 分析所有 OPTIONAL
|
|
194
|
-
const optionalPredicates = [];
|
|
195
|
-
const optionalVars = new Map();
|
|
196
|
-
for (const lj of leftJoins) {
|
|
197
|
-
// 检查是否有额外的 filter
|
|
198
|
-
if (lj.expression) {
|
|
199
|
-
return { canOptimize: false, reason: 'OPTIONAL contains FILTER expression' };
|
|
200
|
-
}
|
|
201
|
-
const patternInfo = this.extractSimplePattern(lj.input[1]);
|
|
202
|
-
if (!patternInfo) {
|
|
203
|
-
return { canOptimize: false, reason: 'OPTIONAL is not a simple pattern' };
|
|
204
|
-
}
|
|
205
|
-
if (patternInfo.subjectVar !== subjectVar) {
|
|
206
|
-
return {
|
|
207
|
-
canOptimize: false,
|
|
208
|
-
reason: `OPTIONAL subject ?${patternInfo.subjectVar} doesn't match core subject ?${subjectVar}`
|
|
209
|
-
};
|
|
210
|
-
}
|
|
211
|
-
if (!patternInfo.predicate) {
|
|
212
|
-
return { canOptimize: false, reason: 'OPTIONAL predicate must be a constant' };
|
|
213
|
-
}
|
|
214
|
-
optionalPredicates.push(patternInfo.predicate);
|
|
215
|
-
if (patternInfo.objectVar) {
|
|
216
|
-
optionalVars.set(patternInfo.predicate, patternInfo.objectVar);
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
return {
|
|
220
|
-
canOptimize: true,
|
|
221
|
-
coreOperation: coreOp,
|
|
222
|
-
subjectVar,
|
|
223
|
-
optionalPredicates,
|
|
224
|
-
optionalVars,
|
|
225
|
-
};
|
|
226
|
-
}
|
|
227
|
-
// ============================================================
|
|
228
|
-
// Compound Query 优化
|
|
229
|
-
// ============================================================
|
|
230
|
-
/**
|
|
231
|
-
* 分析查询是否可以进行 Compound Query 优化
|
|
232
|
-
*/
|
|
233
|
-
analyzeCompound(algebra) {
|
|
234
|
-
// 从 project -> slice -> ... 找到实际的查询结构
|
|
235
|
-
let current = algebra;
|
|
236
|
-
while (current.type === 'project' || current.type === 'slice' ||
|
|
237
|
-
current.type === 'distinct' || current.type === 'reduced' ||
|
|
238
|
-
current.type === 'filter') {
|
|
239
|
-
current = current.input;
|
|
240
|
-
}
|
|
241
|
-
// 检查是否是 BGP 或 JOIN
|
|
242
|
-
let patterns = [];
|
|
243
|
-
if (current.type === 'bgp') {
|
|
244
|
-
const bgp = current;
|
|
245
|
-
patterns = bgp.patterns;
|
|
246
|
-
}
|
|
247
|
-
else if (current.type === 'join') {
|
|
248
|
-
const join = current;
|
|
249
|
-
patterns = this.extractPatternsFromJoin(join);
|
|
250
|
-
}
|
|
251
|
-
if (patterns.length < 2) {
|
|
252
|
-
return { canOptimize: false, reason: 'Need at least 2 patterns for compound query' };
|
|
253
|
-
}
|
|
254
|
-
// 检查所有 pattern 是否共享同一个 subject 变量
|
|
255
|
-
const subjectVars = patterns.map(p => p.subject?.termType === 'Variable' ? p.subject.value : null);
|
|
256
|
-
const uniqueSubjectVars = [...new Set(subjectVars.filter(v => v !== null))];
|
|
257
|
-
if (uniqueSubjectVars.length !== 1) {
|
|
258
|
-
return { canOptimize: false, reason: 'Patterns do not share the same subject variable' };
|
|
259
|
-
}
|
|
260
|
-
return {
|
|
261
|
-
canOptimize: true,
|
|
262
|
-
patterns,
|
|
263
|
-
joinVar: uniqueSubjectVars[0],
|
|
264
|
-
joinField: 'subject',
|
|
265
|
-
};
|
|
266
|
-
}
|
|
267
|
-
// ============================================================
|
|
268
|
-
// 辅助方法
|
|
269
|
-
// ============================================================
|
|
270
|
-
/**
|
|
271
|
-
* 从核心操作提取 subject 变量
|
|
272
|
-
*/
|
|
273
|
-
extractSubjectVariable(op) {
|
|
274
|
-
if (op.type === 'pattern') {
|
|
275
|
-
const pattern = op;
|
|
276
|
-
if (pattern.subject?.termType === 'Variable') {
|
|
277
|
-
return pattern.subject.value;
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
else if (op.type === 'bgp') {
|
|
281
|
-
const bgp = op;
|
|
282
|
-
if (bgp.patterns.length > 0) {
|
|
283
|
-
const firstPattern = bgp.patterns[0];
|
|
284
|
-
if (firstPattern.subject?.termType === 'Variable') {
|
|
285
|
-
return firstPattern.subject.value;
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
else if (op.type === 'filter') {
|
|
290
|
-
return this.extractSubjectVariable(op.input);
|
|
291
|
-
}
|
|
292
|
-
else if (op.type === 'join') {
|
|
293
|
-
const join = op;
|
|
294
|
-
if (join.input && join.input.length > 0) {
|
|
295
|
-
return this.extractSubjectVariable(join.input[0]);
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
return null;
|
|
299
|
-
}
|
|
300
|
-
/**
|
|
301
|
-
* 从 OPTIONAL 的右操作数提取简单 pattern 信息
|
|
302
|
-
*/
|
|
303
|
-
extractSimplePattern(op) {
|
|
304
|
-
if (op.type === 'pattern') {
|
|
305
|
-
const pattern = op;
|
|
306
|
-
if (pattern.subject?.termType !== 'Variable') {
|
|
307
|
-
return null;
|
|
308
|
-
}
|
|
309
|
-
return {
|
|
310
|
-
subjectVar: pattern.subject.value,
|
|
311
|
-
predicate: pattern.predicate?.termType === 'NamedNode' ? pattern.predicate.value : null,
|
|
312
|
-
objectVar: pattern.object?.termType === 'Variable' ? pattern.object.value : null,
|
|
313
|
-
};
|
|
314
|
-
}
|
|
315
|
-
else if (op.type === 'bgp') {
|
|
316
|
-
const bgp = op;
|
|
317
|
-
if (bgp.patterns.length === 1) {
|
|
318
|
-
return this.extractSimplePattern(bgp.patterns[0]);
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
return null;
|
|
322
|
-
}
|
|
323
|
-
/**
|
|
324
|
-
* 从 JOIN 操作提取所有 patterns
|
|
325
|
-
*/
|
|
326
|
-
extractPatternsFromJoin(join) {
|
|
327
|
-
const patterns = [];
|
|
328
|
-
for (const input of join.input) {
|
|
329
|
-
if (input.type === 'pattern') {
|
|
330
|
-
patterns.push(input);
|
|
331
|
-
}
|
|
332
|
-
else if (input.type === 'bgp') {
|
|
333
|
-
patterns.push(...input.patterns);
|
|
334
|
-
}
|
|
335
|
-
else if (input.type === 'join') {
|
|
336
|
-
patterns.push(...this.extractPatternsFromJoin(input));
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
|
-
return patterns;
|
|
340
|
-
}
|
|
341
|
-
/**
|
|
342
|
-
* 组装 OPTIONAL 优化结果
|
|
343
|
-
*/
|
|
344
|
-
assembleOptionalResults(coreBindings, attributeMap, subjectVar, optionalVars) {
|
|
345
|
-
const results = [];
|
|
346
|
-
for (const coreBinding of coreBindings) {
|
|
347
|
-
const subjectTerm = coreBinding.get(dataFactory.variable(subjectVar));
|
|
348
|
-
if (!subjectTerm || subjectTerm.termType !== 'NamedNode') {
|
|
349
|
-
results.push(coreBinding);
|
|
350
|
-
continue;
|
|
351
|
-
}
|
|
352
|
-
const subjectAttrs = attributeMap.get(subjectTerm.value);
|
|
353
|
-
// 创建包含所有 OPTIONAL 变量的新 binding
|
|
354
|
-
const entries = [];
|
|
355
|
-
// 复制核心 binding 的所有变量
|
|
356
|
-
for (const v of coreBinding.keys()) {
|
|
357
|
-
const term = coreBinding.get(v);
|
|
358
|
-
if (term) {
|
|
359
|
-
entries.push([v, term]);
|
|
360
|
-
}
|
|
361
|
-
}
|
|
362
|
-
// 添加 OPTIONAL 变量
|
|
363
|
-
for (const [predicate, varName] of optionalVars) {
|
|
364
|
-
const values = subjectAttrs?.get(predicate);
|
|
365
|
-
if (values && values.length > 0) {
|
|
366
|
-
entries.push([dataFactory.variable(varName), values[0]]);
|
|
367
|
-
}
|
|
368
|
-
}
|
|
369
|
-
results.push(this.bindingsFactory.bindings(entries));
|
|
370
|
-
}
|
|
371
|
-
return results;
|
|
372
|
-
}
|
|
373
|
-
}
|
|
374
|
-
exports.QueryOptimizer = QueryOptimizer;
|
|
375
|
-
//# sourceMappingURL=QueryOptimizer.js.map
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* QuintEngine - Configurable SPARQL engine backed by QuintStore
|
|
3
|
-
*
|
|
4
|
-
* Store type (SQLite/PostgreSQL) determined by endpoint scheme.
|
|
5
|
-
*
|
|
6
|
-
* Usage:
|
|
7
|
-
* ```json
|
|
8
|
-
* {
|
|
9
|
-
* "@type": "QuintEngine",
|
|
10
|
-
* "endpoint": "postgresql://user:pass@localhost/db"
|
|
11
|
-
* }
|
|
12
|
-
* ```
|
|
13
|
-
*/
|
|
14
|
-
import type { Bindings, ResultStream } from '@rdfjs/types';
|
|
15
|
-
import type { Quad } from '@rdfjs/types';
|
|
16
|
-
import type { QuintStore } from '../quint/types';
|
|
17
|
-
import { ComunicaQuintEngine, type QueryContext } from './ComunicaQuintEngine';
|
|
18
|
-
export interface QuintEngineArgs {
|
|
19
|
-
/**
|
|
20
|
-
* Connection string with scheme prefix:
|
|
21
|
-
* - SQLite: 'sqlite:/path/to/db' or 'sqlite::memory:'
|
|
22
|
-
* - PostgreSQL: 'postgresql://user:pass@host/db' or 'postgres://...'
|
|
23
|
-
*/
|
|
24
|
-
endpoint: string;
|
|
25
|
-
/**
|
|
26
|
-
* Enable debug logging
|
|
27
|
-
*/
|
|
28
|
-
debug?: boolean;
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* QuintEngine - Injectable SPARQL engine with configurable backend
|
|
32
|
-
*
|
|
33
|
-
* This class provides a unified interface for SPARQL queries backed by
|
|
34
|
-
* either SQLite or PostgreSQL QuintStore implementations.
|
|
35
|
-
*/
|
|
36
|
-
export declare class QuintEngine {
|
|
37
|
-
private readonly store;
|
|
38
|
-
private readonly engine;
|
|
39
|
-
private readonly storeType;
|
|
40
|
-
private isOpen;
|
|
41
|
-
constructor(args: QuintEngineArgs);
|
|
42
|
-
/**
|
|
43
|
-
* Parse endpoint string to extract store type and connection string
|
|
44
|
-
*
|
|
45
|
-
* Formats:
|
|
46
|
-
* - sqlite:/path/to/db -> SQLite with file path
|
|
47
|
-
* - sqlite::memory: -> SQLite in-memory
|
|
48
|
-
* - postgresql://user:pass@host/db -> PostgreSQL
|
|
49
|
-
* - postgres://user:pass@host/db -> PostgreSQL (alias)
|
|
50
|
-
*/
|
|
51
|
-
private parseEndpoint;
|
|
52
|
-
/**
|
|
53
|
-
* Open the underlying store connection
|
|
54
|
-
*/
|
|
55
|
-
open(): Promise<void>;
|
|
56
|
-
/**
|
|
57
|
-
* Close the store connection
|
|
58
|
-
*/
|
|
59
|
-
close(): Promise<void>;
|
|
60
|
-
/**
|
|
61
|
-
* Ensure store is open, auto-open if needed
|
|
62
|
-
*/
|
|
63
|
-
private ensureOpen;
|
|
64
|
-
/**
|
|
65
|
-
* Execute SELECT query
|
|
66
|
-
*/
|
|
67
|
-
queryBindings(query: string, context?: QueryContext): Promise<ResultStream<Bindings>>;
|
|
68
|
-
/**
|
|
69
|
-
* Execute ASK query
|
|
70
|
-
*/
|
|
71
|
-
queryBoolean(query: string, context?: QueryContext): Promise<boolean>;
|
|
72
|
-
/**
|
|
73
|
-
* Execute CONSTRUCT/DESCRIBE query
|
|
74
|
-
*/
|
|
75
|
-
queryQuads(query: string, context?: QueryContext): Promise<ResultStream<Quad>>;
|
|
76
|
-
/**
|
|
77
|
-
* Execute UPDATE query (INSERT/DELETE)
|
|
78
|
-
*/
|
|
79
|
-
queryVoid(query: string, context?: QueryContext): Promise<void>;
|
|
80
|
-
/**
|
|
81
|
-
* Get the underlying QuintStore for direct operations
|
|
82
|
-
*/
|
|
83
|
-
getStore(): QuintStore;
|
|
84
|
-
/**
|
|
85
|
-
* Get the underlying ComunicaQuintEngine
|
|
86
|
-
*/
|
|
87
|
-
getEngine(): ComunicaQuintEngine;
|
|
88
|
-
/**
|
|
89
|
-
* Get the store type
|
|
90
|
-
*/
|
|
91
|
-
getStoreType(): 'sqlite' | 'postgresql';
|
|
92
|
-
}
|