@undefineds.co/xpod 0.3.57 → 0.3.61
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/README.md +3 -0
- package/config/cli.json +88 -0
- package/config/cloud.json +32 -1
- package/config/components-ignore.json +3 -0
- package/config/extensions.local.initializer.json +44 -0
- package/config/resolver.json +86 -0
- package/config/xpod.base.json +4 -0
- package/dist/agents/AgentExecutorFactory.d.ts +3 -3
- package/dist/agents/AgentExecutorFactory.js +28 -15
- package/dist/agents/AgentExecutorFactory.js.map +1 -1
- package/dist/agents/BaseAgentExecutor.d.ts +2 -1
- package/dist/agents/BaseAgentExecutor.js +1 -0
- package/dist/agents/BaseAgentExecutor.js.map +1 -1
- package/dist/agents/ClaudeExecutor.d.ts +3 -1
- package/dist/agents/ClaudeExecutor.js +18 -12
- package/dist/agents/ClaudeExecutor.js.map +1 -1
- package/dist/agents/config/resolve.js +0 -21
- package/dist/agents/config/resolve.js.map +1 -1
- package/dist/agents/config/types.d.ts +2 -7
- package/dist/agents/config/types.js +2 -1
- package/dist/agents/config/types.js.map +1 -1
- package/dist/agents/types.d.ts +18 -0
- package/dist/agents/types.js.map +1 -1
- package/dist/ai/schema/types.d.ts +2 -1
- package/dist/ai/schema/types.js +1 -0
- package/dist/ai/schema/types.js.map +1 -1
- package/dist/ai/service/CredentialReader.d.ts +3 -1
- package/dist/ai/service/CredentialReader.js.map +1 -1
- package/dist/ai/service/CredentialReaderImpl.d.ts +3 -1
- package/dist/ai/service/CredentialReaderImpl.js +24 -2
- package/dist/ai/service/CredentialReaderImpl.js.map +1 -1
- package/dist/ai/service/EmbeddingServiceImpl.js +13 -2
- package/dist/ai/service/EmbeddingServiceImpl.js.map +1 -1
- package/dist/ai/service/ProviderRegistry.d.ts +4 -0
- package/dist/ai/service/ProviderRegistry.js.map +1 -1
- package/dist/ai/service/ProviderRegistry.jsonld +4 -0
- package/dist/ai/service/ProviderRegistryImpl.d.ts +4 -1
- package/dist/ai/service/ProviderRegistryImpl.js +26 -4
- package/dist/ai/service/ProviderRegistryImpl.js.map +1 -1
- package/dist/ai/service/ProviderRegistryImpl.jsonld +12 -0
- package/dist/ai/service/defaultEmbeddingProfile.d.ts +5 -0
- package/dist/ai/service/defaultEmbeddingProfile.js +31 -0
- package/dist/ai/service/defaultEmbeddingProfile.js.map +1 -0
- package/dist/ai/service/index.d.ts +1 -0
- package/dist/ai/service/index.js +1 -0
- package/dist/ai/service/index.js.map +1 -1
- package/dist/ai/service/types.d.ts +1 -0
- package/dist/ai/service/types.js.map +1 -1
- package/dist/api/ApiServer.js +17 -2
- package/dist/api/ApiServer.js.map +1 -1
- package/dist/api/ai-gateway/AiGatewayService.d.ts +106 -0
- package/dist/api/ai-gateway/AiGatewayService.js +527 -0
- package/dist/api/ai-gateway/AiGatewayService.js.map +1 -0
- package/dist/api/ai-gateway/auth/AiConnectionInvocationKeyIssuer.d.ts +38 -0
- package/dist/api/ai-gateway/auth/AiConnectionInvocationKeyIssuer.js +128 -0
- package/dist/api/ai-gateway/auth/AiConnectionInvocationKeyIssuer.js.map +1 -0
- package/dist/api/ai-gateway/auth/ClientCredentialsInternalPodAccessTokenProvider.d.ts +25 -0
- package/dist/api/ai-gateway/auth/ClientCredentialsInternalPodAccessTokenProvider.js +91 -0
- package/dist/api/ai-gateway/auth/ClientCredentialsInternalPodAccessTokenProvider.js.map +1 -0
- package/dist/api/ai-gateway/auth/GatewayApiKey.d.ts +28 -0
- package/dist/api/ai-gateway/auth/GatewayApiKey.js +162 -0
- package/dist/api/ai-gateway/auth/GatewayApiKey.js.map +1 -0
- package/dist/api/ai-gateway/auth/GatewayApiKeyAuthenticator.d.ts +56 -0
- package/dist/api/ai-gateway/auth/GatewayApiKeyAuthenticator.js +143 -0
- package/dist/api/ai-gateway/auth/GatewayApiKeyAuthenticator.js.map +1 -0
- package/dist/api/ai-gateway/auth/GatewayKeyLocatorCodec.d.ts +26 -0
- package/dist/api/ai-gateway/auth/GatewayKeyLocatorCodec.js +97 -0
- package/dist/api/ai-gateway/auth/GatewayKeyLocatorCodec.js.map +1 -0
- package/dist/api/ai-gateway/auth/GatewayPrincipal.d.ts +20 -0
- package/dist/api/ai-gateway/auth/GatewayPrincipal.js +37 -0
- package/dist/api/ai-gateway/auth/GatewayPrincipal.js.map +1 -0
- package/dist/api/ai-gateway/auth/InvocationTokenCodec.d.ts +41 -0
- package/dist/api/ai-gateway/auth/InvocationTokenCodec.js +221 -0
- package/dist/api/ai-gateway/auth/InvocationTokenCodec.js.map +1 -0
- package/dist/api/ai-gateway/auth/PodGatewayAccessKeyRepository.d.ts +54 -0
- package/dist/api/ai-gateway/auth/PodGatewayAccessKeyRepository.js +152 -0
- package/dist/api/ai-gateway/auth/PodGatewayAccessKeyRepository.js.map +1 -0
- package/dist/api/ai-gateway/connect/index.d.ts +367 -0
- package/dist/api/ai-gateway/connect/index.js +1061 -0
- package/dist/api/ai-gateway/connect/index.js.map +1 -0
- package/dist/api/ai-gateway/credentials/CloudKmsWrapper.d.ts +40 -0
- package/dist/api/ai-gateway/credentials/CloudKmsWrapper.js +59 -0
- package/dist/api/ai-gateway/credentials/CloudKmsWrapper.js.map +1 -0
- package/dist/api/ai-gateway/credentials/CredentialVault.d.ts +14 -0
- package/dist/api/ai-gateway/credentials/CredentialVault.js +11 -0
- package/dist/api/ai-gateway/credentials/CredentialVault.js.map +1 -0
- package/dist/api/ai-gateway/credentials/KeyWrapper.d.ts +27 -0
- package/dist/api/ai-gateway/credentials/KeyWrapper.js +3 -0
- package/dist/api/ai-gateway/credentials/KeyWrapper.js.map +1 -0
- package/dist/api/ai-gateway/credentials/LocalKeychainWrapper.d.ts +27 -0
- package/dist/api/ai-gateway/credentials/LocalKeychainWrapper.js +145 -0
- package/dist/api/ai-gateway/credentials/LocalKeychainWrapper.js.map +1 -0
- package/dist/api/ai-gateway/credentials/SecretCellCredentialVault.d.ts +13 -0
- package/dist/api/ai-gateway/credentials/SecretCellCredentialVault.js +133 -0
- package/dist/api/ai-gateway/credentials/SecretCellCredentialVault.js.map +1 -0
- package/dist/api/ai-gateway/credentials/SecretCellKeyWrapper.d.ts +23 -0
- package/dist/api/ai-gateway/credentials/SecretCellKeyWrapper.js +62 -0
- package/dist/api/ai-gateway/credentials/SecretCellKeyWrapper.js.map +1 -0
- package/dist/api/ai-gateway/credentials/WebCryptoCredentialVault.d.ts +23 -0
- package/dist/api/ai-gateway/credentials/WebCryptoCredentialVault.js +173 -0
- package/dist/api/ai-gateway/credentials/WebCryptoCredentialVault.js.map +1 -0
- package/dist/api/ai-gateway/errors.d.ts +21 -0
- package/dist/api/ai-gateway/errors.js +50 -0
- package/dist/api/ai-gateway/errors.js.map +1 -0
- package/dist/api/ai-gateway/protocol/ChatCompletionsFrontend.d.ts +6 -0
- package/dist/api/ai-gateway/protocol/ChatCompletionsFrontend.js +111 -0
- package/dist/api/ai-gateway/protocol/ChatCompletionsFrontend.js.map +1 -0
- package/dist/api/ai-gateway/protocol/MessagesFrontend.d.ts +6 -0
- package/dist/api/ai-gateway/protocol/MessagesFrontend.js +99 -0
- package/dist/api/ai-gateway/protocol/MessagesFrontend.js.map +1 -0
- package/dist/api/ai-gateway/protocol/ResponsesFrontend.d.ts +6 -0
- package/dist/api/ai-gateway/protocol/ResponsesFrontend.js +232 -0
- package/dist/api/ai-gateway/protocol/ResponsesFrontend.js.map +1 -0
- package/dist/api/ai-gateway/protocol/index.d.ts +3 -0
- package/dist/api/ai-gateway/protocol/index.js +10 -0
- package/dist/api/ai-gateway/protocol/index.js.map +1 -0
- package/dist/api/ai-gateway/providers/AnthropicRuntimeAdapter.d.ts +7 -0
- package/dist/api/ai-gateway/providers/AnthropicRuntimeAdapter.js +37 -0
- package/dist/api/ai-gateway/providers/AnthropicRuntimeAdapter.js.map +1 -0
- package/dist/api/ai-gateway/providers/BailianRuntimeAdapter.d.ts +9 -0
- package/dist/api/ai-gateway/providers/BailianRuntimeAdapter.js +127 -0
- package/dist/api/ai-gateway/providers/BailianRuntimeAdapter.js.map +1 -0
- package/dist/api/ai-gateway/providers/DeepSeekRuntimeAdapter.d.ts +8 -0
- package/dist/api/ai-gateway/providers/DeepSeekRuntimeAdapter.js +47 -0
- package/dist/api/ai-gateway/providers/DeepSeekRuntimeAdapter.js.map +1 -0
- package/dist/api/ai-gateway/providers/KimiRuntimeAdapter.d.ts +8 -0
- package/dist/api/ai-gateway/providers/KimiRuntimeAdapter.js +57 -0
- package/dist/api/ai-gateway/providers/KimiRuntimeAdapter.js.map +1 -0
- package/dist/api/ai-gateway/providers/OpenAiCompatibleRuntimeAdapter.d.ts +1 -0
- package/dist/api/ai-gateway/providers/OpenAiCompatibleRuntimeAdapter.js +6 -0
- package/dist/api/ai-gateway/providers/OpenAiCompatibleRuntimeAdapter.js.map +1 -0
- package/dist/api/ai-gateway/providers/OpenAiRuntimeAdapter.d.ts +13 -0
- package/dist/api/ai-gateway/providers/OpenAiRuntimeAdapter.js +34 -0
- package/dist/api/ai-gateway/providers/OpenAiRuntimeAdapter.js.map +1 -0
- package/dist/api/ai-gateway/providers/ProviderRegistry.d.ts +68 -0
- package/dist/api/ai-gateway/providers/ProviderRegistry.js +288 -0
- package/dist/api/ai-gateway/providers/ProviderRegistry.js.map +1 -0
- package/dist/api/ai-gateway/providers/ProviderRuntimeAdapter.d.ts +88 -0
- package/dist/api/ai-gateway/providers/ProviderRuntimeAdapter.js +645 -0
- package/dist/api/ai-gateway/providers/ProviderRuntimeAdapter.js.map +1 -0
- package/dist/api/ai-gateway/providers/ProviderRuntimeRegistry.d.ts +13 -0
- package/dist/api/ai-gateway/providers/ProviderRuntimeRegistry.js +48 -0
- package/dist/api/ai-gateway/providers/ProviderRuntimeRegistry.js.map +1 -0
- package/dist/api/ai-gateway/providers/index.d.ts +9 -0
- package/dist/api/ai-gateway/providers/index.js +26 -0
- package/dist/api/ai-gateway/providers/index.js.map +1 -0
- package/dist/api/ai-gateway/quota/AnthropicQuotaAdapter.d.ts +5 -0
- package/dist/api/ai-gateway/quota/AnthropicQuotaAdapter.js +21 -0
- package/dist/api/ai-gateway/quota/AnthropicQuotaAdapter.js.map +1 -0
- package/dist/api/ai-gateway/quota/BailianQuotaAdapter.d.ts +5 -0
- package/dist/api/ai-gateway/quota/BailianQuotaAdapter.js +21 -0
- package/dist/api/ai-gateway/quota/BailianQuotaAdapter.js.map +1 -0
- package/dist/api/ai-gateway/quota/DeepSeekQuotaAdapter.d.ts +10 -0
- package/dist/api/ai-gateway/quota/DeepSeekQuotaAdapter.js +83 -0
- package/dist/api/ai-gateway/quota/DeepSeekQuotaAdapter.js.map +1 -0
- package/dist/api/ai-gateway/quota/KimiQuotaAdapter.d.ts +10 -0
- package/dist/api/ai-gateway/quota/KimiQuotaAdapter.js +70 -0
- package/dist/api/ai-gateway/quota/KimiQuotaAdapter.js.map +1 -0
- package/dist/api/ai-gateway/quota/OpenAiQuotaAdapter.d.ts +5 -0
- package/dist/api/ai-gateway/quota/OpenAiQuotaAdapter.js +21 -0
- package/dist/api/ai-gateway/quota/OpenAiQuotaAdapter.js.map +1 -0
- package/dist/api/ai-gateway/quota/ProviderQuotaAdapter.d.ts +214 -0
- package/dist/api/ai-gateway/quota/ProviderQuotaAdapter.js +511 -0
- package/dist/api/ai-gateway/quota/ProviderQuotaAdapter.js.map +1 -0
- package/dist/api/ai-gateway/quota/index.d.ts +6 -0
- package/dist/api/ai-gateway/quota/index.js +23 -0
- package/dist/api/ai-gateway/quota/index.js.map +1 -0
- package/dist/api/ai-gateway/routing/InMemorySessionAffinityStore.d.ts +26 -0
- package/dist/api/ai-gateway/routing/InMemorySessionAffinityStore.js +67 -0
- package/dist/api/ai-gateway/routing/InMemorySessionAffinityStore.js.map +1 -0
- package/dist/api/ai-gateway/routing/ModelRouter.d.ts +84 -0
- package/dist/api/ai-gateway/routing/ModelRouter.js +274 -0
- package/dist/api/ai-gateway/routing/ModelRouter.js.map +1 -0
- package/dist/api/ai-gateway/routing/RedisSessionAffinityStore.d.ts +39 -0
- package/dist/api/ai-gateway/routing/RedisSessionAffinityStore.js +122 -0
- package/dist/api/ai-gateway/routing/RedisSessionAffinityStore.js.map +1 -0
- package/dist/api/ai-gateway/routing/SessionAffinityStore.d.ts +49 -0
- package/dist/api/ai-gateway/routing/SessionAffinityStore.js +66 -0
- package/dist/api/ai-gateway/routing/SessionAffinityStore.js.map +1 -0
- package/dist/api/ai-gateway/service-access/AiConnectionServiceAccess.d.ts +25 -0
- package/dist/api/ai-gateway/service-access/AiConnectionServiceAccess.js +50 -0
- package/dist/api/ai-gateway/service-access/AiConnectionServiceAccess.js.map +1 -0
- package/dist/api/ai-gateway/types.d.ts +112 -0
- package/dist/api/ai-gateway/types.js +305 -0
- package/dist/api/ai-gateway/types.js.map +1 -0
- package/dist/api/auth/AuthContext.d.ts +18 -3
- package/dist/api/auth/AuthContext.js +13 -2
- package/dist/api/auth/AuthContext.js.map +1 -1
- package/dist/api/auth/Authenticator.d.ts +3 -0
- package/dist/api/auth/Authenticator.js.map +1 -1
- package/dist/api/auth/ClientCredentialsAuthenticator.d.ts +2 -6
- package/dist/api/auth/ClientCredentialsAuthenticator.js +12 -30
- package/dist/api/auth/ClientCredentialsAuthenticator.js.map +1 -1
- package/dist/api/auth/SolidTokenAuthenticator.d.ts +2 -0
- package/dist/api/auth/SolidTokenAuthenticator.js +88 -2
- package/dist/api/auth/SolidTokenAuthenticator.js.map +1 -1
- package/dist/api/auth/TokenIdentity.d.ts +6 -0
- package/dist/api/auth/TokenIdentity.js +31 -0
- package/dist/api/auth/TokenIdentity.js.map +1 -0
- package/dist/api/chatkit/ai-provider.d.ts +9 -23
- package/dist/api/chatkit/ai-provider.js +30 -153
- package/dist/api/chatkit/ai-provider.js.map +1 -1
- package/dist/api/chatkit/default-agent.d.ts +24 -15
- package/dist/api/chatkit/default-agent.js +24 -83
- package/dist/api/chatkit/default-agent.js.map +1 -1
- package/dist/api/chatkit/index.d.ts +2 -1
- package/dist/api/chatkit/index.js +3 -1
- package/dist/api/chatkit/index.js.map +1 -1
- package/dist/api/chatkit/pod-store.d.ts +13 -1
- package/dist/api/chatkit/pod-store.js +127 -7
- package/dist/api/chatkit/pod-store.js.map +1 -1
- package/dist/api/chatkit/runtime/AcpAgentRuntime.d.ts +0 -1
- package/dist/api/chatkit/runtime/AcpAgentRuntime.js +14 -51
- package/dist/api/chatkit/runtime/AcpAgentRuntime.js.map +1 -1
- package/dist/api/chatkit/runtime/AcpRunner.js +2 -1
- package/dist/api/chatkit/runtime/AcpRunner.js.map +1 -1
- package/dist/api/chatkit/runtime/CodexRuntimeProjector.d.ts +15 -1
- package/dist/api/chatkit/runtime/CodexRuntimeProjector.js +52 -34
- package/dist/api/chatkit/runtime/CodexRuntimeProjector.js.map +1 -1
- package/dist/api/chatkit/service.d.ts +8 -1
- package/dist/api/chatkit/service.js +46 -5
- package/dist/api/chatkit/service.js.map +1 -1
- package/dist/api/chatkit/store.d.ts +23 -1
- package/dist/api/chatkit/store.js +56 -0
- package/dist/api/chatkit/store.js.map +1 -1
- package/dist/api/chatkit/types.d.ts +1 -0
- package/dist/api/chatkit/types.js.map +1 -1
- package/dist/api/container/common.js +286 -13
- package/dist/api/container/common.js.map +1 -1
- package/dist/api/container/index.js +126 -6
- package/dist/api/container/index.js.map +1 -1
- package/dist/api/container/local.js +50 -6
- package/dist/api/container/local.js.map +1 -1
- package/dist/api/container/rdf.d.ts +15 -0
- package/dist/api/container/rdf.js +90 -0
- package/dist/api/container/rdf.js.map +1 -0
- package/dist/api/container/routes.js +151 -11
- package/dist/api/container/routes.js.map +1 -1
- package/dist/api/container/types.d.ts +96 -0
- package/dist/api/container/types.js.map +1 -1
- package/dist/api/handlers/AdminHandler.d.ts +25 -2
- package/dist/api/handlers/AdminHandler.js +60 -10
- package/dist/api/handlers/AdminHandler.js.map +1 -1
- package/dist/api/handlers/AiClientConfigurationHandler.d.ts +7 -0
- package/dist/api/handlers/AiClientConfigurationHandler.js +202 -0
- package/dist/api/handlers/AiClientConfigurationHandler.js.map +1 -0
- package/dist/api/handlers/AiGatewayHandler.d.ts +23 -0
- package/dist/api/handlers/AiGatewayHandler.js +231 -0
- package/dist/api/handlers/AiGatewayHandler.js.map +1 -0
- package/dist/api/handlers/AiGatewayManagementHandler.d.ts +24 -0
- package/dist/api/handlers/AiGatewayManagementHandler.js +503 -0
- package/dist/api/handlers/AiGatewayManagementHandler.js.map +1 -0
- package/dist/api/handlers/ChatHandler.d.ts +11 -12
- package/dist/api/handlers/ChatHandler.js +12 -219
- package/dist/api/handlers/ChatHandler.js.map +1 -1
- package/dist/api/handlers/DashboardHandler.js +22 -116
- package/dist/api/handlers/DashboardHandler.js.map +1 -1
- package/dist/api/handlers/NetworkSettingsHandler.d.ts +97 -0
- package/dist/api/handlers/NetworkSettingsHandler.js +511 -0
- package/dist/api/handlers/NetworkSettingsHandler.js.map +1 -0
- package/dist/api/handlers/PodSettingsHandler.d.ts +79 -0
- package/dist/api/handlers/PodSettingsHandler.js +162 -0
- package/dist/api/handlers/PodSettingsHandler.js.map +1 -0
- package/dist/api/handlers/ProvisionHandler.d.ts +3 -1
- package/dist/api/handlers/ProvisionHandler.js +22 -87
- package/dist/api/handlers/ProvisionHandler.js.map +1 -1
- package/dist/api/handlers/RdfStatsHandler.d.ts +6 -0
- package/dist/api/handlers/RdfStatsHandler.js +85 -0
- package/dist/api/handlers/RdfStatsHandler.js.map +1 -0
- package/dist/api/handlers/SettingsHandler.d.ts +5 -0
- package/dist/api/handlers/SettingsHandler.js +13 -0
- package/dist/api/handlers/SettingsHandler.js.map +1 -0
- package/dist/api/handlers/StaticSpaHandler.d.ts +8 -0
- package/dist/api/handlers/StaticSpaHandler.js +102 -0
- package/dist/api/handlers/StaticSpaHandler.js.map +1 -0
- package/dist/api/handlers/index.d.ts +1 -0
- package/dist/api/handlers/index.js +1 -0
- package/dist/api/handlers/index.js.map +1 -1
- package/dist/api/http/readBoundedJsonBody.d.ts +14 -0
- package/dist/api/http/readBoundedJsonBody.js +58 -0
- package/dist/api/http/readBoundedJsonBody.js.map +1 -0
- package/dist/api/middleware/AuthMiddleware.d.ts +1 -0
- package/dist/api/middleware/AuthMiddleware.js +33 -4
- package/dist/api/middleware/AuthMiddleware.js.map +1 -1
- package/dist/api/runs/AgentRuntimeTypes.d.ts +18 -3
- package/dist/api/runs/AgentRuntimeTypes.js +61 -0
- package/dist/api/runs/AgentRuntimeTypes.js.map +1 -1
- package/dist/api/runs/InngestRunExecutionBackend.d.ts +28 -3
- package/dist/api/runs/InngestRunExecutionBackend.js +26 -3
- package/dist/api/runs/InngestRunExecutionBackend.js.map +1 -1
- package/dist/api/runs/ManagedRunWorker.d.ts +4 -1
- package/dist/api/runs/ManagedRunWorker.js +39 -8
- package/dist/api/runs/ManagedRunWorker.js.map +1 -1
- package/dist/api/runs/PiAgentRuntimeDriver.d.ts +5 -1
- package/dist/api/runs/PiAgentRuntimeDriver.js +94 -57
- package/dist/api/runs/PiAgentRuntimeDriver.js.map +1 -1
- package/dist/api/runs/RdfRunContextRetriever.d.ts +46 -0
- package/dist/api/runs/RdfRunContextRetriever.js +277 -0
- package/dist/api/runs/RdfRunContextRetriever.js.map +1 -0
- package/dist/api/runs/RunExecutionBackend.d.ts +38 -0
- package/dist/api/runs/RunExecutionBackend.js.map +1 -1
- package/dist/api/runs/RunStateCenter.d.ts +18 -3
- package/dist/api/runs/RunStateCenter.js +85 -24
- package/dist/api/runs/RunStateCenter.js.map +1 -1
- package/dist/api/runtime.js +163 -3
- package/dist/api/runtime.js.map +1 -1
- package/dist/api/service/AiClientConfigurationService.d.ts +97 -0
- package/dist/api/service/AiClientConfigurationService.js +379 -0
- package/dist/api/service/AiClientConfigurationService.js.map +1 -0
- package/dist/api/service/RdfBenchmarkReportCatalog.d.ts +86 -0
- package/dist/api/service/RdfBenchmarkReportCatalog.js +349 -0
- package/dist/api/service/RdfBenchmarkReportCatalog.js.map +1 -0
- package/dist/api/service/RdfBenchmarkReportGate.d.ts +78 -0
- package/dist/api/service/RdfBenchmarkReportGate.js +197 -0
- package/dist/api/service/RdfBenchmarkReportGate.js.map +1 -0
- package/dist/api/service/RdfSearchIndexingService.d.ts +113 -0
- package/dist/api/service/RdfSearchIndexingService.js +272 -0
- package/dist/api/service/RdfSearchIndexingService.js.map +1 -0
- package/dist/api/service/RdfSearchIndexingSolidFsSyncer.d.ts +27 -0
- package/dist/api/service/RdfSearchIndexingSolidFsSyncer.js +90 -0
- package/dist/api/service/RdfSearchIndexingSolidFsSyncer.js.map +1 -0
- package/dist/api/service/RdfStorageStatsService.d.ts +31 -0
- package/dist/api/service/RdfStorageStatsService.js +97 -0
- package/dist/api/service/RdfStorageStatsService.js.map +1 -0
- package/dist/api/service/VectorStoreService.d.ts +2 -0
- package/dist/api/service/VectorStoreService.js +70 -2
- package/dist/api/service/VectorStoreService.js.map +1 -1
- package/dist/api/service/VercelChatService.d.ts +27 -38
- package/dist/api/service/VercelChatService.js +153 -505
- package/dist/api/service/VercelChatService.js.map +1 -1
- package/dist/api/service/provider-http-transport.d.ts +21 -0
- package/dist/api/service/provider-http-transport.js +108 -2
- package/dist/api/service/provider-http-transport.js.map +1 -1
- package/dist/api/service/provider-registry.d.ts +5 -7
- package/dist/api/service/provider-registry.js +81 -64
- package/dist/api/service/provider-registry.js.map +1 -1
- package/dist/api/tasks/InngestTaskScheduler.d.ts +44 -4
- package/dist/api/tasks/TaskMaterializer.d.ts +10 -1
- package/dist/api/tasks/TaskMaterializer.js +39 -4
- package/dist/api/tasks/TaskMaterializer.js.map +1 -1
- package/dist/api/tasks/TaskService.d.ts +5 -1
- package/dist/api/tasks/TaskService.js +3 -0
- package/dist/api/tasks/TaskService.js.map +1 -1
- package/dist/cli/commands/obj.d.ts +9 -0
- package/dist/cli/commands/obj.js +74 -3
- package/dist/cli/commands/obj.js.map +1 -1
- package/dist/cli/commands/rdf.d.ts +9 -0
- package/dist/cli/commands/rdf.js +66 -1
- package/dist/cli/commands/rdf.js.map +1 -1
- package/dist/cli/commands/start.js +3 -0
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/lib/solid-auth.d.ts +3 -3
- package/dist/cli/lib/solid-auth.js +4 -4
- package/dist/cli/lib/solid-auth.js.map +1 -1
- package/dist/components/components.jsonld +16 -0
- package/dist/components/context.jsonld +815 -28
- package/dist/document/Chunker.jsonld +110 -0
- package/dist/document/{DocumentParser.d.ts → DocumentReader.d.ts} +23 -11
- package/dist/document/{DocumentParser.js → DocumentReader.js} +2 -2
- package/dist/document/DocumentReader.js.map +1 -0
- package/dist/document/DocumentReader.jsonld +82 -0
- package/dist/document/HeadingChunker.jsonld +41 -0
- package/dist/document/{JinaDocumentParser.d.ts → JinaReader.d.ts} +7 -7
- package/dist/document/{JinaDocumentParser.js → JinaReader.js} +12 -12
- package/dist/document/JinaReader.js.map +1 -0
- package/dist/document/JinaReader.jsonld +133 -0
- package/dist/document/L0SourceSummary.d.ts +103 -0
- package/dist/document/L0SourceSummary.js +157 -0
- package/dist/document/L0SourceSummary.js.map +1 -0
- package/dist/document/L0SourceSummary.jsonld +326 -0
- package/dist/document/PaddleOcrReader.d.ts +40 -0
- package/dist/document/PaddleOcrReader.js +53 -0
- package/dist/document/PaddleOcrReader.js.map +1 -0
- package/dist/document/PaddleOcrReader.jsonld +234 -0
- package/dist/document/ReaderAiConfig.d.ts +50 -0
- package/dist/document/ReaderAiConfig.js +109 -0
- package/dist/document/ReaderAiConfig.js.map +1 -0
- package/dist/document/ReaderAiConfig.jsonld +185 -0
- package/dist/document/ReaderPolicy.d.ts +89 -0
- package/dist/document/ReaderPolicy.js +158 -0
- package/dist/document/ReaderPolicy.js.map +1 -0
- package/dist/document/ReaderPolicy.jsonld +218 -0
- package/dist/document/index.d.ts +6 -2
- package/dist/document/index.js +6 -2
- package/dist/document/index.js.map +1 -1
- package/dist/edge/DdnsManager.d.ts +1 -1
- package/dist/edge/DdnsManager.js.map +1 -1
- package/dist/edge/EdgeNodeAgent.d.ts +4 -0
- package/dist/edge/EdgeNodeAgent.js +6 -0
- package/dist/edge/EdgeNodeAgent.js.map +1 -1
- package/dist/edge/EdgeNodeAgent.jsonld +8 -0
- package/dist/edge/EdgeNodeAgentInitializer.d.ts +16 -0
- package/dist/edge/EdgeNodeAgentInitializer.js +51 -0
- package/dist/edge/EdgeNodeAgentInitializer.js.map +1 -1
- package/dist/edge/EdgeNodeAgentInitializer.jsonld +250 -0
- package/dist/edge/EdgeNodeCertificateCapabilityBridge.d.ts +34 -0
- package/dist/edge/EdgeNodeCertificateCapabilityBridge.js +111 -0
- package/dist/edge/EdgeNodeCertificateCapabilityBridge.js.map +1 -0
- package/dist/edge/acme/AcmeCertificateManager.d.ts +14 -1
- package/dist/edge/acme/AcmeCertificateManager.js +67 -7
- package/dist/edge/acme/AcmeCertificateManager.js.map +1 -1
- package/dist/edge/acme/AcmeCertificateManager.jsonld +22 -2
- package/dist/edge/acme/ClusterCertificateManager.d.ts +12 -0
- package/dist/edge/acme/ClusterCertificateManager.js +38 -0
- package/dist/edge/acme/ClusterCertificateManager.js.map +1 -1
- package/dist/extensions/ExtensionRuntime.d.ts +17 -0
- package/dist/extensions/ExtensionRuntime.js +171 -0
- package/dist/extensions/ExtensionRuntime.js.map +1 -0
- package/dist/extensions/PodCredentialResolver.d.ts +23 -0
- package/dist/extensions/PodCredentialResolver.js +139 -0
- package/dist/extensions/PodCredentialResolver.js.map +1 -0
- package/dist/extensions/index.d.ts +3 -0
- package/dist/extensions/index.js +20 -0
- package/dist/extensions/index.js.map +1 -0
- package/dist/extensions/types.d.ts +73 -0
- package/dist/extensions/types.js +3 -0
- package/dist/extensions/types.js.map +1 -0
- package/dist/http/SubgraphSparqlHttpHandler.d.ts +20 -1
- package/dist/http/SubgraphSparqlHttpHandler.js +324 -43
- package/dist/http/SubgraphSparqlHttpHandler.js.map +1 -1
- package/dist/http/SubgraphSparqlHttpHandler.jsonld +87 -0
- package/dist/identity/drizzle/EdgeNodeRepository.js +3 -2
- package/dist/identity/drizzle/EdgeNodeRepository.js.map +1 -1
- package/dist/identity/drizzle/schema.pg.js +1 -1
- package/dist/identity/drizzle/schema.pg.js.map +1 -1
- package/dist/identity/drizzle/schema.sqlite.js +1 -1
- package/dist/identity/drizzle/schema.sqlite.js.map +1 -1
- package/dist/identity/oidc/ScopedPickWebIdHandler.js +5 -5
- package/dist/identity/oidc/ScopedPickWebIdHandler.js.map +1 -1
- package/dist/index.d.ts +12 -2
- package/dist/index.js +13 -1
- package/dist/index.js.map +1 -1
- package/dist/main.js +3 -0
- package/dist/main.js.map +1 -1
- package/dist/provision/LocalProvisionState.d.ts +28 -0
- package/dist/provision/LocalProvisionState.js +124 -0
- package/dist/provision/LocalProvisionState.js.map +1 -0
- package/dist/provision/ProvisionCodeCodec.d.ts +7 -3
- package/dist/provision/ProvisionCodeCodec.js +10 -3
- package/dist/provision/ProvisionCodeCodec.js.map +1 -1
- package/dist/provision/ProvisionPodCreator.d.ts +15 -1
- package/dist/provision/ProvisionPodCreator.js +68 -1
- package/dist/provision/ProvisionPodCreator.js.map +1 -1
- package/dist/provision/ProvisionPodCreator.jsonld +31 -0
- package/dist/provision/ServiceAccessTokenCodec.d.ts +45 -0
- package/dist/provision/ServiceAccessTokenCodec.js +86 -0
- package/dist/provision/ServiceAccessTokenCodec.js.map +1 -0
- package/dist/runtime/GatewayAdminProxyAuth.d.ts +29 -0
- package/dist/runtime/GatewayAdminProxyAuth.js +108 -0
- package/dist/runtime/GatewayAdminProxyAuth.js.map +1 -0
- package/dist/runtime/Proxy.d.ts +10 -0
- package/dist/runtime/Proxy.js +64 -6
- package/dist/runtime/Proxy.js.map +1 -1
- package/dist/runtime/XpodRuntime.js +1 -0
- package/dist/runtime/XpodRuntime.js.map +1 -1
- package/dist/runtime/bootstrap.d.ts +1 -0
- package/dist/runtime/bootstrap.js +29 -0
- package/dist/runtime/bootstrap.js.map +1 -1
- package/dist/runtime/css-process.d.ts +1 -0
- package/dist/runtime/css-process.js +1 -0
- package/dist/runtime/css-process.js.map +1 -1
- package/dist/runtime/index.d.ts +1 -0
- package/dist/runtime/index.js +3 -1
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/lifecycle.d.ts +3 -1
- package/dist/runtime/lifecycle.js +3 -1
- package/dist/runtime/lifecycle.js.map +1 -1
- package/dist/runtime/runner/node/NodeGatewayRuntimeRunner.js +2 -0
- package/dist/runtime/runner/node/NodeGatewayRuntimeRunner.js.map +1 -1
- package/dist/runtime/runner/types.d.ts +3 -0
- package/dist/runtime/runner/types.js.map +1 -1
- package/dist/runtime/runtime-types.d.ts +2 -0
- package/dist/runtime/runtime-types.js.map +1 -1
- package/dist/runtime/safe-env.d.ts +15 -0
- package/dist/runtime/safe-env.js +109 -0
- package/dist/runtime/safe-env.js.map +1 -0
- package/dist/security/index.d.ts +1 -0
- package/dist/security/index.js +18 -0
- package/dist/security/index.js.map +1 -0
- package/dist/security/secret-cell/DeploymentRootKeyProvider.d.ts +17 -0
- package/dist/security/secret-cell/DeploymentRootKeyProvider.js +61 -0
- package/dist/security/secret-cell/DeploymentRootKeyProvider.js.map +1 -0
- package/dist/security/secret-cell/DeploymentRootKeyProvider.jsonld +124 -0
- package/dist/security/secret-cell/SecretCellVault.d.ts +55 -0
- package/dist/security/secret-cell/SecretCellVault.js +242 -0
- package/dist/security/secret-cell/SecretCellVault.js.map +1 -0
- package/dist/security/secret-cell/SecretCellVault.jsonld +207 -0
- package/dist/security/secret-cell/index.d.ts +2 -0
- package/dist/security/secret-cell/index.js +11 -0
- package/dist/security/secret-cell/index.js.map +1 -0
- package/dist/solidfs/CompositeSolidFsSyncer.d.ts +18 -0
- package/dist/solidfs/CompositeSolidFsSyncer.js +32 -0
- package/dist/solidfs/CompositeSolidFsSyncer.js.map +1 -0
- package/dist/solidfs/LocalSolidFS.js +25 -1
- package/dist/solidfs/LocalSolidFS.js.map +1 -1
- package/dist/solidfs/RdfIndexSolidFsSyncer.d.ts +41 -2
- package/dist/solidfs/RdfIndexSolidFsSyncer.js +331 -21
- package/dist/solidfs/RdfIndexSolidFsSyncer.js.map +1 -1
- package/dist/solidfs/SolidFsMetaNotes.d.ts +25 -0
- package/dist/solidfs/SolidFsMetaNotes.js +103 -0
- package/dist/solidfs/SolidFsMetaNotes.js.map +1 -0
- package/dist/solidfs/SolidFsSyncJournal.d.ts +2 -2
- package/dist/solidfs/SolidFsSyncJournal.js +9 -4
- package/dist/solidfs/SolidFsSyncJournal.js.map +1 -1
- package/dist/solidfs/SolidFsSyncJournal.jsonld +119 -0
- package/dist/solidfs/WorkspacePrompt.d.ts +13 -0
- package/dist/solidfs/WorkspacePrompt.js +42 -0
- package/dist/solidfs/WorkspacePrompt.js.map +1 -0
- package/dist/solidfs/index.d.ts +3 -0
- package/dist/solidfs/index.js +3 -0
- package/dist/solidfs/index.js.map +1 -1
- package/dist/solidfs/types.d.ts +12 -2
- package/dist/solidfs/types.js.map +1 -1
- package/dist/storage/accessors/MixDataAccessor.d.ts +36 -4
- package/dist/storage/accessors/MixDataAccessor.js +222 -23
- package/dist/storage/accessors/MixDataAccessor.js.map +1 -1
- package/dist/storage/accessors/MixDataAccessor.jsonld +89 -0
- package/dist/storage/accessors/SolidRdfDataAccessor.d.ts +6 -1
- package/dist/storage/accessors/SolidRdfDataAccessor.js +35 -0
- package/dist/storage/accessors/SolidRdfDataAccessor.js.map +1 -1
- package/dist/storage/accessors/SolidRdfDataAccessor.jsonld +20 -0
- package/dist/storage/database/PostgresPoolManager.d.ts +1 -0
- package/dist/storage/database/PostgresPoolManager.js +2 -2
- package/dist/storage/database/PostgresPoolManager.js.map +1 -1
- package/dist/storage/locking/UrlAwareRedisLocker.d.ts +2 -0
- package/dist/storage/locking/UrlAwareRedisLocker.js +65 -0
- package/dist/storage/locking/UrlAwareRedisLocker.js.map +1 -1
- package/dist/storage/locking/UrlAwareRedisLocker.jsonld +19 -0
- package/dist/storage/rdf/PostgresRdfEngine.d.ts +286 -9
- package/dist/storage/rdf/PostgresRdfEngine.js +10773 -2084
- package/dist/storage/rdf/PostgresRdfEngine.js.map +1 -1
- package/dist/storage/rdf/PostgresRdfEngine.jsonld +1693 -89
- package/dist/storage/rdf/PostgresRdfSqlExecutor.d.ts +24 -0
- package/dist/storage/rdf/PostgresRdfSqlExecutor.js +131 -0
- package/dist/storage/rdf/PostgresRdfSqlExecutor.js.map +1 -0
- package/dist/storage/rdf/PostgresRdfTextIndex.d.ts +54 -0
- package/dist/storage/rdf/PostgresRdfTextIndex.js +1255 -0
- package/dist/storage/rdf/PostgresRdfTextIndex.js.map +1 -0
- package/dist/storage/rdf/PostgresRdfTextIndex.jsonld +487 -0
- package/dist/storage/rdf/PostgresRdfVectorIndex.d.ts +46 -0
- package/dist/storage/rdf/PostgresRdfVectorIndex.js +1165 -0
- package/dist/storage/rdf/PostgresRdfVectorIndex.js.map +1 -0
- package/dist/storage/rdf/PostgresRdfVectorIndex.jsonld +423 -0
- package/dist/storage/rdf/Rdf3xIndex.d.ts +14 -1
- package/dist/storage/rdf/Rdf3xIndex.js +286 -2
- package/dist/storage/rdf/Rdf3xIndex.js.map +1 -1
- package/dist/storage/rdf/Rdf3xIndex.jsonld +36 -0
- package/dist/storage/rdf/Rdf3xSchema.d.ts +5 -1
- package/dist/storage/rdf/Rdf3xSchema.js +17 -3
- package/dist/storage/rdf/Rdf3xSchema.js.map +1 -1
- package/dist/storage/rdf/RdfAccessScope.d.ts +22 -0
- package/dist/storage/rdf/RdfAccessScope.js +345 -0
- package/dist/storage/rdf/RdfAccessScope.js.map +1 -0
- package/dist/storage/rdf/RdfAccessScope.jsonld +45 -0
- package/dist/storage/rdf/RdfFusionRankPlan.d.ts +2 -0
- package/dist/storage/rdf/RdfFusionRankPlan.js +186 -0
- package/dist/storage/rdf/RdfFusionRankPlan.js.map +1 -0
- package/dist/storage/rdf/RdfJoinShape.d.ts +8 -0
- package/dist/storage/rdf/RdfJoinShape.js +31 -0
- package/dist/storage/rdf/RdfJoinShape.js.map +1 -0
- package/dist/storage/rdf/RdfQuadIndex.d.ts +5 -2
- package/dist/storage/rdf/RdfQuadIndex.js +94 -6
- package/dist/storage/rdf/RdfQuadIndex.js.map +1 -1
- package/dist/storage/rdf/RdfQuadIndex.jsonld +12 -0
- package/dist/storage/rdf/RdfQueryExecutor.d.ts +3 -4
- package/dist/storage/rdf/RdfQueryExecutor.js +235 -8
- package/dist/storage/rdf/RdfQueryExecutor.js.map +1 -1
- package/dist/storage/rdf/RdfSearchSourceFilter.d.ts +10 -0
- package/dist/storage/rdf/RdfSearchSourceFilter.js +83 -0
- package/dist/storage/rdf/RdfSearchSourceFilter.js.map +1 -0
- package/dist/storage/rdf/RdfSparqlAdapter.d.ts +27 -1
- package/dist/storage/rdf/RdfSparqlAdapter.js +265 -3
- package/dist/storage/rdf/RdfSparqlAdapter.js.map +1 -1
- package/dist/storage/rdf/RdfSparqlAdapter.jsonld +8 -0
- package/dist/storage/rdf/RdfTermDictionary.d.ts +7 -1
- package/dist/storage/rdf/RdfTermDictionary.js +139 -0
- package/dist/storage/rdf/RdfTermDictionary.js.map +1 -1
- package/dist/storage/rdf/RdfTermDictionary.jsonld +4 -0
- package/dist/storage/rdf/RdfTextIndex.d.ts +45 -2
- package/dist/storage/rdf/RdfTextIndex.js +810 -114
- package/dist/storage/rdf/RdfTextIndex.js.map +1 -1
- package/dist/storage/rdf/RdfTextIndex.jsonld +193 -0
- package/dist/storage/rdf/RdfTextProjection.d.ts +10 -0
- package/dist/storage/rdf/RdfTextProjection.js +258 -0
- package/dist/storage/rdf/RdfTextProjection.js.map +1 -0
- package/dist/storage/rdf/RdfVectorIndex.d.ts +30 -2
- package/dist/storage/rdf/RdfVectorIndex.js +461 -38
- package/dist/storage/rdf/RdfVectorIndex.js.map +1 -1
- package/dist/storage/rdf/RdfVectorIndex.jsonld +163 -0
- package/dist/storage/rdf/SolidRdfEngine.d.ts +12 -9
- package/dist/storage/rdf/SolidRdfEngine.js +48 -22
- package/dist/storage/rdf/SolidRdfEngine.js.map +1 -1
- package/dist/storage/rdf/SolidRdfEngine.jsonld +33 -43
- package/dist/storage/rdf/SolidRdfSparqlEngine.d.ts +19 -8
- package/dist/storage/rdf/SolidRdfSparqlEngine.js +674 -44
- package/dist/storage/rdf/SolidRdfSparqlEngine.js.map +1 -1
- package/dist/storage/rdf/SolidRdfSparqlEngine.jsonld +51 -0
- package/dist/storage/rdf/index.d.ts +9 -5
- package/dist/storage/rdf/index.js +42 -1
- package/dist/storage/rdf/index.js.map +1 -1
- package/dist/storage/rdf/models-benchmark.d.ts +264 -2
- package/dist/storage/rdf/models-benchmark.js +4207 -155
- package/dist/storage/rdf/models-benchmark.js.map +1 -1
- package/dist/storage/rdf/types.d.ts +833 -4
- package/dist/storage/rdf/types.js.map +1 -1
- package/dist/storage/rdf/types.jsonld +348 -0
- package/dist/storage/sparql/CompatibilitySparqlEngine.d.ts +14 -13
- package/dist/storage/sparql/CompatibilitySparqlEngine.js +24 -24
- package/dist/storage/sparql/CompatibilitySparqlEngine.js.map +1 -1
- package/dist/storage/sparql/CompatibilitySparqlEngineImpl.d.ts +14 -13
- package/dist/storage/sparql/CompatibilitySparqlEngineImpl.js +30 -18
- package/dist/storage/sparql/CompatibilitySparqlEngineImpl.js.map +1 -1
- package/dist/storage/sparql/SubgraphQueryEngine.d.ts +21 -12
- package/dist/storage/sparql/SubgraphQueryEngine.js +12 -12
- package/dist/storage/sparql/SubgraphQueryEngine.js.map +1 -1
- package/dist/terminal/sandbox/MacOSSandbox.js +2 -1
- package/dist/terminal/sandbox/MacOSSandbox.js.map +1 -1
- package/dist/terminal/sandbox/index.js +2 -1
- package/dist/terminal/sandbox/index.js.map +1 -1
- package/dist/test-utils/no-auth-xpod.js +3 -0
- package/dist/test-utils/no-auth-xpod.js.map +1 -1
- package/dist/tunnel/LocalTunnelProvider.d.ts +3 -0
- package/dist/tunnel/LocalTunnelProvider.js +17 -1
- package/dist/tunnel/LocalTunnelProvider.js.map +1 -1
- package/dist/tunnel/LocalTunnelProvider.jsonld +23 -0
- package/dist/tunnel/SakuraFrpTunnelProvider.d.ts +3 -0
- package/dist/tunnel/SakuraFrpTunnelProvider.js +18 -2
- package/dist/tunnel/SakuraFrpTunnelProvider.js.map +1 -1
- package/dist/tunnel/TunnelProfiles.d.ts +22 -0
- package/dist/tunnel/TunnelProfiles.js +208 -0
- package/dist/tunnel/TunnelProfiles.js.map +1 -0
- package/dist/tunnel/index.d.ts +2 -0
- package/dist/tunnel/index.js +4 -1
- package/dist/tunnel/index.js.map +1 -1
- package/dist/util/identifiers/ClusterIdentifierStrategy.d.ts +3 -0
- package/dist/util/identifiers/ClusterIdentifierStrategy.js +18 -2
- package/dist/util/identifiers/ClusterIdentifierStrategy.js.map +1 -1
- package/dist/util/identifiers/ClusterIdentifierStrategy.jsonld +5 -1
- package/node_modules/@undefineds.co/ai-connection/dist/AiClientConfigurationSection.d.ts +55 -0
- package/node_modules/@undefineds.co/ai-connection/dist/AiClientConfigurationSection.js +167 -0
- package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionHeader.d.ts +3 -0
- package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionHeader.js +8 -0
- package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionList.d.ts +4 -0
- package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionList.js +36 -0
- package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionMain.d.ts +4 -0
- package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionMain.js +37 -0
- package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionMainHeader.d.ts +3 -0
- package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionMainHeader.js +7 -0
- package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionPanel.d.ts +14 -0
- package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionPanel.js +333 -0
- package/node_modules/@undefineds.co/ai-connection/dist/AiProviderCard.d.ts +22 -0
- package/node_modules/@undefineds.co/ai-connection/dist/AiProviderCard.js +43 -0
- package/node_modules/@undefineds.co/ai-connection/dist/AiQuotaCard.d.ts +8 -0
- package/node_modules/@undefineds.co/ai-connection/dist/AiQuotaCard.js +6 -0
- package/node_modules/@undefineds.co/ai-connection/dist/ai-connection-client.d.ts +120 -0
- package/node_modules/@undefineds.co/ai-connection/dist/ai-connection-client.js +414 -0
- package/node_modules/@undefineds.co/ai-connection/dist/client-config/base-adapter.d.ts +32 -0
- package/node_modules/@undefineds.co/ai-connection/dist/client-config/base-adapter.js +212 -0
- package/node_modules/@undefineds.co/ai-connection/dist/client-config/codex.d.ts +14 -0
- package/node_modules/@undefineds.co/ai-connection/dist/client-config/codex.js +90 -0
- package/node_modules/@undefineds.co/ai-connection/dist/client-config/index.cjs +668 -0
- package/node_modules/@undefineds.co/ai-connection/dist/client-config/index.d.ts +6 -0
- package/node_modules/@undefineds.co/ai-connection/dist/client-config/index.js +6 -0
- package/node_modules/@undefineds.co/ai-connection/dist/client-config/json-env-adapter.d.ts +21 -0
- package/node_modules/@undefineds.co/ai-connection/dist/client-config/json-env-adapter.js +82 -0
- package/node_modules/@undefineds.co/ai-connection/dist/client-config/pi.d.ts +13 -0
- package/node_modules/@undefineds.co/ai-connection/dist/client-config/pi.js +83 -0
- package/node_modules/@undefineds.co/ai-connection/dist/client-config/transaction.d.ts +17 -0
- package/node_modules/@undefineds.co/ai-connection/dist/client-config/transaction.js +153 -0
- package/node_modules/@undefineds.co/ai-connection/dist/client-config/types.d.ts +40 -0
- package/node_modules/@undefineds.co/ai-connection/dist/client-config/types.js +1 -0
- package/node_modules/@undefineds.co/ai-connection/dist/controller.d.ts +42 -0
- package/node_modules/@undefineds.co/ai-connection/dist/controller.js +289 -0
- package/node_modules/@undefineds.co/ai-connection/dist/index.d.ts +16 -0
- package/node_modules/@undefineds.co/ai-connection/dist/index.js +41 -0
- package/node_modules/@undefineds.co/ai-connection/dist/manifest.d.ts +1 -0
- package/node_modules/@undefineds.co/ai-connection/dist/manifest.js +18 -0
- package/node_modules/@undefineds.co/ai-connection/dist/service-access.d.ts +3 -0
- package/node_modules/@undefineds.co/ai-connection/dist/service-access.js +133 -0
- package/node_modules/@undefineds.co/ai-connection/package.json +50 -0
- package/node_modules/@undefineds.co/extension-sdk/README.md +299 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/index.d.ts +5 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/index.js +5 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/layout.d.ts +16 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/layout.js +36 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/manifest.d.ts +27 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/manifest.js +79 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/react/app-layout.d.ts +7 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/react/app-layout.js +8 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/react/auth-boundary.d.ts +27 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/react/auth-boundary.js +49 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/react/layout-context.d.ts +11 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/react/layout-context.js +9 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/react/workspace-layout.d.ts +38 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/react/workspace-layout.js +132 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/react.d.ts +12 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/react.js +19 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/testing.d.ts +7 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/testing.js +27 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/web.d.ts +225 -0
- package/node_modules/@undefineds.co/extension-sdk/dist/web.js +142 -0
- package/node_modules/@undefineds.co/extension-sdk/package.json +49 -0
- package/node_modules/@undefineds.co/shared-ui/dist/badge.d.ts +8 -0
- package/node_modules/@undefineds.co/shared-ui/dist/badge.js +17 -0
- package/node_modules/@undefineds.co/shared-ui/dist/button.d.ts +10 -0
- package/node_modules/@undefineds.co/shared-ui/dist/button.js +30 -0
- package/node_modules/@undefineds.co/shared-ui/dist/card.d.ts +7 -0
- package/node_modules/@undefineds.co/shared-ui/dist/card.js +15 -0
- package/node_modules/@undefineds.co/shared-ui/dist/index.d.ts +6 -0
- package/node_modules/@undefineds.co/shared-ui/dist/index.js +6 -0
- package/node_modules/@undefineds.co/shared-ui/dist/input.d.ts +4 -0
- package/node_modules/@undefineds.co/shared-ui/dist/input.js +5 -0
- package/node_modules/@undefineds.co/shared-ui/dist/theme.css +121 -0
- package/node_modules/@undefineds.co/shared-ui/dist/utils.d.ts +2 -0
- package/node_modules/@undefineds.co/shared-ui/dist/utils.js +5 -0
- package/node_modules/@undefineds.co/shared-ui/dist/workspace.d.ts +23 -0
- package/node_modules/@undefineds.co/shared-ui/dist/workspace.js +38 -0
- package/node_modules/@undefineds.co/shared-ui/package.json +39 -0
- package/node_modules/@undefineds.co/solid-sdk/dist/index.d.ts +3 -0
- package/node_modules/@undefineds.co/solid-sdk/dist/index.js +3 -0
- package/node_modules/@undefineds.co/solid-sdk/dist/pod-runtime.d.ts +45 -0
- package/node_modules/@undefineds.co/solid-sdk/dist/pod-runtime.js +147 -0
- package/node_modules/@undefineds.co/solid-sdk/dist/react.d.ts +15 -0
- package/node_modules/@undefineds.co/solid-sdk/dist/react.js +15 -0
- package/node_modules/@undefineds.co/solid-sdk/dist/session.d.ts +42 -0
- package/node_modules/@undefineds.co/solid-sdk/dist/session.js +127 -0
- package/node_modules/@undefineds.co/solid-sdk/package.json +45 -0
- package/package.json +32 -12
- package/static/app/assets/index-BoYHJ6si.js +230 -0
- package/static/app/assets/inrupt-smoke.js +2 -2
- package/static/app/assets/main.css +1 -1
- package/static/app/assets/main.js +9 -9
- package/static/dashboard/assets/NetworkPage-Brt79fuQ.js +2 -0
- package/static/dashboard/assets/PaneListHeader-57nvMwH6.js +1 -0
- package/static/dashboard/assets/PodPage-CM6do1vB.js +2 -0
- package/static/dashboard/assets/ServicesPage-BUNxGJRz.js +1 -0
- package/static/dashboard/assets/card-B9Zjf_2p.js +1 -0
- package/static/dashboard/assets/dashboard-8C6o666W.js +305 -0
- package/static/dashboard/assets/dashboard-CSdewNeA.css +1 -0
- package/static/dashboard/assets/database-DPh9wDY9.js +1 -0
- package/static/dashboard/assets/external-link-VbMQvVMz.js +1 -0
- package/static/dashboard/assets/index-RfiFckzb.js +51 -0
- package/static/dashboard/assets/refresh-cw-BxVxNxNr.js +1 -0
- package/static/dashboard/assets/services-status-context-DKmJ7ISr.js +1 -0
- package/static/dashboard/dashboard.html +2 -2
- package/static/settings/assets/ModelsPage-D_IH7AH3.js +1 -0
- package/static/settings/assets/PaneListHeader-Bgaze006.js +1 -0
- package/static/settings/assets/PodPage-Cy1VNObw.js +2 -0
- package/static/settings/assets/ServicesPage-BsFaxVWC.js +1 -0
- package/static/settings/assets/SettingsPage-UafNWE_p.js +48 -0
- package/static/settings/assets/card-B_bXSIn-.js +1 -0
- package/static/settings/assets/services-status-context-DiX-AbrP.js +1 -0
- package/static/settings/assets/settings-B30oMfZq.js +305 -0
- package/static/settings/assets/settings-CSdewNeA.css +1 -0
- package/static/settings/assets/workspace-layout-Dv1Yn9Ci.js +1 -0
- package/static/settings/auth.html +21 -0
- package/static/settings/reachability.html +221 -0
- package/static/settings/reachability.svg +7 -0
- package/static/settings/reachability.webmanifest +18 -0
- package/static/settings/settings.html +13 -0
- package/static/settings/signal-pod.html +293 -0
- package/static/settings/vite.svg +1 -0
- package/dist/api/service/ai-gateway-transport.d.ts +0 -25
- package/dist/api/service/ai-gateway-transport.js +0 -136
- package/dist/api/service/ai-gateway-transport.js.map +0 -1
- package/dist/api/service/chat-protocol-adapters.d.ts +0 -5
- package/dist/api/service/chat-protocol-adapters.js +0 -146
- package/dist/api/service/chat-protocol-adapters.js.map +0 -1
- package/dist/api/service/chat-routing.d.ts +0 -8
- package/dist/api/service/chat-routing.js +0 -16
- package/dist/api/service/chat-routing.js.map +0 -1
- package/dist/api/service/platform-ai-config.d.ts +0 -10
- package/dist/api/service/platform-ai-config.js +0 -76
- package/dist/api/service/platform-ai-config.js.map +0 -1
- package/dist/document/DocumentParser.js.map +0 -1
- package/dist/document/JinaDocumentParser.js.map +0 -1
- package/static/app/assets/index-C1yksyT4.js +0 -171
- package/static/dashboard/assets/dashboard-BssaVKTn.css +0 -1
- package/static/dashboard/assets/dashboard-Ckuadl3C.js +0 -54
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PostgresRdfEngine.js","sourceRoot":"","sources":["../../../src/storage/rdf/PostgresRdfEngine.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from 'node:crypto';\nimport { DataFactory, termToId } from 'n3';\nimport type { Quad, Term } from '@rdfjs/types';\nimport { PGlite } from '@electric-sql/pglite';\nimport { getSharedPool, releaseSharedPool } from '../database/PostgresPoolManager';\nimport { RDF_TERM_VALUE_HEAD_LENGTH, rdfTermValueHead } from './RdfTermDictionary';\nimport { isFiniteNumericLexical, isRdfNumericDatatype, isRdfNumericTerm, rdfNumericValue } from './RdfTermSemantics';\nimport {\n RDF3X_GRAPH_PROJECTION_TABLE,\n RDF3X_PAIR_PROJECTION_TABLE_BY_NAME,\n RDF3X_TERM_PROJECTION_TABLE_BY_NAME,\n} from './Rdf3xSchema';\nimport type {\n RdfBindingRow,\n RdfDerivedIndexRefreshResult,\n RdfEngineLike,\n RdfEngineStorageStats,\n RdfIndexMetrics,\n RdfIndexPutOptions,\n RdfIndexSpaceObject,\n RdfIndexStats,\n RdfQuery,\n RdfQueryMetrics,\n RdfQueryResult,\n RdfPatternQuery,\n RdfQueryFilter,\n RdfQueryPattern,\n RdfQueryPatternKey,\n RdfQueryTermPattern,\n RdfQueryFilterValue,\n RdfQueryAggregate,\n RdfQueryBind,\n RdfBindExpression,\n RdfValuesBindingSource,\n RdfOptionalQueryGroup,\n RdfUnionQueryBranch,\n RdfMinusQueryGroup,\n RdfExistsQueryGroup,\n RdfQuadIndexScanResult,\n RdfSourceInput,\n Rdf3xIndexStats,\n Rdf3xObjectRangePattern,\n Rdf3xObjectTextSearchPattern,\n Rdf3xPairProjectionName,\n Rdf3xTermMetadataPattern,\n Rdf3xTermProjectionName,\n Rdf3xTermTypePatternValue,\n RdfTermKind,\n} from './types';\nimport type { QueryOptions, QuintPattern, TermMatch, TermName, TermOperators } from '../quint/types';\nimport { isTerm } from '../quint/types';\n\nconst { namedNode, quad } = DataFactory;\nconst XSD_STRING = 'http://www.w3.org/2001/XMLSchema#string';\nconst XSD_INTEGER = 'http://www.w3.org/2001/XMLSchema#integer';\nconst XSD_DECIMAL = 'http://www.w3.org/2001/XMLSchema#decimal';\nconst RDF_LANG_STRING = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#langString';\nconst POSTGRES_RDF_SCHEMA_VERSION = 1;\nconst POSTGRES_RDF3X_SCHEMA_VERSION = 1;\nconst PG_STRING_ESCAPE = '\\u001f';\nconst POSTGRES_RDF_WRITE_RETRY_DELAYS_MS = [100, 250, 500, 1000, 2000];\nconst RETRYABLE_POSTGRES_WRITE_ERROR_CODES = new Set(['40P01', '40001']);\n\ntype PgPatternKey = 'graph' | 'subject' | 'predicate' | 'object';\ntype PgTermKey = 'subject' | 'predicate' | 'object';\ntype PgIndexedColumn = 'graph_id' | 'subject_id' | 'predicate_id' | 'object_id';\ntype PgPermutationName = 'SPO' | 'SOP' | 'PSO' | 'POS' | 'OSP' | 'OPS';\n\ninterface PgPermutation {\n name: PgPermutationName;\n indexName: string;\n columns: PgIndexedColumn[];\n}\n\ninterface PgPairProjection {\n name: Rdf3xPairProjectionName;\n table: string;\n columns: [PgIndexedColumn, PgIndexedColumn];\n remainder: PgIndexedColumn;\n}\n\ninterface PgTermProjection {\n name: Rdf3xTermProjectionName;\n table: string;\n column: PgIndexedColumn;\n}\n\ninterface PgResolvedPattern {\n ids: Partial<Record<PgPatternKey, number>>;\n idSets: Partial<Record<PgPatternKey, number[]>>;\n excludedIdSets: Partial<Record<PgPatternKey, number[]>>;\n termFilters: Partial<Record<PgPatternKey, PgResolvedTermFilter>>;\n graphPrefix?: string;\n objectRange?: PgObjectRange;\n unresolved?: PgPatternKey;\n}\n\ninterface PgResolvedTermFilter {\n termType?: Rdf3xTermTypePatternValue;\n language?: string;\n notLanguage?: string;\n langMatches?: string;\n datatype?: PgResolvedDatatypeFilter;\n notDatatype?: PgResolvedDatatypeFilter;\n textSearches?: PgTextSearch[];\n}\n\ntype PgResolvedDatatypeFilter =\n | { kind: 'id'; id: number }\n | { kind: 'xsd-string' }\n | { kind: 'unknown' };\n\ninterface PgTextSearch {\n operator: '$contains' | '$endsWith';\n value: string;\n}\n\ninterface PgObjectRange {\n mode: 'numeric' | 'lexical';\n min?: number | string;\n minInclusive?: boolean;\n max?: number | string;\n maxInclusive?: boolean;\n}\n\ninterface PgQuadIdRow {\n graph_id: number;\n subject_id: number;\n predicate_id: number;\n object_id: number;\n}\n\ninterface PgCompiledScan {\n sql: string;\n params: unknown[];\n countSql: string;\n countParams: unknown[];\n indexChoice: string;\n queryPlan: string[];\n}\n\ninterface PgCompiledJoinPattern {\n pattern: QuintPattern;\n variables: Partial<Record<PgPatternKey, string>>;\n equalities: PgPatternEquality[];\n}\n\ninterface PgJoinSource {\n inputIndex: number;\n alias: string;\n entry: PgCompiledJoinPattern;\n resolved: PgResolvedPattern;\n permutation: PgPermutation;\n estimateRows: number;\n}\n\ninterface PgCompiledJoin {\n sql: string;\n params: unknown[];\n countSql?: string;\n countParams: unknown[];\n indexChoice: string;\n queryPlan: string[];\n variableAliases: Map<string, string>;\n unresolved?: PgPatternKey;\n}\n\ninterface PgPatternEquality {\n variable: string;\n left: PgPatternKey;\n right: PgPatternKey;\n}\n\ninterface PgAggregateSqlExpression {\n variableName: string;\n alias: string;\n type: 'integer';\n expression: string;\n sql: string;\n}\n\nconst TERM_KEYS: PgTermKey[] = ['subject', 'predicate', 'object'];\nconst PATTERN_KEYS: PgPatternKey[] = ['graph', 'subject', 'predicate', 'object'];\nconst RDF_FACTS_TABLE = 'rdf_quads';\n\nconst TERM_COLUMN: Record<PgPatternKey, PgIndexedColumn> = {\n graph: 'graph_id',\n subject: 'subject_id',\n predicate: 'predicate_id',\n object: 'object_id',\n};\n\nconst PERMUTATIONS: PgPermutation[] = [\n { name: 'SPO', indexName: 'rdf_quads_spog', columns: ['subject_id', 'predicate_id', 'object_id', 'graph_id'] },\n { name: 'SOP', indexName: 'rdf_quads_sopg', columns: ['subject_id', 'object_id', 'predicate_id', 'graph_id'] },\n { name: 'PSO', indexName: 'rdf_quads_psog', columns: ['predicate_id', 'subject_id', 'object_id', 'graph_id'] },\n { name: 'POS', indexName: 'rdf_quads_posg', columns: ['predicate_id', 'object_id', 'subject_id', 'graph_id'] },\n { name: 'OSP', indexName: 'rdf_quads_ospg', columns: ['object_id', 'subject_id', 'predicate_id', 'graph_id'] },\n { name: 'OPS', indexName: 'rdf_quads_opsg', columns: ['object_id', 'predicate_id', 'subject_id', 'graph_id'] },\n];\n\nconst PAIR_PROJECTIONS: PgPairProjection[] = [\n { name: 'SP', table: RDF3X_PAIR_PROJECTION_TABLE_BY_NAME.SP, columns: ['subject_id', 'predicate_id'], remainder: 'object_id' },\n { name: 'SO', table: RDF3X_PAIR_PROJECTION_TABLE_BY_NAME.SO, columns: ['subject_id', 'object_id'], remainder: 'predicate_id' },\n { name: 'PS', table: RDF3X_PAIR_PROJECTION_TABLE_BY_NAME.PS, columns: ['predicate_id', 'subject_id'], remainder: 'object_id' },\n { name: 'PO', table: RDF3X_PAIR_PROJECTION_TABLE_BY_NAME.PO, columns: ['predicate_id', 'object_id'], remainder: 'subject_id' },\n { name: 'OS', table: RDF3X_PAIR_PROJECTION_TABLE_BY_NAME.OS, columns: ['object_id', 'subject_id'], remainder: 'predicate_id' },\n { name: 'OP', table: RDF3X_PAIR_PROJECTION_TABLE_BY_NAME.OP, columns: ['object_id', 'predicate_id'], remainder: 'subject_id' },\n];\n\nconst TERM_PROJECTIONS: PgTermProjection[] = [\n { name: 'S', table: RDF3X_TERM_PROJECTION_TABLE_BY_NAME.S, column: 'subject_id' },\n { name: 'P', table: RDF3X_TERM_PROJECTION_TABLE_BY_NAME.P, column: 'predicate_id' },\n { name: 'O', table: RDF3X_TERM_PROJECTION_TABLE_BY_NAME.O, column: 'object_id' },\n];\n\nconst OBJECT_RANGE_KINDS: RdfTermKind[] = ['iri', 'literal', 'blank'];\n\ninterface AsyncSqlExecutor {\n query<T = Record<string, unknown>>(sql: string, params?: unknown[]): Promise<T[]>;\n exec(sql: string, params?: unknown[]): Promise<void>;\n transaction<T>(fn: (tx: AsyncSqlExecutor) => Promise<T>): Promise<T>;\n close(): Promise<void>;\n}\n\nexport interface PostgresRdfEngineOptions {\n driver?: 'pglite' | 'pg';\n dataDir?: string;\n connectionString?: string;\n host?: string;\n port?: number;\n database?: string;\n user?: string;\n password?: string;\n pool?: any;\n autoOpen?: boolean;\n}\n\ninterface PostgresRdfTermRow {\n id: number;\n kind: RdfTermKind;\n value: string;\n value_head: string;\n datatype_id: number | null;\n lang: string | null;\n hash: string;\n normalized_text: string | null;\n numeric_value: number | null;\n created_at: string;\n}\n\ninterface PostgresRdfSourceRow {\n id: number;\n source: string;\n workspace: string;\n local_path: string | null;\n content_type: string | null;\n last_indexed_at: string | null;\n source_version: string | null;\n}\n\ninterface RdfTermIdentity {\n kind: RdfTermKind;\n value: string;\n valueHead: string;\n datatypeId: number | null;\n lang: string | null;\n normalizedText: string | null;\n numericValue: number | null;\n hash: string;\n}\n\nfunction toPgSafe(value: string): string {\n return value\n .replaceAll(PG_STRING_ESCAPE, `${PG_STRING_ESCAPE}${PG_STRING_ESCAPE}`)\n .replaceAll('\\u0000', `${PG_STRING_ESCAPE}0`);\n}\n\nfunction fromPgSafe(value: string): string {\n let result = '';\n for (let i = 0; i < value.length; i += 1) {\n const char = value[i];\n if (char !== PG_STRING_ESCAPE) {\n result += char;\n continue;\n }\n const next = value[i + 1];\n if (next === '0') {\n result += '\\u0000';\n i += 1;\n } else if (next === PG_STRING_ESCAPE) {\n result += PG_STRING_ESCAPE;\n i += 1;\n } else {\n // Legacy rows from the earlier direct replacement format used a bare\n // separator as a null-byte placeholder.\n result += '\\u0000';\n }\n }\n return result;\n}\n\nfunction normalizePgValue(value: unknown): unknown {\n if (typeof value === 'string') {\n return toPgSafe(value);\n }\n if (Array.isArray(value)) {\n return value.map((item) => normalizePgValue(item));\n }\n return value;\n}\n\nfunction isRetryablePostgresWriteError(error: unknown): boolean {\n const candidate = error as { code?: unknown; message?: unknown } | undefined;\n const code = typeof candidate?.code === 'string' ? candidate.code : undefined;\n if (code && RETRYABLE_POSTGRES_WRITE_ERROR_CODES.has(code)) {\n return true;\n }\n\n const message = typeof candidate?.message === 'string' ? candidate.message.toLowerCase() : '';\n return message.includes('deadlock detected')\n || message.includes('could not serialize access due to concurrent update');\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nclass PgliteExecutor implements AsyncSqlExecutor {\n public constructor(private readonly db: PGlite) {}\n\n public async query<T = Record<string, unknown>>(sql: string, params: unknown[] = []): Promise<T[]> {\n const result = await this.db.query(sql, params.map((value) => normalizePgValue(value)));\n return (result.rows as T[]).map((row) => restoreRow(row));\n }\n\n public async exec(sql: string, params: unknown[] = []): Promise<void> {\n await this.db.query(sql, params.map((value) => normalizePgValue(value)));\n }\n\n public async transaction<T>(fn: (tx: AsyncSqlExecutor) => Promise<T>): Promise<T> {\n await this.db.query('BEGIN');\n try {\n const result = await fn(this);\n await this.db.query('COMMIT');\n return result;\n } catch (error) {\n await this.db.query('ROLLBACK');\n throw error;\n }\n }\n\n public async close(): Promise<void> {\n await this.db.close();\n }\n}\n\nclass PgPoolExecutor implements AsyncSqlExecutor {\n public constructor(private readonly pool: any, private readonly client?: any) {}\n\n public async query<T = Record<string, unknown>>(sql: string, params: unknown[] = []): Promise<T[]> {\n const result = this.client\n ? await this.client.query(sql, params.map((value) => normalizePgValue(value)))\n : await this.pool.query(sql, params.map((value) => normalizePgValue(value)));\n return (result.rows as T[]).map((row: T) => restoreRow(row));\n }\n\n public async exec(sql: string, params: unknown[] = []): Promise<void> {\n if (this.client) {\n await this.client.query(sql, params.map((value) => normalizePgValue(value)));\n return;\n }\n await this.pool.query(sql, params.map((value) => normalizePgValue(value)));\n }\n\n public async transaction<T>(fn: (tx: AsyncSqlExecutor) => Promise<T>): Promise<T> {\n if (this.client) {\n const result = await fn(this);\n return result;\n }\n\n const client = await this.pool.connect();\n const tx = new PgPoolExecutor(this.pool, client);\n try {\n await client.query('BEGIN');\n const result = await fn(tx);\n await client.query('COMMIT');\n return result;\n } catch (error) {\n try {\n await client.query('ROLLBACK');\n } catch {\n }\n throw error;\n } finally {\n client.release();\n }\n }\n\n public async close(): Promise<void> {\n if (this.client) {\n return;\n }\n await this.pool.end();\n }\n}\n\nclass PgSqlBuilder {\n private params: unknown[] = [];\n\n public constructor(initialParams: unknown[] = []) {\n this.params = [...initialParams];\n }\n\n public add(value: unknown): string {\n this.params.push(value);\n return `$${this.params.length}`;\n }\n\n public addAll(values: unknown[]): string {\n return values.map((value) => this.add(value)).join(', ');\n }\n\n public snapshot(): unknown[] {\n return [...this.params];\n }\n}\n\nclass PostgresRdfTermDictionary {\n private readonly termCache = new Map<string, number>();\n private readonly idCache = new Map<number, Term>();\n\n public constructor(private readonly executor: AsyncSqlExecutor) {}\n\n public async initialize(): Promise<void> {\n await this.executor.exec(`\n CREATE TABLE IF NOT EXISTS rdf_terms (\n id BIGSERIAL PRIMARY KEY,\n kind TEXT NOT NULL,\n value TEXT NOT NULL,\n value_head TEXT NOT NULL,\n datatype_id BIGINT,\n lang TEXT,\n hash TEXT NOT NULL UNIQUE,\n normalized_text TEXT,\n numeric_value DOUBLE PRECISION,\n created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n )\n `);\n await this.executor.exec(`\n CREATE UNIQUE INDEX IF NOT EXISTS rdf_terms_identity_hash ON rdf_terms (hash)\n `);\n await this.executor.exec('CREATE INDEX IF NOT EXISTS rdf_terms_kind_value_head ON rdf_terms (kind, value_head)');\n await this.executor.exec('CREATE INDEX IF NOT EXISTS rdf_terms_kind_datatype ON rdf_terms (kind, datatype_id)');\n await this.executor.exec('CREATE INDEX IF NOT EXISTS rdf_terms_kind_lang ON rdf_terms (kind, lang)');\n await this.executor.exec('CREATE INDEX IF NOT EXISTS rdf_terms_kind_numeric_value ON rdf_terms (kind, numeric_value)');\n }\n\n public async getOrCreate(term: Term): Promise<number> {\n const identity = await this.toIdentity(term);\n const cacheKey = this.identityCacheKey(identity);\n const cached = this.termCache.get(cacheKey);\n if (cached !== undefined) {\n return cached;\n }\n\n const row = await this.executor.query<{ id: number }>(`\n INSERT INTO rdf_terms (\n kind,\n value,\n value_head,\n datatype_id,\n lang,\n hash,\n normalized_text,\n numeric_value\n )\n VALUES ($1, $2, $3, $4, $5, $6, $7, $8)\n ON CONFLICT (hash) DO NOTHING\n RETURNING id\n `, [\n identity.kind,\n identity.value,\n identity.valueHead,\n identity.datatypeId,\n identity.lang,\n identity.hash,\n identity.normalizedText,\n identity.numericValue,\n ]);\n let id: number | undefined = row[0]?.id;\n if (id === undefined) {\n const existing = await this.executor.query<PostgresRdfTermRow>('SELECT * FROM rdf_terms WHERE hash = $1', [identity.hash]);\n id = existing.find((entry) => this.rowMatchesIdentity(entry, identity))?.id;\n }\n if (id === undefined) {\n throw new Error('Failed to insert RDF term');\n }\n this.termCache.set(cacheKey, id);\n this.idCache.set(id, term);\n return id;\n }\n\n public async find(term: Term): Promise<number | undefined> {\n const identity = await this.toIdentity(term);\n const cacheKey = this.identityCacheKey(identity);\n const cached = this.termCache.get(cacheKey);\n if (cached !== undefined) {\n return cached;\n }\n\n const rows = await this.executor.query<PostgresRdfTermRow>('SELECT * FROM rdf_terms WHERE hash = $1', [identity.hash]);\n const id = rows.find((row) => this.rowMatchesIdentity(row, identity))?.id;\n if (id !== undefined) {\n this.termCache.set(cacheKey, id);\n }\n return id;\n }\n\n public async termForId(id: number): Promise<Term> {\n const cached = this.idCache.get(id);\n if (cached) {\n return cached;\n }\n const row = await this.executor.query<PostgresRdfTermRow>('SELECT * FROM rdf_terms WHERE id = $1', [id]);\n const termRow = row[0];\n if (!termRow) {\n throw new Error(`RDF term not found: ${id}`);\n }\n const term = await this.rowToTerm(termRow);\n this.idCache.set(id, term);\n return term;\n }\n\n public async rowsForIds(ids: number[]): Promise<Map<number, Term>> {\n const result = new Map<number, Term>();\n const uniqueIds = Array.from(new Set(ids));\n if (uniqueIds.length === 0) {\n return result;\n }\n\n const rows = await this.executor.query<PostgresRdfTermRow>('SELECT * FROM rdf_terms WHERE id = ANY($1::bigint[])', [uniqueIds]);\n for (const row of rows) {\n const term = await this.rowToTerm(row);\n this.idCache.set(row.id, term);\n result.set(row.id, term);\n }\n return result;\n }\n\n public async rowsByNormalizedTextRegex(kinds: RdfTermKind[], pattern: string): Promise<number[]> {\n if (kinds.length === 0) {\n return [];\n }\n const rows = await this.executor.query<{ id: number; value: string }>(`\n SELECT id, value\n FROM rdf_terms\n WHERE kind = ANY($1::text[])\n AND normalized_text IS NOT NULL\n `, [kinds]);\n const regex = new RegExp(pattern);\n return rows\n .filter((row) => regex.test(row.value.toLowerCase()))\n .map((row) => row.id);\n }\n\n public async count(): Promise<number> {\n const row = await this.executor.query<{ count: number }>('SELECT COUNT(*) AS count FROM rdf_terms');\n return row[0]?.count ?? 0;\n }\n\n private async toIdentity(term: Term): Promise<RdfTermIdentity> {\n switch (term.termType) {\n case 'NamedNode':\n return this.identity('iri', term.value, null, null, term.value, null);\n case 'BlankNode':\n return this.identity('blank', term.value, null, null, term.value, null);\n case 'DefaultGraph':\n return this.identity('default_graph', '', null, null, null, null);\n case 'Literal': {\n const datatypeValue = term.datatype?.value || XSD_STRING;\n const datatypeId = datatypeValue === XSD_STRING && !term.language\n ? null\n : await this.getOrCreate(namedNode(datatypeValue));\n return this.identity(\n 'literal',\n term.value,\n datatypeId,\n term.language || null,\n term.value,\n this.numericValueForLiteral(term.value, datatypeValue),\n );\n }\n case 'Variable':\n throw new Error(`Variables cannot be indexed as RDF terms: ${term.value}`);\n case 'Quad':\n throw new Error('Nested RDF-star quads are not supported by the first PostgresRdfEngine index');\n default: {\n const exhaustive: never = term;\n throw new Error(`Unsupported RDF term: ${String(exhaustive)}`);\n }\n }\n }\n\n private identity(\n kind: RdfTermKind,\n value: string,\n datatypeId: number | null,\n lang: string | null,\n normalizedText: string | null,\n numericValue: number | null,\n ): RdfTermIdentity {\n const hash = createHash('sha256')\n .update(kind)\n .update('\\0')\n .update(value)\n .update('\\0')\n .update(String(datatypeId ?? ''))\n .update('\\0')\n .update(lang ?? '')\n .digest('hex');\n return {\n kind,\n value,\n valueHead: rdfTermValueHead(value),\n datatypeId,\n lang,\n normalizedText: normalizedText ? normalizedText.toLowerCase() : null,\n numericValue,\n hash,\n };\n }\n\n private numericValueForLiteral(value: string, datatypeValue: string): number | null {\n if (!isRdfNumericDatatype(datatypeValue)) {\n return null;\n }\n const numeric = rdfNumericValue(value);\n return Number.isFinite(numeric) ? numeric : null;\n }\n\n private identityCacheKey(identity: RdfTermIdentity): string {\n return [\n identity.kind,\n identity.value,\n identity.datatypeId ?? '',\n identity.lang ?? '',\n ].join('\\u001f');\n }\n\n private rowMatchesIdentity(row: PostgresRdfTermRow, identity: RdfTermIdentity): boolean {\n return row.kind === identity.kind\n && row.value === identity.value\n && row.datatype_id === identity.datatypeId\n && row.lang === identity.lang;\n }\n\n private async rowToTerm(row: PostgresRdfTermRow): Promise<Term> {\n switch (row.kind) {\n case 'iri':\n return DataFactory.namedNode(row.value);\n case 'blank':\n return DataFactory.blankNode(row.value);\n case 'default_graph':\n return DataFactory.defaultGraph();\n case 'literal': {\n const value = row.value;\n if (row.lang) {\n return DataFactory.literal(value, row.lang);\n }\n if (row.datatype_id) {\n const datatype = await this.termForId(row.datatype_id);\n if (datatype.termType === 'NamedNode' && datatype.value !== XSD_STRING && datatype.value !== RDF_LANG_STRING) {\n return DataFactory.literal(value, datatype);\n }\n }\n return DataFactory.literal(value);\n }\n default:\n throw new Error(`Unsupported RDF term kind in row: ${row.kind}`);\n }\n }\n}\n\nexport class PostgresRdfEngine implements RdfEngineLike {\n private executor: AsyncSqlExecutor | null = null;\n private termDictionary: PostgresRdfTermDictionary | null = null;\n private initialized = false;\n private initializing: Promise<void> | null = null;\n private readonly pgOptions: PostgresRdfEngineOptions;\n private sharedPoolConfig: {\n connectionString?: string;\n host?: string;\n port?: number;\n database?: string;\n user?: string;\n password?: string;\n } | null = null;\n private pglite: PGlite | null = null;\n private pgPool: any = null;\n\n public constructor(options: PostgresRdfEngineOptions) {\n this.pgOptions = {\n ...options,\n driver: options.driver ?? (options.connectionString || options.pool ? 'pg' : 'pglite'),\n };\n if (options.autoOpen) {\n void this.open();\n }\n }\n\n public async open(): Promise<void> {\n if (this.initialized) {\n return;\n }\n\n this.initializing ??= Promise.resolve()\n .then(async () => {\n await this.openExecutor();\n this.termDictionary = new PostgresRdfTermDictionary(this.requireExecutor());\n await this.termDictionary.initialize();\n await this.initializeSchema();\n this.initialized = true;\n })\n .finally(() => {\n this.initializing = null;\n });\n\n await this.initializing;\n }\n\n public async close(): Promise<void> {\n if (this.initializing) {\n await this.initializing.catch(() => {});\n }\n this.executor = null;\n if (this.pglite) {\n await this.pglite.close();\n this.pglite = null;\n }\n if (this.pgPool) {\n if (this.sharedPoolConfig) {\n releaseSharedPool(this.sharedPoolConfig);\n } else {\n await this.pgPool.end();\n }\n this.pgPool = null;\n this.sharedPoolConfig = null;\n }\n this.termDictionary = null;\n this.initialized = false;\n }\n\n public async put(quads: Quad | Quad[], options?: RdfIndexPutOptions): Promise<void> {\n await this.ensureReady();\n const quadList = Array.isArray(quads) ? quads : [quads];\n const executor = this.requireExecutor();\n await this.withRetryableWrite(async () => {\n await executor.transaction(async (tx) => {\n const scopedDictionary = new PostgresRdfTermDictionary(tx);\n const sourceId = options?.source ? await this.upsertSource(options.source, tx) : null;\n await this.insertQuads(tx, scopedDictionary, quadList, sourceId, options?.sourceLineNo ?? null);\n await this.bumpFactsDataVersion(tx);\n });\n });\n }\n\n public async replaceSource(quads: Quad[], source: RdfSourceInput): Promise<void> {\n await this.ensureReady();\n const executor = this.requireExecutor();\n await this.withRetryableWrite(async () => {\n await executor.transaction(async (tx) => {\n const scopedDictionary = new PostgresRdfTermDictionary(tx);\n const sourceId = await this.upsertSource(source, tx);\n await tx.exec('DELETE FROM rdf_quads WHERE source_file_id = $1', [sourceId]);\n await this.insertQuads(tx, scopedDictionary, quads, sourceId, null);\n await this.bumpFactsDataVersion(tx);\n });\n });\n }\n\n public async deleteSource(source: string): Promise<number> {\n await this.ensureReady();\n const executor = this.requireExecutor();\n return this.withRetryableWrite(async () => {\n const sourceRow = await this.findSourceRow(source, executor);\n if (!sourceRow) {\n return 0;\n }\n const result = await executor.transaction(async (tx) => {\n const deleteResult = await tx.query<{ count: number }>('DELETE FROM rdf_quads WHERE source_file_id = $1 RETURNING 1', [sourceRow.id]);\n await tx.exec('DELETE FROM rdf_sources WHERE id = $1', [sourceRow.id]);\n await this.bumpFactsDataVersion(tx);\n return deleteResult.length;\n });\n return result;\n });\n }\n\n public async delete(pattern: QuintPattern): Promise<number> {\n await this.ensureReady();\n const scan = await this.scan({ pattern });\n if (scan.quads.length === 0) {\n return 0;\n }\n const executor = this.requireExecutor();\n await this.withRetryableWrite(async () => {\n await executor.transaction(async (tx) => {\n const scopedDictionary = new PostgresRdfTermDictionary(tx);\n for (const value of scan.quads) {\n await this.deleteExactQuad(tx, scopedDictionary, value);\n }\n await this.bumpFactsDataVersion(tx);\n });\n });\n return scan.quads.length;\n }\n\n public async applyDelta(deletes: QuintPattern[], inserts: Quad[], options?: RdfIndexPutOptions): Promise<{ deletedRows: number; insertedRows: number }> {\n await this.ensureReady();\n if (deletes.length === 0 && inserts.length === 0) {\n return { deletedRows: 0, insertedRows: 0 };\n }\n\n const deleteQuads: Quad[] = [];\n for (const pattern of deletes) {\n deleteQuads.push(...(await this.scan({ pattern })).quads);\n }\n const uniqueDeleteQuads = uniqueQuads(deleteQuads);\n const executor = this.requireExecutor();\n let deletedRows = 0;\n deletedRows = await this.withRetryableWrite(async () => {\n deletedRows = await executor.transaction(async (tx) => {\n const scopedDictionary = new PostgresRdfTermDictionary(tx);\n let deletedRows = 0;\n for (const value of uniqueDeleteQuads) {\n const deleted = await this.deleteExactQuad(tx, scopedDictionary, value);\n deletedRows += deleted;\n }\n const sourceId = options?.source ? await this.upsertSource(options.source, tx) : null;\n await this.insertQuads(tx, scopedDictionary, inserts, sourceId, options?.sourceLineNo ?? null);\n if (deletedRows > 0 || inserts.length > 0) {\n await this.bumpFactsDataVersion(tx);\n }\n return deletedRows;\n });\n return deletedRows;\n });\n return {\n deletedRows,\n insertedRows: inserts.length,\n };\n }\n\n public async scan(query: RdfPatternQuery): Promise<RdfQuadIndexScanResult> {\n await this.ensureReady();\n return isPgSqlScanCompatiblePattern(query.pattern)\n ? this.scanNative(query.pattern, query.options)\n : this.scanPostFilter(query.pattern, query.options);\n }\n\n public async query(query: RdfQuery): Promise<RdfQueryResult> {\n await this.ensureReady();\n const native = await this.queryNative(query);\n return native ?? this.queryFacts(query);\n }\n\n public async refreshDerivedIndexes(): Promise<RdfDerivedIndexRefreshResult> {\n await this.ensureReady();\n const factsDataVersion = await this.readFactsDataVersion();\n const previousFactsDataVersion = await this.readRdf3xFactsDataVersion();\n if (previousFactsDataVersion === factsDataVersion) {\n return {\n derivedIndexProfile: 'rdf3x',\n factsDataVersion,\n rdf3x: {\n refreshed: false,\n previousFactsDataVersion,\n factsDataVersion,\n syncedWithFacts: true,\n },\n };\n }\n const rebuild = await this.rebuildRdf3xDerivedIndexes(factsDataVersion);\n return {\n derivedIndexProfile: 'rdf3x',\n factsDataVersion,\n rdf3x: {\n refreshed: previousFactsDataVersion !== factsDataVersion,\n previousFactsDataVersion,\n factsDataVersion,\n syncedWithFacts: true,\n rebuild,\n },\n };\n }\n\n public async storageStats(): Promise<RdfEngineStorageStats> {\n await this.ensureReady();\n const facts = await this.factsStats();\n const rdf3x = await this.rdf3xStats();\n const factsBytes = facts.databaseBytes;\n const derivedBytes = rdf3x.databaseBytes;\n const totalBytes = factsBytes + derivedBytes;\n return {\n derivedIndexProfile: 'rdf3x',\n facts,\n rdf3x: {\n stats: rdf3x,\n syncedWithFacts: rdf3x.factsDataVersion === await this.readFactsDataVersion(),\n },\n factsBytes,\n derivedBytes,\n totalBytes,\n derivedToFactsRatio: factsBytes === 0 ? 0 : derivedBytes / factsBytes,\n totalToFactsRatio: factsBytes === 0 ? 0 : totalBytes / factsBytes,\n };\n }\n\n private async initializeSchema(): Promise<void> {\n const executor = this.requireExecutor();\n await this.ensureCompatibleSchemaVersion(executor);\n await executor.exec(`\n CREATE TABLE IF NOT EXISTS rdf_sources (\n id BIGSERIAL PRIMARY KEY,\n source TEXT NOT NULL UNIQUE,\n workspace TEXT NOT NULL,\n local_path TEXT,\n content_type TEXT,\n last_indexed_at TIMESTAMPTZ,\n source_version TEXT\n )\n `);\n await executor.exec(`\n CREATE TABLE IF NOT EXISTS rdf_quads (\n graph_id BIGINT NOT NULL,\n subject_id BIGINT NOT NULL,\n predicate_id BIGINT NOT NULL,\n object_id BIGINT NOT NULL,\n source_file_id BIGINT,\n source_line_no BIGINT,\n PRIMARY KEY (graph_id, subject_id, predicate_id, object_id)\n )\n `);\n await executor.exec('CREATE INDEX IF NOT EXISTS rdf_quads_spog ON rdf_quads (subject_id, predicate_id, object_id, graph_id)');\n await executor.exec('CREATE INDEX IF NOT EXISTS rdf_quads_sopg ON rdf_quads (subject_id, object_id, predicate_id, graph_id)');\n await executor.exec('CREATE INDEX IF NOT EXISTS rdf_quads_psog ON rdf_quads (predicate_id, subject_id, object_id, graph_id)');\n await executor.exec('CREATE INDEX IF NOT EXISTS rdf_quads_posg ON rdf_quads (predicate_id, object_id, subject_id, graph_id)');\n await executor.exec('CREATE INDEX IF NOT EXISTS rdf_quads_ospg ON rdf_quads (object_id, subject_id, predicate_id, graph_id)');\n await executor.exec('CREATE INDEX IF NOT EXISTS rdf_quads_opsg ON rdf_quads (object_id, predicate_id, subject_id, graph_id)');\n await executor.exec('CREATE INDEX IF NOT EXISTS rdf_quads_gspo ON rdf_quads (graph_id, subject_id, predicate_id, object_id)');\n await executor.exec('CREATE INDEX IF NOT EXISTS rdf_quads_gpos ON rdf_quads (graph_id, predicate_id, object_id, subject_id)');\n await executor.exec('CREATE INDEX IF NOT EXISTS rdf_quads_source ON rdf_quads (source_file_id, source_line_no)');\n await executor.exec(`\n CREATE TABLE IF NOT EXISTS rdf_index_metadata (\n key TEXT PRIMARY KEY,\n value TEXT NOT NULL\n )\n `);\n await executor.exec(`\n INSERT INTO rdf_index_metadata (key, value)\n VALUES ('schema_version', '${POSTGRES_RDF_SCHEMA_VERSION}')\n ON CONFLICT (key) DO NOTHING\n `);\n await executor.exec(`\n INSERT INTO rdf_index_metadata (key, value)\n VALUES ('data_version', '0')\n ON CONFLICT (key) DO NOTHING\n `);\n await this.initializeRdf3xSchema(executor);\n }\n\n private async ensureCompatibleSchemaVersion(executor: AsyncSqlExecutor): Promise<void> {\n await executor.exec(`\n CREATE TABLE IF NOT EXISTS rdf_index_metadata (\n key TEXT PRIMARY KEY,\n value TEXT NOT NULL\n )\n `);\n const row = await executor.query<{ value: string }>(\"SELECT value FROM rdf_index_metadata WHERE key = 'schema_version'\");\n const version = row[0]?.value;\n if (version === undefined || version === String(POSTGRES_RDF_SCHEMA_VERSION)) {\n return;\n }\n\n await executor.transaction(async (tx) => {\n await tx.exec('DROP TABLE IF EXISTS rdf_quads');\n await tx.exec('DROP TABLE IF EXISTS rdf_sources');\n await tx.exec('DROP TABLE IF EXISTS rdf_terms');\n await tx.exec('DELETE FROM rdf_index_metadata');\n await tx.exec(\n \"INSERT INTO rdf_index_metadata (key, value) VALUES ('schema_version', $1)\",\n [String(POSTGRES_RDF_SCHEMA_VERSION)],\n );\n await tx.exec(\"INSERT INTO rdf_index_metadata (key, value) VALUES ('data_version', '0')\");\n });\n }\n\n private async initializeRdf3xSchema(executor: AsyncSqlExecutor): Promise<void> {\n await executor.exec(`\n CREATE TABLE IF NOT EXISTS rdf3x_metadata (\n key TEXT PRIMARY KEY,\n value TEXT NOT NULL\n )\n `);\n const row = await executor.query<{ value: string }>(\"SELECT value FROM rdf3x_metadata WHERE key = 'schema_version'\");\n const version = row[0]?.value;\n if (version !== undefined && version !== String(POSTGRES_RDF3X_SCHEMA_VERSION)) {\n await this.dropRdf3xDerivedSchema(executor);\n }\n\n await executor.exec(`\n CREATE TABLE IF NOT EXISTS ${RDF3X_GRAPH_PROJECTION_TABLE} (\n graph_id BIGINT PRIMARY KEY,\n membership_count BIGINT NOT NULL\n )\n `);\n for (const projection of PAIR_PROJECTIONS) {\n await executor.exec(`\n CREATE TABLE IF NOT EXISTS ${projection.table} (\n ${projection.columns[0]} BIGINT NOT NULL,\n ${projection.columns[1]} BIGINT NOT NULL,\n triple_count BIGINT NOT NULL,\n membership_count BIGINT NOT NULL,\n min_${projection.remainder} BIGINT,\n max_${projection.remainder} BIGINT,\n PRIMARY KEY (${projection.columns.join(', ')})\n )\n `);\n }\n for (const projection of TERM_PROJECTIONS) {\n await executor.exec(`\n CREATE TABLE IF NOT EXISTS ${projection.table} (\n ${projection.column} BIGINT PRIMARY KEY,\n triple_count BIGINT NOT NULL,\n membership_count BIGINT NOT NULL\n )\n `);\n }\n await executor.exec(`\n INSERT INTO rdf3x_metadata (key, value)\n VALUES ('schema_version', $1)\n ON CONFLICT (key) DO UPDATE SET value = EXCLUDED.value\n `, [String(POSTGRES_RDF3X_SCHEMA_VERSION)]);\n await executor.exec(`\n INSERT INTO rdf3x_metadata (key, value)\n VALUES ('facts_data_version', '0')\n ON CONFLICT (key) DO NOTHING\n `);\n }\n\n private async dropRdf3xDerivedSchema(executor: AsyncSqlExecutor): Promise<void> {\n for (const table of [\n ...PAIR_PROJECTIONS.map((projection) => projection.table),\n ...TERM_PROJECTIONS.map((projection) => projection.table),\n RDF3X_GRAPH_PROJECTION_TABLE,\n ]) {\n await executor.exec(`DROP TABLE IF EXISTS ${table}`);\n }\n await executor.exec('DELETE FROM rdf3x_metadata');\n }\n\n private async clearRdf3xDerivedTables(executor: AsyncSqlExecutor): Promise<void> {\n for (const projection of PAIR_PROJECTIONS) {\n await executor.exec(`DELETE FROM ${projection.table}`);\n }\n for (const projection of TERM_PROJECTIONS) {\n await executor.exec(`DELETE FROM ${projection.table}`);\n }\n await executor.exec(`DELETE FROM ${RDF3X_GRAPH_PROJECTION_TABLE}`);\n }\n\n private async rebuildRdf3xDerivedIndexes(factsDataVersion: number): Promise<NonNullable<RdfDerivedIndexRefreshResult['rdf3x']>['rebuild']> {\n const start = Date.now();\n const executor = this.requireExecutor();\n const scannedQuads = await this.scalarCount(`SELECT COUNT(*) AS count FROM ${RDF_FACTS_TABLE}`);\n await executor.transaction(async (tx) => {\n await this.clearRdf3xDerivedTables(tx);\n for (const projection of PAIR_PROJECTIONS) {\n await tx.exec(`\n INSERT INTO ${projection.table} (\n ${projection.columns[0]},\n ${projection.columns[1]},\n triple_count,\n membership_count,\n min_${projection.remainder},\n max_${projection.remainder}\n )\n SELECT\n triple.${projection.columns[0]},\n triple.${projection.columns[1]},\n triple.triple_count,\n COALESCE(member.membership_count, 0) AS membership_count,\n triple.min_remainder,\n triple.max_remainder\n FROM (\n SELECT\n ${projection.columns[0]},\n ${projection.columns[1]},\n COUNT(DISTINCT ${projection.remainder}) AS triple_count,\n MIN(${projection.remainder}) AS min_remainder,\n MAX(${projection.remainder}) AS max_remainder\n FROM ${RDF_FACTS_TABLE}\n GROUP BY ${projection.columns[0]}, ${projection.columns[1]}\n ) triple\n LEFT JOIN (\n SELECT\n ${projection.columns[0]},\n ${projection.columns[1]},\n COUNT(*) AS membership_count\n FROM ${RDF_FACTS_TABLE}\n GROUP BY ${projection.columns[0]}, ${projection.columns[1]}\n ) member\n ON member.${projection.columns[0]} = triple.${projection.columns[0]}\n AND member.${projection.columns[1]} = triple.${projection.columns[1]}\n `);\n }\n for (const projection of TERM_PROJECTIONS) {\n await tx.exec(`\n INSERT INTO ${projection.table} (\n ${projection.column},\n triple_count,\n membership_count\n )\n SELECT\n triple.${projection.column},\n triple.triple_count,\n COALESCE(member.membership_count, 0) AS membership_count\n FROM (\n SELECT\n ${projection.column},\n COUNT(*) AS triple_count\n FROM (\n SELECT DISTINCT subject_id, predicate_id, object_id\n FROM ${RDF_FACTS_TABLE}\n ) distinct_triples\n GROUP BY ${projection.column}\n ) triple\n LEFT JOIN (\n SELECT\n ${projection.column},\n COUNT(*) AS membership_count\n FROM ${RDF_FACTS_TABLE}\n GROUP BY ${projection.column}\n ) member\n ON member.${projection.column} = triple.${projection.column}\n `);\n }\n await tx.exec(`\n INSERT INTO ${RDF3X_GRAPH_PROJECTION_TABLE} (\n graph_id,\n membership_count\n )\n SELECT graph_id, COUNT(*) AS membership_count\n FROM ${RDF_FACTS_TABLE}\n GROUP BY graph_id\n `);\n await tx.exec(`\n INSERT INTO rdf3x_metadata (key, value)\n VALUES ('facts_data_version', $1)\n ON CONFLICT (key) DO UPDATE SET value = EXCLUDED.value\n `, [String(factsDataVersion)]);\n });\n const stats = await this.rdf3xStats();\n return {\n scannedQuads,\n uniqueTriples: stats.uniqueTriples,\n memberships: stats.membershipCount,\n projectionRows: pairProjectionRowTotal(stats.pairProjectionRows) + termProjectionRowTotal(stats.termProjectionRows),\n factsDataVersion,\n durationMs: Date.now() - start,\n };\n }\n\n private async scanNative(pattern: QuintPattern, options?: QueryOptions): Promise<RdfQuadIndexScanResult> {\n const start = Date.now();\n const resolved = await this.resolvePattern(pattern);\n if (resolved.unresolved) {\n return {\n quads: [],\n metrics: this.indexMetrics('none', 0, 0, start, [`unresolved ${resolved.unresolved}`]),\n };\n }\n const compiled = this.compileScanSql(resolved, options);\n const matchedRows = await this.scalarCount(compiled.countSql, compiled.countParams);\n const rows = await this.requireExecutor().query<PgQuadIdRow>(compiled.sql, compiled.params);\n return {\n quads: await this.rowsToQuads(rows),\n metrics: this.indexMetrics(compiled.indexChoice, matchedRows, rows.length, start, [\n ...compiled.queryPlan,\n compiled.sql,\n ]),\n };\n }\n\n private async scanPostFilter(pattern: QuintPattern, options?: QueryOptions): Promise<RdfQuadIndexScanResult> {\n const start = Date.now();\n const rows = await this.requireExecutor().query<PgQuadIdRow>(`\n SELECT graph_id, subject_id, predicate_id, object_id\n FROM ${RDF_FACTS_TABLE}\n ORDER BY graph_id, subject_id, predicate_id, object_id\n `);\n const quads = await this.rowsToQuads(rows);\n const matched = quads.filter((value) => matchesQuadPattern(value, pattern));\n const ordered = orderQuads(matched, options);\n const startOffset = Math.max(0, options?.offset ?? 0);\n const endOffset = options?.limit === undefined\n ? undefined\n : startOffset + Math.max(0, options.limit);\n const page = ordered.slice(startOffset, endOffset);\n return {\n quads: page,\n metrics: this.indexMetrics('facts-post-filter', matched.length, page.length, start, [\n 'PostgresFactsScan',\n 'PostgresFactsPostFilter',\n ...(options?.order?.length ? [`PostgresFactsScanOrder(${describeScanOrder(options)})`] : []),\n ...(options?.limit !== undefined || options?.offset !== undefined ? ['PostgresFactsScanLimit'] : []),\n ]),\n };\n }\n\n private async queryNative(query: RdfQuery): Promise<RdfQueryResult | undefined> {\n if (!this.canTryNativeQuery(query)) {\n return undefined;\n }\n const start = Date.now();\n const aggregates = queryAggregates(query);\n const requiredPatterns = query.patterns.length > 0 ? query.patterns : [{}];\n const compiledPatterns = await this.compileNativeJoinPatterns(requiredPatterns, query.filters ?? []);\n if (!compiledPatterns) {\n return undefined;\n }\n if (!this.allFiltersPushed(query.filters ?? [], compiledPatterns)) {\n return undefined;\n }\n\n if (aggregates.length > 0) {\n if (!query.patterns.length) {\n return undefined;\n }\n const aggregateResult = await this.queryNativeAggregate(query, compiledPatterns, aggregates, start);\n return aggregateResult;\n }\n\n const visibleVariables = uniqueStrings(requiredPatterns.flatMap((pattern) => variablesInPattern(pattern)));\n const project = query.select && query.select.length > 0 ? query.select : visibleVariables;\n if (project.some((variableName) => !visibleVariables.includes(variableName))) {\n return undefined;\n }\n if ((query.orderBy ?? []).some((entry) => !visibleVariables.includes(entry.variable))) {\n return undefined;\n }\n\n const compiled = await this.compileJoinSql(compiledPatterns, {\n project,\n distinct: query.distinct,\n orderBy: query.orderBy,\n limit: query.limit,\n offset: query.offset,\n countMatchedRows: query.limit !== undefined || query.offset !== undefined,\n });\n if (compiled.unresolved) {\n return {\n bindings: [],\n metrics: this.localMetrics(start, 0, 0, 0, [compiled.indexChoice], [\n ...compiled.queryPlan,\n `unresolved ${compiled.unresolved}`,\n ], query.filters?.length ?? 0),\n };\n }\n const rows = await this.requireExecutor().query<Record<string, number>>(compiled.sql, compiled.params);\n const matchedRows = compiled.countSql\n ? await this.scalarCount(compiled.countSql, compiled.countParams)\n : rows.length;\n const bindings = await this.joinRowsToBindings(rows, compiled.variableAliases);\n const plan = [\n ...storagePlanMarkers(compiled.queryPlan),\n `PostgresRdf3xJoin(${compiledPatterns.map((entry) => describePatternSource(entry)).join('|')})`,\n ...(query.distinct ? [`PostgresRdf3xJoinDistinct(${project.map((variableName) => `?${variableName}`).join(',')})`] : []),\n ...(query.limit !== undefined || query.offset !== undefined ? ['PostgresRdf3xJoinLimit'] : []),\n ];\n return {\n bindings,\n metrics: this.localMetrics(start, matchedRows, matchedRows, bindings.length, [compiled.indexChoice], plan, query.filters?.length ?? 0),\n };\n }\n\n private async queryFacts(query: RdfQuery): Promise<RdfQueryResult> {\n const start = Date.now();\n const metrics = this.localMetrics(start, 0, 0, 0, ['facts-post-filter'], ['PostgresFactsQuery']);\n if ((query.textSearch?.length ?? 0) > 0) {\n throw new Error('RdfQuery textSearch requires a configured RdfTextIndex');\n }\n if ((query.vectorSearch?.length ?? 0) > 0) {\n throw new Error('RdfQuery vectorSearch requires a configured RdfVectorIndex');\n }\n const hasNonPatternSource = (query.values?.length ?? 0) > 0\n || (query.textSearch?.length ?? 0) > 0\n || (query.vectorSearch?.length ?? 0) > 0;\n const requiredPatterns = query.patterns.length > 0\n ? query.patterns\n : query.unions?.length || hasNonPatternSource\n ? []\n : [{}];\n const aggregates = queryAggregates(query);\n let bindings: RdfBindingRow[] = [{}];\n\n for (const values of query.values ?? []) {\n bindings = joinValuesSource(bindings, values);\n metrics.scannedRows += values.rows.length;\n metrics.plan.push(`PostgresFactsValues(${values.variables.map((variableName) => `?${variableName}`).join(',')})`);\n if (bindings.length === 0) {\n break;\n }\n }\n\n if (bindings.length > 0) {\n for (const pattern of requiredPatterns) {\n bindings = await this.joinFactsPattern(bindings, pattern, query.filters ?? [], metrics, false);\n metrics.plan.push(`PostgresFactsScan(${describeQueryPattern(pattern)})`);\n if (bindings.length === 0) {\n break;\n }\n }\n }\n\n if ((query.binds?.length ?? 0) > 0 && bindings.length > 0) {\n bindings = this.applyFactsBinds(bindings, query.binds ?? []);\n metrics.plan.push(`PostgresFactsBind(${(query.binds ?? []).map(describeBind).join(',')})`);\n }\n\n for (const rawOptionalGroup of query.optional ?? []) {\n bindings = await this.joinFactsOptionalGroup(bindings, normalizeOptionalGroup(rawOptionalGroup), metrics);\n metrics.plan.push(`PostgresFactsOptionalJoin(${normalizeOptionalGroup(rawOptionalGroup).patterns.map(describeQueryPattern).join(',')})`);\n }\n\n for (const unionGroup of query.unions ?? []) {\n bindings = await this.joinFactsUnionGroup(bindings, unionGroup.branches, query.filters ?? [], metrics);\n metrics.plan.push(`PostgresFactsUnion(${unionGroup.branches.map((branch) => branch.patterns.map(describeQueryPattern).join(',')).join('|')})`);\n if (bindings.length === 0) {\n break;\n }\n }\n\n for (const minusGroup of query.minus ?? []) {\n bindings = await this.applyFactsMinusGroup(bindings, minusGroup, metrics);\n metrics.plan.push(`PostgresFactsMinus(${minusGroup.patterns.map(describeQueryPattern).join(',')})`);\n if (bindings.length === 0) {\n break;\n }\n }\n\n for (const existsGroup of query.exists ?? []) {\n bindings = await this.applyFactsExistsGroup(bindings, existsGroup, metrics);\n metrics.plan.push(`PostgresFactsExists(${existsGroup.patterns.map(describeQueryPattern).join(',')})`);\n if (bindings.length === 0) {\n break;\n }\n }\n\n if ((query.filters?.length ?? 0) > 0) {\n bindings = bindings.filter((binding) => matchesBindingFilters(binding, query.filters ?? []));\n metrics.filtersApplied += query.filters?.length ?? 0;\n metrics.plan.push(`PostgresFactsFilter(${(query.filters ?? []).map(describeFilter).join(',')})`);\n }\n\n if ((query.postOptionalBinds?.length ?? 0) > 0) {\n bindings = this.applyFactsBinds(bindings, query.postOptionalBinds ?? []);\n metrics.plan.push(`PostgresFactsPostOptionalBind(${(query.postOptionalBinds ?? []).map(describeBind).join(',')})`);\n }\n\n if (aggregates.length > 0 && (query.groupBy?.length ?? 0) > 0) {\n const joinedRows = bindings.length;\n bindings = groupAggregateBindings(bindings, query.groupBy ?? [], aggregates);\n metrics.joinedRows = joinedRows;\n metrics.plan.push(aggregatePlan(aggregates, true));\n if ((query.having?.length ?? 0) > 0) {\n bindings = bindings.filter((binding) => matchesBindingFilters(binding, query.having ?? []));\n metrics.filtersApplied += query.having?.length ?? 0;\n metrics.plan.push(`PostgresFactsHaving(${(query.having ?? []).map(describeFilter).join(',')})`);\n }\n } else if (aggregates.length > 0) {\n const { binding, firstCount } = aggregateBindings(bindings, aggregates);\n const having = query.having ?? [];\n metrics.joinedRows = bindings.length;\n metrics.plan.push(aggregatePlan(aggregates, false));\n if (having.length > 0 && !matchesBindingFilters(binding, having)) {\n metrics.filtersApplied += having.length;\n metrics.plan.push(`PostgresFactsHaving(${having.map(describeFilter).join(',')})`);\n metrics.returnedRows = 0;\n metrics.durationMs = Date.now() - start;\n return {\n bindings: [],\n count: firstCount,\n metrics,\n };\n }\n if (having.length > 0) {\n metrics.filtersApplied += having.length;\n metrics.plan.push(`PostgresFactsHaving(${having.map(describeFilter).join(',')})`);\n }\n metrics.returnedRows = 1;\n metrics.durationMs = Date.now() - start;\n return {\n bindings: [binding],\n count: firstCount,\n metrics,\n };\n }\n\n const joinedRows = metrics.joinedRows > 0 ? metrics.joinedRows : bindings.length;\n\n if ((query.orderBy?.length ?? 0) > 0) {\n bindings = [...bindings].sort((left, right) => compareBindings(left, right, query.orderBy ?? []));\n metrics.plan.push(`PostgresFactsSort(${describeQueryOrder(query.orderBy ?? [])})`);\n }\n\n let projected = query.select && query.select.length > 0\n ? bindings.map((binding) => projectBinding(binding, query.select ?? []))\n : bindings;\n\n if (query.distinct) {\n projected = distinctBindings(projected);\n metrics.plan.push('PostgresFactsDistinct');\n }\n\n if (query.offset !== undefined || query.limit !== undefined) {\n const startOffset = Math.max(0, query.offset ?? 0);\n const endOffset = query.limit === undefined\n ? undefined\n : startOffset + Math.max(0, query.limit);\n projected = projected.slice(startOffset, endOffset);\n metrics.plan.push('PostgresFactsLimit');\n }\n\n metrics.joinedRows = joinedRows;\n metrics.returnedRows = projected.length;\n metrics.durationMs = Date.now() - start;\n return {\n bindings: projected,\n metrics,\n };\n }\n\n private async joinFactsPattern(\n input: RdfBindingRow[],\n pattern: RdfQueryPattern,\n filters: RdfQueryFilter[],\n metrics: RdfQueryMetrics,\n optional: boolean,\n ): Promise<RdfBindingRow[]> {\n const output: RdfBindingRow[] = [];\n for (const binding of input) {\n const compiled = compilePatternForBinding(pattern, binding);\n if (!compiled) {\n if (optional) {\n output.push(binding);\n }\n continue;\n }\n const scan = isPgSqlScanCompatiblePattern(compiled)\n ? await this.scanNative(compiled)\n : await this.scanPostFilter(compiled);\n metrics.scannedRows += scan.metrics.matchedRows;\n metrics.indexChoices.push(scan.metrics.indexChoice);\n metrics.plan.push(...storagePlanMarkers(scan.metrics.queryPlan));\n const before = output.length;\n for (const value of scan.quads) {\n const next = bindQuadPattern(pattern, binding, value);\n if (next && matchesNewlyBoundFilters(next, binding, filters)) {\n output.push(next);\n }\n }\n if (optional && output.length === before) {\n output.push(binding);\n }\n }\n return output;\n }\n\n private async joinFactsOptionalGroup(\n input: RdfBindingRow[],\n optionalGroup: RdfOptionalQueryGroup,\n metrics: RdfQueryMetrics,\n ): Promise<RdfBindingRow[]> {\n const filters = optionalGroup.filters ?? [];\n const output: RdfBindingRow[] = [];\n for (const binding of input) {\n let matches: RdfBindingRow[] = [binding];\n matches = this.applyFactsValues(matches, optionalGroup.values, metrics, 'Optional');\n if (matches.length > 0) {\n for (const pattern of optionalGroup.patterns) {\n matches = await this.joinFactsPattern(matches, pattern, filters, metrics, false);\n if (matches.length === 0) {\n break;\n }\n }\n }\n if (matches.length > 0) {\n for (const unionGroup of optionalGroup.unions ?? []) {\n matches = await this.joinFactsUnionGroup(matches, unionGroup.branches, filters, metrics);\n metrics.plan.push(`PostgresFactsOptionalUnion(${unionGroup.branches.map((branch) => branch.patterns.map(describeQueryPattern).join(',')).join('|')})`);\n if (matches.length === 0) {\n break;\n }\n }\n }\n if (matches.length > 0) {\n for (const rawNestedOptional of optionalGroup.optional ?? []) {\n matches = await this.joinFactsOptionalGroup(matches, normalizeOptionalGroup(rawNestedOptional), metrics);\n if (matches.length === 0) {\n break;\n }\n }\n }\n if (matches.length > 0) {\n for (const minusGroup of optionalGroup.minus ?? []) {\n matches = await this.applyFactsMinusGroup(matches, minusGroup, metrics);\n if (matches.length === 0) {\n break;\n }\n }\n }\n if (matches.length > 0) {\n for (const existsGroup of optionalGroup.exists ?? []) {\n matches = await this.applyFactsExistsGroup(matches, existsGroup, metrics);\n if (matches.length === 0) {\n break;\n }\n }\n }\n if ((optionalGroup.binds?.length ?? 0) > 0 && matches.length > 0) {\n matches = this.applyFactsBinds(matches, optionalGroup.binds ?? []);\n metrics.plan.push(`PostgresFactsOptionalBind(${(optionalGroup.binds ?? []).map(describeBind).join(',')})`);\n }\n if (filters.length > 0 && matches.length > 0) {\n matches = matches.filter((match) => matchesBindingFilters(match, filters));\n metrics.filtersApplied += filters.length;\n metrics.plan.push(`PostgresFactsOptionalFilter(${filters.map(describeFilter).join(',')})`);\n }\n output.push(...(matches.length > 0 ? matches : [binding]));\n }\n return output;\n }\n\n private async joinFactsUnionGroup(\n input: RdfBindingRow[],\n branches: RdfUnionQueryBranch[],\n outerFilters: RdfQueryFilter[],\n metrics: RdfQueryMetrics,\n ): Promise<RdfBindingRow[]> {\n const output: RdfBindingRow[] = [];\n for (const binding of input) {\n for (const branch of branches) {\n const branchFilters = [...outerFilters, ...(branch.filters ?? [])];\n let matches: RdfBindingRow[] = [binding];\n matches = this.applyFactsValues(matches, branch.values, metrics, 'Union');\n if (matches.length === 0) {\n continue;\n }\n for (const pattern of branch.patterns) {\n matches = await this.joinFactsPattern(matches, pattern, branchFilters, metrics, false);\n if (matches.length === 0) {\n break;\n }\n }\n if (matches.length === 0) {\n continue;\n }\n for (const unionGroup of branch.unions ?? []) {\n matches = await this.joinFactsUnionGroup(matches, unionGroup.branches, branchFilters, metrics);\n if (matches.length === 0) {\n break;\n }\n }\n if (matches.length === 0) {\n continue;\n }\n if ((branch.binds?.length ?? 0) > 0) {\n matches = this.applyFactsBinds(matches, branch.binds ?? []);\n }\n for (const rawOptionalGroup of branch.optional ?? []) {\n matches = await this.joinFactsOptionalGroup(matches, normalizeOptionalGroup(rawOptionalGroup), metrics);\n if (matches.length === 0) {\n break;\n }\n }\n if ((branch.filters?.length ?? 0) > 0) {\n matches = matches.filter((match) => matchesBindingFilters(match, branch.filters ?? []));\n metrics.filtersApplied += branch.filters?.length ?? 0;\n metrics.plan.push(`PostgresFactsUnionFilter(${(branch.filters ?? []).map(describeFilter).join(',')})`);\n }\n output.push(...matches);\n }\n }\n return output;\n }\n\n private async applyFactsMinusGroup(\n input: RdfBindingRow[],\n minusGroup: RdfMinusQueryGroup,\n metrics: RdfQueryMetrics,\n ): Promise<RdfBindingRow[]> {\n const output: RdfBindingRow[] = [];\n for (const binding of input) {\n let matches = await this.evaluateFactsDependentGroup([binding], minusGroup, metrics, 'Minus');\n if ((minusGroup.filters?.length ?? 0) > 0) {\n matches = matches.filter((match) => matchesBindingFilters(match, minusGroup.filters ?? []));\n metrics.filtersApplied += minusGroup.filters?.length ?? 0;\n }\n if (matches.length === 0) {\n output.push(binding);\n }\n }\n return output;\n }\n\n private async applyFactsExistsGroup(\n input: RdfBindingRow[],\n existsGroup: RdfExistsQueryGroup,\n metrics: RdfQueryMetrics,\n ): Promise<RdfBindingRow[]> {\n const output: RdfBindingRow[] = [];\n for (const binding of input) {\n let matches = await this.evaluateFactsDependentGroup([binding], existsGroup, metrics, 'Exists');\n if ((existsGroup.filters?.length ?? 0) > 0) {\n matches = matches.filter((match) => matchesBindingFilters(match, existsGroup.filters ?? []));\n metrics.filtersApplied += existsGroup.filters?.length ?? 0;\n }\n if (matches.length > 0) {\n output.push(binding);\n }\n }\n return output;\n }\n\n private async evaluateFactsDependentGroup(\n input: RdfBindingRow[],\n group: RdfMinusQueryGroup | RdfExistsQueryGroup,\n metrics: RdfQueryMetrics,\n label: 'Minus' | 'Exists',\n ): Promise<RdfBindingRow[]> {\n let matches = this.applyFactsValues(input, group.values, metrics, label);\n for (const pattern of group.patterns) {\n matches = await this.joinFactsPattern(matches, pattern, group.filters ?? [], metrics, false);\n if (matches.length === 0) {\n return [];\n }\n }\n for (const unionGroup of group.unions ?? []) {\n matches = await this.joinFactsUnionGroup(matches, unionGroup.branches, group.filters ?? [], metrics);\n if (matches.length === 0) {\n return [];\n }\n }\n for (const rawOptionalGroup of group.optional ?? []) {\n matches = await this.joinFactsOptionalGroup(matches, normalizeOptionalGroup(rawOptionalGroup), metrics);\n }\n if ((group.binds?.length ?? 0) > 0) {\n matches = this.applyFactsBinds(matches, group.binds ?? []);\n }\n return matches;\n }\n\n private applyFactsValues(\n input: RdfBindingRow[],\n sources: RdfValuesBindingSource[] | undefined,\n metrics: RdfQueryMetrics,\n label: 'Optional' | 'Union' | 'Minus' | 'Exists',\n ): RdfBindingRow[] {\n let output = input;\n for (const source of sources ?? []) {\n output = joinValuesSource(output, source);\n metrics.scannedRows += source.rows.length;\n metrics.plan.push(`PostgresFacts${label}Values(${source.variables.map((variableName) => `?${variableName}`).join(',')})`);\n if (output.length === 0) {\n break;\n }\n }\n return output;\n }\n\n private applyFactsBinds(input: RdfBindingRow[], binds: RdfQueryBind[]): RdfBindingRow[] {\n let output = input;\n for (const bind of binds) {\n output = output.flatMap((binding) => {\n if (binding[bind.variable]) {\n return [];\n }\n const value = evaluateBindExpression(bind.expression, binding);\n return value ? [{ ...binding, [bind.variable]: value }] : [binding];\n });\n }\n return output;\n }\n\n private async queryNativeAggregate(\n query: RdfQuery,\n patterns: PgCompiledJoinPattern[],\n aggregates: ReturnType<typeof queryAggregates>,\n start: number,\n ): Promise<RdfQueryResult | undefined> {\n if (!this.canNativeAggregate(query, aggregates)) {\n return undefined;\n }\n const visibleVariables = uniqueStrings(query.patterns.flatMap((pattern) => variablesInPattern(pattern)));\n const compiled = await this.compileJoinSql(patterns, {\n project: visibleVariables,\n countMatchedRows: false,\n });\n if (compiled.unresolved) {\n return {\n bindings: [],\n count: 0,\n metrics: this.localMetrics(start, 0, 0, 0, [compiled.indexChoice], [\n ...compiled.queryPlan,\n `unresolved ${compiled.unresolved}`,\n ], query.filters?.length ?? 0),\n };\n }\n\n const aggregateAliases = new Map<string, string>();\n const aggregateTypes = new Map<string, 'integer' | 'decimal'>();\n const aggregateColumns = aggregates.map((aggregate, index) => this.compileAggregateColumn(\n aggregate,\n index,\n compiled.variableAliases,\n aggregateAliases,\n aggregateTypes,\n ));\n const groupColumns = (query.groupBy ?? []).map((variableName) => {\n const alias = compiled.variableAliases.get(variableName);\n if (!alias) {\n throw new Error(`Postgres RDF-3X group aggregate cannot read unbound variable: ${variableName}`);\n }\n return { variableName, alias, column: `source.${alias}` };\n });\n const projection = [\n ...groupColumns.map((group) => `${group.column} AS ${group.alias}`),\n ...aggregateColumns.map((aggregate) => aggregate.sql),\n ].filter(Boolean).join(', ');\n let sql = `SELECT ${projection} FROM (${compiled.sql}) source`;\n if (groupColumns.length > 0) {\n sql += ` GROUP BY ${groupColumns.map((group) => group.column).join(', ')}`;\n }\n const builder = new PgSqlBuilder(compiled.params);\n const havingClause = this.buildAggregateHavingClause(query.having ?? [], aggregateColumns, builder);\n sql += havingClause.sql;\n sql += this.buildAggregateOrderClause(query.orderBy ?? [], compiled.variableAliases, aggregateColumns);\n const pagination = this.buildPagination(query, builder);\n sql += pagination.sql;\n const params = builder.snapshot();\n const rows = await this.requireExecutor().query<Record<string, number>>(sql, params);\n const matchedRows = groupColumns.length > 0\n ? await this.scalarCount(\n `SELECT COUNT(*) AS count FROM (\n SELECT ${groupColumns.map((group) => group.column).join(', ')}\n FROM (${compiled.sql}) source\n GROUP BY ${groupColumns.map((group) => group.column).join(', ')}\n ${havingClause.sql}\n ) grouped_count`,\n builder.snapshot().slice(0, builder.snapshot().length - pagination.paramCount),\n )\n : rows.length;\n const bindings = await this.joinRowsToBindings(rows, new Map(groupColumns.map((group) => [group.variableName, group.alias])), aggregateAliases, aggregateTypes);\n const firstCount = !groupColumns.length && aggregates[0] ? Number(bindings[0]?.[aggregates[0].as]?.value ?? 0) : undefined;\n const plan = [\n ...storagePlanMarkers(compiled.queryPlan),\n groupColumns.length > 0 ? 'PostgresRdf3xGroupCount' : 'PostgresRdf3xJoinCount',\n aggregatePlan(aggregates, groupColumns.length > 0),\n ...(havingClause.sql ? [`PostgresRdf3xAggregateHaving(${(query.having ?? []).map(describeFilter).join(',')})`] : []),\n ...((query.orderBy ?? []).length > 0 ? [`PostgresRdf3xAggregateOrder(${describeQueryOrder(query.orderBy ?? [])})`] : []),\n ...(pagination.sql ? ['PostgresRdf3xAggregateLimit'] : []),\n ];\n return {\n bindings,\n ...(firstCount !== undefined ? { count: firstCount } : {}),\n metrics: this.localMetrics(start, matchedRows, matchedRows, bindings.length, [compiled.indexChoice], plan, query.filters?.length ?? 0),\n };\n }\n\n private canNativeAggregate(\n query: RdfQuery,\n aggregates: ReturnType<typeof queryAggregates>,\n ): boolean {\n if (aggregates.length === 0 || aggregates.some((aggregate) => aggregate.type !== 'count')) {\n return false;\n }\n const visibleVariables = uniqueStrings(query.patterns.flatMap((pattern) => variablesInPattern(pattern)));\n const aggregateVariables = new Set(aggregates.map((aggregate) => aggregate.as));\n if ((query.groupBy ?? []).some((variableName) => !visibleVariables.includes(variableName))) {\n return false;\n }\n if (aggregates.some((aggregate) => (\n aggregate.variable !== undefined && !visibleVariables.includes(aggregate.variable)\n ))) {\n return false;\n }\n if (aggregates.some((aggregate) => (\n aggregate.distinctVariables !== undefined\n && aggregate.distinctVariables.some((variableName) => !visibleVariables.includes(variableName))\n ))) {\n return false;\n }\n if ((query.having ?? []).some((filter) => !this.canNativeAggregateHaving(filter, aggregateVariables))) {\n return false;\n }\n if ((query.orderBy ?? []).some((entry) => (\n !visibleVariables.includes(entry.variable) && !aggregateVariables.has(entry.variable)\n ))) {\n return false;\n }\n if ((query.groupBy ?? []).length === 0) {\n return !query.distinct\n && (query.having ?? []).length === 0\n && (query.orderBy ?? []).length === 0\n && query.limit === undefined\n && query.offset === undefined\n && (query.select ?? []).every((variableName) => aggregateVariables.has(variableName));\n }\n return !query.distinct && (query.orderBy ?? []).every((entry) => (\n (query.groupBy ?? []).includes(entry.variable) || aggregateVariables.has(entry.variable)\n )) && (query.select ?? []).every((variableName) => (\n (query.groupBy ?? []).includes(variableName) || aggregateVariables.has(variableName)\n ));\n }\n\n private canNativeAggregateHaving(filter: RdfQueryFilter, aggregateVariables: Set<string>): boolean {\n return aggregateVariables.has(filter.variable)\n && !filter.operand\n && !filter.variable2\n && filter.value !== undefined\n && isNativeAggregateHavingOperator(filter.operator)\n && typeof filter.value !== 'boolean'\n && this.aggregateFilterValue(filter.value) !== undefined;\n }\n\n private compileAggregateColumn(\n aggregate: NonNullable<RdfQuery['aggregates']>[number],\n index: number,\n variableAliases: Map<string, string>,\n aggregateAliases: Map<string, string>,\n aggregateTypes: Map<string, 'integer' | 'decimal'>,\n ): PgAggregateSqlExpression {\n const alias = `a${index}`;\n aggregateAliases.set(aggregate.as, alias);\n aggregateTypes.set(aggregate.as, 'integer');\n if (!aggregate.variable) {\n const expression = aggregate.distinct\n ? `COUNT(DISTINCT ${joinSolutionMappingKeyExpression(variableAliases, aggregate.distinctVariables)})`\n : 'COUNT(*)';\n return {\n variableName: aggregate.as,\n alias,\n type: 'integer',\n expression,\n sql: `${expression} AS ${alias}`,\n };\n }\n const variableAlias = variableAliases.get(aggregate.variable);\n if (!variableAlias) {\n throw new Error(`Postgres RDF-3X aggregate cannot read unbound variable: ${aggregate.variable}`);\n }\n const expression = `COUNT(${aggregate.distinct ? 'DISTINCT ' : ''}source.${variableAlias})`;\n return {\n variableName: aggregate.as,\n alias,\n type: 'integer',\n expression,\n sql: `${expression} AS ${alias}`,\n };\n }\n\n private buildAggregateHavingClause(\n filters: RdfQueryFilter[],\n aggregates: PgAggregateSqlExpression[],\n builder: PgSqlBuilder,\n ): { sql: string } {\n if (filters.length === 0) {\n return { sql: '' };\n }\n return {\n sql: ` HAVING ${filters.map((filter) => {\n const aggregate = aggregates.find((entry) => entry.variableName === filter.variable);\n if (!aggregate) {\n throw new Error(`Postgres RDF-3X aggregate cannot HAVING on unknown aggregate: ${filter.variable}`);\n }\n return `${aggregate.expression} ${aggregateSqlOperator(filter.operator)} ${builder.add(this.aggregateFilterValue(filter.value))}`;\n }).join(' AND ')}`,\n };\n }\n\n private buildAggregateOrderClause(\n orderBy: NonNullable<RdfQuery['orderBy']>,\n variableAliases: Map<string, string>,\n aggregates: PgAggregateSqlExpression[],\n ): string {\n if (orderBy.length === 0) {\n return '';\n }\n const order = orderBy.map((entry) => {\n const aggregate = aggregates.find((candidate) => candidate.variableName === entry.variable);\n if (aggregate) {\n return `${aggregate.alias} ${entry.direction === 'desc' ? 'DESC' : 'ASC'}`;\n }\n const alias = variableAliases.get(entry.variable);\n if (!alias) {\n throw new Error(`Postgres RDF-3X aggregate cannot order by unbound variable: ${entry.variable}`);\n }\n return `source.${alias} ${entry.direction === 'desc' ? 'DESC' : 'ASC'}`;\n });\n return ` ORDER BY ${order.join(', ')}`;\n }\n\n private aggregateFilterValue(value: RdfQueryFilter['value']): number | undefined {\n if (typeof value === 'number') return Number.isFinite(value) ? value : undefined;\n if (typeof value === 'string') {\n const numeric = Number(value);\n return Number.isFinite(numeric) ? numeric : undefined;\n }\n if (value && typeof value === 'object' && 'termType' in value) {\n const numeric = rdfNumericValue(value.value);\n return Number.isFinite(numeric) ? numeric : undefined;\n }\n return undefined;\n }\n\n private canTryNativeQuery(query: RdfQuery): boolean {\n return (query.values?.length ?? 0) === 0\n && (query.textSearch?.length ?? 0) === 0\n && (query.vectorSearch?.length ?? 0) === 0\n && (query.unions?.length ?? 0) === 0\n && (query.minus?.length ?? 0) === 0\n && (query.exists?.length ?? 0) === 0\n && (query.optional?.length ?? 0) === 0\n && (query.binds?.length ?? 0) === 0;\n }\n\n private async compileNativeJoinPatterns(\n patterns: RdfQueryPattern[],\n filters: RdfQueryFilter[],\n ): Promise<Array<PgCompiledJoinPattern & { pushedDownFilterIndexes: number[] }> | undefined> {\n const result: Array<PgCompiledJoinPattern & { pushedDownFilterIndexes: number[] }> = [];\n for (const pattern of patterns) {\n const compiled: QuintPattern = {};\n const variables: Partial<Record<PgPatternKey, string>> = {};\n const slotsByVariable = new Map<string, PgPatternKey[]>();\n const pushed = new Set<number>();\n for (const key of PATTERN_KEYS) {\n const value = pattern[key];\n if (!value) continue;\n if (isVariable(value)) {\n variables[key] = value.variable;\n slotsByVariable.set(value.variable, [...(slotsByVariable.get(value.variable) ?? []), key]);\n const pushdown = this.compilePushdownFilterWithIndexes(value.variable, filters);\n if (pushdown) {\n compiled[key] = pushdown.pattern;\n pushdown.filterIndexes.forEach((index) => pushed.add(index));\n }\n } else {\n compiled[key] = value;\n }\n }\n result.push({\n pattern: compiled,\n variables,\n equalities: patternEqualities(slotsByVariable),\n pushedDownFilterIndexes: [...pushed],\n });\n }\n return result;\n }\n\n private allFiltersPushed(\n filters: RdfQueryFilter[],\n patterns: Array<PgCompiledJoinPattern & { pushedDownFilterIndexes: number[] }>,\n ): boolean {\n const pushed = new Set(patterns.flatMap((pattern) => pattern.pushedDownFilterIndexes));\n return filters.every((_filter, index) => pushed.has(index));\n }\n\n private compilePushdownFilterWithIndexes(\n variableName: string,\n filters: RdfQueryFilter[],\n ): { pattern: QuintPattern[keyof QuintPattern]; filterIndexes: number[] } | null {\n const operators: Record<string, unknown> = {};\n const filterIndexes: number[] = [];\n for (const [index, filter] of filters.entries()) {\n if (filter.variable !== variableName || filter.variable2 || !this.isPushdownFilter(filter)) {\n continue;\n }\n switch (filter.operator) {\n case '$eq':\n case '$ne':\n if (filter.value === undefined || !isTerm(filter.value as any)) return null;\n operators[filter.operator] = filter.value;\n filterIndexes.push(index);\n break;\n case '$gt':\n case '$gte':\n case '$lt':\n case '$lte':\n if (filter.value === undefined) return null;\n operators[filter.operator] = filter.value;\n filterIndexes.push(index);\n break;\n case '$in':\n case '$notIn':\n if (!filter.values?.length || filter.values.some((value) => !isTerm(value as any))) return null;\n operators[filter.operator] = filter.values;\n filterIndexes.push(index);\n break;\n case '$sameTerm':\n if (filter.value === undefined || !isTerm(filter.value as any)) return null;\n operators.$eq = filter.value;\n filterIndexes.push(index);\n break;\n case '$termType':\n if (typeof filter.value !== 'string' || !['iri', 'blank', 'literal', 'numeric'].includes(filter.value)) return null;\n operators.$termType = filter.value;\n filterIndexes.push(index);\n break;\n case '$lang':\n if (typeof filter.value !== 'string') return null;\n operators.$language = filter.value;\n filterIndexes.push(index);\n break;\n case '$notLang':\n if (typeof filter.value !== 'string') return null;\n operators.$notLanguage = filter.value;\n filterIndexes.push(index);\n break;\n case '$langMatches':\n if (typeof filter.value !== 'string') return null;\n operators.$langMatches = filter.value;\n filterIndexes.push(index);\n break;\n case '$datatype':\n case '$notDatatype':\n if (filter.value === undefined || !isTerm(filter.value as any) || (filter.value as Term).termType !== 'NamedNode') return null;\n operators[filter.operator] = filter.value;\n filterIndexes.push(index);\n break;\n case '$startsWith':\n if (typeof filter.value !== 'string') return null;\n operators.$startsWith = filter.value;\n filterIndexes.push(index);\n break;\n case '$contains':\n case '$endsWith':\n if (typeof filter.value !== 'string') return null;\n operators[filter.operator] = filter.value;\n filterIndexes.push(index);\n break;\n default:\n return null;\n }\n }\n return Object.keys(operators).length > 0 ? { pattern: operators as TermMatch, filterIndexes } : null;\n }\n\n private isPushdownFilter(filter: RdfQueryFilter): boolean {\n if (filter.operand === 'stringLength' || filter.operand === 'lowerStringValue' || filter.operand === 'upperStringValue') {\n return false;\n }\n if (filter.operand === 'stringValue') {\n return filter.operator === '$startsWith'\n || filter.operator === '$contains'\n || filter.operator === '$endsWith';\n }\n return filter.operator === '$eq'\n || filter.operator === '$ne'\n || filter.operator === '$gt'\n || filter.operator === '$gte'\n || filter.operator === '$lt'\n || filter.operator === '$lte'\n || filter.operator === '$in'\n || filter.operator === '$notIn'\n || filter.operator === '$startsWith'\n || filter.operator === '$contains'\n || filter.operator === '$endsWith'\n || filter.operator === '$sameTerm'\n || filter.operator === '$termType'\n || filter.operator === '$lang'\n || filter.operator === '$notLang'\n || filter.operator === '$langMatches'\n || filter.operator === '$datatype'\n || filter.operator === '$notDatatype';\n }\n\n private async resolvePattern(pattern: QuintPattern): Promise<PgResolvedPattern> {\n const ids: Partial<Record<PgPatternKey, number>> = {};\n const idSets: Partial<Record<PgPatternKey, number[]>> = {};\n const excludedIdSets: Partial<Record<PgPatternKey, number[]>> = {};\n const termFilters: Partial<Record<PgPatternKey, PgResolvedTermFilter>> = {};\n let graphPrefix: string | undefined;\n let objectRange: PgObjectRange | undefined;\n\n for (const key of PATTERN_KEYS) {\n const value = pattern[key];\n if (!value) {\n continue;\n }\n if (isTerm(value as any)) {\n const id = await this.requireDictionary().find(value as Term);\n if (id === undefined) {\n return { ids, idSets, excludedIdSets, termFilters, unresolved: key };\n }\n ids[key] = id;\n continue;\n }\n const operators = value as TermOperators;\n if (operators.$eq !== undefined) {\n const id = await this.termOperatorValueId(operators.$eq);\n if (id === undefined) return { ids, idSets, excludedIdSets, termFilters, unresolved: key };\n ids[key] = id;\n }\n if (operators.$in !== undefined) {\n const set = uniqueNumbers((await Promise.all(operators.$in.map((entry) => this.termOperatorValueId(entry))))\n .filter((id): id is number => id !== undefined));\n if (set.length === 0) return { ids, idSets, excludedIdSets, termFilters, unresolved: key };\n idSets[key] = set;\n }\n if (operators.$notIn !== undefined) {\n const set = uniqueNumbers((await Promise.all(operators.$notIn.map((entry) => this.termOperatorValueId(entry))))\n .filter((id): id is number => id !== undefined));\n if (set.length > 0) excludedIdSets[key] = set;\n }\n if (operators.$ne !== undefined) {\n const id = await this.termOperatorValueId(operators.$ne);\n if (id !== undefined) excludedIdSets[key] = uniqueNumbers([...(excludedIdSets[key] ?? []), id]);\n }\n if (key === 'graph' && operators.$startsWith !== undefined) {\n graphPrefix = operators.$startsWith;\n }\n const filter = await this.resolveTermFilter(key, operators);\n if (filter) termFilters[key] = filter;\n if (key === 'object') {\n objectRange = this.resolveObjectRange(operators);\n }\n }\n return { ids, idSets, excludedIdSets, termFilters, ...(graphPrefix !== undefined ? { graphPrefix } : {}), ...(objectRange ? { objectRange } : {}) };\n }\n\n private async resolveTermFilter(key: PgPatternKey, operators: TermOperators): Promise<PgResolvedTermFilter | undefined> {\n const filter: PgResolvedTermFilter = {};\n if (operators.$termType !== undefined) filter.termType = operators.$termType;\n if (operators.$language !== undefined) filter.language = operators.$language;\n if (operators.$notLanguage !== undefined) filter.notLanguage = operators.$notLanguage;\n if (operators.$langMatches !== undefined) filter.langMatches = operators.$langMatches;\n if (operators.$datatype !== undefined) filter.datatype = await this.resolveDatatypeFilter(operators.$datatype);\n if (operators.$notDatatype !== undefined) filter.notDatatype = await this.resolveDatatypeFilter(operators.$notDatatype);\n if (key === 'object') {\n const textSearches: PgTextSearch[] = [];\n if (operators.$contains !== undefined) textSearches.push({ operator: '$contains', value: operators.$contains });\n if (operators.$endsWith !== undefined) textSearches.push({ operator: '$endsWith', value: operators.$endsWith });\n if (textSearches.length > 0) filter.textSearches = textSearches;\n }\n return Object.keys(filter).length > 0 ? filter : undefined;\n }\n\n private async resolveDatatypeFilter(datatype: Term): Promise<PgResolvedDatatypeFilter> {\n if (datatype.termType !== 'NamedNode') {\n return { kind: 'unknown' };\n }\n if (datatype.value === XSD_STRING) {\n return { kind: 'xsd-string' };\n }\n const id = await this.requireDictionary().find(datatype);\n return id === undefined ? { kind: 'unknown' } : { kind: 'id', id };\n }\n\n private resolveObjectRange(match: TermOperators): PgObjectRange | undefined {\n const numericRange: PgObjectRange = { mode: 'numeric' };\n const lexicalRange: PgObjectRange = { mode: 'lexical' };\n let hasRange = false;\n let allNumeric = true;\n for (const [operator, inclusive] of [\n ['$gt', false],\n ['$gte', true],\n ['$lt', false],\n ['$lte', true],\n ] as const) {\n const value = match[operator];\n if (value === undefined) continue;\n hasRange = true;\n const numericValue = this.numericValueForPattern(value);\n const lexicalValue = this.lexicalValueForPattern(value);\n allNumeric = allNumeric && numericValue !== undefined;\n if (lexicalValue === undefined) return undefined;\n if (operator === '$gt' || operator === '$gte') {\n if (numericValue !== undefined) numericRange.min = numericValue;\n numericRange.minInclusive = inclusive;\n lexicalRange.min = lexicalValue;\n lexicalRange.minInclusive = inclusive;\n } else {\n if (numericValue !== undefined) numericRange.max = numericValue;\n numericRange.maxInclusive = inclusive;\n lexicalRange.max = lexicalValue;\n lexicalRange.maxInclusive = inclusive;\n }\n }\n if (!hasRange) return undefined;\n return allNumeric ? numericRange : lexicalRange;\n }\n\n private numericValueForPattern(value: Term | string | number): number | undefined {\n if (typeof value === 'number') return Number.isFinite(value) ? value : undefined;\n if (typeof value === 'string') {\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : undefined;\n }\n if (value.termType !== 'Literal' || !isRdfNumericDatatype(value.datatype.value)) return undefined;\n const parsed = rdfNumericValue(value.value);\n return Number.isFinite(parsed) ? parsed : undefined;\n }\n\n private lexicalValueForPattern(value: Term | string | number): string | undefined {\n if (typeof value === 'number') return Number.isFinite(value) ? String(value) : undefined;\n if (typeof value === 'string') return value;\n return value.value;\n }\n\n private async termOperatorValueId(value: unknown): Promise<number | undefined> {\n if (!value || typeof value !== 'object' || !('termType' in value)) {\n throw new Error('PostgresRdfEngine exact operators only support RDF terms');\n }\n return this.requireDictionary().find(value as Term);\n }\n\n private compileScanSql(resolved: PgResolvedPattern, options?: QueryOptions): PgCompiledScan {\n const builder = new PgSqlBuilder();\n const conditions: string[] = [];\n const joins: string[] = [];\n const queryPlan: string[] = [];\n const useMembershipSource = shouldUseMembershipSource(resolved);\n const permutation = this.choosePermutation(resolved);\n const alias = 'q';\n this.appendResolvedPatternConditions(resolved, alias, conditions, joins, builder, queryPlan);\n const order = this.buildOrderClause(options, alias);\n const pagination = this.buildPagination(options, builder);\n const from = `${RDF_FACTS_TABLE} ${alias}`;\n const whereClause = conditions.length > 0 ? ` WHERE ${conditions.join(' AND ')}` : '';\n return {\n sql: `\n SELECT ${alias}.graph_id, ${alias}.subject_id, ${alias}.predicate_id, ${alias}.object_id\n FROM ${from}${joins.join('')}\n ${whereClause}\n ${order || ` ORDER BY ${permutation.columns.map((column) => `${alias}.${column}`).join(', ')}`}\n ${pagination.sql}\n `,\n params: builder.snapshot(),\n countSql: `SELECT COUNT(*) AS count FROM ${from}${joins.join('')}${whereClause}`,\n countParams: builder.snapshot().slice(0, builder.snapshot().length - pagination.paramCount),\n indexChoice: useMembershipSource ? 'source-membership' : permutation.name,\n queryPlan: [\n ...(useMembershipSource ? ['Rdf3xMembershipScan'] : [`Rdf3xPermutationScan(${permutation.name})`]),\n ...queryPlan,\n ...(order ? [`Rdf3xJoinOrder(${describeScanOrder(options)})`] : []),\n ...(pagination.sql ? ['Pagination'] : []),\n ],\n };\n }\n\n private async compileJoinSql(\n patterns: PgCompiledJoinPattern[],\n options?: {\n project?: string[];\n distinct?: boolean;\n orderBy?: RdfQuery['orderBy'];\n limit?: number;\n offset?: number;\n countMatchedRows?: boolean;\n },\n ): Promise<PgCompiledJoin> {\n const resolvedSources: PgJoinSource[] = [];\n for (const [inputIndex, entry] of patterns.entries()) {\n const resolved = await this.resolvePattern(entry.pattern);\n const permutation = this.choosePermutation(resolved);\n const estimateRows = resolved.unresolved ? 0 : await this.estimateResolvedRows(resolved);\n resolvedSources.push({\n inputIndex,\n alias: `q${inputIndex}`,\n entry,\n resolved,\n permutation,\n estimateRows,\n });\n }\n const orderedSources = this.orderJoinSources(resolvedSources);\n const builder = new PgSqlBuilder();\n const conditions: string[] = [];\n const joins: string[] = [];\n const queryPlan: string[] = [\n `Rdf3xJoinBGP(${patterns.length})`,\n `Rdf3xJoinOrder(${orderedSources.map((source) => `?${source.inputIndex}:${source.estimateRows}`).join('>')})`,\n ];\n const variableColumns = new Map<string, string>();\n const variableAliases = new Map<string, string>();\n const indexChoices: string[] = [];\n\n for (const [position, source] of orderedSources.entries()) {\n if (source.resolved.unresolved) {\n return {\n sql: '',\n params: [],\n countParams: [],\n indexChoice: 'none',\n queryPlan,\n variableAliases,\n unresolved: source.resolved.unresolved,\n };\n }\n const alias = source.alias;\n if (position === 0) {\n joins.push(`${RDF_FACTS_TABLE} ${alias}`);\n } else {\n const mergeConditions = this.mergeJoinConditions(source, variableColumns);\n joins.push(` JOIN ${RDF_FACTS_TABLE} ${alias} ON ${mergeConditions.length > 0 ? mergeConditions.join(' AND ') : '1 = 1'}`);\n if (mergeConditions.length > 0) {\n queryPlan.push(`Rdf3xMergeJoin(${mergeConditions.length})`);\n }\n }\n this.appendResolvedPatternConditions(source.resolved, alias, conditions, joins, builder, queryPlan);\n this.appendPatternEqualityConditions(source.entry.equalities, alias, conditions, queryPlan);\n indexChoices.push(shouldUseMembershipSource(source.resolved) ? 'source-membership' : source.permutation.name);\n\n for (const key of PATTERN_KEYS) {\n const variableName = source.entry.variables[key];\n if (!variableName) continue;\n const column = `${alias}.${TERM_COLUMN[key]}`;\n if (!variableColumns.has(variableName)) {\n variableColumns.set(variableName, column);\n }\n }\n }\n\n const projectVariables = options?.project ?? [...variableColumns.keys()];\n const projectionColumns = projectVariables.map((variableName) => {\n const column = variableColumns.get(variableName);\n if (!column) throw new Error(`Postgres RDF-3X join cannot project unbound variable: ${variableName}`);\n const alias = `v${variableAliases.size}`;\n variableAliases.set(variableName, alias);\n return `${column} AS ${alias}`;\n });\n const projection = projectionColumns.length > 0\n ? `${options?.distinct ? 'DISTINCT ' : ''}${projectionColumns.join(', ')}`\n : `${options?.distinct ? 'DISTINCT ' : ''}1 AS __empty`;\n const whereClause = conditions.length > 0 ? ` WHERE ${conditions.join(' AND ')}` : '';\n const orderClause = this.buildJoinOrderClause(options?.orderBy, variableColumns);\n const pagination = this.buildPagination(options, builder);\n const from = joins.join('');\n const sql = `\n SELECT ${projection}\n FROM ${from}${orderClause.joins}\n ${whereClause}\n ${orderClause.orderBy}\n ${pagination.sql}\n `;\n return {\n sql,\n params: builder.snapshot(),\n countSql: pagination.sql && options?.countMatchedRows !== false\n ? `SELECT COUNT(*) AS count FROM ${from}${orderClause.joins}${whereClause}`\n : undefined,\n countParams: builder.snapshot().slice(0, builder.snapshot().length - pagination.paramCount),\n indexChoice: `Rdf3xJoinBGP(${indexChoices.join('>')})`,\n queryPlan: [\n ...queryPlan,\n ...(orderClause.orderBy ? [`Rdf3xJoinOrderBy(${(options?.orderBy ?? []).map((entry) => `${entry.direction ?? 'asc'}:${entry.variable}`).join(',')})`] : []),\n ...(options?.distinct ? [`Rdf3xJoinDistinct(${projectVariables.map((variableName) => `?${variableName}`).join(',')})`] : []),\n ...(pagination.sql ? ['Rdf3xJoinLimit'] : []),\n sql,\n ],\n variableAliases,\n };\n }\n\n private appendResolvedPatternConditions(\n resolved: PgResolvedPattern,\n alias: string,\n conditions: string[],\n joins: string[],\n builder: PgSqlBuilder,\n queryPlan: string[],\n ): void {\n for (const key of PATTERN_KEYS) {\n const column = `${alias}.${TERM_COLUMN[key]}`;\n const id = resolved.ids[key];\n if (id !== undefined) {\n conditions.push(`${column} = ${builder.add(id)}`);\n if (key === 'graph') queryPlan.push('GraphMembershipFilter');\n }\n const ids = resolved.idSets[key];\n if (ids?.length) {\n conditions.push(`${column} = ANY(${builder.add(ids)}::bigint[])`);\n queryPlan.push(`TermIn(${key})`);\n }\n const excluded = resolved.excludedIdSets[key];\n if (excluded?.length) {\n conditions.push(`NOT (${column} = ANY(${builder.add(excluded)}::bigint[]))`);\n queryPlan.push(`TermNotIn(${key})`);\n }\n const filter = resolved.termFilters[key];\n if (filter) {\n const filterAlias = `${alias}_${key}_term_filter`;\n joins.push(` JOIN rdf_terms ${filterAlias} ON ${filterAlias}.id = ${column}`);\n this.appendTermFilterCondition(key, filterAlias, filter, conditions, builder, queryPlan);\n }\n }\n if (resolved.graphPrefix !== undefined) {\n const graphAlias = `${alias}_graph_prefix`;\n joins.push(` JOIN rdf_terms ${graphAlias} ON ${graphAlias}.id = ${alias}.graph_id`);\n conditions.push(`${graphAlias}.kind = ${builder.add('iri')}`);\n conditions.push(`${graphAlias}.value_head >= ${builder.add(rdfTermValueHead(resolved.graphPrefix))}`);\n conditions.push(`${graphAlias}.value_head < ${builder.add(`${rdfTermValueHead(resolved.graphPrefix)}\\uffff`)}`);\n conditions.push(`${graphAlias}.value >= ${builder.add(resolved.graphPrefix)}`);\n conditions.push(`${graphAlias}.value < ${builder.add(`${resolved.graphPrefix}\\uffff`)}`);\n queryPlan.push('GraphPrefixMembershipFilter');\n }\n if (resolved.objectRange) {\n const rangeAlias = `${alias}_object_range`;\n joins.push(` JOIN rdf_terms ${rangeAlias} ON ${rangeAlias}.id = ${alias}.object_id`);\n this.appendObjectRangeCondition(rangeAlias, resolved.objectRange, conditions, builder, queryPlan);\n }\n }\n\n private appendPatternEqualityConditions(\n equalities: PgPatternEquality[],\n alias: string,\n conditions: string[],\n queryPlan: string[],\n ): void {\n for (const equality of equalities) {\n conditions.push(`${alias}.${TERM_COLUMN[equality.left]} = ${alias}.${TERM_COLUMN[equality.right]}`);\n queryPlan.push(`Rdf3xPatternEquality(?${equality.variable}:${equality.left}=${equality.right})`);\n }\n }\n\n private appendTermFilterCondition(\n key: PgPatternKey,\n alias: string,\n filter: PgResolvedTermFilter,\n conditions: string[],\n builder: PgSqlBuilder,\n queryPlan: string[],\n ): void {\n if (filter.termType !== undefined) {\n this.appendTermTypeCondition(key, alias, filter.termType, conditions, builder);\n queryPlan.push(`TermType(${key}:${filter.termType})`);\n }\n if (filter.language !== undefined) {\n this.appendLanguageCondition(key, alias, '$language', filter.language, conditions, builder);\n queryPlan.push(`Language(${key}$language)`);\n }\n if (filter.notLanguage !== undefined) {\n this.appendLanguageCondition(key, alias, '$notLanguage', filter.notLanguage, conditions, builder);\n queryPlan.push(`Language(${key}$notLanguage)`);\n }\n if (filter.langMatches !== undefined) {\n this.appendLanguageCondition(key, alias, '$langMatches', filter.langMatches, conditions, builder);\n queryPlan.push(`Language(${key}$langMatches)`);\n }\n if (filter.datatype !== undefined) {\n this.appendDatatypeCondition(key, alias, '$datatype', filter.datatype, conditions, builder);\n queryPlan.push(`Datatype(${key}$datatype)`);\n }\n if (filter.notDatatype !== undefined) {\n this.appendDatatypeCondition(key, alias, '$notDatatype', filter.notDatatype, conditions, builder);\n queryPlan.push(`Datatype(${key}$notDatatype)`);\n }\n for (const search of filter.textSearches ?? []) {\n this.appendTextSearchCondition(key, alias, search, conditions, builder, queryPlan);\n }\n }\n\n private appendTermTypeCondition(\n key: PgPatternKey,\n alias: string,\n termType: Rdf3xTermTypePatternValue,\n conditions: string[],\n builder: PgSqlBuilder,\n ): void {\n const possibleKinds = termKindsForPatternKey(key);\n if (termType === 'numeric') {\n conditions.push(possibleKinds.includes('literal')\n ? `${alias}.kind = 'literal' AND ${alias}.numeric_value IS NOT NULL`\n : '1 = 0');\n return;\n }\n if (!possibleKinds.includes(termType)) {\n conditions.push('1 = 0');\n return;\n }\n conditions.push(`${alias}.kind = ${builder.add(termType)}`);\n }\n\n private appendLanguageCondition(\n key: PgPatternKey,\n alias: string,\n operator: '$language' | '$notLanguage' | '$langMatches',\n language: string,\n conditions: string[],\n builder: PgSqlBuilder,\n ): void {\n if (!termKindsForPatternKey(key).includes('literal')) {\n conditions.push('1 = 0');\n return;\n }\n if (operator === '$language') {\n conditions.push(`${alias}.kind = 'literal' AND COALESCE(${alias}.lang, '') = ${builder.add(language)}`);\n return;\n }\n if (operator === '$notLanguage') {\n conditions.push(`${alias}.kind = 'literal' AND COALESCE(${alias}.lang, '') != ${builder.add(language)}`);\n return;\n }\n if (language === '*') {\n conditions.push(`${alias}.kind = 'literal' AND ${alias}.lang IS NOT NULL AND ${alias}.lang != ''`);\n return;\n }\n conditions.push(`${alias}.kind = 'literal'\n AND (lower(${alias}.lang) = lower(${builder.add(language)}) OR lower(${alias}.lang) LIKE lower(${builder.add(`${escapeLikePattern(language)}-%`)}) ESCAPE '\\\\')`);\n }\n\n private appendDatatypeCondition(\n key: PgPatternKey,\n alias: string,\n operator: '$datatype' | '$notDatatype',\n datatype: PgResolvedDatatypeFilter,\n conditions: string[],\n builder: PgSqlBuilder,\n ): void {\n if (!termKindsForPatternKey(key).includes('literal')) {\n conditions.push('1 = 0');\n return;\n }\n if (datatype.kind === 'xsd-string') {\n conditions.push(operator === '$datatype'\n ? `${alias}.kind = 'literal' AND ${alias}.lang IS NULL AND ${alias}.datatype_id IS NULL`\n : `${alias}.kind = 'literal' AND NOT (${alias}.lang IS NULL AND ${alias}.datatype_id IS NULL)`);\n return;\n }\n if (datatype.kind === 'unknown') {\n conditions.push(operator === '$datatype' ? '1 = 0' : `${alias}.kind = 'literal'`);\n return;\n }\n conditions.push(operator === '$datatype'\n ? `${alias}.kind = 'literal' AND ${alias}.datatype_id = ${builder.add(datatype.id)}`\n : `${alias}.kind = 'literal' AND (${alias}.datatype_id IS NULL OR ${alias}.datatype_id != ${builder.add(datatype.id)})`);\n }\n\n private appendTextSearchCondition(\n key: PgPatternKey,\n alias: string,\n search: PgTextSearch,\n conditions: string[],\n builder: PgSqlBuilder,\n queryPlan: string[],\n ): void {\n const kinds = termKindsForPatternKey(key);\n const kindArray = builder.add(kinds);\n const normalized = search.value.toLowerCase();\n switch (search.operator) {\n case '$contains':\n conditions.push(`${alias}.kind = ANY(${kindArray}::text[])\n AND ${alias}.normalized_text LIKE ${builder.add(`%${escapeLikePattern(normalized)}%`)} ESCAPE '\\\\'\n AND strpos(${alias}.value, ${builder.add(search.value)}) > 0`);\n queryPlan.push(`TextSearch(${key}$contains)`);\n return;\n case '$endsWith':\n conditions.push(`${alias}.kind = ANY(${kindArray}::text[])\n AND ${alias}.normalized_text LIKE ${builder.add(`%${escapeLikePattern(normalized)}`)} ESCAPE '\\\\'\n AND right(${alias}.value, length(${builder.add(search.value)})) = ${builder.add(search.value)}`);\n queryPlan.push(`TextSearch(${key}$endsWith)`);\n return;\n default: {\n const exhaustive: never = search.operator;\n throw new Error(`Unsupported PostgreSQL RDF-3X text search operator: ${exhaustive}`);\n }\n }\n }\n\n private appendObjectRangeCondition(\n alias: string,\n range: PgObjectRange,\n conditions: string[],\n builder: PgSqlBuilder,\n queryPlan: string[],\n ): void {\n if (range.mode === 'numeric') {\n conditions.push(`${alias}.kind = 'literal'`);\n conditions.push(`${alias}.numeric_value IS NOT NULL`);\n if (range.min !== undefined) conditions.push(`${alias}.numeric_value ${range.minInclusive ? '>=' : '>'} ${builder.add(range.min)}`);\n if (range.max !== undefined) conditions.push(`${alias}.numeric_value ${range.maxInclusive ? '<=' : '<'} ${builder.add(range.max)}`);\n queryPlan.push(`NumericRange(object${rangeSuffix(range)})`);\n return;\n }\n conditions.push(`${alias}.kind = ANY(${builder.add(OBJECT_RANGE_KINDS)}::text[])`);\n if (range.min !== undefined) conditions.push(`${alias}.value ${range.minInclusive ? '>=' : '>'} ${builder.add(range.min)}`);\n if (range.max !== undefined) conditions.push(`${alias}.value ${range.maxInclusive ? '<=' : '<'} ${builder.add(range.max)}`);\n queryPlan.push(`LexicalRange(object${rangeSuffix(range)})`);\n }\n\n private mergeJoinConditions(source: PgJoinSource, variableColumns: Map<string, string>): string[] {\n const conditions: string[] = [];\n for (const key of PATTERN_KEYS) {\n const variableName = source.entry.variables[key];\n if (!variableName) continue;\n const existing = variableColumns.get(variableName);\n if (existing) {\n conditions.push(`${existing} = ${source.alias}.${TERM_COLUMN[key]}`);\n }\n }\n return conditions;\n }\n\n private choosePermutation(resolved: PgResolvedPattern): PgPermutation {\n const has = (key: PgTermKey): boolean => resolved.ids[key] !== undefined || Boolean(resolved.idSets[key]?.length);\n const hasObjectConstraint = has('object') || Boolean(resolved.objectRange) || Boolean(resolved.termFilters.object);\n if (has('subject') && has('predicate')) return this.permutation('SPO');\n if (has('subject') && hasObjectConstraint) return this.permutation('SOP');\n if (has('predicate') && has('subject')) return this.permutation('PSO');\n if (has('predicate') && hasObjectConstraint) return this.permutation('POS');\n if (hasObjectConstraint && has('subject')) return this.permutation('OSP');\n if (hasObjectConstraint && has('predicate')) return this.permutation('OPS');\n if (has('subject')) return this.permutation('SPO');\n if (has('predicate')) return this.permutation('PSO');\n if (hasObjectConstraint) return this.permutation('OSP');\n return this.permutation('SPO');\n }\n\n private permutation(name: PgPermutationName): PgPermutation {\n const permutation = PERMUTATIONS.find((candidate) => candidate.name === name);\n if (!permutation) throw new Error(`Unknown PostgreSQL RDF-3X permutation: ${name}`);\n return permutation;\n }\n\n private async estimateResolvedRows(resolved: PgResolvedPattern): Promise<number> {\n const compiled = this.compileScanSql(resolved, { limit: 0 });\n return this.scalarCount(compiled.countSql, compiled.countParams);\n }\n\n private orderJoinSources(sources: PgJoinSource[]): PgJoinSource[] {\n const remaining = [...sources];\n const selected: PgJoinSource[] = [];\n const selectedVariables = new Set<string>();\n while (remaining.length > 0) {\n const hasSelectedVariables = selectedVariables.size > 0;\n remaining.sort((left, right) => {\n const leftConnected = !hasSelectedVariables || joinSourceVariables(left).some((variableName) => selectedVariables.has(variableName));\n const rightConnected = !hasSelectedVariables || joinSourceVariables(right).some((variableName) => selectedVariables.has(variableName));\n return Number(rightConnected) - Number(leftConnected)\n || left.estimateRows - right.estimateRows\n || left.inputIndex - right.inputIndex;\n });\n const [next] = remaining.splice(0, 1);\n selected.push(next);\n for (const variableName of joinSourceVariables(next)) {\n selectedVariables.add(variableName);\n }\n }\n return selected;\n }\n\n private buildOrderClause(options: QueryOptions | undefined, alias: string): string {\n if (!options?.order || options.order.length === 0) return '';\n const directions = 'orderDirections' in options && Array.isArray((options as QueryOptions & { orderDirections?: Array<'asc' | 'desc'> }).orderDirections)\n ? (options as QueryOptions & { orderDirections?: Array<'asc' | 'desc'> }).orderDirections as Array<'asc' | 'desc'>\n : options.order.map(() => (options.reverse ? 'desc' : 'asc'));\n return ` ORDER BY ${options.order.map((key, index) => `${alias}.${TERM_COLUMN[key]} ${(directions[index] ?? 'asc').toUpperCase()}`).join(', ')}`;\n }\n\n private buildJoinOrderClause(\n orderBy: RdfQuery['orderBy'] | undefined,\n variableColumns: Map<string, string>,\n ): { joins: string; orderBy: string } {\n if (!orderBy || orderBy.length === 0) return { joins: '', orderBy: '' };\n const joins: string[] = [];\n const orders: string[] = [];\n for (const [index, entry] of orderBy.entries()) {\n const column = variableColumns.get(entry.variable);\n if (!column) throw new Error(`Postgres RDF-3X join cannot order by unbound variable: ${entry.variable}`);\n const alias = `join_order_t${index}`;\n joins.push(` JOIN rdf_terms ${alias} ON ${alias}.id = ${column}`);\n orders.push(`${alias}.value ${entry.direction === 'desc' ? 'DESC' : 'ASC'}`);\n }\n return { joins: joins.join(''), orderBy: ` ORDER BY ${orders.join(', ')}` };\n }\n\n private buildPagination(\n options: { limit?: number; offset?: number } | undefined,\n builder: PgSqlBuilder,\n ): { sql: string; paramCount: number } {\n let sql = '';\n let paramCount = 0;\n if (options?.limit !== undefined) {\n sql += ` LIMIT ${builder.add(Math.max(0, options.limit))}`;\n paramCount++;\n }\n if (options?.offset !== undefined) {\n if (options.limit === undefined) {\n sql += ' LIMIT ALL';\n }\n sql += ` OFFSET ${builder.add(Math.max(0, options.offset))}`;\n paramCount++;\n }\n return { sql, paramCount };\n }\n\n private async rowsToQuads(rows: PgQuadIdRow[]): Promise<Quad[]> {\n const ids = rows.flatMap((row) => [row.graph_id, row.subject_id, row.predicate_id, row.object_id]);\n const terms = await this.requireDictionary().rowsForIds(ids);\n return rows.map((row) => quad(\n this.requiredTerm(terms, row.subject_id) as any,\n this.requiredTerm(terms, row.predicate_id) as any,\n this.requiredTerm(terms, row.object_id) as any,\n this.requiredTerm(terms, row.graph_id) as any,\n ));\n }\n\n private async joinRowsToBindings(\n rows: Array<Record<string, unknown>>,\n variableAliases: Map<string, string>,\n aggregateAliases?: Map<string, string>,\n aggregateTypes?: Map<string, 'integer' | 'decimal'>,\n ): Promise<RdfBindingRow[]> {\n const termIds = rows.flatMap((row) => [...variableAliases.values()]\n .map((alias) => row[alias])\n .map(pgInteger)\n .filter((value): value is number => value !== undefined));\n const terms = await this.requireDictionary().rowsForIds(termIds);\n return rows.map((row) => {\n const binding: RdfBindingRow = {};\n for (const [variableName, alias] of variableAliases) {\n const id = pgInteger(row[alias]);\n if (id !== undefined) binding[variableName] = this.requiredTerm(terms, id);\n }\n for (const [variableName, alias] of aggregateAliases ?? []) {\n const value = pgInteger(row[alias]);\n if (value !== undefined) {\n binding[variableName] = DataFactory.literal(\n String(value),\n DataFactory.namedNode(aggregateTypes?.get(variableName) === 'decimal' ? XSD_DECIMAL : XSD_INTEGER),\n ) as Term;\n }\n }\n return binding;\n });\n }\n\n private indexMetrics(\n indexChoice: string,\n matchedRows: number,\n returnedRows: number,\n start: number,\n queryPlan: string[],\n ): RdfIndexMetrics {\n return {\n engine: 'solid-rdf',\n indexChoice,\n matchedRows,\n returnedRows,\n durationMs: Date.now() - start,\n queryPlan,\n };\n }\n\n private localMetrics(\n start: number,\n scannedRows: number,\n joinedRows: number,\n returnedRows: number,\n indexChoices: string[],\n plan: string[],\n filtersPushedDown = 0,\n ): RdfQueryMetrics {\n return {\n engine: 'solid-rdf',\n plan,\n scannedRows,\n joinedRows,\n returnedRows,\n durationMs: Date.now() - start,\n indexChoices,\n cardinalityEstimates: 0,\n distinctCardinalityEstimates: 0,\n searchCardinalityEstimates: 0,\n filtersApplied: 0,\n filtersPushedDown,\n };\n }\n\n private async insertQuads(\n executor: AsyncSqlExecutor,\n dictionary: PostgresRdfTermDictionary,\n quads: Quad[],\n sourceId: number | null,\n sourceLineNo: number | null,\n ): Promise<void> {\n for (const quadValue of quads) {\n const graphId = await dictionary.getOrCreate(quadValue.graph);\n const subjectId = await dictionary.getOrCreate(quadValue.subject);\n const predicateId = await dictionary.getOrCreate(quadValue.predicate);\n const objectId = await dictionary.getOrCreate(quadValue.object);\n await executor.exec(`\n INSERT INTO rdf_quads (\n graph_id,\n subject_id,\n predicate_id,\n object_id,\n source_file_id,\n source_line_no\n )\n VALUES ($1, $2, $3, $4, $5, $6)\n ON CONFLICT (graph_id, subject_id, predicate_id, object_id)\n DO UPDATE SET\n source_file_id = EXCLUDED.source_file_id,\n source_line_no = EXCLUDED.source_line_no\n `, [graphId, subjectId, predicateId, objectId, sourceId, sourceLineNo]);\n }\n }\n\n private async withRetryableWrite<T>(operation: () => Promise<T>): Promise<T> {\n let attempt = 0;\n while (true) {\n try {\n return await operation();\n } catch (error) {\n const delayMs = POSTGRES_RDF_WRITE_RETRY_DELAYS_MS[attempt];\n if (delayMs === undefined || !isRetryablePostgresWriteError(error)) {\n throw error;\n }\n attempt += 1;\n await sleep(delayMs);\n }\n }\n }\n\n private async deleteExactQuad(\n executor: AsyncSqlExecutor,\n dictionary: PostgresRdfTermDictionary,\n value: Quad,\n ): Promise<number> {\n const graphId = await dictionary.find(value.graph);\n const subjectId = await dictionary.find(value.subject);\n const predicateId = await dictionary.find(value.predicate);\n const objectId = await dictionary.find(value.object);\n if (graphId === undefined || subjectId === undefined || predicateId === undefined || objectId === undefined) {\n return 0;\n }\n const result = await executor.query<{ one: number }>(\n `\n DELETE FROM rdf_quads\n WHERE graph_id = $1\n AND subject_id = $2\n AND predicate_id = $3\n AND object_id = $4\n RETURNING 1 AS one\n `,\n [graphId, subjectId, predicateId, objectId],\n );\n return result.length;\n }\n\n private async upsertSource(source: RdfSourceInput, executor = this.requireExecutor()): Promise<number> {\n const row = await executor.query<{ id: number }>(`\n INSERT INTO rdf_sources (\n source,\n workspace,\n local_path,\n content_type,\n source_version,\n last_indexed_at\n )\n VALUES ($1, $2, $3, $4, $5, NOW())\n ON CONFLICT (source) DO UPDATE\n SET\n workspace = EXCLUDED.workspace,\n local_path = EXCLUDED.local_path,\n content_type = EXCLUDED.content_type,\n source_version = EXCLUDED.source_version,\n last_indexed_at = NOW()\n RETURNING id\n `, [\n source.source,\n source.workspace,\n source.localPath ?? null,\n source.contentType ?? null,\n source.sourceVersion ?? null,\n ]);\n const id = row[0]?.id;\n if (id === undefined) {\n throw new Error(`Failed to upsert RDF source ${source.source}`);\n }\n return id;\n }\n\n private async findSourceRow(source: string, executor = this.requireExecutor()): Promise<PostgresRdfSourceRow | undefined> {\n const rows = await executor.query<PostgresRdfSourceRow>('SELECT * FROM rdf_sources WHERE source = $1', [source]);\n return rows[0];\n }\n\n private async bumpFactsDataVersion(executor = this.requireExecutor()): Promise<void> {\n await executor.exec(`\n UPDATE rdf_index_metadata\n SET value = (COALESCE(NULLIF(value, ''), '0')::bigint + 1)::text\n WHERE key = 'data_version'\n `);\n }\n\n private async readFactsDataVersion(): Promise<number> {\n const row = await this.requireExecutor().query<{ value: string }>(\"SELECT value FROM rdf_index_metadata WHERE key = 'data_version'\");\n return Number(row[0]?.value ?? 0) || 0;\n }\n\n private async readRdf3xFactsDataVersion(): Promise<number> {\n try {\n const row = await this.requireExecutor().query<{ value: string }>(\"SELECT value FROM rdf3x_metadata WHERE key = 'facts_data_version'\");\n return Number(row[0]?.value ?? 0) || 0;\n } catch {\n return 0;\n }\n }\n\n private async ensureReady(): Promise<void> {\n await this.open();\n }\n\n private async scalarCount(sql: string, params: unknown[] = []): Promise<number> {\n const row = await this.requireExecutor().query<{ count: number }>(sql, params);\n return Number(row[0]?.count ?? 0) || 0;\n }\n\n private async factsStats(): Promise<RdfIndexStats> {\n const [termCount, quadCount, sourceCount, graphCount] = await Promise.all([\n this.scalarCount('SELECT COUNT(*) AS count FROM rdf_terms'),\n this.scalarCount(`SELECT COUNT(*) AS count FROM ${RDF_FACTS_TABLE}`),\n this.scalarCount('SELECT COUNT(*) AS count FROM rdf_sources'),\n this.scalarCount(`SELECT COUNT(DISTINCT graph_id) AS count FROM ${RDF_FACTS_TABLE}`),\n ]);\n const spaceObjects = await this.collectSpaceObjects(false);\n const databaseBytes = spaceObjects.reduce((sum, object) => sum + object.bytes, 0);\n return {\n termCount,\n quadCount,\n sourceCount,\n graphCount,\n databaseBytes,\n tableBytes: sumSpaceObjects(spaceObjects, 'table'),\n indexBytes: sumSpaceObjects(spaceObjects, 'index'),\n spaceObjects,\n serializedTermTextBytes: await this.scalarCount('SELECT COALESCE(SUM(length(value)), 0) AS count FROM rdf_terms'),\n literalDatatypeDistribution: [],\n cardinalityDistributions: {\n graphs: [],\n predicates: [],\n predicateObjects: [],\n subjectPredicates: [],\n },\n };\n }\n\n private async rdf3xStats(): Promise<Rdf3xIndexStats> {\n const spaceObjects = await this.collectSpaceObjects(true);\n const databaseBytes = spaceObjects.reduce((sum, object) => sum + object.bytes, 0);\n const uniqueTriples = await this.scalarCount(`\n SELECT COUNT(*) AS count\n FROM (\n SELECT DISTINCT subject_id, predicate_id, object_id\n FROM ${RDF_FACTS_TABLE}\n ) distinct_triples\n `);\n return {\n uniqueTriples,\n membershipCount: await this.scalarCount(`SELECT COUNT(*) AS count FROM ${RDF_FACTS_TABLE}`),\n graphCount: await this.scalarCount(`SELECT COUNT(*) AS count FROM ${RDF3X_GRAPH_PROJECTION_TABLE}`),\n factsDataVersion: await this.readRdf3xFactsDataVersion(),\n permutationRows: Object.fromEntries(PERMUTATIONS.map((permutation) => [permutation.name, uniqueTriples])) as Rdf3xIndexStats['permutationRows'],\n pairProjectionRows: Object.fromEntries(await Promise.all(PAIR_PROJECTIONS.map(async (projection) => [\n projection.name,\n await this.scalarCount(`SELECT COUNT(*) AS count FROM ${projection.table}`),\n ]))) as Rdf3xIndexStats['pairProjectionRows'],\n termProjectionRows: Object.fromEntries(await Promise.all(TERM_PROJECTIONS.map(async (projection) => [\n projection.name,\n await this.scalarCount(`SELECT COUNT(*) AS count FROM ${projection.table}`),\n ]))) as Rdf3xIndexStats['termProjectionRows'],\n databaseBytes,\n tableBytes: sumSpaceObjects(spaceObjects, 'table'),\n indexBytes: sumSpaceObjects(spaceObjects, 'index'),\n spaceObjects,\n };\n }\n\n private async collectSpaceObjects(derived: boolean): Promise<RdfIndexSpaceObject[]> {\n try {\n const rows = await this.requireExecutor().query<{\n name: string;\n kind: 'table' | 'index';\n table_name: string | null;\n bytes: number;\n }>(`\n SELECT\n rel.relname AS name,\n CASE WHEN rel.relkind = 'i' THEN 'index' ELSE 'table' END AS kind,\n tbl.relname AS table_name,\n pg_total_relation_size(rel.oid) AS bytes\n FROM pg_class rel\n LEFT JOIN pg_index idx ON idx.indexrelid = rel.oid\n LEFT JOIN pg_class tbl ON tbl.oid = idx.indrelid\n WHERE rel.relkind IN ('r', 'i')\n AND ${derived\n ? \"(rel.relname LIKE 'rdf3x_%' OR tbl.relname LIKE 'rdf3x_%')\"\n : \"(rel.relname LIKE 'rdf_%' OR tbl.relname LIKE 'rdf_%') AND rel.relname NOT LIKE 'rdf3x_%' AND COALESCE(tbl.relname, '') NOT LIKE 'rdf3x_%'\"}\n ORDER BY rel.relname\n `);\n return rows.map((row) => ({\n name: row.name,\n kind: row.kind,\n ...(row.table_name && row.table_name !== row.name ? { tableName: row.table_name } : {}),\n bytes: Number(row.bytes ?? 0),\n pages: 0,\n estimated: false,\n }));\n } catch {\n const tables = derived\n ? ['rdf3x_metadata', RDF3X_GRAPH_PROJECTION_TABLE, ...PAIR_PROJECTIONS.map((projection) => projection.table), ...TERM_PROJECTIONS.map((projection) => projection.table)]\n : ['rdf_terms', 'rdf_sources', RDF_FACTS_TABLE, 'rdf_index_metadata'];\n const rows = await Promise.all(tables.map(async (table) => ({\n name: table,\n kind: 'table' as const,\n rows: await this.scalarCount(`SELECT COUNT(*) AS count FROM ${table}`).catch(() => 0),\n })));\n return rows.map((row) => ({\n name: row.name,\n kind: row.kind,\n bytes: Math.max(4096, row.rows * 128),\n pages: Math.max(1, Math.ceil(Math.max(4096, row.rows * 128) / 4096)),\n estimated: true,\n }));\n }\n }\n\n private requireExecutor(): AsyncSqlExecutor {\n if (!this.executor) {\n throw new Error('PostgresRdfEngine is not open');\n }\n return this.executor;\n }\n\n private requireDictionary(): PostgresRdfTermDictionary {\n if (!this.termDictionary) {\n throw new Error('PostgresRdfEngine term dictionary is not initialized');\n }\n return this.termDictionary;\n }\n\n private requiredTerm(termMap: Map<number, Term>, id: number): Term {\n const term = termMap.get(id);\n if (!term) {\n throw new Error(`RDF term not found while reading quad row: ${id}`);\n }\n return term;\n }\n\n private async openExecutor(): Promise<void> {\n if (this.executor) {\n return;\n }\n if (this.pgOptions.pool) {\n this.pgPool = this.pgOptions.pool;\n this.sharedPoolConfig = null;\n this.executor = new PgPoolExecutor(this.pgPool);\n return;\n }\n\n if (this.pgOptions.driver === 'pglite') {\n this.pglite = new PGlite(this.pgOptions.dataDir);\n await this.pglite.waitReady;\n this.executor = new PgliteExecutor(this.pglite);\n return;\n }\n\n this.sharedPoolConfig = {\n connectionString: this.pgOptions.connectionString,\n host: this.pgOptions.host,\n port: this.pgOptions.port,\n database: this.pgOptions.database,\n user: this.pgOptions.user,\n password: this.pgOptions.password,\n };\n this.pgPool = getSharedPool(this.sharedPoolConfig);\n this.executor = new PgPoolExecutor(this.pgPool);\n }\n}\n\nfunction restoreRow<T>(row: T): T {\n if (!row || typeof row !== 'object') {\n return row;\n }\n const restored: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(row as Record<string, unknown>)) {\n restored[key] = restoreValue(key, value);\n }\n return restored as T;\n}\n\nfunction restoreValue(key: string, value: unknown): unknown {\n if (typeof value !== 'string') {\n return value;\n }\n if (isIntegerResultKey(key) && /^-?\\d+$/.test(value)) {\n return Number(value);\n }\n return fromPgSafe(value);\n}\n\nfunction isIntegerResultKey(key: string): boolean {\n return INTEGER_RESULT_KEYS.has(key) || INTEGER_ALIAS_RESULT_KEY.test(key);\n}\n\nfunction pgInteger(value: unknown): number | undefined {\n if (typeof value === 'number') {\n return Number.isFinite(value) ? value : undefined;\n }\n if (typeof value === 'string' && /^-?\\d+$/.test(value)) {\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : undefined;\n }\n return undefined;\n}\n\nfunction isVariable(value: RdfQueryTermPattern | undefined): value is { variable: string } {\n return Boolean(value && typeof value === 'object' && 'variable' in value);\n}\n\nfunction variablesInPattern(pattern: RdfQueryPattern): string[] {\n return uniqueStrings(PATTERN_KEYS\n .map((key) => pattern[key])\n .filter(isVariable)\n .map((value) => value.variable));\n}\n\nfunction normalizeOptionalGroup(group: RdfQueryPattern[] | RdfOptionalQueryGroup): RdfOptionalQueryGroup {\n return Array.isArray(group) ? { patterns: group } : group;\n}\n\nfunction isPgSqlScanCompatiblePattern(pattern: QuintPattern): boolean {\n return isPgRdf3xCompatiblePattern(pattern);\n}\n\nfunction isPgRdf3xCompatiblePattern(pattern: QuintPattern): boolean {\n return PATTERN_KEYS.every((key) => {\n const value = pattern[key];\n if (!value || isTerm(value as any)) return true;\n if (value === null || typeof value !== 'object' || 'termType' in value) return false;\n const operators = value as Record<string, unknown>;\n const allowed = new Set<string>([\n '$eq',\n '$ne',\n '$in',\n '$notIn',\n '$termType',\n '$language',\n '$notLanguage',\n '$langMatches',\n '$datatype',\n '$notDatatype',\n ...(key === 'graph' ? ['$startsWith'] : []),\n ...(key === 'object' ? ['$gt', '$gte', '$lt', '$lte', '$contains', '$endsWith'] : []),\n ]);\n if (Object.keys(operators).length === 0 || Object.keys(operators).some((operator) => !allowed.has(operator))) return false;\n if (operators.$eq !== undefined && !isTerm(operators.$eq as any)) return false;\n if (operators.$ne !== undefined && !isTerm(operators.$ne as any)) return false;\n if (operators.$in !== undefined && (!Array.isArray(operators.$in) || operators.$in.length === 0 || !operators.$in.every((entry) => isTerm(entry as any)))) return false;\n if (operators.$notIn !== undefined && (!Array.isArray(operators.$notIn) || operators.$notIn.length === 0 || !operators.$notIn.every((entry) => isTerm(entry as any)))) return false;\n if (operators.$startsWith !== undefined && typeof operators.$startsWith !== 'string') return false;\n if (operators.$termType !== undefined && !['iri', 'blank', 'literal', 'numeric'].includes(operators.$termType as string)) return false;\n for (const languageOperator of ['$language', '$notLanguage', '$langMatches']) {\n if (operators[languageOperator] !== undefined && typeof operators[languageOperator] !== 'string') return false;\n }\n for (const datatypeOperator of ['$datatype', '$notDatatype']) {\n const datatype = operators[datatypeOperator];\n if (datatype !== undefined && (!isTerm(datatype as any) || (datatype as Term).termType !== 'NamedNode')) return false;\n }\n if (key === 'object') {\n for (const rangeOperator of ['$gt', '$gte', '$lt', '$lte']) {\n const value = operators[rangeOperator];\n if (value !== undefined && !isObjectRangeValue(value)) return false;\n }\n for (const textOperator of ['$contains', '$endsWith']) {\n if (operators[textOperator] !== undefined && typeof operators[textOperator] !== 'string') return false;\n }\n }\n return true;\n });\n}\n\nfunction isObjectRangeValue(value: unknown): boolean {\n return typeof value === 'number'\n ? Number.isFinite(value)\n : typeof value === 'string'\n ? true\n : isTerm(value as any);\n}\n\nfunction shouldUseMembershipSource(resolved: PgResolvedPattern): boolean {\n return resolved.ids.graph !== undefined\n || Boolean(resolved.idSets.graph?.length)\n || Boolean(resolved.excludedIdSets.graph?.length)\n || resolved.graphPrefix !== undefined;\n}\n\nfunction termKindsForPatternKey(key: PgPatternKey): RdfTermKind[] {\n switch (key) {\n case 'object':\n return ['iri', 'literal', 'blank'];\n case 'subject':\n return ['iri', 'blank'];\n case 'graph':\n return ['iri', 'default_graph'];\n case 'predicate':\n return ['iri'];\n default: {\n const exhaustive: never = key;\n throw new Error(`Unsupported RDF pattern key: ${exhaustive}`);\n }\n }\n}\n\nfunction escapeLikePattern(value: string): string {\n return value.replace(/[\\\\%_]/g, (char) => `\\\\${char}`);\n}\n\nfunction rangeSuffix(range: PgObjectRange): string {\n return `${range.min !== undefined ? (range.minInclusive ? '$gte' : '$gt') : ''}${range.max !== undefined ? (range.maxInclusive ? '$lte' : '$lt') : ''}`;\n}\n\nfunction describeScanOrder(options?: QueryOptions): string {\n const order = options?.order ?? [];\n const directions = 'orderDirections' in (options ?? {})\n ? ((options as QueryOptions & { orderDirections?: Array<'asc' | 'desc'> })?.orderDirections ?? [])\n : order.map(() => (options?.reverse ? 'desc' : 'asc'));\n return order.map((entry, index) => `${directions[index] ?? 'asc'}:${entry}`).join(',');\n}\n\nfunction describeQueryPattern(pattern: RdfQueryPattern): string {\n return PATTERN_KEYS\n .filter((key) => pattern[key])\n .map((key) => `${key}:${describeQueryPatternValue(pattern[key])}`)\n .join(',');\n}\n\nfunction describeQueryPatternValue(value: RdfQueryTermPattern | undefined): string {\n if (!value) return '*';\n if (isVariable(value)) return `?${value.variable}`;\n if (isTerm(value as any)) return termToId(value as any);\n return 'op';\n}\n\nfunction describePatternSource(source: { pattern: QuintPattern; variables: Partial<Record<PgPatternKey, string>> }): string {\n return PATTERN_KEYS\n .map((key) => {\n const variableName = source.variables[key];\n if (variableName) return `${key}:?${variableName}`;\n const value = source.pattern[key];\n return value ? `${key}:${termMatchKey(value)}` : undefined;\n })\n .filter(Boolean)\n .join(',');\n}\n\nfunction termMatchKey(match: QuintPattern[keyof QuintPattern] | undefined): string {\n if (!match) return '*';\n if (isTerm(match as any)) return `${(match as Term).termType}:${(match as Term).value}`;\n return JSON.stringify(match);\n}\n\nfunction queryAggregates(query: RdfQuery): NonNullable<RdfQuery['aggregates']> {\n if (query.aggregates && query.aggregates.length > 0) return query.aggregates;\n return query.aggregate ? [query.aggregate] : [];\n}\n\nfunction aggregatePlan(aggregates: NonNullable<RdfQuery['aggregates']>, grouped: boolean): string {\n return `Aggregate(${grouped ? 'group-' : ''}${aggregates.map((aggregate) => (\n `${aggregate.type}${aggregate.distinct ? ':DISTINCT' : ''}(${aggregate.variable ? `?${aggregate.variable}` : '*'})`\n )).join(',')})`;\n}\n\nfunction describeFilter(filter: RdfQueryFilter): string {\n return `?${filter.variable}${filter.operand ? `:${filter.operand}` : ''}${filter.operator}`;\n}\n\nfunction describeQueryOrder(orderBy: NonNullable<RdfQuery['orderBy']>): string {\n return orderBy.map((entry) => `${entry.direction ?? 'asc'}:${entry.variable}`).join(',');\n}\n\nfunction isNativeAggregateHavingOperator(operator: RdfQueryFilter['operator']): boolean {\n return operator === '$eq'\n || operator === '$ne'\n || operator === '$gt'\n || operator === '$gte'\n || operator === '$lt'\n || operator === '$lte';\n}\n\nfunction aggregateSqlOperator(operator: RdfQueryFilter['operator']): string {\n switch (operator) {\n case '$eq':\n return '=';\n case '$ne':\n return '!=';\n case '$gt':\n return '>';\n case '$gte':\n return '>=';\n case '$lt':\n return '<';\n case '$lte':\n return '<=';\n default:\n throw new Error(`Unsupported PostgreSQL RDF-3X aggregate HAVING operator: ${operator}`);\n }\n}\n\nfunction patternEqualities(slotsByVariable: Map<string, PgPatternKey[]>): PgPatternEquality[] {\n const equalities: PgPatternEquality[] = [];\n for (const [variable, slots] of slotsByVariable) {\n const [first, ...rest] = slots;\n if (!first) continue;\n for (const slot of rest) {\n equalities.push({ variable, left: first, right: slot });\n }\n }\n return equalities;\n}\n\nfunction storagePlanMarkers(queryPlan: string[] | undefined): string[] {\n return (queryPlan ?? []).filter((entry) => (\n entry.startsWith('TextSearch(')\n || entry.startsWith('Rdf3x')\n || entry === 'GraphMembershipFilter'\n || entry === 'GraphPrefixMembershipFilter'\n || entry.startsWith('LexicalRange(')\n || entry.startsWith('NumericRange(')\n || entry.startsWith('TermIn(')\n || entry.startsWith('TermNotIn(')\n || entry.startsWith('TermType(')\n || entry.startsWith('Language(')\n || entry.startsWith('Datatype(')\n ));\n}\n\nfunction compilePatternForBinding(pattern: RdfQueryPattern, binding: RdfBindingRow): QuintPattern | null {\n const compiled: QuintPattern = {};\n for (const key of PATTERN_KEYS) {\n const value = pattern[key];\n if (!value) {\n continue;\n }\n if (isVariable(value)) {\n const bound = binding[value.variable];\n if (bound) {\n compiled[key] = bound;\n }\n continue;\n }\n compiled[key] = value;\n }\n return compiled;\n}\n\nfunction bindQuadPattern(pattern: RdfQueryPattern, binding: RdfBindingRow, value: Quad): RdfBindingRow | null {\n const next = { ...binding };\n for (const key of PATTERN_KEYS) {\n const patternValue = pattern[key];\n if (!isVariable(patternValue)) {\n continue;\n }\n const term = value[key] as Term;\n const existing = next[patternValue.variable];\n if (existing && !sameTerm(existing, term)) {\n return null;\n }\n next[patternValue.variable] = term;\n }\n return next;\n}\n\nfunction matchesQuadPattern(value: Quad, pattern: QuintPattern): boolean {\n return PATTERN_KEYS.every((key) => {\n const match = pattern[key];\n return !match || matchesTermPattern(value[key] as Term, key, match);\n });\n}\n\nfunction matchesTermPattern(term: Term, key: PgPatternKey, match: TermMatch): boolean {\n if (isTerm(match as any)) {\n return sameTerm(term, match as Term);\n }\n const operators = match as TermOperators;\n if (operators.$eq !== undefined && !sameTermOrLexical(term, operators.$eq)) return false;\n if (operators.$ne !== undefined && sameTermOrLexical(term, operators.$ne)) return false;\n if (operators.$in !== undefined && !operators.$in.some((candidate) => sameTermOrLexical(term, candidate))) return false;\n if (operators.$notIn !== undefined && operators.$notIn.some((candidate) => sameTermOrLexical(term, candidate))) return false;\n if (operators.$startsWith !== undefined && !term.value.startsWith(operators.$startsWith)) return false;\n if (operators.$contains !== undefined && !term.value.includes(operators.$contains)) return false;\n if (operators.$endsWith !== undefined && !term.value.endsWith(operators.$endsWith)) return false;\n if (operators.$regex !== undefined && !new RegExp(operators.$regex).test(term.value)) return false;\n if (operators.$strStartsWith !== undefined && !term.value.startsWith(operators.$strStartsWith)) return false;\n if (operators.$strContains !== undefined && !term.value.includes(operators.$strContains)) return false;\n if (operators.$strEndsWith !== undefined && !term.value.endsWith(operators.$strEndsWith)) return false;\n if (operators.$strRegex !== undefined && !new RegExp(operators.$strRegex).test(term.value)) return false;\n if (operators.$language !== undefined && !(term.termType === 'Literal' && term.language === operators.$language)) return false;\n if (operators.$notLanguage !== undefined && !(term.termType === 'Literal' && term.language !== operators.$notLanguage)) return false;\n if (operators.$langMatches !== undefined && !(term.termType === 'Literal' && langMatches(term.language, operators.$langMatches))) return false;\n if (operators.$datatype !== undefined && !(term.termType === 'Literal' && sameTerm(term.datatype, operators.$datatype))) return false;\n if (operators.$notDatatype !== undefined && !(term.termType === 'Literal' && !sameTerm(term.datatype, operators.$notDatatype))) return false;\n if (operators.$termType !== undefined && !matchesTermTypeForKey(term, key, operators.$termType)) return false;\n if (operators.$isNull !== undefined) return !operators.$isNull;\n for (const operator of ['$gt', '$gte', '$lt', '$lte'] as const) {\n const expected = operators[operator];\n if (expected === undefined) continue;\n const comparison = compareFilterValues(term, expected);\n if (operator === '$gt' && comparison <= 0) return false;\n if (operator === '$gte' && comparison < 0) return false;\n if (operator === '$lt' && comparison >= 0) return false;\n if (operator === '$lte' && comparison > 0) return false;\n }\n return true;\n}\n\nfunction orderQuads(values: Quad[], options?: QueryOptions): Quad[] {\n if (!options?.order?.length) {\n return values;\n }\n const directions = 'orderDirections' in options && Array.isArray((options as QueryOptions & { orderDirections?: Array<'asc' | 'desc'> }).orderDirections)\n ? (options as QueryOptions & { orderDirections?: Array<'asc' | 'desc'> }).orderDirections as Array<'asc' | 'desc'>\n : options.order.map(() => (options.reverse ? 'desc' : 'asc'));\n return [...values].sort((left, right) => {\n for (const [index, key] of (options.order ?? []).entries()) {\n const comparison = termToId(left[key] as any).localeCompare(termToId(right[key] as any));\n if (comparison !== 0) {\n return directions[index] === 'desc' ? -comparison : comparison;\n }\n }\n return 0;\n });\n}\n\nfunction matchesNewlyBoundFilters(binding: RdfBindingRow, previousBinding: RdfBindingRow, filters: RdfQueryFilter[]): boolean {\n const newlyBound = filters.filter((filter) => {\n const variables = filter.variable2 ? [filter.variable, filter.variable2] : [filter.variable];\n return variables.every((variableName) => binding[variableName])\n && variables.some((variableName) => !previousBinding[variableName]);\n });\n return matchesBindingFilters(binding, newlyBound);\n}\n\nfunction matchesBindingFilters(binding: RdfBindingRow, filters: RdfQueryFilter[]): boolean {\n return filters.every((filter) => matchesBindingFilter(binding, filter));\n}\n\nfunction matchesBindingFilter(binding: RdfBindingRow, filter: RdfQueryFilter): boolean {\n const value = binding[filter.variable];\n if (filter.operator === '$bound') {\n return Boolean(filter.value) ? Boolean(value) : !value;\n }\n if (!value) {\n return false;\n }\n const comparisonValue = filterOperandValue(value, filter.operand);\n switch (filter.operator) {\n case '$eq':\n if (filter.variable2) return compareVariableFilter(binding, comparisonValue, filter, (comparison) => comparison === 0);\n return filter.value !== undefined && sameTermOrLexical(comparisonValue, filter.value);\n case '$ne':\n if (filter.variable2) return compareVariableFilter(binding, comparisonValue, filter, (comparison) => comparison !== 0);\n return filter.value === undefined || !sameTermOrLexical(comparisonValue, filter.value);\n case '$gt':\n if (filter.variable2) return compareVariableFilter(binding, comparisonValue, filter, (comparison) => comparison > 0);\n return compareTermsForFilter(comparisonValue, filter.value) > 0;\n case '$gte':\n if (filter.variable2) return compareVariableFilter(binding, comparisonValue, filter, (comparison) => comparison >= 0);\n return compareTermsForFilter(comparisonValue, filter.value) >= 0;\n case '$lt':\n if (filter.variable2) return compareVariableFilter(binding, comparisonValue, filter, (comparison) => comparison < 0);\n return compareTermsForFilter(comparisonValue, filter.value) < 0;\n case '$lte':\n if (filter.variable2) return compareVariableFilter(binding, comparisonValue, filter, (comparison) => comparison <= 0);\n return compareTermsForFilter(comparisonValue, filter.value) <= 0;\n case '$in':\n return (filter.values ?? []).some((candidate) => sameTermOrLexical(comparisonValue, candidate));\n case '$notIn':\n return !(filter.values ?? []).some((candidate) => sameTermOrLexical(comparisonValue, candidate));\n case '$startsWith':\n return typeof filter.value === 'string' && filterStringValue(value, comparisonValue).startsWith(filter.value);\n case '$notStartsWith':\n return typeof filter.value === 'string' && !filterStringValue(value, comparisonValue).startsWith(filter.value);\n case '$contains':\n return typeof filter.value === 'string' && filterStringValue(value, comparisonValue).includes(filter.value);\n case '$notContains':\n return typeof filter.value === 'string' && !filterStringValue(value, comparisonValue).includes(filter.value);\n case '$endsWith':\n return typeof filter.value === 'string' && filterStringValue(value, comparisonValue).endsWith(filter.value);\n case '$notEndsWith':\n return typeof filter.value === 'string' && !filterStringValue(value, comparisonValue).endsWith(filter.value);\n case '$regex':\n return typeof filter.value === 'string' && new RegExp(filter.value, filter.flags).test(filterStringValue(value, comparisonValue));\n case '$notRegex':\n return typeof filter.value === 'string' && !new RegExp(filter.value, filter.flags).test(filterStringValue(value, comparisonValue));\n case '$termType':\n return typeof filter.value === 'string' && matchesTermType(value, filter.value);\n case '$notTermType':\n return typeof filter.value === 'string' && !matchesTermType(value, filter.value);\n case '$sameTerm': {\n const right = filter.variable2 ? binding[filter.variable2] : filter.value;\n return Boolean(right && isTerm(right as any) && sameTerm(value, right as Term));\n }\n case '$notSameTerm': {\n const right = filter.variable2 ? binding[filter.variable2] : filter.value;\n return Boolean(right && isTerm(right as any) && !sameTerm(value, right as Term));\n }\n case '$lang':\n return typeof filter.value === 'string' && value.termType === 'Literal' && value.language === filter.value;\n case '$notLang':\n return typeof filter.value === 'string' && value.termType === 'Literal' && value.language !== filter.value;\n case '$langIn':\n return value.termType === 'Literal' && (filter.values ?? []).some((candidate) => typeof candidate === 'string' && value.language === candidate);\n case '$notLangIn':\n return value.termType === 'Literal' && !(filter.values ?? []).some((candidate) => typeof candidate === 'string' && value.language === candidate);\n case '$langMatches':\n return typeof filter.value === 'string' && value.termType === 'Literal' && langMatches(value.language, filter.value);\n case '$notLangMatches':\n return typeof filter.value === 'string' && value.termType === 'Literal' && !langMatches(value.language, filter.value);\n case '$datatype':\n return filter.value !== undefined && value.termType === 'Literal' && sameTermOrLexical(value.datatype, filter.value);\n case '$notDatatype':\n return filter.value !== undefined && value.termType === 'Literal' && !sameTermOrLexical(value.datatype, filter.value);\n case '$datatypeIn':\n return value.termType === 'Literal' && (filter.values ?? []).some((candidate) => sameTermOrLexical(value.datatype, candidate));\n case '$notDatatypeIn':\n return value.termType === 'Literal' && !(filter.values ?? []).some((candidate) => sameTermOrLexical(value.datatype, candidate));\n default: {\n const exhaustive: never = filter.operator;\n throw new Error(`Unsupported RDF facts filter operator: ${exhaustive}`);\n }\n }\n}\n\nfunction compareVariableFilter(\n binding: RdfBindingRow,\n comparisonValue: Term | number | string,\n filter: RdfQueryFilter,\n predicate: (comparison: number) => boolean,\n): boolean {\n if (!filter.variable2) {\n return false;\n }\n const right = binding[filter.variable2];\n if (!right) {\n return false;\n }\n return predicate(compareFilterValues(comparisonValue, filterOperandValue(right, filter.operand)));\n}\n\nfunction filterOperandValue(value: Term, operand: RdfQueryFilter['operand']): Term | number | string {\n switch (operand) {\n case 'stringLength':\n return value.value.length;\n case 'stringValue':\n return value.value;\n case 'lowerStringValue':\n return value.value.toLowerCase();\n case 'upperStringValue':\n return value.value.toUpperCase();\n default:\n return value;\n }\n}\n\nfunction filterStringValue(value: Term, comparisonValue: Term | number | string): string {\n return typeof comparisonValue === 'string' ? comparisonValue : value.value;\n}\n\nfunction sameTerm(left: Term, right: Term): boolean {\n return termToId(left as any) === termToId(right as any);\n}\n\nfunction sameTermOrLexical(left: Term | number | string, right: RdfQueryFilterValue | TermOperators['$eq']): boolean {\n if (typeof left === 'number') {\n if (isNumericFilterValue(right)) {\n return left === rdfNumericValue(isTerm(right as any) ? (right as Term).value : String(right));\n }\n return String(left) === String(right);\n }\n if (typeof left === 'string') {\n return left === (isTerm(right as any) ? (right as Term).value : String(right));\n }\n return isTerm(right as any) ? sameTerm(left, right as Term) : left.value === String(right);\n}\n\nfunction compareTermsForFilter(left: Term | number | string, right: RdfQueryFilterValue | undefined): number {\n if (right === undefined) {\n return 1;\n }\n return compareFilterValues(left, right);\n}\n\nfunction compareFilterValues(left: Term | number | string, right: Term | number | string | boolean): number {\n if (typeof left === 'number') {\n if (isNumericFilterValue(right)) {\n return left - rdfNumericValue(isTerm(right as any) ? (right as Term).value : String(right));\n }\n return String(left).localeCompare(String(right));\n }\n if (typeof left === 'string') {\n return left.localeCompare(isTerm(right as any) ? (right as Term).value : String(right));\n }\n if (isRdfNumericTerm(left) && isNumericFilterValue(right)) {\n return rdfNumericValue(left.value) - rdfNumericValue(isTerm(right as any) ? (right as Term).value : String(right));\n }\n return left.value.localeCompare(isTerm(right as any) ? (right as Term).value : String(right));\n}\n\nfunction matchesTermTypeForKey(term: Term, key: PgPatternKey, expected: string): boolean {\n return termKindsForPatternKey(key).includes(expected as RdfTermKind) && matchesTermType(term, expected);\n}\n\nfunction matchesTermType(term: Term, expected: string): boolean {\n switch (expected) {\n case 'iri':\n return term.termType === 'NamedNode';\n case 'blank':\n return term.termType === 'BlankNode';\n case 'literal':\n return term.termType === 'Literal';\n case 'numeric':\n return isRdfNumericTerm(term);\n default:\n return false;\n }\n}\n\nfunction langMatches(languageTag: string, languageRange: string): boolean {\n if (!languageTag) {\n return false;\n }\n if (languageRange === '*') {\n return true;\n }\n const normalizedTag = languageTag.toLowerCase();\n const normalizedRange = languageRange.toLowerCase();\n return normalizedTag === normalizedRange || normalizedTag.startsWith(`${normalizedRange}-`);\n}\n\nfunction isNumericFilterValue(value: RdfQueryFilterValue | TermOperators['$eq']): boolean {\n return isTerm(value as any)\n ? isRdfNumericTerm(value as Term)\n : (typeof value === 'number' || (typeof value === 'string' && isFiniteNumericLexical(value)));\n}\n\nfunction joinValuesSource(input: RdfBindingRow[], source: RdfValuesBindingSource): RdfBindingRow[] {\n const output: RdfBindingRow[] = [];\n for (const binding of input) {\n for (const row of source.rows) {\n const next = mergeTupleValuesBinding(binding, source.variables, row);\n if (next) {\n output.push(next);\n }\n }\n }\n return output;\n}\n\nfunction mergeTupleValuesBinding(binding: RdfBindingRow, variables: string[], row: RdfBindingRow): RdfBindingRow | null {\n const next = { ...binding };\n for (const variableName of variables) {\n const value = row[variableName];\n if (!value) {\n continue;\n }\n const existing = next[variableName];\n if (existing && !sameTerm(existing, value)) {\n return null;\n }\n next[variableName] = value;\n }\n return next;\n}\n\nfunction projectBinding(binding: RdfBindingRow, select: string[]): RdfBindingRow {\n const projected: RdfBindingRow = {};\n for (const variableName of select) {\n const value = binding[variableName];\n if (value) {\n projected[variableName] = value;\n }\n }\n return projected;\n}\n\nfunction compareBindings(left: RdfBindingRow, right: RdfBindingRow, orderBy: NonNullable<RdfQuery['orderBy']>): number {\n for (const order of orderBy) {\n const leftValue = left[order.variable] ? termToId(left[order.variable] as any) : '';\n const rightValue = right[order.variable] ? termToId(right[order.variable] as any) : '';\n const comparison = leftValue.localeCompare(rightValue);\n if (comparison !== 0) {\n return order.direction === 'desc' ? -comparison : comparison;\n }\n }\n return 0;\n}\n\nfunction bindingKey(binding: RdfBindingRow, variables?: string[]): string {\n return [...(variables ?? Object.keys(binding))]\n .sort()\n .map((key) => {\n const value = binding[key];\n return `${key}=${value ? termToId(value as any) : '__UNBOUND__'}`;\n })\n .join('\\u001f');\n}\n\nfunction distinctBindings(bindings: RdfBindingRow[]): RdfBindingRow[] {\n const seen = new Set<string>();\n const output: RdfBindingRow[] = [];\n for (const binding of bindings) {\n const key = bindingKey(binding);\n if (seen.has(key)) {\n continue;\n }\n seen.add(key);\n output.push(binding);\n }\n return output;\n}\n\nfunction aggregateBindings(bindings: RdfBindingRow[], aggregates: RdfQueryAggregate[]): { binding: RdfBindingRow; firstCount: number } {\n const binding: RdfBindingRow = {};\n let firstCount = 0;\n aggregates.forEach((aggregate, index) => {\n const count = aggregate.type === 'count'\n ? countBindings(bindings, aggregate.variable, aggregate.distinct, aggregate.distinctVariables)\n : 0;\n if (index === 0) {\n firstCount = count;\n }\n const term = aggregateLiteral(bindings, aggregate);\n if (term) {\n binding[aggregate.as] = term;\n }\n });\n return { binding, firstCount };\n}\n\nfunction groupAggregateBindings(bindings: RdfBindingRow[], groupBy: string[], aggregates: RdfQueryAggregate[]): RdfBindingRow[] {\n const groups = new Map<string, RdfBindingRow[]>();\n for (const binding of bindings) {\n const key = groupBy.map((variableName) => {\n const value = binding[variableName];\n return value ? termToId(value as any) : '__UNBOUND__';\n }).join('\\u001f');\n groups.set(key, [...(groups.get(key) ?? []), binding]);\n }\n return [...groups.values()].map((groupBindings) => {\n const first = groupBindings[0];\n const grouped: RdfBindingRow = {};\n for (const variableName of groupBy) {\n if (first[variableName]) {\n grouped[variableName] = first[variableName];\n }\n }\n for (const aggregate of aggregates) {\n const term = aggregateLiteral(groupBindings, aggregate);\n if (term) {\n grouped[aggregate.as] = term;\n }\n }\n return grouped;\n });\n}\n\nfunction countBindings(bindings: RdfBindingRow[], variable?: string, distinct?: boolean, distinctVariables?: string[]): number {\n if (!distinct) {\n return variable ? bindings.filter((binding) => binding[variable]).length : bindings.length;\n }\n if (!variable) {\n return new Set(bindings.map((binding) => bindingKey(binding, distinctVariables))).size;\n }\n return new Set(bindings\n .map((binding) => binding[variable])\n .filter((term): term is Term => Boolean(term))\n .map((term) => termToId(term as any))).size;\n}\n\nfunction aggregateLiteral(bindings: RdfBindingRow[], aggregate: RdfQueryAggregate): Term | undefined {\n if (aggregate.type === 'count') {\n return countLiteral(countBindings(bindings, aggregate.variable, aggregate.distinct, aggregate.distinctVariables));\n }\n const values = numericAggregateValues(bindings, aggregate.variable, aggregate.distinct);\n if (values.length === 0) {\n return aggregate.type === 'sum' ? decimalLiteral(0) : undefined;\n }\n switch (aggregate.type) {\n case 'sum':\n return decimalLiteral(values.reduce((sum, value) => sum + value, 0));\n case 'avg':\n return decimalLiteral(values.reduce((sum, value) => sum + value, 0) / values.length);\n case 'min':\n return decimalLiteral(Math.min(...values));\n case 'max':\n return decimalLiteral(Math.max(...values));\n default: {\n const exhaustive: never = aggregate.type;\n throw new Error(`Unsupported RDF facts aggregate type: ${exhaustive}`);\n }\n }\n}\n\nfunction numericAggregateValues(bindings: RdfBindingRow[], variable?: string, distinct?: boolean): number[] {\n if (!variable) {\n return [];\n }\n const values: number[] = [];\n const seen = new Set<string>();\n for (const binding of bindings) {\n const term = binding[variable];\n if (!term || !isRdfNumericTerm(term)) {\n continue;\n }\n if (distinct) {\n const key = termToId(term as any);\n if (seen.has(key)) {\n continue;\n }\n seen.add(key);\n }\n values.push(rdfNumericValue(term.value));\n }\n return values;\n}\n\nfunction countLiteral(count: number): Term {\n return DataFactory.literal(String(count), DataFactory.namedNode(XSD_INTEGER)) as Term;\n}\n\nfunction decimalLiteral(value: number): Term {\n return DataFactory.literal(String(value), DataFactory.namedNode(XSD_DECIMAL)) as Term;\n}\n\nfunction evaluateBindExpression(expression: RdfBindExpression, binding: RdfBindingRow): Term | undefined {\n switch (expression.type) {\n case 'term':\n return expression.term;\n case 'variable':\n return binding[expression.variable];\n case 'stringValue': {\n const value = binding[expression.variable];\n return value ? DataFactory.literal(value.value) as Term : undefined;\n }\n case 'stringLength': {\n const value = binding[expression.variable];\n return value ? countLiteral(value.value.length) : undefined;\n }\n case 'lowerCase': {\n const value = evaluateBindExpression(expression.expression, binding);\n return value ? DataFactory.literal(value.value.toLocaleLowerCase('en-US')) as Term : undefined;\n }\n case 'upperCase': {\n const value = evaluateBindExpression(expression.expression, binding);\n return value ? DataFactory.literal(value.value.toLocaleUpperCase('en-US')) as Term : undefined;\n }\n case 'coalesce':\n for (const item of expression.expressions) {\n const value = evaluateBindExpression(item, binding);\n if (value) {\n return value;\n }\n }\n return undefined;\n case 'if':\n return matchesBindingFilters(binding, expression.condition)\n ? evaluateBindExpression(expression.then, binding)\n : evaluateBindExpression(expression.else, binding);\n case 'substring': {\n const value = evaluateBindExpression(expression.expression, binding);\n const startTerm = evaluateBindExpression(expression.start, binding);\n const start = startTerm ? finiteBindNumber(startTerm) : undefined;\n const lengthTerm = expression.length ? evaluateBindExpression(expression.length, binding) : undefined;\n const length = lengthTerm ? finiteBindNumber(lengthTerm) : undefined;\n if (!value || start === undefined || (expression.length && length === undefined)) {\n return undefined;\n }\n const startIndex = Math.max(0, Math.round(start) - 1);\n const lengthValue = length === undefined ? undefined : Math.max(0, Math.round(length));\n return DataFactory.literal(value.value.slice(startIndex, lengthValue === undefined ? undefined : startIndex + lengthValue)) as Term;\n }\n case 'concat': {\n const values = expression.expressions.map((item) => evaluateBindExpression(item, binding));\n return values.every((value): value is Term => Boolean(value))\n ? DataFactory.literal(values.map((value) => value.value).join('')) as Term\n : undefined;\n }\n case 'iri': {\n const value = evaluateBindExpression(expression.expression, binding);\n if (!value) {\n return undefined;\n }\n try {\n return DataFactory.namedNode(new URL(value.value, expression.base).href) as Term;\n } catch {\n return undefined;\n }\n }\n case 'strdt': {\n const lexical = evaluateBindExpression(expression.lexical, binding);\n const datatype = evaluateBindExpression(expression.datatype, binding);\n if (!lexical || !datatype || datatype.termType !== 'NamedNode') {\n return undefined;\n }\n return DataFactory.literal(lexical.value, DataFactory.namedNode(datatype.value)) as Term;\n }\n case 'strlang': {\n const lexical = evaluateBindExpression(expression.lexical, binding);\n const language = evaluateBindExpression(expression.language, binding);\n if (!lexical || !language) {\n return undefined;\n }\n return DataFactory.literal(lexical.value, language.value) as Term;\n }\n default: {\n const exhaustive: never = expression;\n throw new Error(`Unsupported RDF facts BIND expression: ${JSON.stringify(exhaustive)}`);\n }\n }\n}\n\nfunction finiteBindNumber(term: Term): number | undefined {\n if (term.termType !== 'Literal') {\n return undefined;\n }\n const value = Number(term.value);\n return Number.isFinite(value) ? value : undefined;\n}\n\nfunction describeBind(bind: RdfQueryBind): string {\n return `?${bind.variable}:=${describeBindExpression(bind.expression)}`;\n}\n\nfunction describeBindExpression(expression: RdfBindExpression): string {\n switch (expression.type) {\n case 'term':\n return termToId(expression.term as any);\n case 'variable':\n return `?${expression.variable}`;\n case 'stringValue':\n return `STR(?${expression.variable})`;\n case 'stringLength':\n return `STRLEN(?${expression.variable})`;\n case 'lowerCase':\n return `LCASE(${describeBindExpression(expression.expression)})`;\n case 'upperCase':\n return `UCASE(${describeBindExpression(expression.expression)})`;\n case 'coalesce':\n return `COALESCE(${expression.expressions.map(describeBindExpression).join(',')})`;\n case 'if':\n return `IF(${expression.condition.map(describeFilter).join('&')},${describeBindExpression(expression.then)},${describeBindExpression(expression.else)})`;\n case 'substring':\n return `SUBSTR(${[\n describeBindExpression(expression.expression),\n describeBindExpression(expression.start),\n expression.length ? describeBindExpression(expression.length) : undefined,\n ].filter(Boolean).join(',')})`;\n case 'concat':\n return `CONCAT(${expression.expressions.map(describeBindExpression).join(',')})`;\n case 'iri':\n return `IRI(${describeBindExpression(expression.expression)})`;\n case 'strdt':\n return `STRDT(${describeBindExpression(expression.lexical)},${describeBindExpression(expression.datatype)})`;\n case 'strlang':\n return `STRLANG(${describeBindExpression(expression.lexical)},${describeBindExpression(expression.language)})`;\n default: {\n const exhaustive: never = expression;\n return JSON.stringify(exhaustive);\n }\n }\n}\n\nfunction uniqueStrings(values: string[]): string[] {\n return [...new Set(values)];\n}\n\nfunction uniqueNumbers(values: number[]): number[] {\n return [...new Set(values)];\n}\n\nfunction joinSourceVariables(source: PgJoinSource): string[] {\n return uniqueStrings(Object.values(source.entry.variables).filter((value): value is string => Boolean(value)));\n}\n\nfunction joinSolutionMappingKeyExpression(variableAliases: Map<string, string>, variables?: string[]): string {\n const variableNames = uniqueStrings(variables ?? [...variableAliases.keys()]);\n if (variableNames.length === 0) return '1';\n return variableNames.map((variableName) => {\n const alias = variableAliases.get(variableName);\n if (!alias) throw new Error(`Postgres RDF-3X COUNT(DISTINCT *) cannot read unbound variable: ${variableName}`);\n return `source.${alias}`;\n }).join(` || ':' || `);\n}\n\nfunction pairProjectionRowTotal(rows: Record<Rdf3xPairProjectionName, number>): number {\n return Object.values(rows).reduce((sum, count) => sum + count, 0);\n}\n\nfunction termProjectionRowTotal(rows: Record<Rdf3xTermProjectionName, number>): number {\n return Object.values(rows).reduce((sum, count) => sum + count, 0);\n}\n\nfunction sumSpaceObjects(objects: RdfIndexSpaceObject[], kind: RdfIndexSpaceObject['kind']): number {\n return objects\n .filter((object) => object.kind === kind)\n .reduce((sum, object) => sum + object.bytes, 0);\n}\n\nconst INTEGER_RESULT_KEYS = new Set([\n 'id',\n 'graph_id',\n 'subject_id',\n 'predicate_id',\n 'object_id',\n 'source_file_id',\n 'source_line_no',\n 'datatype_id',\n 'count',\n 'term_count',\n 'quad_count',\n 'source_count',\n 'graph_count',\n]);\nconst INTEGER_ALIAS_RESULT_KEY = /^(?:v|a)\\d+$/;\n\nfunction uniqueQuads(quads: Quad[]): Quad[] {\n const seen = new Set<string>();\n const result: Quad[] = [];\n for (const value of quads) {\n const key = [\n value.graph.termType,\n value.graph.value,\n value.subject.termType,\n value.subject.value,\n value.predicate.termType,\n value.predicate.value,\n value.object.termType,\n value.object.value,\n value.object.termType === 'Literal' ? value.object.language : '',\n value.object.termType === 'Literal' ? value.object.datatype.value : '',\n ].join('\\u001f');\n if (!seen.has(key)) {\n seen.add(key);\n result.push(value);\n }\n }\n return result;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"PostgresRdfEngine.js","sourceRoot":"","sources":["../../../src/storage/rdf/PostgresRdfEngine.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash, randomUUID } from 'node:crypto';\nimport { DataFactory, termToId } from 'n3';\nimport type { Quad, Term } from '@rdfjs/types';\nimport { PGlite } from '@electric-sql/pglite';\nimport { getLoggerFor } from 'global-logger-factory';\nimport { getSharedPool, releaseSharedPool } from '../database/PostgresPoolManager';\nimport { RDF_TERM_VALUE_HEAD_LENGTH, rdfTermValueHead } from './RdfTermDictionary';\nimport { isFiniteNumericLexical, isRdfNumericDatatype, isRdfNumericTerm, rdfNumericValue } from './RdfTermSemantics';\nimport { rdfSubjectStarJoinKey, rdfSubjectStarJoinPlanMarker } from './RdfJoinShape';\nimport { describeFusionRankPlan } from './RdfFusionRankPlan';\nimport { RdfTextIndex } from './RdfTextIndex';\nimport { RdfVectorIndex } from './RdfVectorIndex';\nimport { PostgresRdfTextIndex, type PostgresRdfTextIndexOptions } from './PostgresRdfTextIndex';\nimport { PostgresRdfVectorIndex, type PostgresRdfVectorIndexOptions } from './PostgresRdfVectorIndex';\nimport { NativeSparqlExecutionError } from './RdfSparqlAdapter';\nimport {\n RDF3X_GRAPH_PROJECTION_TABLE,\n RDF3X_PAIR_PROJECTION_TABLE_BY_NAME,\n RDF3X_TERM_PROJECTION_TABLE_BY_NAME,\n} from './Rdf3xSchema';\nimport type {\n RdfBindingRow,\n RdfDerivedIndexMaintenanceResult,\n RdfDerivedIndexRefreshOptions,\n RdfDerivedIndexRefreshResult,\n RdfEngineColdStartPhaseStats,\n RdfEngineColdStartStats,\n RdfEngineLifecycleStats,\n RdfDerivedCacheStats,\n RdfDerivedCacheEvictionStats,\n RdfDerivedCacheScopeEntry,\n RdfDerivedCacheScopeStatsOptions,\n RdfSlowQueryDerivedCacheExplain,\n RdfEngineLike,\n RdfEngineStorageStats,\n RdfStorageStatsOptions,\n RdfCardinalityDistributions,\n RdfCardinalityTerm,\n RdfIndexMetrics,\n RdfIndexPutOptions,\n RdfIndexSpaceObject,\n RdfIndexStats,\n RdfLiteralDatatypeDistribution,\n RdfBoundedPath,\n RdfBoundedPathSearchOptions,\n RdfBoundedPathSearchResult,\n RdfPathEdgeDirection,\n RdfMaterializedViewActivationInput,\n RdfMaterializedViewActivationResult,\n RdfMaterializedResultCacheStats,\n RdfMaterializedViewBindingSource,\n RdfMaterializedViewBuildInput,\n RdfMaterializedViewBuildResult,\n RdfMaterializedViewReadResult,\n RdfSchemaExplorerOptions,\n RdfSchemaExplorerResult,\n RdfSchemaExplorerTermEntry,\n RdfTextChunkInput,\n RdfTextIndexLike,\n RdfTextIndexOptions,\n RdfTextSearchOptions,\n RdfTextSearchPattern,\n RdfTextSearchResult,\n RdfTextSourceInput,\n RdfQuery,\n RdfQueryCacheExplain,\n RdfQueryMetrics,\n RdfQueryPlannerExplain,\n RdfQueryPlannerNativeOperatorRejection,\n RdfQueryResultCacheStats,\n RdfQueryTemplateCacheStats,\n RdfAccessControlOverrideIndexStats,\n RdfQueryResult,\n RdfQueryTemplateCacheExplain,\n RdfPlannerStatsRefreshResult,\n RdfPgCustomIndexStats,\n RdfPgAccelerationProfile,\n RdfPgAccelerationProvider,\n RdfPgAccelerationStats,\n RdfSlowQueryStats,\n RdfSlowQueryStatsEntry,\n RdfPatternQuery,\n RdfQueryFilter,\n RdfQueryPattern,\n RdfQueryPatternKey,\n RdfQueryTermPattern,\n RdfQueryCacheScope,\n RdfQueryCacheScopeDescriptor,\n RdfQueryMaterializedResultOptions,\n RdfQueryFilterValue,\n RdfQueryAggregate,\n RdfQueryBind,\n RdfBindExpression,\n RdfValuesBindingSource,\n RdfOptionalQueryGroup,\n RdfUnionQueryBranch,\n RdfMinusQueryGroup,\n RdfExistsQueryGroup,\n RdfQuadIndexScanResult,\n RdfQuadScanOptions,\n RdfSlotTermKeyRange,\n RdfSourceInput,\n RdfVectorChunkInput,\n RdfVectorIndexLike,\n RdfVectorIndexOptions,\n RdfVectorSearchOptions,\n RdfVectorSearchPattern,\n RdfVectorSearchResult,\n RdfVectorSourceInput,\n Rdf3xIndexStats,\n Rdf3xObjectRangePattern,\n Rdf3xObjectTextSearchPattern,\n Rdf3xPairProjectionName,\n Rdf3xTermMetadataPattern,\n Rdf3xTermProjectionName,\n Rdf3xTermTypePatternValue,\n RdfBulkLoadStats,\n RdfQueryPlannerHistogramHint,\n RdfTermRewriteInput,\n RdfTermRewriteResult,\n RdfTermRewriteSkippedTerm,\n RdfTermKind,\n RdfNativeSparqlQueryOptions,\n RdfNativeSparqlResult,\n} from './types';\nimport type { QueryOptions, QuintPattern, TermMatch, TermName, TermOperators } from '../quint/types';\nimport { isTerm } from '../quint/types';\n\nconst { namedNode, quad } = DataFactory;\nconst XSD_STRING = 'http://www.w3.org/2001/XMLSchema#string';\nconst XSD_INTEGER = 'http://www.w3.org/2001/XMLSchema#integer';\nconst XSD_DECIMAL = 'http://www.w3.org/2001/XMLSchema#decimal';\nconst RDF_LANG_STRING = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#langString';\nconst RDF_TYPE = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type';\nconst POSTGRES_RDF_SCHEMA_VERSION = 1;\nconst POSTGRES_RDF3X_SCHEMA_VERSION = 1;\nconst PG_STRING_ESCAPE = '\\u001f';\nconst POSTGRES_RDF_WRITE_RETRY_DELAYS_MS = [100, 250, 500, 1000, 2000];\nconst RETRYABLE_POSTGRES_WRITE_ERROR_CODES = new Set(['40P01', '40001']);\nconst RDF_QUERY_RESULT_CACHE_TABLE = 'rdf_query_result_cache';\nconst RDF_MATERIALIZED_RESULT_CACHE_TABLE = 'rdf_materialized_result_cache';\nconst RDF_MATERIALIZED_VIEW_TABLE = 'rdf_materialized_views';\nconst RDF_MATERIALIZED_VIEW_CELL_TABLE = 'rdf_materialized_view_cells';\nconst RDF_DIRTY_SOURCE_TABLE = 'rdf_dirty_sources';\nconst RDF_MAINTENANCE_LEASE_TABLE = 'rdf_maintenance_leases';\nconst PG_PLANNER_SAMPLE_BINDINGS = 16;\nconst PG_BOUND_SOURCE_EXACT_SEARCH_MAX = 32;\nconst PG_FACTS_BATCH_BOUND_TERM_MIN_ROWS = 32;\nconst PG_SEARCH_CANDIDATE_BUDGET_MIN = 256;\nconst PG_SEARCH_CANDIDATE_BUDGET_MAX = 4_096;\nconst PG_SEARCH_CANDIDATE_BUDGET_MULTIPLIER = 32;\nconst RDF_ACCESS_CONTROL_OVERRIDE_TABLE = 'rdf_access_control_overrides';\nconst RDF_TERMS_TABLE = 'rdf_terms';\nconst RDF_DERIVED_INDEX_MAINTENANCE_LEASE = 'rdf-derived-indexes';\nconst RDF3X_DIRTY_GRAPH_TABLE = 'rdf3x_dirty_graphs';\nconst RDF3X_DIRTY_PAIR_TABLE = 'rdf3x_dirty_pairs';\nconst RDF3X_DIRTY_TERM_TABLE = 'rdf3x_dirty_terms';\nconst RDF_QUERY_RESULT_CACHE_KEY_VERSION = 2;\nconst RDF_MATERIALIZED_RESULT_CACHE_KEY_VERSION = 1;\nconst RDF_QUERY_TEMPLATE_CACHE_KEY_VERSION = 1;\nconst DEFAULT_QUERY_RESULT_CACHE_MAX_ENTRIES = 512;\nconst DEFAULT_QUERY_RESULT_CACHE_TTL_MS = 24 * 60 * 60 * 1000;\nconst DEFAULT_QUERY_RESULT_CACHE_MAX_BYTES = 64 * 1024 * 1024;\nconst DEFAULT_MATERIALIZED_RESULT_CACHE_MAX_ENTRIES = 256;\nconst DEFAULT_MATERIALIZED_RESULT_CACHE_TTL_MS = 24 * 60 * 60 * 1000;\nconst DEFAULT_MATERIALIZED_RESULT_CACHE_MAX_BYTES = 64 * 1024 * 1024;\nconst DEFAULT_RDF_MATERIALIZED_VIEW_VERSION = 'default';\nconst DEFAULT_QUERY_TEMPLATE_CACHE_MAX_ENTRIES = 512;\nconst DEFAULT_QUERY_TEMPLATE_CACHE_TTL_MS = 24 * 60 * 60 * 1000;\nconst MAX_COMPILED_SQL_TEMPLATES_PER_QUERY_TEMPLATE = 8;\nconst DEFAULT_DERIVED_CACHE_MAX_BYTES = 0;\nconst DEFAULT_DERIVED_CACHE_SCOPE_MAX_BYTES = 0;\nconst DEFAULT_DERIVED_CACHE_SCOPE_STATS_MAX_ENTRIES = 10;\nconst MAX_DERIVED_CACHE_SCOPE_STATS_ENTRIES = 100;\nconst POSTGRES_RDF_BULK_UNNEST_CHUNK_SIZE = 5000;\nconst POSTGRES_RDF_BULK_STAGING_MIN_ROWS = 5001;\nconst DEFAULT_QUERY_EXPLAIN_SLOW_MS = 1_000;\nconst DEFAULT_QUERY_EXPLAIN_LARGE_SCAN_ROWS = 100_000;\nconst DEFAULT_QUERY_EXPLAIN_SCAN_AMPLIFICATION = 100;\nconst DEFAULT_QUERY_EXPLAIN_SLOW_QUERY_MAX_ENTRIES = 20;\nconst PLANNER_HISTOGRAM_CACHE_TTL_MS = 5_000;\nconst PLANNER_HISTOGRAM_HINT_LIMIT = 100;\nconst POSTGRES_RDF_SESSION_OPTIONS = '-c jit=off';\nconst RESULT_CACHE_REQUIRED_CAPABILITIES = [\n 'cache.result',\n];\nconst ACL_ACCESS_TO = 'http://www.w3.org/ns/auth/acl#accessTo';\nconst ACL_DEFAULT = 'http://www.w3.org/ns/auth/acl#default';\nconst ACP_ACCESS_CONTROL = 'http://www.w3.org/ns/solid/acp#accessControl';\nconst ACP_APPLY = 'http://www.w3.org/ns/solid/acp#apply';\nconst PG_ENGINE_SQL_HOT_OPERATOR_CAPABILITIES = [\n 'scan.exact_graph',\n 'scan.graph_prefix',\n 'scan.term_in',\n 'join.required_bgp',\n 'join.values',\n 'aggregate.count',\n 'aggregate.numeric',\n] as const;\nconst HOT_OPERATOR_REQUIRED_CAPABILITIES = [\n ...PG_ENGINE_SQL_HOT_OPERATOR_CAPABILITIES,\n ...RESULT_CACHE_REQUIRED_CAPABILITIES,\n];\nconst CUSTOM_INDEX_REQUIRED_CAPABILITIES = [\n 'index.xpod_rdf_perm',\n];\nconst PG_NATIVE_CUSTOM_INDEX_OPERATOR_CAPABILITIES = [\n 'aggregate.bgp_count',\n 'aggregate.bgp_group_count',\n 'aggregate.bgp_numeric',\n 'aggregate.subject_star_count',\n 'index.xpod_rdf_perm.scan_any',\n 'index.xpod_rdf_perm.scan_any.limit',\n 'index.xpod_rdf_perm.count_any',\n 'index.xpod_rdf_perm.distinct_any',\n 'join.required_bgp.native',\n 'join.required_bgp.order_page.native',\n 'join.required_bgp.order_page.topn.native',\n 'join.slot_filter.native',\n 'join.subject_star',\n 'join.values.native',\n 'join.values.limit.native',\n] as const;\nconst SQL_ABI_ALLOWED_CAPABILITIES = [\n 'cache.result',\n];\nconst NATIVE_EXTENSION_ONLY_CAPABILITIES = [\n 'aggregate.bgp_count',\n 'aggregate.bgp_group_count',\n 'aggregate.bgp_numeric',\n 'aggregate.subject_star_count',\n 'index.xpod_rdf_perm',\n 'index.xpod_rdf_perm.count',\n 'index.xpod_rdf_perm.count_any',\n 'index.xpod_rdf_perm.distinct',\n 'index.xpod_rdf_perm.distinct.stream',\n 'index.xpod_rdf_perm.distinct_any',\n 'index.xpod_rdf_perm.probe',\n 'index.xpod_rdf_perm.scan',\n 'index.xpod_rdf_perm.scan.limit',\n 'index.xpod_rdf_perm.scan_any',\n 'index.xpod_rdf_perm.scan_any.limit',\n 'join.required_bgp.limit.native',\n 'join.required_bgp.native',\n 'join.required_bgp.order_page.native',\n 'join.required_bgp.order_page.topn.native',\n 'join.slot_filter.native',\n 'join.subject_star',\n 'join.values.limit.native',\n 'join.values.native',\n];\nconst RDF_PLANNER_STATS_TABLES = [\n 'rdf_terms',\n 'rdf_sources',\n 'rdf_quads',\n RDF3X_GRAPH_PROJECTION_TABLE,\n ...Object.values(RDF3X_PAIR_PROJECTION_TABLE_BY_NAME),\n ...Object.values(RDF3X_TERM_PROJECTION_TABLE_BY_NAME),\n] as const;\n\ntype PgPatternKey = 'graph' | 'subject' | 'predicate' | 'object';\ntype PgTermKey = 'subject' | 'predicate' | 'object';\ntype PgIndexedColumn = 'graph_id' | 'subject_id' | 'predicate_id' | 'object_id';\ntype PgPermutationName = 'SPO' | 'SOP' | 'PSO' | 'POS' | 'OSP' | 'OPS';\n\ninterface PgPermutation {\n name: PgPermutationName;\n indexName: string;\n columns: PgIndexedColumn[];\n}\n\ninterface PgPairProjection {\n name: Rdf3xPairProjectionName;\n table: string;\n columns: [PgIndexedColumn, PgIndexedColumn];\n remainder: PgIndexedColumn;\n}\n\ninterface PgTermProjection {\n name: Rdf3xTermProjectionName;\n table: string;\n column: PgIndexedColumn;\n}\n\ninterface PgResolvedPattern {\n ids: Partial<Record<PgPatternKey, number>>;\n idSets: Partial<Record<PgPatternKey, number[]>>;\n excludedIdSets: Partial<Record<PgPatternKey, number[]>>;\n termFilters: Partial<Record<PgPatternKey, PgResolvedTermFilter>>;\n graphPrefix?: string;\n graphPrefixIds?: number[];\n objectRange?: PgObjectRange;\n unresolved?: PgPatternKey;\n}\n\ninterface PgResolvedTermFilter {\n termType?: Rdf3xTermTypePatternValue;\n language?: string;\n notLanguage?: string;\n langMatches?: string;\n datatype?: PgResolvedDatatypeFilter;\n notDatatype?: PgResolvedDatatypeFilter;\n textSearches?: PgTextSearch[];\n}\n\ntype PgResolvedDatatypeFilter =\n | { kind: 'id'; id: number }\n | { kind: 'xsd-string' }\n | { kind: 'unknown' };\n\ninterface PgTextSearch {\n operator: '$contains' | '$endsWith';\n value: string;\n}\n\ninterface PgObjectRange {\n mode: 'numeric' | 'lexical';\n min?: number | string;\n minInclusive?: boolean;\n max?: number | string;\n maxInclusive?: boolean;\n}\n\ninterface PgQuadIdRow {\n graph_id: number;\n subject_id: number;\n predicate_id: number;\n object_id: number;\n}\n\ninterface PgDirtyProjectionStats {\n graphs: number;\n pairs: number;\n terms: number;\n}\n\ntype PgDirtySourceOperation = 'upsert' | 'delete';\n\ninterface PgCompiledScan {\n sql: string;\n params: unknown[];\n countSql: string;\n countParams: unknown[];\n indexChoice: string;\n queryPlan: string[];\n}\n\ninterface PgCompiledJoinPattern {\n pattern: QuintPattern;\n variables: Partial<Record<PgPatternKey, string>>;\n equalities: PgPatternEquality[];\n}\n\ninterface PgCompiledValuesSource {\n variables: string[];\n rows: number[][];\n}\n\ninterface PgCompiledSlotFilterSource {\n variable: string;\n values: number[];\n}\n\ninterface PgJoinSource {\n inputIndex: number;\n alias: string;\n entry: PgCompiledJoinPattern;\n resolved: PgResolvedPattern;\n permutation: PgPermutation;\n estimateRows: number;\n}\n\ninterface PgCompiledJoin {\n sql: string;\n params: unknown[];\n countSql?: string;\n countParams: unknown[];\n indexChoice: string;\n queryPlan: string[];\n variableAliases: Map<string, string>;\n sourceEstimates: Array<{ inputIndex: number; estimateRows: number; hasGraphPrefixFanout: boolean }>;\n unresolved?: PgPatternKey;\n}\n\ninterface PgPatternEquality {\n variable: string;\n left: PgPatternKey;\n right: PgPatternKey;\n}\n\ninterface PgAggregateSqlExpression {\n variableName: string;\n alias: string;\n type: 'integer' | 'decimal';\n expression: string;\n sql: string;\n}\n\ninterface PgFactsQueryOptions {\n start?: number;\n planPrefix?: string[];\n}\n\ntype PgRequiredSource =\n | { kind: 'pattern'; pattern: RdfQueryPattern; originalIndex: number }\n | { kind: 'values'; source: RdfValuesBindingSource; originalIndex: number }\n | { kind: 'text'; pattern: RdfTextSearchPattern; originalIndex: number }\n | { kind: 'vector'; pattern: RdfVectorSearchPattern; originalIndex: number };\n\ninterface PgRequiredSourceChoice {\n source: PgRequiredSource;\n originalOrder: number;\n priority: number;\n connected: boolean;\n disconnectedPenalty: number;\n inputRows: number;\n estimateRows: number;\n baseRows: number;\n variableDistinctRows: Record<string, number>;\n outputRows: number;\n costRows: number;\n cpuCostRows: number;\n ioCostRows: number;\n futureCostRows: number;\n futureCostBounded: boolean;\n totalCostRows: number;\n}\n\nconst PG_PLANNER_SUFFIX_LOOKAHEAD_WIDTH = 6;\nconst PG_PLANNER_SUFFIX_LOOKAHEAD_DEPTH = 6;\n\ninterface PgNumericAggregateFactsCutoverDecision {\n minSourceRows: number;\n maxSourceRows: number;\n threshold: number;\n}\n\ninterface PgCustomIndexBgpJoinShape {\n indexNames: string[];\n constants: Array<number | null>;\n variableSlots: number[];\n variableSlotsByName: Map<string, number>;\n outputSlots: number[];\n variableAliases: Map<string, string>;\n indexChoices: string[];\n internalFilters: PgCompiledSlotFilterSource[];\n}\n\ninterface PgCustomIndexBgpJoinShapeOptions {\n allowedTermFilter?: (\n pattern: PgCompiledJoinPattern,\n key: PgPatternKey,\n filter: PgResolvedTermFilter,\n ) => boolean;\n preferredLeadingVariables?: string[];\n}\n\ninterface PgQueryResultCacheRow {\n result_json: string;\n row_count: number;\n query_shape?: string;\n}\n\ninterface PgQueryTemplateCacheEntry {\n templateKey: string;\n templateShape: string;\n compiledSqlTemplates: Map<string, PgCompiledSqlTemplateCacheEntry>;\n hitCount: number;\n createdAtMs: number;\n lastHitAtMs: number;\n}\n\ninterface PgCompiledSqlTemplateCacheEntry {\n shapeKey: string;\n physicalShape: string;\n hitCount: number;\n createdAtMs: number;\n lastHitAtMs: number;\n}\n\ntype PgDerivedCacheCandidateKind = 'query-result' | 'materialized-result' | 'query-template';\n\ninterface PgCacheCounterStats {\n hitCount: number;\n missCount: number;\n refreshCount: number;\n storeCount: number;\n bypassCount: number;\n disabledCount: number;\n}\n\ntype PgCacheCounterKind = keyof PgCacheCounterStats;\n\ninterface PgDerivedCacheCandidate {\n kind: PgDerivedCacheCandidateKind;\n cacheKey: string;\n scopeHash?: string;\n factsDataVersion?: number;\n bytes: number;\n createdAtMs: number;\n lastUsedAtMs: number;\n}\n\ninterface PgDerivedCacheScopeStats {\n scopeVersionCount: number;\n scopeEntries: RdfDerivedCacheScopeEntry[];\n largestScopeBytes: number;\n largestScopeHash?: string;\n largestScopeFactsDataVersion?: number;\n}\n\ninterface PgQueryTemplateResolution {\n queryShape: string;\n cacheScope: PgResolvedQueryCacheScope;\n cacheKey: string;\n templateKey: string;\n planMarker: string;\n explain: RdfQueryTemplateCacheExplain;\n}\n\ninterface PgMaterializedResultResolution {\n shape: string;\n cacheKey: string;\n planMarker: string;\n}\n\ninterface PgMaterializedResultCacheRow extends PgQueryResultCacheRow {\n template_key?: string;\n}\n\ninterface PgMaterializedViewRow {\n view_key: string;\n view_version: string;\n scope_hash: string;\n facts_data_version: number | string;\n variables: string[] | string;\n row_count: number | string;\n active: boolean | string;\n created_at: string;\n activated_at: string | null;\n}\n\ninterface PgMaterializedViewCellRow {\n row_index: number | string;\n variable: string;\n term_json: string;\n}\n\ninterface PgNormalizedSchemaExplorerOptions {\n query: string;\n graphPrefix: string;\n limit: number;\n}\n\ninterface PgNormalizedPathSearchOptions {\n direction: 'out' | 'in' | 'both';\n graphPrefix: string;\n maxDepth: number;\n maxPaths: number;\n}\n\ninterface PgPathEdgeRow {\n graph_id: number;\n subject_id: number;\n predicate_id: number;\n object_id: number;\n}\n\ninterface PgPathEdgeState extends PgPathEdgeRow {\n direction: RdfPathEdgeDirection;\n}\n\ninterface PgPathState {\n nodeIds: number[];\n edges: PgPathEdgeState[];\n}\n\ninterface PgResolvedQueryCacheScope {\n shape: string;\n hash: string;\n principal: string | null;\n basePath: string | null;\n mode: string | null;\n authorizationModel: string | null;\n permissionVersion: string | null;\n allowedGraphUrls: string[] | null;\n deniedGraphUrls: string[] | null;\n deniedGraphPrefixes: string[] | null;\n}\n\ninterface RdfAccessControlCacheInvalidation {\n fallbackScopes: RdfAccessControlInvalidationScope[];\n sourceKeys: string[];\n sourceTargets: RdfAccessControlOverrideTargets[];\n}\n\ninterface RdfAccessControlInvalidationScope {\n basePath: string;\n permissionVersions: string[] | null;\n}\n\ninterface RdfAccessControlOverrideTargets {\n sourceKey: string;\n basePaths: string[];\n sourceVersion: string | null;\n}\n\ninterface PgQueryExplainOptions {\n query?: RdfQuery;\n template: PgQueryTemplateResolution;\n factsDataVersion?: number;\n resultCache?: RdfQueryCacheExplain;\n materializedCache?: RdfQueryCacheExplain;\n}\n\ninterface SerializedRdfTerm {\n termType: 'NamedNode' | 'BlankNode' | 'DefaultGraph' | 'Literal';\n value: string;\n language?: string;\n datatype?: string;\n}\n\ninterface SerializedRdfQueryResult {\n bindings: Array<Record<string, SerializedRdfTerm>>;\n count?: number;\n sourcePlan?: string[];\n sourceIndexChoices?: string[];\n}\n\ninterface PgAccelerationCapabilityProbe {\n provider: RdfPgAccelerationProvider;\n version: string;\n capabilities: string[];\n}\n\nconst TERM_KEYS: PgTermKey[] = ['subject', 'predicate', 'object'];\nconst PATTERN_KEYS: PgPatternKey[] = ['graph', 'subject', 'predicate', 'object'];\nconst RDF_FACTS_TABLE = 'rdf_quads';\n\nconst TERM_COLUMN: Record<PgPatternKey, PgIndexedColumn> = {\n graph: 'graph_id',\n subject: 'subject_id',\n predicate: 'predicate_id',\n object: 'object_id',\n};\n\nconst PG_CUSTOM_INDEX_PROJECT_COLUMN: Record<PgPatternKey, number> = {\n graph: 1,\n subject: 2,\n predicate: 3,\n object: 4,\n};\n\nconst PERMUTATIONS: PgPermutation[] = [\n { name: 'SPO', indexName: 'rdf_quads_spog', columns: ['subject_id', 'predicate_id', 'object_id', 'graph_id'] },\n { name: 'SOP', indexName: 'rdf_quads_sopg', columns: ['subject_id', 'object_id', 'predicate_id', 'graph_id'] },\n { name: 'PSO', indexName: 'rdf_quads_psog', columns: ['predicate_id', 'subject_id', 'object_id', 'graph_id'] },\n { name: 'POS', indexName: 'rdf_quads_posg', columns: ['predicate_id', 'object_id', 'subject_id', 'graph_id'] },\n { name: 'OSP', indexName: 'rdf_quads_ospg', columns: ['object_id', 'subject_id', 'predicate_id', 'graph_id'] },\n { name: 'OPS', indexName: 'rdf_quads_opsg', columns: ['object_id', 'predicate_id', 'subject_id', 'graph_id'] },\n];\n\nconst PAIR_PROJECTIONS: PgPairProjection[] = [\n { name: 'SP', table: RDF3X_PAIR_PROJECTION_TABLE_BY_NAME.SP, columns: ['subject_id', 'predicate_id'], remainder: 'object_id' },\n { name: 'SO', table: RDF3X_PAIR_PROJECTION_TABLE_BY_NAME.SO, columns: ['subject_id', 'object_id'], remainder: 'predicate_id' },\n { name: 'PS', table: RDF3X_PAIR_PROJECTION_TABLE_BY_NAME.PS, columns: ['predicate_id', 'subject_id'], remainder: 'object_id' },\n { name: 'PO', table: RDF3X_PAIR_PROJECTION_TABLE_BY_NAME.PO, columns: ['predicate_id', 'object_id'], remainder: 'subject_id' },\n { name: 'OS', table: RDF3X_PAIR_PROJECTION_TABLE_BY_NAME.OS, columns: ['object_id', 'subject_id'], remainder: 'predicate_id' },\n { name: 'OP', table: RDF3X_PAIR_PROJECTION_TABLE_BY_NAME.OP, columns: ['object_id', 'predicate_id'], remainder: 'subject_id' },\n];\n\nconst TERM_PROJECTIONS: PgTermProjection[] = [\n { name: 'S', table: RDF3X_TERM_PROJECTION_TABLE_BY_NAME.S, column: 'subject_id' },\n { name: 'P', table: RDF3X_TERM_PROJECTION_TABLE_BY_NAME.P, column: 'predicate_id' },\n { name: 'O', table: RDF3X_TERM_PROJECTION_TABLE_BY_NAME.O, column: 'object_id' },\n];\n\nconst OBJECT_RANGE_KINDS: RdfTermKind[] = ['iri', 'literal', 'blank'];\nconst PG_CUSTOM_INDEX_MAX_GRAPH_PREFIX_IDS = 4096;\nconst PG_CUSTOM_INDEX_MAX_VALUE_ROWS = 8192;\nconst DEFAULT_RDF_MAINTENANCE_LEASE_TTL_MS = 120_000;\nconst DEFAULT_NUMERIC_AGGREGATE_FACTS_CUTOVER_MAX_SOURCE_ROWS = 64;\n\ntype RdfTextIndexInput = PostgresRdfTextIndexOptions | RdfTextIndexOptions | RdfTextIndexLike;\ntype RdfVectorIndexInput = PostgresRdfVectorIndexOptions | RdfVectorIndexOptions | RdfVectorIndexLike;\n\ninterface AsyncSqlExecutor {\n query<T = Record<string, unknown>>(sql: string, params?: unknown[]): Promise<T[]>;\n exec(sql: string, params?: unknown[]): Promise<void>;\n copyFromRows?(input: AsyncSqlCopyFromRowsInput): Promise<boolean>;\n transaction<T>(fn: (tx: AsyncSqlExecutor) => Promise<T>): Promise<T>;\n close(): Promise<void>;\n}\n\ninterface AsyncSqlCopyFromRowsInput {\n table: string;\n columns: string[];\n rows: Iterable<readonly unknown[]>;\n}\n\ninterface PgCopyFromRowsStats {\n attempts: number;\n succeeded: number;\n fallbacks: number;\n rows: number;\n tables: Map<string, { statements: number; rows: number }>;\n}\n\nexport interface PostgresRdfEngineOptions {\n driver?: 'pglite' | 'pg';\n dataDir?: string;\n connectionString?: string;\n host?: string;\n port?: number;\n database?: string;\n user?: string;\n password?: string;\n pool?: any;\n autoOpen?: boolean;\n queryResultCacheEnabled?: boolean;\n queryResultCacheMaxEntries?: number;\n queryResultCacheTtlMs?: number;\n queryResultCacheMaxBytes?: number;\n materializedResultCacheEnabled?: boolean;\n materializedResultCacheMaxEntries?: number;\n materializedResultCacheTtlMs?: number;\n materializedResultCacheMaxBytes?: number;\n derivedCacheMaxBytes?: number;\n derivedCacheScopeMaxBytes?: number;\n queryTemplateCacheMaxEntries?: number;\n queryTemplateCacheTtlMs?: number;\n queryExplainSlowMs?: number;\n queryExplainLargeScanRows?: number;\n queryExplainSlowQueryMaxEntries?: number;\n rdfAccelerationProfile?: RdfPgAccelerationProfile;\n rdfAccelerationRequiredCapabilities?: string[];\n deferPgCustomIndexInitialization?: boolean;\n maintenanceIntervalMs?: number;\n maintenanceSourceBatchSize?: number;\n maintenanceLeaseTtlMs?: number;\n maintenanceLeaseOwner?: string;\n numericAggregateFactsCutoverMaxSourceRows?: number;\n textIndex?: RdfTextIndexInput;\n vectorIndex?: RdfVectorIndexInput;\n nativeSparqlEnabled?: boolean;\n}\n\ninterface PostgresRdfTermRow {\n id: number;\n kind: RdfTermKind;\n value: string;\n value_head: string;\n datatype_id: number | null;\n lang: string | null;\n hash: string;\n normalized_text: string | null;\n numeric_value: number | null;\n created_at: string;\n}\n\ninterface PostgresRdfSourceRow {\n id: number;\n source: string;\n workspace: string;\n local_path: string | null;\n content_type: string | null;\n last_indexed_at: string | null;\n source_version: string | null;\n}\n\ninterface RdfTermIdentity {\n kind: RdfTermKind;\n value: string;\n valueHead: string;\n datatypeId: number | null;\n lang: string | null;\n normalizedText: string | null;\n numericValue: number | null;\n hash: string;\n}\n\ninterface RdfTermDictionaryMissingEntry {\n identity: RdfTermIdentity;\n term: Term;\n indexes: number[];\n}\n\nfunction toPgSafe(value: string): string {\n return value\n .replaceAll(PG_STRING_ESCAPE, `${PG_STRING_ESCAPE}${PG_STRING_ESCAPE}`)\n .replaceAll('\\u0000', `${PG_STRING_ESCAPE}0`);\n}\n\nfunction fromPgSafe(value: string): string {\n let result = '';\n for (let i = 0; i < value.length; i += 1) {\n const char = value[i];\n if (char !== PG_STRING_ESCAPE) {\n result += char;\n continue;\n }\n const next = value[i + 1];\n if (next === '0') {\n result += '\\u0000';\n i += 1;\n } else if (next === PG_STRING_ESCAPE) {\n result += PG_STRING_ESCAPE;\n i += 1;\n } else {\n // Legacy rows from the earlier direct replacement format used a bare\n // separator as a null-byte placeholder.\n result += '\\u0000';\n }\n }\n return result;\n}\n\nfunction normalizePgValue(value: unknown): unknown {\n if (typeof value === 'string') {\n return toPgSafe(value);\n }\n if (Array.isArray(value)) {\n return value.map((item) => normalizePgValue(item));\n }\n return value;\n}\n\nfunction isRetryablePostgresWriteError(error: unknown): boolean {\n const candidate = error as { code?: unknown; message?: unknown } | undefined;\n const code = typeof candidate?.code === 'string' ? candidate.code : undefined;\n if (code && RETRYABLE_POSTGRES_WRITE_ERROR_CODES.has(code)) {\n return true;\n }\n\n const message = typeof candidate?.message === 'string' ? candidate.message.toLowerCase() : '';\n return message.includes('deadlock detected')\n || message.includes('could not serialize access due to concurrent update');\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nclass PgliteExecutor implements AsyncSqlExecutor {\n public constructor(private readonly db: PGlite) {}\n\n public async query<T = Record<string, unknown>>(sql: string, params: unknown[] = []): Promise<T[]> {\n const result = await this.db.query(sql, params.map((value) => normalizePgValue(value)));\n return (result.rows as T[]).map((row) => restoreRow(row));\n }\n\n public async exec(sql: string, params: unknown[] = []): Promise<void> {\n await this.db.query(sql, params.map((value) => normalizePgValue(value)));\n }\n\n public async transaction<T>(fn: (tx: AsyncSqlExecutor) => Promise<T>): Promise<T> {\n await this.db.query('BEGIN');\n try {\n const result = await fn(this);\n await this.db.query('COMMIT');\n return result;\n } catch (error) {\n await this.db.query('ROLLBACK');\n throw error;\n }\n }\n\n public async close(): Promise<void> {\n await this.db.close();\n }\n}\n\nclass PgPoolExecutor implements AsyncSqlExecutor {\n public constructor(\n private readonly pool: any,\n private readonly client?: any,\n private readonly copyFromRowsStats?: PgCopyFromRowsStats,\n ) {}\n\n public async query<T = Record<string, unknown>>(sql: string, params: unknown[] = []): Promise<T[]> {\n const result = this.client\n ? await this.client.query(sql, params.map((value) => normalizePgValue(value)))\n : await this.pool.query(sql, params.map((value) => normalizePgValue(value)));\n return (result.rows as T[]).map((row: T) => restoreRow(row));\n }\n\n public async exec(sql: string, params: unknown[] = []): Promise<void> {\n if (this.client) {\n await this.client.query(sql, params.map((value) => normalizePgValue(value)));\n return;\n }\n await this.pool.query(sql, params.map((value) => normalizePgValue(value)));\n }\n\n public async copyFromRows(input: AsyncSqlCopyFromRowsInput): Promise<boolean> {\n const client = this.client ?? await this.pool.connect();\n const rowCount = copyFromRowsInputRowCount(input);\n this.copyFromRowsStats && recordCopyFromRowsAttempt(this.copyFromRowsStats);\n try {\n if (!pgClientSupportsCopyFromRows(client)) {\n this.copyFromRowsStats && recordCopyFromRowsFallback(this.copyFromRowsStats);\n return false;\n }\n await pgCopyFromRows(client, input);\n this.copyFromRowsStats && recordCopyFromRowsSuccess(this.copyFromRowsStats, input.table, rowCount);\n return true;\n } finally {\n if (!this.client) {\n client.release();\n }\n }\n }\n\n public async transaction<T>(fn: (tx: AsyncSqlExecutor) => Promise<T>): Promise<T> {\n if (this.client) {\n const result = await fn(this);\n return result;\n }\n\n const client = await this.pool.connect();\n const tx = new PgPoolExecutor(this.pool, client, this.copyFromRowsStats);\n try {\n await client.query('BEGIN');\n const result = await fn(tx);\n await client.query('COMMIT');\n return result;\n } catch (error) {\n try {\n await client.query('ROLLBACK');\n } catch {\n }\n throw error;\n } finally {\n client.release();\n }\n }\n\n public async close(): Promise<void> {\n if (this.client) {\n return;\n }\n await this.pool.end();\n }\n}\n\nclass PgCopyFromRowsQuery {\n public callback?: (error: Error | null) => void;\n private completed = false;\n\n public constructor(\n private readonly sql: string,\n private readonly columns: string[],\n private readonly rows: Iterable<readonly unknown[]>,\n ) {}\n\n public submit(connection: any): Error | void {\n connection.query(this.sql);\n }\n\n public handleCopyInResponse(connection: any): void {\n try {\n for (const chunk of pgCopyCsvChunks(this.rows, this.columns.length)) {\n connection.sendCopyFromChunk(chunk);\n }\n connection.endCopyFrom();\n } catch (error) {\n const copyError = error instanceof Error ? error : new Error(String(error));\n try {\n connection.sendCopyFail(copyError.message);\n } catch {\n }\n this.handleError(copyError);\n }\n }\n\n public handleCopyData(): void {\n }\n\n public handleCommandComplete(): void {\n }\n\n public handleReadyForQuery(): void {\n this.finish(null);\n }\n\n public handleError(error: Error): void {\n this.finish(error);\n }\n\n private finish(error: Error | null): void {\n if (this.completed) {\n return;\n }\n this.completed = true;\n this.callback?.(error);\n }\n}\n\nfunction pgClientSupportsCopyFromRows(client: any): boolean {\n return typeof client?.query === 'function'\n && typeof client?.connection?.sendCopyFromChunk === 'function'\n && typeof client?.connection?.endCopyFrom === 'function'\n && typeof client?.connection?.sendCopyFail === 'function';\n}\n\nasync function pgCopyFromRows(client: any, input: AsyncSqlCopyFromRowsInput): Promise<void> {\n const query = new PgCopyFromRowsQuery(pgCopyFromRowsSql(input.table, input.columns), input.columns, input.rows);\n await new Promise<void>((resolve, reject) => {\n query.callback = (error) => {\n if (error) {\n reject(error);\n } else {\n resolve();\n }\n };\n try {\n client.query(query);\n } catch (error) {\n reject(error);\n }\n });\n}\n\nfunction pgCopyFromRowsSql(table: string, columns: string[]): string {\n if (columns.length === 0) {\n throw new Error('COPY requires at least one column');\n }\n return `COPY ${pgIdentifier(table)} (${columns.map((column) => pgIdentifier(column)).join(', ')}) FROM STDIN WITH (FORMAT csv, NULL '\\\\N')`;\n}\n\nfunction pgIdentifier(value: string): string {\n return `\"${value.replaceAll('\"', '\"\"')}\"`;\n}\n\nfunction* pgCopyCsvChunks(\n rows: Iterable<readonly unknown[]>,\n columnCount: number,\n maxBytes = 256 * 1024,\n): Iterable<Buffer> {\n let lines: string[] = [];\n let bytes = 0;\n for (const row of rows) {\n const line = pgCopyCsvLine(row, columnCount);\n const lineBytes = Buffer.byteLength(line);\n if (lines.length > 0 && bytes + lineBytes > maxBytes) {\n yield Buffer.from(lines.join(''), 'utf8');\n lines = [];\n bytes = 0;\n }\n lines.push(line);\n bytes += lineBytes;\n }\n if (lines.length > 0) {\n yield Buffer.from(lines.join(''), 'utf8');\n }\n}\n\nfunction pgCopyCsvLine(row: readonly unknown[], columnCount: number): string {\n if (row.length !== columnCount) {\n throw new Error(`COPY row has ${row.length} values, expected ${columnCount}`);\n }\n return `${row.map((value) => pgCopyCsvValue(value)).join(',')}\\n`;\n}\n\nfunction pgCopyCsvValue(value: unknown): string {\n const normalized = normalizePgValue(value);\n if (normalized === null || normalized === undefined) {\n return '\\\\N';\n }\n return `\"${String(normalized).replaceAll('\"', '\"\"')}\"`;\n}\n\nfunction emptyPgCopyFromRowsStats(): PgCopyFromRowsStats {\n return {\n attempts: 0,\n succeeded: 0,\n fallbacks: 0,\n rows: 0,\n tables: new Map(),\n };\n}\n\nfunction recordCopyFromRowsAttempt(stats: PgCopyFromRowsStats): void {\n stats.attempts += 1;\n}\n\nfunction recordCopyFromRowsFallback(stats: PgCopyFromRowsStats): void {\n stats.fallbacks += 1;\n}\n\nfunction recordCopyFromRowsSuccess(stats: PgCopyFromRowsStats, table: string, rows: number): void {\n stats.succeeded += 1;\n stats.rows += rows;\n const kind = copyFromRowsTableKind(table);\n const existing = stats.tables.get(kind) ?? { statements: 0, rows: 0 };\n existing.statements += 1;\n existing.rows += rows;\n stats.tables.set(kind, existing);\n}\n\nfunction copyFromRowsInputRowCount(input: AsyncSqlCopyFromRowsInput): number {\n if (Array.isArray(input.rows)) {\n return input.rows.length;\n }\n return 0;\n}\n\nfunction copyFromRowsTableKind(table: string): string {\n if (table.startsWith('rdf_terms_bulk_stage_')) {\n return 'rdf_terms_bulk_stage';\n }\n if (table.startsWith('rdf_quads_bulk_stage_')) {\n return 'rdf_quads_bulk_stage';\n }\n return table;\n}\n\nfunction snapshotBulkLoadStats(stats: PgCopyFromRowsStats): RdfBulkLoadStats {\n return {\n copyFromRows: {\n attempts: stats.attempts,\n succeeded: stats.succeeded,\n fallbacks: stats.fallbacks,\n rows: stats.rows,\n tables: Array.from(stats.tables.entries())\n .map(([kind, tableStats]) => ({\n kind,\n statements: tableStats.statements,\n rows: tableStats.rows,\n }))\n .sort((left, right) => left.kind.localeCompare(right.kind)),\n },\n };\n}\n\nclass PgSqlBuilder {\n private params: unknown[] = [];\n\n public constructor(initialParams: unknown[] = []) {\n this.params = [...initialParams];\n }\n\n public add(value: unknown): string {\n this.params.push(value);\n return `$${this.params.length}`;\n }\n\n public addAll(values: unknown[]): string {\n return values.map((value) => this.add(value)).join(', ');\n }\n\n public snapshot(): unknown[] {\n return [...this.params];\n }\n}\n\nclass PostgresRdfTermDictionary {\n private readonly termCache = new Map<string, number>();\n private readonly idCache = new Map<number, Term>();\n\n public constructor(private readonly executor: AsyncSqlExecutor) {}\n\n public clearCaches(): void {\n this.termCache.clear();\n this.idCache.clear();\n }\n\n public async initialize(): Promise<void> {\n await this.executor.exec(`\n CREATE TABLE IF NOT EXISTS rdf_terms (\n id BIGSERIAL PRIMARY KEY,\n kind TEXT NOT NULL,\n value TEXT NOT NULL,\n value_head TEXT NOT NULL,\n datatype_id BIGINT,\n lang TEXT,\n hash TEXT NOT NULL UNIQUE,\n normalized_text TEXT,\n numeric_value DOUBLE PRECISION,\n created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n )\n `);\n await this.executor.exec(`\n CREATE UNIQUE INDEX IF NOT EXISTS rdf_terms_identity_hash ON rdf_terms (hash)\n `);\n await this.executor.exec('CREATE INDEX IF NOT EXISTS rdf_terms_kind_value_head ON rdf_terms (kind, value_head)');\n await this.executor.exec('CREATE INDEX IF NOT EXISTS rdf_terms_kind_datatype ON rdf_terms (kind, datatype_id)');\n await this.executor.exec('CREATE INDEX IF NOT EXISTS rdf_terms_kind_lang ON rdf_terms (kind, lang)');\n await this.executor.exec('CREATE INDEX IF NOT EXISTS rdf_terms_kind_numeric_value ON rdf_terms (kind, numeric_value)');\n }\n\n public async getOrCreate(term: Term): Promise<number> {\n const identity = await this.toIdentity(term);\n const cacheKey = this.identityCacheKey(identity);\n const cached = this.termCache.get(cacheKey);\n if (cached !== undefined) {\n return cached;\n }\n\n const inserted = await this.executor.query<{ id: number }>(`\n INSERT INTO rdf_terms (\n kind,\n value,\n value_head,\n datatype_id,\n lang,\n hash,\n normalized_text,\n numeric_value\n )\n VALUES ($1, $2, $3, $4, $5, $6, $7, $8)\n ON CONFLICT (hash) DO NOTHING\n RETURNING id\n `, [\n identity.kind,\n identity.value,\n identity.valueHead,\n identity.datatypeId,\n identity.lang,\n identity.hash,\n identity.normalizedText,\n identity.numericValue,\n ]);\n let id: number | undefined = inserted[0]?.id;\n if (id === undefined) {\n const existing = await this.executor.query<PostgresRdfTermRow>('SELECT * FROM rdf_terms WHERE hash = $1', [identity.hash]);\n id = existing.find((row) => this.rowMatchesIdentity(row, identity))?.id;\n }\n const resolvedId = id;\n if (resolvedId === undefined) {\n throw new Error('Failed to insert or load RDF term');\n }\n this.termCache.set(cacheKey, resolvedId);\n this.idCache.set(resolvedId, term);\n return resolvedId;\n }\n\n public async getOrCreateMany(terms: Term[]): Promise<number[]> {\n if (terms.length === 0) {\n return [];\n }\n\n const identities = await this.identitiesForTerms(terms);\n const result = new Array<number>(terms.length);\n const missing = new Map<string, RdfTermDictionaryMissingEntry>();\n\n for (const [index, identity] of identities.entries()) {\n const cacheKey = this.identityCacheKey(identity);\n const cached = this.termCache.get(cacheKey);\n if (cached !== undefined) {\n result[index] = cached;\n continue;\n }\n\n const entry = missing.get(cacheKey);\n if (entry) {\n entry.indexes.push(index);\n } else {\n missing.set(cacheKey, { identity, term: terms[index], indexes: [index] });\n }\n }\n\n if (missing.size === 0) {\n return result;\n }\n\n const missingEntries = [...missing.values()];\n if (missingEntries.length >= POSTGRES_RDF_BULK_STAGING_MIN_ROWS) {\n await this.insertMissingTermsViaStagingTable(missingEntries);\n } else {\n await this.insertMissingTermsViaUnnest(missingEntries);\n }\n\n const rowsByHash = new Map<string, PostgresRdfTermRow[]>();\n for (const hashChunk of chunkArray(missingEntries.map(({ identity }) => identity.hash), POSTGRES_RDF_BULK_UNNEST_CHUNK_SIZE)) {\n const rows = await this.executor.query<PostgresRdfTermRow>(\n 'SELECT * FROM rdf_terms WHERE hash = ANY($1::text[])',\n [hashChunk],\n );\n for (const row of rows) {\n const rowsForHash = rowsByHash.get(row.hash);\n if (rowsForHash) {\n rowsForHash.push(row);\n } else {\n rowsByHash.set(row.hash, [row]);\n }\n }\n }\n\n for (const { identity, term, indexes } of missingEntries) {\n const row = rowsByHash.get(identity.hash)?.find((candidate) => this.rowMatchesIdentity(candidate, identity));\n if (!row) {\n throw new Error('Failed to insert or load RDF term');\n }\n const id = row.id;\n const cacheKey = this.identityCacheKey(identity);\n this.termCache.set(cacheKey, id);\n this.idCache.set(id, term);\n for (const index of indexes) {\n result[index] = id;\n }\n }\n\n return result;\n }\n\n private async insertMissingTermsViaUnnest(missingEntries: RdfTermDictionaryMissingEntry[]): Promise<void> {\n for (const chunk of chunkArray(missingEntries, POSTGRES_RDF_BULK_UNNEST_CHUNK_SIZE)) {\n await this.executor.exec(`\n INSERT INTO rdf_terms (\n kind,\n value,\n value_head,\n datatype_id,\n lang,\n hash,\n normalized_text,\n numeric_value\n )\n SELECT\n kind,\n value,\n value_head,\n datatype_id,\n lang,\n hash,\n normalized_text,\n numeric_value\n FROM UNNEST(\n $1::text[],\n $2::text[],\n $3::text[],\n $4::bigint[],\n $5::text[],\n $6::text[],\n $7::text[],\n $8::double precision[]\n ) AS input(\n kind,\n value,\n value_head,\n datatype_id,\n lang,\n hash,\n normalized_text,\n numeric_value\n )\n ON CONFLICT (hash) DO NOTHING\n `, [\n chunk.map(({ identity }) => identity.kind),\n chunk.map(({ identity }) => identity.value),\n chunk.map(({ identity }) => identity.valueHead),\n chunk.map(({ identity }) => identity.datatypeId),\n chunk.map(({ identity }) => identity.lang),\n chunk.map(({ identity }) => identity.hash),\n chunk.map(({ identity }) => identity.normalizedText),\n chunk.map(({ identity }) => identity.numericValue),\n ]);\n }\n }\n\n private async insertMissingTermsViaStagingTable(missingEntries: RdfTermDictionaryMissingEntry[]): Promise<void> {\n const stageTable = `rdf_terms_bulk_stage_${randomUUID().replace(/-/g, '')}`;\n await this.executor.exec(`\n CREATE TEMP TABLE ${stageTable} (\n kind TEXT NOT NULL,\n value TEXT NOT NULL,\n value_head TEXT NOT NULL,\n datatype_id BIGINT,\n lang TEXT,\n hash TEXT NOT NULL,\n normalized_text TEXT,\n numeric_value DOUBLE PRECISION\n )\n `);\n try {\n const copied = await this.executor.copyFromRows?.({\n table: stageTable,\n columns: [\n 'kind',\n 'value',\n 'value_head',\n 'datatype_id',\n 'lang',\n 'hash',\n 'normalized_text',\n 'numeric_value',\n ],\n rows: missingEntries.map(({ identity }) => [\n identity.kind,\n identity.value,\n identity.valueHead,\n identity.datatypeId,\n identity.lang,\n identity.hash,\n identity.normalizedText,\n identity.numericValue,\n ]),\n });\n if (!copied) {\n for (const chunk of chunkArray(missingEntries, POSTGRES_RDF_BULK_UNNEST_CHUNK_SIZE)) {\n await this.executor.exec(`\n INSERT INTO ${stageTable} (\n kind,\n value,\n value_head,\n datatype_id,\n lang,\n hash,\n normalized_text,\n numeric_value\n )\n SELECT\n kind,\n value,\n value_head,\n datatype_id,\n lang,\n hash,\n normalized_text,\n numeric_value\n FROM UNNEST(\n $1::text[],\n $2::text[],\n $3::text[],\n $4::bigint[],\n $5::text[],\n $6::text[],\n $7::text[],\n $8::double precision[]\n ) AS input(\n kind,\n value,\n value_head,\n datatype_id,\n lang,\n hash,\n normalized_text,\n numeric_value\n )\n `, [\n chunk.map(({ identity }) => identity.kind),\n chunk.map(({ identity }) => identity.value),\n chunk.map(({ identity }) => identity.valueHead),\n chunk.map(({ identity }) => identity.datatypeId),\n chunk.map(({ identity }) => identity.lang),\n chunk.map(({ identity }) => identity.hash),\n chunk.map(({ identity }) => identity.normalizedText),\n chunk.map(({ identity }) => identity.numericValue),\n ]);\n }\n }\n\n await this.executor.exec(`\n INSERT INTO rdf_terms (\n kind,\n value,\n value_head,\n datatype_id,\n lang,\n hash,\n normalized_text,\n numeric_value\n )\n SELECT DISTINCT\n kind,\n value,\n value_head,\n datatype_id,\n lang,\n hash,\n normalized_text,\n numeric_value\n FROM ${stageTable}\n ON CONFLICT (hash) DO NOTHING\n `);\n } finally {\n await this.executor.exec(`DROP TABLE IF EXISTS ${stageTable}`);\n }\n }\n\n public async find(term: Term): Promise<number | undefined> {\n const identity = await this.toIdentity(term);\n const cacheKey = this.identityCacheKey(identity);\n const cached = this.termCache.get(cacheKey);\n if (cached !== undefined) {\n return cached;\n }\n\n const rows = await this.executor.query<PostgresRdfTermRow>('SELECT * FROM rdf_terms WHERE hash = $1', [identity.hash]);\n const id = rows.find((row) => this.rowMatchesIdentity(row, identity))?.id;\n if (id !== undefined) {\n this.termCache.set(cacheKey, id);\n }\n return id;\n }\n\n public async termForId(id: number): Promise<Term> {\n const cached = this.idCache.get(id);\n if (cached) {\n return cached;\n }\n const row = await this.executor.query<PostgresRdfTermRow>('SELECT * FROM rdf_terms WHERE id = $1', [id]);\n const termRow = row[0];\n if (!termRow) {\n throw new Error(`RDF term not found: ${id}`);\n }\n const term = await this.rowToTerm(termRow);\n this.idCache.set(id, term);\n return term;\n }\n\n public async rowsForIds(ids: number[]): Promise<Map<number, Term>> {\n const result = new Map<number, Term>();\n const uniqueIds = Array.from(new Set(ids));\n if (uniqueIds.length === 0) {\n return result;\n }\n\n const rows = await this.executor.query<PostgresRdfTermRow>('SELECT * FROM rdf_terms WHERE id = ANY($1::bigint[])', [uniqueIds]);\n for (const row of rows) {\n const term = await this.rowToTerm(row);\n this.idCache.set(row.id, term);\n result.set(row.id, term);\n }\n return result;\n }\n\n public async identityForNamedNodeValue(value: string): Promise<RdfTermIdentity> {\n return this.identity('iri', value, null, null, value, null);\n }\n\n public async rowsByNormalizedTextRegex(kinds: RdfTermKind[], pattern: string): Promise<number[]> {\n if (kinds.length === 0) {\n return [];\n }\n const rows = await this.executor.query<{ id: number; value: string }>(`\n SELECT id, value\n FROM rdf_terms\n WHERE kind = ANY($1::text[])\n AND normalized_text IS NOT NULL\n `, [kinds]);\n const regex = new RegExp(pattern);\n return rows\n .filter((row) => regex.test(row.value.toLowerCase()))\n .map((row) => row.id);\n }\n\n public async count(): Promise<number> {\n const row = await this.executor.query<{ count: number }>('SELECT COUNT(*) AS count FROM rdf_terms');\n return row[0]?.count ?? 0;\n }\n\n private async toIdentity(term: Term): Promise<RdfTermIdentity> {\n switch (term.termType) {\n case 'NamedNode':\n return this.identity('iri', term.value, null, null, term.value, null);\n case 'BlankNode':\n return this.identity('blank', term.value, null, null, term.value, null);\n case 'DefaultGraph':\n return this.identity('default_graph', '', null, null, null, null);\n case 'Literal': {\n const datatypeValue = term.datatype?.value || XSD_STRING;\n const datatypeId = datatypeValue === XSD_STRING && !term.language\n ? null\n : await this.getOrCreate(namedNode(datatypeValue));\n return this.identity(\n 'literal',\n term.value,\n datatypeId,\n term.language || null,\n term.value,\n this.numericValueForLiteral(term.value, datatypeValue),\n );\n }\n case 'Variable':\n throw new Error(`Variables cannot be indexed as RDF terms: ${term.value}`);\n case 'Quad':\n throw new Error('Nested RDF-star quads are not supported by the first PostgresRdfEngine index');\n default: {\n const exhaustive: never = term;\n throw new Error(`Unsupported RDF term: ${String(exhaustive)}`);\n }\n }\n }\n\n private async identitiesForTerms(terms: Term[]): Promise<RdfTermIdentity[]> {\n const datatypeValues = new Set<string>();\n for (const term of terms) {\n if (term.termType !== 'Literal') {\n continue;\n }\n const datatypeValue = term.datatype?.value || XSD_STRING;\n if (datatypeValue !== XSD_STRING || term.language) {\n datatypeValues.add(datatypeValue);\n }\n }\n\n const datatypeIds = new Map<string, number>();\n const datatypeTerms = [...datatypeValues].map((value) => namedNode(value));\n const resolvedDatatypeIds = await this.getOrCreateMany(datatypeTerms);\n for (const [index, value] of [...datatypeValues].entries()) {\n datatypeIds.set(value, resolvedDatatypeIds[index]);\n }\n\n return terms.map((term) => this.toIdentityWithDatatypeIds(term, datatypeIds));\n }\n\n private toIdentityWithDatatypeIds(term: Term, datatypeIds: Map<string, number>): RdfTermIdentity {\n switch (term.termType) {\n case 'NamedNode':\n return this.identity('iri', term.value, null, null, term.value, null);\n case 'BlankNode':\n return this.identity('blank', term.value, null, null, term.value, null);\n case 'DefaultGraph':\n return this.identity('default_graph', '', null, null, null, null);\n case 'Literal': {\n const datatypeValue = term.datatype?.value || XSD_STRING;\n const datatypeId = datatypeValue === XSD_STRING && !term.language\n ? null\n : datatypeIds.get(datatypeValue);\n if (datatypeId === undefined && (datatypeValue !== XSD_STRING || term.language)) {\n throw new Error(`Failed to resolve RDF literal datatype term: ${datatypeValue}`);\n }\n return this.identity(\n 'literal',\n term.value,\n datatypeId ?? null,\n term.language || null,\n term.value,\n this.numericValueForLiteral(term.value, datatypeValue),\n );\n }\n case 'Variable':\n throw new Error(`Variables cannot be indexed as RDF terms: ${term.value}`);\n case 'Quad':\n throw new Error('Nested RDF-star quads are not supported by the first PostgresRdfEngine index');\n default: {\n const exhaustive: never = term;\n throw new Error(`Unsupported RDF term: ${String(exhaustive)}`);\n }\n }\n }\n\n private identity(\n kind: RdfTermKind,\n value: string,\n datatypeId: number | null,\n lang: string | null,\n normalizedText: string | null,\n numericValue: number | null,\n ): RdfTermIdentity {\n const hash = createHash('sha256')\n .update(kind)\n .update('\\0')\n .update(value)\n .update('\\0')\n .update(String(datatypeId ?? ''))\n .update('\\0')\n .update(lang ?? '')\n .digest('hex');\n return {\n kind,\n value,\n valueHead: rdfTermValueHead(value),\n datatypeId,\n lang,\n normalizedText: normalizedText ? normalizedText.toLowerCase() : null,\n numericValue,\n hash,\n };\n }\n\n private numericValueForLiteral(value: string, datatypeValue: string): number | null {\n if (!isRdfNumericDatatype(datatypeValue)) {\n return null;\n }\n const numeric = rdfNumericValue(value);\n return Number.isFinite(numeric) ? numeric : null;\n }\n\n private identityCacheKey(identity: RdfTermIdentity): string {\n return [\n identity.kind,\n identity.value,\n identity.datatypeId ?? '',\n identity.lang ?? '',\n ].join('\\u001f');\n }\n\n private rowMatchesIdentity(row: PostgresRdfTermRow, identity: RdfTermIdentity): boolean {\n return row.kind === identity.kind\n && row.value === identity.value\n && row.datatype_id === identity.datatypeId\n && row.lang === identity.lang;\n }\n\n private async rowToTerm(row: PostgresRdfTermRow): Promise<Term> {\n switch (row.kind) {\n case 'iri':\n return DataFactory.namedNode(row.value);\n case 'blank':\n return DataFactory.blankNode(row.value);\n case 'default_graph':\n return DataFactory.defaultGraph();\n case 'literal': {\n const value = row.value;\n if (row.lang) {\n return DataFactory.literal(value, row.lang);\n }\n if (row.datatype_id) {\n const datatype = await this.termForId(row.datatype_id);\n if (datatype.termType === 'NamedNode' && datatype.value !== XSD_STRING && datatype.value !== RDF_LANG_STRING) {\n return DataFactory.literal(value, datatype);\n }\n }\n return DataFactory.literal(value);\n }\n default:\n throw new Error(`Unsupported RDF term kind in row: ${row.kind}`);\n }\n }\n}\n\nexport class PostgresRdfEngine implements RdfEngineLike {\n private readonly logger = getLoggerFor(this);\n private executor: AsyncSqlExecutor | null = null;\n private termDictionary: PostgresRdfTermDictionary | null = null;\n private initialized = false;\n private initializing: Promise<void> | null = null;\n private readonly pgOptions: PostgresRdfEngineOptions;\n private pgAcceleration: RdfPgAccelerationStats | null = null;\n private readonly queryTemplateCache = new Map<string, PgQueryTemplateCacheEntry>();\n private queryTemplateCacheHits = 0;\n private queryTemplateCacheMisses = 0;\n private queryTemplateCacheEvictions = 0;\n private compiledSqlTemplateCacheHits = 0;\n private compiledSqlTemplateCacheMisses = 0;\n private compiledSqlTemplateCacheEvictions = 0;\n private queryResultCacheCounters: PgCacheCounterStats = emptyPgCacheCounterStats();\n private materializedResultCacheCounters: PgCacheCounterStats = emptyPgCacheCounterStats();\n private derivedCacheEvictions: RdfDerivedCacheEvictionStats = emptyDerivedCacheEvictionStats();\n private readonly copyFromRowsStats = emptyPgCopyFromRowsStats();\n private slowQueryHistory: RdfSlowQueryStatsEntry[] = [];\n private plannerHistogramCache: {\n factsDataVersion: number;\n createdAtMs: number;\n distributions: RdfCardinalityDistributions;\n } | null = null;\n private sharedPoolConfig: {\n connectionString?: string;\n host?: string;\n port?: number;\n database?: string;\n user?: string;\n password?: string;\n options?: string;\n } | null = null;\n private pglite: PGlite | null = null;\n private pgPool: any = null;\n private pgCustomIndexesReady = false;\n private readonly textIndex?: RdfTextIndexLike;\n private readonly vectorIndex?: RdfVectorIndexLike;\n private readonly ownsTextIndex: boolean;\n private readonly ownsVectorIndex: boolean;\n private readonly maintenanceLeaseOwner: string;\n private maintenanceTimer?: NodeJS.Timeout;\n private maintenanceRunning: Promise<void> | null = null;\n private lifecycleStatus: RdfEngineLifecycleStats['status'] = 'closed';\n private lifecycleOpenCount = 0;\n private lastOpenStartedAt?: string;\n private lastReadyAt?: string;\n private lastOpenDurationMs?: number;\n private lastOpenFailedAt?: string;\n private lastOpenError?: string;\n private lastColdStart?: RdfEngineColdStartStats;\n public readonly sparqlQuery?: (\n query: string,\n options: RdfNativeSparqlQueryOptions,\n ) => Promise<RdfNativeSparqlResult>;\n\n public constructor(options: PostgresRdfEngineOptions) {\n this.pgOptions = {\n ...options,\n driver: options.driver ?? (options.connectionString || options.pool ? 'pg' : 'pglite'),\n };\n if (options.nativeSparqlEnabled) {\n this.sparqlQuery = this.executeNativeSparql.bind(this);\n }\n this.maintenanceLeaseOwner = options.maintenanceLeaseOwner ?? `xpod-rdf-${process.pid}-${randomUUID()}`;\n if (isRdfTextIndexLike(options.textIndex)) {\n this.textIndex = options.textIndex;\n this.ownsTextIndex = false;\n } else if (isPostgresRdfTextIndexOptions(options.textIndex)) {\n this.textIndex = new PostgresRdfTextIndex(options.textIndex);\n this.ownsTextIndex = true;\n } else if (isRdfTextIndexOptions(options.textIndex)) {\n this.textIndex = new RdfTextIndex(options.textIndex);\n this.ownsTextIndex = true;\n } else {\n this.ownsTextIndex = false;\n }\n if (isRdfVectorIndexLike(options.vectorIndex)) {\n this.vectorIndex = options.vectorIndex;\n this.ownsVectorIndex = false;\n } else if (isPostgresRdfVectorIndexOptions(options.vectorIndex)) {\n this.vectorIndex = new PostgresRdfVectorIndex(options.vectorIndex);\n this.ownsVectorIndex = true;\n } else if (isRdfVectorIndexOptions(options.vectorIndex)) {\n this.vectorIndex = new RdfVectorIndex(options.vectorIndex);\n this.ownsVectorIndex = true;\n } else {\n this.ownsVectorIndex = false;\n }\n if (options.autoOpen) {\n void this.open();\n }\n }\n\n public async open(): Promise<void> {\n if (this.initialized) {\n return;\n }\n\n this.initializing ??= Promise.resolve()\n .then(async () => {\n const startedAtMs = Date.now();\n const startedAt = new Date(startedAtMs).toISOString();\n const phases: RdfEngineColdStartPhaseStats[] = [];\n const runPhase = async <T>(name: RdfEngineColdStartPhaseStats['name'], run: () => Promise<T>): Promise<T> => {\n const phaseStartedAtMs = Date.now();\n try {\n return await run();\n } finally {\n phases.push({\n name,\n durationMs: Date.now() - phaseStartedAtMs,\n });\n }\n };\n\n this.lifecycleStatus = 'opening';\n this.lifecycleOpenCount += 1;\n this.lastOpenStartedAt = startedAt;\n this.lastOpenFailedAt = undefined;\n this.lastOpenError = undefined;\n try {\n await runPhase('executor', () => this.openExecutor());\n await runPhase('text-index', async () => {\n await this.textIndex?.open();\n });\n await runPhase('vector-index', async () => {\n await this.vectorIndex?.open();\n });\n this.termDictionary = new PostgresRdfTermDictionary(this.requireExecutor());\n await runPhase('term-dictionary', () => this.termDictionary!.initialize());\n await runPhase('schema', () => this.initializeSchema());\n this.pgAcceleration = await runPhase('acceleration-probe', () => this.probePgAcceleration());\n await runPhase('native-sparql-probe', () => this.probeNativeSparql());\n if (!this.pgOptions.deferPgCustomIndexInitialization) {\n await runPhase('custom-indexes', () => this.initializePgCustomIndexes());\n }\n this.initialized = true;\n await runPhase('maintenance-scheduler', async () => {\n this.startMaintenanceScheduler();\n });\n\n const readyAtMs = Date.now();\n const readyAt = new Date(readyAtMs).toISOString();\n this.lastReadyAt = readyAt;\n this.lastOpenDurationMs = readyAtMs - startedAtMs;\n this.lastColdStart = {\n startedAt,\n readyAt,\n durationMs: this.lastOpenDurationMs,\n phases,\n customIndexDeferred: Boolean(this.pgOptions.deferPgCustomIndexInitialization),\n maintenanceEnabled: (this.pgOptions.maintenanceIntervalMs ?? 0) > 0,\n ownsTextIndex: this.ownsTextIndex,\n ownsVectorIndex: this.ownsVectorIndex,\n };\n this.lifecycleStatus = 'ready';\n } catch (error) {\n this.lifecycleStatus = 'failed';\n this.lastOpenFailedAt = new Date().toISOString();\n this.lastOpenError = errorMessage(error);\n throw error;\n }\n })\n .finally(() => {\n this.initializing = null;\n });\n\n await this.initializing;\n }\n\n public async close(): Promise<void> {\n if (this.initializing) {\n await this.initializing.catch(() => {});\n }\n this.stopMaintenanceScheduler();\n if (this.maintenanceRunning) {\n await this.maintenanceRunning.catch(() => {});\n }\n if (this.ownsVectorIndex) {\n await this.vectorIndex?.close();\n }\n if (this.ownsTextIndex) {\n await this.textIndex?.close();\n }\n this.executor = null;\n if (this.pglite) {\n await this.pglite.close();\n this.pglite = null;\n }\n if (this.pgPool) {\n if (this.sharedPoolConfig) {\n releaseSharedPool(this.sharedPoolConfig);\n } else {\n await this.pgPool.end();\n }\n this.pgPool = null;\n this.sharedPoolConfig = null;\n }\n this.termDictionary = null;\n this.initialized = false;\n this.pgCustomIndexesReady = false;\n this.queryTemplateCache.clear();\n this.queryTemplateCacheHits = 0;\n this.queryTemplateCacheMisses = 0;\n this.queryTemplateCacheEvictions = 0;\n this.compiledSqlTemplateCacheHits = 0;\n this.compiledSqlTemplateCacheMisses = 0;\n this.compiledSqlTemplateCacheEvictions = 0;\n this.queryResultCacheCounters = emptyPgCacheCounterStats();\n this.materializedResultCacheCounters = emptyPgCacheCounterStats();\n this.derivedCacheEvictions = emptyDerivedCacheEvictionStats();\n this.slowQueryHistory = [];\n this.plannerHistogramCache = null;\n this.lifecycleStatus = 'closed';\n }\n\n private async executeNativeSparql(\n query: string,\n options: RdfNativeSparqlQueryOptions,\n ): Promise<RdfNativeSparqlResult> {\n await this.ensureReady();\n const extensionOptions: Record<string, unknown> = {\n graphPrefix: options.accessScope?.basePath ?? options.basePath,\n authorizationModel: 'mixed',\n };\n if (options.operation) {\n extensionOptions.operation = options.operation;\n }\n if (options.timeoutMs !== undefined) {\n extensionOptions.timeoutMs = options.timeoutMs;\n }\n if (options.acceptMediaType) {\n extensionOptions.acceptMediaType = options.acceptMediaType;\n }\n if (options.loadDocument) {\n extensionOptions.loadDocumentSourceUri = options.loadDocument.sourceUri;\n extensionOptions.loadDocumentBody = options.loadDocument.body;\n if (options.loadDocument.mediaType) {\n extensionOptions.loadDocumentMediaType = options.loadDocument.mediaType;\n }\n }\n if (options.accessScope?.principal) {\n extensionOptions.principal = options.accessScope.principal;\n }\n if (options.accessScope?.mode) {\n extensionOptions.accessMode = options.accessScope.mode;\n }\n if (options.accessScope?.allowedGraphUrls) {\n extensionOptions.allowedGraphUrls = options.accessScope.allowedGraphUrls;\n }\n if (options.accessScope?.deniedGraphUrls) {\n extensionOptions.deniedGraphUrls = options.accessScope.deniedGraphUrls;\n }\n if (options.accessScope?.deniedGraphPrefixes) {\n extensionOptions.deniedGraphPrefixes = options.accessScope.deniedGraphPrefixes;\n }\n if (options.accessScope?.version) {\n extensionOptions.permissionVersion = options.accessScope.version;\n }\n\n let rows: Array<{ result: unknown }>;\n try {\n rows = await this.requireExecutor().query<{ result: unknown }>(\n 'SELECT xpod_rdf.native_sparql_query($1, $2::jsonb) AS result',\n [query, JSON.stringify(extensionOptions)],\n );\n } catch (error) {\n throw new NativeSparqlExecutionError(errorMessage(error));\n }\n const envelope = typeof rows[0]?.result === 'string'\n ? JSON.parse(rows[0].result)\n : rows[0]?.result;\n if (!envelope || typeof envelope !== 'object') {\n throw new Error('Native SPARQL ABI returned an invalid envelope');\n }\n const result = envelope as Partial<RdfNativeSparqlResult>;\n if (\n (result.status !== 'ok' && result.status !== 'unsupported' && result.status !== 'error')\n || typeof result.mediaType !== 'string'\n || typeof result.body !== 'string'\n ) {\n throw new Error('Native SPARQL ABI returned an invalid envelope');\n }\n return result as RdfNativeSparqlResult;\n }\n\n private async probeNativeSparql(): Promise<void> {\n if (!this.pgOptions.nativeSparqlEnabled) {\n return;\n }\n let rows: Array<{ capabilities: unknown }>;\n try {\n rows = await this.requireExecutor().query<{ capabilities: unknown }>(\n 'SELECT xpod_rdf.native_sparql_capabilities() AS capabilities',\n );\n } catch (error) {\n throw new Error(\n `Native SPARQL requires ABI version 1: ${errorMessage(error)}`,\n );\n }\n const raw = rows[0]?.capabilities;\n const capabilities = typeof raw === 'string' ? JSON.parse(raw) as unknown : raw;\n if (\n !capabilities\n || typeof capabilities !== 'object'\n || (capabilities as { abiVersion?: unknown }).abiVersion !== 1\n || (capabilities as { ready?: unknown }).ready !== true\n ) {\n throw new Error('Native SPARQL requires native SPARQL ABI version 1');\n }\n }\n\n public async maintainDerivedIndexes(): Promise<RdfDerivedIndexMaintenanceResult> {\n await this.ensureReady();\n const pendingSources = await this.dirtySourceQueueCount();\n const factsDataVersion = await this.readFactsDataVersion();\n const rdf3xFactsDataVersion = await this.readRdf3xFactsDataVersion();\n if (pendingSources === 0 && factsDataVersion === rdf3xFactsDataVersion) {\n return {\n attempted: false,\n claimed: false,\n refreshed: false,\n reason: 'idle',\n pendingSources,\n };\n }\n\n const claimed = await this.tryClaimMaintenanceLease();\n if (!claimed) {\n return {\n attempted: true,\n claimed: false,\n refreshed: false,\n reason: 'lease_busy',\n pendingSources,\n };\n }\n\n const refresh = await this.refreshDerivedIndexes({\n maxDirtySources: this.normalizeDirtySourceBatchSize(this.pgOptions.maintenanceSourceBatchSize),\n });\n const drainedSources = refresh.rdf3x?.sourceQueue?.drainedSources ?? 0;\n return {\n attempted: true,\n claimed: true,\n refreshed: Boolean(refresh.rdf3x?.refreshed || drainedSources > 0),\n pendingSources,\n refresh,\n };\n }\n\n public async put(quads: Quad | Quad[], options?: RdfIndexPutOptions): Promise<void> {\n await this.ensureReady();\n const quadList = Array.isArray(quads) ? quads : [quads];\n const accessCacheInvalidation = rdfAccessControlCacheInvalidation(quadList, options?.source);\n const executor = this.requireExecutor();\n await this.withRetryableWrite(async () => {\n await executor.transaction(async (tx) => {\n const scopedDictionary = new PostgresRdfTermDictionary(tx);\n const sourceId = options?.source ? await this.upsertSource(options.source, tx) : null;\n if (options?.source) {\n await this.markDirtySource(tx, options.source, 'upsert');\n }\n const insertedRows = await this.insertQuads(tx, scopedDictionary, quadList, sourceId, options?.sourceLineNo ?? null);\n await this.markDirtyQuadRows(tx, insertedRows);\n await this.bumpFactsDataVersion(tx);\n if (accessCacheInvalidation) {\n await this.invalidateAccessControlQueryCaches(tx, accessCacheInvalidation);\n await this.mergeAccessControlOverrideTargets(tx, accessCacheInvalidation);\n }\n });\n });\n }\n\n public async replaceSource(quads: Quad[], source: RdfSourceInput): Promise<void> {\n await this.ensureReady();\n const accessCacheInvalidation = rdfAccessControlCacheInvalidation(quads, source);\n const executor = this.requireExecutor();\n await this.withRetryableWrite(async () => {\n await executor.transaction(async (tx) => {\n const scopedDictionary = new PostgresRdfTermDictionary(tx);\n const sourceId = await this.upsertSource(source, tx);\n await this.markDirtySource(tx, source, 'upsert');\n const replacedRows = await this.quadRowsForSource(sourceId, tx);\n await tx.exec('DELETE FROM rdf_quads WHERE source_file_id = $1', [sourceId]);\n const insertedRows = await this.insertQuads(tx, scopedDictionary, quads, sourceId, null);\n await this.markDirtyQuadRows(tx, [...replacedRows, ...insertedRows]);\n await this.bumpFactsDataVersion(tx);\n if (accessCacheInvalidation) {\n await this.invalidateAccessControlQueryCaches(tx, accessCacheInvalidation);\n await this.replaceAccessControlOverrideTargets(tx, accessCacheInvalidation);\n }\n });\n });\n }\n\n public async deleteSource(source: string): Promise<number> {\n await this.ensureReady();\n const executor = this.requireExecutor();\n return this.withRetryableWrite(async () => {\n const sourceRow = await this.findSourceRow(source, executor);\n if (!sourceRow) {\n return 0;\n }\n const accessCacheInvalidation = rdfSourceAccessControlCacheInvalidation(\n sourceRow.source,\n sourceRow.local_path,\n sourceRow.workspace,\n sourceRow.source_version,\n );\n const result = await executor.transaction(async (tx) => {\n const deletedRows = await this.quadRowsForSource(sourceRow.id, tx);\n const deleteResult = await tx.query<{ count: number }>('DELETE FROM rdf_quads WHERE source_file_id = $1 RETURNING 1', [sourceRow.id]);\n await this.markDirtySourceRow(tx, sourceRow, 'delete');\n await tx.exec('DELETE FROM rdf_sources WHERE id = $1', [sourceRow.id]);\n await this.markDirtyQuadRows(tx, deletedRows);\n await this.bumpFactsDataVersion(tx);\n if (accessCacheInvalidation) {\n await this.invalidateAccessControlQueryCaches(tx, accessCacheInvalidation);\n await this.deleteAccessControlOverrideTargets(tx, accessCacheInvalidation.sourceKeys);\n }\n return deleteResult.length;\n });\n return result;\n });\n }\n\n public async moveSource(oldSource: string, next: RdfSourceInput): Promise<number> {\n await this.ensureReady();\n const executor = this.requireExecutor();\n return await executor.transaction(async (tx) => {\n const sourceRows = await tx.query<PostgresRdfSourceRow>('SELECT * FROM rdf_sources WHERE source = $1', [oldSource]);\n const sourceRow = sourceRows[0];\n if (!sourceRow) {\n return 0;\n }\n const affectedRows = await tx.query<{ count: number | string }>('SELECT COUNT(*) AS count FROM rdf_quads WHERE source_file_id = $1', [sourceRow.id]);\n const affectedQuads = Number(affectedRows[0]?.count ?? 0);\n const targetRows = await tx.query<PostgresRdfSourceRow>('SELECT * FROM rdf_sources WHERE source = $1', [next.source]);\n const targetRow = targetRows[0];\n if (targetRow && targetRow.id !== sourceRow.id) {\n await tx.exec('UPDATE rdf_quads SET source_file_id = $1 WHERE source_file_id = $2', [targetRow.id, sourceRow.id]);\n await tx.exec('DELETE FROM rdf_sources WHERE id = $1', [sourceRow.id]);\n await tx.exec(`\n UPDATE rdf_sources\n SET source = $2,\n workspace = $3,\n local_path = $4,\n content_type = $5,\n source_version = $6,\n last_indexed_at = NOW()\n WHERE id = $1\n `, [\n targetRow.id,\n next.source,\n next.workspace,\n next.localPath ?? null,\n next.contentType ?? null,\n next.sourceVersion ?? null,\n ]);\n } else {\n await tx.exec(`\n UPDATE rdf_sources\n SET source = $2,\n workspace = $3,\n local_path = $4,\n content_type = $5,\n source_version = $6,\n last_indexed_at = NOW()\n WHERE id = $1\n `, [\n sourceRow.id,\n next.source,\n next.workspace,\n next.localPath ?? null,\n next.contentType ?? null,\n next.sourceVersion ?? null,\n ]);\n }\n await this.bumpFactsDataVersion(tx);\n return Math.max(1, affectedQuads);\n });\n }\n\n public async delete(pattern: QuintPattern): Promise<number> {\n await this.ensureReady();\n const scan = await this.scan({ pattern });\n if (scan.quads.length === 0) {\n return 0;\n }\n const accessCacheInvalidation = rdfAccessControlCacheInvalidation(scan.quads);\n const executor = this.requireExecutor();\n await this.withRetryableWrite(async () => {\n await executor.transaction(async (tx) => {\n const scopedDictionary = new PostgresRdfTermDictionary(tx);\n await this.markDirtyQuads(tx, scopedDictionary, scan.quads);\n for (const value of scan.quads) {\n await this.deleteExactQuad(tx, scopedDictionary, value);\n }\n await this.bumpFactsDataVersion(tx);\n if (accessCacheInvalidation) {\n await this.invalidateAccessControlQueryCaches(tx, accessCacheInvalidation);\n }\n });\n });\n return scan.quads.length;\n }\n\n public async applyDelta(deletes: QuintPattern[], inserts: Quad[], options?: RdfIndexPutOptions): Promise<{ deletedRows: number; insertedRows: number }> {\n await this.ensureReady();\n if (deletes.length === 0 && inserts.length === 0) {\n return { deletedRows: 0, insertedRows: 0 };\n }\n\n const deleteQuads: Quad[] = [];\n for (const pattern of deletes) {\n deleteQuads.push(...(await this.scan({ pattern })).quads);\n }\n const uniqueDeleteQuads = uniqueQuads(deleteQuads);\n const accessCacheInvalidation = rdfAccessControlCacheInvalidation([...uniqueDeleteQuads, ...inserts], options?.source);\n const accessControlOverrideMerge = rdfAccessControlCacheInvalidation(inserts, options?.source);\n const executor = this.requireExecutor();\n let deletedRows = 0;\n deletedRows = await this.withRetryableWrite(async () => {\n deletedRows = await executor.transaction(async (tx) => {\n const scopedDictionary = new PostgresRdfTermDictionary(tx);\n await this.markDirtyQuads(tx, scopedDictionary, uniqueDeleteQuads);\n let deletedRows = 0;\n for (const value of uniqueDeleteQuads) {\n const deleted = await this.deleteExactQuad(tx, scopedDictionary, value);\n deletedRows += deleted;\n }\n const sourceId = options?.source ? await this.upsertSource(options.source, tx) : null;\n if (options?.source) {\n await this.markDirtySource(tx, options.source, 'upsert');\n }\n const insertedRows = await this.insertQuads(tx, scopedDictionary, inserts, sourceId, options?.sourceLineNo ?? null);\n await this.markDirtyQuadRows(tx, insertedRows);\n if (deletedRows > 0 || inserts.length > 0) {\n await this.bumpFactsDataVersion(tx);\n if (accessCacheInvalidation) {\n await this.invalidateAccessControlQueryCaches(tx, accessCacheInvalidation);\n }\n if (accessControlOverrideMerge) {\n await this.mergeAccessControlOverrideTargets(tx, accessControlOverrideMerge);\n }\n }\n return deletedRows;\n });\n return deletedRows;\n });\n return {\n deletedRows,\n insertedRows: inserts.length,\n };\n }\n\n public async rewriteTerms(input: RdfTermRewriteInput): Promise<RdfTermRewriteResult> {\n await this.ensureReady();\n const executor = this.requireExecutor();\n const dictionary = this.requireDictionary();\n const oldPrefix = input.oldPrefix;\n const newPrefix = input.newPrefix;\n if (!oldPrefix || !newPrefix || oldPrefix === newPrefix) {\n return { matchedTerms: 0, rewrittenTerms: 0, remappedTerms: 0, skippedTerms: [], affectedQuads: 0 };\n }\n const escapedOldPrefix = escapeLikePattern(oldPrefix);\n const oldPrefixFragmentPattern = `${escapedOldPrefix}#%`;\n const oldPrefixDirectoryPattern = `${escapedOldPrefix}%`;\n const oldPrefixAllowsDirectory = oldPrefix.endsWith('/');\n const exactResourceBoundary = (\n column: string,\n exactParam: string,\n fragmentParam: string,\n directoryAllowedParam: string,\n directoryParam: string,\n ): string => `(\n ${column} = ${exactParam}\n OR ${column} LIKE ${fragmentParam} ESCAPE '\\\\'\n OR (${directoryAllowedParam}::boolean AND ${column} LIKE ${directoryParam} ESCAPE '\\\\')\n )`;\n\n let matchedTerms = 0;\n let rewrittenTerms = 0;\n let affectedQuads = 0;\n const skippedTerms: RdfTermRewriteSkippedTerm[] = [];\n\n await executor.transaction(async (tx) => {\n const scopedDictionary = new PostgresRdfTermDictionary(tx);\n const rows = await tx.query<PostgresRdfTermRow>(`\n SELECT *\n FROM rdf_terms\n WHERE kind = 'iri'\n AND ${exactResourceBoundary('value', '$1', '$2', '$3', '$4')}\n ORDER BY id ASC\n `, [oldPrefix, oldPrefixFragmentPattern, oldPrefixAllowsDirectory, oldPrefixDirectoryPattern]);\n matchedTerms = rows.length;\n const termsToRewrite: Array<{\n row: PostgresRdfTermRow;\n nextValue: string;\n nextIdentity: RdfTermIdentity;\n }> = [];\n for (const row of rows) {\n const nextValue = `${newPrefix}${row.value.slice(oldPrefix.length)}`;\n const nextIdentity = await scopedDictionary.identityForNamedNodeValue(nextValue);\n const existing = await tx.query<{ id: number }>('SELECT id FROM rdf_terms WHERE hash = $1', [nextIdentity.hash]);\n const existingId = existing[0]?.id;\n if (existingId !== undefined && existingId !== row.id) {\n skippedTerms.push({ id: row.id, value: row.value, reason: 'collision_conflict' });\n continue;\n }\n const outsideScopeRows = await tx.query<{ count: number | string }>(`\n SELECT COUNT(*) AS count\n FROM rdf_quads quad\n JOIN rdf_terms graph ON graph.id = quad.graph_id\n WHERE (\n quad.graph_id = $1\n OR quad.subject_id = $1\n OR quad.predicate_id = $1\n OR quad.object_id = $1\n )\n AND NOT ${exactResourceBoundary('graph.value', '$2', '$3', '$4', '$5')}\n `, [row.id, oldPrefix, oldPrefixFragmentPattern, oldPrefixAllowsDirectory, oldPrefixDirectoryPattern]);\n if (Number(outsideScopeRows[0]?.count ?? 0) > 0) {\n skippedTerms.push({ id: row.id, value: row.value, reason: 'mixed_usage' });\n continue;\n }\n termsToRewrite.push({ row, nextValue, nextIdentity });\n }\n const rewrittenTermIds = termsToRewrite.map(({ row }) => row.id);\n if (rewrittenTermIds.length > 0) {\n const affectedRows = await tx.query<{ count: number | string }>(`\n SELECT COUNT(*) AS count\n FROM rdf_quads\n WHERE graph_id = ANY($1::bigint[])\n OR subject_id = ANY($1::bigint[])\n OR predicate_id = ANY($1::bigint[])\n OR object_id = ANY($1::bigint[])\n `, [rewrittenTermIds]);\n affectedQuads = Number(affectedRows[0]?.count ?? 0);\n }\n for (const { row, nextValue, nextIdentity } of termsToRewrite) {\n await tx.exec(`\n UPDATE rdf_terms\n SET value = $1,\n value_head = $2,\n hash = $3,\n normalized_text = $4\n WHERE id = $5\n `, [nextValue, nextIdentity.valueHead, nextIdentity.hash, nextIdentity.normalizedText, row.id]);\n rewrittenTerms += 1;\n }\n if (rewrittenTermIds.length > 0) {\n await this.bumpFactsDataVersion(tx);\n }\n });\n\n if (rewrittenTerms > 0) {\n dictionary.clearCaches();\n }\n\n return {\n matchedTerms,\n rewrittenTerms,\n remappedTerms: 0,\n skippedTerms,\n affectedQuads,\n };\n }\n\n public async scan(query: RdfPatternQuery): Promise<RdfQuadIndexScanResult> {\n await this.ensureReady();\n return isPgSqlScanCompatiblePattern(query.pattern)\n ? this.scanNative(query.pattern, query.options)\n : this.scanPostFilter(query.pattern, query.options);\n }\n\n public async indexTextSource(source: RdfTextSourceInput, text: string, chunks?: RdfTextChunkInput[]): Promise<void> {\n await this.requireTextIndex().indexText(source, text, chunks);\n }\n\n public async deleteTextSource(source: string): Promise<number> {\n return await this.requireTextIndex().deleteSource(source);\n }\n\n public async searchText(options: RdfTextSearchOptions | string): Promise<RdfTextSearchResult[]> {\n return await this.requireTextIndex().search(typeof options === 'string' ? { query: options } : options);\n }\n\n public async indexVectorSource(source: RdfVectorSourceInput, chunks: RdfVectorChunkInput[]): Promise<void> {\n await this.requireVectorIndex().indexVector(source, chunks);\n }\n\n public async deleteVectorSource(source: string): Promise<number> {\n return await this.requireVectorIndex().deleteSource(source);\n }\n\n public async searchVector(options: RdfVectorSearchOptions): Promise<RdfVectorSearchResult[]> {\n return await this.requireVectorIndex().search(options);\n }\n\n public async materializeView(input: RdfMaterializedViewBuildInput): Promise<RdfMaterializedViewBuildResult> {\n await this.ensureReady();\n const viewKey = normalizeMaterializedViewKey(input.key);\n const viewVersion = normalizeMaterializedViewVersion(input.version);\n const scope = resolveRdfQueryCacheScope(input.scope ?? input.query.cache?.scope);\n const factsDataVersion = await this.readFactsDataVersion();\n const sourceQuery = stripMaterializedViewBuildCache(input.query);\n const result = await this.query(sourceQuery);\n const variables = normalizeMaterializedViewVariables(\n input.variables ?? input.query.select ?? inferBindingVariables(result.bindings),\n );\n if (input.maxRows !== undefined && result.bindings.length > Math.max(0, Math.floor(input.maxRows))) {\n throw new Error(`RDF materialized view ${viewKey} produced ${result.bindings.length} rows, exceeding maxRows=${input.maxRows}`);\n }\n\n const viewShape = JSON.stringify(normalizeQueryCacheValue({\n key: viewKey,\n version: viewVersion,\n variables,\n queryShape: stableRdfQueryShape(input.query),\n scope: scope.shape,\n }));\n const queryShape = stableRdfQueryShape(input.query);\n const active = input.activate !== false;\n const cells = materializedViewCells(result.bindings, variables);\n\n await this.requireExecutor().transaction(async (tx) => {\n await tx.exec(`\n INSERT INTO ${RDF_MATERIALIZED_VIEW_TABLE} (\n view_key,\n view_version,\n scope_hash,\n scope_shape,\n scope_principal,\n scope_base_path,\n scope_mode,\n scope_authorization_model,\n scope_permission_version,\n scope_allowed_graph_urls,\n scope_denied_graph_urls,\n scope_denied_graph_prefixes,\n facts_data_version,\n view_shape,\n query_shape,\n variables,\n row_count,\n active,\n created_at,\n activated_at\n )\n VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, FALSE, NOW(), NULL)\n ON CONFLICT (view_key, view_version, scope_hash, facts_data_version) DO UPDATE\n SET scope_shape = EXCLUDED.scope_shape,\n scope_principal = EXCLUDED.scope_principal,\n scope_base_path = EXCLUDED.scope_base_path,\n scope_mode = EXCLUDED.scope_mode,\n scope_authorization_model = EXCLUDED.scope_authorization_model,\n scope_permission_version = EXCLUDED.scope_permission_version,\n scope_allowed_graph_urls = EXCLUDED.scope_allowed_graph_urls,\n scope_denied_graph_urls = EXCLUDED.scope_denied_graph_urls,\n scope_denied_graph_prefixes = EXCLUDED.scope_denied_graph_prefixes,\n view_shape = EXCLUDED.view_shape,\n query_shape = EXCLUDED.query_shape,\n variables = EXCLUDED.variables,\n row_count = EXCLUDED.row_count,\n active = FALSE,\n activated_at = NULL,\n created_at = NOW()\n `, [\n viewKey,\n viewVersion,\n scope.hash,\n scope.shape,\n scope.principal,\n scope.basePath,\n scope.mode,\n scope.authorizationModel,\n scope.permissionVersion,\n scope.allowedGraphUrls,\n scope.deniedGraphUrls,\n scope.deniedGraphPrefixes,\n factsDataVersion,\n viewShape,\n queryShape,\n variables,\n result.bindings.length,\n ]);\n await tx.exec(`\n DELETE FROM ${RDF_MATERIALIZED_VIEW_CELL_TABLE}\n WHERE view_key = $1\n AND view_version = $2\n AND scope_hash = $3\n AND facts_data_version = $4\n `, [viewKey, viewVersion, scope.hash, factsDataVersion]);\n for (const cell of cells) {\n await tx.exec(`\n INSERT INTO ${RDF_MATERIALIZED_VIEW_CELL_TABLE} (\n view_key,\n view_version,\n scope_hash,\n facts_data_version,\n row_index,\n variable,\n term_json\n )\n VALUES ($1, $2, $3, $4, $5, $6, $7)\n `, [viewKey, viewVersion, scope.hash, factsDataVersion, cell.rowIndex, cell.variable, cell.termJson]);\n }\n if (active) {\n await tx.exec(`\n UPDATE ${RDF_MATERIALIZED_VIEW_TABLE}\n SET active = FALSE\n WHERE view_key = $1\n AND view_version = $2\n AND scope_hash = $3\n AND active = TRUE\n `, [viewKey, viewVersion, scope.hash]);\n await tx.exec(`\n UPDATE ${RDF_MATERIALIZED_VIEW_TABLE}\n SET active = TRUE,\n activated_at = NOW()\n WHERE view_key = $1\n AND view_version = $2\n AND scope_hash = $3\n AND facts_data_version = $4\n `, [viewKey, viewVersion, scope.hash, factsDataVersion]);\n }\n });\n\n return {\n key: viewKey,\n version: viewVersion,\n scopeHash: scope.hash,\n factsDataVersion,\n variables,\n rowCount: result.bindings.length,\n active,\n };\n }\n\n public async readMaterializedView(source: RdfMaterializedViewBindingSource): Promise<RdfMaterializedViewReadResult | undefined> {\n await this.ensureReady();\n const viewKey = normalizeMaterializedViewKey(source.key);\n const viewVersion = normalizeMaterializedViewVersion(source.version);\n const scope = resolveRdfQueryCacheScope(source.scope);\n const views = await this.requireExecutor().query<PgMaterializedViewRow>(`\n SELECT *\n FROM ${RDF_MATERIALIZED_VIEW_TABLE}\n WHERE view_key = $1\n AND view_version = $2\n AND scope_hash = $3\n AND active = TRUE\n ORDER BY activated_at DESC NULLS LAST, facts_data_version DESC\n LIMIT 1\n `, [viewKey, viewVersion, scope.hash]);\n const view = views[0];\n if (!view) {\n return undefined;\n }\n\n const storedVariables = normalizeMaterializedViewVariables(parsePgTextArray(view.variables));\n const requestedVariables = source.variables\n ? normalizeMaterializedViewVariables(source.variables)\n : storedVariables;\n for (const variable of requestedVariables) {\n if (!storedVariables.includes(variable)) {\n throw new Error(`RDF materialized view ${viewKey} does not contain variable: ${variable}`);\n }\n }\n\n const variablePlaceholders = requestedVariables.map((_variable, index) => `$${5 + index}`).join(', ');\n const rows = await this.requireExecutor().query<PgMaterializedViewCellRow>(`\n SELECT row_index, variable, term_json\n FROM ${RDF_MATERIALIZED_VIEW_CELL_TABLE}\n WHERE view_key = $1\n AND view_version = $2\n AND scope_hash = $3\n AND facts_data_version = $4\n AND variable IN (${variablePlaceholders})\n ORDER BY row_index ASC, variable ASC\n `, [viewKey, viewVersion, scope.hash, Number(view.facts_data_version), ...requestedVariables]);\n const allBindings = bindingsFromMaterializedViewCells(rows);\n const offset = Math.max(0, source.offset ?? 0);\n const limit = source.limit === undefined ? undefined : Math.max(0, source.limit);\n const slicedBindings = allBindings.slice(offset, limit === undefined ? undefined : offset + limit);\n return {\n key: viewKey,\n version: viewVersion,\n scopeHash: scope.hash,\n factsDataVersion: Number(view.facts_data_version),\n variables: requestedVariables,\n rows: slicedBindings,\n rowCount: Number(view.row_count),\n active: pgBoolean(view.active),\n createdAt: view.created_at,\n ...(view.activated_at ? { activatedAt: view.activated_at } : {}),\n };\n }\n\n public async activateMaterializedView(source: RdfMaterializedViewActivationInput): Promise<RdfMaterializedViewActivationResult> {\n await this.ensureReady();\n const viewKey = normalizeMaterializedViewKey(source.key);\n const viewVersion = normalizeMaterializedViewVersion(source.version);\n const scope = resolveRdfQueryCacheScope(source.scope);\n return await this.requireExecutor().transaction(async (tx) => {\n const targetRows = await tx.query<{ facts_data_version: number | string }>(`\n SELECT facts_data_version\n FROM ${RDF_MATERIALIZED_VIEW_TABLE}\n WHERE view_key = $1\n AND view_version = $2\n AND scope_hash = $3\n ${source.factsDataVersion === undefined ? '' : 'AND facts_data_version = $4'}\n ORDER BY facts_data_version DESC\n LIMIT 1\n `, source.factsDataVersion === undefined\n ? [viewKey, viewVersion, scope.hash]\n : [viewKey, viewVersion, scope.hash, source.factsDataVersion]);\n const target = targetRows[0];\n if (!target) {\n throw new Error(`RDF materialized view build is not available for activation: ${viewKey}`);\n }\n const factsDataVersion = Number(target.facts_data_version);\n const previousRows = await tx.query<{ facts_data_version: number | string }>(`\n SELECT facts_data_version\n FROM ${RDF_MATERIALIZED_VIEW_TABLE}\n WHERE view_key = $1\n AND view_version = $2\n AND scope_hash = $3\n AND active = TRUE\n ORDER BY activated_at DESC NULLS LAST, facts_data_version DESC\n LIMIT 1\n `, [viewKey, viewVersion, scope.hash]);\n await tx.exec(`\n UPDATE ${RDF_MATERIALIZED_VIEW_TABLE}\n SET active = FALSE\n WHERE view_key = $1\n AND view_version = $2\n AND scope_hash = $3\n AND active = TRUE\n `, [viewKey, viewVersion, scope.hash]);\n const activated = await tx.query<{ facts_data_version: number | string }>(`\n UPDATE ${RDF_MATERIALIZED_VIEW_TABLE}\n SET active = TRUE,\n activated_at = NOW()\n WHERE view_key = $1\n AND view_version = $2\n AND scope_hash = $3\n AND facts_data_version = $4\n RETURNING facts_data_version\n `, [viewKey, viewVersion, scope.hash, factsDataVersion]);\n return {\n key: viewKey,\n version: viewVersion,\n scopeHash: scope.hash,\n factsDataVersion: Number(activated[0]?.facts_data_version ?? factsDataVersion),\n activated: activated.length > 0,\n ...(previousRows[0] ? { previousFactsDataVersion: Number(previousRows[0].facts_data_version) } : {}),\n };\n });\n }\n\n public async deleteMaterializedView(source: RdfMaterializedViewBindingSource): Promise<number> {\n await this.ensureReady();\n const viewKey = normalizeMaterializedViewKey(source.key);\n const viewVersion = normalizeMaterializedViewVersion(source.version);\n const scope = resolveRdfQueryCacheScope(source.scope);\n return await this.requireExecutor().transaction(async (tx) => {\n const rows = await tx.query<{ facts_data_version: number | string }>(`\n SELECT facts_data_version\n FROM ${RDF_MATERIALIZED_VIEW_TABLE}\n WHERE view_key = $1\n AND view_version = $2\n AND scope_hash = $3\n `, [viewKey, viewVersion, scope.hash]);\n await tx.exec(`\n DELETE FROM ${RDF_MATERIALIZED_VIEW_CELL_TABLE}\n WHERE view_key = $1\n AND view_version = $2\n AND scope_hash = $3\n `, [viewKey, viewVersion, scope.hash]);\n await tx.exec(`\n DELETE FROM ${RDF_MATERIALIZED_VIEW_TABLE}\n WHERE view_key = $1\n AND view_version = $2\n AND scope_hash = $3\n `, [viewKey, viewVersion, scope.hash]);\n return rows.length;\n });\n }\n\n public async exploreSchema(options: RdfSchemaExplorerOptions = {}): Promise<RdfSchemaExplorerResult> {\n await this.ensureReady();\n const normalized = normalizeSchemaExplorerOptions(options);\n const [graphs, predicates, classes, terms] = await Promise.all([\n this.schemaGraphSuggestions(normalized),\n this.schemaPredicateSuggestions(normalized),\n this.schemaClassSuggestions(normalized),\n this.schemaTermSuggestions(normalized),\n ]);\n return {\n graphs,\n predicates,\n classes,\n terms,\n };\n }\n\n public async searchPaths(options: RdfBoundedPathSearchOptions): Promise<RdfBoundedPathSearchResult> {\n await this.ensureReady();\n const normalized = normalizePathSearchOptions(options);\n const startId = await this.requireDictionary().find(options.start);\n if (startId === undefined) {\n return emptyPathSearchResult(normalized.maxDepth);\n }\n const targetId = options.target ? await this.requireDictionary().find(options.target) : undefined;\n if (options.target && targetId === undefined) {\n return emptyPathSearchResult(normalized.maxDepth);\n }\n const predicateIds: number[] = [];\n for (const predicate of options.predicates ?? []) {\n const predicateId = await this.requireDictionary().find(predicate);\n if (predicateId === undefined) {\n return emptyPathSearchResult(normalized.maxDepth);\n }\n predicateIds.push(predicateId);\n }\n\n let frontier: PgPathState[] = [{ nodeIds: [startId], edges: [] }];\n const complete: PgPathState[] = [];\n let scannedEdges = 0;\n let truncated = false;\n for (let depth = 0; depth < normalized.maxDepth && frontier.length > 0 && complete.length < normalized.maxPaths; depth += 1) {\n const frontierIds = uniqueNumbers(frontier.map((state) => state.nodeIds[state.nodeIds.length - 1]));\n const edgeLimit = Math.min(10_000, Math.max(128, normalized.maxPaths * 128));\n const rows = await this.pathEdgesForFrontier(frontierIds, predicateIds, normalized, edgeLimit);\n scannedEdges += rows.length;\n if (rows.length >= edgeLimit) {\n truncated = true;\n }\n\n const nextFrontier: PgPathState[] = [];\n for (const state of frontier) {\n const currentId = state.nodeIds[state.nodeIds.length - 1];\n for (const row of rows) {\n for (const candidate of pathTraversalCandidates(row, currentId, normalized.direction)) {\n if (state.nodeIds.includes(candidate.nextId)) {\n continue;\n }\n const next: PgPathState = {\n nodeIds: [...state.nodeIds, candidate.nextId],\n edges: [...state.edges, { ...row, direction: candidate.direction }],\n };\n if (targetId === undefined || candidate.nextId === targetId) {\n complete.push(next);\n if (complete.length >= normalized.maxPaths) {\n truncated = true;\n break;\n }\n }\n if (targetId === undefined || candidate.nextId !== targetId) {\n nextFrontier.push(next);\n }\n }\n if (complete.length >= normalized.maxPaths) {\n break;\n }\n }\n if (complete.length >= normalized.maxPaths) {\n break;\n }\n }\n if (nextFrontier.length > normalized.maxPaths) {\n truncated = true;\n }\n frontier = nextFrontier.slice(0, normalized.maxPaths);\n }\n\n return {\n paths: await this.materializePathStates(complete.slice(0, normalized.maxPaths)),\n truncated,\n scannedEdges,\n maxDepth: normalized.maxDepth,\n };\n }\n\n private async pathEdgesForFrontier(\n frontierIds: number[],\n predicateIds: number[],\n options: PgNormalizedPathSearchOptions,\n edgeLimit: number,\n ): Promise<PgPathEdgeRow[]> {\n if (frontierIds.length === 0) {\n return [];\n }\n const params: unknown[] = [];\n const frontierSql = frontierIds.map((id) => addPgParam(params, id)).join(', ');\n const conditions: string[] = [];\n if (options.direction === 'out') {\n conditions.push(`q.subject_id IN (${frontierSql})`);\n } else if (options.direction === 'in') {\n conditions.push(`q.object_id IN (${frontierSql})`);\n } else {\n conditions.push(`(q.subject_id IN (${frontierSql}) OR q.object_id IN (${frontierSql}))`);\n }\n if (predicateIds.length > 0) {\n conditions.push(`q.predicate_id IN (${predicateIds.map((id) => addPgParam(params, id)).join(', ')})`);\n }\n const graphJoin = options.graphPrefix\n ? `JOIN rdf_terms graph ON graph.id = q.graph_id AND graph.value LIKE ${addPgParam(params, `${options.graphPrefix}%`)}`\n : '';\n return await this.requireExecutor().query<PgPathEdgeRow>(`\n SELECT q.graph_id, q.subject_id, q.predicate_id, q.object_id\n FROM ${RDF_FACTS_TABLE} q\n ${graphJoin}\n WHERE ${conditions.join(' AND ')}\n ORDER BY q.graph_id, q.subject_id, q.predicate_id, q.object_id\n LIMIT ${addPgParam(params, edgeLimit)}\n `, params);\n }\n\n private async materializePathStates(states: PgPathState[]): Promise<RdfBoundedPath[]> {\n const ids = uniqueNumbers(states.flatMap((state) => [\n ...state.nodeIds,\n ...state.edges.flatMap((edge) => [edge.graph_id, edge.subject_id, edge.predicate_id, edge.object_id]),\n ]));\n const terms = await this.requireDictionary().rowsForIds(ids);\n return states.map((state) => ({\n nodes: state.nodeIds.map((id) => this.requiredTerm(terms, id)),\n edges: state.edges.map((edge) => ({\n graph: this.requiredTerm(terms, edge.graph_id),\n subject: this.requiredTerm(terms, edge.subject_id),\n predicate: this.requiredTerm(terms, edge.predicate_id),\n object: this.requiredTerm(terms, edge.object_id),\n direction: edge.direction,\n })),\n }));\n }\n\n private async expandMaterializedViewSources(query: RdfQuery): Promise<RdfQuery> {\n if ((query.materializedViews?.length ?? 0) === 0) {\n return query;\n }\n\n const sources: RdfValuesBindingSource[] = [];\n for (const source of query.materializedViews ?? []) {\n const view = await this.readMaterializedView(source);\n if (!view) {\n if (source.required === false) {\n continue;\n }\n throw new Error(`RDF materialized view is not active: ${source.key}`);\n }\n sources.push({\n variables: view.variables,\n rows: view.rows,\n });\n }\n const { materializedViews: _materializedViews, ...rest } = query;\n return {\n ...rest,\n values: [...(query.values ?? []), ...sources],\n };\n }\n\n public async query(query: RdfQuery): Promise<RdfQueryResult> {\n await this.ensureReady();\n query = await this.expandMaterializedViewSources(query);\n this.assertSearchIndexesConfigured(query);\n const template = this.resolveQueryTemplate(query);\n const materialized = this.resolveMaterializedResult(query);\n const cacheMode = query.cache?.mode ?? 'default';\n if (materialized && this.isMaterializedResultCacheEnabled(query)) {\n const factsDataVersion = await this.readFactsDataVersion();\n const cacheTtlMs = this.materializedResultCacheTtlMs(query);\n await this.pruneMaterializedResultCache(factsDataVersion, cacheTtlMs);\n if (cacheMode !== 'refresh') {\n const cached = await this.readMaterializedResultCache(materialized, template, factsDataVersion);\n if (cached) {\n this.recordMaterializedResultCacheCounter('hitCount');\n return this.withPostgresQueryExplain(this.withPgAccelerationFallbackPlan(withQueryCachePlan(\n cached,\n template.planMarker,\n materialized.planMarker,\n ), query), {\n query,\n template,\n factsDataVersion,\n materializedCache: {\n status: 'hit',\n key: materialized.cacheKey,\n templateKey: template.templateKey,\n factsDataVersion,\n ttlMs: cacheTtlMs,\n maxEntries: this.materializedResultCacheMaxEntries(),\n maxBytes: this.materializedResultCacheMaxBytes(),\n },\n resultCache: {\n status: 'not-applicable',\n },\n });\n }\n }\n\n const rdf3x = await this.queryRdf3x(query, template);\n const result = rdf3x ?? await this.queryFacts(query);\n this.recordMaterializedResultCacheCounter(cacheMode === 'refresh' ? 'refreshCount' : 'missCount');\n const storePlan = await this.writeMaterializedResultCache(\n materialized,\n template,\n factsDataVersion,\n result,\n );\n this.recordMaterializedResultCacheCounter('storeCount');\n await this.pruneMaterializedResultCache(factsDataVersion, cacheTtlMs);\n return this.withPostgresQueryExplain(this.withPgAccelerationFallbackPlan(withQueryCachePlan(\n result,\n template.planMarker,\n materialized.planMarker,\n cacheMode === 'refresh' ? 'PostgresMaterializedResultRefresh' : 'PostgresMaterializedResultMiss',\n ...storePlan,\n ), query), {\n query,\n template,\n factsDataVersion,\n materializedCache: {\n status: cacheMode === 'refresh' ? 'refresh' : 'miss',\n key: materialized.cacheKey,\n templateKey: template.templateKey,\n factsDataVersion,\n ttlMs: cacheTtlMs,\n maxEntries: this.materializedResultCacheMaxEntries(),\n maxBytes: this.materializedResultCacheMaxBytes(),\n stored: true,\n },\n resultCache: {\n status: 'not-applicable',\n },\n });\n }\n\n if (!this.isQueryResultCacheEnabled(query)) {\n const rdf3x = await this.queryRdf3x(query, template);\n this.recordQueryResultCacheCounter(query.cache?.mode === 'bypass' ? 'bypassCount' : 'disabledCount');\n if (materialized) {\n this.recordMaterializedResultCacheCounter('bypassCount');\n }\n return this.withPostgresQueryExplain(this.withPgAccelerationFallbackPlan(withQueryCachePlan(\n rdf3x ?? await this.queryFacts(query),\n template.planMarker,\n ), query), {\n query,\n template,\n resultCache: {\n status: query.cache?.mode === 'bypass' ? 'bypass' : 'disabled',\n maxEntries: this.queryResultCacheMaxEntries(),\n maxBytes: this.queryResultCacheMaxBytes(),\n },\n materializedCache: materialized\n ? {\n status: 'bypass',\n key: materialized.cacheKey,\n templateKey: template.templateKey,\n maxEntries: this.materializedResultCacheMaxEntries(),\n maxBytes: this.materializedResultCacheMaxBytes(),\n }\n : {\n status: 'not-applicable',\n },\n });\n }\n\n const factsDataVersion = await this.readFactsDataVersion();\n const cacheTtlMs = this.queryResultCacheTtlMs(query);\n await this.pruneQueryResultCache(factsDataVersion, cacheTtlMs);\n if (cacheMode !== 'refresh') {\n const cached = await this.readQueryResultCache(template, factsDataVersion);\n if (cached) {\n this.recordQueryResultCacheCounter('hitCount');\n return this.withPostgresQueryExplain(this.withPgAccelerationFallbackPlan(withQueryCachePlan(cached, template.planMarker), query), {\n query,\n template,\n factsDataVersion,\n resultCache: {\n status: 'hit',\n key: template.cacheKey,\n factsDataVersion,\n ttlMs: cacheTtlMs,\n maxEntries: this.queryResultCacheMaxEntries(),\n maxBytes: this.queryResultCacheMaxBytes(),\n },\n materializedCache: {\n status: 'not-applicable',\n },\n });\n }\n }\n\n const rdf3x = await this.queryRdf3x(query, template);\n const result = rdf3x ?? await this.queryFacts(query);\n this.recordQueryResultCacheCounter(cacheMode === 'refresh' ? 'refreshCount' : 'missCount');\n const storePlan = await this.writeQueryResultCache(\n template.cacheKey,\n factsDataVersion,\n template.queryShape,\n template.cacheScope,\n result,\n );\n this.recordQueryResultCacheCounter('storeCount');\n await this.pruneQueryResultCache(factsDataVersion, cacheTtlMs);\n return this.withPostgresQueryExplain(this.withPgAccelerationFallbackPlan(withQueryCachePlan(\n result,\n template.planMarker,\n cacheMode === 'refresh' ? 'PostgresResultCacheRefresh' : 'PostgresResultCacheMiss',\n ...storePlan,\n ), query), {\n query,\n template,\n factsDataVersion,\n resultCache: {\n status: cacheMode === 'refresh' ? 'refresh' : 'miss',\n key: template.cacheKey,\n factsDataVersion,\n ttlMs: cacheTtlMs,\n maxEntries: this.queryResultCacheMaxEntries(),\n maxBytes: this.queryResultCacheMaxBytes(),\n stored: true,\n },\n materializedCache: {\n status: 'not-applicable',\n },\n });\n }\n\n public async invalidateQueryResultCache(scope?: RdfQueryCacheScope): Promise<number> {\n await this.ensureReady();\n const executor = this.requireExecutor();\n if (scope === undefined) {\n return this.clearQueryCaches(executor);\n }\n\n const resolved = resolveRdfQueryCacheScope(scope);\n const resultRows = await executor.query<{ count: number }>(`\n WITH deleted AS (\n DELETE FROM ${RDF_QUERY_RESULT_CACHE_TABLE}\n WHERE scope_hash = $1\n RETURNING 1\n )\n SELECT COUNT(*) AS count FROM deleted\n `, [resolved.hash]);\n const materializedRows = await executor.query<{ count: number }>(`\n WITH deleted AS (\n DELETE FROM ${RDF_MATERIALIZED_RESULT_CACHE_TABLE}\n WHERE scope_hash = $1\n RETURNING 1\n )\n SELECT COUNT(*) AS count FROM deleted\n `, [resolved.hash]);\n return Number(resultRows[0]?.count ?? 0) + Number(materializedRows[0]?.count ?? 0);\n }\n\n private async clearQueryCaches(executor: AsyncSqlExecutor): Promise<number> {\n const resultRows = await executor.query<{ count: number }>(`\n WITH deleted AS (\n DELETE FROM ${RDF_QUERY_RESULT_CACHE_TABLE}\n RETURNING 1\n )\n SELECT COUNT(*) AS count FROM deleted\n `);\n const materializedRows = await executor.query<{ count: number }>(`\n WITH deleted AS (\n DELETE FROM ${RDF_MATERIALIZED_RESULT_CACHE_TABLE}\n RETURNING 1\n )\n SELECT COUNT(*) AS count FROM deleted\n `);\n return Number(resultRows[0]?.count ?? 0) + Number(materializedRows[0]?.count ?? 0);\n }\n\n private async invalidateAccessControlQueryCaches(\n executor: AsyncSqlExecutor,\n invalidation: RdfAccessControlCacheInvalidation,\n ): Promise<number> {\n const scopes = await this.accessControlInvalidationScopes(executor, invalidation);\n if (scopes.length === 0) {\n return this.clearQueryCaches(executor);\n }\n\n const affectedRows = scopes.map((_, index) => {\n const offset = index * 2;\n return `($${offset + 1}, $${offset + 2}::text[])`;\n }).join(', ');\n const affectedParams = scopes.flatMap((scope) => [scope.basePath, scope.permissionVersions]);\n const pathOverlap = (left: string, right: string): string => `\n (\n LEFT(${left}, LENGTH(${right})) = ${right}\n OR LEFT(${right}, LENGTH(${left})) = ${left}\n )\n `;\n const permissionVersionOverlap = `\n (\n affected_access_scope.permission_versions IS NULL\n OR scope_permission_version IS NULL\n OR scope_permission_version = ANY(affected_access_scope.permission_versions)\n )\n `;\n const affectedVersionOverlap = `\n EXISTS (\n SELECT 1\n FROM affected_access_scope\n WHERE ${permissionVersionOverlap}\n )\n `;\n const affectedBasePathOverlap = `\n EXISTS (\n SELECT 1\n FROM affected_access_scope\n WHERE ${permissionVersionOverlap}\n AND ${pathOverlap('scope_base_path', 'base_path')}\n )\n `;\n const graphScopeOverlap = (column: string): string => `\n EXISTS (\n SELECT 1\n FROM affected_access_scope\n WHERE ${permissionVersionOverlap}\n AND EXISTS (\n SELECT 1\n FROM UNNEST(COALESCE(${column}, ARRAY[]::text[])) AS graph_scope(value)\n WHERE ${pathOverlap('graph_scope.value', 'base_path')}\n )\n )\n `;\n const hasNoAllowedGraphs = 'COALESCE(array_length(scope_allowed_graph_urls, 1), 0) = 0';\n const overlapCondition = `\n (\n ${hasNoAllowedGraphs}\n AND ${affectedVersionOverlap}\n AND (\n scope_base_path IS NULL\n OR ${affectedBasePathOverlap}\n )\n )\n OR ${graphScopeOverlap('scope_allowed_graph_urls')}\n OR ${graphScopeOverlap('scope_denied_graph_urls')}\n OR ${graphScopeOverlap('scope_denied_graph_prefixes')}\n `;\n const resultRows = await executor.query<{ count: number }>(`\n WITH affected_access_scope(base_path, permission_versions) AS (VALUES ${affectedRows}),\n deleted AS (\n DELETE FROM ${RDF_QUERY_RESULT_CACHE_TABLE}\n WHERE ${overlapCondition}\n RETURNING 1\n )\n SELECT COUNT(*) AS count FROM deleted\n `, affectedParams);\n const materializedRows = await executor.query<{ count: number }>(`\n WITH affected_access_scope(base_path, permission_versions) AS (VALUES ${affectedRows}),\n deleted AS (\n DELETE FROM ${RDF_MATERIALIZED_RESULT_CACHE_TABLE}\n WHERE ${overlapCondition}\n RETURNING 1\n )\n SELECT COUNT(*) AS count FROM deleted\n `, affectedParams);\n return Number(resultRows[0]?.count ?? 0) + Number(materializedRows[0]?.count ?? 0);\n }\n\n private async accessControlInvalidationScopes(\n executor: AsyncSqlExecutor,\n invalidation: RdfAccessControlCacheInvalidation,\n ): Promise<RdfAccessControlInvalidationScope[]> {\n const stored = await this.accessControlOverrideTargetsForSources(executor, invalidation.sourceKeys);\n const exact = accessControlInvalidationScopesForTargetReplacements(stored, invalidation.sourceTargets);\n return exact.length > 0 ? exact : invalidation.fallbackScopes;\n }\n\n public async refreshDerivedIndexes(options?: RdfDerivedIndexRefreshOptions): Promise<RdfDerivedIndexRefreshResult> {\n await this.ensureReady();\n const factsDataVersion = await this.readFactsDataVersion();\n const previousFactsDataVersion = await this.readRdf3xFactsDataVersion();\n const sourceQueueCutoff = await this.dirtySourceQueueCutoff();\n const pendingSources = await this.dirtySourceQueueCount(this.requireExecutor(), sourceQueueCutoff);\n const maxDirtySources = this.normalizeDirtySourceBatchSize(options?.maxDirtySources);\n const forceFull = options?.mode === 'full';\n if (!forceFull && previousFactsDataVersion === factsDataVersion) {\n const plannerStats = await this.refreshPlannerStats(this.requireExecutor());\n const drainedSources = await this.clearDirtySourceQueue(this.requireExecutor(), sourceQueueCutoff, maxDirtySources);\n return {\n derivedIndexProfile: 'rdf3x',\n factsDataVersion,\n rdf3x: {\n refreshed: false,\n previousFactsDataVersion,\n factsDataVersion,\n syncedWithFacts: true,\n plannerStats,\n sourceQueue: {\n pendingSources,\n drainedSources,\n },\n },\n };\n }\n const dirtyStats = await this.dirtyProjectionStats();\n const rebuild = forceFull || isEmptyDirtyProjectionStats(dirtyStats)\n ? await this.rebuildRdf3xDerivedIndexes(factsDataVersion)\n : await this.refreshRdf3xDirtyDerivedIndexes(factsDataVersion, dirtyStats);\n const plannerStats = await this.refreshPlannerStats(this.requireExecutor());\n const drainedSources = await this.clearDirtySourceQueue(this.requireExecutor(), sourceQueueCutoff, maxDirtySources);\n return {\n derivedIndexProfile: 'rdf3x',\n factsDataVersion,\n rdf3x: {\n refreshed: forceFull || previousFactsDataVersion !== factsDataVersion,\n previousFactsDataVersion,\n factsDataVersion,\n syncedWithFacts: true,\n plannerStats,\n rebuild,\n sourceQueue: {\n pendingSources,\n drainedSources,\n },\n },\n };\n }\n\n public async ensurePgCustomIndexes(): Promise<RdfPgAccelerationStats> {\n await this.ensureReady();\n await this.initializePgCustomIndexes();\n return this.pgAccelerationStats();\n }\n\n public async storageStats(options: RdfStorageStatsOptions = {}): Promise<RdfEngineStorageStats> {\n await this.ensureReady();\n const facts = await this.factsStats();\n const rdf3x = await this.rdf3xStats();\n const factsDataVersion = await this.readFactsDataVersion();\n const pendingSources = await this.dirtySourceQueueCount();\n const queryResultCache = await this.queryResultCacheStats();\n const materializedResultCache = await this.materializedResultCacheStats();\n const queryTemplateCache = this.queryTemplateCacheStats();\n const accessControlOverrides = await this.accessControlOverrideStats();\n const derivedCache = this.derivedCacheStats(\n queryResultCache,\n materializedResultCache,\n queryTemplateCache,\n await this.derivedCacheScopeStats(options.cacheScope),\n );\n const factsBytes = facts.databaseBytes;\n const derivedBytes = rdf3x.databaseBytes\n + queryResultCache.totalBytes\n + materializedResultCache.totalBytes\n + queryTemplateCache.totalBytes\n + accessControlOverrides.totalBytes;\n const totalBytes = factsBytes + derivedBytes;\n return {\n derivedIndexProfile: 'rdf3x',\n lifecycle: this.lifecycleStats(),\n facts,\n rdf3x: {\n stats: rdf3x,\n factsDataVersion,\n rdf3xFactsDataVersion: rdf3x.factsDataVersion,\n refreshLag: Math.max(0, factsDataVersion - rdf3x.factsDataVersion),\n syncedWithFacts: rdf3x.factsDataVersion === factsDataVersion,\n pendingSources,\n },\n derivedCache,\n queryResultCache,\n materializedResultCache,\n queryTemplateCache,\n accessControlOverrides,\n slowQueries: this.slowQueryStats(),\n pgAcceleration: await this.pgAccelerationStats(),\n bulkLoad: snapshotBulkLoadStats(this.copyFromRowsStats),\n factsBytes,\n derivedBytes,\n totalBytes,\n derivedToFactsRatio: factsBytes === 0 ? 0 : derivedBytes / factsBytes,\n totalToFactsRatio: factsBytes === 0 ? 0 : totalBytes / factsBytes,\n };\n }\n\n private lifecycleStats(): RdfEngineLifecycleStats {\n return {\n status: this.lifecycleStatus,\n driver: this.pgOptions.driver,\n openCount: this.lifecycleOpenCount,\n ...(this.lastOpenStartedAt ? { lastOpenStartedAt: this.lastOpenStartedAt } : {}),\n ...(this.lastReadyAt ? { lastReadyAt: this.lastReadyAt } : {}),\n ...(this.lastOpenDurationMs !== undefined ? { lastOpenDurationMs: this.lastOpenDurationMs } : {}),\n ...(this.lastOpenFailedAt ? { lastOpenFailedAt: this.lastOpenFailedAt } : {}),\n ...(this.lastOpenError ? { lastOpenError: this.lastOpenError } : {}),\n ...(this.lastColdStart ? { coldStart: this.lastColdStart } : {}),\n };\n }\n\n private async pgAccelerationStats(): Promise<RdfPgAccelerationStats> {\n const acceleration = this.pgAcceleration ?? this.disabledPgAccelerationStats();\n const activeOperators = this.effectivePgAccelerationActiveOperators(acceleration);\n const deferredCustomIndex = this.pgCustomIndexBuildIsDeferred(acceleration);\n const result: RdfPgAccelerationStats = {\n ...acceleration,\n activeOperators,\n ...(deferredCustomIndex\n ? {\n fallbackReason: 'index-build-deferred' as const,\n fallbackDetail: 'PostgreSQL RDF custom permutation indexes are deferred until ensurePgCustomIndexes() runs',\n }\n : {}),\n };\n if (\n result.enabled !== true\n || result.profile !== 'pg-custom-index'\n || result.capabilityProviders?.['index.xpod_rdf_perm'] !== 'extension'\n || !this.pgCustomIndexesReady\n ) {\n return result;\n }\n return {\n ...result,\n customIndexes: await this.pgCustomIndexStats(),\n };\n }\n\n private async pgCustomIndexStats(): Promise<RdfPgCustomIndexStats[]> {\n const executor = this.requireExecutor();\n const results: RdfPgCustomIndexStats[] = [];\n for (const permutation of PERMUTATIONS) {\n const name = pgCustomPermutationIndexName(permutation);\n try {\n const rows = await executor.query<{ stats: string }>('SELECT xpod_rdf.perm_index_stats($1::regclass) AS stats', [name]);\n results.push({\n name,\n permutation: permutation.name,\n columns: permutation.columns,\n stats: parseJsonObject(rows[0]?.stats),\n });\n } catch (error) {\n results.push({\n name,\n permutation: permutation.name,\n columns: permutation.columns,\n error: errorMessage(error),\n });\n }\n }\n return results;\n }\n\n private async initializeSchema(): Promise<void> {\n const executor = this.requireExecutor();\n await this.ensureCompatibleSchemaVersion(executor);\n await executor.exec(`\n CREATE TABLE IF NOT EXISTS rdf_sources (\n id BIGSERIAL PRIMARY KEY,\n source TEXT NOT NULL UNIQUE,\n workspace TEXT NOT NULL,\n local_path TEXT,\n content_type TEXT,\n last_indexed_at TIMESTAMPTZ,\n source_version TEXT\n )\n `);\n await this.initializeDirtySourceQueueSchema(executor);\n await this.initializeAccessControlOverrideSchema(executor);\n await executor.exec(`\n CREATE TABLE IF NOT EXISTS rdf_quads (\n graph_id BIGINT NOT NULL,\n subject_id BIGINT NOT NULL,\n predicate_id BIGINT NOT NULL,\n object_id BIGINT NOT NULL,\n source_file_id BIGINT,\n source_line_no BIGINT,\n PRIMARY KEY (graph_id, subject_id, predicate_id, object_id)\n )\n `);\n await executor.exec('CREATE INDEX IF NOT EXISTS rdf_quads_spog ON rdf_quads (subject_id, predicate_id, object_id, graph_id)');\n await executor.exec('CREATE INDEX IF NOT EXISTS rdf_quads_sopg ON rdf_quads (subject_id, object_id, predicate_id, graph_id)');\n await executor.exec('CREATE INDEX IF NOT EXISTS rdf_quads_psog ON rdf_quads (predicate_id, subject_id, object_id, graph_id)');\n await executor.exec('CREATE INDEX IF NOT EXISTS rdf_quads_posg ON rdf_quads (predicate_id, object_id, subject_id, graph_id)');\n await executor.exec('CREATE INDEX IF NOT EXISTS rdf_quads_ospg ON rdf_quads (object_id, subject_id, predicate_id, graph_id)');\n await executor.exec('CREATE INDEX IF NOT EXISTS rdf_quads_opsg ON rdf_quads (object_id, predicate_id, subject_id, graph_id)');\n await executor.exec('CREATE INDEX IF NOT EXISTS rdf_quads_gspo ON rdf_quads (graph_id, subject_id, predicate_id, object_id)');\n await executor.exec('CREATE INDEX IF NOT EXISTS rdf_quads_gpos ON rdf_quads (graph_id, predicate_id, object_id, subject_id)');\n await executor.exec('CREATE INDEX IF NOT EXISTS rdf_quads_source ON rdf_quads (source_file_id, source_line_no)');\n await executor.exec(`\n CREATE TABLE IF NOT EXISTS rdf_index_metadata (\n key TEXT PRIMARY KEY,\n value TEXT NOT NULL\n )\n `);\n await executor.exec(`\n INSERT INTO rdf_index_metadata (key, value)\n VALUES ('schema_version', '${POSTGRES_RDF_SCHEMA_VERSION}')\n ON CONFLICT (key) DO NOTHING\n `);\n await executor.exec(`\n INSERT INTO rdf_index_metadata (key, value)\n VALUES ('data_version', '0')\n ON CONFLICT (key) DO NOTHING\n `);\n await this.initializeQueryResultCacheSchema(executor);\n await this.initializeMaterializedResultCacheSchema(executor);\n await this.initializeMaterializedViewSchema(executor);\n await this.initializeRdf3xSchema(executor);\n }\n\n private async initializePgCustomIndexes(): Promise<void> {\n const acceleration = this.pgAcceleration;\n if (\n acceleration?.profile !== 'pg-custom-index'\n || acceleration.enabled !== true\n || acceleration.capabilityProviders?.['index.xpod_rdf_perm'] !== 'extension'\n ) {\n this.pgCustomIndexesReady = false;\n return;\n }\n if (this.pgCustomIndexesReady) {\n return;\n }\n\n try {\n const executor = this.requireExecutor();\n for (const permutation of PERMUTATIONS) {\n await executor.exec(`\n CREATE INDEX IF NOT EXISTS ${pgCustomPermutationIndexName(permutation)}\n ON ${RDF_FACTS_TABLE}\n USING xpod_rdf_perm (${permutation.columns.map((column) => `${column} xpod_rdf.term_id_ops`).join(', ')})\n `);\n }\n this.pgCustomIndexesReady = true;\n } catch (error) {\n this.pgCustomIndexesReady = false;\n this.pgAcceleration = {\n ...acceleration,\n enabled: false,\n activeOperators: undefined,\n fallbackReason: 'probe-failed',\n fallbackDetail: `Failed to initialize xpod_rdf custom indexes: ${errorMessage(error)}`,\n };\n }\n }\n\n private async initializeQueryResultCacheSchema(executor: AsyncSqlExecutor): Promise<void> {\n await executor.exec(`\n CREATE TABLE IF NOT EXISTS ${RDF_QUERY_RESULT_CACHE_TABLE} (\n cache_key TEXT NOT NULL,\n facts_data_version BIGINT NOT NULL,\n query_shape TEXT NOT NULL,\n scope_hash TEXT NOT NULL DEFAULT 'legacy',\n scope_shape TEXT NOT NULL DEFAULT 'legacy',\n scope_principal TEXT,\n scope_base_path TEXT,\n scope_mode TEXT,\n scope_authorization_model TEXT,\n scope_permission_version TEXT,\n scope_allowed_graph_urls TEXT[],\n scope_denied_graph_urls TEXT[],\n scope_denied_graph_prefixes TEXT[],\n result_json TEXT NOT NULL,\n row_count BIGINT NOT NULL,\n hit_count BIGINT NOT NULL DEFAULT 0,\n created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n last_hit_at TIMESTAMPTZ,\n PRIMARY KEY (cache_key, scope_hash, facts_data_version)\n )\n `);\n await executor.exec(`\n ALTER TABLE ${RDF_QUERY_RESULT_CACHE_TABLE}\n ADD COLUMN IF NOT EXISTS scope_hash TEXT NOT NULL DEFAULT 'legacy'\n `);\n await executor.exec(`\n ALTER TABLE ${RDF_QUERY_RESULT_CACHE_TABLE}\n ADD COLUMN IF NOT EXISTS scope_shape TEXT NOT NULL DEFAULT 'legacy'\n `);\n await executor.exec(`\n ALTER TABLE ${RDF_QUERY_RESULT_CACHE_TABLE}\n ADD COLUMN IF NOT EXISTS scope_principal TEXT\n `);\n await executor.exec(`\n ALTER TABLE ${RDF_QUERY_RESULT_CACHE_TABLE}\n ADD COLUMN IF NOT EXISTS scope_base_path TEXT\n `);\n await executor.exec(`\n ALTER TABLE ${RDF_QUERY_RESULT_CACHE_TABLE}\n ADD COLUMN IF NOT EXISTS scope_mode TEXT\n `);\n await executor.exec(`\n ALTER TABLE ${RDF_QUERY_RESULT_CACHE_TABLE}\n ADD COLUMN IF NOT EXISTS scope_authorization_model TEXT\n `);\n await executor.exec(`\n ALTER TABLE ${RDF_QUERY_RESULT_CACHE_TABLE}\n ADD COLUMN IF NOT EXISTS scope_permission_version TEXT\n `);\n await executor.exec(`\n ALTER TABLE ${RDF_QUERY_RESULT_CACHE_TABLE}\n ADD COLUMN IF NOT EXISTS scope_allowed_graph_urls TEXT[]\n `);\n await executor.exec(`\n ALTER TABLE ${RDF_QUERY_RESULT_CACHE_TABLE}\n ADD COLUMN IF NOT EXISTS scope_denied_graph_urls TEXT[]\n `);\n await executor.exec(`\n ALTER TABLE ${RDF_QUERY_RESULT_CACHE_TABLE}\n ADD COLUMN IF NOT EXISTS scope_denied_graph_prefixes TEXT[]\n `);\n await executor.exec(`\n ALTER TABLE ${RDF_QUERY_RESULT_CACHE_TABLE}\n DROP CONSTRAINT IF EXISTS rdf_query_result_cache_pkey\n `);\n await executor.exec(`\n ALTER TABLE ${RDF_QUERY_RESULT_CACHE_TABLE}\n ADD PRIMARY KEY (cache_key, scope_hash, facts_data_version)\n `);\n await executor.exec(`\n CREATE INDEX IF NOT EXISTS rdf_query_result_cache_version\n ON ${RDF_QUERY_RESULT_CACHE_TABLE} (facts_data_version)\n `);\n await executor.exec(`\n CREATE INDEX IF NOT EXISTS rdf_query_result_cache_scope\n ON ${RDF_QUERY_RESULT_CACHE_TABLE} (facts_data_version, scope_hash)\n `);\n await executor.exec(`\n CREATE INDEX IF NOT EXISTS rdf_query_result_cache_access_scope\n ON ${RDF_QUERY_RESULT_CACHE_TABLE} (\n scope_base_path,\n scope_principal,\n scope_mode,\n scope_authorization_model,\n scope_permission_version\n )\n `);\n await executor.exec(`\n CREATE INDEX IF NOT EXISTS rdf_query_result_cache_created_at\n ON ${RDF_QUERY_RESULT_CACHE_TABLE} (created_at)\n `);\n }\n\n private async initializeMaterializedResultCacheSchema(executor: AsyncSqlExecutor): Promise<void> {\n await executor.exec(`\n CREATE TABLE IF NOT EXISTS ${RDF_MATERIALIZED_RESULT_CACHE_TABLE} (\n cache_key TEXT NOT NULL,\n facts_data_version BIGINT NOT NULL,\n materialized_shape TEXT NOT NULL,\n template_key TEXT NOT NULL DEFAULT 'legacy',\n query_shape TEXT NOT NULL,\n scope_hash TEXT NOT NULL,\n scope_shape TEXT NOT NULL,\n scope_principal TEXT,\n scope_base_path TEXT,\n scope_mode TEXT,\n scope_authorization_model TEXT,\n scope_permission_version TEXT,\n scope_allowed_graph_urls TEXT[],\n scope_denied_graph_urls TEXT[],\n scope_denied_graph_prefixes TEXT[],\n result_json TEXT NOT NULL,\n row_count BIGINT NOT NULL,\n hit_count BIGINT NOT NULL DEFAULT 0,\n created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n last_hit_at TIMESTAMPTZ,\n PRIMARY KEY (cache_key, scope_hash, facts_data_version)\n )\n `);\n await executor.exec(`\n ALTER TABLE ${RDF_MATERIALIZED_RESULT_CACHE_TABLE}\n ADD COLUMN IF NOT EXISTS template_key TEXT NOT NULL DEFAULT 'legacy'\n `);\n await executor.exec(`\n ALTER TABLE ${RDF_MATERIALIZED_RESULT_CACHE_TABLE}\n ADD COLUMN IF NOT EXISTS scope_allowed_graph_urls TEXT[]\n `);\n await executor.exec(`\n ALTER TABLE ${RDF_MATERIALIZED_RESULT_CACHE_TABLE}\n ADD COLUMN IF NOT EXISTS scope_denied_graph_urls TEXT[]\n `);\n await executor.exec(`\n ALTER TABLE ${RDF_MATERIALIZED_RESULT_CACHE_TABLE}\n ADD COLUMN IF NOT EXISTS scope_denied_graph_prefixes TEXT[]\n `);\n await executor.exec(`\n CREATE INDEX IF NOT EXISTS rdf_materialized_result_cache_version\n ON ${RDF_MATERIALIZED_RESULT_CACHE_TABLE} (facts_data_version)\n `);\n await executor.exec(`\n CREATE INDEX IF NOT EXISTS rdf_materialized_result_cache_scope\n ON ${RDF_MATERIALIZED_RESULT_CACHE_TABLE} (facts_data_version, scope_hash)\n `);\n await executor.exec(`\n CREATE INDEX IF NOT EXISTS rdf_materialized_result_cache_access_scope\n ON ${RDF_MATERIALIZED_RESULT_CACHE_TABLE} (\n scope_base_path,\n scope_principal,\n scope_mode,\n scope_authorization_model,\n scope_permission_version\n )\n `);\n await executor.exec(`\n CREATE INDEX IF NOT EXISTS rdf_materialized_result_cache_created_at\n ON ${RDF_MATERIALIZED_RESULT_CACHE_TABLE} (created_at)\n `);\n }\n\n private async initializeMaterializedViewSchema(executor: AsyncSqlExecutor): Promise<void> {\n await executor.exec(`\n CREATE TABLE IF NOT EXISTS ${RDF_MATERIALIZED_VIEW_TABLE} (\n view_key TEXT NOT NULL,\n view_version TEXT NOT NULL DEFAULT '${DEFAULT_RDF_MATERIALIZED_VIEW_VERSION}',\n scope_hash TEXT NOT NULL,\n scope_shape TEXT NOT NULL,\n scope_principal TEXT,\n scope_base_path TEXT,\n scope_mode TEXT,\n scope_authorization_model TEXT,\n scope_permission_version TEXT,\n scope_allowed_graph_urls TEXT[],\n scope_denied_graph_urls TEXT[],\n scope_denied_graph_prefixes TEXT[],\n facts_data_version BIGINT NOT NULL,\n view_shape TEXT NOT NULL,\n query_shape TEXT NOT NULL,\n variables TEXT[] NOT NULL,\n row_count BIGINT NOT NULL,\n active BOOLEAN NOT NULL DEFAULT FALSE,\n created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n activated_at TIMESTAMPTZ,\n PRIMARY KEY (view_key, view_version, scope_hash, facts_data_version)\n )\n `);\n await executor.exec(`\n CREATE TABLE IF NOT EXISTS ${RDF_MATERIALIZED_VIEW_CELL_TABLE} (\n view_key TEXT NOT NULL,\n view_version TEXT NOT NULL DEFAULT '${DEFAULT_RDF_MATERIALIZED_VIEW_VERSION}',\n scope_hash TEXT NOT NULL,\n facts_data_version BIGINT NOT NULL,\n row_index BIGINT NOT NULL,\n variable TEXT NOT NULL,\n term_json TEXT NOT NULL,\n PRIMARY KEY (view_key, view_version, scope_hash, facts_data_version, row_index, variable)\n )\n `);\n await executor.exec(`\n CREATE INDEX IF NOT EXISTS rdf_materialized_views_active\n ON ${RDF_MATERIALIZED_VIEW_TABLE} (view_key, view_version, scope_hash, active, activated_at)\n `);\n await executor.exec(`\n CREATE INDEX IF NOT EXISTS rdf_materialized_views_version\n ON ${RDF_MATERIALIZED_VIEW_TABLE} (facts_data_version)\n `);\n await executor.exec(`\n CREATE INDEX IF NOT EXISTS rdf_materialized_view_cells_view\n ON ${RDF_MATERIALIZED_VIEW_CELL_TABLE} (view_key, view_version, scope_hash, facts_data_version, row_index)\n `);\n }\n\n private async ensureCompatibleSchemaVersion(executor: AsyncSqlExecutor): Promise<void> {\n await executor.exec(`\n CREATE TABLE IF NOT EXISTS rdf_index_metadata (\n key TEXT PRIMARY KEY,\n value TEXT NOT NULL\n )\n `);\n const row = await executor.query<{ value: string }>(\"SELECT value FROM rdf_index_metadata WHERE key = 'schema_version'\");\n const version = row[0]?.value;\n if (version === undefined || version === String(POSTGRES_RDF_SCHEMA_VERSION)) {\n return;\n }\n\n await executor.transaction(async (tx) => {\n await tx.exec('DROP TABLE IF EXISTS rdf_quads');\n await tx.exec('DROP TABLE IF EXISTS rdf_sources');\n await tx.exec('DROP TABLE IF EXISTS rdf_terms');\n await tx.exec(`DROP TABLE IF EXISTS ${RDF_DIRTY_SOURCE_TABLE}`);\n await tx.exec(`DROP TABLE IF EXISTS ${RDF_MAINTENANCE_LEASE_TABLE}`);\n await tx.exec(`DROP TABLE IF EXISTS ${RDF_ACCESS_CONTROL_OVERRIDE_TABLE}`);\n await tx.exec(`DROP TABLE IF EXISTS ${RDF_QUERY_RESULT_CACHE_TABLE}`);\n await tx.exec(`DROP TABLE IF EXISTS ${RDF_MATERIALIZED_RESULT_CACHE_TABLE}`);\n await tx.exec(`DROP TABLE IF EXISTS ${RDF_MATERIALIZED_VIEW_CELL_TABLE}`);\n await tx.exec(`DROP TABLE IF EXISTS ${RDF_MATERIALIZED_VIEW_TABLE}`);\n await tx.exec('DELETE FROM rdf_index_metadata');\n await tx.exec(\n \"INSERT INTO rdf_index_metadata (key, value) VALUES ('schema_version', $1)\",\n [String(POSTGRES_RDF_SCHEMA_VERSION)],\n );\n await tx.exec(\"INSERT INTO rdf_index_metadata (key, value) VALUES ('data_version', '0')\");\n });\n }\n\n private async initializeRdf3xSchema(executor: AsyncSqlExecutor): Promise<void> {\n await executor.exec(`\n CREATE TABLE IF NOT EXISTS rdf3x_metadata (\n key TEXT PRIMARY KEY,\n value TEXT NOT NULL\n )\n `);\n const row = await executor.query<{ value: string }>(\"SELECT value FROM rdf3x_metadata WHERE key = 'schema_version'\");\n const version = row[0]?.value;\n if (version !== undefined && version !== String(POSTGRES_RDF3X_SCHEMA_VERSION)) {\n await this.dropRdf3xDerivedSchema(executor);\n }\n\n await executor.exec(`\n CREATE TABLE IF NOT EXISTS ${RDF3X_GRAPH_PROJECTION_TABLE} (\n graph_id BIGINT PRIMARY KEY,\n membership_count BIGINT NOT NULL\n )\n `);\n await executor.exec(`\n CREATE TABLE IF NOT EXISTS ${RDF3X_DIRTY_GRAPH_TABLE} (\n graph_id BIGINT PRIMARY KEY\n )\n `);\n await executor.exec(`\n CREATE TABLE IF NOT EXISTS ${RDF3X_DIRTY_PAIR_TABLE} (\n projection TEXT NOT NULL,\n left_id BIGINT NOT NULL,\n right_id BIGINT NOT NULL,\n PRIMARY KEY (projection, left_id, right_id)\n )\n `);\n await executor.exec(`\n CREATE TABLE IF NOT EXISTS ${RDF3X_DIRTY_TERM_TABLE} (\n projection TEXT NOT NULL,\n term_id BIGINT NOT NULL,\n PRIMARY KEY (projection, term_id)\n )\n `);\n for (const projection of PAIR_PROJECTIONS) {\n await executor.exec(`\n CREATE TABLE IF NOT EXISTS ${projection.table} (\n ${projection.columns[0]} BIGINT NOT NULL,\n ${projection.columns[1]} BIGINT NOT NULL,\n triple_count BIGINT NOT NULL,\n membership_count BIGINT NOT NULL,\n min_${projection.remainder} BIGINT,\n max_${projection.remainder} BIGINT,\n PRIMARY KEY (${projection.columns.join(', ')})\n )\n `);\n }\n for (const projection of TERM_PROJECTIONS) {\n await executor.exec(`\n CREATE TABLE IF NOT EXISTS ${projection.table} (\n ${projection.column} BIGINT PRIMARY KEY,\n triple_count BIGINT NOT NULL,\n membership_count BIGINT NOT NULL\n )\n `);\n }\n await executor.exec(`\n INSERT INTO rdf3x_metadata (key, value)\n VALUES ('schema_version', $1)\n ON CONFLICT (key) DO UPDATE SET value = EXCLUDED.value\n `, [String(POSTGRES_RDF3X_SCHEMA_VERSION)]);\n await executor.exec(`\n INSERT INTO rdf3x_metadata (key, value)\n VALUES ('facts_data_version', '0')\n ON CONFLICT (key) DO NOTHING\n `);\n }\n\n private async initializeDirtySourceQueueSchema(executor: AsyncSqlExecutor): Promise<void> {\n await executor.exec(`\n CREATE TABLE IF NOT EXISTS ${RDF_DIRTY_SOURCE_TABLE} (\n source TEXT PRIMARY KEY,\n workspace TEXT,\n local_path TEXT,\n content_type TEXT,\n source_version TEXT,\n operation TEXT NOT NULL,\n changed_at TIMESTAMPTZ NOT NULL DEFAULT clock_timestamp()\n )\n `);\n await executor.exec(`\n CREATE INDEX IF NOT EXISTS rdf_dirty_sources_changed_at\n ON ${RDF_DIRTY_SOURCE_TABLE} (changed_at)\n `);\n await executor.exec(`\n CREATE TABLE IF NOT EXISTS ${RDF_MAINTENANCE_LEASE_TABLE} (\n name TEXT PRIMARY KEY,\n owner TEXT NOT NULL,\n claimed_at_ms BIGINT NOT NULL,\n heartbeat_at_ms BIGINT NOT NULL,\n expires_at_ms BIGINT NOT NULL\n )\n `);\n await executor.exec(`\n CREATE INDEX IF NOT EXISTS rdf_maintenance_leases_expires_at\n ON ${RDF_MAINTENANCE_LEASE_TABLE} (expires_at_ms)\n `);\n }\n\n private async initializeAccessControlOverrideSchema(executor: AsyncSqlExecutor): Promise<void> {\n await executor.exec(`\n CREATE TABLE IF NOT EXISTS ${RDF_ACCESS_CONTROL_OVERRIDE_TABLE} (\n source_key TEXT NOT NULL,\n affected_base_path TEXT NOT NULL,\n source_version TEXT,\n updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n PRIMARY KEY (source_key, affected_base_path)\n )\n `);\n await executor.exec(`\n CREATE INDEX IF NOT EXISTS rdf_access_control_overrides_affected\n ON ${RDF_ACCESS_CONTROL_OVERRIDE_TABLE} (affected_base_path)\n `);\n await executor.exec(`\n CREATE INDEX IF NOT EXISTS rdf_access_control_overrides_updated_at\n ON ${RDF_ACCESS_CONTROL_OVERRIDE_TABLE} (updated_at)\n `);\n }\n\n private async dropRdf3xDerivedSchema(executor: AsyncSqlExecutor): Promise<void> {\n for (const table of [\n ...PAIR_PROJECTIONS.map((projection) => projection.table),\n ...TERM_PROJECTIONS.map((projection) => projection.table),\n RDF3X_GRAPH_PROJECTION_TABLE,\n RDF3X_DIRTY_GRAPH_TABLE,\n RDF3X_DIRTY_PAIR_TABLE,\n RDF3X_DIRTY_TERM_TABLE,\n ]) {\n await executor.exec(`DROP TABLE IF EXISTS ${table}`);\n }\n await executor.exec('DELETE FROM rdf3x_metadata');\n }\n\n private async clearRdf3xDerivedTables(executor: AsyncSqlExecutor): Promise<void> {\n for (const projection of PAIR_PROJECTIONS) {\n await executor.exec(`DELETE FROM ${projection.table}`);\n }\n for (const projection of TERM_PROJECTIONS) {\n await executor.exec(`DELETE FROM ${projection.table}`);\n }\n await executor.exec(`DELETE FROM ${RDF3X_GRAPH_PROJECTION_TABLE}`);\n }\n\n private async rebuildRdf3xDerivedIndexes(factsDataVersion: number): Promise<NonNullable<RdfDerivedIndexRefreshResult['rdf3x']>['rebuild']> {\n const start = Date.now();\n const executor = this.requireExecutor();\n const scannedQuads = await this.scalarCount(`SELECT COUNT(*) AS count FROM ${RDF_FACTS_TABLE}`);\n await executor.transaction(async (tx) => {\n await this.clearRdf3xDerivedTables(tx);\n for (const projection of PAIR_PROJECTIONS) {\n await tx.exec(`\n INSERT INTO ${projection.table} (\n ${projection.columns[0]},\n ${projection.columns[1]},\n triple_count,\n membership_count,\n min_${projection.remainder},\n max_${projection.remainder}\n )\n SELECT\n triple.${projection.columns[0]},\n triple.${projection.columns[1]},\n triple.triple_count,\n COALESCE(member.membership_count, 0) AS membership_count,\n triple.min_remainder,\n triple.max_remainder\n FROM (\n SELECT\n ${projection.columns[0]},\n ${projection.columns[1]},\n COUNT(DISTINCT ${projection.remainder}) AS triple_count,\n MIN(${projection.remainder}) AS min_remainder,\n MAX(${projection.remainder}) AS max_remainder\n FROM ${RDF_FACTS_TABLE}\n GROUP BY ${projection.columns[0]}, ${projection.columns[1]}\n ) triple\n LEFT JOIN (\n SELECT\n ${projection.columns[0]},\n ${projection.columns[1]},\n COUNT(*) AS membership_count\n FROM ${RDF_FACTS_TABLE}\n GROUP BY ${projection.columns[0]}, ${projection.columns[1]}\n ) member\n ON member.${projection.columns[0]} = triple.${projection.columns[0]}\n AND member.${projection.columns[1]} = triple.${projection.columns[1]}\n `);\n }\n for (const projection of TERM_PROJECTIONS) {\n await tx.exec(`\n INSERT INTO ${projection.table} (\n ${projection.column},\n triple_count,\n membership_count\n )\n SELECT\n triple.${projection.column},\n triple.triple_count,\n COALESCE(member.membership_count, 0) AS membership_count\n FROM (\n SELECT\n ${projection.column},\n COUNT(*) AS triple_count\n FROM (\n SELECT DISTINCT subject_id, predicate_id, object_id\n FROM ${RDF_FACTS_TABLE}\n ) distinct_triples\n GROUP BY ${projection.column}\n ) triple\n LEFT JOIN (\n SELECT\n ${projection.column},\n COUNT(*) AS membership_count\n FROM ${RDF_FACTS_TABLE}\n GROUP BY ${projection.column}\n ) member\n ON member.${projection.column} = triple.${projection.column}\n `);\n }\n await tx.exec(`\n INSERT INTO ${RDF3X_GRAPH_PROJECTION_TABLE} (\n graph_id,\n membership_count\n )\n SELECT graph_id, COUNT(*) AS membership_count\n FROM ${RDF_FACTS_TABLE}\n GROUP BY graph_id\n `);\n await tx.exec(`\n INSERT INTO rdf3x_metadata (key, value)\n VALUES ('facts_data_version', $1)\n ON CONFLICT (key) DO UPDATE SET value = EXCLUDED.value\n `, [String(factsDataVersion)]);\n await this.clearRdf3xDirtyTables(tx);\n });\n const stats = await this.rdf3xStats();\n return {\n mode: 'full',\n scannedQuads,\n uniqueTriples: stats.uniqueTriples,\n memberships: stats.membershipCount,\n projectionRows: pairProjectionRowTotal(stats.pairProjectionRows) + termProjectionRowTotal(stats.termProjectionRows),\n factsDataVersion,\n durationMs: Date.now() - start,\n };\n }\n\n private async refreshRdf3xDirtyDerivedIndexes(\n factsDataVersion: number,\n dirtyStats: PgDirtyProjectionStats,\n ): Promise<NonNullable<RdfDerivedIndexRefreshResult['rdf3x']>['rebuild']> {\n const start = Date.now();\n const executor = this.requireExecutor();\n const scannedQuads = await this.estimateDirtyRefreshScanRows();\n await executor.transaction(async (tx) => {\n await this.refreshDirtyGraphProjection(tx);\n for (const projection of PAIR_PROJECTIONS) {\n await this.refreshDirtyPairProjection(tx, projection);\n }\n for (const projection of TERM_PROJECTIONS) {\n await this.refreshDirtyTermProjection(tx, projection);\n }\n await tx.exec(`\n INSERT INTO rdf3x_metadata (key, value)\n VALUES ('facts_data_version', $1)\n ON CONFLICT (key) DO UPDATE SET value = EXCLUDED.value\n `, [String(factsDataVersion)]);\n await this.clearRdf3xDirtyTables(tx);\n });\n const stats = await this.rdf3xStats();\n return {\n mode: 'incremental',\n scannedQuads,\n uniqueTriples: stats.uniqueTriples,\n memberships: stats.membershipCount,\n projectionRows: pairProjectionRowTotal(stats.pairProjectionRows) + termProjectionRowTotal(stats.termProjectionRows),\n factsDataVersion,\n durationMs: Date.now() - start,\n dirtyGraphs: dirtyStats.graphs,\n dirtyPairs: dirtyStats.pairs,\n dirtyTerms: dirtyStats.terms,\n };\n }\n\n private async refreshDirtyGraphProjection(executor: AsyncSqlExecutor): Promise<void> {\n await executor.exec(`\n DELETE FROM ${RDF3X_GRAPH_PROJECTION_TABLE}\n WHERE graph_id IN (SELECT graph_id FROM ${RDF3X_DIRTY_GRAPH_TABLE})\n `);\n await executor.exec(`\n INSERT INTO ${RDF3X_GRAPH_PROJECTION_TABLE} (\n graph_id,\n membership_count\n )\n SELECT q.graph_id, COUNT(*) AS membership_count\n FROM ${RDF_FACTS_TABLE} q\n JOIN ${RDF3X_DIRTY_GRAPH_TABLE} dirty\n ON dirty.graph_id = q.graph_id\n GROUP BY q.graph_id\n `);\n }\n\n private async refreshDirtyPairProjection(executor: AsyncSqlExecutor, projection: PgPairProjection): Promise<void> {\n const [left, right] = projection.columns;\n await executor.exec(`\n DELETE FROM ${projection.table} target\n WHERE EXISTS (\n SELECT 1\n FROM ${RDF3X_DIRTY_PAIR_TABLE} dirty\n WHERE dirty.projection = $1\n AND dirty.left_id = target.${left}\n AND dirty.right_id = target.${right}\n )\n `, [projection.name]);\n await executor.exec(`\n INSERT INTO ${projection.table} (\n ${left},\n ${right},\n triple_count,\n membership_count,\n min_${projection.remainder},\n max_${projection.remainder}\n )\n SELECT\n q.${left},\n q.${right},\n COUNT(DISTINCT q.${projection.remainder}) AS triple_count,\n COUNT(*) AS membership_count,\n MIN(q.${projection.remainder}) AS min_remainder,\n MAX(q.${projection.remainder}) AS max_remainder\n FROM ${RDF_FACTS_TABLE} q\n JOIN ${RDF3X_DIRTY_PAIR_TABLE} dirty\n ON dirty.projection = $1\n AND dirty.left_id = q.${left}\n AND dirty.right_id = q.${right}\n GROUP BY q.${left}, q.${right}\n `, [projection.name]);\n }\n\n private async refreshDirtyTermProjection(executor: AsyncSqlExecutor, projection: PgTermProjection): Promise<void> {\n await executor.exec(`\n DELETE FROM ${projection.table} target\n WHERE EXISTS (\n SELECT 1\n FROM ${RDF3X_DIRTY_TERM_TABLE} dirty\n WHERE dirty.projection = $1\n AND dirty.term_id = target.${projection.column}\n )\n `, [projection.name]);\n await executor.exec(`\n INSERT INTO ${projection.table} (\n ${projection.column},\n triple_count,\n membership_count\n )\n SELECT\n triple.term_id,\n triple.triple_count,\n COALESCE(member.membership_count, 0) AS membership_count\n FROM (\n SELECT\n distinct_triples.term_id,\n COUNT(*) AS triple_count\n FROM (\n SELECT DISTINCT\n q.subject_id,\n q.predicate_id,\n q.object_id,\n q.${projection.column} AS term_id\n FROM ${RDF_FACTS_TABLE} q\n JOIN ${RDF3X_DIRTY_TERM_TABLE} dirty\n ON dirty.projection = $1\n AND dirty.term_id = q.${projection.column}\n ) distinct_triples\n GROUP BY distinct_triples.term_id\n ) triple\n LEFT JOIN (\n SELECT\n q.${projection.column} AS term_id,\n COUNT(*) AS membership_count\n FROM ${RDF_FACTS_TABLE} q\n JOIN ${RDF3X_DIRTY_TERM_TABLE} dirty\n ON dirty.projection = $1\n AND dirty.term_id = q.${projection.column}\n GROUP BY q.${projection.column}\n ) member\n ON member.term_id = triple.term_id\n `, [projection.name]);\n }\n\n private async dirtyProjectionStats(executor = this.requireExecutor()): Promise<PgDirtyProjectionStats> {\n try {\n const [graphs, pairs, terms] = await Promise.all([\n this.scalarCount(`SELECT COUNT(*) AS count FROM ${RDF3X_DIRTY_GRAPH_TABLE}`),\n this.scalarCount(`SELECT COUNT(*) AS count FROM ${RDF3X_DIRTY_PAIR_TABLE}`),\n this.scalarCount(`SELECT COUNT(*) AS count FROM ${RDF3X_DIRTY_TERM_TABLE}`),\n ]);\n return { graphs, pairs, terms };\n } catch {\n await this.initializeRdf3xSchema(executor);\n return { graphs: 0, pairs: 0, terms: 0 };\n }\n }\n\n private async clearRdf3xDirtyTables(executor: AsyncSqlExecutor): Promise<void> {\n await executor.exec(`DELETE FROM ${RDF3X_DIRTY_GRAPH_TABLE}`);\n await executor.exec(`DELETE FROM ${RDF3X_DIRTY_PAIR_TABLE}`);\n await executor.exec(`DELETE FROM ${RDF3X_DIRTY_TERM_TABLE}`);\n }\n\n private async dirtySourceQueueCutoff(executor = this.requireExecutor()): Promise<string> {\n const rows = await executor.query<{ cutoff: string }>('SELECT clock_timestamp()::text AS cutoff');\n return rows[0]?.cutoff ?? new Date().toISOString();\n }\n\n private async dirtySourceQueueCount(\n executor = this.requireExecutor(),\n changedAtCutoff?: string,\n ): Promise<number> {\n try {\n const rows = changedAtCutoff\n ? await executor.query<{ count: number }>(\n `SELECT COUNT(*) AS count FROM ${RDF_DIRTY_SOURCE_TABLE} WHERE changed_at <= $1::timestamptz`,\n [changedAtCutoff],\n )\n : await executor.query<{ count: number }>(`SELECT COUNT(*) AS count FROM ${RDF_DIRTY_SOURCE_TABLE}`);\n return Number(rows[0]?.count ?? 0) || 0;\n } catch {\n await this.initializeDirtySourceQueueSchema(executor);\n return 0;\n }\n }\n\n private normalizeDirtySourceBatchSize(value: number | undefined): number | undefined {\n if (value === undefined || !Number.isFinite(value)) {\n return undefined;\n }\n const batchSize = Math.floor(value);\n return batchSize > 0 ? batchSize : undefined;\n }\n\n private async clearDirtySourceQueue(\n executor: AsyncSqlExecutor,\n changedAtCutoff: string,\n maxSources?: number,\n ): Promise<number> {\n if (maxSources !== undefined) {\n const rows = await executor.query<{ count: number }>(`\n WITH selected AS (\n SELECT source\n FROM ${RDF_DIRTY_SOURCE_TABLE}\n WHERE changed_at <= $1::timestamptz\n ORDER BY changed_at, source\n LIMIT $2\n ),\n deleted AS (\n DELETE FROM ${RDF_DIRTY_SOURCE_TABLE} dirty\n USING selected\n WHERE dirty.source = selected.source\n AND dirty.changed_at <= $1::timestamptz\n RETURNING 1\n )\n SELECT COUNT(*) AS count FROM deleted\n `, [changedAtCutoff, maxSources]);\n return Number(rows[0]?.count ?? 0) || 0;\n }\n const rows = await executor.query<{ count: number }>(`\n WITH deleted AS (\n DELETE FROM ${RDF_DIRTY_SOURCE_TABLE}\n WHERE changed_at <= $1::timestamptz\n RETURNING 1\n )\n SELECT COUNT(*) AS count FROM deleted\n `, [changedAtCutoff]);\n return Number(rows[0]?.count ?? 0) || 0;\n }\n\n private async tryClaimMaintenanceLease(\n name = RDF_DERIVED_INDEX_MAINTENANCE_LEASE,\n executor = this.requireExecutor(),\n ): Promise<boolean> {\n const leaseTtlMs = this.pgOptions.maintenanceLeaseTtlMs ?? DEFAULT_RDF_MAINTENANCE_LEASE_TTL_MS;\n const rows = await executor.query<{ count: number }>(`\n WITH now_value AS (\n SELECT FLOOR(EXTRACT(EPOCH FROM NOW()) * 1000)::BIGINT AS now_ms\n ),\n claimed AS (\n INSERT INTO ${RDF_MAINTENANCE_LEASE_TABLE} (\n name,\n owner,\n claimed_at_ms,\n heartbeat_at_ms,\n expires_at_ms\n )\n SELECT $1, $2, now_ms, now_ms, now_ms + $3\n FROM now_value\n ON CONFLICT (name) DO UPDATE\n SET\n owner = EXCLUDED.owner,\n claimed_at_ms = EXCLUDED.claimed_at_ms,\n heartbeat_at_ms = EXCLUDED.heartbeat_at_ms,\n expires_at_ms = EXCLUDED.expires_at_ms\n WHERE ${RDF_MAINTENANCE_LEASE_TABLE}.expires_at_ms <= (\n SELECT now_ms FROM now_value\n ) OR ${RDF_MAINTENANCE_LEASE_TABLE}.owner = $2\n RETURNING 1\n )\n SELECT COUNT(*) AS count FROM claimed\n `, [name, this.maintenanceLeaseOwner, leaseTtlMs]);\n return (Number(rows[0]?.count ?? 0) || 0) > 0;\n }\n\n private startMaintenanceScheduler(): void {\n const intervalMs = this.pgOptions.maintenanceIntervalMs ?? 0;\n if (intervalMs <= 0 || this.maintenanceTimer) {\n return;\n }\n this.maintenanceTimer = setInterval(() => {\n if (this.maintenanceRunning) {\n return;\n }\n this.maintenanceRunning = this.maintainDerivedIndexes()\n .then(() => undefined)\n .catch((error: unknown) => {\n this.logger.warn(`RDF derived index maintenance failed: ${(error as Error).message}`);\n })\n .finally(() => {\n this.maintenanceRunning = null;\n });\n }, intervalMs);\n this.maintenanceTimer.unref?.();\n }\n\n private stopMaintenanceScheduler(): void {\n if (!this.maintenanceTimer) {\n return;\n }\n clearInterval(this.maintenanceTimer);\n this.maintenanceTimer = undefined;\n }\n\n private async estimateDirtyRefreshScanRows(): Promise<number> {\n const rows = await this.requireExecutor().query<{ count: number }>(`\n SELECT COUNT(*) AS count\n FROM ${RDF_FACTS_TABLE} q\n WHERE q.graph_id IN (SELECT graph_id FROM ${RDF3X_DIRTY_GRAPH_TABLE})\n OR EXISTS (\n SELECT 1\n FROM ${RDF3X_DIRTY_PAIR_TABLE} dirty\n WHERE (dirty.projection = 'SP' AND dirty.left_id = q.subject_id AND dirty.right_id = q.predicate_id)\n OR (dirty.projection = 'SO' AND dirty.left_id = q.subject_id AND dirty.right_id = q.object_id)\n OR (dirty.projection = 'PS' AND dirty.left_id = q.predicate_id AND dirty.right_id = q.subject_id)\n OR (dirty.projection = 'PO' AND dirty.left_id = q.predicate_id AND dirty.right_id = q.object_id)\n OR (dirty.projection = 'OS' AND dirty.left_id = q.object_id AND dirty.right_id = q.subject_id)\n OR (dirty.projection = 'OP' AND dirty.left_id = q.object_id AND dirty.right_id = q.predicate_id)\n )\n OR EXISTS (\n SELECT 1\n FROM ${RDF3X_DIRTY_TERM_TABLE} dirty\n WHERE (dirty.projection = 'S' AND dirty.term_id = q.subject_id)\n OR (dirty.projection = 'P' AND dirty.term_id = q.predicate_id)\n OR (dirty.projection = 'O' AND dirty.term_id = q.object_id)\n )\n `);\n return Number(rows[0]?.count ?? 0) || 0;\n }\n\n private async refreshPlannerStats(executor: AsyncSqlExecutor): Promise<RdfPlannerStatsRefreshResult> {\n const start = Date.now();\n for (const table of RDF_PLANNER_STATS_TABLES) {\n await executor.exec(`ANALYZE ${table}`);\n }\n return {\n analyzedTables: [...RDF_PLANNER_STATS_TABLES],\n durationMs: Date.now() - start,\n };\n }\n\n private async scanNative(pattern: QuintPattern, options?: RdfQuadScanOptions): Promise<RdfQuadIndexScanResult> {\n const start = Date.now();\n const resolved = await this.resolvePattern(pattern);\n if (resolved.unresolved) {\n return {\n quads: [],\n metrics: this.indexMetrics('none', 0, 0, start, [`unresolved ${resolved.unresolved}`]),\n };\n }\n const nativeScan = await this.tryScanPgCustomIndexAny(pattern, resolved, options, start);\n if (nativeScan) {\n return nativeScan;\n }\n const compiled = this.compileScanSql(resolved, options);\n const matchedRows = await this.scalarCount(compiled.countSql, compiled.countParams);\n const rows = await this.requireExecutor().query<PgQuadIdRow>(compiled.sql, compiled.params);\n return {\n quads: await this.rowsToQuads(rows),\n metrics: this.indexMetrics(compiled.indexChoice, matchedRows, rows.length, start, [\n ...this.pgAccelerationActiveMarkersForScan(pattern),\n ...compiled.queryPlan,\n compiled.sql,\n ]),\n };\n }\n\n private async tryScanPgCustomIndexAny(\n pattern: QuintPattern,\n resolved: PgResolvedPattern,\n options: RdfQuadScanOptions | undefined,\n start: number,\n ): Promise<RdfQuadIndexScanResult | undefined> {\n const baseCapability = 'index.xpod_rdf_perm.scan_any';\n const limitCapability = 'index.xpod_rdf_perm.scan_any.limit';\n const canUseLimitEarlyStop = this.nativeScanCanUseLimitEarlyStop(options)\n && this.canUsePgAccelerationCapability(limitCapability);\n const capability = canUseLimitEarlyStop ? limitCapability : baseCapability;\n const customResolved = await this.resolvePgCustomIndexGraphPrefix(resolved);\n if (!customResolved || !this.canUsePgAccelerationCapability(baseCapability) || !this.canUsePgCustomIndexResolvedPattern(customResolved)) {\n return undefined;\n }\n if (customResolved.graphPrefix !== undefined) {\n return undefined;\n }\n\n const permutation = this.choosePermutation(customResolved);\n const prefixFilters = this.pgCustomIndexPrefixFilters(customResolved, permutation);\n if (prefixFilters.every((filter) => filter === null)) {\n return undefined;\n }\n if (prefixFilters.some((filter) => filter?.length === 0)) {\n return {\n quads: [],\n metrics: this.indexMetrics(permutation.name, 0, 0, start, [\n ...this.pgAccelerationActiveMarkersForScan(pattern),\n `XpodRdfExtensionOperator(${capability})`,\n `PostgresRdfNativeCustomIndexScanAny(${permutation.name})`,\n ]),\n };\n }\n\n const builder = new PgSqlBuilder([\n pgCustomPermutationIndexName(permutation),\n ...prefixFilters,\n ]);\n const conditions: string[] = [];\n const joins: string[] = [];\n const queryPlan: string[] = [];\n const alias = 'q';\n this.appendResolvedPatternConditions(customResolved, alias, conditions, joins, builder, queryPlan, false);\n this.appendSlotTermRangeConditions(options?.slotTermRanges, alias, conditions, builder, queryPlan);\n const order = this.buildOrderClause(options, alias);\n const pagination = this.buildPagination(options, builder);\n const whereClause = conditions.length > 0 ? ` WHERE ${conditions.join(' AND ')}` : '';\n const sql = `\n SELECT ${alias}.graph_id, ${alias}.subject_id, ${alias}.predicate_id, ${alias}.object_id\n FROM xpod_rdf.perm_index_scan_any(\n $1::regclass,\n $2::bigint[],\n $3::bigint[],\n $4::bigint[],\n $5::bigint[]\n ) native_scan\n JOIN ${RDF_FACTS_TABLE} ${alias} ON ${alias}.ctid = native_scan.heap_tid${joins.join('')}\n ${whereClause}\n ${order || ` ORDER BY ${permutation.columns.map((column) => `${alias}.${column}`).join(', ')}`}\n ${pagination.sql}\n `;\n const count = options?.slotTermRanges?.length ? undefined : await this.pgCustomIndexCountAny(customResolved, permutation);\n const fallbackCount = count === undefined ? this.compileScanSql(customResolved, options) : undefined;\n const matchedRows = count ?? await this.scalarCount(fallbackCount!.countSql, fallbackCount!.countParams);\n const rows = await this.requireExecutor().query<PgQuadIdRow>(sql, builder.snapshot());\n return {\n quads: await this.rowsToQuads(rows),\n metrics: this.indexMetrics(permutation.name, matchedRows, rows.length, start, [\n ...this.pgAccelerationActiveMarkersForScan(pattern),\n `XpodRdfExtensionOperator(${capability})`,\n ...(canUseLimitEarlyStop ? [`PostgresRdfNativeCustomIndexScanAnyLimit(${permutation.name})`] : []),\n `PostgresRdfNativeCustomIndexScanAny(${permutation.name})`,\n ...queryPlan,\n ...(order ? [`Rdf3xJoinOrder(${describeScanOrder(options)})`] : []),\n ...(pagination.sql ? ['Pagination'] : []),\n sql,\n ]),\n };\n }\n\n private nativeScanCanUseLimitEarlyStop(options?: QueryOptions): boolean {\n return options?.limit !== undefined && (!options.order || options.order.length === 0);\n }\n\n private async scanPostFilter(pattern: QuintPattern, options?: RdfQuadScanOptions): Promise<RdfQuadIndexScanResult> {\n const start = Date.now();\n const rows = await this.requireExecutor().query<PgQuadIdRow>(`\n SELECT graph_id, subject_id, predicate_id, object_id\n FROM ${RDF_FACTS_TABLE}\n ORDER BY graph_id, subject_id, predicate_id, object_id\n `);\n const rangedRows = this.filterRowsBySlotTermRanges(rows, options?.slotTermRanges);\n const quads = await this.rowsToQuads(rangedRows);\n const matched = quads.filter((value) => matchesQuadPattern(value, pattern));\n const ordered = orderQuads(matched, options);\n const startOffset = Math.max(0, options?.offset ?? 0);\n const endOffset = options?.limit === undefined\n ? undefined\n : startOffset + Math.max(0, options.limit);\n const page = ordered.slice(startOffset, endOffset);\n return {\n quads: page,\n metrics: this.indexMetrics('facts-post-filter', matched.length, page.length, start, [\n 'PostgresFactsScan',\n 'PostgresFactsPostFilter',\n ...this.slotTermRangePlanMarkers(options?.slotTermRanges),\n ...(options?.order?.length ? [`PostgresFactsScanOrder(${describeScanOrder(options)})`] : []),\n ...(options?.limit !== undefined || options?.offset !== undefined ? ['PostgresFactsScanLimit'] : []),\n ]),\n };\n }\n\n private buildPgValuesJoins(\n sources: PgCompiledValuesSource[],\n variableColumns: Map<string, string>,\n builder: PgSqlBuilder,\n ): { joins: string; queryPlan: string[] } {\n if (sources.length === 0) {\n return { joins: '', queryPlan: [] };\n }\n const joins: string[] = [];\n const queryPlan: string[] = [];\n for (const [sourceIndex, source] of sources.entries()) {\n const alias = `join_values_${sourceIndex}`;\n const columns = source.variables.map((_variableName, variableIndex) => `value_${variableIndex}_id`);\n const valuesSql = source.rows.length > 0\n ? `VALUES ${source.rows.map((row) => `(${row.map((id) => `${builder.add(id)}::bigint`).join(', ')})`).join(', ')}`\n : `SELECT ${columns.map((column) => `NULL::bigint AS ${column}`).join(', ')} WHERE FALSE`;\n const onClause = source.variables.map((variableName, variableIndex) => {\n const column = variableColumns.get(variableName);\n if (!column) {\n throw new Error(`Postgres RDF-3X VALUES join cannot constrain unbound variable: ${variableName}`);\n }\n return `${alias}.${columns[variableIndex]} = ${column}`;\n }).join(' AND ');\n joins.push(` JOIN (${valuesSql}) AS ${alias}(${columns.join(', ')}) ON ${onClause}`);\n queryPlan.push(`Rdf3xJoinTupleValues(${source.variables.map((variableName) => `?${variableName}`).join(',')})`);\n }\n return {\n joins: joins.join(''),\n queryPlan,\n };\n }\n\n private async queryRdf3x(\n query: RdfQuery,\n template: PgQueryTemplateResolution,\n ): Promise<RdfQueryResult | undefined> {\n if (!this.canTryRdf3xQuery(query)) {\n return undefined;\n }\n const start = Date.now();\n const aggregates = queryAggregates(query);\n const requiredPatterns = query.patterns.length > 0 ? query.patterns : [{}];\n const compiledPatterns = await this.compileRdf3xJoinPatterns(requiredPatterns, query.filters ?? []);\n if (!compiledPatterns) {\n return undefined;\n }\n if (!this.allFiltersPushed(query.filters ?? [], compiledPatterns)) {\n return undefined;\n }\n\n const visibleVariables = uniqueStrings(requiredPatterns.flatMap((pattern) => variablesInPattern(pattern)));\n const compiledValues = await this.compileRdf3xValuesSources(query.values ?? [], visibleVariables);\n if ((query.values?.length ?? 0) > 0 && !compiledValues) {\n return undefined;\n }\n\n if (aggregates.length > 0) {\n if (!query.patterns.length) {\n return undefined;\n }\n const aggregateResult = await this.queryRdf3xAggregate(query, template, compiledPatterns, aggregates, compiledValues ?? [], start);\n return aggregateResult;\n }\n\n const project = query.select && query.select.length > 0 ? query.select : visibleVariables;\n if (project.some((variableName) => !visibleVariables.includes(variableName))) {\n return undefined;\n }\n if ((query.orderBy ?? []).some((entry) => !visibleVariables.includes(entry.variable))) {\n return undefined;\n }\n const nativeDistinct = await this.tryQueryPgCustomIndexDistinct(query, compiledPatterns, compiledValues ?? [], project, start);\n if (nativeDistinct) {\n return nativeDistinct;\n }\n const nativeValuesJoin = await this.tryQueryPgCustomIndexValuesJoin(query, compiledPatterns, compiledValues ?? [], project, start);\n if (nativeValuesJoin) {\n return nativeValuesJoin;\n }\n const nativeBgpJoin = await this.tryQueryPgCustomIndexBgpJoin(query, compiledPatterns, compiledValues ?? [], project, start);\n if (nativeBgpJoin) {\n return nativeBgpJoin;\n }\n const joinOptions = {\n template,\n project,\n distinct: query.distinct,\n orderBy: query.orderBy,\n limit: query.limit,\n offset: query.offset,\n countMatchedRows: query.limit !== undefined || query.offset !== undefined,\n values: compiledValues ?? [],\n };\n const compiled = await this.compileJoinSql(compiledPatterns, joinOptions);\n if (compiled.unresolved) {\n return {\n bindings: [],\n metrics: this.localMetrics(start, 0, 0, 0, [compiled.indexChoice], [\n ...compiled.queryPlan,\n `unresolved ${compiled.unresolved}`,\n ], query.filters?.length ?? 0),\n };\n }\n const rows = await this.requireExecutor().query<Record<string, number>>(compiled.sql, compiled.params);\n const matchedRows = compiled.countSql\n ? await this.scalarCount(compiled.countSql, compiled.countParams)\n : rows.length;\n const bindings = await this.joinRowsToBindings(rows, compiled.variableAliases);\n const plan = [\n ...storagePlanMarkers(compiled.queryPlan),\n ...this.pgAccelerationActiveMarkersForQuery(query),\n ...rdfSubjectStarJoinPlanMarker('PostgresRdf3xSubjectStarJoin', compiledPatterns),\n `PostgresRdf3xJoin(${compiledPatterns.map((entry) => describePatternSource(entry)).join('|')})`,\n ...(query.distinct ? [`PostgresRdf3xJoinDistinct(${project.map((variableName) => `?${variableName}`).join(',')})`] : []),\n ...(query.limit !== undefined || query.offset !== undefined ? ['PostgresRdf3xJoinLimit'] : []),\n ];\n return {\n bindings,\n metrics: this.localMetrics(\n start,\n matchedRows,\n matchedRows,\n bindings.length,\n [compiled.indexChoice],\n plan,\n query.filters?.length ?? 0,\n ),\n };\n }\n\n private async choosePgRequiredSourceIndex(\n sources: PgRequiredSource[],\n bindings: RdfBindingRow[],\n metrics: RdfQueryMetrics,\n ): Promise<number> {\n const boundVariables = pgBoundVariables(bindings);\n const boundDistinctRows = pgBoundVariableDistinctRows(bindings);\n const hasBoundVariables = boundVariables.size > 0;\n const inputRows = Math.max(1, bindings.length);\n if (sources.length === 1) {\n const source = sources[0];\n if (!source) {\n return 0;\n }\n const connected = !hasBoundVariables || pgRequiredSourceConnected(source, boundVariables);\n const estimateRows = await this.estimatePgRequiredSourceRows(source, bindings);\n const baseRows = pgPlannerBindingsAreRoot(bindings)\n ? estimateRows\n : await this.estimatePgRequiredSourceRows(source, [{}]);\n const variableDistinctRows = await this.estimatePgRequiredSourceVariableDistinctRows(source, baseRows);\n const outputRows = connected ? estimateRows : estimateRows * inputRows;\n const immediateCost = estimatePgPlannerImmediateCostRows(source, estimateRows, outputRows, inputRows);\n const choice: PgRequiredSourceChoice = {\n source,\n originalOrder: 0,\n connected,\n disconnectedPenalty: hasBoundVariables && !connected ? 1 : 0,\n priority: pgRequiredSourcePriority(source),\n inputRows,\n estimateRows,\n baseRows,\n variableDistinctRows,\n outputRows,\n costRows: immediateCost.costRows,\n cpuCostRows: immediateCost.cpuCostRows,\n ioCostRows: immediateCost.ioCostRows,\n futureCostRows: 0,\n futureCostBounded: false,\n totalCostRows: immediateCost.totalCostRows,\n };\n metrics.plan.push(describePgPlannerSourceChoice(choice, [choice]));\n return 0;\n }\n const rankedWithoutFuture = await Promise.all(sources.map(async (source, originalOrder): Promise<PgRequiredSourceChoice> => {\n const connected = !hasBoundVariables || pgRequiredSourceConnected(source, boundVariables);\n const estimateRows = await this.estimatePgRequiredSourceRows(source, bindings);\n const baseRows = pgPlannerBindingsAreRoot(bindings)\n ? estimateRows\n : await this.estimatePgRequiredSourceRows(source, [{}]);\n const variableDistinctRows = await this.estimatePgRequiredSourceVariableDistinctRows(source, baseRows);\n const outputRows = connected ? estimateRows : estimateRows * inputRows;\n const immediateCost = estimatePgPlannerImmediateCostRows(source, estimateRows, outputRows, inputRows);\n return {\n source,\n originalOrder,\n connected,\n disconnectedPenalty: hasBoundVariables && !connected ? 1 : 0,\n priority: pgRequiredSourcePriority(source),\n inputRows,\n estimateRows,\n baseRows,\n variableDistinctRows,\n outputRows,\n costRows: immediateCost.costRows,\n cpuCostRows: immediateCost.cpuCostRows,\n ioCostRows: immediateCost.ioCostRows,\n futureCostRows: 0,\n futureCostBounded: false,\n totalCostRows: immediateCost.totalCostRows,\n };\n }));\n const ranked = rankedWithoutFuture.map((choice): PgRequiredSourceChoice => {\n const futureCost = estimatePgPlannerFutureCostRows(choice, rankedWithoutFuture, boundVariables, boundDistinctRows);\n return {\n ...choice,\n futureCostRows: futureCost.costRows,\n futureCostBounded: futureCost.bounded,\n totalCostRows: choice.costRows + choice.cpuCostRows + choice.ioCostRows + futureCost.costRows,\n };\n });\n const sorted = ranked\n .sort((left, right) => (\n left.priority - right.priority\n || left.disconnectedPenalty - right.disconnectedPenalty\n || left.totalCostRows - right.totalCostRows\n || left.costRows - right.costRows\n || left.estimateRows - right.estimateRows\n || left.originalOrder - right.originalOrder\n ));\n if (sorted.length > 0) {\n metrics.plan.push(describePgPlannerSourceChoice(sorted[0], sorted));\n }\n return sorted[0]?.originalOrder ?? 0;\n }\n\n private async estimatePgRequiredSourceRows(\n source: PgRequiredSource,\n bindings: RdfBindingRow[] = [{}],\n ): Promise<number> {\n switch (source.kind) {\n case 'pattern': {\n const sample = (bindings.length > 0 ? bindings : [{}]).slice(0, PG_PLANNER_SAMPLE_BINDINGS);\n let rows = 0;\n for (const binding of sample) {\n const compiled = compilePatternForBinding(source.pattern, binding);\n if (!compiled) {\n continue;\n }\n const resolved = await this.resolvePattern(compiled);\n rows += resolved.unresolved ? 0 : await this.estimateResolvedRows(resolved);\n }\n return bindings.length > sample.length && sample.length > 0\n ? Math.ceil(rows * (bindings.length / sample.length))\n : rows;\n }\n case 'values': {\n const sample = (bindings.length > 0 ? bindings : [{}]).slice(0, PG_PLANNER_SAMPLE_BINDINGS);\n let rows = 0;\n for (const binding of sample) {\n for (const row of source.source.rows) {\n if (mergeTupleValuesBinding(binding, source.source.variables, row)) {\n rows++;\n }\n }\n }\n return bindings.length > sample.length && sample.length > 0\n ? Math.ceil(rows * (bindings.length / sample.length))\n : rows;\n }\n case 'text': {\n const boundRows = await this.estimatePgSearchRowsByBoundSources(source, bindings);\n if (boundRows !== undefined) {\n return boundRows;\n }\n return (await this.requireTextIndex().estimateSearchCardinality(textSearchOptions(source.pattern))).rows;\n }\n case 'vector': {\n const boundRows = await this.estimatePgSearchRowsByBoundSources(source, bindings);\n if (boundRows !== undefined) {\n return boundRows;\n }\n return (await this.requireVectorIndex().estimateSearchCardinality(vectorSearchOptions(source.pattern))).rows;\n }\n }\n }\n\n private async estimatePgRequiredSourceVariableDistinctRows(\n source: PgRequiredSource,\n estimateRows = 0,\n ): Promise<Record<string, number>> {\n switch (source.kind) {\n case 'pattern':\n return this.estimatePgPatternVariableDistinctRows(source.pattern, estimateRows);\n case 'values':\n return estimateValuesSourceVariableDistinctRows(source.source);\n case 'text':\n case 'vector':\n return Object.fromEntries(pgVariablesInRequiredSource(source).map((variableName) => [\n variableName,\n Math.max(1, estimateRows),\n ]));\n }\n }\n\n private async estimatePgPatternVariableDistinctRows(\n pattern: RdfQueryPattern,\n fallbackRows: number,\n ): Promise<Record<string, number>> {\n const variableKeys = patternVariableKeys(pattern);\n const estimates = new Map<string, number>();\n const compiled = compilePatternForBinding(pattern, {});\n if (!compiled) {\n return {};\n }\n const resolved = await this.resolvePattern(compiled);\n for (const [variableName, keys] of variableKeys) {\n const [key] = keys;\n if (!key) {\n continue;\n }\n const distinctRows = resolved.unresolved ? 0 : await this.estimateResolvedDistinctRows(resolved, key);\n estimates.set(variableName, Math.max(1, Math.min(Math.max(1, fallbackRows), distinctRows)));\n }\n return Object.fromEntries(estimates);\n }\n\n private async estimatePgSearchRowsByBoundSources(\n source: Extract<PgRequiredSource, { kind: 'text' | 'vector' }>,\n bindings: RdfBindingRow[],\n ): Promise<number | undefined> {\n const sourceVariable = source.pattern.source;\n if (!sourceVariable || !canUseBoundSourceSearch(bindings, source.pattern, sourceVariable)) {\n return undefined;\n }\n\n let rows = 0;\n for (const exactSource of boundSearchSourceValues(bindings, sourceVariable)) {\n rows += source.kind === 'text'\n ? (await this.requireTextIndex().estimateSearchCardinality(textSearchOptions(source.pattern, exactSource))).rows\n : (await this.requireVectorIndex().estimateSearchCardinality(vectorSearchOptions(source.pattern, exactSource))).rows;\n }\n return rows;\n }\n\n private async queryFacts(query: RdfQuery, options?: PgFactsQueryOptions): Promise<RdfQueryResult> {\n const budgeted = applyPgSearchCandidateBudget(query);\n query = budgeted.query;\n const start = options?.start ?? Date.now();\n const metrics = this.localMetrics(start, 0, 0, 0, ['facts-post-filter'], [\n 'PostgresFactsQuery',\n ...budgeted.plan,\n ...(options?.planPrefix ?? []),\n ]);\n const hasNonPatternSource = (query.values?.length ?? 0) > 0\n || (query.textSearch?.length ?? 0) > 0\n || (query.vectorSearch?.length ?? 0) > 0;\n const requiredPatterns = query.patterns.length > 0\n ? query.patterns\n : query.unions?.length || hasNonPatternSource\n ? []\n : [{}];\n const aggregates = queryAggregates(query);\n let bindings: RdfBindingRow[] = [{}];\n\n if (bindings.length > 0) {\n const requiredSources = buildPgRequiredSources(requiredPatterns, query);\n while (requiredSources.length > 0) {\n const sourceIndex = await this.choosePgRequiredSourceIndex(requiredSources, bindings, metrics);\n const [source] = requiredSources.splice(sourceIndex, 1);\n if (!source) {\n break;\n }\n switch (source.kind) {\n case 'pattern': {\n const beforeScannedRows = metrics.scannedRows;\n bindings = await this.joinFactsPattern(bindings, source.pattern, query.filters ?? [], metrics, false);\n metrics.plan.push(describePgSourceEstimate(\n `RdfBgpSource#${source.originalIndex}`,\n bindings.length,\n metrics.scannedRows - beforeScannedRows,\n 'none',\n true,\n ));\n metrics.plan.push(`PostgresFactsScan(${describeQueryPattern(source.pattern)})`);\n break;\n }\n case 'text': {\n const connected = pgSearchSourceConnected(bindings, source.pattern);\n const beforeScannedRows = metrics.scannedRows;\n bindings = await this.joinFactsTextSearch(bindings, source.pattern, metrics);\n const scannedRows = metrics.scannedRows - beforeScannedRows;\n metrics.plan.push(describePgSourceEstimate(\n `TextMatchSource#${source.originalIndex}`,\n scannedRows,\n scannedRows,\n describePgSearchTopK(source.pattern),\n connected,\n ));\n metrics.plan.push(...describePgSearchScopeSourceEstimates(source.pattern, source.originalIndex, scannedRows, scannedRows, connected));\n metrics.plan.push(...describeTextSearchPlan(source.pattern));\n break;\n }\n case 'vector': {\n const connected = pgSearchSourceConnected(bindings, source.pattern);\n const beforeScannedRows = metrics.scannedRows;\n bindings = await this.joinFactsVectorSearch(bindings, source.pattern, metrics);\n const scannedRows = metrics.scannedRows - beforeScannedRows;\n metrics.plan.push(describePgSourceEstimate(\n `VectorMatchSource#${source.originalIndex}`,\n scannedRows,\n scannedRows,\n describePgSearchTopK(source.pattern),\n connected,\n ));\n metrics.plan.push(...describePgSearchScopeSourceEstimates(source.pattern, source.originalIndex, scannedRows, scannedRows, connected));\n metrics.plan.push(...describeVectorSearchPlan(source.pattern));\n break;\n }\n case 'values': {\n const connected = pgRequiredSourceConnected(source, pgBoundVariables(bindings));\n bindings = joinValuesSource(bindings, source.source);\n metrics.scannedRows += source.source.rows.length;\n metrics.plan.push(describePgSourceEstimate(\n `ValuesSource#${source.originalIndex}`,\n bindings.length,\n source.source.rows.length,\n 'none',\n connected,\n ));\n metrics.plan.push(`PostgresFactsValues(${source.source.variables.map((variableName) => `?${variableName}`).join(',')})`);\n break;\n }\n }\n if (bindings.length === 0) {\n break;\n }\n }\n }\n\n if ((query.binds?.length ?? 0) > 0 && bindings.length > 0) {\n bindings = this.applyFactsBinds(bindings, query.binds ?? []);\n metrics.plan.push(`PostgresFactsBind(${(query.binds ?? []).map(describeBind).join(',')})`);\n metrics.plan.push(...describeFusionRankPlan(query));\n }\n\n for (const rawOptionalGroup of query.optional ?? []) {\n bindings = await this.joinFactsOptionalGroup(bindings, normalizeOptionalGroup(rawOptionalGroup), metrics);\n metrics.plan.push(`PostgresFactsOptionalJoin(${normalizeOptionalGroup(rawOptionalGroup).patterns.map(describeQueryPattern).join(',')})`);\n }\n\n for (const unionGroup of query.unions ?? []) {\n bindings = await this.joinFactsUnionGroup(bindings, unionGroup.branches, query.filters ?? [], metrics);\n metrics.plan.push(`PostgresFactsUnion(${unionGroup.branches.map((branch) => branch.patterns.map(describeQueryPattern).join(',')).join('|')})`);\n if (bindings.length === 0) {\n break;\n }\n }\n\n for (const minusGroup of query.minus ?? []) {\n bindings = await this.applyFactsMinusGroup(bindings, minusGroup, metrics);\n metrics.plan.push(`PostgresFactsMinus(${minusGroup.patterns.map(describeQueryPattern).join(',')})`);\n if (bindings.length === 0) {\n break;\n }\n }\n\n for (const existsGroup of query.exists ?? []) {\n bindings = await this.applyFactsExistsGroup(bindings, existsGroup, metrics);\n metrics.plan.push(`PostgresFactsExists(${existsGroup.patterns.map(describeQueryPattern).join(',')})`);\n if (bindings.length === 0) {\n break;\n }\n }\n\n if ((query.filters?.length ?? 0) > 0) {\n bindings = bindings.filter((binding) => matchesBindingFilters(binding, query.filters ?? []));\n metrics.filtersApplied += query.filters?.length ?? 0;\n metrics.plan.push(`PostgresFactsFilter(${(query.filters ?? []).map(describeFilter).join(',')})`);\n }\n\n if ((query.postOptionalBinds?.length ?? 0) > 0) {\n bindings = this.applyFactsBinds(bindings, query.postOptionalBinds ?? []);\n metrics.plan.push(`PostgresFactsPostOptionalBind(${(query.postOptionalBinds ?? []).map(describeBind).join(',')})`);\n }\n\n if (aggregates.length > 0 && (query.groupBy?.length ?? 0) > 0) {\n const joinedRows = bindings.length;\n bindings = groupAggregateBindings(bindings, query.groupBy ?? [], aggregates);\n metrics.joinedRows = joinedRows;\n metrics.plan.push(aggregatePlan(aggregates, true));\n if ((query.having?.length ?? 0) > 0) {\n bindings = bindings.filter((binding) => matchesBindingFilters(binding, query.having ?? []));\n metrics.filtersApplied += query.having?.length ?? 0;\n metrics.plan.push(`PostgresFactsHaving(${(query.having ?? []).map(describeFilter).join(',')})`);\n }\n } else if (aggregates.length > 0) {\n const { binding, firstCount } = aggregateBindings(bindings, aggregates);\n const having = query.having ?? [];\n metrics.joinedRows = bindings.length;\n metrics.plan.push(aggregatePlan(aggregates, false));\n if (having.length > 0 && !matchesBindingFilters(binding, having)) {\n metrics.filtersApplied += having.length;\n metrics.plan.push(`PostgresFactsHaving(${having.map(describeFilter).join(',')})`);\n metrics.returnedRows = 0;\n metrics.durationMs = Date.now() - start;\n return {\n bindings: [],\n count: firstCount,\n metrics,\n };\n }\n if (having.length > 0) {\n metrics.filtersApplied += having.length;\n metrics.plan.push(`PostgresFactsHaving(${having.map(describeFilter).join(',')})`);\n }\n metrics.returnedRows = 1;\n metrics.durationMs = Date.now() - start;\n return {\n bindings: [binding],\n count: firstCount,\n metrics,\n };\n }\n\n const joinedRows = metrics.joinedRows > 0 ? metrics.joinedRows : bindings.length;\n\n if ((query.orderBy?.length ?? 0) > 0) {\n bindings = [...bindings].sort((left, right) => compareBindings(left, right, query.orderBy ?? []));\n metrics.plan.push(`PostgresFactsSort(${describeQueryOrder(query.orderBy ?? [])})`);\n }\n\n let projected = query.select && query.select.length > 0\n ? bindings.map((binding) => projectBinding(binding, query.select ?? []))\n : bindings;\n\n if (query.distinct) {\n projected = distinctBindings(projected);\n metrics.plan.push('PostgresFactsDistinct');\n }\n\n if (query.offset !== undefined || query.limit !== undefined) {\n const startOffset = Math.max(0, query.offset ?? 0);\n const endOffset = query.limit === undefined\n ? undefined\n : startOffset + Math.max(0, query.limit);\n projected = projected.slice(startOffset, endOffset);\n metrics.plan.push('PostgresFactsLimit');\n }\n\n metrics.joinedRows = joinedRows;\n metrics.returnedRows = projected.length;\n metrics.durationMs = Date.now() - start;\n return {\n bindings: projected,\n metrics,\n };\n }\n\n private async readQueryResultCache(\n template: PgQueryTemplateResolution,\n factsDataVersion: number,\n ): Promise<RdfQueryResult | undefined> {\n const start = Date.now();\n const rows = await this.requireExecutor().query<PgQueryResultCacheRow>(`\n SELECT result_json, row_count, query_shape\n FROM ${RDF_QUERY_RESULT_CACHE_TABLE}\n WHERE cache_key = $1\n AND scope_hash = $2\n AND facts_data_version = $3\n `, [template.cacheKey, template.cacheScope.hash, factsDataVersion]);\n const row = rows[0];\n if (!row) {\n return undefined;\n }\n if (row.query_shape !== template.queryShape) {\n await this.requireExecutor().exec(`\n DELETE FROM ${RDF_QUERY_RESULT_CACHE_TABLE}\n WHERE cache_key = $1\n AND scope_hash = $2\n AND facts_data_version = $3\n `, [template.cacheKey, template.cacheScope.hash, factsDataVersion]);\n return undefined;\n }\n\n try {\n const payload = JSON.parse(row.result_json) as SerializedRdfQueryResult;\n const bindings = deserializeQueryResultBindings(payload.bindings);\n await this.requireExecutor().exec(`\n UPDATE ${RDF_QUERY_RESULT_CACHE_TABLE}\n SET hit_count = hit_count + 1,\n last_hit_at = NOW()\n WHERE cache_key = $1\n AND scope_hash = $2\n AND facts_data_version = $3\n `, [template.cacheKey, template.cacheScope.hash, factsDataVersion]);\n return {\n bindings,\n ...(payload.count !== undefined ? { count: payload.count } : {}),\n metrics: this.localMetrics(start, 0, Number(row.row_count ?? bindings.length) || bindings.length, bindings.length, [\n 'pg-query-result-cache',\n ...(payload.sourceIndexChoices ?? []),\n ], [\n 'PostgresResultCacheHit',\n ...(payload.sourcePlan ?? []),\n `PostgresResultCacheVersion(${factsDataVersion})`,\n ]),\n };\n } catch {\n await this.requireExecutor().exec(`\n DELETE FROM ${RDF_QUERY_RESULT_CACHE_TABLE}\n WHERE cache_key = $1\n AND scope_hash = $2\n AND facts_data_version = $3\n `, [template.cacheKey, template.cacheScope.hash, factsDataVersion]);\n return undefined;\n }\n }\n\n private async readMaterializedResultCache(\n materialized: PgMaterializedResultResolution,\n template: PgQueryTemplateResolution,\n factsDataVersion: number,\n ): Promise<RdfQueryResult | undefined> {\n const start = Date.now();\n const rows = await this.requireExecutor().query<PgMaterializedResultCacheRow>(`\n SELECT result_json, row_count, query_shape, template_key\n FROM ${RDF_MATERIALIZED_RESULT_CACHE_TABLE}\n WHERE cache_key = $1\n AND scope_hash = $2\n AND facts_data_version = $3\n `, [materialized.cacheKey, template.cacheScope.hash, factsDataVersion]);\n const row = rows[0];\n if (!row) {\n return undefined;\n }\n const cachedTemplateKey = row.template_key ?? 'legacy';\n if (\n row.query_shape !== template.queryShape\n || (cachedTemplateKey !== 'legacy' && cachedTemplateKey !== template.templateKey)\n ) {\n await this.requireExecutor().exec(`\n DELETE FROM ${RDF_MATERIALIZED_RESULT_CACHE_TABLE}\n WHERE cache_key = $1\n AND scope_hash = $2\n AND facts_data_version = $3\n `, [materialized.cacheKey, template.cacheScope.hash, factsDataVersion]);\n return undefined;\n }\n\n try {\n const payload = JSON.parse(row.result_json) as SerializedRdfQueryResult;\n const bindings = deserializeQueryResultBindings(payload.bindings);\n await this.requireExecutor().exec(`\n UPDATE ${RDF_MATERIALIZED_RESULT_CACHE_TABLE}\n SET hit_count = hit_count + 1,\n last_hit_at = NOW()\n WHERE cache_key = $1\n AND scope_hash = $2\n AND facts_data_version = $3\n `, [materialized.cacheKey, template.cacheScope.hash, factsDataVersion]);\n return {\n bindings,\n ...(payload.count !== undefined ? { count: payload.count } : {}),\n metrics: this.localMetrics(start, 0, Number(row.row_count ?? bindings.length) || bindings.length, bindings.length, [\n 'pg-materialized-result-cache',\n ...(payload.sourceIndexChoices ?? []),\n ], [\n 'PostgresMaterializedResultHit',\n materializedResultTemplatePlanMarker(template),\n ...(payload.sourcePlan ?? []),\n `PostgresMaterializedResultVersion(${factsDataVersion})`,\n ]),\n };\n } catch {\n await this.requireExecutor().exec(`\n DELETE FROM ${RDF_MATERIALIZED_RESULT_CACHE_TABLE}\n WHERE cache_key = $1\n AND scope_hash = $2\n AND facts_data_version = $3\n `, [materialized.cacheKey, template.cacheScope.hash, factsDataVersion]);\n return undefined;\n }\n }\n\n private resolveQueryTemplate(query: RdfQuery): PgQueryTemplateResolution {\n const queryShape = stableRdfQueryShape(query);\n const cacheScope = resolveRdfQueryCacheScope(query.cache?.scope);\n const cacheKey = queryResultCacheKey(queryShape);\n const maxEntries = this.queryTemplateCacheMaxEntries();\n const ttlMs = this.queryTemplateCacheTtlMs();\n if (maxEntries <= 0) {\n return {\n queryShape,\n cacheScope,\n cacheKey,\n templateKey: 'disabled',\n planMarker: 'PostgresQueryTemplateCacheBypass',\n explain: {\n status: 'bypass',\n maxEntries,\n ttlMs,\n },\n };\n }\n\n const templateShape = stableRdfQueryTemplateShape(query);\n const templateKey = queryTemplateCacheKey(templateShape);\n const now = Date.now();\n this.pruneQueryTemplateCache(now, ttlMs);\n const existing = this.queryTemplateCache.get(templateKey);\n if (existing) {\n this.queryTemplateCache.delete(templateKey);\n existing.hitCount += 1;\n existing.lastHitAtMs = now;\n this.queryTemplateCache.set(templateKey, existing);\n this.queryTemplateCacheHits += 1;\n return {\n queryShape,\n cacheScope,\n cacheKey,\n templateKey,\n planMarker: `PostgresQueryTemplateCacheHit(${shortCacheKey(templateKey)})`,\n explain: {\n status: 'hit',\n key: templateKey,\n maxEntries,\n ttlMs,\n },\n };\n }\n\n this.queryTemplateCacheMisses += 1;\n this.queryTemplateCache.set(templateKey, {\n templateKey,\n templateShape,\n compiledSqlTemplates: new Map(),\n hitCount: 0,\n createdAtMs: now,\n lastHitAtMs: now,\n });\n while (this.queryTemplateCache.size > maxEntries) {\n const firstKey = this.queryTemplateCache.keys().next().value;\n if (!firstKey) {\n break;\n }\n this.deleteQueryTemplateCacheEntry(firstKey);\n this.queryTemplateCacheEvictions += 1;\n this.recordDerivedCacheEviction('templateMaxEntries');\n }\n this.pruneQueryTemplateCacheByteBudget();\n return {\n queryShape,\n cacheScope,\n cacheKey,\n templateKey,\n planMarker: `PostgresQueryTemplateCacheMiss(${shortCacheKey(templateKey)})`,\n explain: {\n status: 'miss',\n key: templateKey,\n maxEntries,\n ttlMs,\n },\n };\n }\n\n private recordCompiledSqlTemplate(\n template: PgQueryTemplateResolution | undefined,\n physicalShape: string,\n ): string[] {\n if (!template || template.templateKey === 'disabled') {\n return ['PostgresCompiledSqlTemplateBypass'];\n }\n const entry = this.queryTemplateCache.get(template.templateKey);\n if (!entry) {\n return [`PostgresCompiledSqlTemplateBypass(${shortCacheKey(template.templateKey)})`];\n }\n\n const shapeKey = queryTemplateCacheKey(physicalShape);\n const now = Date.now();\n const existing = entry.compiledSqlTemplates.get(shapeKey);\n if (existing) {\n entry.compiledSqlTemplates.delete(shapeKey);\n existing.hitCount += 1;\n existing.lastHitAtMs = now;\n entry.compiledSqlTemplates.set(shapeKey, existing);\n this.compiledSqlTemplateCacheHits += 1;\n return [`PostgresCompiledSqlTemplateHit(${shortCacheKey(template.templateKey)}:${shortCacheKey(shapeKey)})`];\n }\n\n this.compiledSqlTemplateCacheMisses += 1;\n entry.compiledSqlTemplates.set(shapeKey, {\n shapeKey,\n physicalShape,\n hitCount: 0,\n createdAtMs: now,\n lastHitAtMs: now,\n });\n while (entry.compiledSqlTemplates.size > MAX_COMPILED_SQL_TEMPLATES_PER_QUERY_TEMPLATE) {\n const firstKey = entry.compiledSqlTemplates.keys().next().value;\n if (!firstKey) {\n break;\n }\n entry.compiledSqlTemplates.delete(firstKey);\n this.compiledSqlTemplateCacheEvictions += 1;\n }\n this.pruneQueryTemplateCacheByteBudget();\n return [`PostgresCompiledSqlTemplateMiss(${shortCacheKey(template.templateKey)}:${shortCacheKey(shapeKey)})`];\n }\n\n private resolveMaterializedResult(query: RdfQuery): PgMaterializedResultResolution | undefined {\n const configured = query.cache?.materialized;\n if (!configured) {\n return undefined;\n }\n const normalized = normalizeMaterializedResultConfig(configured);\n if (normalized.key.trim().length === 0) {\n throw new Error('RdfQuery cache.materialized.key must not be empty');\n }\n const shape = JSON.stringify(normalizeQueryCacheValue(normalized));\n const cacheKey = materializedResultCacheKey(shape);\n return {\n shape,\n cacheKey,\n planMarker: `PostgresMaterializedResultKey(${shortCacheKey(cacheKey)})`,\n };\n }\n\n private async writeQueryResultCache(\n cacheKey: string,\n factsDataVersion: number,\n queryShape: string,\n cacheScope: PgResolvedQueryCacheScope,\n result: RdfQueryResult,\n ): Promise<string[]> {\n const resultJson = serializeQueryResult(result);\n await this.requireExecutor().exec(`\n INSERT INTO ${RDF_QUERY_RESULT_CACHE_TABLE} (\n cache_key,\n facts_data_version,\n query_shape,\n scope_hash,\n scope_shape,\n scope_principal,\n scope_base_path,\n scope_mode,\n scope_authorization_model,\n scope_permission_version,\n scope_allowed_graph_urls,\n scope_denied_graph_urls,\n scope_denied_graph_prefixes,\n result_json,\n row_count,\n created_at\n )\n VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, NOW())\n ON CONFLICT (cache_key, scope_hash, facts_data_version) DO UPDATE\n SET query_shape = EXCLUDED.query_shape,\n scope_shape = EXCLUDED.scope_shape,\n scope_principal = EXCLUDED.scope_principal,\n scope_base_path = EXCLUDED.scope_base_path,\n scope_mode = EXCLUDED.scope_mode,\n scope_authorization_model = EXCLUDED.scope_authorization_model,\n scope_permission_version = EXCLUDED.scope_permission_version,\n scope_allowed_graph_urls = EXCLUDED.scope_allowed_graph_urls,\n scope_denied_graph_urls = EXCLUDED.scope_denied_graph_urls,\n scope_denied_graph_prefixes = EXCLUDED.scope_denied_graph_prefixes,\n result_json = EXCLUDED.result_json,\n row_count = EXCLUDED.row_count,\n created_at = NOW()\n `, [\n cacheKey,\n factsDataVersion,\n queryShape,\n cacheScope.hash,\n cacheScope.shape,\n cacheScope.principal,\n cacheScope.basePath,\n cacheScope.mode,\n cacheScope.authorizationModel,\n cacheScope.permissionVersion,\n cacheScope.allowedGraphUrls,\n cacheScope.deniedGraphUrls,\n cacheScope.deniedGraphPrefixes,\n resultJson,\n result.bindings.length,\n ]);\n return ['PostgresResultCacheStore'];\n }\n\n private async writeMaterializedResultCache(\n materialized: PgMaterializedResultResolution,\n template: PgQueryTemplateResolution,\n factsDataVersion: number,\n result: RdfQueryResult,\n ): Promise<string[]> {\n const resultJson = serializeQueryResult(result);\n await this.requireExecutor().exec(`\n INSERT INTO ${RDF_MATERIALIZED_RESULT_CACHE_TABLE} (\n cache_key,\n facts_data_version,\n materialized_shape,\n template_key,\n query_shape,\n scope_hash,\n scope_shape,\n scope_principal,\n scope_base_path,\n scope_mode,\n scope_authorization_model,\n scope_permission_version,\n scope_allowed_graph_urls,\n scope_denied_graph_urls,\n scope_denied_graph_prefixes,\n result_json,\n row_count,\n created_at\n )\n VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, NOW())\n ON CONFLICT (cache_key, scope_hash, facts_data_version) DO UPDATE\n SET materialized_shape = EXCLUDED.materialized_shape,\n template_key = EXCLUDED.template_key,\n query_shape = EXCLUDED.query_shape,\n scope_shape = EXCLUDED.scope_shape,\n scope_principal = EXCLUDED.scope_principal,\n scope_base_path = EXCLUDED.scope_base_path,\n scope_mode = EXCLUDED.scope_mode,\n scope_authorization_model = EXCLUDED.scope_authorization_model,\n scope_permission_version = EXCLUDED.scope_permission_version,\n scope_allowed_graph_urls = EXCLUDED.scope_allowed_graph_urls,\n scope_denied_graph_urls = EXCLUDED.scope_denied_graph_urls,\n scope_denied_graph_prefixes = EXCLUDED.scope_denied_graph_prefixes,\n result_json = EXCLUDED.result_json,\n row_count = EXCLUDED.row_count,\n created_at = NOW()\n `, [\n materialized.cacheKey,\n factsDataVersion,\n materialized.shape,\n template.templateKey,\n template.queryShape,\n template.cacheScope.hash,\n template.cacheScope.shape,\n template.cacheScope.principal,\n template.cacheScope.basePath,\n template.cacheScope.mode,\n template.cacheScope.authorizationModel,\n template.cacheScope.permissionVersion,\n template.cacheScope.allowedGraphUrls,\n template.cacheScope.deniedGraphUrls,\n template.cacheScope.deniedGraphPrefixes,\n resultJson,\n result.bindings.length,\n ]);\n return [\n 'PostgresMaterializedResultStore',\n materializedResultTemplatePlanMarker(template),\n ];\n }\n\n private async pruneQueryResultCache(factsDataVersion: number, ttlMs = this.queryResultCacheTtlMs()): Promise<void> {\n const executor = this.requireExecutor();\n this.recordDerivedCacheEviction('factsVersion', await this.deleteRowsAndCount(executor, `\n DELETE FROM ${RDF_QUERY_RESULT_CACHE_TABLE}\n WHERE facts_data_version < $1\n `, [factsDataVersion]));\n\n if (ttlMs > 0) {\n this.recordDerivedCacheEviction('ttl', await this.deleteRowsAndCount(executor, `\n DELETE FROM ${RDF_QUERY_RESULT_CACHE_TABLE}\n WHERE created_at < $1::timestamptz\n `, [new Date(Date.now() - ttlMs).toISOString()]));\n }\n\n const maxEntries = this.queryResultCacheMaxEntries();\n const rows = await executor.query<{ cache_key: string; scope_hash: string; facts_data_version: number }>(`\n SELECT cache_key, scope_hash, facts_data_version\n FROM ${RDF_QUERY_RESULT_CACHE_TABLE}\n WHERE facts_data_version = $1\n ORDER BY COALESCE(last_hit_at, created_at) DESC, created_at DESC, cache_key DESC, scope_hash DESC\n `, [factsDataVersion]);\n for (const row of rows.slice(maxEntries)) {\n this.recordDerivedCacheEviction('maxEntries', await this.deleteRowsAndCount(executor, `\n DELETE FROM ${RDF_QUERY_RESULT_CACHE_TABLE}\n WHERE cache_key = $1\n AND scope_hash = $2\n AND facts_data_version = $3\n `, [row.cache_key, row.scope_hash, row.facts_data_version]));\n }\n await this.pruneQueryResultCachePayloadBytes(executor, factsDataVersion);\n await this.pruneDerivedCacheScopeBudgets(executor, factsDataVersion);\n await this.pruneDerivedCacheBudget(executor, factsDataVersion);\n }\n\n private async pruneMaterializedResultCache(\n factsDataVersion: number,\n ttlMs = this.materializedResultCacheTtlMs(),\n ): Promise<void> {\n const executor = this.requireExecutor();\n this.recordDerivedCacheEviction('factsVersion', await this.deleteRowsAndCount(executor, `\n DELETE FROM ${RDF_MATERIALIZED_RESULT_CACHE_TABLE}\n WHERE facts_data_version < $1\n `, [factsDataVersion]));\n\n if (ttlMs > 0) {\n this.recordDerivedCacheEviction('ttl', await this.deleteRowsAndCount(executor, `\n DELETE FROM ${RDF_MATERIALIZED_RESULT_CACHE_TABLE}\n WHERE created_at < $1::timestamptz\n `, [new Date(Date.now() - ttlMs).toISOString()]));\n }\n\n const maxEntries = this.materializedResultCacheMaxEntries();\n const rows = await executor.query<{ cache_key: string; scope_hash: string; facts_data_version: number }>(`\n SELECT cache_key, scope_hash, facts_data_version\n FROM ${RDF_MATERIALIZED_RESULT_CACHE_TABLE}\n WHERE facts_data_version = $1\n ORDER BY COALESCE(last_hit_at, created_at) DESC, created_at DESC, cache_key DESC, scope_hash DESC\n `, [factsDataVersion]);\n for (const row of rows.slice(maxEntries)) {\n this.recordDerivedCacheEviction('maxEntries', await this.deleteRowsAndCount(executor, `\n DELETE FROM ${RDF_MATERIALIZED_RESULT_CACHE_TABLE}\n WHERE cache_key = $1\n AND scope_hash = $2\n AND facts_data_version = $3\n `, [row.cache_key, row.scope_hash, row.facts_data_version]));\n }\n await this.pruneMaterializedResultCachePayloadBytes(executor, factsDataVersion);\n await this.pruneDerivedCacheScopeBudgets(executor, factsDataVersion);\n await this.pruneDerivedCacheBudget(executor, factsDataVersion);\n }\n\n private async pruneQueryResultCachePayloadBytes(executor: AsyncSqlExecutor, factsDataVersion: number): Promise<void> {\n const maxBytes = this.queryResultCacheMaxBytes();\n if (maxBytes <= 0) {\n return;\n }\n const rows = await executor.query<{ cache_key: string; scope_hash: string; facts_data_version: number }>(`\n SELECT cache_key, scope_hash, facts_data_version\n FROM (\n SELECT\n cache_key,\n scope_hash,\n facts_data_version,\n SUM(OCTET_LENGTH(result_json)) OVER (\n ORDER BY COALESCE(last_hit_at, created_at) DESC, created_at DESC, cache_key DESC, scope_hash DESC\n ) AS retained_bytes\n FROM ${RDF_QUERY_RESULT_CACHE_TABLE}\n WHERE facts_data_version = $1\n ) retained\n WHERE retained_bytes > $2\n `, [factsDataVersion, maxBytes]);\n for (const row of rows) {\n this.recordDerivedCacheEviction('payloadBytes', await this.deleteRowsAndCount(executor, `\n DELETE FROM ${RDF_QUERY_RESULT_CACHE_TABLE}\n WHERE cache_key = $1\n AND scope_hash = $2\n AND facts_data_version = $3\n `, [row.cache_key, row.scope_hash, row.facts_data_version]));\n }\n }\n\n private async pruneMaterializedResultCachePayloadBytes(executor: AsyncSqlExecutor, factsDataVersion: number): Promise<void> {\n const maxBytes = this.materializedResultCacheMaxBytes();\n if (maxBytes <= 0) {\n return;\n }\n const rows = await executor.query<{ cache_key: string; scope_hash: string; facts_data_version: number }>(`\n SELECT cache_key, scope_hash, facts_data_version\n FROM (\n SELECT\n cache_key,\n scope_hash,\n facts_data_version,\n SUM(OCTET_LENGTH(result_json)) OVER (\n ORDER BY COALESCE(last_hit_at, created_at) DESC, created_at DESC, cache_key DESC, scope_hash DESC\n ) AS retained_bytes\n FROM ${RDF_MATERIALIZED_RESULT_CACHE_TABLE}\n WHERE facts_data_version = $1\n ) retained\n WHERE retained_bytes > $2\n `, [factsDataVersion, maxBytes]);\n for (const row of rows) {\n this.recordDerivedCacheEviction('payloadBytes', await this.deleteRowsAndCount(executor, `\n DELETE FROM ${RDF_MATERIALIZED_RESULT_CACHE_TABLE}\n WHERE cache_key = $1\n AND scope_hash = $2\n AND facts_data_version = $3\n `, [row.cache_key, row.scope_hash, row.facts_data_version]));\n }\n }\n\n private async pruneDerivedCacheBudget(executor: AsyncSqlExecutor, factsDataVersion: number): Promise<void> {\n const maxBytes = this.derivedCacheMaxBytes();\n if (maxBytes <= 0) {\n return;\n }\n this.pruneQueryTemplateCache();\n const candidates = [\n ...await this.derivedCacheRowCandidates(executor, factsDataVersion),\n ...this.queryTemplateCacheCandidates(),\n ].filter((candidate) => candidate.bytes > 0);\n candidates.sort(compareDerivedCacheCandidates);\n\n let retainedBytes = 0;\n for (const candidate of candidates) {\n if (retainedBytes + candidate.bytes <= maxBytes) {\n retainedBytes += candidate.bytes;\n continue;\n }\n this.recordDerivedCacheEviction('totalBytes', await this.deleteDerivedCacheCandidate(executor, candidate));\n }\n }\n\n private async pruneDerivedCacheScopeBudgets(executor: AsyncSqlExecutor, factsDataVersion: number): Promise<void> {\n const maxBytes = this.derivedCacheScopeMaxBytes();\n if (maxBytes <= 0) {\n return;\n }\n const retainedBytesByScope = new Map<string, number>();\n const candidates = (await this.derivedCacheRowCandidates(executor, factsDataVersion))\n .filter((candidate) => candidate.bytes > 0 && candidate.scopeHash);\n candidates.sort(compareDerivedCacheCandidates);\n\n for (const candidate of candidates) {\n const scopeHash = candidate.scopeHash!;\n const retainedBytes = retainedBytesByScope.get(scopeHash) ?? 0;\n if (retainedBytes + candidate.bytes <= maxBytes) {\n retainedBytesByScope.set(scopeHash, retainedBytes + candidate.bytes);\n continue;\n }\n this.recordDerivedCacheEviction('scopeBytes', await this.deleteDerivedCacheCandidate(executor, candidate));\n }\n }\n\n private async derivedCacheRowCandidates(\n executor: AsyncSqlExecutor,\n factsDataVersion: number,\n ): Promise<PgDerivedCacheCandidate[]> {\n const rows = await executor.query<{\n kind: PgDerivedCacheCandidateKind;\n cache_key: string;\n scope_hash: string | null;\n facts_data_version: number | string;\n bytes: number | string;\n created_at_ms: number | string | null;\n last_used_at_ms: number | string | null;\n }>(`\n SELECT\n 'query-result' AS kind,\n cache_key,\n scope_hash,\n facts_data_version,\n OCTET_LENGTH(result_json) AS bytes,\n EXTRACT(EPOCH FROM created_at) * 1000 AS created_at_ms,\n EXTRACT(EPOCH FROM COALESCE(last_hit_at, created_at)) * 1000 AS last_used_at_ms\n FROM ${RDF_QUERY_RESULT_CACHE_TABLE}\n WHERE facts_data_version = $1\n UNION ALL\n SELECT\n 'materialized-result' AS kind,\n cache_key,\n scope_hash,\n facts_data_version,\n OCTET_LENGTH(result_json) AS bytes,\n EXTRACT(EPOCH FROM created_at) * 1000 AS created_at_ms,\n EXTRACT(EPOCH FROM COALESCE(last_hit_at, created_at)) * 1000 AS last_used_at_ms\n FROM ${RDF_MATERIALIZED_RESULT_CACHE_TABLE}\n WHERE facts_data_version = $1\n `, [factsDataVersion]);\n return rows.map((row) => ({\n kind: row.kind,\n cacheKey: row.cache_key,\n ...(row.scope_hash ? { scopeHash: row.scope_hash } : {}),\n factsDataVersion: Number(row.facts_data_version),\n bytes: Number(row.bytes ?? 0) || 0,\n createdAtMs: Number(row.created_at_ms ?? 0) || 0,\n lastUsedAtMs: Number(row.last_used_at_ms ?? row.created_at_ms ?? 0) || 0,\n }));\n }\n\n private queryTemplateCacheCandidates(): PgDerivedCacheCandidate[] {\n return [...this.queryTemplateCache.values()].map((entry) => ({\n kind: 'query-template',\n cacheKey: entry.templateKey,\n bytes: this.queryTemplateCacheEntryBytes(entry),\n createdAtMs: entry.createdAtMs,\n lastUsedAtMs: entry.lastHitAtMs,\n }));\n }\n\n private async deleteDerivedCacheCandidate(\n executor: AsyncSqlExecutor,\n candidate: PgDerivedCacheCandidate,\n ): Promise<number> {\n if (candidate.kind === 'query-template') {\n if (this.deleteQueryTemplateCacheEntry(candidate.cacheKey)) {\n this.queryTemplateCacheEvictions += 1;\n return 1;\n }\n return 0;\n }\n if (candidate.kind === 'query-result') {\n return this.deleteRowsAndCount(executor, `\n DELETE FROM ${RDF_QUERY_RESULT_CACHE_TABLE}\n WHERE cache_key = $1\n AND scope_hash = $2\n AND facts_data_version = $3\n `, [candidate.cacheKey, candidate.scopeHash ?? '', candidate.factsDataVersion ?? 0]);\n }\n return this.deleteRowsAndCount(executor, `\n DELETE FROM ${RDF_MATERIALIZED_RESULT_CACHE_TABLE}\n WHERE cache_key = $1\n AND scope_hash = $2\n AND facts_data_version = $3\n `, [candidate.cacheKey, candidate.scopeHash ?? '', candidate.factsDataVersion ?? 0]);\n }\n\n private async deleteRowsAndCount(\n executor: AsyncSqlExecutor,\n deleteSql: string,\n params: unknown[],\n ): Promise<number> {\n const rows = await executor.query<{ count: number | string }>(`\n WITH deleted AS (\n ${deleteSql}\n RETURNING 1\n )\n SELECT COUNT(*) AS count FROM deleted\n `, params);\n return Number(rows[0]?.count ?? 0) || 0;\n }\n\n private isQueryResultCacheEnabled(query?: RdfQuery): boolean {\n return this.pgOptions.queryResultCacheEnabled !== false\n && query?.cache?.mode !== 'bypass'\n && this.queryResultCacheMaxEntries() > 0;\n }\n\n private isMaterializedResultCacheEnabled(query?: RdfQuery): boolean {\n return this.pgOptions.materializedResultCacheEnabled !== false\n && Boolean(query?.cache?.materialized)\n && query?.cache?.mode !== 'bypass'\n && this.materializedResultCacheMaxEntries() > 0;\n }\n\n private queryResultCacheMaxEntries(): number {\n const configured = this.pgOptions.queryResultCacheMaxEntries ?? DEFAULT_QUERY_RESULT_CACHE_MAX_ENTRIES;\n return Number.isFinite(configured) ? Math.max(0, Math.floor(configured)) : DEFAULT_QUERY_RESULT_CACHE_MAX_ENTRIES;\n }\n\n private materializedResultCacheMaxEntries(): number {\n const configured = this.pgOptions.materializedResultCacheMaxEntries ?? DEFAULT_MATERIALIZED_RESULT_CACHE_MAX_ENTRIES;\n return Number.isFinite(configured) ? Math.max(0, Math.floor(configured)) : DEFAULT_MATERIALIZED_RESULT_CACHE_MAX_ENTRIES;\n }\n\n private queryResultCacheTtlMs(query?: RdfQuery): number {\n const configured = query?.cache?.ttlMs ?? this.pgOptions.queryResultCacheTtlMs ?? DEFAULT_QUERY_RESULT_CACHE_TTL_MS;\n return Number.isFinite(configured) ? Math.max(0, Math.floor(configured)) : DEFAULT_QUERY_RESULT_CACHE_TTL_MS;\n }\n\n private queryResultCacheMaxBytes(): number {\n const configured = this.pgOptions.queryResultCacheMaxBytes ?? DEFAULT_QUERY_RESULT_CACHE_MAX_BYTES;\n return Number.isFinite(configured) ? Math.max(0, Math.floor(configured)) : DEFAULT_QUERY_RESULT_CACHE_MAX_BYTES;\n }\n\n private materializedResultCacheTtlMs(query?: RdfQuery): number {\n const configured = materializedResultConfigTtlMs(query?.cache?.materialized)\n ?? query?.cache?.ttlMs\n ?? this.pgOptions.materializedResultCacheTtlMs\n ?? DEFAULT_MATERIALIZED_RESULT_CACHE_TTL_MS;\n return Number.isFinite(configured) ? Math.max(0, Math.floor(configured)) : DEFAULT_MATERIALIZED_RESULT_CACHE_TTL_MS;\n }\n\n private materializedResultCacheMaxBytes(): number {\n const configured = this.pgOptions.materializedResultCacheMaxBytes ?? DEFAULT_MATERIALIZED_RESULT_CACHE_MAX_BYTES;\n return Number.isFinite(configured) ? Math.max(0, Math.floor(configured)) : DEFAULT_MATERIALIZED_RESULT_CACHE_MAX_BYTES;\n }\n\n private derivedCacheMaxBytes(): number {\n const configured = this.pgOptions.derivedCacheMaxBytes ?? DEFAULT_DERIVED_CACHE_MAX_BYTES;\n return Number.isFinite(configured) ? Math.max(0, Math.floor(configured)) : DEFAULT_DERIVED_CACHE_MAX_BYTES;\n }\n\n private derivedCacheScopeMaxBytes(): number {\n const configured = this.pgOptions.derivedCacheScopeMaxBytes ?? DEFAULT_DERIVED_CACHE_SCOPE_MAX_BYTES;\n return Number.isFinite(configured) ? Math.max(0, Math.floor(configured)) : DEFAULT_DERIVED_CACHE_SCOPE_MAX_BYTES;\n }\n\n private queryTemplateCacheMaxEntries(): number {\n const configured = this.pgOptions.queryTemplateCacheMaxEntries ?? DEFAULT_QUERY_TEMPLATE_CACHE_MAX_ENTRIES;\n return Number.isFinite(configured) ? Math.max(0, Math.floor(configured)) : DEFAULT_QUERY_TEMPLATE_CACHE_MAX_ENTRIES;\n }\n\n private queryTemplateCacheTtlMs(): number {\n const configured = this.pgOptions.queryTemplateCacheTtlMs ?? DEFAULT_QUERY_TEMPLATE_CACHE_TTL_MS;\n return Number.isFinite(configured) ? Math.max(0, Math.floor(configured)) : DEFAULT_QUERY_TEMPLATE_CACHE_TTL_MS;\n }\n\n private pruneQueryTemplateCache(now = Date.now(), ttlMs = this.queryTemplateCacheTtlMs()): void {\n if (ttlMs <= 0 || this.queryTemplateCache.size === 0) {\n return;\n }\n const expiresBefore = now - ttlMs;\n for (const [key, entry] of this.queryTemplateCache) {\n if (entry.lastHitAtMs < expiresBefore) {\n this.deleteQueryTemplateCacheEntry(key);\n this.queryTemplateCacheEvictions += 1;\n this.recordDerivedCacheEviction('templateTtl');\n }\n }\n }\n\n private pruneQueryTemplateCacheByteBudget(maxBytes = this.derivedCacheMaxBytes()): void {\n if (maxBytes <= 0 || this.queryTemplateCache.size === 0) {\n return;\n }\n const candidates = this.queryTemplateCacheCandidates().filter((candidate) => candidate.bytes > 0);\n candidates.sort(compareDerivedCacheCandidates);\n let retainedBytes = 0;\n for (const candidate of candidates) {\n if (retainedBytes + candidate.bytes <= maxBytes) {\n retainedBytes += candidate.bytes;\n continue;\n }\n if (this.deleteQueryTemplateCacheEntry(candidate.cacheKey)) {\n this.queryTemplateCacheEvictions += 1;\n this.recordDerivedCacheEviction('templateBytes');\n }\n }\n }\n\n private queryTemplateCacheStats(): RdfQueryTemplateCacheStats {\n this.pruneQueryTemplateCache();\n this.pruneQueryTemplateCacheByteBudget();\n return {\n entryCount: this.queryTemplateCache.size,\n maxEntries: this.queryTemplateCacheMaxEntries(),\n ttlMs: this.queryTemplateCacheTtlMs(),\n hitCount: this.queryTemplateCacheHits,\n missCount: this.queryTemplateCacheMisses,\n evictionCount: this.queryTemplateCacheEvictions,\n compiledSqlEntryCount: this.compiledSqlTemplateCacheEntryCount(),\n compiledSqlHitCount: this.compiledSqlTemplateCacheHits,\n compiledSqlMissCount: this.compiledSqlTemplateCacheMisses,\n compiledSqlEvictionCount: this.compiledSqlTemplateCacheEvictions,\n totalBytes: this.queryTemplateCacheMemoryBytes(),\n };\n }\n\n private queryTemplateCacheMemoryBytes(): number {\n let totalBytes = 0;\n for (const entry of this.queryTemplateCache.values()) {\n totalBytes += this.queryTemplateCacheEntryBytes(entry);\n }\n return totalBytes;\n }\n\n private queryTemplateCacheEntryBytes(entry: PgQueryTemplateCacheEntry): number {\n let total = Buffer.byteLength(entry.templateKey, 'utf8')\n + Buffer.byteLength(entry.templateShape, 'utf8')\n + 24;\n for (const compiled of entry.compiledSqlTemplates.values()) {\n total += Buffer.byteLength(compiled.shapeKey, 'utf8')\n + Buffer.byteLength(compiled.physicalShape, 'utf8')\n + 24;\n }\n return total;\n }\n\n private compiledSqlTemplateCacheEntryCount(): number {\n let count = 0;\n for (const entry of this.queryTemplateCache.values()) {\n count += entry.compiledSqlTemplates.size;\n }\n return count;\n }\n\n private deleteQueryTemplateCacheEntry(templateKey: string): boolean {\n const entry = this.queryTemplateCache.get(templateKey);\n if (!entry) {\n return false;\n }\n this.queryTemplateCache.delete(templateKey);\n this.compiledSqlTemplateCacheEvictions += entry.compiledSqlTemplates.size;\n return true;\n }\n\n private async probePgAcceleration(): Promise<RdfPgAccelerationStats> {\n const profile = this.pgOptions.rdfAccelerationProfile ?? 'baseline';\n const requiredCapabilities = this.requiredPgAccelerationCapabilities(profile);\n if (profile === 'baseline') {\n return this.disabledPgAccelerationStats();\n }\n\n const engineSqlCapabilities = this.engineSqlPgAccelerationCapabilities(profile);\n const providerProbe = await this.probeXpodRdfAccelerationProvider();\n const providerCapabilities = providerProbe?.capabilities ?? [];\n const capabilities = uniqueStrings([\n ...engineSqlCapabilities,\n ...providerCapabilities,\n ]).sort();\n const capabilityProviders = this.pgAccelerationCapabilityProviders(engineSqlCapabilities, providerProbe);\n const missingCapabilities = requiredCapabilities.filter((capability) => !capabilities.includes(capability));\n if (missingCapabilities.length > 0) {\n return {\n profile,\n requested: true,\n available: true,\n enabled: false,\n provider: providerProbe?.provider ?? 'engine-sql',\n version: providerProbe?.version ?? 'engine-sql',\n capabilities,\n capabilityProviders,\n requiredCapabilities,\n missingCapabilities,\n fallbackReason: 'capability-missing',\n fallbackDetail: `Missing PostgreSQL RDF acceleration capabilities: ${missingCapabilities.join(', ')}`,\n };\n }\n\n const provider = this.preferredPgAccelerationProvider(profile, providerProbe);\n return {\n profile,\n requested: true,\n available: true,\n enabled: true,\n provider,\n version: providerProbe?.version ?? 'engine-sql',\n capabilities,\n capabilityProviders,\n requiredCapabilities,\n missingCapabilities: [],\n activeOperators: this.activePgAccelerationOperators(capabilities),\n };\n }\n\n private async probeXpodRdfAccelerationProvider(): Promise<PgAccelerationCapabilityProbe | null> {\n const executor = this.requireExecutor();\n try {\n const probeRows = await executor.query<{\n extension_version: string | null;\n has_version: boolean;\n has_capabilities: boolean;\n }>(`\n WITH function_probe AS (\n SELECT\n to_regprocedure('xpod_rdf.version()') IS NOT NULL AS has_version,\n to_regprocedure('xpod_rdf.capabilities()') IS NOT NULL AS has_capabilities\n ),\n extension_probe AS (\n SELECT extversion AS extension_version\n FROM pg_extension\n WHERE extname = 'xpod_rdf'\n )\n SELECT\n (SELECT extension_version FROM extension_probe) AS extension_version,\n function_probe.has_version,\n function_probe.has_capabilities\n FROM function_probe\n `);\n const functionProbe = probeRows[0];\n if (!functionProbe?.has_version || !functionProbe.has_capabilities) {\n return null;\n }\n\n const versionRows = await executor.query<{ version: string }>('SELECT xpod_rdf.version() AS version');\n const capabilityRows = await executor.query<{ capabilities: string }>('SELECT xpod_rdf.capabilities() AS capabilities');\n const provider: RdfPgAccelerationProvider = functionProbe.extension_version ? 'extension' : 'sql-abi';\n const rawCapabilities = parsePgAccelerationCapabilities(capabilityRows[0]?.capabilities);\n const capabilities = provider === 'sql-abi'\n ? rawCapabilities.filter((capability) => SQL_ABI_ALLOWED_CAPABILITIES.includes(capability))\n : rawCapabilities;\n return {\n provider,\n version: versionRows[0]?.version ?? functionProbe.extension_version ?? provider,\n capabilities: uniqueStrings(capabilities).sort(),\n };\n } catch {\n return null;\n }\n }\n\n private disabledPgAccelerationStats(): RdfPgAccelerationStats {\n return {\n profile: this.pgOptions.rdfAccelerationProfile ?? 'baseline',\n requested: false,\n available: false,\n enabled: false,\n capabilities: [],\n requiredCapabilities: [],\n missingCapabilities: [],\n fallbackReason: 'profile-disabled',\n };\n }\n\n private requiredPgAccelerationCapabilities(profile: RdfPgAccelerationProfile): string[] {\n if (this.pgOptions.rdfAccelerationRequiredCapabilities) {\n return [...this.pgOptions.rdfAccelerationRequiredCapabilities].sort();\n }\n switch (profile) {\n case 'baseline':\n return [];\n case 'pg-result-cache':\n return [...RESULT_CACHE_REQUIRED_CAPABILITIES];\n case 'pg-hot-operators':\n return [...HOT_OPERATOR_REQUIRED_CAPABILITIES];\n case 'pg-custom-index':\n return [\n ...HOT_OPERATOR_REQUIRED_CAPABILITIES,\n ...CUSTOM_INDEX_REQUIRED_CAPABILITIES,\n ];\n default: {\n const exhaustive: never = profile;\n throw new Error(`Unsupported PostgreSQL RDF acceleration profile: ${String(exhaustive)}`);\n }\n }\n }\n\n private canUsePgAccelerationCapability(capability: string): boolean {\n return this.pgAcceleration?.enabled === true\n && this.effectivePgAccelerationActiveOperators(this.pgAcceleration).includes(capability);\n }\n\n private activePgAccelerationOperators(capabilities: string[]): string[] {\n const wiredOperators = new Set<string>([\n ...PG_ENGINE_SQL_HOT_OPERATOR_CAPABILITIES,\n ...PG_NATIVE_CUSTOM_INDEX_OPERATOR_CAPABILITIES,\n ...RESULT_CACHE_REQUIRED_CAPABILITIES,\n ]);\n return capabilities.filter((capability) => wiredOperators.has(capability)).sort();\n }\n\n private effectivePgAccelerationActiveOperators(acceleration: RdfPgAccelerationStats | null = this.pgAcceleration): string[] {\n const activeOperators = acceleration?.activeOperators ?? [];\n if (!this.pgCustomIndexBuildIsDeferred(acceleration)) {\n return activeOperators;\n }\n return activeOperators.filter((capability) => !isNativeExtensionOnlyCapability(capability));\n }\n\n private pgCustomIndexBuildIsDeferred(acceleration: RdfPgAccelerationStats | null = this.pgAcceleration): boolean {\n return acceleration?.enabled === true\n && acceleration.profile === 'pg-custom-index'\n && acceleration.capabilityProviders?.['index.xpod_rdf_perm'] === 'extension'\n && !this.pgCustomIndexesReady;\n }\n\n private pgAccelerationCapabilityProviders(\n engineSqlCapabilities: string[],\n providerProbe: PgAccelerationCapabilityProbe | null,\n ): Record<string, RdfPgAccelerationProvider> {\n const providers = new Map<string, RdfPgAccelerationProvider>();\n for (const capability of engineSqlCapabilities) {\n providers.set(capability, 'engine-sql');\n }\n if (providerProbe) {\n for (const capability of providerProbe.capabilities) {\n if (!providers.has(capability) || isNativeExtensionOnlyCapability(capability)) {\n providers.set(capability, providerProbe.provider);\n }\n }\n }\n return Object.fromEntries([...providers.entries()].sort(([left], [right]) => left.localeCompare(right)));\n }\n\n private preferredPgAccelerationProvider(\n profile: RdfPgAccelerationProfile,\n providerProbe: PgAccelerationCapabilityProbe | null,\n ): RdfPgAccelerationProvider {\n if (profile === 'pg-custom-index' && providerProbe?.provider === 'extension') {\n return 'extension';\n }\n return 'engine-sql';\n }\n\n private engineSqlPgAccelerationCapabilities(profile: RdfPgAccelerationProfile): string[] {\n switch (profile) {\n case 'baseline':\n return [];\n case 'pg-result-cache':\n return [...RESULT_CACHE_REQUIRED_CAPABILITIES];\n case 'pg-hot-operators':\n return [...HOT_OPERATOR_REQUIRED_CAPABILITIES];\n case 'pg-custom-index':\n return [...HOT_OPERATOR_REQUIRED_CAPABILITIES];\n default: {\n const exhaustive: never = profile;\n throw new Error(`Unsupported PostgreSQL RDF acceleration profile: ${String(exhaustive)}`);\n }\n }\n }\n\n private pgAccelerationActiveMarkersForQuery(query: RdfQuery): string[] {\n return this.pgAccelerationCapabilitiesForQuery(query)\n .filter((capability) => this.canUsePgAccelerationCapability(capability))\n .map((capability) => `XpodRdfPgHotOperator(${capability})`);\n }\n\n private pgAccelerationActiveMarkersForScan(pattern: RdfQueryPattern): string[] {\n return this.pgAccelerationScanCapabilities(pattern)\n .filter((capability) => this.canUsePgAccelerationCapability(capability))\n .map((capability) => `XpodRdfPgHotOperator(${capability})`);\n }\n\n private withPgAccelerationFallbackPlan(result: RdfQueryResult, query?: RdfQuery): RdfQueryResult {\n const acceleration = this.pgAcceleration;\n if (!acceleration?.requested || acceleration.enabled) {\n const unsupportedMarkers = query ? this.unsupportedPgAccelerationMarkers(query) : [];\n return unsupportedMarkers.length > 0\n ? withQueryCachePlan(result, ...unsupportedMarkers)\n : result;\n }\n return withQueryCachePlan(result, `PostgresRdfAccelerationFallback(${acceleration.fallbackReason ?? 'unknown'})`);\n }\n\n private unsupportedPgAccelerationMarkers(query: RdfQuery): string[] {\n return this.unsupportedPgAccelerationCapabilities(query)\n .map((capability) => `PostgresRdfAccelerationUnsupported(${capability})`);\n }\n\n private unsupportedPgAccelerationCapabilities(query: RdfQuery): string[] {\n const acceleration = this.pgAcceleration;\n if (!acceleration?.enabled) {\n return [];\n }\n const activeOperators = new Set(this.effectivePgAccelerationActiveOperators(acceleration));\n return this.pgAccelerationCapabilitiesForQuery(query)\n .filter((capability) => !activeOperators.has(capability));\n }\n\n private async withPostgresQueryExplain(result: RdfQueryResult, options: PgQueryExplainOptions): Promise<RdfQueryResult> {\n const acceleration = this.pgAcceleration;\n const planner = await this.postgresQueryPlannerExplain(result, options.query, options.factsDataVersion);\n const cache = {\n template: options.template.explain,\n result: options.resultCache,\n materialized: options.materializedCache,\n scope: {\n hash: options.template.cacheScope.hash,\n shape: options.template.cacheScope.shape,\n principal: options.template.cacheScope.principal,\n basePath: options.template.cacheScope.basePath,\n mode: options.template.cacheScope.mode,\n authorizationModel: options.template.cacheScope.authorizationModel,\n permissionVersion: options.template.cacheScope.permissionVersion,\n allowedGraphUrls: options.template.cacheScope.allowedGraphUrls,\n deniedGraphUrls: options.template.cacheScope.deniedGraphUrls,\n deniedGraphPrefixes: options.template.cacheScope.deniedGraphPrefixes,\n },\n };\n const accelerationExplain: RdfSlowQueryStatsEntry['acceleration'] = {\n profile: this.pgOptions.rdfAccelerationProfile ?? 'baseline',\n requested: Boolean(acceleration?.requested),\n enabled: Boolean(acceleration?.enabled),\n ...(acceleration?.provider ? { provider: acceleration.provider } : {}),\n ...(this.pgCustomIndexBuildIsDeferred(acceleration)\n ? { fallbackReason: 'index-build-deferred' as const }\n : acceleration?.fallbackReason ? { fallbackReason: acceleration.fallbackReason } : {}),\n ...(acceleration?.activeOperators ? { activeOperators: this.effectivePgAccelerationActiveOperators(acceleration) } : {}),\n ...(options.query ? { unsupportedCapabilities: this.unsupportedPgAccelerationCapabilities(options.query) } : {}),\n };\n await this.recordSlowQuerySnapshot(planner, options, cache.scope, accelerationExplain);\n return {\n ...result,\n metrics: {\n ...result.metrics,\n explain: {\n ...result.metrics.explain,\n engine: 'postgres-rdf',\n ...(options.factsDataVersion !== undefined ? { factsDataVersion: options.factsDataVersion } : {}),\n derived: {\n profile: 'rdf3x',\n ...(options.factsDataVersion !== undefined ? { factsDataVersion: options.factsDataVersion } : {}),\n },\n planner,\n cache,\n acceleration: accelerationExplain,\n },\n },\n };\n }\n\n private async postgresQueryPlannerExplain(\n result: RdfQueryResult,\n query?: RdfQuery,\n factsDataVersion?: number,\n ): Promise<RdfQueryPlannerExplain> {\n const plan = result.metrics.plan ?? [];\n const hasPlan = (marker: string): boolean => plan.some((entry) => entry.includes(marker));\n const hasPlanPrefix = (marker: string): boolean => plan.some((entry) => entry.startsWith(marker));\n const rejectedCapabilities = query ? this.unsupportedPgAccelerationCapabilities(query) : [];\n const usedNativeCapabilities = this.usedPgNativeCapabilities(plan);\n const reasons = new Set<string>();\n const estimateInputs = new Set<string>();\n const availableStats = new Set<string>([\n 'facts.cardinalityDistributions',\n 'facts.literalDatatypeDistribution',\n 'rdf3x.projectionStats',\n 'pg.tableStats',\n ]);\n const runtime = this.queryPlannerRuntimeExplain(result.metrics);\n\n let selectedPath: RdfQueryPlannerExplain['selectedPath'] = 'unknown';\n if (hasPlan('PostgresMaterializedResultHit')) {\n selectedPath = 'materialized-result-cache';\n reasons.add('materialized-result-cache-hit');\n estimateInputs.add('facts.dataVersion');\n estimateInputs.add('query.cache.scope');\n } else if (hasPlan('PostgresResultCacheHit')) {\n selectedPath = 'query-result-cache';\n reasons.add('query-result-cache-hit');\n estimateInputs.add('facts.dataVersion');\n estimateInputs.add('query.cache.scope');\n } else if (hasPlanPrefix('XpodRdfExtensionOperator(')) {\n selectedPath = 'native-extension';\n reasons.add('native-extension-operator-selected');\n estimateInputs.add('pgAcceleration.capabilities');\n if (hasPlan('PostgresRdfNativeGraphPrefixSlotFilter')) {\n reasons.add('graph-prefix-slot-filter-pushed-down');\n }\n if (hasPlan('PostgresRdfNativeCustomIndexBgpOrderPage')) {\n reasons.add('order-pagination-pushed-down');\n }\n if (hasPlanPrefix('PostgresRdfNativeCustomIndexSubjectStar')) {\n reasons.add('subject-star-shape-detected');\n }\n if (\n hasPlanPrefix('PostgresRdfNativeCustomIndexBgpCount')\n || hasPlanPrefix('PostgresRdfNativeCustomIndexBgpGroupCount')\n || hasPlanPrefix('PostgresRdfNativeCustomIndexBgpNumericAggregate')\n ) {\n reasons.add('aggregate-pushed-down');\n }\n } else if (hasPlan('PostgresRdf3x') || hasPlanPrefix('Rdf3xJoinBGP(')) {\n selectedPath = 'rdf3x';\n reasons.add('rdf3x-sql-path-selected');\n if (hasPlan('Rdf3xJoinOrder(')) {\n reasons.add('join-order-by-pattern-cardinality');\n estimateInputs.add('facts.exactPatternCounts');\n }\n if (hasPlan('Rdf3xJoinOrderBy(') || hasPlan('Rdf3xJoinLimit')) {\n reasons.add('order-pagination-pushed-down');\n }\n if (hasPlan('Rdf3xJoinTupleValues(')) {\n reasons.add('values-source-pushed-down');\n }\n if (hasPlan('PostgresRdf3xSubjectStarJoin(')) {\n reasons.add('subject-star-shape-detected');\n }\n if (hasPlan('PostgresRdf3xGroupCount') || hasPlan('PostgresRdf3xJoinAggregate') || hasPlan('PostgresRdf3xGroupAggregate')) {\n reasons.add('aggregate-pushed-down');\n }\n } else if (hasPlan('PostgresFactsQuery')) {\n selectedPath = 'facts';\n reasons.add('facts-fallback-selected');\n if (hasPlan('PostgresNumericAggregateFactsCutover')) {\n reasons.add('numeric-aggregate-cost-cutover');\n estimateInputs.add('facts.exactPatternCounts');\n }\n if ((query?.optional?.length ?? 0) > 0) reasons.add('optional-shape-requires-facts-fallback');\n if ((query?.unions?.length ?? 0) > 0) reasons.add('union-shape-requires-facts-fallback');\n if ((query?.minus?.length ?? 0) > 0) reasons.add('minus-shape-requires-facts-fallback');\n if ((query?.exists?.length ?? 0) > 0) reasons.add('exists-shape-requires-facts-fallback');\n if ((query?.textSearch?.length ?? 0) > 0) reasons.add('text-search-requires-external-index');\n if ((query?.vectorSearch?.length ?? 0) > 0) reasons.add('vector-search-requires-external-index');\n if ((query?.filters ?? []).some((filter) => filter.operator === '$regex' || filter.operator === '$notRegex')) {\n reasons.add('regex-filter-requires-facts-fallback');\n }\n }\n\n const shouldExplainHistograms = query\n && selectedPath !== 'materialized-result-cache'\n && selectedPath !== 'query-result-cache';\n const histogramHints = shouldExplainHistograms\n ? await this.queryPlannerHistogramHints(query, factsDataVersion)\n : [];\n for (const hint of histogramHints) {\n if (hint.kind === 'graph') {\n reasons.add('histogram-graph-cardinality-available');\n estimateInputs.add('facts.graphCardinality');\n } else if (hint.kind === 'predicate') {\n reasons.add('histogram-predicate-cardinality-available');\n estimateInputs.add('facts.predicateCardinality');\n } else if (hint.kind === 'predicate-object') {\n reasons.add('histogram-predicate-object-cardinality-available');\n estimateInputs.add('facts.predicateObjectCardinality');\n } else if (hint.kind === 'subject-predicate') {\n reasons.add('histogram-subject-predicate-cardinality-available');\n estimateInputs.add('facts.subjectPredicateCardinality');\n }\n }\n\n const shouldExplainDerivedStats = selectedPath !== 'materialized-result-cache'\n && selectedPath !== 'query-result-cache';\n const staleStats = shouldExplainDerivedStats\n ? await this.queryPlannerStaleStatsExplain(factsDataVersion)\n : undefined;\n if (staleStats?.stale) {\n reasons.add('rdf3x-stats-stale');\n estimateInputs.add('facts.dataVersion');\n estimateInputs.add('rdf3x.factsDataVersion');\n }\n\n if (hasPlanPrefix('XpodRdfPgHotOperator(')) {\n reasons.add('pg-hot-operator-enabled');\n estimateInputs.add('pgAcceleration.capabilities');\n }\n if (hasPlan('PostgresQueryTemplateCacheHit')) {\n reasons.add('query-template-cache-hit');\n } else if (hasPlan('PostgresQueryTemplateCacheMiss')) {\n reasons.add('query-template-cache-miss');\n } else if (hasPlan('PostgresQueryTemplateCacheBypass')) {\n reasons.add('query-template-cache-bypass');\n }\n if (hasPlan('PostgresMaterializedResultStore')) {\n reasons.add('materialized-result-cache-store');\n }\n if (hasPlan('PostgresResultCacheStore')) {\n reasons.add('query-result-cache-store');\n }\n if (rejectedCapabilities.length > 0) {\n reasons.add('pg-acceleration-capability-unsupported');\n }\n const rejectedNativeOperators = query\n ? this.rejectedPgNativeOperators(query, selectedPath, usedNativeCapabilities, hasPlan)\n : [];\n if (rejectedNativeOperators.length > 0) {\n reasons.add('native-operator-rejected');\n estimateInputs.add('pgAcceleration.capabilities');\n if (rejectedNativeOperators.some((entry) => entry.reason.startsWith('cost-cutover-'))) {\n reasons.add('native-operator-cost-cutover');\n estimateInputs.add('facts.exactPatternCounts');\n }\n }\n if (runtime.scannedRows > 0) {\n reasons.add('runtime-scan-rows-reported');\n estimateInputs.add('query.metrics.scannedRows');\n }\n const slowQuery = this.queryPlannerSlowQueryExplain(runtime);\n if (slowQuery) {\n reasons.add('slow-query-detected');\n for (const reason of slowQuery.reasons) {\n reasons.add(`slow-query-${reason}`);\n }\n }\n\n return {\n selectedPath,\n reasons: [...reasons],\n estimateInputs: [...estimateInputs],\n availableStats: [...availableStats],\n runtime,\n ...(staleStats ? { staleStats } : {}),\n ...(slowQuery ? { slowQuery } : {}),\n ...(histogramHints.length > 0 ? { histogramHints } : {}),\n ...(rejectedCapabilities.length > 0 ? { rejectedCapabilities } : {}),\n ...(rejectedNativeOperators.length > 0 ? { rejectedNativeOperators } : {}),\n };\n }\n\n private usedPgNativeCapabilities(plan: string[]): Set<string> {\n const capabilities = new Set<string>();\n for (const entry of plan) {\n const match = /^XpodRdfExtensionOperator\\(([^)]+)\\)/.exec(entry);\n if (match) {\n capabilities.add(match[1]);\n }\n }\n return capabilities;\n }\n\n private rejectedPgNativeOperators(\n query: RdfQuery,\n selectedPath: RdfQueryPlannerExplain['selectedPath'],\n usedNativeCapabilities: Set<string>,\n hasPlan: (marker: string) => boolean,\n ): RdfQueryPlannerNativeOperatorRejection[] {\n if (!this.pgAcceleration?.enabled || selectedPath === 'native-extension') {\n return [];\n }\n const activeNativeOperators = new Set(\n this.effectivePgAccelerationActiveOperators(this.pgAcceleration)\n .filter((capability) => isNativeExtensionOnlyCapability(capability)),\n );\n const rejected = new Map<string, string>();\n const add = (capability: string, reason: string): void => {\n if (activeNativeOperators.has(capability) && !usedNativeCapabilities.has(capability)) {\n rejected.set(capability, reason);\n }\n };\n\n const aggregates = queryAggregates(query);\n const requiredPatternCount = query.patterns.length > 0 ? query.patterns.length : 1;\n const hasValues = (query.values?.length ?? 0) > 0;\n const hasGraphPrefix = this.queryHasGraphPrefix(query);\n if (aggregates.length > 0) {\n if (aggregates.some((aggregate) => aggregate.type !== 'count')) {\n add(\n 'aggregate.bgp_numeric',\n hasValues\n ? 'cost-cutover-values-native-regression'\n : hasPlan('PostgresNumericAggregateFactsCutover')\n ? 'cost-cutover-small-grouped-numeric-aggregate'\n : 'shape-gate',\n );\n } else if ((query.groupBy?.length ?? 0) > 0) {\n add('aggregate.bgp_group_count', 'cost-cutover-group-count-native-regression');\n } else if (requiredPatternCount > 1) {\n const countReason = aggregates.some((aggregate) => aggregate.distinct || (aggregate.distinctVariables ?? []).length > 0)\n ? 'cost-cutover-count-distinct-native-regression'\n : 'cost-cutover-bgp-count-native-regression';\n add('aggregate.bgp_count', countReason);\n if (this.queryHasSubjectStarShape(query)) {\n add('aggregate.subject_star_count', countReason);\n }\n } else {\n add(\n 'index.xpod_rdf_perm.count_any',\n hasGraphPrefix ? 'cost-cutover-graph-prefix-native-regression' : 'shape-gate',\n );\n }\n return [...rejected.entries()]\n .map(([capability, reason]) => ({ capability, reason }))\n .sort((left, right) => left.capability.localeCompare(right.capability));\n }\n\n if (query.distinct && requiredPatternCount === 1 && (query.select?.length ?? 0) === 1) {\n add('index.xpod_rdf_perm.distinct_any', 'shape-gate');\n }\n if (hasValues) {\n add(query.limit !== undefined || query.offset !== undefined ? 'join.values.limit.native' : 'join.values.native', 'cost-cutover-values-native-regression');\n } else if (requiredPatternCount > 1) {\n if (this.queryHasSubjectStarShape(query) && !hasGraphPrefix) {\n add('join.subject_star', 'shape-gate');\n }\n add(\n 'join.required_bgp.native',\n hasGraphPrefix\n ? 'cost-cutover-graph-prefix-native-regression'\n : 'cost-cutover-generic-bgp-native-regression',\n );\n }\n return [...rejected.entries()]\n .map(([capability, reason]) => ({ capability, reason }))\n .sort((left, right) => left.capability.localeCompare(right.capability));\n }\n\n private queryHasGraphPrefix(query: RdfQuery): boolean {\n return query.patterns.some((pattern) => (\n isQueryTermOperator(pattern.graph) && typeof pattern.graph.$startsWith === 'string'\n ));\n }\n\n private queryHasSubjectStarShape(query: RdfQuery): boolean {\n if (query.patterns.length < 3) {\n return false;\n }\n const subjectVariables = query.patterns.map((pattern) => (\n isVariable(pattern.subject) ? pattern.subject.variable : undefined\n ));\n const first = subjectVariables[0];\n return Boolean(first && subjectVariables.every((variableName) => variableName === first));\n }\n\n private queryPlannerRuntimeExplain(metrics: RdfQueryMetrics): RdfQueryPlannerExplain['runtime'] {\n return {\n durationMs: metrics.durationMs,\n scannedRows: metrics.scannedRows,\n joinedRows: metrics.joinedRows,\n returnedRows: metrics.returnedRows,\n filtersApplied: metrics.filtersApplied,\n filtersPushedDown: metrics.filtersPushedDown,\n indexChoices: [...metrics.indexChoices],\n planSize: metrics.plan.length,\n };\n }\n\n private async queryPlannerStaleStatsExplain(\n factsDataVersion?: number,\n ): Promise<RdfQueryPlannerExplain['staleStats']> {\n const resolvedFactsDataVersion = factsDataVersion ?? await this.readFactsDataVersion();\n const rdf3xFactsDataVersion = await this.readRdf3xFactsDataVersion();\n return {\n factsDataVersion: resolvedFactsDataVersion,\n rdf3xFactsDataVersion,\n stale: rdf3xFactsDataVersion !== resolvedFactsDataVersion,\n lag: Math.max(0, resolvedFactsDataVersion - rdf3xFactsDataVersion),\n };\n }\n\n private queryPlannerSlowQueryExplain(runtime: RdfQueryPlannerExplain['runtime']): RdfQueryPlannerExplain['slowQuery'] | undefined {\n const thresholdMs = this.queryExplainSlowMs();\n const scannedRowsThreshold = this.queryExplainLargeScanRows();\n const scanAmplification = runtime.returnedRows <= 0\n ? runtime.scannedRows\n : runtime.scannedRows / runtime.returnedRows;\n const reasons: string[] = [];\n if (runtime.durationMs >= thresholdMs) {\n reasons.push('duration-threshold');\n }\n if (runtime.scannedRows >= scannedRowsThreshold) {\n reasons.push('scan-rows-threshold');\n }\n if (\n runtime.scannedRows >= scannedRowsThreshold\n && scanAmplification >= DEFAULT_QUERY_EXPLAIN_SCAN_AMPLIFICATION\n ) {\n reasons.push('scan-amplification');\n }\n if (reasons.length === 0) {\n return undefined;\n }\n return {\n durationMs: runtime.durationMs,\n thresholdMs,\n scannedRows: runtime.scannedRows,\n scannedRowsThreshold,\n scanAmplification,\n reasons,\n };\n }\n\n private async recordSlowQuerySnapshot(\n planner: RdfQueryPlannerExplain,\n options: PgQueryExplainOptions,\n cacheScope: {\n hash: string;\n basePath: string | null;\n principal: string | null;\n },\n acceleration: RdfSlowQueryStatsEntry['acceleration'],\n ): Promise<void> {\n if (!planner.slowQuery) {\n return;\n }\n const maxEntries = this.queryExplainSlowQueryMaxEntries();\n if (maxEntries <= 0) {\n this.slowQueryHistory = [];\n return;\n }\n const derivedCache = await this.slowQueryDerivedCacheExplain();\n\n this.slowQueryHistory.push({\n generatedAt: new Date().toISOString(),\n queryKey: options.template.cacheKey,\n ...(options.template.templateKey !== 'disabled' ? { templateKey: options.template.templateKey } : {}),\n selectedPath: planner.selectedPath,\n reasons: [...planner.reasons],\n runtime: {\n ...planner.runtime,\n indexChoices: [...planner.runtime.indexChoices],\n },\n slowQuery: {\n ...planner.slowQuery,\n reasons: [...planner.slowQuery.reasons],\n },\n ...(planner.staleStats ? { staleStats: { ...planner.staleStats } } : {}),\n ...(planner.histogramHints ? { histogramHints: planner.histogramHints.map(clonePlannerHistogramHint) } : {}),\n ...(planner.rejectedNativeOperators\n ? { rejectedNativeOperators: planner.rejectedNativeOperators.map((entry) => ({ ...entry })) }\n : {}),\n derivedCache,\n cache: {\n templateStatus: options.template.explain.status,\n ...(options.resultCache ? { resultStatus: options.resultCache.status } : {}),\n ...(options.materializedCache ? { materializedStatus: options.materializedCache.status } : {}),\n ...(options.resultCache ? { result: cloneQueryCacheExplain(options.resultCache) } : {}),\n ...(options.materializedCache ? { materialized: cloneQueryCacheExplain(options.materializedCache) } : {}),\n scopeHash: cacheScope.hash,\n scopeBasePath: cacheScope.basePath,\n scopePrincipal: cacheScope.principal,\n },\n acceleration: {\n ...acceleration,\n ...(acceleration.activeOperators ? { activeOperators: [...acceleration.activeOperators] } : {}),\n ...(acceleration.unsupportedCapabilities ? { unsupportedCapabilities: [...acceleration.unsupportedCapabilities] } : {}),\n },\n });\n this.trimSlowQueryHistory(maxEntries);\n }\n\n private async slowQueryDerivedCacheExplain(): Promise<RdfSlowQueryDerivedCacheExplain> {\n const queryResultCache = await this.queryResultCacheStats();\n const materializedResultCache = await this.materializedResultCacheStats();\n const queryTemplateCache = this.queryTemplateCacheStats();\n const derivedCache = this.derivedCacheStats(\n queryResultCache,\n materializedResultCache,\n queryTemplateCache,\n await this.derivedCacheScopeStats({ limit: 1 }),\n );\n return {\n cacheBytes: derivedCache.cacheBytes,\n maxCacheBytes: derivedCache.maxCacheBytes,\n cachePressure: derivedCache.cachePressure,\n largestScopeBytes: derivedCache.largestScopeBytes,\n largestScopePressure: derivedCache.largestScopePressure,\n ...(derivedCache.largestScopeHash ? { largestScopeHash: derivedCache.largestScopeHash } : {}),\n ...(derivedCache.largestScopeFactsDataVersion !== undefined\n ? { largestScopeFactsDataVersion: derivedCache.largestScopeFactsDataVersion }\n : {}),\n evictionCount: derivedCache.evictionCount,\n evictions: { ...derivedCache.evictions },\n };\n }\n\n private slowQueryStats(): RdfSlowQueryStats {\n const maxEntries = this.queryExplainSlowQueryMaxEntries();\n this.trimSlowQueryHistory(maxEntries);\n if (maxEntries <= 0) {\n return {\n entryCount: 0,\n maxEntries,\n entries: [],\n };\n }\n const entries = [...this.slowQueryHistory]\n .reverse()\n .map((entry) => ({\n ...entry,\n reasons: [...entry.reasons],\n runtime: {\n ...entry.runtime,\n indexChoices: [...entry.runtime.indexChoices],\n },\n slowQuery: {\n ...entry.slowQuery,\n reasons: [...entry.slowQuery.reasons],\n },\n ...(entry.staleStats ? { staleStats: { ...entry.staleStats } } : {}),\n ...(entry.histogramHints ? { histogramHints: entry.histogramHints.map(clonePlannerHistogramHint) } : {}),\n ...(entry.rejectedNativeOperators\n ? { rejectedNativeOperators: entry.rejectedNativeOperators.map((operator) => ({ ...operator })) }\n : {}),\n derivedCache: {\n ...entry.derivedCache,\n evictions: { ...entry.derivedCache.evictions },\n },\n cache: {\n ...entry.cache,\n ...(entry.cache.result ? { result: cloneQueryCacheExplain(entry.cache.result) } : {}),\n ...(entry.cache.materialized ? { materialized: cloneQueryCacheExplain(entry.cache.materialized) } : {}),\n },\n acceleration: {\n ...entry.acceleration,\n ...(entry.acceleration.activeOperators ? { activeOperators: [...entry.acceleration.activeOperators] } : {}),\n ...(entry.acceleration.unsupportedCapabilities ? { unsupportedCapabilities: [...entry.acceleration.unsupportedCapabilities] } : {}),\n },\n }));\n return {\n entryCount: entries.length,\n maxEntries,\n entries,\n };\n }\n\n private trimSlowQueryHistory(maxEntries = this.queryExplainSlowQueryMaxEntries()): void {\n if (maxEntries <= 0) {\n this.slowQueryHistory = [];\n return;\n }\n const extra = this.slowQueryHistory.length - maxEntries;\n if (extra > 0) {\n this.slowQueryHistory.splice(0, extra);\n }\n }\n\n private queryExplainSlowMs(): number {\n return Math.max(0, this.pgOptions.queryExplainSlowMs ?? DEFAULT_QUERY_EXPLAIN_SLOW_MS);\n }\n\n private queryExplainLargeScanRows(): number {\n return Math.max(0, this.pgOptions.queryExplainLargeScanRows ?? DEFAULT_QUERY_EXPLAIN_LARGE_SCAN_ROWS);\n }\n\n private queryExplainSlowQueryMaxEntries(): number {\n const configured = this.pgOptions.queryExplainSlowQueryMaxEntries ?? DEFAULT_QUERY_EXPLAIN_SLOW_QUERY_MAX_ENTRIES;\n return Number.isFinite(configured) ? Math.max(0, Math.floor(configured)) : DEFAULT_QUERY_EXPLAIN_SLOW_QUERY_MAX_ENTRIES;\n }\n\n private async queryPlannerHistogramHints(\n query: RdfQuery,\n factsDataVersion?: number,\n ): Promise<NonNullable<RdfQueryPlannerExplain['histogramHints']>> {\n if (query.patterns.length === 0) {\n return [];\n }\n const distributions = await this.cachedPlannerHistogramDistributions(factsDataVersion);\n const hints: NonNullable<RdfQueryPlannerExplain['histogramHints']> = [];\n query.patterns.forEach((pattern, patternIndex) => {\n const graph = cardinalityTermFromQueryPattern(pattern.graph);\n if (graph) {\n const match = distributions.graphs.find((entry) => sameCardinalityTerm(entry.graph, graph));\n if (match) {\n hints.push({\n kind: 'graph',\n patternIndex,\n graph: match.graph,\n quadCount: match.quadCount,\n distinctSubjects: match.distinctSubjects,\n distinctPredicates: match.distinctPredicates,\n distinctObjects: match.distinctObjects,\n });\n }\n }\n\n const predicate = cardinalityTermFromQueryPattern(pattern.predicate);\n if (!predicate) {\n return;\n }\n const predicateMatch = distributions.predicates.find((entry) => sameCardinalityTerm(entry.predicate, predicate));\n if (predicateMatch) {\n hints.push({\n kind: 'predicate',\n patternIndex,\n predicate: predicateMatch.predicate,\n quadCount: predicateMatch.quadCount,\n graphCount: predicateMatch.graphCount,\n distinctSubjects: predicateMatch.distinctSubjects,\n distinctObjects: predicateMatch.distinctObjects,\n });\n }\n\n const object = cardinalityTermFromQueryPattern(pattern.object);\n if (object) {\n const match = distributions.predicateObjects.find((entry) => (\n sameCardinalityTerm(entry.predicate, predicate)\n && sameCardinalityTerm(entry.object, object)\n ));\n if (match) {\n hints.push({\n kind: 'predicate-object',\n patternIndex,\n predicate: match.predicate,\n object: match.object,\n quadCount: match.quadCount,\n graphCount: match.graphCount,\n distinctSubjects: match.distinctSubjects,\n });\n }\n }\n\n const subject = cardinalityTermFromQueryPattern(pattern.subject);\n if (subject) {\n const match = distributions.subjectPredicates.find((entry) => (\n sameCardinalityTerm(entry.subject, subject)\n && sameCardinalityTerm(entry.predicate, predicate)\n ));\n if (match) {\n hints.push({\n kind: 'subject-predicate',\n patternIndex,\n subject: match.subject,\n predicate: match.predicate,\n quadCount: match.quadCount,\n graphCount: match.graphCount,\n distinctObjects: match.distinctObjects,\n });\n }\n }\n });\n return hints;\n }\n\n private async cachedPlannerHistogramDistributions(factsDataVersion?: number): Promise<RdfCardinalityDistributions> {\n const resolvedFactsDataVersion = factsDataVersion ?? await this.readFactsDataVersion();\n const now = Date.now();\n if (\n this.plannerHistogramCache\n && this.plannerHistogramCache.factsDataVersion === resolvedFactsDataVersion\n && now - this.plannerHistogramCache.createdAtMs <= PLANNER_HISTOGRAM_CACHE_TTL_MS\n ) {\n return this.plannerHistogramCache.distributions;\n }\n const distributions = await this.cardinalityDistributions(PLANNER_HISTOGRAM_HINT_LIMIT);\n this.plannerHistogramCache = {\n factsDataVersion: resolvedFactsDataVersion,\n createdAtMs: now,\n distributions,\n };\n return distributions;\n }\n\n private pgAccelerationCapabilitiesForQuery(query: RdfQuery): string[] {\n const capabilities = new Set<string>();\n const aggregates = queryAggregates(query);\n if (aggregates.some((aggregate) => aggregate.type === 'count')) {\n capabilities.add('aggregate.count');\n }\n if (aggregates.some((aggregate) => aggregate.type !== 'count')) {\n capabilities.add('aggregate.numeric');\n }\n if ((query.values?.length ?? 0) > 0) {\n capabilities.add('join.values');\n }\n\n const requiredPatterns = query.patterns.length > 0 ? query.patterns : [{}];\n if (requiredPatterns.length > 1) {\n capabilities.add('join.required_bgp');\n } else if (requiredPatterns.length === 1) {\n this.pgAccelerationScanCapabilities(requiredPatterns[0]).forEach((capability) => capabilities.add(capability));\n }\n return [...capabilities].sort();\n }\n\n private pgAccelerationScanCapabilities(pattern: RdfQueryPattern): string[] {\n const capabilities = new Set<string>();\n if (isQueryExactTerm(pattern.graph)) {\n capabilities.add('scan.exact_graph');\n } else if (isQueryTermOperator(pattern.graph) && typeof pattern.graph.$startsWith === 'string') {\n capabilities.add('scan.graph_prefix');\n }\n if (\n (isQueryTermOperator(pattern.subject) && pattern.subject.$in)\n || (isQueryTermOperator(pattern.predicate) && pattern.predicate.$in)\n || (isQueryTermOperator(pattern.object) && pattern.object.$in)\n ) {\n capabilities.add('scan.term_in');\n }\n return [...capabilities].sort();\n }\n\n private async joinFactsPattern(\n input: RdfBindingRow[],\n pattern: RdfQueryPattern,\n filters: RdfQueryFilter[],\n metrics: RdfQueryMetrics,\n optional: boolean,\n ): Promise<RdfBindingRow[]> {\n const batched = await this.tryJoinFactsPatternByBoundTerm(input, pattern, filters, metrics, optional);\n if (batched) {\n return batched;\n }\n return await this.joinFactsPatternPerBinding(input, pattern, filters, metrics, optional);\n }\n\n private async joinFactsPatternPerBinding(\n input: RdfBindingRow[],\n pattern: RdfQueryPattern,\n filters: RdfQueryFilter[],\n metrics: RdfQueryMetrics,\n optional: boolean,\n ): Promise<RdfBindingRow[]> {\n const output: RdfBindingRow[] = [];\n for (const binding of input) {\n const compiled = compilePatternForBinding(pattern, binding);\n if (!compiled) {\n if (optional) {\n output.push(binding);\n }\n continue;\n }\n const scan = isPgSqlScanCompatiblePattern(compiled)\n ? await this.scanNative(compiled)\n : await this.scanPostFilter(compiled);\n metrics.scannedRows += scan.metrics.matchedRows;\n metrics.indexChoices.push(scan.metrics.indexChoice);\n metrics.plan.push(...storagePlanMarkers(scan.metrics.queryPlan));\n const before = output.length;\n for (const value of scan.quads) {\n const next = bindQuadPattern(pattern, binding, value);\n if (next && matchesNewlyBoundFilters(next, binding, filters)) {\n output.push(next);\n }\n }\n if (optional && output.length === before) {\n output.push(binding);\n }\n }\n return output;\n }\n\n private async tryJoinFactsPatternByBoundTerm(\n input: RdfBindingRow[],\n pattern: RdfQueryPattern,\n filters: RdfQueryFilter[],\n metrics: RdfQueryMetrics,\n optional: boolean,\n ): Promise<RdfBindingRow[] | undefined> {\n const candidate = pgBoundTermBatchCandidate(input, pattern);\n if (!candidate) {\n return undefined;\n }\n\n const batchPattern = {\n ...pattern,\n [candidate.key]: { $in: candidate.terms },\n } satisfies RdfQueryPattern;\n const compiled = compilePatternForBinding(batchPattern, {});\n if (!compiled) {\n return undefined;\n }\n\n const scan = isPgSqlScanCompatiblePattern(compiled)\n ? await this.scanNative(compiled)\n : await this.scanPostFilter(compiled);\n metrics.scannedRows += scan.metrics.matchedRows;\n metrics.indexChoices.push(scan.metrics.indexChoice);\n metrics.plan.push(...storagePlanMarkers(scan.metrics.queryPlan));\n metrics.plan.push(`PostgresFactsBatchScan(?${candidate.variable}:${candidate.terms.length})`);\n\n const output: RdfBindingRow[] = [];\n const matchedBindings = new Set<RdfBindingRow>();\n for (const value of scan.quads) {\n const bucket = candidate.buckets.get(termToId(value[candidate.key] as any));\n if (!bucket) {\n continue;\n }\n for (const binding of bucket) {\n const next = bindQuadPattern(pattern, binding, value);\n if (next && matchesNewlyBoundFilters(next, binding, filters)) {\n output.push(next);\n matchedBindings.add(binding);\n }\n }\n }\n\n if (optional) {\n for (const bindings of candidate.buckets.values()) {\n for (const binding of bindings) {\n if (!matchedBindings.has(binding)) {\n output.push(binding);\n }\n }\n }\n }\n\n if (candidate.unbatched.length > 0) {\n output.push(...await this.joinFactsPatternPerBinding(candidate.unbatched, pattern, filters, metrics, optional));\n }\n\n return output;\n }\n\n private async joinFactsTextSearch(\n input: RdfBindingRow[],\n pattern: RdfTextSearchPattern,\n metrics: RdfQueryMetrics,\n ): Promise<RdfBindingRow[]> {\n metrics.indexChoices.push('text-chunk');\n const sourceVariable = pattern.source;\n if (sourceVariable && canUseBoundSourceSearch(input, pattern, sourceVariable)) {\n return await this.joinFactsTextSearchByBoundSource(input, pattern, sourceVariable, metrics);\n }\n if (sourceVariable && canUseGlobalSearchForBoundSources(input, pattern, sourceVariable)) {\n const results = await this.textSearchResults(pattern);\n this.appendTextSearchBackendPlan(metrics, results);\n metrics.scannedRows += results.length;\n metrics.plan.push(`PostgresFactsSearchBatchSource(TextSearch ?${sourceVariable}:${boundSearchSourceCount(input, sourceVariable)})`);\n return bindTextSearchResultsBySource(input, pattern, sourceVariable, results);\n }\n\n const results = await this.textSearchResults(pattern);\n this.appendTextSearchBackendPlan(metrics, results);\n metrics.scannedRows += results.length;\n\n const output: RdfBindingRow[] = [];\n for (const binding of input) {\n for (const result of results) {\n const next = bindTextSearchResult(binding, pattern, result);\n if (next) {\n output.push(next);\n }\n }\n }\n return output;\n }\n\n private async joinFactsVectorSearch(\n input: RdfBindingRow[],\n pattern: RdfVectorSearchPattern,\n metrics: RdfQueryMetrics,\n ): Promise<RdfBindingRow[]> {\n metrics.indexChoices.push('vector-chunk');\n const sourceVariable = pattern.source;\n if (sourceVariable && canUseBoundSourceSearch(input, pattern, sourceVariable)) {\n return await this.joinFactsVectorSearchByBoundSource(input, pattern, sourceVariable, metrics);\n }\n if (sourceVariable && canUseGlobalSearchForBoundSources(input, pattern, sourceVariable)) {\n const results = await this.vectorSearchResults(pattern);\n this.appendVectorSearchBackendPlan(metrics, results);\n metrics.scannedRows += results.length;\n metrics.plan.push(`PostgresFactsSearchBatchSource(VectorSearch ?${sourceVariable}:${boundSearchSourceCount(input, sourceVariable)})`);\n return bindVectorSearchResultsBySource(input, pattern, sourceVariable, results);\n }\n\n const results = await this.vectorSearchResults(pattern);\n this.appendVectorSearchBackendPlan(metrics, results);\n metrics.scannedRows += results.length;\n\n const output: RdfBindingRow[] = [];\n for (const binding of input) {\n for (const result of results) {\n const next = bindVectorSearchResult(binding, pattern, result);\n if (next) {\n output.push(next);\n }\n }\n }\n return output;\n }\n\n private async joinFactsTextSearchByBoundSource(\n input: RdfBindingRow[],\n pattern: RdfTextSearchPattern,\n sourceVariable: string,\n metrics: RdfQueryMetrics,\n ): Promise<RdfBindingRow[]> {\n const cache = new Map<string, RdfTextSearchResult[]>();\n const countedSources = new Set<string>();\n let globalResults: RdfTextSearchResult[] | undefined;\n let countedGlobal = false;\n const output: RdfBindingRow[] = [];\n\n for (const binding of input) {\n const term = binding[sourceVariable];\n let results: RdfTextSearchResult[];\n if (!term) {\n globalResults ??= await this.textSearchResults(pattern);\n results = globalResults;\n this.appendTextSearchBackendPlan(metrics, results);\n if (!countedGlobal) {\n metrics.scannedRows += results.length;\n countedGlobal = true;\n }\n } else if (term.termType !== 'NamedNode') {\n continue;\n } else {\n if (!cache.has(term.value)) {\n cache.set(term.value, await this.textSearchResults(pattern, term.value));\n }\n results = cache.get(term.value) ?? [];\n this.appendTextSearchBackendPlan(metrics, results);\n if (!countedSources.has(term.value)) {\n metrics.scannedRows += results.length;\n countedSources.add(term.value);\n }\n }\n\n for (const result of results) {\n const next = bindTextSearchResult(binding, pattern, result);\n if (next) {\n output.push(next);\n }\n }\n }\n\n return output;\n }\n\n private async joinFactsVectorSearchByBoundSource(\n input: RdfBindingRow[],\n pattern: RdfVectorSearchPattern,\n sourceVariable: string,\n metrics: RdfQueryMetrics,\n ): Promise<RdfBindingRow[]> {\n const cache = new Map<string, RdfVectorSearchResult[]>();\n const countedSources = new Set<string>();\n let globalResults: RdfVectorSearchResult[] | undefined;\n let countedGlobal = false;\n const output: RdfBindingRow[] = [];\n\n for (const binding of input) {\n const term = binding[sourceVariable];\n let results: RdfVectorSearchResult[];\n if (!term) {\n globalResults ??= await this.vectorSearchResults(pattern);\n results = globalResults;\n this.appendVectorSearchBackendPlan(metrics, results);\n if (!countedGlobal) {\n metrics.scannedRows += results.length;\n countedGlobal = true;\n }\n } else if (term.termType !== 'NamedNode') {\n continue;\n } else {\n if (!cache.has(term.value)) {\n cache.set(term.value, await this.vectorSearchResults(pattern, term.value));\n }\n results = cache.get(term.value) ?? [];\n this.appendVectorSearchBackendPlan(metrics, results);\n if (!countedSources.has(term.value)) {\n metrics.scannedRows += results.length;\n countedSources.add(term.value);\n }\n }\n\n for (const result of results) {\n const next = bindVectorSearchResult(binding, pattern, result);\n if (next) {\n output.push(next);\n }\n }\n }\n\n return output;\n }\n\n private async textSearchResults(pattern: RdfTextSearchPattern, exactSource?: string): Promise<RdfTextSearchResult[]> {\n return await this.requireTextIndex().search(textSearchOptions(pattern, exactSource));\n }\n\n private appendTextSearchBackendPlan(metrics: RdfQueryMetrics, results: readonly RdfTextSearchResult[]): void {\n if (!results.some((result) => result.scoreComponents?.algorithm === 'pg-ts-rank-cd')) {\n return;\n }\n pushUniquePlan(metrics.plan, 'PostgresNativeFts(TextSearch pg-ts-rank-cd)');\n pushUniquePlan(metrics.plan, 'PostgresNativeFtsGin(TextSearch)');\n pushUniquePlan(metrics.plan, 'PostgresNativeFtsRank(ts_rank_cd)');\n }\n\n private appendVectorSearchBackendPlan(metrics: RdfQueryMetrics, results: readonly RdfVectorSearchResult[]): void {\n if (!results.some((result) => result.scoreComponents?.backend === 'pg-vector')) {\n return;\n }\n pushUniquePlan(metrics.plan, 'PostgresNativeVector(VectorSearch pgvector)');\n pushUniquePlan(metrics.plan, 'PostgresNativeVectorHnsw(VectorSearch)');\n pushUniquePlan(metrics.plan, 'PostgresNativeVectorRank(pgvector)');\n }\n\n private async vectorSearchResults(pattern: RdfVectorSearchPattern, exactSource?: string): Promise<RdfVectorSearchResult[]> {\n return await this.requireVectorIndex().search(vectorSearchOptions(pattern, exactSource));\n }\n\n private async joinFactsOptionalGroup(\n input: RdfBindingRow[],\n optionalGroup: RdfOptionalQueryGroup,\n metrics: RdfQueryMetrics,\n ): Promise<RdfBindingRow[]> {\n const filters = optionalGroup.filters ?? [];\n const output: RdfBindingRow[] = [];\n for (const binding of input) {\n let matches: RdfBindingRow[] = [binding];\n matches = this.applyFactsValues(matches, optionalGroup.values, metrics, 'Optional');\n if (matches.length > 0) {\n for (const pattern of optionalGroup.patterns) {\n matches = await this.joinFactsPattern(matches, pattern, filters, metrics, false);\n if (matches.length === 0) {\n break;\n }\n }\n }\n if (matches.length > 0) {\n for (const unionGroup of optionalGroup.unions ?? []) {\n matches = await this.joinFactsUnionGroup(matches, unionGroup.branches, filters, metrics);\n metrics.plan.push(`PostgresFactsOptionalUnion(${unionGroup.branches.map((branch) => branch.patterns.map(describeQueryPattern).join(',')).join('|')})`);\n if (matches.length === 0) {\n break;\n }\n }\n }\n if (matches.length > 0) {\n for (const rawNestedOptional of optionalGroup.optional ?? []) {\n matches = await this.joinFactsOptionalGroup(matches, normalizeOptionalGroup(rawNestedOptional), metrics);\n if (matches.length === 0) {\n break;\n }\n }\n }\n if (matches.length > 0) {\n for (const minusGroup of optionalGroup.minus ?? []) {\n matches = await this.applyFactsMinusGroup(matches, minusGroup, metrics);\n if (matches.length === 0) {\n break;\n }\n }\n }\n if (matches.length > 0) {\n for (const existsGroup of optionalGroup.exists ?? []) {\n matches = await this.applyFactsExistsGroup(matches, existsGroup, metrics);\n if (matches.length === 0) {\n break;\n }\n }\n }\n if ((optionalGroup.binds?.length ?? 0) > 0 && matches.length > 0) {\n matches = this.applyFactsBinds(matches, optionalGroup.binds ?? []);\n metrics.plan.push(`PostgresFactsOptionalBind(${(optionalGroup.binds ?? []).map(describeBind).join(',')})`);\n }\n if (filters.length > 0 && matches.length > 0) {\n matches = matches.filter((match) => matchesBindingFilters(match, filters));\n metrics.filtersApplied += filters.length;\n metrics.plan.push(`PostgresFactsOptionalFilter(${filters.map(describeFilter).join(',')})`);\n }\n output.push(...(matches.length > 0 ? matches : [binding]));\n }\n return output;\n }\n\n private async joinFactsUnionGroup(\n input: RdfBindingRow[],\n branches: RdfUnionQueryBranch[],\n outerFilters: RdfQueryFilter[],\n metrics: RdfQueryMetrics,\n ): Promise<RdfBindingRow[]> {\n const output: RdfBindingRow[] = [];\n for (const binding of input) {\n for (const branch of branches) {\n const branchFilters = [...outerFilters, ...(branch.filters ?? [])];\n let matches: RdfBindingRow[] = [binding];\n matches = this.applyFactsValues(matches, branch.values, metrics, 'Union');\n if (matches.length === 0) {\n continue;\n }\n for (const pattern of branch.patterns) {\n matches = await this.joinFactsPattern(matches, pattern, branchFilters, metrics, false);\n if (matches.length === 0) {\n break;\n }\n }\n if (matches.length === 0) {\n continue;\n }\n for (const unionGroup of branch.unions ?? []) {\n matches = await this.joinFactsUnionGroup(matches, unionGroup.branches, branchFilters, metrics);\n if (matches.length === 0) {\n break;\n }\n }\n if (matches.length === 0) {\n continue;\n }\n if ((branch.binds?.length ?? 0) > 0) {\n matches = this.applyFactsBinds(matches, branch.binds ?? []);\n }\n for (const rawOptionalGroup of branch.optional ?? []) {\n matches = await this.joinFactsOptionalGroup(matches, normalizeOptionalGroup(rawOptionalGroup), metrics);\n if (matches.length === 0) {\n break;\n }\n }\n if ((branch.filters?.length ?? 0) > 0) {\n matches = matches.filter((match) => matchesBindingFilters(match, branch.filters ?? []));\n metrics.filtersApplied += branch.filters?.length ?? 0;\n metrics.plan.push(`PostgresFactsUnionFilter(${(branch.filters ?? []).map(describeFilter).join(',')})`);\n }\n output.push(...matches);\n }\n }\n return output;\n }\n\n private async applyFactsMinusGroup(\n input: RdfBindingRow[],\n minusGroup: RdfMinusQueryGroup,\n metrics: RdfQueryMetrics,\n ): Promise<RdfBindingRow[]> {\n const output: RdfBindingRow[] = [];\n for (const binding of input) {\n let matches = await this.evaluateFactsDependentGroup([binding], minusGroup, metrics, 'Minus');\n if ((minusGroup.filters?.length ?? 0) > 0) {\n matches = matches.filter((match) => matchesBindingFilters(match, minusGroup.filters ?? []));\n metrics.filtersApplied += minusGroup.filters?.length ?? 0;\n }\n if (matches.length === 0) {\n output.push(binding);\n }\n }\n return output;\n }\n\n private async applyFactsExistsGroup(\n input: RdfBindingRow[],\n existsGroup: RdfExistsQueryGroup,\n metrics: RdfQueryMetrics,\n ): Promise<RdfBindingRow[]> {\n const output: RdfBindingRow[] = [];\n for (const binding of input) {\n let matches = await this.evaluateFactsDependentGroup([binding], existsGroup, metrics, 'Exists');\n if ((existsGroup.filters?.length ?? 0) > 0) {\n matches = matches.filter((match) => matchesBindingFilters(match, existsGroup.filters ?? []));\n metrics.filtersApplied += existsGroup.filters?.length ?? 0;\n }\n if (matches.length > 0) {\n output.push(binding);\n }\n }\n return output;\n }\n\n private async evaluateFactsDependentGroup(\n input: RdfBindingRow[],\n group: RdfMinusQueryGroup | RdfExistsQueryGroup,\n metrics: RdfQueryMetrics,\n label: 'Minus' | 'Exists',\n ): Promise<RdfBindingRow[]> {\n let matches = this.applyFactsValues(input, group.values, metrics, label);\n for (const pattern of group.patterns) {\n matches = await this.joinFactsPattern(matches, pattern, group.filters ?? [], metrics, false);\n if (matches.length === 0) {\n return [];\n }\n }\n for (const unionGroup of group.unions ?? []) {\n matches = await this.joinFactsUnionGroup(matches, unionGroup.branches, group.filters ?? [], metrics);\n if (matches.length === 0) {\n return [];\n }\n }\n for (const rawOptionalGroup of group.optional ?? []) {\n matches = await this.joinFactsOptionalGroup(matches, normalizeOptionalGroup(rawOptionalGroup), metrics);\n }\n if ((group.binds?.length ?? 0) > 0) {\n matches = this.applyFactsBinds(matches, group.binds ?? []);\n }\n return matches;\n }\n\n private applyFactsValues(\n input: RdfBindingRow[],\n sources: RdfValuesBindingSource[] | undefined,\n metrics: RdfQueryMetrics,\n label: 'Optional' | 'Union' | 'Minus' | 'Exists',\n ): RdfBindingRow[] {\n let output = input;\n for (const source of sources ?? []) {\n output = joinValuesSource(output, source);\n metrics.scannedRows += source.rows.length;\n metrics.plan.push(`PostgresFacts${label}Values(${source.variables.map((variableName) => `?${variableName}`).join(',')})`);\n if (output.length === 0) {\n break;\n }\n }\n return output;\n }\n\n private applyFactsBinds(input: RdfBindingRow[], binds: RdfQueryBind[]): RdfBindingRow[] {\n let output = input;\n for (const bind of binds) {\n output = output.flatMap((binding) => {\n if (binding[bind.variable]) {\n return [];\n }\n const value = evaluateBindExpression(bind.expression, binding);\n return value ? [{ ...binding, [bind.variable]: value }] : [binding];\n });\n }\n return output;\n }\n\n private async queryRdf3xAggregate(\n query: RdfQuery,\n template: PgQueryTemplateResolution,\n patterns: PgCompiledJoinPattern[],\n aggregates: ReturnType<typeof queryAggregates>,\n values: PgCompiledValuesSource[],\n start: number,\n ): Promise<RdfQueryResult | undefined> {\n if (!this.canRdf3xAggregate(query, aggregates)) {\n return undefined;\n }\n const nativeCount = await this.tryQueryPgCustomIndexCount(query, patterns, aggregates, values, start);\n if (nativeCount) {\n return nativeCount;\n }\n const nativeBgpCount = await this.tryQueryPgCustomIndexBgpCount(query, patterns, aggregates, values, start);\n if (nativeBgpCount) {\n return nativeBgpCount;\n }\n const nativeBgpGroupCount = await this.tryQueryPgCustomIndexBgpGroupCount(query, patterns, aggregates, values, start);\n if (nativeBgpGroupCount) {\n return nativeBgpGroupCount;\n }\n const nativeBgpNumericAggregate = await this.tryQueryPgCustomIndexBgpNumericAggregate(query, patterns, aggregates, values, start);\n if (nativeBgpNumericAggregate) {\n return nativeBgpNumericAggregate;\n }\n const visibleVariables = uniqueStrings(query.patterns.flatMap((pattern) => variablesInPattern(pattern)));\n const joinOptions = {\n template,\n project: visibleVariables,\n countMatchedRows: false,\n values,\n fenceGraphPrefix: aggregates.some((aggregate) => aggregate.distinct || (aggregate.distinctVariables ?? []).length > 0),\n };\n const compiled = await this.compileJoinSql(patterns, joinOptions);\n if (compiled.unresolved) {\n return {\n bindings: [],\n count: 0,\n metrics: this.localMetrics(start, 0, 0, 0, [compiled.indexChoice], [\n ...compiled.queryPlan,\n `unresolved ${compiled.unresolved}`,\n ], query.filters?.length ?? 0),\n };\n }\n const factsCutover = this.numericAggregateFactsCutoverDecision(query, aggregates, compiled);\n if (factsCutover) {\n return this.queryFacts(query, {\n start,\n planPrefix: [\n `PostgresNumericAggregateFactsCutover(minSourceRows=${factsCutover.minSourceRows},maxSourceRows=${factsCutover.maxSourceRows},threshold=${factsCutover.threshold})`,\n ],\n });\n }\n const aggregateAliases = new Map<string, string>();\n const aggregateTypes = new Map<string, 'integer' | 'decimal'>();\n const numericJoins = new Map<string, string>();\n const numericJoinSql: string[] = [];\n const aggregateColumns = aggregates.map((aggregate, index) => this.compileAggregateColumn(\n aggregate,\n index,\n compiled.variableAliases,\n aggregateAliases,\n aggregateTypes,\n numericJoins,\n numericJoinSql,\n ));\n const groupColumns = (query.groupBy ?? []).map((variableName) => {\n const alias = compiled.variableAliases.get(variableName);\n if (!alias) {\n throw new Error(`Postgres RDF-3X group aggregate cannot read unbound variable: ${variableName}`);\n }\n return { variableName, alias, column: `source.${alias}` };\n });\n const projection = [\n ...groupColumns.map((group) => `${group.column} AS ${group.alias}`),\n ...aggregateColumns.map((aggregate) => aggregate.sql),\n ].filter(Boolean).join(', ');\n const aggregateFrom = `(${compiled.sql}) source${numericJoinSql.join('')}`;\n let sql = `SELECT ${projection} FROM ${aggregateFrom}`;\n if (groupColumns.length > 0) {\n sql += ` GROUP BY ${groupColumns.map((group) => group.column).join(', ')}`;\n }\n const builder = new PgSqlBuilder(compiled.params);\n const havingClause = this.buildAggregateHavingClause(query.having ?? [], aggregateColumns, builder);\n sql += havingClause.sql;\n sql += this.buildAggregateOrderClause(query.orderBy ?? [], compiled.variableAliases, aggregateColumns);\n const pagination = this.buildPagination(query, builder);\n sql += pagination.sql;\n const params = builder.snapshot();\n const rows = await this.requireExecutor().query<Record<string, number>>(sql, params);\n const matchedRows = groupColumns.length > 0\n ? await this.scalarCount(\n `SELECT COUNT(*) AS count FROM (\n SELECT ${groupColumns.map((group) => group.column).join(', ')}\n FROM ${aggregateFrom}\n GROUP BY ${groupColumns.map((group) => group.column).join(', ')}\n ${havingClause.sql}\n ) grouped_count`,\n builder.snapshot().slice(0, builder.snapshot().length - pagination.paramCount),\n )\n : rows.length;\n const bindings = await this.joinRowsToBindings(rows, new Map(groupColumns.map((group) => [group.variableName, group.alias])), aggregateAliases, aggregateTypes);\n const firstCount = !groupColumns.length && aggregates[0] ? Number(bindings[0]?.[aggregates[0].as]?.value ?? 0) : undefined;\n const aggregateMarker = this.postgresRdf3xAggregateMarker(aggregates, groupColumns.length > 0);\n const plan = [\n ...storagePlanMarkers(compiled.queryPlan),\n ...this.pgAccelerationActiveMarkersForQuery(query),\n aggregateMarker,\n aggregatePlan(aggregates, groupColumns.length > 0),\n ...(havingClause.sql ? [`PostgresRdf3xAggregateHaving(${(query.having ?? []).map(describeFilter).join(',')})`] : []),\n ...((query.orderBy ?? []).length > 0 ? [`PostgresRdf3xAggregateOrder(${describeQueryOrder(query.orderBy ?? [])})`] : []),\n ...(pagination.sql ? ['PostgresRdf3xAggregateLimit'] : []),\n ];\n return {\n bindings,\n ...(firstCount !== undefined ? { count: firstCount } : {}),\n metrics: this.localMetrics(\n start,\n matchedRows,\n matchedRows,\n bindings.length,\n [compiled.indexChoice],\n plan,\n query.filters?.length ?? 0,\n ),\n };\n }\n\n private numericAggregateFactsCutoverDecision(\n query: RdfQuery,\n aggregates: ReturnType<typeof queryAggregates>,\n compiled: PgCompiledJoin,\n ): PgNumericAggregateFactsCutoverDecision | undefined {\n if (\n (query.groupBy?.length ?? 0) === 0\n || !aggregates.some((aggregate) => aggregate.type !== 'count')\n ) {\n return undefined;\n }\n const threshold = this.numericAggregateFactsCutoverMaxSourceRows();\n if (threshold <= 0 || compiled.sourceEstimates.length === 0) {\n return undefined;\n }\n if (compiled.sourceEstimates.some((source) => source.hasGraphPrefixFanout)) {\n return undefined;\n }\n const estimates = compiled.sourceEstimates.map((source) => source.estimateRows);\n const minSourceRows = Math.min(...estimates);\n const maxSourceRows = Math.max(...estimates);\n return maxSourceRows <= threshold\n ? { minSourceRows, maxSourceRows, threshold }\n : undefined;\n }\n\n private numericAggregateFactsCutoverMaxSourceRows(): number {\n return Math.max(\n 0,\n this.pgOptions.numericAggregateFactsCutoverMaxSourceRows\n ?? DEFAULT_NUMERIC_AGGREGATE_FACTS_CUTOVER_MAX_SOURCE_ROWS,\n );\n }\n\n private async tryQueryPgCustomIndexCount(\n query: RdfQuery,\n patterns: PgCompiledJoinPattern[],\n aggregates: ReturnType<typeof queryAggregates>,\n values: PgCompiledValuesSource[],\n start: number,\n ): Promise<RdfQueryResult | undefined> {\n const capability = 'index.xpod_rdf_perm.count_any';\n if (!this.canUsePgAccelerationCapability(capability)) {\n return undefined;\n }\n if (\n query.patterns.length !== 1\n || patterns.length !== 1\n || values.length > 0\n || aggregates.length !== 1\n || (query.groupBy ?? []).length > 0\n || (query.having ?? []).length > 0\n || (query.orderBy ?? []).length > 0\n || query.distinct\n || query.limit !== undefined\n || query.offset !== undefined\n ) {\n return undefined;\n }\n\n const aggregate = aggregates[0];\n if (\n aggregate.type !== 'count'\n || aggregate.distinct\n || (aggregate.distinctVariables ?? []).length > 0\n || (query.select ?? [aggregate.as]).some((variableName) => variableName !== aggregate.as)\n ) {\n return undefined;\n }\n const visibleVariables = uniqueStrings(query.patterns.flatMap((pattern) => variablesInPattern(pattern)));\n if (aggregate.variable && !visibleVariables.includes(aggregate.variable)) {\n return undefined;\n }\n\n const [pattern] = patterns;\n if (pattern.equalities.length > 0) {\n return undefined;\n }\n const resolved = await this.resolvePattern(pattern.pattern);\n const customResolved = await this.resolvePgCustomIndexGraphPrefix(resolved);\n if (!customResolved || !this.canUsePgCustomIndexResolvedPattern(customResolved)) {\n return undefined;\n }\n if (customResolved.graphPrefix !== undefined) {\n return undefined;\n }\n\n const permutation = this.choosePermutation(customResolved);\n const count = await this.pgCustomIndexCountAny(customResolved, permutation);\n if (count === undefined) {\n return undefined;\n }\n return this.pgCustomIndexCountResult(query, aggregate, count, permutation, capability, start);\n }\n\n private async pgCustomIndexCountAny(resolved: PgResolvedPattern, permutation: PgPermutation): Promise<number | undefined> {\n const capability = 'index.xpod_rdf_perm.count_any';\n const customResolved = await this.resolvePgCustomIndexGraphPrefix(resolved);\n if (!customResolved || !this.canUsePgAccelerationCapability(capability) || !this.canUsePgCustomIndexResolvedPattern(customResolved)) {\n return undefined;\n }\n if (customResolved.graphPrefix !== undefined) {\n return undefined;\n }\n\n const fullFilters = this.pgCustomIndexFullFilters(customResolved);\n if (fullFilters.some((filter) => filter?.length === 0)) {\n return 0;\n }\n const prefixFilters = this.pgCustomIndexPrefixFilters(customResolved, permutation);\n if (prefixFilters.every((filter) => filter === null)) {\n return undefined;\n }\n if (prefixFilters.some((filter) => filter?.length === 0)) {\n return 0;\n }\n\n const rows = await this.requireExecutor().query<{ count: number }>(`\n SELECT xpod_rdf.perm_index_count_any(\n $1::regclass,\n $2::regclass,\n $3::bigint[],\n $4::bigint[],\n $5::bigint[],\n $6::bigint[],\n $7::bigint[],\n $8::bigint[],\n $9::bigint[],\n $10::bigint[]\n ) AS count\n `, [\n RDF_FACTS_TABLE,\n pgCustomPermutationIndexName(permutation),\n ...prefixFilters,\n ...fullFilters,\n ]);\n return pgInteger(rows[0]?.count) ?? 0;\n }\n\n private pgCustomIndexCountResult(\n query: RdfQuery,\n aggregate: RdfQueryAggregate,\n count: number,\n permutation: PgPermutation,\n capability: string,\n start: number,\n ): RdfQueryResult {\n return {\n bindings: [\n {\n [aggregate.as]: DataFactory.literal(String(count), DataFactory.namedNode(XSD_INTEGER)) as Term,\n },\n ],\n count,\n metrics: this.localMetrics(\n start,\n count,\n count,\n 1,\n [permutation.name],\n [\n ...this.pgAccelerationActiveMarkersForQuery(query),\n `XpodRdfExtensionOperator(${capability})`,\n `PostgresRdfNativeCustomIndexCountAny(${permutation.name})`,\n aggregatePlan([aggregate], false),\n ],\n query.filters?.length ?? 0,\n ),\n };\n }\n\n private async tryQueryPgCustomIndexBgpCount(\n query: RdfQuery,\n patterns: PgCompiledJoinPattern[],\n aggregates: ReturnType<typeof queryAggregates>,\n values: PgCompiledValuesSource[],\n start: number,\n ): Promise<RdfQueryResult | undefined> {\n if (\n query.patterns.length < 2\n || query.patterns.length > 8\n || patterns.length !== query.patterns.length\n || aggregates.length === 0\n || aggregates.length > 8\n || query.distinct\n || (query.groupBy ?? []).length > 0\n || (query.having ?? []).length > 0\n || (query.orderBy ?? []).length > 0\n || query.limit !== undefined\n || query.offset !== undefined\n ) {\n return undefined;\n }\n\n const subjectStarKey = rdfSubjectStarJoinKey(patterns);\n const capability = subjectStarKey && this.canUsePgAccelerationCapability('aggregate.subject_star_count')\n ? 'aggregate.subject_star_count'\n : 'aggregate.bgp_count';\n if (\n !subjectStarKey\n || !this.canUsePgAccelerationCapability('aggregate.subject_star_count')\n || aggregates.some((aggregate) => aggregate.distinct || (aggregate.distinctVariables ?? []).length > 0)\n ) {\n return undefined;\n }\n\n const aggregateAliases = new Map<string, string>();\n const aggregateTypes = new Map<string, 'integer' | 'decimal'>();\n const shape = await this.pgCustomIndexBgpJoinShape(patterns, []);\n if (!shape) {\n return undefined;\n }\n const valuesShape = this.pgCustomIndexValuesShape(values, shape.variableSlotsByName);\n const filtersShape = this.pgCustomIndexSlotFiltersShape(shape.internalFilters, shape.variableSlotsByName);\n if (!valuesShape || !filtersShape) {\n return undefined;\n }\n if (values.length > 0 && !this.canUsePgAccelerationCapability('join.values.native')) {\n return undefined;\n }\n if (shape.internalFilters.length > 0 && !this.canUsePgAccelerationCapability('join.slot_filter.native')) {\n return undefined;\n }\n if (shape.internalFilters.length > 0) {\n return undefined;\n }\n\n const aggregateSlots: number[] = [];\n const aggregateDistinct: number[] = [];\n for (const [index, aggregate] of aggregates.entries()) {\n if (aggregate.type !== 'count') {\n return undefined;\n }\n const slot = this.pgCustomIndexBgpCountAggregateSlot(aggregate, shape.variableSlotsByName);\n if (slot === undefined) {\n return undefined;\n }\n aggregateSlots.push(slot);\n aggregateDistinct.push(aggregate.distinct ? 1 : 0);\n aggregateAliases.set(aggregate.as, `a${index}`);\n aggregateTypes.set(aggregate.as, 'integer');\n }\n if ((query.select ?? []).some((variableName) => !aggregateAliases.has(variableName))) {\n return undefined;\n }\n\n const indexPlaceholders = shape.indexNames.map((_, index) => `$${index + 2}::regclass::oid`).join(', ');\n const constantsParam = 2 + shape.indexNames.length;\n const variableSlotsParam = constantsParam + 1;\n const valueSlotsParam = variableSlotsParam + 1;\n const valueRowsParam = valueSlotsParam + 1;\n const filterSlotsParam = valueRowsParam + 1;\n const filterOffsetsParam = filterSlotsParam + 1;\n const filterValuesParam = filterOffsetsParam + 1;\n const aggregateSlotsParam = shape.internalFilters.length > 0 ? filterValuesParam + 1 : valueRowsParam + 1;\n const aggregateDistinctParam = aggregateSlotsParam + 1;\n const filterArguments = shape.internalFilters.length > 0\n ? `,\n $${filterSlotsParam}::smallint[],\n $${filterOffsetsParam}::bigint[],\n $${filterValuesParam}::bigint[]`\n : '';\n const projection = aggregates.map((_aggregate, index) => `native_count.count${index + 1} AS a${index}`).join(', ');\n const sql = `\n SELECT ${projection}\n FROM xpod_rdf.bgp_count(\n $1::regclass,\n ARRAY[${indexPlaceholders}]::oid[],\n $${constantsParam}::bigint[],\n $${variableSlotsParam}::smallint[],\n $${valueSlotsParam}::smallint[],\n $${valueRowsParam}::bigint[]${filterArguments},\n $${aggregateSlotsParam}::smallint[],\n $${aggregateDistinctParam}::smallint[]\n ) native_count\n `;\n const rows = await this.requireExecutor().query<Record<string, number>>(sql, [\n RDF_FACTS_TABLE,\n ...shape.indexNames,\n shape.constants,\n shape.variableSlots,\n valuesShape.valueSlots,\n valuesShape.valueRows,\n ...(shape.internalFilters.length > 0 ? [filtersShape.filterSlots, filtersShape.filterOffsets, filtersShape.filterValues] : []),\n aggregateSlots,\n aggregateDistinct,\n ]);\n const bindings = await this.joinRowsToBindings(rows, new Map(), aggregateAliases, aggregateTypes);\n const firstCount = pgInteger(rows[0]?.a0) ?? 0;\n return {\n bindings,\n count: firstCount,\n metrics: this.localMetrics(\n start,\n firstCount,\n firstCount,\n bindings.length,\n [`PostgresNativeBgpCount(${shape.indexChoices.join('>')})`],\n [\n ...this.pgAccelerationActiveMarkersForQuery(query),\n `XpodRdfExtensionOperator(${capability})`,\n ...(values.length > 0 ? ['XpodRdfExtensionOperator(join.values.native)'] : []),\n ...(shape.internalFilters.length > 0 ? ['XpodRdfExtensionOperator(join.slot_filter.native)'] : []),\n ...(capability === 'aggregate.subject_star_count' ? [`PostgresRdfNativeCustomIndexSubjectStarCount(${subjectStarKey};patterns:${patterns.length})`] : []),\n `PostgresRdfNativeCustomIndexBgpCount(${patterns.length})`,\n ...rdfSubjectStarJoinPlanMarker('PostgresRdf3xSubjectStarJoin', patterns),\n `PostgresRdf3xJoinCount(${patterns.map((entry) => describePatternSource(entry)).join('|')})`,\n ...this.pgCustomIndexInternalFiltersPlan(shape),\n aggregatePlan(aggregates, false),\n sql,\n ],\n query.filters?.length ?? 0,\n ),\n };\n }\n\n private pgCustomIndexBgpCountAggregateSlot(\n aggregate: RdfQueryAggregate,\n variableSlotsByName: Map<string, number>,\n ): number | undefined {\n if (aggregate.variable) {\n if ((aggregate.distinctVariables ?? []).length > 0) {\n return undefined;\n }\n return variableSlotsByName.get(aggregate.variable);\n }\n if (!aggregate.distinct) {\n return -1;\n }\n const distinctVariables = aggregate.distinctVariables ?? [];\n if (distinctVariables.length !== 1) {\n return undefined;\n }\n return variableSlotsByName.get(distinctVariables[0]);\n }\n\n private async tryQueryPgCustomIndexBgpGroupCount(\n query: RdfQuery,\n patterns: PgCompiledJoinPattern[],\n aggregates: ReturnType<typeof queryAggregates>,\n values: PgCompiledValuesSource[],\n start: number,\n ): Promise<RdfQueryResult | undefined> {\n const capability = 'aggregate.bgp_group_count';\n if (!this.canUsePgAccelerationCapability(capability)) {\n return undefined;\n }\n return undefined;\n }\n\n private async tryQueryPgCustomIndexBgpNumericAggregate(\n query: RdfQuery,\n patterns: PgCompiledJoinPattern[],\n aggregates: ReturnType<typeof queryAggregates>,\n values: PgCompiledValuesSource[],\n start: number,\n ): Promise<RdfQueryResult | undefined> {\n const capability = 'aggregate.bgp_numeric';\n if (!this.canUsePgAccelerationCapability(capability)) {\n return undefined;\n }\n if (values.length > 0) {\n return undefined;\n }\n if (\n query.patterns.length < 1\n || query.patterns.length > 8\n || patterns.length !== query.patterns.length\n || aggregates.length === 0\n || query.distinct\n || (query.groupBy ?? []).length > 8\n ) {\n return undefined;\n }\n if (values.length > 0 && !this.canUsePgAccelerationCapability('join.values.native')) {\n return undefined;\n }\n\n const numericAggregates = aggregates.filter((aggregate) => aggregate.type !== 'count');\n if (numericAggregates.length === 0) {\n return undefined;\n }\n const numericVariable = numericAggregates[0]?.variable;\n if (!numericVariable) {\n return undefined;\n }\n if (numericAggregates.some((aggregate) => (\n aggregate.variable !== numericVariable\n || aggregate.distinct\n || aggregate.distinctVariables !== undefined\n ))) {\n return undefined;\n }\n if (aggregates.some((aggregate) => (\n aggregate.type === 'count'\n && (aggregate.distinct || (aggregate.distinctVariables ?? []).length > 0)\n ))) {\n return undefined;\n }\n\n const subjectStarKey = rdfSubjectStarJoinKey(patterns);\n const groupBy = query.groupBy ?? [];\n const aggregateNames = new Set(aggregates.map((aggregate) => aggregate.as));\n if ((query.select ?? []).some((variableName) => !aggregateNames.has(variableName) && !groupBy.includes(variableName))) {\n return undefined;\n }\n\n const shape = await this.pgCustomIndexBgpJoinShape(patterns, groupBy, {\n allowedTermFilter: (pattern, key, filter) => (\n pattern.variables[key] === numericVariable && isOnlyNumericTermFilter(filter)\n ),\n });\n if (!shape) {\n return undefined;\n }\n const numericSlot = shape.variableSlotsByName.get(numericVariable);\n if (numericSlot === undefined) {\n return undefined;\n }\n if (values.length > 0 && !this.canUsePgAccelerationCapability('join.values.native')) {\n return undefined;\n }\n if (shape.internalFilters.length > 0 && !this.canUsePgAccelerationCapability('join.slot_filter.native')) {\n return undefined;\n }\n const valuesShape = this.pgCustomIndexValuesShape(values, shape.variableSlotsByName);\n const filtersShape = this.pgCustomIndexSlotFiltersShape(shape.internalFilters, shape.variableSlotsByName);\n if (!valuesShape || !filtersShape) {\n return undefined;\n }\n const groupSlots = groupBy.map((variableName) => shape.variableSlotsByName.get(variableName));\n if (groupSlots.some((slot) => slot === undefined)) {\n return undefined;\n }\n\n const aggregateAliases = new Map<string, string>();\n const aggregateTypes = new Map<string, 'integer' | 'decimal'>();\n for (const [index, aggregate] of aggregates.entries()) {\n aggregateAliases.set(aggregate.as, `a${index}`);\n aggregateTypes.set(aggregate.as, aggregate.type === 'count' ? 'integer' : 'decimal');\n }\n\n const indexPlaceholders = shape.indexNames.map((_, index) => `$${index + 2}::regclass::oid`).join(', ');\n const constantsParam = 2 + shape.indexNames.length;\n const variableSlotsParam = constantsParam + 1;\n const valueSlotsParam = variableSlotsParam + 1;\n const valueRowsParam = valueSlotsParam + 1;\n const filterSlotsParam = valueRowsParam + 1;\n const filterOffsetsParam = filterSlotsParam + 1;\n const filterValuesParam = filterOffsetsParam + 1;\n const groupSlotsParam = shape.internalFilters.length > 0 ? filterValuesParam + 1 : valueRowsParam + 1;\n const numericSlotParam = groupSlotsParam + 1;\n const numericDistinctParam = numericSlotParam + 1;\n const filterArguments = shape.internalFilters.length > 0\n ? `,\n $${filterSlotsParam}::smallint[],\n $${filterOffsetsParam}::bigint[],\n $${filterValuesParam}::bigint[]`\n : '';\n const groupProjection = groupBy.map((_variableName, index) => `native_numeric.group${index + 1} AS v${index}`);\n const aggregateProjection = aggregates.map((aggregate, index) => (\n `native_numeric.${this.pgCustomIndexNumericAggregateColumn(aggregate)} AS a${index}`\n ));\n const sql = `\n SELECT ${[...groupProjection, ...aggregateProjection, 'native_numeric.value_count'].join(', ')}\n FROM xpod_rdf.bgp_numeric_aggregate(\n $1::regclass,\n ARRAY[${indexPlaceholders}]::oid[],\n $${constantsParam}::bigint[],\n $${variableSlotsParam}::smallint[],\n $${valueSlotsParam}::smallint[],\n $${valueRowsParam}::bigint[]${filterArguments},\n $${groupSlotsParam}::smallint[],\n $${numericSlotParam}::smallint,\n $${numericDistinctParam}::smallint\n ) native_numeric\n `;\n const rows = await this.requireExecutor().query<Record<string, unknown>>(sql, [\n RDF_FACTS_TABLE,\n ...shape.indexNames,\n shape.constants,\n shape.variableSlots,\n valuesShape.valueSlots,\n valuesShape.valueRows,\n ...(shape.internalFilters.length > 0 ? [filtersShape.filterSlots, filtersShape.filterOffsets, filtersShape.filterValues] : []),\n groupSlots as number[],\n numericSlot,\n 0,\n ]);\n let bindings = await this.joinRowsToBindings(\n rows,\n new Map(groupBy.map((variableName, index) => [variableName, `v${index}`])),\n aggregateAliases,\n aggregateTypes,\n );\n if ((query.having ?? []).length > 0) {\n bindings = bindings.filter((binding) => matchesBindingFilters(binding, query.having ?? []));\n }\n if ((query.orderBy ?? []).length > 0) {\n bindings = orderBindingsForQuery(bindings, query.orderBy ?? []);\n }\n const offset = Math.max(0, query.offset ?? 0);\n const pagedBindings = bindings.slice(offset, query.limit === undefined ? undefined : offset + Math.max(0, query.limit));\n const matchedRows = rows.reduce((total, row) => total + (pgInteger(row.value_count) ?? 0), 0);\n const firstCount = aggregates[0]?.type === 'count' ? pgInteger(rows[0]?.a0) ?? 0 : undefined;\n return {\n bindings: pagedBindings,\n ...(firstCount !== undefined ? { count: firstCount } : {}),\n metrics: this.localMetrics(\n start,\n matchedRows,\n matchedRows,\n pagedBindings.length,\n [`PostgresNativeBgpNumericAggregate(${shape.indexChoices.join('>')})`],\n [\n ...this.pgAccelerationActiveMarkersForQuery(query),\n `XpodRdfExtensionOperator(${capability})`,\n ...(values.length > 0 ? ['XpodRdfExtensionOperator(join.values.native)'] : []),\n ...(shape.internalFilters.length > 0 ? ['XpodRdfExtensionOperator(join.slot_filter.native)'] : []),\n ...(subjectStarKey ? [`PostgresRdfNativeCustomIndexSubjectStarNumericAggregate(${subjectStarKey};patterns:${patterns.length})`] : []),\n `PostgresRdfNativeCustomIndexBgpNumericAggregate(${patterns.length})`,\n ...rdfSubjectStarJoinPlanMarker('PostgresRdf3xSubjectStarJoin', patterns),\n this.postgresRdf3xAggregateMarker(aggregates, groupBy.length > 0),\n ...this.pgCustomIndexInternalFiltersPlan(shape),\n aggregatePlan(aggregates, groupBy.length > 0),\n ...((query.having ?? []).length > 0 ? [`PostgresRdfNativeCustomIndexAggregateHaving(${(query.having ?? []).map(describeFilter).join(',')})`] : []),\n ...((query.orderBy ?? []).length > 0 ? [`PostgresRdfNativeCustomIndexAggregateOrder(${describeQueryOrder(query.orderBy ?? [])})`] : []),\n ...(query.limit !== undefined || query.offset !== undefined ? ['PostgresRdfNativeCustomIndexAggregateLimit'] : []),\n sql,\n ],\n query.filters?.length ?? 0,\n ),\n };\n }\n\n private pgCustomIndexNumericAggregateColumn(aggregate: RdfQueryAggregate): string {\n switch (aggregate.type) {\n case 'count':\n return 'value_count';\n case 'sum':\n return 'value_sum';\n case 'avg':\n return 'value_avg';\n case 'min':\n return 'value_min';\n case 'max':\n return 'value_max';\n default: {\n const exhaustive: never = aggregate.type;\n throw new Error(`Unsupported native PostgreSQL RDF numeric aggregate: ${exhaustive}`);\n }\n }\n }\n\n private async tryQueryPgCustomIndexDistinct(\n query: RdfQuery,\n patterns: PgCompiledJoinPattern[],\n values: PgCompiledValuesSource[],\n project: string[],\n start: number,\n ): Promise<RdfQueryResult | undefined> {\n const capability = 'index.xpod_rdf_perm.distinct_any';\n if (!this.canUsePgAccelerationCapability(capability)) {\n return undefined;\n }\n if (\n !query.distinct\n || query.patterns.length !== 1\n || patterns.length !== 1\n || values.length > 0\n || project.length !== 1\n || (query.groupBy ?? []).length > 0\n || (query.having ?? []).length > 0\n || (query.orderBy ?? []).length > 0\n ) {\n return undefined;\n }\n\n const [pattern] = patterns;\n if (pattern.equalities.length > 0) {\n return undefined;\n }\n const projectVariable = project[0];\n const projectKey = patternKeyForVariable(pattern.variables, projectVariable);\n if (!projectKey) {\n return undefined;\n }\n\n const resolved = await this.resolvePattern(pattern.pattern);\n const customResolved = await this.resolvePgCustomIndexGraphPrefix(resolved);\n if (!customResolved || !this.canUsePgCustomIndexResolvedPattern(customResolved)) {\n return undefined;\n }\n const fullFilters = this.pgCustomIndexFullFilters(customResolved);\n if (fullFilters.some((filter) => filter?.length === 0)) {\n return this.pgCustomIndexDistinctEmptyResult(query, projectVariable, start, capability, 'none');\n }\n\n const permutation = this.choosePermutation(customResolved);\n const prefixFilters = this.pgCustomIndexPrefixFilters(customResolved, permutation);\n if (prefixFilters.every((filter) => filter === null)) {\n return undefined;\n }\n if (prefixFilters.some((filter) => filter?.length === 0)) {\n return this.pgCustomIndexDistinctEmptyResult(query, projectVariable, start, capability, permutation.name);\n }\n\n const rows = await this.requireExecutor().query<Record<string, number>>(`\n SELECT native_distinct.value AS v0, native_distinct.row_count\n FROM xpod_rdf.perm_index_distinct_any(\n $1::regclass,\n $2::regclass,\n $3::integer,\n $4::bigint[],\n $5::bigint[],\n $6::bigint[],\n $7::bigint[],\n $8::bigint[],\n $9::bigint[],\n $10::bigint[],\n $11::bigint[],\n $12::bigint,\n $13::bigint\n ) native_distinct\n `, [\n RDF_FACTS_TABLE,\n pgCustomPermutationIndexName(permutation),\n PG_CUSTOM_INDEX_PROJECT_COLUMN[projectKey],\n ...prefixFilters,\n ...fullFilters,\n query.limit ?? null,\n query.offset ?? null,\n ]);\n const bindings = await this.joinRowsToBindings(rows, new Map([[projectVariable, 'v0']]));\n const matchedRows = await this.pgCustomIndexCountAny(customResolved, permutation)\n ?? rows.reduce((total, row) => total + (pgInteger(row.row_count) ?? 0), 0);\n return {\n bindings,\n metrics: this.localMetrics(\n start,\n matchedRows,\n matchedRows,\n bindings.length,\n [permutation.name],\n [\n ...this.pgAccelerationActiveMarkersForQuery(query),\n `XpodRdfExtensionOperator(${capability})`,\n `PostgresRdfNativeCustomIndexDistinctAny(${permutation.name},?${projectVariable})`,\n `PostgresRdf3xJoinDistinct(?${projectVariable})`,\n ...(query.limit !== undefined || query.offset !== undefined ? ['PostgresRdfNativeCustomIndexDistinctLimit'] : []),\n ],\n query.filters?.length ?? 0,\n ),\n };\n }\n\n private pgCustomIndexDistinctEmptyResult(\n query: RdfQuery,\n projectVariable: string,\n start: number,\n capability: string,\n indexChoice: string,\n ): RdfQueryResult {\n return {\n bindings: [],\n metrics: this.localMetrics(\n start,\n 0,\n 0,\n 0,\n [indexChoice],\n [\n ...this.pgAccelerationActiveMarkersForQuery(query),\n `XpodRdfExtensionOperator(${capability})`,\n `PostgresRdfNativeCustomIndexDistinctAny(${indexChoice},?${projectVariable})`,\n `PostgresRdf3xJoinDistinct(?${projectVariable})`,\n ],\n query.filters?.length ?? 0,\n ),\n };\n }\n\n private async tryQueryPgCustomIndexBgpJoin(\n query: RdfQuery,\n patterns: PgCompiledJoinPattern[],\n values: PgCompiledValuesSource[],\n project: string[],\n start: number,\n ): Promise<RdfQueryResult | undefined> {\n if (\n query.patterns.length < 2\n || query.patterns.length > 8\n || patterns.length !== query.patterns.length\n || values.length > 0\n || query.distinct\n || project.length === 0\n || project.length > 8\n || (query.groupBy ?? []).length > 0\n || (query.having ?? []).length > 0\n ) {\n return undefined;\n }\n const orderBy = query.orderBy ?? [];\n const usesOrderPage = orderBy.length > 0 && (query.limit !== undefined || query.offset !== undefined);\n if (orderBy.length > 0 && !usesOrderPage) {\n return undefined;\n }\n if (usesOrderPage && orderBy.some((entry) => !project.includes(entry.variable))) {\n return undefined;\n }\n const canUseOrderPageWrapper = usesOrderPage\n && this.canUsePgAccelerationCapability('join.required_bgp.order_page.native');\n const usesOrderPageTopN = usesOrderPage\n && orderBy.length === 1\n && this.canUsePgAccelerationCapability('join.required_bgp.order_page.topn.native');\n if (usesOrderPage && !canUseOrderPageWrapper && !usesOrderPageTopN) {\n return undefined;\n }\n\n const subjectStarKey = rdfSubjectStarJoinKey(patterns);\n if (!usesOrderPage && !subjectStarKey) {\n return undefined;\n }\n const capability = !usesOrderPage\n ? 'join.subject_star'\n : 'join.required_bgp.native';\n if (!this.canUsePgAccelerationCapability(capability)) {\n return undefined;\n }\n const operatorCapabilities = [\n capability,\n ...(canUseOrderPageWrapper ? ['join.required_bgp.order_page.native'] : []),\n ...(usesOrderPageTopN ? ['join.required_bgp.order_page.topn.native'] : []),\n ...(usesOrderPage && subjectStarKey && this.canUsePgAccelerationCapability('join.subject_star') ? ['join.subject_star'] : []),\n ];\n\n const shape = await this.pgCustomIndexBgpJoinShape(patterns, project, usesOrderPageTopN\n ? { preferredLeadingVariables: orderBy.map((entry) => entry.variable) }\n : {});\n if (!shape) {\n return undefined;\n }\n if (shape.internalFilters.length > 0) {\n return undefined;\n }\n if (shape.internalFilters.length > 0 && !this.canUsePgAccelerationCapability('join.slot_filter.native')) {\n return undefined;\n }\n const filtersShape = this.pgCustomIndexSlotFiltersShape(shape.internalFilters, shape.variableSlotsByName);\n if (!filtersShape) {\n return undefined;\n }\n const orderSlots = usesOrderPage\n ? orderBy.map((entry) => shape.variableSlotsByName.get(entry.variable))\n : [];\n if (orderSlots.some((slot) => slot === undefined)) {\n return undefined;\n }\n const indexPlaceholders = shape.indexNames.map((_, index) => `$${index + 2}::regclass::oid`).join(', ');\n const constantsParam = 2 + shape.indexNames.length;\n const variableSlotsParam = constantsParam + 1;\n const outputSlotsParam = variableSlotsParam + 1;\n const filterSlotsParam = outputSlotsParam + 1;\n const filterOffsetsParam = filterSlotsParam + 1;\n const filterValuesParam = filterOffsetsParam + 1;\n const limitParam = shape.internalFilters.length > 0 ? filterValuesParam + 1 : outputSlotsParam + 1;\n const offsetParam = limitParam + 1;\n const filterArguments = shape.internalFilters.length > 0\n ? `,\n $${filterSlotsParam}::smallint[],\n $${filterOffsetsParam}::bigint[],\n $${filterValuesParam}::bigint[]`\n : '';\n const projection = project.map((_variableName, index) => `native_join.v${index + 1} AS v${index}`).join(', ');\n const nativeSql = usesOrderPageTopN\n ? this.pgCustomIndexBgpOrderPageTopNSql({\n projection,\n indexPlaceholders,\n constantsParam,\n variableSlotsParam,\n outputSlotsParam,\n })\n : `\n SELECT ${projection}\n FROM xpod_rdf.bgp_join(\n $1::regclass,\n ARRAY[${indexPlaceholders}]::oid[],\n $${constantsParam}::bigint[],\n $${variableSlotsParam}::smallint[],\n $${outputSlotsParam}::smallint[]${filterArguments},\n $${limitParam}::bigint,\n $${offsetParam}::bigint\n ) native_join\n `;\n const nativeParams = usesOrderPageTopN\n ? [\n RDF_FACTS_TABLE,\n ...shape.indexNames,\n shape.constants,\n shape.variableSlots,\n shape.outputSlots,\n orderSlots as number[],\n orderBy.map((entry) => entry.direction === 'desc'),\n query.limit ?? null,\n query.offset ?? null,\n RDF_TERMS_TABLE,\n ]\n : [\n RDF_FACTS_TABLE,\n ...shape.indexNames,\n shape.constants,\n shape.variableSlots,\n shape.outputSlots,\n ...(shape.internalFilters.length > 0 ? [filtersShape.filterSlots, filtersShape.filterOffsets, filtersShape.filterValues] : []),\n usesOrderPage ? null : query.limit ?? null,\n usesOrderPage ? null : query.offset ?? null,\n ];\n const builder = new PgSqlBuilder(nativeParams);\n const orderClause = usesOrderPage && !usesOrderPageTopN\n ? this.buildJoinOrderClause(orderBy, new Map(project.map((variableName, index) => [variableName, `ordered.v${index}`])))\n : { joins: '', orderBy: '' };\n const pagination = usesOrderPage && !usesOrderPageTopN ? this.buildPagination(query, builder) : { sql: '', paramCount: 0 };\n const sql = usesOrderPage && !usesOrderPageTopN\n ? `\n SELECT ${project.map((_variableName, index) => `ordered.v${index} AS v${index}`).join(', ')}\n FROM (${nativeSql}) ordered\n ${orderClause.joins}\n ${orderClause.orderBy}\n ${pagination.sql}\n `\n : nativeSql;\n const rows = await this.requireExecutor().query<Record<string, number>>(sql, builder.snapshot());\n const bindings = await this.joinRowsToBindings(rows, shape.variableAliases);\n return {\n bindings,\n metrics: this.localMetrics(\n start,\n rows.length,\n rows.length,\n bindings.length,\n [`PostgresNativeBgp(${shape.indexChoices.join('>')})`],\n [\n ...this.pgAccelerationActiveMarkersForQuery(query),\n ...operatorCapabilities.map((operatorCapability) => `XpodRdfExtensionOperator(${operatorCapability})`),\n ...(shape.internalFilters.length > 0 ? ['XpodRdfExtensionOperator(join.slot_filter.native)'] : []),\n ...(operatorCapabilities.includes('join.subject_star') ? [`PostgresRdfNativeCustomIndexSubjectStarJoin(${subjectStarKey};patterns:${patterns.length})`] : []),\n `PostgresRdfNativeCustomIndexBgpJoin(${patterns.length})`,\n ...(usesOrderPage ? [`PostgresRdfNativeCustomIndexBgpOrderPage(${describeQueryOrder(orderBy)})`] : []),\n ...(usesOrderPageTopN ? [`PostgresRdfNativeCustomIndexBgpOrderPageTopN(${describeQueryOrder(orderBy)})`] : []),\n ...rdfSubjectStarJoinPlanMarker('PostgresRdf3xSubjectStarJoin', patterns),\n `PostgresRdf3xJoin(${patterns.map((entry) => describePatternSource(entry)).join('|')})`,\n ...this.pgCustomIndexInternalFiltersPlan(shape),\n ...(query.limit !== undefined || query.offset !== undefined ? ['PostgresRdfNativeCustomIndexBgpLimit'] : []),\n sql,\n ],\n query.filters?.length ?? 0,\n ),\n };\n }\n\n private pgCustomIndexBgpOrderPageTopNSql(options: {\n projection: string;\n indexPlaceholders: string;\n constantsParam: number;\n variableSlotsParam: number;\n outputSlotsParam: number;\n }): string {\n const orderSlotsParam = options.outputSlotsParam + 1;\n const orderDescParam = orderSlotsParam + 1;\n const limitParam = orderDescParam + 1;\n const offsetParam = limitParam + 1;\n const termsTableParam = offsetParam + 1;\n return `\n SELECT ${options.projection}\n FROM xpod_rdf.bgp_order_page(\n $1::regclass,\n $${termsTableParam}::regclass,\n ARRAY[${options.indexPlaceholders}]::oid[],\n $${options.constantsParam}::bigint[],\n $${options.variableSlotsParam}::smallint[],\n $${options.outputSlotsParam}::smallint[],\n $${orderSlotsParam}::smallint[],\n $${orderDescParam}::boolean[],\n $${limitParam}::bigint,\n $${offsetParam}::bigint\n ) native_join\n `;\n }\n\n private async tryQueryPgCustomIndexValuesJoin(\n query: RdfQuery,\n patterns: PgCompiledJoinPattern[],\n values: PgCompiledValuesSource[],\n project: string[],\n start: number,\n ): Promise<RdfQueryResult | undefined> {\n const capability = query.limit !== undefined || query.offset !== undefined\n ? 'join.values.limit.native'\n : 'join.values.native';\n if (!this.canUsePgAccelerationCapability(capability)) {\n return undefined;\n }\n if (values.length > 0) {\n return undefined;\n }\n if (\n query.patterns.length < 1\n || query.patterns.length > 8\n || patterns.length !== query.patterns.length\n || query.distinct\n || project.length === 0\n || project.length > 8\n || (query.groupBy ?? []).length > 0\n || (query.having ?? []).length > 0\n || (query.orderBy ?? []).length > 0\n ) {\n return undefined;\n }\n\n const shape = await this.pgCustomIndexBgpJoinShape(patterns, project);\n if (!shape) {\n return undefined;\n }\n if (values.length === 0) {\n return undefined;\n }\n if (shape.internalFilters.length > 0 && !this.canUsePgAccelerationCapability('join.slot_filter.native')) {\n return undefined;\n }\n const valuesShape = this.pgCustomIndexValuesShape(values, shape.variableSlotsByName);\n const filtersShape = this.pgCustomIndexSlotFiltersShape(shape.internalFilters, shape.variableSlotsByName);\n if (!valuesShape || !filtersShape) {\n return undefined;\n }\n if (valuesShape.valueRows.length === 0) {\n return {\n bindings: [],\n metrics: this.localMetrics(\n start,\n 0,\n 0,\n 0,\n [`PostgresNativeValuesJoin(${shape.indexChoices.join('>')})`],\n [\n ...this.pgAccelerationActiveMarkersForQuery(query),\n `XpodRdfExtensionOperator(${capability})`,\n 'PostgresRdfNativeCustomIndexValuesJoin(empty)',\n ...this.pgCustomIndexInternalFiltersPlan(shape),\n ],\n query.filters?.length ?? 0,\n ),\n };\n }\n\n const indexPlaceholders = shape.indexNames.map((_, index) => `$${index + 2}::regclass::oid`).join(', ');\n const constantsParam = 2 + shape.indexNames.length;\n const variableSlotsParam = constantsParam + 1;\n const outputSlotsParam = variableSlotsParam + 1;\n const valueSlotsParam = outputSlotsParam + 1;\n const valueRowsParam = valueSlotsParam + 1;\n const filterSlotsParam = valueRowsParam + 1;\n const filterOffsetsParam = filterSlotsParam + 1;\n const filterValuesParam = filterOffsetsParam + 1;\n const limitParam = shape.internalFilters.length > 0 ? filterValuesParam + 1 : valueRowsParam + 1;\n const offsetParam = limitParam + 1;\n const filterArguments = shape.internalFilters.length > 0\n ? `,\n $${filterSlotsParam}::smallint[],\n $${filterOffsetsParam}::bigint[],\n $${filterValuesParam}::bigint[]`\n : '';\n const projection = project.map((_variableName, index) => `native_join.v${index + 1} AS v${index}`).join(', ');\n const usesPagination = query.limit !== undefined || query.offset !== undefined;\n const sql = `\n SELECT ${projection}\n FROM xpod_rdf.values_join(\n $1::regclass,\n ARRAY[${indexPlaceholders}]::oid[],\n $${constantsParam}::bigint[],\n $${variableSlotsParam}::smallint[],\n $${outputSlotsParam}::smallint[],\n $${valueSlotsParam}::smallint[],\n $${valueRowsParam}::bigint[]${filterArguments}\n ${usesPagination ? `, $${limitParam}::bigint, $${offsetParam}::bigint` : ''}\n ) native_join\n `;\n const rows = await this.requireExecutor().query<Record<string, number>>(sql, [\n RDF_FACTS_TABLE,\n ...shape.indexNames,\n shape.constants,\n shape.variableSlots,\n shape.outputSlots,\n valuesShape.valueSlots,\n valuesShape.valueRows,\n ...(shape.internalFilters.length > 0 ? [filtersShape.filterSlots, filtersShape.filterOffsets, filtersShape.filterValues] : []),\n ...(usesPagination ? [query.limit ?? null, query.offset ?? null] : []),\n ]);\n const bindings = await this.joinRowsToBindings(rows, shape.variableAliases);\n return {\n bindings,\n metrics: this.localMetrics(\n start,\n rows.length,\n rows.length,\n bindings.length,\n [`PostgresNativeValuesJoin(${shape.indexChoices.join('>')})`],\n [\n ...this.pgAccelerationActiveMarkersForQuery(query),\n `XpodRdfExtensionOperator(${capability})`,\n ...(shape.internalFilters.length > 0 ? ['XpodRdfExtensionOperator(join.slot_filter.native)'] : []),\n `PostgresRdfNativeCustomIndexValuesJoin(${patterns.length})`,\n `Rdf3xJoinTupleValues(${values.map((source) => source.variables.map((variableName) => `?${variableName}`).join(',')).join('|')})`,\n ...this.pgCustomIndexInternalFiltersPlan(shape),\n ...(usesPagination ? ['PostgresRdfNativeCustomIndexValuesJoinLimit'] : []),\n sql,\n ],\n query.filters?.length ?? 0,\n ),\n };\n }\n\n private async pgCustomIndexBgpJoinShape(\n patterns: PgCompiledJoinPattern[],\n project: string[],\n options: PgCustomIndexBgpJoinShapeOptions = {},\n ): Promise<PgCustomIndexBgpJoinShape | undefined> {\n const variableSlotsByName = new Map<string, number>();\n const indexNames: string[] = [];\n const constants: Array<number | null> = [];\n const variableSlots: number[] = [];\n const indexChoices: string[] = [];\n const internalFilters: PgCompiledSlotFilterSource[] = [];\n\n const slotFor = (variableName: string): number | undefined => {\n const existing = variableSlotsByName.get(variableName);\n if (existing !== undefined) {\n return existing;\n }\n if (variableSlotsByName.size >= 8) {\n return undefined;\n }\n const next = variableSlotsByName.size + 1;\n variableSlotsByName.set(variableName, next);\n return next;\n };\n\n for (const [patternIndex, pattern] of patterns.entries()) {\n const resolved = await this.resolvePattern(pattern.pattern);\n const customResolved = await this.resolvePgCustomIndexGraphPrefix(resolved);\n if (!customResolved || !this.canUsePgCustomIndexResolvedJoinPattern(customResolved, pattern, options) || patternHasIdSet(customResolved)) {\n return undefined;\n }\n const graphPrefixVariableName = this.pgCustomIndexGraphPrefixVariableName(customResolved, pattern, patternIndex);\n if (graphPrefixVariableName) {\n const slot = slotFor(graphPrefixVariableName);\n if (slot === undefined) {\n return undefined;\n }\n internalFilters.push({\n variable: graphPrefixVariableName,\n values: customResolved.graphPrefixIds ?? [],\n });\n }\n\n const preferredLeadingVariables = new Set(options.preferredLeadingVariables ?? []);\n const preferredKey = TERM_KEYS.find((key) => {\n const variableName = pattern.variables[key];\n return variableName !== undefined && preferredLeadingVariables.has(variableName);\n });\n const permutation = this.choosePermutation(customResolved, preferredKey);\n indexNames.push(pgCustomPermutationIndexName(permutation));\n indexChoices.push(permutation.name);\n for (const column of permutation.columns) {\n const key = pgPatternKeyForIndexedColumn(column);\n constants.push(customResolved.ids[key] ?? null);\n const variableName = key === 'graph' && graphPrefixVariableName\n ? graphPrefixVariableName\n : pattern.variables[key];\n const slot = variableName ? slotFor(variableName) : 0;\n if (slot === undefined) {\n return undefined;\n }\n variableSlots.push(slot);\n }\n }\n\n const outputSlots: number[] = [];\n const variableAliases = new Map<string, string>();\n for (const [index, variableName] of project.entries()) {\n const slot = variableSlotsByName.get(variableName);\n if (slot === undefined) {\n return undefined;\n }\n outputSlots.push(slot);\n variableAliases.set(variableName, `v${index}`);\n }\n return {\n indexNames,\n constants,\n variableSlots,\n variableSlotsByName,\n outputSlots,\n variableAliases,\n indexChoices,\n internalFilters,\n };\n }\n\n private async resolvePgCustomIndexGraphPrefix(resolved: PgResolvedPattern): Promise<PgResolvedPattern | undefined> {\n if (resolved.graphPrefix === undefined || resolved.graphPrefixIds !== undefined) {\n return resolved;\n }\n const graphPrefixIds = await this.pgCustomIndexGraphIdsForPrefix(resolved.graphPrefix);\n if (graphPrefixIds === undefined) {\n return undefined;\n }\n return {\n ...resolved,\n graphPrefixIds,\n };\n }\n\n private async pgCustomIndexGraphIdsForPrefix(prefix: string): Promise<number[] | undefined> {\n const valueHead = rdfTermValueHead(prefix);\n const rows = await this.requireExecutor().query<{ id: number | string }>(`\n SELECT DISTINCT graph_term.id, graph_term.value\n FROM rdf_terms graph_term\n JOIN ${RDF_FACTS_TABLE} fact ON fact.graph_id = graph_term.id\n WHERE graph_term.kind = $1\n AND graph_term.value_head COLLATE \"C\" >= $2\n AND graph_term.value_head COLLATE \"C\" < $3\n AND starts_with(graph_term.value, $4)\n ORDER BY graph_term.value, graph_term.id\n LIMIT $5\n `, [\n 'iri',\n valueHead,\n `${valueHead}\\uffff`,\n prefix,\n PG_CUSTOM_INDEX_MAX_GRAPH_PREFIX_IDS + 1,\n ]);\n if (rows.length > PG_CUSTOM_INDEX_MAX_GRAPH_PREFIX_IDS) {\n return undefined;\n }\n return rows\n .map((row) => Number(row.id))\n .filter(Number.isFinite);\n }\n\n private pgValuePrefixConditions(alias: string, prefix: string, builder: PgSqlBuilder): string[] {\n const valueHead = rdfTermValueHead(prefix);\n return [\n `${alias}.kind = ${builder.add('iri')}`,\n `${alias}.value_head COLLATE \"C\" >= ${builder.add(valueHead)}`,\n `${alias}.value_head COLLATE \"C\" < ${builder.add(`${valueHead}\\uffff`)}`,\n `starts_with(${alias}.value, ${builder.add(prefix)})`,\n ];\n }\n\n private pgCustomIndexGraphPrefixVariableName(\n resolved: PgResolvedPattern,\n pattern: PgCompiledJoinPattern,\n patternIndex: number,\n ): string | undefined {\n if (resolved.graphPrefix === undefined || resolved.graphPrefixIds === undefined) {\n return undefined;\n }\n if (resolved.ids.graph !== undefined && resolved.graphPrefixIds.includes(resolved.ids.graph)) {\n return undefined;\n }\n return pattern.variables.graph ?? `__xpod_graph_prefix_${patternIndex}`;\n }\n\n private pgCustomIndexInternalFiltersPlan(shape: PgCustomIndexBgpJoinShape): string[] {\n if (shape.internalFilters.length === 0) {\n return [];\n }\n return [\n `PostgresRdfNativeGraphPrefixSlotFilter(${shape.internalFilters.map((source) => source.values.length).join('x')})`,\n ];\n }\n\n private canUsePgCustomIndexResolvedJoinPattern(\n resolved: PgResolvedPattern,\n pattern: PgCompiledJoinPattern,\n options: PgCustomIndexBgpJoinShapeOptions,\n ): boolean {\n return resolved.unresolved === undefined\n && (resolved.graphPrefix === undefined || resolved.graphPrefixIds !== undefined)\n && resolved.objectRange === undefined\n && PATTERN_KEYS.every((key) => {\n if (resolved.excludedIdSets[key]?.length) {\n return false;\n }\n const filter = resolved.termFilters[key];\n return !filter || options.allowedTermFilter?.(pattern, key, filter) === true;\n });\n }\n\n private pgCustomIndexValuesShape(\n values: PgCompiledValuesSource[],\n variableSlotsByName: Map<string, number>,\n ): { valueSlots: number[]; valueRows: number[] } | undefined {\n if (values.length === 0) {\n return { valueSlots: [], valueRows: [] };\n }\n let valueSlots: number[] = [];\n let rows: number[][] = [[]];\n for (const source of values) {\n if (!source || source.variables.length === 0 || source.variables.length > 8) {\n return undefined;\n }\n const sourceSlots = source.variables.map((variableName) => variableSlotsByName.get(variableName));\n if (sourceSlots.some((slot) => slot === undefined)) {\n return undefined;\n }\n const nextSlots = [...valueSlots];\n for (const slot of sourceSlots as number[]) {\n if (!nextSlots.includes(slot)) {\n nextSlots.push(slot);\n }\n }\n if (nextSlots.length > 8 || source.rows.some((row) => row.length !== source.variables.length)) {\n return undefined;\n }\n if (source.rows.length === 0) {\n return { valueSlots: nextSlots, valueRows: [] };\n }\n if (rows.length * source.rows.length > PG_CUSTOM_INDEX_MAX_VALUE_ROWS) {\n return undefined;\n }\n const nextRows: number[][] = [];\n for (const existingRow of rows) {\n for (const sourceRow of source.rows) {\n const valuesBySlot = new Map<number, number>();\n valueSlots.forEach((slot, index) => valuesBySlot.set(slot, existingRow[index]));\n let matched = true;\n for (const [index, slot] of (sourceSlots as number[]).entries()) {\n const value = sourceRow[index];\n const existing = valuesBySlot.get(slot);\n if (existing !== undefined && existing !== value) {\n matched = false;\n break;\n }\n valuesBySlot.set(slot, value);\n }\n if (matched) {\n nextRows.push(nextSlots.map((slot) => valuesBySlot.get(slot)!));\n }\n }\n }\n valueSlots = nextSlots;\n rows = nextRows;\n }\n return {\n valueSlots,\n valueRows: valueSlots.length === 0 ? [] : rows.flat(),\n };\n }\n\n private pgCustomIndexSlotFiltersShape(\n filters: PgCompiledSlotFilterSource[],\n variableSlotsByName: Map<string, number>,\n ): { filterSlots: number[]; filterOffsets: number[]; filterValues: number[] } | undefined {\n if (filters.length === 0) {\n return { filterSlots: [], filterOffsets: [], filterValues: [] };\n }\n const valuesBySlot = new Map<number, Set<number>>();\n for (const filter of filters) {\n const slot = variableSlotsByName.get(filter.variable);\n if (slot === undefined) {\n return undefined;\n }\n const values = new Set(uniqueNumbers(filter.values));\n const existing = valuesBySlot.get(slot);\n if (existing) {\n valuesBySlot.set(slot, new Set([...existing].filter((value) => values.has(value))));\n continue;\n }\n valuesBySlot.set(slot, values);\n }\n\n const filterSlots = [...valuesBySlot.keys()].sort((left, right) => left - right);\n const filterOffsets = [0];\n const filterValues: number[] = [];\n for (const slot of filterSlots) {\n const values = [...(valuesBySlot.get(slot) ?? [])].sort((left, right) => left - right);\n filterValues.push(...values);\n filterOffsets.push(filterValues.length);\n }\n return { filterSlots, filterOffsets, filterValues };\n }\n\n private pgCustomIndexPrefixFilters(resolved: PgResolvedPattern, permutation: PgPermutation): Array<number[] | null> {\n const filters: Array<number[] | null> = [];\n let endedPrefix = false;\n for (const column of permutation.columns) {\n const key = pgPatternKeyForIndexedColumn(column);\n const filter = endedPrefix ? null : this.pgCustomIndexIdFilter(resolved, key);\n if (!filter) {\n endedPrefix = true;\n }\n filters.push(filter);\n }\n return filters;\n }\n\n private pgCustomIndexFullFilters(resolved: PgResolvedPattern): Array<number[] | null> {\n return PATTERN_KEYS.map((key) => this.pgCustomIndexIdFilter(resolved, key));\n }\n\n private pgCustomIndexIdFilter(resolved: PgResolvedPattern, key: PgPatternKey): number[] | null {\n const exact = resolved.ids[key];\n const set = resolved.idSets[key];\n const graphPrefixSet = key === 'graph' ? resolved.graphPrefixIds : undefined;\n const mergedSet = set !== undefined && graphPrefixSet !== undefined\n ? intersectNumbers(set, graphPrefixSet)\n : set ?? graphPrefixSet;\n if (exact !== undefined && mergedSet !== undefined) {\n return mergedSet.includes(exact) ? [exact] : [];\n }\n if (exact !== undefined) {\n return [exact];\n }\n if (mergedSet !== undefined) {\n return uniqueNumbers(mergedSet).sort((left, right) => left - right);\n }\n return null;\n }\n\n private canUsePgCustomIndexResolvedPattern(resolved: PgResolvedPattern): boolean {\n return resolved.unresolved === undefined\n && (resolved.graphPrefix === undefined || resolved.graphPrefixIds !== undefined)\n && resolved.objectRange === undefined\n && PATTERN_KEYS.every((key) => !resolved.excludedIdSets[key]?.length && !resolved.termFilters[key]);\n }\n\n private canRdf3xAggregate(\n query: RdfQuery,\n aggregates: ReturnType<typeof queryAggregates>,\n ): boolean {\n if (aggregates.length === 0) {\n return false;\n }\n const visibleVariables = uniqueStrings(query.patterns.flatMap((pattern) => variablesInPattern(pattern)));\n const aggregateVariables = new Set(aggregates.map((aggregate) => aggregate.as));\n if (aggregates.some((aggregate) => !this.canRdf3xAggregateExpression(aggregate, visibleVariables))) {\n return false;\n }\n if ((query.groupBy ?? []).some((variableName) => !visibleVariables.includes(variableName))) {\n return false;\n }\n if (aggregates.some((aggregate) => (\n aggregate.variable !== undefined && !visibleVariables.includes(aggregate.variable)\n ))) {\n return false;\n }\n if (aggregates.some((aggregate) => (\n aggregate.distinctVariables !== undefined\n && aggregate.distinctVariables.some((variableName) => !visibleVariables.includes(variableName))\n ))) {\n return false;\n }\n if ((query.having ?? []).some((filter) => !this.canRdf3xAggregateHaving(filter, aggregateVariables))) {\n return false;\n }\n if ((query.orderBy ?? []).some((entry) => (\n !visibleVariables.includes(entry.variable) && !aggregateVariables.has(entry.variable)\n ))) {\n return false;\n }\n if ((query.groupBy ?? []).length === 0) {\n return !query.distinct\n && (query.having ?? []).length === 0\n && (query.orderBy ?? []).length === 0\n && query.limit === undefined\n && query.offset === undefined\n && (query.select ?? []).every((variableName) => aggregateVariables.has(variableName));\n }\n return !query.distinct && (query.orderBy ?? []).every((entry) => (\n (query.groupBy ?? []).includes(entry.variable) || aggregateVariables.has(entry.variable)\n )) && (query.select ?? []).every((variableName) => (\n (query.groupBy ?? []).includes(variableName) || aggregateVariables.has(variableName)\n ));\n }\n\n private canRdf3xAggregateExpression(\n aggregate: RdfQueryAggregate,\n visibleVariables: string[],\n ): boolean {\n if (aggregate.type === 'count') {\n return aggregate.variable === undefined\n ? (aggregate.distinctVariables ?? []).every((variableName) => visibleVariables.includes(variableName))\n : visibleVariables.includes(aggregate.variable)\n && (aggregate.distinctVariables ?? []).every((variableName) => visibleVariables.includes(variableName));\n }\n return Boolean(aggregate.variable)\n && visibleVariables.includes(aggregate.variable!)\n && !aggregate.distinct\n && aggregate.distinctVariables === undefined;\n }\n\n private canRdf3xAggregateHaving(filter: RdfQueryFilter, aggregateVariables: Set<string>): boolean {\n return aggregateVariables.has(filter.variable)\n && !filter.operand\n && !filter.variable2\n && filter.value !== undefined\n && isRdf3xAggregateHavingOperator(filter.operator)\n && typeof filter.value !== 'boolean'\n && this.aggregateFilterValue(filter.value) !== undefined;\n }\n\n private compileAggregateColumn(\n aggregate: NonNullable<RdfQuery['aggregates']>[number],\n index: number,\n variableAliases: Map<string, string>,\n aggregateAliases: Map<string, string>,\n aggregateTypes: Map<string, 'integer' | 'decimal'>,\n numericJoins: Map<string, string>,\n numericJoinSql: string[],\n ): PgAggregateSqlExpression {\n const alias = `a${index}`;\n aggregateAliases.set(aggregate.as, alias);\n if (aggregate.type === 'count' && !aggregate.variable) {\n aggregateTypes.set(aggregate.as, 'integer');\n const expression = aggregate.distinct\n ? `COUNT(DISTINCT ${joinSolutionMappingKeyExpression(variableAliases, aggregate.distinctVariables)})`\n : 'COUNT(*)';\n return {\n variableName: aggregate.as,\n alias,\n type: 'integer',\n expression,\n sql: `${expression} AS ${alias}`,\n };\n }\n if (!aggregate.variable) {\n throw new Error(`Postgres RDF-3X ${aggregate.type} aggregate requires a bound variable`);\n }\n const variableAlias = variableAliases.get(aggregate.variable);\n if (!variableAlias) {\n throw new Error(`Postgres RDF-3X aggregate cannot read unbound variable: ${aggregate.variable}`);\n }\n if (aggregate.type === 'count') {\n aggregateTypes.set(aggregate.as, 'integer');\n const expression = `COUNT(${aggregate.distinct ? 'DISTINCT ' : ''}source.${variableAlias})`;\n return {\n variableName: aggregate.as,\n alias,\n type: 'integer',\n expression,\n sql: `${expression} AS ${alias}`,\n };\n }\n if (aggregate.distinct) {\n throw new Error(`Postgres RDF-3X ${aggregate.type} DISTINCT aggregate is not supported in RDF-3X aggregate path`);\n }\n aggregateTypes.set(aggregate.as, 'decimal');\n const termAlias = numericJoins.get(aggregate.variable) ?? `agg_numeric_t${numericJoins.size}`;\n if (!numericJoins.has(aggregate.variable)) {\n numericJoins.set(aggregate.variable, termAlias);\n numericJoinSql.push(` JOIN rdf_terms ${termAlias} ON ${termAlias}.id = source.${variableAlias} AND ${termAlias}.kind = 'literal' AND ${termAlias}.numeric_value IS NOT NULL`);\n }\n const expression = this.numericAggregateExpression(aggregate, termAlias);\n return {\n variableName: aggregate.as,\n alias,\n type: 'decimal',\n expression,\n sql: `${expression} AS ${alias}`,\n };\n }\n\n private numericAggregateExpression(aggregate: RdfQueryAggregate, termAlias: string): string {\n switch (aggregate.type) {\n case 'sum':\n return `COALESCE(SUM(${termAlias}.numeric_value), 0)`;\n case 'avg':\n return `AVG(${termAlias}.numeric_value)`;\n case 'min':\n return `MIN(${termAlias}.numeric_value)`;\n case 'max':\n return `MAX(${termAlias}.numeric_value)`;\n case 'count':\n throw new Error('Postgres RDF-3X count aggregate should not use numericAggregateExpression');\n default: {\n const exhaustive: never = aggregate.type;\n throw new Error(`Unsupported PostgreSQL RDF numeric aggregate: ${exhaustive}`);\n }\n }\n }\n\n private postgresRdf3xAggregateMarker(aggregates: RdfQueryAggregate[], grouped: boolean): string {\n const countOnly = aggregates.every((aggregate) => aggregate.type === 'count');\n if (grouped) {\n return countOnly ? 'PostgresRdf3xGroupCount' : 'PostgresRdf3xGroupAggregate';\n }\n return countOnly ? 'PostgresRdf3xJoinCount' : 'PostgresRdf3xJoinAggregate';\n }\n\n private buildAggregateHavingClause(\n filters: RdfQueryFilter[],\n aggregates: PgAggregateSqlExpression[],\n builder: PgSqlBuilder,\n ): { sql: string } {\n if (filters.length === 0) {\n return { sql: '' };\n }\n return {\n sql: ` HAVING ${filters.map((filter) => {\n const aggregate = aggregates.find((entry) => entry.variableName === filter.variable);\n if (!aggregate) {\n throw new Error(`Postgres RDF-3X aggregate cannot HAVING on unknown aggregate: ${filter.variable}`);\n }\n return `${aggregate.expression} ${aggregateSqlOperator(filter.operator)} ${builder.add(this.aggregateFilterValue(filter.value))}`;\n }).join(' AND ')}`,\n };\n }\n\n private buildAggregateOrderClause(\n orderBy: NonNullable<RdfQuery['orderBy']>,\n variableAliases: Map<string, string>,\n aggregates: PgAggregateSqlExpression[],\n ): string {\n if (orderBy.length === 0) {\n return '';\n }\n const order = orderBy.map((entry) => {\n const aggregate = aggregates.find((candidate) => candidate.variableName === entry.variable);\n if (aggregate) {\n return `${aggregate.alias} ${entry.direction === 'desc' ? 'DESC' : 'ASC'}`;\n }\n const alias = variableAliases.get(entry.variable);\n if (!alias) {\n throw new Error(`Postgres RDF-3X aggregate cannot order by unbound variable: ${entry.variable}`);\n }\n return `source.${alias} ${entry.direction === 'desc' ? 'DESC' : 'ASC'}`;\n });\n return ` ORDER BY ${order.join(', ')}`;\n }\n\n private aggregateFilterValue(value: RdfQueryFilter['value']): number | undefined {\n if (typeof value === 'number') return Number.isFinite(value) ? value : undefined;\n if (typeof value === 'string') {\n const numeric = Number(value);\n return Number.isFinite(numeric) ? numeric : undefined;\n }\n if (value && typeof value === 'object' && 'termType' in value) {\n const numeric = rdfNumericValue(value.value);\n return Number.isFinite(numeric) ? numeric : undefined;\n }\n return undefined;\n }\n\n private canTryRdf3xQuery(query: RdfQuery): boolean {\n return (query.textSearch?.length ?? 0) === 0\n && (query.vectorSearch?.length ?? 0) === 0\n && (query.unions?.length ?? 0) === 0\n && (query.minus?.length ?? 0) === 0\n && (query.exists?.length ?? 0) === 0\n && (query.optional?.length ?? 0) === 0\n && (query.binds?.length ?? 0) === 0;\n }\n\n private async compileRdf3xJoinPatterns(\n patterns: RdfQueryPattern[],\n filters: RdfQueryFilter[],\n ): Promise<Array<PgCompiledJoinPattern & { pushedDownFilterIndexes: number[] }> | undefined> {\n const result: Array<PgCompiledJoinPattern & { pushedDownFilterIndexes: number[] }> = [];\n for (const pattern of patterns) {\n const compiled: QuintPattern = {};\n const variables: Partial<Record<PgPatternKey, string>> = {};\n const slotsByVariable = new Map<string, PgPatternKey[]>();\n const pushed = new Set<number>();\n for (const key of PATTERN_KEYS) {\n const value = pattern[key];\n if (!value) continue;\n if (isVariable(value)) {\n variables[key] = value.variable;\n slotsByVariable.set(value.variable, [...(slotsByVariable.get(value.variable) ?? []), key]);\n const pushdown = this.compilePushdownFilterWithIndexes(value.variable, filters);\n if (pushdown) {\n compiled[key] = pushdown.pattern;\n pushdown.filterIndexes.forEach((index) => pushed.add(index));\n }\n } else {\n compiled[key] = value;\n }\n }\n result.push({\n pattern: compiled,\n variables,\n equalities: patternEqualities(slotsByVariable),\n pushedDownFilterIndexes: [...pushed],\n });\n }\n return result;\n }\n\n private async compileRdf3xValuesSources(\n sources: RdfValuesBindingSource[],\n visibleVariables: string[],\n ): Promise<PgCompiledValuesSource[] | undefined> {\n if (sources.length === 0) {\n return [];\n }\n const visible = new Set(visibleVariables);\n const compiled: PgCompiledValuesSource[] = [];\n for (const source of sources) {\n if (source.variables.length === 0 || source.variables.some((variableName) => !visible.has(variableName))) {\n return undefined;\n }\n const rows: number[][] = [];\n for (const row of source.rows) {\n if (source.variables.some((variableName) => !row[variableName])) {\n return undefined;\n }\n const ids = await Promise.all(source.variables.map((variableName) => this.requireDictionary().find(row[variableName])));\n if (ids.every((id): id is number => id !== undefined)) {\n rows.push(ids);\n }\n }\n compiled.push({\n variables: [...source.variables],\n rows,\n });\n }\n return compiled;\n }\n\n private allFiltersPushed(\n filters: RdfQueryFilter[],\n patterns: Array<PgCompiledJoinPattern & { pushedDownFilterIndexes: number[] }>,\n ): boolean {\n const pushed = new Set(patterns.flatMap((pattern) => pattern.pushedDownFilterIndexes));\n return filters.every((_filter, index) => pushed.has(index));\n }\n\n private compilePushdownFilterWithIndexes(\n variableName: string,\n filters: RdfQueryFilter[],\n ): { pattern: QuintPattern[keyof QuintPattern]; filterIndexes: number[] } | null {\n const operators: Record<string, unknown> = {};\n const filterIndexes: number[] = [];\n for (const [index, filter] of filters.entries()) {\n if (filter.variable !== variableName || filter.variable2 || !this.isPushdownFilter(filter)) {\n continue;\n }\n switch (filter.operator) {\n case '$eq':\n case '$ne':\n if (filter.value === undefined || !isTerm(filter.value as any)) return null;\n operators[filter.operator] = filter.value;\n filterIndexes.push(index);\n break;\n case '$gt':\n case '$gte':\n case '$lt':\n case '$lte':\n if (filter.value === undefined) return null;\n operators[filter.operator] = filter.value;\n filterIndexes.push(index);\n break;\n case '$in':\n case '$notIn':\n if (!filter.values?.length || filter.values.some((value) => !isTerm(value as any))) return null;\n operators[filter.operator] = filter.values;\n filterIndexes.push(index);\n break;\n case '$sameTerm':\n if (filter.value === undefined || !isTerm(filter.value as any)) return null;\n operators.$eq = filter.value;\n filterIndexes.push(index);\n break;\n case '$termType':\n if (typeof filter.value !== 'string' || !['iri', 'blank', 'literal', 'numeric'].includes(filter.value)) return null;\n operators.$termType = filter.value;\n filterIndexes.push(index);\n break;\n case '$lang':\n if (typeof filter.value !== 'string') return null;\n operators.$language = filter.value;\n filterIndexes.push(index);\n break;\n case '$notLang':\n if (typeof filter.value !== 'string') return null;\n operators.$notLanguage = filter.value;\n filterIndexes.push(index);\n break;\n case '$langMatches':\n if (typeof filter.value !== 'string') return null;\n operators.$langMatches = filter.value;\n filterIndexes.push(index);\n break;\n case '$datatype':\n case '$notDatatype':\n if (filter.value === undefined || !isTerm(filter.value as any) || (filter.value as Term).termType !== 'NamedNode') return null;\n operators[filter.operator] = filter.value;\n filterIndexes.push(index);\n break;\n case '$startsWith':\n if (typeof filter.value !== 'string') return null;\n operators.$startsWith = filter.value;\n filterIndexes.push(index);\n break;\n case '$contains':\n case '$endsWith':\n if (typeof filter.value !== 'string') return null;\n operators[filter.operator] = filter.value;\n filterIndexes.push(index);\n break;\n default:\n return null;\n }\n }\n return Object.keys(operators).length > 0 ? { pattern: operators as TermMatch, filterIndexes } : null;\n }\n\n private isPushdownFilter(filter: RdfQueryFilter): boolean {\n if (filter.operand === 'stringLength' || filter.operand === 'lowerStringValue' || filter.operand === 'upperStringValue') {\n return false;\n }\n if (filter.operand === 'stringValue') {\n return filter.operator === '$startsWith'\n || filter.operator === '$contains'\n || filter.operator === '$endsWith';\n }\n return filter.operator === '$eq'\n || filter.operator === '$ne'\n || filter.operator === '$gt'\n || filter.operator === '$gte'\n || filter.operator === '$lt'\n || filter.operator === '$lte'\n || filter.operator === '$in'\n || filter.operator === '$notIn'\n || filter.operator === '$startsWith'\n || filter.operator === '$contains'\n || filter.operator === '$endsWith'\n || filter.operator === '$sameTerm'\n || filter.operator === '$termType'\n || filter.operator === '$lang'\n || filter.operator === '$notLang'\n || filter.operator === '$langMatches'\n || filter.operator === '$datatype'\n || filter.operator === '$notDatatype';\n }\n\n private async resolvePattern(pattern: QuintPattern): Promise<PgResolvedPattern> {\n const ids: Partial<Record<PgPatternKey, number>> = {};\n const idSets: Partial<Record<PgPatternKey, number[]>> = {};\n const excludedIdSets: Partial<Record<PgPatternKey, number[]>> = {};\n const termFilters: Partial<Record<PgPatternKey, PgResolvedTermFilter>> = {};\n let graphPrefix: string | undefined;\n let objectRange: PgObjectRange | undefined;\n\n for (const key of PATTERN_KEYS) {\n const value = pattern[key];\n if (!value) {\n continue;\n }\n if (isTerm(value as any)) {\n const id = await this.requireDictionary().find(value as Term);\n if (id === undefined) {\n return { ids, idSets, excludedIdSets, termFilters, unresolved: key };\n }\n ids[key] = id;\n continue;\n }\n const operators = value as TermOperators;\n if (operators.$eq !== undefined) {\n const id = await this.termOperatorValueId(operators.$eq);\n if (id === undefined) return { ids, idSets, excludedIdSets, termFilters, unresolved: key };\n ids[key] = id;\n }\n if (operators.$in !== undefined) {\n const set = uniqueNumbers((await Promise.all(operators.$in.map((entry) => this.termOperatorValueId(entry))))\n .filter((id): id is number => id !== undefined));\n if (set.length === 0) return { ids, idSets, excludedIdSets, termFilters, unresolved: key };\n idSets[key] = set;\n }\n if (operators.$notIn !== undefined) {\n const set = uniqueNumbers((await Promise.all(operators.$notIn.map((entry) => this.termOperatorValueId(entry))))\n .filter((id): id is number => id !== undefined));\n if (set.length > 0) excludedIdSets[key] = set;\n }\n if (operators.$ne !== undefined) {\n const id = await this.termOperatorValueId(operators.$ne);\n if (id !== undefined) excludedIdSets[key] = uniqueNumbers([...(excludedIdSets[key] ?? []), id]);\n }\n if (key === 'graph' && operators.$startsWith !== undefined) {\n graphPrefix = operators.$startsWith;\n }\n const filter = await this.resolveTermFilter(key, operators);\n if (filter) termFilters[key] = filter;\n if (key === 'object') {\n objectRange = this.resolveObjectRange(operators);\n }\n }\n return { ids, idSets, excludedIdSets, termFilters, ...(graphPrefix !== undefined ? { graphPrefix } : {}), ...(objectRange ? { objectRange } : {}) };\n }\n\n private async resolveTermFilter(key: PgPatternKey, operators: TermOperators): Promise<PgResolvedTermFilter | undefined> {\n const filter: PgResolvedTermFilter = {};\n if (operators.$termType !== undefined) filter.termType = operators.$termType;\n if (operators.$language !== undefined) filter.language = operators.$language;\n if (operators.$notLanguage !== undefined) filter.notLanguage = operators.$notLanguage;\n if (operators.$langMatches !== undefined) filter.langMatches = operators.$langMatches;\n if (operators.$datatype !== undefined) filter.datatype = await this.resolveDatatypeFilter(operators.$datatype);\n if (operators.$notDatatype !== undefined) filter.notDatatype = await this.resolveDatatypeFilter(operators.$notDatatype);\n if (key === 'object') {\n const textSearches: PgTextSearch[] = [];\n if (operators.$contains !== undefined) textSearches.push({ operator: '$contains', value: operators.$contains });\n if (operators.$endsWith !== undefined) textSearches.push({ operator: '$endsWith', value: operators.$endsWith });\n if (textSearches.length > 0) filter.textSearches = textSearches;\n }\n return Object.keys(filter).length > 0 ? filter : undefined;\n }\n\n private async resolveDatatypeFilter(datatype: Term): Promise<PgResolvedDatatypeFilter> {\n if (datatype.termType !== 'NamedNode') {\n return { kind: 'unknown' };\n }\n if (datatype.value === XSD_STRING) {\n return { kind: 'xsd-string' };\n }\n const id = await this.requireDictionary().find(datatype);\n return id === undefined ? { kind: 'unknown' } : { kind: 'id', id };\n }\n\n private resolveObjectRange(match: TermOperators): PgObjectRange | undefined {\n const numericRange: PgObjectRange = { mode: 'numeric' };\n const lexicalRange: PgObjectRange = { mode: 'lexical' };\n let hasRange = false;\n let allNumeric = true;\n for (const [operator, inclusive] of [\n ['$gt', false],\n ['$gte', true],\n ['$lt', false],\n ['$lte', true],\n ] as const) {\n const value = match[operator];\n if (value === undefined) continue;\n hasRange = true;\n const numericValue = this.numericValueForPattern(value);\n const lexicalValue = this.lexicalValueForPattern(value);\n allNumeric = allNumeric && numericValue !== undefined;\n if (lexicalValue === undefined) return undefined;\n if (operator === '$gt' || operator === '$gte') {\n if (numericValue !== undefined) numericRange.min = numericValue;\n numericRange.minInclusive = inclusive;\n lexicalRange.min = lexicalValue;\n lexicalRange.minInclusive = inclusive;\n } else {\n if (numericValue !== undefined) numericRange.max = numericValue;\n numericRange.maxInclusive = inclusive;\n lexicalRange.max = lexicalValue;\n lexicalRange.maxInclusive = inclusive;\n }\n }\n if (!hasRange) return undefined;\n return allNumeric ? numericRange : lexicalRange;\n }\n\n private numericValueForPattern(value: Term | string | number): number | undefined {\n if (typeof value === 'number') return Number.isFinite(value) ? value : undefined;\n if (typeof value === 'string') {\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : undefined;\n }\n if (value.termType !== 'Literal' || !isRdfNumericDatatype(value.datatype.value)) return undefined;\n const parsed = rdfNumericValue(value.value);\n return Number.isFinite(parsed) ? parsed : undefined;\n }\n\n private lexicalValueForPattern(value: Term | string | number): string | undefined {\n if (typeof value === 'number') return Number.isFinite(value) ? String(value) : undefined;\n if (typeof value === 'string') return value;\n return value.value;\n }\n\n private async termOperatorValueId(value: unknown): Promise<number | undefined> {\n if (!value || typeof value !== 'object' || !('termType' in value)) {\n throw new Error('PostgresRdfEngine exact operators only support RDF terms');\n }\n return this.requireDictionary().find(value as Term);\n }\n\n private compileScanSql(resolved: PgResolvedPattern, options?: RdfQuadScanOptions): PgCompiledScan {\n const builder = new PgSqlBuilder();\n const conditions: string[] = [];\n const joins: string[] = [];\n const queryPlan: string[] = [];\n const useMembershipSource = shouldUseMembershipSource(resolved);\n const permutation = this.choosePermutation(resolved);\n const alias = 'q';\n this.appendResolvedPatternConditions(resolved, alias, conditions, joins, builder, queryPlan, false);\n this.appendSlotTermRangeConditions(options?.slotTermRanges, alias, conditions, builder, queryPlan);\n const order = this.buildOrderClause(options, alias);\n const pagination = this.buildPagination(options, builder);\n const from = `${RDF_FACTS_TABLE} ${alias}`;\n const whereClause = conditions.length > 0 ? ` WHERE ${conditions.join(' AND ')}` : '';\n return {\n sql: `\n SELECT ${alias}.graph_id, ${alias}.subject_id, ${alias}.predicate_id, ${alias}.object_id\n FROM ${from}${joins.join('')}\n ${whereClause}\n ${order || ` ORDER BY ${permutation.columns.map((column) => `${alias}.${column}`).join(', ')}`}\n ${pagination.sql}\n `,\n params: builder.snapshot(),\n countSql: `SELECT COUNT(*) AS count FROM ${from}${joins.join('')}${whereClause}`,\n countParams: builder.snapshot().slice(0, builder.snapshot().length - pagination.paramCount),\n indexChoice: useMembershipSource ? 'source-membership' : permutation.name,\n queryPlan: [\n ...(useMembershipSource ? ['Rdf3xMembershipScan'] : [`Rdf3xPermutationScan(${permutation.name})`]),\n ...queryPlan,\n ...(order ? [`Rdf3xJoinOrder(${describeScanOrder(options)})`] : []),\n ...(pagination.sql ? ['Pagination'] : []),\n ],\n };\n }\n\n private async compileJoinSql(\n patterns: PgCompiledJoinPattern[],\n options?: {\n template?: PgQueryTemplateResolution;\n project?: string[];\n distinct?: boolean;\n orderBy?: RdfQuery['orderBy'];\n limit?: number;\n offset?: number;\n countMatchedRows?: boolean;\n fenceGraphPrefix?: boolean;\n values?: PgCompiledValuesSource[];\n },\n ): Promise<PgCompiledJoin> {\n const resolvedSources: PgJoinSource[] = [];\n for (const [inputIndex, entry] of patterns.entries()) {\n const resolved = await this.resolvePattern(entry.pattern);\n const permutation = this.choosePermutation(resolved);\n const estimateRows = resolved.unresolved ? 0 : await this.estimateResolvedRows(resolved);\n resolvedSources.push({\n inputIndex,\n alias: `q${inputIndex}`,\n entry,\n resolved,\n permutation,\n estimateRows,\n });\n }\n const orderedSources = this.orderJoinSources(resolvedSources);\n const sourceEstimates = orderedSources.map((source) => ({\n inputIndex: source.inputIndex,\n estimateRows: source.estimateRows,\n hasGraphPrefixFanout: source.resolved.graphPrefix !== undefined && source.resolved.ids.graph === undefined,\n }));\n const builder = new PgSqlBuilder();\n const conditions: string[] = [];\n const joins: string[] = [];\n const queryPlan: string[] = [\n `Rdf3xJoinBGP(${patterns.length})`,\n `Rdf3xJoinOrder(${orderedSources.map((source) => `?${source.inputIndex}:${source.estimateRows}`).join('>')})`,\n ];\n const variableColumns = new Map<string, string>();\n const variableAliases = new Map<string, string>();\n const indexChoices: string[] = [];\n\n for (const [position, source] of orderedSources.entries()) {\n if (source.resolved.unresolved) {\n return {\n sql: '',\n params: [],\n countParams: [],\n indexChoice: 'none',\n queryPlan,\n variableAliases,\n sourceEstimates,\n unresolved: source.resolved.unresolved,\n };\n }\n const alias = source.alias;\n if (position === 0) {\n joins.push(`${RDF_FACTS_TABLE} ${alias}`);\n } else {\n const mergeConditions = this.mergeJoinConditions(source, variableColumns);\n joins.push(` JOIN ${RDF_FACTS_TABLE} ${alias} ON ${mergeConditions.length > 0 ? mergeConditions.join(' AND ') : '1 = 1'}`);\n if (mergeConditions.length > 0) {\n queryPlan.push(`Rdf3xMergeJoin(${mergeConditions.length})`);\n }\n }\n this.appendResolvedPatternConditions(\n source.resolved,\n alias,\n conditions,\n joins,\n builder,\n queryPlan,\n options?.fenceGraphPrefix === true,\n );\n this.appendPatternEqualityConditions(source.entry.equalities, alias, conditions, queryPlan);\n indexChoices.push(shouldUseMembershipSource(source.resolved) ? 'source-membership' : source.permutation.name);\n\n for (const key of PATTERN_KEYS) {\n const variableName = source.entry.variables[key];\n if (!variableName) continue;\n const column = `${alias}.${TERM_COLUMN[key]}`;\n if (!variableColumns.has(variableName)) {\n variableColumns.set(variableName, column);\n }\n }\n }\n\n const projectVariables = options?.project ?? [...variableColumns.keys()];\n const projectionColumns = projectVariables.map((variableName) => {\n const column = variableColumns.get(variableName);\n if (!column) throw new Error(`Postgres RDF-3X join cannot project unbound variable: ${variableName}`);\n const alias = `v${variableAliases.size}`;\n variableAliases.set(variableName, alias);\n return `${column} AS ${alias}`;\n });\n const projection = projectionColumns.length > 0\n ? `${options?.distinct ? 'DISTINCT ' : ''}${projectionColumns.join(', ')}`\n : `${options?.distinct ? 'DISTINCT ' : ''}1 AS __empty`;\n const valuesJoins = this.buildPgValuesJoins(options?.values ?? [], variableColumns, builder);\n queryPlan.push(...valuesJoins.queryPlan);\n const whereClause = conditions.length > 0 ? ` WHERE ${conditions.join(' AND ')}` : '';\n const orderClause = this.buildJoinOrderClause(options?.orderBy, variableColumns);\n const pagination = this.buildPagination(options, builder);\n const from = `${joins.join('')}${valuesJoins.joins}`;\n const countSql = pagination.sql && options?.countMatchedRows !== false\n ? `SELECT COUNT(*) AS count FROM ${from}${orderClause.joins}${whereClause}`\n : undefined;\n const countParams = builder.snapshot().slice(0, builder.snapshot().length - pagination.paramCount);\n const sql = `\n SELECT ${projection}\n FROM ${from}${orderClause.joins}\n ${whereClause}\n ${orderClause.orderBy}\n ${pagination.sql}\n `;\n const indexChoice = `Rdf3xJoinBGP(${indexChoices.join('>')})`;\n const compiledSqlTemplatePlan = this.recordCompiledSqlTemplate(\n options?.template,\n compiledSqlPhysicalShape({\n sql,\n countSql,\n indexChoice,\n variableAliases,\n }),\n );\n return {\n sql,\n params: builder.snapshot(),\n countSql,\n countParams,\n indexChoice,\n queryPlan: [\n ...queryPlan,\n ...(orderClause.orderBy ? [`Rdf3xJoinOrderBy(${(options?.orderBy ?? []).map((entry) => `${entry.direction ?? 'asc'}:${entry.variable}`).join(',')})`] : []),\n ...(options?.distinct ? [`Rdf3xJoinDistinct(${projectVariables.map((variableName) => `?${variableName}`).join(',')})`] : []),\n ...(pagination.sql ? ['Rdf3xJoinLimit'] : []),\n ...compiledSqlTemplatePlan,\n sql,\n ],\n variableAliases,\n sourceEstimates,\n };\n }\n\n private slotTermRangePlanMarkers(ranges: RdfSlotTermKeyRange[] | undefined): string[] {\n if (!ranges?.length) return [];\n return ranges\n .filter((range) => range.lower !== undefined || range.upper !== undefined)\n .map((range) => `TermKeyRange(${range.slot})`);\n }\n\n private appendSlotTermRangeConditions(\n ranges: RdfSlotTermKeyRange[] | undefined,\n alias: string,\n conditions: string[],\n builder: PgSqlBuilder,\n queryPlan: string[],\n ): void {\n for (const range of ranges ?? []) {\n if (range.lower === undefined && range.upper === undefined) continue;\n const column = `${alias}.${TERM_COLUMN[range.slot]}`;\n if (range.lower !== undefined) {\n conditions.push(`${column} ${range.lowerInclusive === false ? '>' : '>='} ${builder.add(range.lower)}`);\n }\n if (range.upper !== undefined) {\n conditions.push(`${column} ${range.upperExclusive === false ? '<=' : '<'} ${builder.add(range.upper)}`);\n }\n queryPlan.push(`TermKeyRange(${range.slot})`);\n }\n }\n\n private filterRowsBySlotTermRanges(\n rows: PgQuadIdRow[],\n ranges: RdfSlotTermKeyRange[] | undefined,\n ): PgQuadIdRow[] {\n if (!ranges?.length) return rows;\n return rows.filter((row) => ranges.every((range) => {\n const value = row[TERM_COLUMN[range.slot]];\n if (range.lower !== undefined) {\n if (range.lowerInclusive === false ? value <= range.lower : value < range.lower) return false;\n }\n if (range.upper !== undefined) {\n if (range.upperExclusive === false ? value > range.upper : value >= range.upper) return false;\n }\n return true;\n }));\n }\n\n private appendResolvedPatternConditions(\n resolved: PgResolvedPattern,\n alias: string,\n conditions: string[],\n joins: string[],\n builder: PgSqlBuilder,\n queryPlan: string[],\n fenceGraphPrefix: boolean,\n ): void {\n for (const key of PATTERN_KEYS) {\n const column = `${alias}.${TERM_COLUMN[key]}`;\n const id = resolved.ids[key];\n if (id !== undefined) {\n conditions.push(`${column} = ${builder.add(id)}`);\n if (key === 'graph') queryPlan.push('GraphMembershipFilter');\n }\n const ids = resolved.idSets[key];\n if (ids?.length) {\n conditions.push(`${column} = ANY(${builder.add(ids)}::bigint[])`);\n queryPlan.push(`TermIn(${key})`);\n }\n const excluded = resolved.excludedIdSets[key];\n if (excluded?.length) {\n conditions.push(`NOT (${column} = ANY(${builder.add(excluded)}::bigint[]))`);\n queryPlan.push(`TermNotIn(${key})`);\n }\n const filter = resolved.termFilters[key];\n if (filter) {\n const filterAlias = `${alias}_${key}_term_filter`;\n joins.push(` JOIN rdf_terms ${filterAlias} ON ${filterAlias}.id = ${column}`);\n this.appendTermFilterCondition(key, filterAlias, filter, conditions, builder, queryPlan);\n }\n }\n if (resolved.graphPrefix !== undefined) {\n const graphAlias = `${alias}_graph_prefix`;\n if (fenceGraphPrefix) {\n const prefixConditions = this.pgValuePrefixConditions(graphAlias, resolved.graphPrefix, builder);\n conditions.push(`EXISTS (\n SELECT 1\n FROM rdf_terms ${graphAlias}\n WHERE ${graphAlias}.id = ${alias}.graph_id\n AND ${prefixConditions.join('\\n AND ')}\n OFFSET 0\n )`);\n } else {\n joins.push(` JOIN rdf_terms ${graphAlias} ON ${graphAlias}.id = ${alias}.graph_id`);\n conditions.push(...this.pgValuePrefixConditions(graphAlias, resolved.graphPrefix, builder));\n }\n queryPlan.push('GraphPrefixMembershipFilter');\n }\n if (resolved.objectRange) {\n const rangeAlias = `${alias}_object_range`;\n joins.push(` JOIN rdf_terms ${rangeAlias} ON ${rangeAlias}.id = ${alias}.object_id`);\n this.appendObjectRangeCondition(rangeAlias, resolved.objectRange, conditions, builder, queryPlan);\n }\n }\n\n private appendPatternEqualityConditions(\n equalities: PgPatternEquality[],\n alias: string,\n conditions: string[],\n queryPlan: string[],\n ): void {\n for (const equality of equalities) {\n conditions.push(`${alias}.${TERM_COLUMN[equality.left]} = ${alias}.${TERM_COLUMN[equality.right]}`);\n queryPlan.push(`Rdf3xPatternEquality(?${equality.variable}:${equality.left}=${equality.right})`);\n }\n }\n\n private appendTermFilterCondition(\n key: PgPatternKey,\n alias: string,\n filter: PgResolvedTermFilter,\n conditions: string[],\n builder: PgSqlBuilder,\n queryPlan: string[],\n ): void {\n if (filter.termType !== undefined) {\n this.appendTermTypeCondition(key, alias, filter.termType, conditions, builder);\n queryPlan.push(`TermType(${key}:${filter.termType})`);\n }\n if (filter.language !== undefined) {\n this.appendLanguageCondition(key, alias, '$language', filter.language, conditions, builder);\n queryPlan.push(`Language(${key}$language)`);\n }\n if (filter.notLanguage !== undefined) {\n this.appendLanguageCondition(key, alias, '$notLanguage', filter.notLanguage, conditions, builder);\n queryPlan.push(`Language(${key}$notLanguage)`);\n }\n if (filter.langMatches !== undefined) {\n this.appendLanguageCondition(key, alias, '$langMatches', filter.langMatches, conditions, builder);\n queryPlan.push(`Language(${key}$langMatches)`);\n }\n if (filter.datatype !== undefined) {\n this.appendDatatypeCondition(key, alias, '$datatype', filter.datatype, conditions, builder);\n queryPlan.push(`Datatype(${key}$datatype)`);\n }\n if (filter.notDatatype !== undefined) {\n this.appendDatatypeCondition(key, alias, '$notDatatype', filter.notDatatype, conditions, builder);\n queryPlan.push(`Datatype(${key}$notDatatype)`);\n }\n for (const search of filter.textSearches ?? []) {\n this.appendTextSearchCondition(key, alias, search, conditions, builder, queryPlan);\n }\n }\n\n private appendTermTypeCondition(\n key: PgPatternKey,\n alias: string,\n termType: Rdf3xTermTypePatternValue,\n conditions: string[],\n builder: PgSqlBuilder,\n ): void {\n const possibleKinds = termKindsForPatternKey(key);\n if (termType === 'numeric') {\n conditions.push(possibleKinds.includes('literal')\n ? `${alias}.kind = 'literal' AND ${alias}.numeric_value IS NOT NULL`\n : '1 = 0');\n return;\n }\n if (!possibleKinds.includes(termType)) {\n conditions.push('1 = 0');\n return;\n }\n conditions.push(`${alias}.kind = ${builder.add(termType)}`);\n }\n\n private appendLanguageCondition(\n key: PgPatternKey,\n alias: string,\n operator: '$language' | '$notLanguage' | '$langMatches',\n language: string,\n conditions: string[],\n builder: PgSqlBuilder,\n ): void {\n if (!termKindsForPatternKey(key).includes('literal')) {\n conditions.push('1 = 0');\n return;\n }\n if (operator === '$language') {\n conditions.push(`${alias}.kind = 'literal' AND COALESCE(${alias}.lang, '') = ${builder.add(language)}`);\n return;\n }\n if (operator === '$notLanguage') {\n conditions.push(`${alias}.kind = 'literal' AND COALESCE(${alias}.lang, '') != ${builder.add(language)}`);\n return;\n }\n if (language === '*') {\n conditions.push(`${alias}.kind = 'literal' AND ${alias}.lang IS NOT NULL AND ${alias}.lang != ''`);\n return;\n }\n conditions.push(`${alias}.kind = 'literal'\n AND (lower(${alias}.lang) = lower(${builder.add(language)}) OR lower(${alias}.lang) LIKE lower(${builder.add(`${escapeLikePattern(language)}-%`)}) ESCAPE '\\\\')`);\n }\n\n private appendDatatypeCondition(\n key: PgPatternKey,\n alias: string,\n operator: '$datatype' | '$notDatatype',\n datatype: PgResolvedDatatypeFilter,\n conditions: string[],\n builder: PgSqlBuilder,\n ): void {\n if (!termKindsForPatternKey(key).includes('literal')) {\n conditions.push('1 = 0');\n return;\n }\n if (datatype.kind === 'xsd-string') {\n conditions.push(operator === '$datatype'\n ? `${alias}.kind = 'literal' AND ${alias}.lang IS NULL AND ${alias}.datatype_id IS NULL`\n : `${alias}.kind = 'literal' AND NOT (${alias}.lang IS NULL AND ${alias}.datatype_id IS NULL)`);\n return;\n }\n if (datatype.kind === 'unknown') {\n conditions.push(operator === '$datatype' ? '1 = 0' : `${alias}.kind = 'literal'`);\n return;\n }\n conditions.push(operator === '$datatype'\n ? `${alias}.kind = 'literal' AND ${alias}.datatype_id = ${builder.add(datatype.id)}`\n : `${alias}.kind = 'literal' AND (${alias}.datatype_id IS NULL OR ${alias}.datatype_id != ${builder.add(datatype.id)})`);\n }\n\n private appendTextSearchCondition(\n key: PgPatternKey,\n alias: string,\n search: PgTextSearch,\n conditions: string[],\n builder: PgSqlBuilder,\n queryPlan: string[],\n ): void {\n const kinds = termKindsForPatternKey(key);\n const kindArray = builder.add(kinds);\n const normalized = search.value.toLowerCase();\n switch (search.operator) {\n case '$contains':\n conditions.push(`${alias}.kind = ANY(${kindArray}::text[])\n AND ${alias}.normalized_text LIKE ${builder.add(`%${escapeLikePattern(normalized)}%`)} ESCAPE '\\\\'\n AND strpos(${alias}.value, ${builder.add(search.value)}) > 0`);\n queryPlan.push(`TextSearch(${key}$contains)`);\n return;\n case '$endsWith':\n conditions.push(`${alias}.kind = ANY(${kindArray}::text[])\n AND ${alias}.normalized_text LIKE ${builder.add(`%${escapeLikePattern(normalized)}`)} ESCAPE '\\\\'\n AND right(${alias}.value, length(${builder.add(search.value)})) = ${builder.add(search.value)}`);\n queryPlan.push(`TextSearch(${key}$endsWith)`);\n return;\n default: {\n const exhaustive: never = search.operator;\n throw new Error(`Unsupported PostgreSQL RDF-3X text search operator: ${exhaustive}`);\n }\n }\n }\n\n private appendObjectRangeCondition(\n alias: string,\n range: PgObjectRange,\n conditions: string[],\n builder: PgSqlBuilder,\n queryPlan: string[],\n ): void {\n if (range.mode === 'numeric') {\n conditions.push(`${alias}.kind = 'literal'`);\n conditions.push(`${alias}.numeric_value IS NOT NULL`);\n if (range.min !== undefined) conditions.push(`${alias}.numeric_value ${range.minInclusive ? '>=' : '>'} ${builder.add(range.min)}`);\n if (range.max !== undefined) conditions.push(`${alias}.numeric_value ${range.maxInclusive ? '<=' : '<'} ${builder.add(range.max)}`);\n queryPlan.push(`NumericRange(object${rangeSuffix(range)})`);\n return;\n }\n conditions.push(`${alias}.kind = ANY(${builder.add(OBJECT_RANGE_KINDS)}::text[])`);\n if (range.min !== undefined) conditions.push(`${alias}.value ${range.minInclusive ? '>=' : '>'} ${builder.add(range.min)}`);\n if (range.max !== undefined) conditions.push(`${alias}.value ${range.maxInclusive ? '<=' : '<'} ${builder.add(range.max)}`);\n queryPlan.push(`LexicalRange(object${rangeSuffix(range)})`);\n }\n\n private mergeJoinConditions(source: PgJoinSource, variableColumns: Map<string, string>): string[] {\n const conditions: string[] = [];\n for (const key of PATTERN_KEYS) {\n const variableName = source.entry.variables[key];\n if (!variableName) continue;\n const existing = variableColumns.get(variableName);\n if (existing) {\n conditions.push(`${existing} = ${source.alias}.${TERM_COLUMN[key]}`);\n }\n }\n return conditions;\n }\n\n private choosePermutation(resolved: PgResolvedPattern, preferredKey?: PgTermKey): PgPermutation {\n const has = (key: PgTermKey): boolean => resolved.ids[key] !== undefined || Boolean(resolved.idSets[key]?.length);\n const hasObjectConstraint = has('object') || Boolean(resolved.objectRange) || Boolean(resolved.termFilters.object);\n if (preferredKey === 'subject') {\n if (has('predicate')) return this.permutation('PSO');\n if (hasObjectConstraint) return this.permutation('OSP');\n return this.permutation('SPO');\n }\n if (preferredKey === 'predicate') {\n if (has('subject')) return this.permutation('SPO');\n if (hasObjectConstraint) return this.permutation('OPS');\n return this.permutation('PSO');\n }\n if (preferredKey === 'object') {\n if (has('predicate')) return this.permutation('POS');\n if (has('subject')) return this.permutation('SOP');\n return this.permutation('OSP');\n }\n if (has('subject') && has('predicate')) return this.permutation('SPO');\n if (has('subject') && hasObjectConstraint) return this.permutation('SOP');\n if (has('predicate') && has('subject')) return this.permutation('PSO');\n if (has('predicate') && hasObjectConstraint) return this.permutation('POS');\n if (hasObjectConstraint && has('subject')) return this.permutation('OSP');\n if (hasObjectConstraint && has('predicate')) return this.permutation('OPS');\n if (has('subject')) return this.permutation('SPO');\n if (has('predicate')) return this.permutation('PSO');\n if (hasObjectConstraint) return this.permutation('OSP');\n return this.permutation('SPO');\n }\n\n private permutation(name: PgPermutationName): PgPermutation {\n const permutation = PERMUTATIONS.find((candidate) => candidate.name === name);\n if (!permutation) throw new Error(`Unknown PostgreSQL RDF-3X permutation: ${name}`);\n return permutation;\n }\n\n private async estimateResolvedRows(resolved: PgResolvedPattern): Promise<number> {\n const compiled = this.compileScanSql(resolved, { limit: 0 });\n return this.scalarCount(compiled.countSql, compiled.countParams);\n }\n\n private async estimateResolvedDistinctRows(resolved: PgResolvedPattern, key: PgPatternKey): Promise<number> {\n const compiled = this.compileScanSql(resolved, { limit: 0 });\n const column = TERM_COLUMN[key];\n const distinctSql = compiled.countSql.replace(\n 'SELECT COUNT(*) AS count',\n `SELECT COUNT(DISTINCT q.${column}) AS count`,\n );\n return this.scalarCount(distinctSql, compiled.countParams);\n }\n\n private orderJoinSources(sources: PgJoinSource[]): PgJoinSource[] {\n const remaining = [...sources];\n const selected: PgJoinSource[] = [];\n const selectedVariables = new Set<string>();\n while (remaining.length > 0) {\n const hasSelectedVariables = selectedVariables.size > 0;\n remaining.sort((left, right) => {\n const leftConnected = !hasSelectedVariables || joinSourceVariables(left).some((variableName) => selectedVariables.has(variableName));\n const rightConnected = !hasSelectedVariables || joinSourceVariables(right).some((variableName) => selectedVariables.has(variableName));\n return Number(rightConnected) - Number(leftConnected)\n || left.estimateRows - right.estimateRows\n || left.inputIndex - right.inputIndex;\n });\n const [next] = remaining.splice(0, 1);\n selected.push(next);\n for (const variableName of joinSourceVariables(next)) {\n selectedVariables.add(variableName);\n }\n }\n return selected;\n }\n\n private buildOrderClause(options: QueryOptions | undefined, alias: string): string {\n if (!options?.order || options.order.length === 0) return '';\n const directions = 'orderDirections' in options && Array.isArray((options as QueryOptions & { orderDirections?: Array<'asc' | 'desc'> }).orderDirections)\n ? (options as QueryOptions & { orderDirections?: Array<'asc' | 'desc'> }).orderDirections as Array<'asc' | 'desc'>\n : options.order.map(() => (options.reverse ? 'desc' : 'asc'));\n return ` ORDER BY ${options.order.map((key, index) => `${alias}.${TERM_COLUMN[key]} ${(directions[index] ?? 'asc').toUpperCase()}`).join(', ')}`;\n }\n\n private buildJoinOrderClause(\n orderBy: RdfQuery['orderBy'] | undefined,\n variableColumns: Map<string, string>,\n ): { joins: string; orderBy: string } {\n if (!orderBy || orderBy.length === 0) return { joins: '', orderBy: '' };\n const joins: string[] = [];\n const orders: string[] = [];\n for (const [index, entry] of orderBy.entries()) {\n const column = variableColumns.get(entry.variable);\n if (!column) throw new Error(`Postgres RDF-3X join cannot order by unbound variable: ${entry.variable}`);\n const alias = `join_order_t${index}`;\n joins.push(` JOIN rdf_terms ${alias} ON ${alias}.id = ${column}`);\n orders.push(`${alias}.value ${entry.direction === 'desc' ? 'DESC' : 'ASC'}`);\n }\n return { joins: joins.join(''), orderBy: ` ORDER BY ${orders.join(', ')}` };\n }\n\n private buildPagination(\n options: { limit?: number; offset?: number } | undefined,\n builder: PgSqlBuilder,\n ): { sql: string; paramCount: number } {\n let sql = '';\n let paramCount = 0;\n if (options?.limit !== undefined) {\n sql += ` LIMIT ${builder.add(Math.max(0, options.limit))}`;\n paramCount++;\n }\n if (options?.offset !== undefined) {\n if (options.limit === undefined) {\n sql += ' LIMIT ALL';\n }\n sql += ` OFFSET ${builder.add(Math.max(0, options.offset))}`;\n paramCount++;\n }\n return { sql, paramCount };\n }\n\n private async rowsToQuads(rows: PgQuadIdRow[]): Promise<Quad[]> {\n const ids = rows.flatMap((row) => [row.graph_id, row.subject_id, row.predicate_id, row.object_id]);\n const terms = await this.requireDictionary().rowsForIds(ids);\n return rows.map((row) => quad(\n this.requiredTerm(terms, row.subject_id) as any,\n this.requiredTerm(terms, row.predicate_id) as any,\n this.requiredTerm(terms, row.object_id) as any,\n this.requiredTerm(terms, row.graph_id) as any,\n ));\n }\n\n private async joinRowsToBindings(\n rows: Array<Record<string, unknown>>,\n variableAliases: Map<string, string>,\n aggregateAliases?: Map<string, string>,\n aggregateTypes?: Map<string, 'integer' | 'decimal'>,\n ): Promise<RdfBindingRow[]> {\n const termIds = rows.flatMap((row) => [...variableAliases.values()]\n .map((alias) => row[alias])\n .map(pgInteger)\n .filter((value): value is number => value !== undefined));\n const terms = await this.requireDictionary().rowsForIds(termIds);\n return rows.map((row) => {\n const binding: RdfBindingRow = {};\n for (const [variableName, alias] of variableAliases) {\n const id = pgInteger(row[alias]);\n if (id !== undefined) binding[variableName] = this.requiredTerm(terms, id);\n }\n for (const [variableName, alias] of aggregateAliases ?? []) {\n const type = aggregateTypes?.get(variableName) ?? 'integer';\n const value = type === 'decimal' ? pgNumber(row[alias]) : pgInteger(row[alias]);\n if (value !== undefined) {\n binding[variableName] = DataFactory.literal(\n String(value),\n DataFactory.namedNode(type === 'decimal' ? XSD_DECIMAL : XSD_INTEGER),\n ) as Term;\n }\n }\n return binding;\n });\n }\n\n private indexMetrics(\n indexChoice: string,\n matchedRows: number,\n returnedRows: number,\n start: number,\n queryPlan: string[],\n ): RdfIndexMetrics {\n return {\n engine: 'solid-rdf',\n indexChoice,\n matchedRows,\n returnedRows,\n durationMs: Date.now() - start,\n queryPlan,\n };\n }\n\n private localMetrics(\n start: number,\n scannedRows: number,\n joinedRows: number,\n returnedRows: number,\n indexChoices: string[],\n plan: string[],\n filtersPushedDown = 0,\n ): RdfQueryMetrics {\n return {\n engine: 'solid-rdf',\n plan,\n scannedRows,\n joinedRows,\n returnedRows,\n durationMs: Date.now() - start,\n indexChoices,\n cardinalityEstimates: 0,\n distinctCardinalityEstimates: 0,\n searchCardinalityEstimates: 0,\n filtersApplied: 0,\n filtersPushedDown,\n };\n }\n\n private async insertQuads(\n executor: AsyncSqlExecutor,\n dictionary: PostgresRdfTermDictionary,\n quads: Quad[],\n sourceId: number | null,\n sourceLineNo: number | null,\n ): Promise<PgQuadIdRow[]> {\n if (quads.length === 0) {\n return [];\n }\n\n const termIds = await dictionary.getOrCreateMany(quads.flatMap((quadValue) => [\n quadValue.graph,\n quadValue.subject,\n quadValue.predicate,\n quadValue.object,\n ]));\n const rowsByKey = new Map<string, PgQuadIdRow>();\n for (let index = 0; index < quads.length; index += 1) {\n const offset = index * 4;\n const row = {\n graph_id: termIds[offset],\n subject_id: termIds[offset + 1],\n predicate_id: termIds[offset + 2],\n object_id: termIds[offset + 3],\n };\n rowsByKey.set(`${row.graph_id}\\u001f${row.subject_id}\\u001f${row.predicate_id}\\u001f${row.object_id}`, row);\n }\n\n const rows = [...rowsByKey.values()];\n if (rows.length >= POSTGRES_RDF_BULK_STAGING_MIN_ROWS) {\n await this.insertQuadRowsViaStagingTable(executor, rows, sourceId, sourceLineNo);\n return rows;\n }\n\n await this.insertQuadRowsViaUnnest(executor, rows, sourceId, sourceLineNo);\n return rows;\n }\n\n private async insertQuadRowsViaUnnest(\n executor: AsyncSqlExecutor,\n rows: PgQuadIdRow[],\n sourceId: number | null,\n sourceLineNo: number | null,\n ): Promise<void> {\n for (const chunk of chunkArray(rows, POSTGRES_RDF_BULK_UNNEST_CHUNK_SIZE)) {\n await executor.exec(`\n INSERT INTO rdf_quads (\n graph_id,\n subject_id,\n predicate_id,\n object_id,\n source_file_id,\n source_line_no\n )\n SELECT\n graph_id,\n subject_id,\n predicate_id,\n object_id,\n $5::bigint AS source_file_id,\n $6::bigint AS source_line_no\n FROM UNNEST(\n $1::bigint[],\n $2::bigint[],\n $3::bigint[],\n $4::bigint[]\n ) AS input(\n graph_id,\n subject_id,\n predicate_id,\n object_id\n )\n ON CONFLICT (graph_id, subject_id, predicate_id, object_id)\n DO UPDATE SET\n source_file_id = EXCLUDED.source_file_id,\n source_line_no = EXCLUDED.source_line_no\n `, [\n chunk.map((row) => row.graph_id),\n chunk.map((row) => row.subject_id),\n chunk.map((row) => row.predicate_id),\n chunk.map((row) => row.object_id),\n sourceId,\n sourceLineNo,\n ]);\n }\n }\n\n private async insertQuadRowsViaStagingTable(\n executor: AsyncSqlExecutor,\n rows: PgQuadIdRow[],\n sourceId: number | null,\n sourceLineNo: number | null,\n ): Promise<void> {\n const stageTable = `rdf_quads_bulk_stage_${randomUUID().replace(/-/g, '')}`;\n await executor.exec(`\n CREATE TEMP TABLE ${stageTable} (\n graph_id BIGINT NOT NULL,\n subject_id BIGINT NOT NULL,\n predicate_id BIGINT NOT NULL,\n object_id BIGINT NOT NULL,\n source_file_id BIGINT,\n source_line_no BIGINT\n )\n `);\n try {\n const copied = await executor.copyFromRows?.({\n table: stageTable,\n columns: [\n 'graph_id',\n 'subject_id',\n 'predicate_id',\n 'object_id',\n 'source_file_id',\n 'source_line_no',\n ],\n rows: rows.map((row) => [\n row.graph_id,\n row.subject_id,\n row.predicate_id,\n row.object_id,\n sourceId,\n sourceLineNo,\n ]),\n });\n if (!copied) {\n for (const chunk of chunkArray(rows, POSTGRES_RDF_BULK_UNNEST_CHUNK_SIZE)) {\n await executor.exec(`\n INSERT INTO ${stageTable} (\n graph_id,\n subject_id,\n predicate_id,\n object_id,\n source_file_id,\n source_line_no\n )\n SELECT\n graph_id,\n subject_id,\n predicate_id,\n object_id,\n $5::bigint AS source_file_id,\n $6::bigint AS source_line_no\n FROM UNNEST(\n $1::bigint[],\n $2::bigint[],\n $3::bigint[],\n $4::bigint[]\n ) AS input(\n graph_id,\n subject_id,\n predicate_id,\n object_id\n )\n `, [\n chunk.map((row) => row.graph_id),\n chunk.map((row) => row.subject_id),\n chunk.map((row) => row.predicate_id),\n chunk.map((row) => row.object_id),\n sourceId,\n sourceLineNo,\n ]);\n }\n }\n\n await executor.exec(`\n INSERT INTO rdf_quads (\n graph_id,\n subject_id,\n predicate_id,\n object_id,\n source_file_id,\n source_line_no\n )\n SELECT DISTINCT\n graph_id,\n subject_id,\n predicate_id,\n object_id,\n source_file_id,\n source_line_no\n FROM ${stageTable}\n ON CONFLICT (graph_id, subject_id, predicate_id, object_id)\n DO UPDATE SET\n source_file_id = EXCLUDED.source_file_id,\n source_line_no = EXCLUDED.source_line_no\n `);\n } finally {\n await executor.exec(`DROP TABLE IF EXISTS ${stageTable}`);\n }\n }\n\n private async quadRowsForSource(sourceId: number, executor = this.requireExecutor()): Promise<PgQuadIdRow[]> {\n return executor.query<PgQuadIdRow>(`\n SELECT graph_id, subject_id, predicate_id, object_id\n FROM ${RDF_FACTS_TABLE}\n WHERE source_file_id = $1\n `, [sourceId]);\n }\n\n private async markDirtyQuads(\n executor: AsyncSqlExecutor,\n dictionary: PostgresRdfTermDictionary,\n quads: Quad[],\n ): Promise<void> {\n if (quads.length === 0) {\n return;\n }\n const rows: PgQuadIdRow[] = [];\n for (const quadValue of quads) {\n const graphId = await dictionary.find(quadValue.graph);\n const subjectId = await dictionary.find(quadValue.subject);\n const predicateId = await dictionary.find(quadValue.predicate);\n const objectId = await dictionary.find(quadValue.object);\n if (graphId === undefined || subjectId === undefined || predicateId === undefined || objectId === undefined) {\n continue;\n }\n rows.push({\n graph_id: graphId,\n subject_id: subjectId,\n predicate_id: predicateId,\n object_id: objectId,\n });\n }\n await this.markDirtyQuadRows(executor, rows);\n }\n\n private async markDirtyQuadRows(executor: AsyncSqlExecutor, rows: PgQuadIdRow[]): Promise<void> {\n if (rows.length === 0) {\n return;\n }\n\n const graphIds = new Set<number>();\n const pairKeys = new Map<string, { projection: string; leftId: number; rightId: number }>();\n const termKeys = new Map<string, { projection: string; termId: number }>();\n\n for (const row of rows) {\n graphIds.add(row.graph_id);\n for (const projection of PAIR_PROJECTIONS) {\n const leftId = row[projection.columns[0]];\n const rightId = row[projection.columns[1]];\n pairKeys.set(`${projection.name}\\u001f${leftId}\\u001f${rightId}`, {\n projection: projection.name,\n leftId,\n rightId,\n });\n }\n for (const projection of TERM_PROJECTIONS) {\n const termId = row[projection.column];\n termKeys.set(`${projection.name}\\u001f${termId}`, {\n projection: projection.name,\n termId,\n });\n }\n }\n\n await this.insertDirtyGraphIds(executor, [...graphIds]);\n await this.insertDirtyPairKeys(executor, [...pairKeys.values()]);\n await this.insertDirtyTermKeys(executor, [...termKeys.values()]);\n }\n\n private async insertDirtyGraphIds(executor: AsyncSqlExecutor, graphIds: number[]): Promise<void> {\n for (const chunk of chunkArray(graphIds, POSTGRES_RDF_BULK_UNNEST_CHUNK_SIZE)) {\n if (chunk.length === 0) continue;\n await executor.exec(`\n INSERT INTO ${RDF3X_DIRTY_GRAPH_TABLE} (graph_id)\n SELECT graph_id\n FROM UNNEST($1::bigint[]) AS input(graph_id)\n ON CONFLICT DO NOTHING\n `, [chunk]);\n }\n }\n\n private async insertDirtyPairKeys(\n executor: AsyncSqlExecutor,\n pairs: Array<{ projection: string; leftId: number; rightId: number }>,\n ): Promise<void> {\n for (const chunk of chunkArray(pairs, POSTGRES_RDF_BULK_UNNEST_CHUNK_SIZE)) {\n if (chunk.length === 0) continue;\n await executor.exec(`\n INSERT INTO ${RDF3X_DIRTY_PAIR_TABLE} (projection, left_id, right_id)\n SELECT projection, left_id, right_id\n FROM UNNEST(\n $1::text[],\n $2::bigint[],\n $3::bigint[]\n ) AS input(projection, left_id, right_id)\n ON CONFLICT DO NOTHING\n `, [\n chunk.map((row) => row.projection),\n chunk.map((row) => row.leftId),\n chunk.map((row) => row.rightId),\n ]);\n }\n }\n\n private async insertDirtyTermKeys(\n executor: AsyncSqlExecutor,\n terms: Array<{ projection: string; termId: number }>,\n ): Promise<void> {\n for (const chunk of chunkArray(terms, POSTGRES_RDF_BULK_UNNEST_CHUNK_SIZE)) {\n if (chunk.length === 0) continue;\n await executor.exec(`\n INSERT INTO ${RDF3X_DIRTY_TERM_TABLE} (projection, term_id)\n SELECT projection, term_id\n FROM UNNEST(\n $1::text[],\n $2::bigint[]\n ) AS input(projection, term_id)\n ON CONFLICT DO NOTHING\n `, [\n chunk.map((row) => row.projection),\n chunk.map((row) => row.termId),\n ]);\n }\n }\n\n private async withRetryableWrite<T>(operation: () => Promise<T>): Promise<T> {\n let attempt = 0;\n while (true) {\n try {\n return await operation();\n } catch (error) {\n const delayMs = POSTGRES_RDF_WRITE_RETRY_DELAYS_MS[attempt];\n if (delayMs === undefined || !isRetryablePostgresWriteError(error)) {\n throw error;\n }\n attempt += 1;\n await sleep(delayMs);\n }\n }\n }\n\n private async deleteExactQuad(\n executor: AsyncSqlExecutor,\n dictionary: PostgresRdfTermDictionary,\n value: Quad,\n ): Promise<number> {\n const graphId = await dictionary.find(value.graph);\n const subjectId = await dictionary.find(value.subject);\n const predicateId = await dictionary.find(value.predicate);\n const objectId = await dictionary.find(value.object);\n if (graphId === undefined || subjectId === undefined || predicateId === undefined || objectId === undefined) {\n return 0;\n }\n const result = await executor.query<{ one: number }>(\n `\n DELETE FROM rdf_quads\n WHERE graph_id = $1\n AND subject_id = $2\n AND predicate_id = $3\n AND object_id = $4\n RETURNING 1 AS one\n `,\n [graphId, subjectId, predicateId, objectId],\n );\n return result.length;\n }\n\n private async upsertSource(source: RdfSourceInput, executor = this.requireExecutor()): Promise<number> {\n const row = await executor.query<{ id: number }>(`\n INSERT INTO rdf_sources (\n source,\n workspace,\n local_path,\n content_type,\n source_version,\n last_indexed_at\n )\n VALUES ($1, $2, $3, $4, $5, NOW())\n ON CONFLICT (source) DO UPDATE\n SET\n workspace = EXCLUDED.workspace,\n local_path = EXCLUDED.local_path,\n content_type = EXCLUDED.content_type,\n source_version = EXCLUDED.source_version,\n last_indexed_at = NOW()\n RETURNING id\n `, [\n source.source,\n source.workspace,\n source.localPath ?? null,\n source.contentType ?? null,\n source.sourceVersion ?? null,\n ]);\n const id = row[0]?.id;\n if (id === undefined) {\n throw new Error(`Failed to upsert RDF source ${source.source}`);\n }\n return id;\n }\n\n private async markDirtySource(\n executor: AsyncSqlExecutor,\n source: RdfSourceInput,\n operation: PgDirtySourceOperation,\n ): Promise<void> {\n await executor.exec(`\n INSERT INTO ${RDF_DIRTY_SOURCE_TABLE} (\n source,\n workspace,\n local_path,\n content_type,\n source_version,\n operation,\n changed_at\n )\n VALUES ($1, $2, $3, $4, $5, $6, clock_timestamp())\n ON CONFLICT (source) DO UPDATE\n SET\n workspace = EXCLUDED.workspace,\n local_path = EXCLUDED.local_path,\n content_type = EXCLUDED.content_type,\n source_version = EXCLUDED.source_version,\n operation = EXCLUDED.operation,\n changed_at = clock_timestamp()\n `, [\n source.source,\n source.workspace,\n source.localPath ?? null,\n source.contentType ?? null,\n source.sourceVersion ?? null,\n operation,\n ]);\n }\n\n private async markDirtySourceRow(\n executor: AsyncSqlExecutor,\n source: PostgresRdfSourceRow,\n operation: PgDirtySourceOperation,\n ): Promise<void> {\n await this.markDirtySource(executor, {\n source: source.source,\n workspace: source.workspace,\n localPath: source.local_path ?? undefined,\n contentType: source.content_type ?? undefined,\n sourceVersion: source.source_version ?? undefined,\n }, operation);\n }\n\n private async replaceAccessControlOverrideTargets(\n executor: AsyncSqlExecutor,\n invalidation: RdfAccessControlCacheInvalidation,\n ): Promise<void> {\n if (invalidation.sourceKeys.length === 0) {\n return;\n }\n await this.deleteAccessControlOverrideTargets(executor, invalidation.sourceKeys);\n await this.mergeAccessControlOverrideTargets(executor, invalidation);\n }\n\n private async mergeAccessControlOverrideTargets(\n executor: AsyncSqlExecutor,\n invalidation: RdfAccessControlCacheInvalidation,\n ): Promise<void> {\n const rows = invalidation.sourceTargets.flatMap((target) => target.basePaths.map((basePath) => ({\n sourceKey: target.sourceKey,\n basePath,\n sourceVersion: target.sourceVersion,\n })));\n if (rows.length === 0) {\n return;\n }\n\n const values = rows.map((_, index) => {\n const offset = index * 3;\n return `($${offset + 1}, $${offset + 2}, $${offset + 3}, NOW())`;\n }).join(', ');\n const params = rows.flatMap((row) => [row.sourceKey, row.basePath, row.sourceVersion]);\n await executor.exec(`\n INSERT INTO ${RDF_ACCESS_CONTROL_OVERRIDE_TABLE} (\n source_key,\n affected_base_path,\n source_version,\n updated_at\n )\n VALUES ${values}\n ON CONFLICT (source_key, affected_base_path) DO UPDATE\n SET source_version = EXCLUDED.source_version,\n updated_at = NOW()\n `, params);\n }\n\n private async deleteAccessControlOverrideTargets(\n executor: AsyncSqlExecutor,\n sourceKeys: string[],\n ): Promise<void> {\n if (sourceKeys.length === 0) {\n return;\n }\n await executor.exec(`\n DELETE FROM ${RDF_ACCESS_CONTROL_OVERRIDE_TABLE}\n WHERE source_key = ANY($1::text[])\n `, [sourceKeys]);\n }\n\n private async accessControlOverrideTargetsForSources(\n executor: AsyncSqlExecutor,\n sourceKeys: string[],\n ): Promise<RdfAccessControlOverrideTargets[]> {\n if (sourceKeys.length === 0) {\n return [];\n }\n const rows = await executor.query<{\n source_key: string;\n affected_base_path: string;\n source_version: string | null;\n }>(`\n SELECT DISTINCT source_key, affected_base_path, source_version\n FROM ${RDF_ACCESS_CONTROL_OVERRIDE_TABLE}\n WHERE source_key = ANY($1::text[])\n ORDER BY source_key, source_version, affected_base_path\n `, [sourceKeys]);\n const targetsBySourceVersion = new Map<string, RdfAccessControlOverrideTargets>();\n for (const row of rows) {\n const key = `${row.source_key}\\0${row.source_version ?? ''}`;\n const existing = targetsBySourceVersion.get(key);\n if (existing) {\n existing.basePaths.push(row.affected_base_path);\n continue;\n }\n targetsBySourceVersion.set(key, {\n sourceKey: row.source_key,\n basePaths: [row.affected_base_path],\n sourceVersion: row.source_version,\n });\n }\n return [...targetsBySourceVersion.values()].map((target) => ({\n ...target,\n basePaths: uniqueStrings(target.basePaths).sort(),\n }));\n }\n\n private async findSourceRow(source: string, executor = this.requireExecutor()): Promise<PostgresRdfSourceRow | undefined> {\n const rows = await executor.query<PostgresRdfSourceRow>('SELECT * FROM rdf_sources WHERE source = $1', [source]);\n return rows[0];\n }\n\n private async bumpFactsDataVersion(executor = this.requireExecutor()): Promise<void> {\n await executor.exec(`\n UPDATE rdf_index_metadata\n SET value = (COALESCE(NULLIF(value, ''), '0')::bigint + 1)::text\n WHERE key = 'data_version'\n `);\n }\n\n private async readFactsDataVersion(): Promise<number> {\n const row = await this.requireExecutor().query<{ value: string }>(\"SELECT value FROM rdf_index_metadata WHERE key = 'data_version'\");\n return Number(row[0]?.value ?? 0) || 0;\n }\n\n private async readRdf3xFactsDataVersion(): Promise<number> {\n try {\n const row = await this.requireExecutor().query<{ value: string }>(\"SELECT value FROM rdf3x_metadata WHERE key = 'facts_data_version'\");\n return Number(row[0]?.value ?? 0) || 0;\n } catch {\n return 0;\n }\n }\n\n private async ensureReady(): Promise<void> {\n await this.open();\n }\n\n private async scalarCount(sql: string, params: unknown[] = []): Promise<number> {\n const row = await this.requireExecutor().query<{ count: number }>(sql, params);\n return Number(row[0]?.count ?? 0) || 0;\n }\n\n private async factsStats(): Promise<RdfIndexStats> {\n const [termCount, quadCount, sourceCount, graphCount] = await Promise.all([\n this.scalarCount('SELECT COUNT(*) AS count FROM rdf_terms'),\n this.scalarCount(`SELECT COUNT(*) AS count FROM ${RDF_FACTS_TABLE}`),\n this.scalarCount('SELECT COUNT(*) AS count FROM rdf_sources'),\n this.scalarCount(`SELECT COUNT(DISTINCT graph_id) AS count FROM ${RDF_FACTS_TABLE}`),\n ]);\n const spaceObjects = await this.collectSpaceObjects(false);\n const databaseBytes = spaceObjects.reduce((sum, object) => sum + object.bytes, 0);\n return {\n termCount,\n quadCount,\n sourceCount,\n graphCount,\n databaseBytes,\n tableBytes: sumSpaceObjects(spaceObjects, 'table'),\n indexBytes: sumSpaceObjects(spaceObjects, 'index'),\n spaceObjects,\n serializedTermTextBytes: await this.scalarCount('SELECT COALESCE(SUM(length(value)), 0) AS count FROM rdf_terms'),\n literalDatatypeDistribution: await this.literalDatatypeDistribution(),\n cardinalityDistributions: await this.cardinalityDistributions(),\n };\n }\n\n private async schemaGraphSuggestions(options: PgNormalizedSchemaExplorerOptions): Promise<RdfCardinalityDistributions['graphs']> {\n const params: unknown[] = [];\n const conditions = schemaTermConditions('graph', options, params, true);\n const rows = await this.requireExecutor().query<{\n graph_id: number;\n quad_count: number | string;\n distinct_subjects: number | string;\n distinct_predicates: number | string;\n distinct_objects: number | string;\n }>(`\n SELECT\n q.graph_id,\n COUNT(*) AS quad_count,\n COUNT(DISTINCT q.subject_id) AS distinct_subjects,\n COUNT(DISTINCT q.predicate_id) AS distinct_predicates,\n COUNT(DISTINCT q.object_id) AS distinct_objects\n FROM ${RDF_FACTS_TABLE} q\n JOIN rdf_terms graph ON graph.id = q.graph_id\n ${conditions.length ? `WHERE ${conditions.join(' AND ')}` : ''}\n GROUP BY q.graph_id\n ORDER BY COUNT(*) DESC, q.graph_id ASC\n LIMIT ${addPgParam(params, options.limit)}\n `, params);\n const terms = await this.requireDictionary().rowsForIds(rows.map((row) => row.graph_id));\n return rows.map((row) => ({\n graph: this.cardinalityTerm(terms, row.graph_id),\n quadCount: Number(row.quad_count ?? 0) || 0,\n distinctSubjects: Number(row.distinct_subjects ?? 0) || 0,\n distinctPredicates: Number(row.distinct_predicates ?? 0) || 0,\n distinctObjects: Number(row.distinct_objects ?? 0) || 0,\n }));\n }\n\n private async schemaPredicateSuggestions(options: PgNormalizedSchemaExplorerOptions): Promise<RdfCardinalityDistributions['predicates']> {\n const params: unknown[] = [];\n const conditions = schemaTermConditions('predicate', options, params, false);\n const graphJoin = appendSchemaGraphPrefixCondition('q', 'graph', options, conditions, params);\n const rows = await this.requireExecutor().query<{\n predicate_id: number;\n quad_count: number | string;\n graph_count: number | string;\n distinct_subjects: number | string;\n distinct_objects: number | string;\n }>(`\n SELECT\n q.predicate_id,\n COUNT(*) AS quad_count,\n COUNT(DISTINCT q.graph_id) AS graph_count,\n COUNT(DISTINCT q.subject_id) AS distinct_subjects,\n COUNT(DISTINCT q.object_id) AS distinct_objects\n FROM ${RDF_FACTS_TABLE} q\n JOIN rdf_terms predicate ON predicate.id = q.predicate_id\n ${graphJoin}\n ${conditions.length ? `WHERE ${conditions.join(' AND ')}` : ''}\n GROUP BY q.predicate_id\n ORDER BY COUNT(*) DESC, q.predicate_id ASC\n LIMIT ${addPgParam(params, options.limit)}\n `, params);\n const terms = await this.requireDictionary().rowsForIds(rows.map((row) => row.predicate_id));\n return rows.map((row) => ({\n predicate: this.cardinalityTerm(terms, row.predicate_id),\n quadCount: Number(row.quad_count ?? 0) || 0,\n graphCount: Number(row.graph_count ?? 0) || 0,\n distinctSubjects: Number(row.distinct_subjects ?? 0) || 0,\n distinctObjects: Number(row.distinct_objects ?? 0) || 0,\n }));\n }\n\n private async schemaClassSuggestions(options: PgNormalizedSchemaExplorerOptions): Promise<RdfCardinalityDistributions['predicateObjects']> {\n const rdfTypeId = await this.requireDictionary().find(namedNode(RDF_TYPE));\n if (rdfTypeId === undefined) {\n return [];\n }\n const params: unknown[] = [rdfTypeId];\n const conditions = ['q.predicate_id = $1', ...schemaTermConditions('object', options, params, false)];\n const graphJoin = appendSchemaGraphPrefixCondition('q', 'graph', options, conditions, params);\n const rows = await this.requireExecutor().query<{\n predicate_id: number;\n object_id: number;\n quad_count: number | string;\n graph_count: number | string;\n distinct_subjects: number | string;\n }>(`\n SELECT\n q.predicate_id,\n q.object_id,\n COUNT(*) AS quad_count,\n COUNT(DISTINCT q.graph_id) AS graph_count,\n COUNT(DISTINCT q.subject_id) AS distinct_subjects\n FROM ${RDF_FACTS_TABLE} q\n JOIN rdf_terms object ON object.id = q.object_id\n ${graphJoin}\n WHERE ${conditions.join(' AND ')}\n GROUP BY q.predicate_id, q.object_id\n ORDER BY COUNT(*) DESC, q.object_id ASC\n LIMIT ${addPgParam(params, options.limit)}\n `, params);\n const terms = await this.requireDictionary().rowsForIds(rows.flatMap((row) => [row.predicate_id, row.object_id]));\n return rows.map((row) => ({\n predicate: this.cardinalityTerm(terms, row.predicate_id),\n object: this.cardinalityTerm(terms, row.object_id),\n quadCount: Number(row.quad_count ?? 0) || 0,\n graphCount: Number(row.graph_count ?? 0) || 0,\n distinctSubjects: Number(row.distinct_subjects ?? 0) || 0,\n }));\n }\n\n private async schemaTermSuggestions(options: PgNormalizedSchemaExplorerOptions): Promise<RdfSchemaExplorerTermEntry[]> {\n const params: unknown[] = [];\n const graphJoin = options.graphPrefix\n ? `JOIN rdf_terms graph ON graph.id = q.graph_id AND graph.value LIKE ${addPgParam(params, `${options.graphPrefix}%`)}`\n : '';\n const termConditions = schemaTermConditions('term', options, params, false);\n const rows = await this.requireExecutor().query<{\n term_id: number;\n subject_quad_count: number | string;\n predicate_quad_count: number | string;\n object_quad_count: number | string;\n graph_quad_count: number | string;\n }>(`\n WITH scoped_quads AS (\n SELECT q.*\n FROM ${RDF_FACTS_TABLE} q\n ${graphJoin}\n ),\n uses AS (\n SELECT subject_id AS term_id, COUNT(*) AS subject_quad_count, 0::bigint AS predicate_quad_count, 0::bigint AS object_quad_count, 0::bigint AS graph_quad_count\n FROM scoped_quads GROUP BY subject_id\n UNION ALL\n SELECT predicate_id AS term_id, 0::bigint, COUNT(*) AS predicate_quad_count, 0::bigint, 0::bigint\n FROM scoped_quads GROUP BY predicate_id\n UNION ALL\n SELECT object_id AS term_id, 0::bigint, 0::bigint, COUNT(*) AS object_quad_count, 0::bigint\n FROM scoped_quads GROUP BY object_id\n UNION ALL\n SELECT graph_id AS term_id, 0::bigint, 0::bigint, 0::bigint, COUNT(*) AS graph_quad_count\n FROM scoped_quads GROUP BY graph_id\n )\n SELECT\n uses.term_id,\n SUM(uses.subject_quad_count) AS subject_quad_count,\n SUM(uses.predicate_quad_count) AS predicate_quad_count,\n SUM(uses.object_quad_count) AS object_quad_count,\n SUM(uses.graph_quad_count) AS graph_quad_count\n FROM uses\n JOIN rdf_terms term ON term.id = uses.term_id\n ${termConditions.length ? `WHERE ${termConditions.join(' AND ')}` : ''}\n GROUP BY uses.term_id\n ORDER BY (\n SUM(uses.subject_quad_count)\n + SUM(uses.predicate_quad_count)\n + SUM(uses.object_quad_count)\n + SUM(uses.graph_quad_count)\n ) DESC, uses.term_id ASC\n LIMIT ${addPgParam(params, options.limit)}\n `, params);\n const terms = await this.requireDictionary().rowsForIds(rows.map((row) => row.term_id));\n return rows.map((row) => ({\n term: this.cardinalityTerm(terms, row.term_id),\n subjectQuadCount: Number(row.subject_quad_count ?? 0) || 0,\n predicateQuadCount: Number(row.predicate_quad_count ?? 0) || 0,\n objectQuadCount: Number(row.object_quad_count ?? 0) || 0,\n graphQuadCount: Number(row.graph_quad_count ?? 0) || 0,\n }));\n }\n\n private async literalDatatypeDistribution(): Promise<RdfLiteralDatatypeDistribution[]> {\n const rows = await this.requireExecutor().query<{\n datatype: string | null;\n term_count: number | string;\n object_quad_count: number | string | null;\n }>(`\n SELECT\n COALESCE(datatype.value, $1) AS datatype,\n COUNT(DISTINCT literal.id) AS term_count,\n COUNT(quad.object_id) AS object_quad_count\n FROM rdf_terms literal\n LEFT JOIN rdf_terms datatype ON datatype.id = literal.datatype_id\n LEFT JOIN ${RDF_FACTS_TABLE} quad ON quad.object_id = literal.id\n WHERE literal.kind = 'literal'\n GROUP BY COALESCE(datatype.value, $1)\n ORDER BY COUNT(quad.object_id) DESC, COUNT(DISTINCT literal.id) DESC, COALESCE(datatype.value, $1) ASC\n `, [XSD_STRING]);\n return rows.map((row) => ({\n datatype: row.datatype ?? XSD_STRING,\n termCount: Number(row.term_count ?? 0) || 0,\n objectQuadCount: Number(row.object_quad_count ?? 0) || 0,\n }));\n }\n\n private async cardinalityDistributions(limit = 100): Promise<RdfCardinalityDistributions> {\n const [\n graphs,\n predicates,\n predicateObjects,\n subjectPredicates,\n ] = await Promise.all([\n this.graphCardinalityDistribution(limit),\n this.predicateCardinalityDistribution(limit),\n this.predicateObjectCardinalityDistribution(limit),\n this.subjectPredicateCardinalityDistribution(limit),\n ]);\n return {\n graphs,\n predicates,\n predicateObjects,\n subjectPredicates,\n };\n }\n\n private async graphCardinalityDistribution(limit: number): Promise<RdfCardinalityDistributions['graphs']> {\n const rows = await this.requireExecutor().query<{\n graph_id: number;\n quad_count: number | string;\n distinct_subjects: number | string;\n distinct_predicates: number | string;\n distinct_objects: number | string;\n }>(`\n SELECT\n graph_id,\n COUNT(*) AS quad_count,\n COUNT(DISTINCT subject_id) AS distinct_subjects,\n COUNT(DISTINCT predicate_id) AS distinct_predicates,\n COUNT(DISTINCT object_id) AS distinct_objects\n FROM ${RDF_FACTS_TABLE}\n GROUP BY graph_id\n ORDER BY COUNT(*) DESC, graph_id ASC\n LIMIT $1\n `, [limit]);\n const terms = await this.requireDictionary().rowsForIds(rows.map((row) => row.graph_id));\n return rows.map((row) => ({\n graph: this.cardinalityTerm(terms, row.graph_id),\n quadCount: Number(row.quad_count ?? 0) || 0,\n distinctSubjects: Number(row.distinct_subjects ?? 0) || 0,\n distinctPredicates: Number(row.distinct_predicates ?? 0) || 0,\n distinctObjects: Number(row.distinct_objects ?? 0) || 0,\n }));\n }\n\n private async predicateCardinalityDistribution(limit: number): Promise<RdfCardinalityDistributions['predicates']> {\n const rows = await this.requireExecutor().query<{\n predicate_id: number;\n quad_count: number | string;\n graph_count: number | string;\n distinct_subjects: number | string;\n distinct_objects: number | string;\n }>(`\n SELECT\n predicate_id,\n COUNT(*) AS quad_count,\n COUNT(DISTINCT graph_id) AS graph_count,\n COUNT(DISTINCT subject_id) AS distinct_subjects,\n COUNT(DISTINCT object_id) AS distinct_objects\n FROM ${RDF_FACTS_TABLE}\n GROUP BY predicate_id\n ORDER BY COUNT(*) DESC, predicate_id ASC\n LIMIT $1\n `, [limit]);\n const terms = await this.requireDictionary().rowsForIds(rows.map((row) => row.predicate_id));\n return rows.map((row) => ({\n predicate: this.cardinalityTerm(terms, row.predicate_id),\n quadCount: Number(row.quad_count ?? 0) || 0,\n graphCount: Number(row.graph_count ?? 0) || 0,\n distinctSubjects: Number(row.distinct_subjects ?? 0) || 0,\n distinctObjects: Number(row.distinct_objects ?? 0) || 0,\n }));\n }\n\n private async predicateObjectCardinalityDistribution(limit: number): Promise<RdfCardinalityDistributions['predicateObjects']> {\n const rows = await this.requireExecutor().query<{\n predicate_id: number;\n object_id: number;\n quad_count: number | string;\n graph_count: number | string;\n distinct_subjects: number | string;\n }>(`\n SELECT\n predicate_id,\n object_id,\n COUNT(*) AS quad_count,\n COUNT(DISTINCT graph_id) AS graph_count,\n COUNT(DISTINCT subject_id) AS distinct_subjects\n FROM ${RDF_FACTS_TABLE}\n GROUP BY predicate_id, object_id\n ORDER BY COUNT(*) DESC, predicate_id ASC, object_id ASC\n LIMIT $1\n `, [limit]);\n const terms = await this.requireDictionary().rowsForIds(rows.flatMap((row) => [row.predicate_id, row.object_id]));\n return rows.map((row) => ({\n predicate: this.cardinalityTerm(terms, row.predicate_id),\n object: this.cardinalityTerm(terms, row.object_id),\n quadCount: Number(row.quad_count ?? 0) || 0,\n graphCount: Number(row.graph_count ?? 0) || 0,\n distinctSubjects: Number(row.distinct_subjects ?? 0) || 0,\n }));\n }\n\n private async subjectPredicateCardinalityDistribution(limit: number): Promise<RdfCardinalityDistributions['subjectPredicates']> {\n const rows = await this.requireExecutor().query<{\n subject_id: number;\n predicate_id: number;\n quad_count: number | string;\n graph_count: number | string;\n distinct_objects: number | string;\n }>(`\n SELECT\n subject_id,\n predicate_id,\n COUNT(*) AS quad_count,\n COUNT(DISTINCT graph_id) AS graph_count,\n COUNT(DISTINCT object_id) AS distinct_objects\n FROM ${RDF_FACTS_TABLE}\n GROUP BY subject_id, predicate_id\n ORDER BY COUNT(*) DESC, subject_id ASC, predicate_id ASC\n LIMIT $1\n `, [limit]);\n const terms = await this.requireDictionary().rowsForIds(rows.flatMap((row) => [row.subject_id, row.predicate_id]));\n return rows.map((row) => ({\n subject: this.cardinalityTerm(terms, row.subject_id),\n predicate: this.cardinalityTerm(terms, row.predicate_id),\n quadCount: Number(row.quad_count ?? 0) || 0,\n graphCount: Number(row.graph_count ?? 0) || 0,\n distinctObjects: Number(row.distinct_objects ?? 0) || 0,\n }));\n }\n\n private cardinalityTerm(termMap: Map<number, Term>, id: number): RdfCardinalityTerm {\n const term = this.requiredTerm(termMap, id);\n const result: RdfCardinalityTerm = {\n value: term.value,\n kind: postgresRdfTermKind(term),\n };\n if (term.termType === 'Literal') {\n if (term.datatype.value) {\n result.datatype = term.datatype.value;\n }\n if (term.language) {\n result.language = term.language;\n }\n }\n return result;\n }\n\n private async rdf3xStats(): Promise<Rdf3xIndexStats> {\n const spaceObjects = await this.collectSpaceObjects(true);\n const databaseBytes = spaceObjects.reduce((sum, object) => sum + object.bytes, 0);\n const uniqueTriples = await this.scalarCount(`\n SELECT COUNT(*) AS count\n FROM (\n SELECT DISTINCT subject_id, predicate_id, object_id\n FROM ${RDF_FACTS_TABLE}\n ) distinct_triples\n `);\n return {\n uniqueTriples,\n membershipCount: await this.scalarCount(`SELECT COUNT(*) AS count FROM ${RDF_FACTS_TABLE}`),\n graphCount: await this.scalarCount(`SELECT COUNT(*) AS count FROM ${RDF3X_GRAPH_PROJECTION_TABLE}`),\n factsDataVersion: await this.readRdf3xFactsDataVersion(),\n permutationRows: Object.fromEntries(PERMUTATIONS.map((permutation) => [permutation.name, uniqueTriples])) as Rdf3xIndexStats['permutationRows'],\n pairProjectionRows: Object.fromEntries(await Promise.all(PAIR_PROJECTIONS.map(async (projection) => [\n projection.name,\n await this.scalarCount(`SELECT COUNT(*) AS count FROM ${projection.table}`),\n ]))) as Rdf3xIndexStats['pairProjectionRows'],\n termProjectionRows: Object.fromEntries(await Promise.all(TERM_PROJECTIONS.map(async (projection) => [\n projection.name,\n await this.scalarCount(`SELECT COUNT(*) AS count FROM ${projection.table}`),\n ]))) as Rdf3xIndexStats['termProjectionRows'],\n databaseBytes,\n tableBytes: sumSpaceObjects(spaceObjects, 'table'),\n indexBytes: sumSpaceObjects(spaceObjects, 'index'),\n spaceObjects,\n };\n }\n\n private async queryResultCacheStats(): Promise<RdfQueryResultCacheStats> {\n const spaceObjects = await this.collectCacheSpaceObjects(RDF_QUERY_RESULT_CACHE_TABLE);\n return {\n entryCount: await this.scalarCount(`SELECT COUNT(*) AS count FROM ${RDF_QUERY_RESULT_CACHE_TABLE}`),\n scopeCount: await this.scalarCount(`SELECT COUNT(DISTINCT scope_hash) AS count FROM ${RDF_QUERY_RESULT_CACHE_TABLE}`),\n maxEntries: this.queryResultCacheMaxEntries(),\n ttlMs: this.queryResultCacheTtlMs(),\n ...this.queryResultCacheCounters,\n payloadBytes: await this.cachePayloadBytes(RDF_QUERY_RESULT_CACHE_TABLE),\n maxPayloadBytes: this.queryResultCacheMaxBytes(),\n tableBytes: sumSpaceObjects(spaceObjects, 'table'),\n indexBytes: sumSpaceObjects(spaceObjects, 'index'),\n totalBytes: spaceObjects.reduce((sum, object) => sum + object.bytes, 0),\n spaceObjects,\n };\n }\n\n private async materializedResultCacheStats(): Promise<RdfMaterializedResultCacheStats> {\n const spaceObjects = await this.collectCacheSpaceObjects(RDF_MATERIALIZED_RESULT_CACHE_TABLE);\n return {\n entryCount: await this.scalarCount(`SELECT COUNT(*) AS count FROM ${RDF_MATERIALIZED_RESULT_CACHE_TABLE}`),\n scopeCount: await this.scalarCount(`SELECT COUNT(DISTINCT scope_hash) AS count FROM ${RDF_MATERIALIZED_RESULT_CACHE_TABLE}`),\n maxEntries: this.materializedResultCacheMaxEntries(),\n ttlMs: this.materializedResultCacheTtlMs(),\n ...this.materializedResultCacheCounters,\n payloadBytes: await this.cachePayloadBytes(RDF_MATERIALIZED_RESULT_CACHE_TABLE),\n maxPayloadBytes: this.materializedResultCacheMaxBytes(),\n tableBytes: sumSpaceObjects(spaceObjects, 'table'),\n indexBytes: sumSpaceObjects(spaceObjects, 'index'),\n totalBytes: spaceObjects.reduce((sum, object) => sum + object.bytes, 0),\n spaceObjects,\n };\n }\n\n private async accessControlOverrideStats(): Promise<RdfAccessControlOverrideIndexStats> {\n const spaceObjects = await this.collectCacheSpaceObjects(RDF_ACCESS_CONTROL_OVERRIDE_TABLE);\n return {\n entryCount: await this.scalarCount(`SELECT COUNT(*) AS count FROM ${RDF_ACCESS_CONTROL_OVERRIDE_TABLE}`),\n tableBytes: sumSpaceObjects(spaceObjects, 'table'),\n indexBytes: sumSpaceObjects(spaceObjects, 'index'),\n totalBytes: spaceObjects.reduce((sum, object) => sum + object.bytes, 0),\n };\n }\n\n private derivedCacheStats(\n queryResultCache: RdfQueryResultCacheStats,\n materializedResultCache: RdfMaterializedResultCacheStats,\n queryTemplateCache: RdfQueryTemplateCacheStats,\n scopeStats: PgDerivedCacheScopeStats,\n ): RdfDerivedCacheStats {\n const cacheBytes = queryResultCache.payloadBytes\n + materializedResultCache.payloadBytes\n + queryTemplateCache.totalBytes;\n const maxCacheBytes = this.derivedCacheMaxBytes();\n const maxScopeBytes = this.derivedCacheScopeMaxBytes();\n return {\n cacheBytes,\n maxCacheBytes,\n cachePressure: bytePressure(cacheBytes, maxCacheBytes),\n maxScopeBytes,\n scopeVersionCount: scopeStats.scopeVersionCount,\n scopeEntries: scopeStats.scopeEntries,\n largestScopeBytes: scopeStats.largestScopeBytes,\n largestScopePressure: bytePressure(scopeStats.largestScopeBytes, maxScopeBytes),\n ...(scopeStats.largestScopeHash ? { largestScopeHash: scopeStats.largestScopeHash } : {}),\n ...(scopeStats.largestScopeFactsDataVersion !== undefined\n ? { largestScopeFactsDataVersion: scopeStats.largestScopeFactsDataVersion }\n : {}),\n evictionCount: this.derivedCacheEvictionCount(),\n evictions: { ...this.derivedCacheEvictions },\n queryResultPayloadBytes: queryResultCache.payloadBytes,\n materializedResultPayloadBytes: materializedResultCache.payloadBytes,\n queryTemplateBytes: queryTemplateCache.totalBytes,\n };\n }\n\n private recordDerivedCacheEviction(cause: keyof RdfDerivedCacheEvictionStats, count = 1): void {\n if (count <= 0) {\n return;\n }\n this.derivedCacheEvictions[cause] += count;\n }\n\n private recordQueryResultCacheCounter(kind: PgCacheCounterKind, count = 1): void {\n if (count <= 0) {\n return;\n }\n this.queryResultCacheCounters[kind] += count;\n }\n\n private recordMaterializedResultCacheCounter(kind: PgCacheCounterKind, count = 1): void {\n if (count <= 0) {\n return;\n }\n this.materializedResultCacheCounters[kind] += count;\n }\n\n private derivedCacheEvictionCount(): number {\n return Object.values(this.derivedCacheEvictions).reduce((sum, count) => sum + count, 0);\n }\n\n private async derivedCacheScopeStats(options: RdfDerivedCacheScopeStatsOptions = {}): Promise<PgDerivedCacheScopeStats> {\n const scopeOptions = normalizeDerivedCacheScopeStatsOptions(options);\n const params: unknown[] = [];\n const filters: string[] = [];\n const addParam = (value: unknown): string => {\n params.push(value);\n return `$${params.length}`;\n };\n if (scopeOptions.query) {\n const queryParam = addParam(sqlLikeContains(scopeOptions.query));\n filters.push(`LOWER(\n COALESCE(scope_hash, '') || ' ' ||\n COALESCE(scope_shape, '') || ' ' ||\n COALESCE(scope_principal, '') || ' ' ||\n COALESCE(scope_base_path, '') || ' ' ||\n COALESCE(scope_mode, '') || ' ' ||\n COALESCE(scope_authorization_model, '') || ' ' ||\n COALESCE(scope_permission_version, '')\n ) LIKE ${queryParam} ESCAPE '\\\\'`);\n }\n if (scopeOptions.principal) {\n filters.push(`scope_principal = ${addParam(scopeOptions.principal)}`);\n }\n if (scopeOptions.basePath) {\n filters.push(`scope_base_path = ${addParam(scopeOptions.basePath)}`);\n }\n if (scopeOptions.mode) {\n filters.push(`scope_mode = ${addParam(scopeOptions.mode)}`);\n }\n if (scopeOptions.authorizationModel) {\n filters.push(`scope_authorization_model = ${addParam(scopeOptions.authorizationModel)}`);\n }\n if (scopeOptions.permissionVersion) {\n filters.push(`scope_permission_version = ${addParam(scopeOptions.permissionVersion)}`);\n }\n const whereClause = filters.length > 0 ? `WHERE ${filters.join(' AND ')}` : '';\n const limitParam = addParam(scopeOptions.limit);\n const rows = await this.requireExecutor().query<{\n scope_hash: string;\n facts_data_version: number | string;\n payload_bytes: number | string;\n query_result_payload_bytes: number | string;\n materialized_result_payload_bytes: number | string;\n query_result_entries: number | string;\n materialized_result_entries: number | string;\n scope_shape: string | null;\n scope_principal: string | null;\n scope_base_path: string | null;\n scope_mode: string | null;\n scope_authorization_model: string | null;\n scope_permission_version: string | null;\n scope_version_count: number | string;\n }>(`\n WITH scoped_cache AS (\n SELECT\n 'query-result' AS kind,\n scope_hash,\n facts_data_version,\n scope_shape,\n scope_principal,\n scope_base_path,\n scope_mode,\n scope_authorization_model,\n scope_permission_version,\n OCTET_LENGTH(result_json) AS payload_bytes\n FROM ${RDF_QUERY_RESULT_CACHE_TABLE}\n UNION ALL\n SELECT\n 'materialized-result' AS kind,\n scope_hash,\n facts_data_version,\n scope_shape,\n scope_principal,\n scope_base_path,\n scope_mode,\n scope_authorization_model,\n scope_permission_version,\n OCTET_LENGTH(result_json) AS payload_bytes\n FROM ${RDF_MATERIALIZED_RESULT_CACHE_TABLE}\n ),\n filtered_scope AS (\n SELECT *\n FROM scoped_cache\n ${whereClause}\n ),\n scope_versions AS (\n SELECT\n scope_hash,\n facts_data_version,\n MAX(scope_shape) AS scope_shape,\n MAX(scope_principal) AS scope_principal,\n MAX(scope_base_path) AS scope_base_path,\n MAX(scope_mode) AS scope_mode,\n MAX(scope_authorization_model) AS scope_authorization_model,\n MAX(scope_permission_version) AS scope_permission_version,\n SUM(payload_bytes) AS payload_bytes,\n SUM(CASE WHEN kind = 'query-result' THEN payload_bytes ELSE 0 END) AS query_result_payload_bytes,\n SUM(CASE WHEN kind = 'materialized-result' THEN payload_bytes ELSE 0 END) AS materialized_result_payload_bytes,\n SUM(CASE WHEN kind = 'query-result' THEN 1 ELSE 0 END) AS query_result_entries,\n SUM(CASE WHEN kind = 'materialized-result' THEN 1 ELSE 0 END) AS materialized_result_entries\n FROM filtered_scope\n GROUP BY scope_hash, facts_data_version\n )\n SELECT\n *,\n COUNT(*) OVER () AS scope_version_count\n FROM scope_versions\n ORDER BY payload_bytes DESC, scope_hash ASC, facts_data_version DESC\n LIMIT ${limitParam}\n `, params);\n const largest = rows[0];\n const scopeEntries = rows.map((row) => ({\n scopeHash: row.scope_hash,\n factsDataVersion: Number(row.facts_data_version),\n payloadBytes: Number(row.payload_bytes ?? 0) || 0,\n queryResultPayloadBytes: Number(row.query_result_payload_bytes ?? 0) || 0,\n materializedResultPayloadBytes: Number(row.materialized_result_payload_bytes ?? 0) || 0,\n queryResultEntries: Number(row.query_result_entries ?? 0) || 0,\n materializedResultEntries: Number(row.materialized_result_entries ?? 0) || 0,\n ...(row.scope_shape ? { scopeShape: row.scope_shape } : {}),\n ...(row.scope_principal ? { principal: row.scope_principal } : {}),\n ...(row.scope_base_path ? { basePath: row.scope_base_path } : {}),\n ...(row.scope_mode ? { mode: row.scope_mode } : {}),\n ...(row.scope_authorization_model ? { authorizationModel: row.scope_authorization_model } : {}),\n ...(row.scope_permission_version ? { permissionVersion: row.scope_permission_version } : {}),\n }));\n return {\n scopeVersionCount: Number(largest?.scope_version_count ?? 0) || 0,\n scopeEntries,\n largestScopeBytes: largest ? Number(largest.payload_bytes ?? 0) || 0 : 0,\n ...(largest ? { largestScopeHash: largest.scope_hash } : {}),\n ...(largest ? { largestScopeFactsDataVersion: Number(largest.facts_data_version) } : {}),\n };\n }\n\n private async cachePayloadBytes(tableName: string): Promise<number> {\n return this.scalarCount(`SELECT COALESCE(SUM(OCTET_LENGTH(result_json)), 0) AS count FROM ${tableName}`);\n }\n\n private async collectCacheSpaceObjects(tableName: string): Promise<RdfIndexSpaceObject[]> {\n try {\n const rows = await this.requireExecutor().query<{\n name: string;\n kind: 'table' | 'index';\n table_name: string | null;\n bytes: number;\n }>(`\n SELECT\n rel.relname AS name,\n CASE WHEN rel.relkind = 'i' THEN 'index' ELSE 'table' END AS kind,\n tbl.relname AS table_name,\n pg_total_relation_size(rel.oid) AS bytes\n FROM pg_class rel\n LEFT JOIN pg_index idx ON idx.indexrelid = rel.oid\n LEFT JOIN pg_class tbl ON tbl.oid = idx.indrelid\n WHERE rel.relkind IN ('r', 'i')\n AND (rel.relname = '${tableName}' OR tbl.relname = '${tableName}')\n ORDER BY rel.relname\n `);\n return rows.map((row) => ({\n name: row.name,\n kind: row.kind,\n ...(row.table_name && row.table_name !== row.name ? { tableName: row.table_name } : {}),\n bytes: Number(row.bytes ?? 0),\n pages: 0,\n estimated: false,\n }));\n } catch {\n const rows = await this.scalarCount(`SELECT COUNT(*) AS count FROM ${tableName}`).catch(() => 0);\n const bytes = Math.max(4096, rows * 512);\n return [{\n name: tableName,\n kind: 'table',\n bytes,\n pages: Math.max(1, Math.ceil(bytes / 4096)),\n estimated: true,\n }];\n }\n }\n\n private async collectSpaceObjects(derived: boolean): Promise<RdfIndexSpaceObject[]> {\n try {\n const rows = await this.requireExecutor().query<{\n name: string;\n kind: 'table' | 'index';\n table_name: string | null;\n bytes: number;\n }>(`\n SELECT\n rel.relname AS name,\n CASE WHEN rel.relkind = 'i' THEN 'index' ELSE 'table' END AS kind,\n tbl.relname AS table_name,\n pg_total_relation_size(rel.oid) AS bytes\n FROM pg_class rel\n LEFT JOIN pg_index idx ON idx.indexrelid = rel.oid\n LEFT JOIN pg_class tbl ON tbl.oid = idx.indrelid\n WHERE rel.relkind IN ('r', 'i')\n AND ${derived\n ? \"(rel.relname LIKE 'rdf3x_%' OR tbl.relname LIKE 'rdf3x_%')\"\n : `(rel.relname LIKE 'rdf_%' OR tbl.relname LIKE 'rdf_%')\n AND rel.relname NOT LIKE 'rdf3x_%'\n AND COALESCE(tbl.relname, '') NOT LIKE 'rdf3x_%'\n AND rel.relname <> '${RDF_QUERY_RESULT_CACHE_TABLE}'\n AND COALESCE(tbl.relname, '') <> '${RDF_QUERY_RESULT_CACHE_TABLE}'\n AND rel.relname <> '${RDF_MATERIALIZED_RESULT_CACHE_TABLE}'\n AND COALESCE(tbl.relname, '') <> '${RDF_MATERIALIZED_RESULT_CACHE_TABLE}'\n AND rel.relname <> '${RDF_ACCESS_CONTROL_OVERRIDE_TABLE}'\n AND COALESCE(tbl.relname, '') <> '${RDF_ACCESS_CONTROL_OVERRIDE_TABLE}'`}\n ORDER BY rel.relname\n `);\n return rows.map((row) => ({\n name: row.name,\n kind: row.kind,\n ...(row.table_name && row.table_name !== row.name ? { tableName: row.table_name } : {}),\n bytes: Number(row.bytes ?? 0),\n pages: 0,\n estimated: false,\n }));\n } catch {\n const tables = derived\n ? [\n 'rdf3x_metadata',\n RDF3X_GRAPH_PROJECTION_TABLE,\n RDF3X_DIRTY_GRAPH_TABLE,\n RDF3X_DIRTY_PAIR_TABLE,\n RDF3X_DIRTY_TERM_TABLE,\n ...PAIR_PROJECTIONS.map((projection) => projection.table),\n ...TERM_PROJECTIONS.map((projection) => projection.table),\n ]\n : ['rdf_terms', 'rdf_sources', RDF_DIRTY_SOURCE_TABLE, RDF_MAINTENANCE_LEASE_TABLE, RDF_FACTS_TABLE, 'rdf_index_metadata'];\n const rows = await Promise.all(tables.map(async (table) => ({\n name: table,\n kind: 'table' as const,\n rows: await this.scalarCount(`SELECT COUNT(*) AS count FROM ${table}`).catch(() => 0),\n })));\n return rows.map((row) => ({\n name: row.name,\n kind: row.kind,\n bytes: Math.max(4096, row.rows * 128),\n pages: Math.max(1, Math.ceil(Math.max(4096, row.rows * 128) / 4096)),\n estimated: true,\n }));\n }\n }\n\n private requireExecutor(): AsyncSqlExecutor {\n if (!this.executor) {\n throw new Error('PostgresRdfEngine is not open');\n }\n return this.executor;\n }\n\n private requireTextIndex(): RdfTextIndexLike {\n if (!this.textIndex) {\n throw new Error('RdfQuery textSearch requires a configured RdfTextIndex');\n }\n return this.textIndex;\n }\n\n private requireVectorIndex(): RdfVectorIndexLike {\n if (!this.vectorIndex) {\n throw new Error('RdfQuery vectorSearch requires a configured RdfVectorIndex');\n }\n return this.vectorIndex;\n }\n\n private assertSearchIndexesConfigured(query: RdfQuery): void {\n if ((query.textSearch?.length ?? 0) > 0 && !this.textIndex) {\n throw new Error('RdfQuery textSearch requires a configured RdfTextIndex');\n }\n if ((query.vectorSearch?.length ?? 0) > 0 && !this.vectorIndex) {\n throw new Error('RdfQuery vectorSearch requires a configured RdfVectorIndex');\n }\n }\n\n private requireDictionary(): PostgresRdfTermDictionary {\n if (!this.termDictionary) {\n throw new Error('PostgresRdfEngine term dictionary is not initialized');\n }\n return this.termDictionary;\n }\n\n private requiredTerm(termMap: Map<number, Term>, id: number): Term {\n const term = termMap.get(id);\n if (!term) {\n throw new Error(`RDF term not found while reading quad row: ${id}`);\n }\n return term;\n }\n\n private async openExecutor(): Promise<void> {\n if (this.executor) {\n return;\n }\n if (this.pgOptions.pool) {\n this.pgPool = this.pgOptions.pool;\n this.sharedPoolConfig = null;\n this.executor = new PgPoolExecutor(this.pgPool, undefined, this.copyFromRowsStats);\n return;\n }\n\n if (this.pgOptions.driver === 'pglite') {\n this.pglite = new PGlite(this.pgOptions.dataDir);\n await this.pglite.waitReady;\n this.executor = new PgliteExecutor(this.pglite);\n return;\n }\n\n this.sharedPoolConfig = {\n connectionString: this.pgOptions.connectionString,\n host: this.pgOptions.host,\n port: this.pgOptions.port,\n database: this.pgOptions.database,\n user: this.pgOptions.user,\n password: this.pgOptions.password,\n options: POSTGRES_RDF_SESSION_OPTIONS,\n };\n this.pgPool = getSharedPool(this.sharedPoolConfig);\n this.executor = new PgPoolExecutor(this.pgPool, undefined, this.copyFromRowsStats);\n }\n}\n\nfunction restoreRow<T>(row: T): T {\n if (!row || typeof row !== 'object') {\n return row;\n }\n const restored: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(row as Record<string, unknown>)) {\n restored[key] = restoreValue(key, value);\n }\n return restored as T;\n}\n\nfunction emptyDerivedCacheEvictionStats(): RdfDerivedCacheEvictionStats {\n return {\n factsVersion: 0,\n ttl: 0,\n maxEntries: 0,\n payloadBytes: 0,\n scopeBytes: 0,\n totalBytes: 0,\n templateTtl: 0,\n templateMaxEntries: 0,\n templateBytes: 0,\n };\n}\n\nfunction emptyPgCacheCounterStats(): PgCacheCounterStats {\n return {\n hitCount: 0,\n missCount: 0,\n refreshCount: 0,\n storeCount: 0,\n bypassCount: 0,\n disabledCount: 0,\n };\n}\n\nfunction cloneQueryCacheExplain<T extends RdfQueryCacheExplain>(cache: T): T {\n return { ...cache };\n}\n\nfunction clonePlannerHistogramHint(hint: RdfQueryPlannerHistogramHint): RdfQueryPlannerHistogramHint {\n return {\n ...hint,\n ...(hint.subject ? { subject: { ...hint.subject } } : {}),\n ...(hint.predicate ? { predicate: { ...hint.predicate } } : {}),\n ...(hint.object ? { object: { ...hint.object } } : {}),\n ...(hint.graph ? { graph: { ...hint.graph } } : {}),\n };\n}\n\nfunction bytePressure(bytes: number, maxBytes: number): number {\n return maxBytes > 0 ? bytes / maxBytes : 0;\n}\n\nfunction normalizeDerivedCacheScopeStatsOptions(\n options: RdfDerivedCacheScopeStatsOptions,\n): Required<RdfDerivedCacheScopeStatsOptions> {\n const limit = Number.isFinite(options.limit)\n ? Math.min(MAX_DERIVED_CACHE_SCOPE_STATS_ENTRIES, Math.max(1, Math.floor(Number(options.limit))))\n : DEFAULT_DERIVED_CACHE_SCOPE_STATS_MAX_ENTRIES;\n return {\n query: normalizeStatsFilterText(options.query),\n principal: normalizeStatsFilterText(options.principal),\n basePath: normalizeStatsFilterText(options.basePath),\n mode: normalizeStatsFilterText(options.mode),\n authorizationModel: normalizeStatsFilterText(options.authorizationModel),\n permissionVersion: normalizeStatsFilterText(options.permissionVersion),\n limit,\n };\n}\n\nfunction normalizeStatsFilterText(value: string | undefined): string {\n return value?.trim().slice(0, 512) ?? '';\n}\n\nfunction sqlLikeContains(value: string): string {\n return `%${value.toLowerCase().replace(/[\\\\%_]/g, (match) => `\\\\${match}`)}%`;\n}\n\nfunction addPgParam(params: unknown[], value: unknown): string {\n params.push(value);\n return `$${params.length}`;\n}\n\nfunction normalizeSchemaExplorerOptions(options: RdfSchemaExplorerOptions): PgNormalizedSchemaExplorerOptions {\n const limit = Number.isFinite(options.limit)\n ? Math.min(100, Math.max(1, Math.floor(Number(options.limit))))\n : 20;\n return {\n query: options.query?.trim().slice(0, 512).toLowerCase() ?? '',\n graphPrefix: options.graphPrefix?.trim().slice(0, 2048) ?? '',\n limit,\n };\n}\n\nfunction schemaTermConditions(\n termAlias: string,\n options: PgNormalizedSchemaExplorerOptions,\n params: unknown[],\n includeGraphPrefix: boolean,\n): string[] {\n const conditions: string[] = [];\n if (options.query) {\n conditions.push(`LOWER(${termAlias}.value) LIKE ${addPgParam(params, sqlLikeContains(options.query))} ESCAPE '\\\\'`);\n }\n if (includeGraphPrefix && options.graphPrefix) {\n conditions.push(`${termAlias}.value LIKE ${addPgParam(params, `${options.graphPrefix}%`)}`);\n }\n return conditions;\n}\n\nfunction appendSchemaGraphPrefixCondition(\n quadAlias: string,\n graphAlias: string,\n options: PgNormalizedSchemaExplorerOptions,\n conditions: string[],\n params: unknown[],\n): string {\n if (!options.graphPrefix) {\n return '';\n }\n conditions.push(`${graphAlias}.value LIKE ${addPgParam(params, `${options.graphPrefix}%`)}`);\n return `JOIN rdf_terms ${graphAlias} ON ${graphAlias}.id = ${quadAlias}.graph_id`;\n}\n\nfunction normalizePathSearchOptions(options: RdfBoundedPathSearchOptions): PgNormalizedPathSearchOptions {\n const maxDepth = Number.isFinite(options.maxDepth)\n ? Math.min(8, Math.max(1, Math.floor(Number(options.maxDepth))))\n : 3;\n const maxPaths = Number.isFinite(options.maxPaths)\n ? Math.min(500, Math.max(1, Math.floor(Number(options.maxPaths))))\n : 50;\n return {\n direction: options.direction ?? 'out',\n graphPrefix: options.graphPrefix?.trim().slice(0, 2048) ?? '',\n maxDepth,\n maxPaths,\n };\n}\n\nfunction emptyPathSearchResult(maxDepth: number): RdfBoundedPathSearchResult {\n return {\n paths: [],\n truncated: false,\n scannedEdges: 0,\n maxDepth,\n };\n}\n\nfunction pathTraversalCandidates(\n row: PgPathEdgeRow,\n currentId: number,\n direction: PgNormalizedPathSearchOptions['direction'],\n): Array<{ nextId: number; direction: RdfPathEdgeDirection }> {\n const candidates: Array<{ nextId: number; direction: RdfPathEdgeDirection }> = [];\n if ((direction === 'out' || direction === 'both') && row.subject_id === currentId) {\n candidates.push({ nextId: row.object_id, direction: 'out' });\n }\n if ((direction === 'in' || direction === 'both') && row.object_id === currentId) {\n candidates.push({ nextId: row.subject_id, direction: 'in' });\n }\n return candidates;\n}\n\nfunction compareDerivedCacheCandidates(left: PgDerivedCacheCandidate, right: PgDerivedCacheCandidate): number {\n return right.lastUsedAtMs - left.lastUsedAtMs\n || right.createdAtMs - left.createdAtMs\n || right.cacheKey.localeCompare(left.cacheKey)\n || right.kind.localeCompare(left.kind)\n || (right.scopeHash ?? '').localeCompare(left.scopeHash ?? '');\n}\n\nfunction stableRdfQueryShape(query: RdfQuery): string {\n const { cache, ...semanticQuery } = query;\n return JSON.stringify(normalizeQueryCacheValue(semanticQuery));\n}\n\nfunction stableRdfQueryTemplateShape(query: RdfQuery): string {\n const { cache, ...semanticQuery } = query;\n return JSON.stringify(normalizeQueryTemplateValue({\n ...semanticQuery,\n cacheScope: rdfQueryCacheScope(query),\n }));\n}\n\nfunction rdfQueryCacheScope(query: RdfQuery): string {\n return resolveRdfQueryCacheScope(query.cache?.scope).shape;\n}\n\nfunction resolveRdfQueryCacheScope(scope?: RdfQueryCacheScope): PgResolvedQueryCacheScope {\n const normalized = normalizeRdfQueryCacheScope(scope ?? 'default');\n const shape = typeof normalized === 'string'\n ? normalized\n : JSON.stringify(normalizeQueryCacheValue(normalized));\n const descriptors = collectRdfQueryCacheScopeDescriptors(scope);\n return {\n shape,\n hash: rdfQueryCacheScopeHash(shape),\n principal: lastDescriptorString(descriptors, 'principal'),\n basePath: lastDescriptorString(descriptors, 'basePath'),\n mode: lastDescriptorString(descriptors, 'mode'),\n authorizationModel: lastDescriptorString(descriptors, 'authorizationModel'),\n permissionVersion: lastDescriptorString(descriptors, 'permissionVersion'),\n allowedGraphUrls: descriptorStringArray(descriptors, 'allowedGraphUrls'),\n deniedGraphUrls: descriptorStringArray(descriptors, 'deniedGraphUrls'),\n deniedGraphPrefixes: descriptorStringArray(descriptors, 'deniedGraphPrefixes'),\n };\n}\n\nfunction rdfQueryCacheScopeHash(scopeShape: string): string {\n return createHash('sha256')\n .update('rdf-query-cache-scope')\n .update('\\0')\n .update(scopeShape)\n .digest('hex');\n}\n\nfunction normalizeRdfQueryCacheScope(scope: RdfQueryCacheScope): unknown {\n if (typeof scope === 'string') {\n return scope;\n }\n if (Array.isArray(scope)) {\n return scope.map((entry) => normalizeRdfQueryCacheScope(entry));\n }\n return Object.fromEntries(Object.entries({\n principal: scope.principal,\n basePath: scope.basePath,\n mode: scope.mode,\n authorizationModel: scope.authorizationModel,\n permissionVersion: scope.permissionVersion === undefined ? undefined : String(scope.permissionVersion),\n allowedGraphUrls: sortedOptional(scope.allowedGraphUrls),\n deniedGraphUrls: sortedOptional(scope.deniedGraphUrls),\n deniedGraphPrefixes: sortedOptional(scope.deniedGraphPrefixes),\n components: scope.components?.map((component) => normalizeRdfQueryCacheScope(component)),\n }).filter(([, value]) => value !== undefined));\n}\n\nfunction collectRdfQueryCacheScopeDescriptors(scope?: RdfQueryCacheScope): RdfQueryCacheScopeDescriptor[] {\n if (!scope || typeof scope === 'string') {\n return [];\n }\n if (Array.isArray(scope)) {\n return scope.flatMap((entry) => collectRdfQueryCacheScopeDescriptors(entry));\n }\n return [\n ...(scope.components?.flatMap((entry) => collectRdfQueryCacheScopeDescriptors(entry)) ?? []),\n scope,\n ];\n}\n\nfunction sortedOptional(values?: string[]): string[] | undefined {\n return values === undefined ? undefined : [...values].sort();\n}\n\nfunction lastDescriptorString(\n descriptors: RdfQueryCacheScopeDescriptor[],\n key: keyof Pick<\n RdfQueryCacheScopeDescriptor,\n 'principal' | 'basePath' | 'mode' | 'authorizationModel' | 'permissionVersion'\n >,\n): string | null {\n for (let i = descriptors.length - 1; i >= 0; i -= 1) {\n const value = descriptors[i][key];\n if (value !== undefined) {\n return String(value);\n }\n }\n return null;\n}\n\nfunction descriptorStringArray(\n descriptors: RdfQueryCacheScopeDescriptor[],\n key: keyof Pick<\n RdfQueryCacheScopeDescriptor,\n 'allowedGraphUrls' | 'deniedGraphUrls' | 'deniedGraphPrefixes'\n >,\n): string[] | null {\n const values = uniqueStrings(descriptors.flatMap((descriptor) => descriptor[key] ?? []));\n return values.length > 0 ? values.sort() : null;\n}\n\nfunction queryResultCacheKey(queryShape: string): string {\n return createHash('sha256')\n .update(`rdf-query-result-cache:${RDF_QUERY_RESULT_CACHE_KEY_VERSION}`)\n .update('\\0')\n .update(queryShape)\n .digest('hex');\n}\n\nfunction normalizeMaterializedResultConfig(\n configured: string | RdfQueryMaterializedResultOptions,\n): RdfQueryMaterializedResultOptions {\n if (typeof configured === 'string') {\n return { key: configured };\n }\n return {\n key: configured.key,\n ...(configured.version !== undefined ? { version: String(configured.version) } : {}),\n ...(configured.ttlMs !== undefined ? { ttlMs: configured.ttlMs } : {}),\n };\n}\n\nfunction materializedResultConfigTtlMs(configured?: string | RdfQueryMaterializedResultOptions): number | undefined {\n return typeof configured === 'object' && configured !== null ? configured.ttlMs : undefined;\n}\n\nfunction materializedResultCacheKey(materializedShape: string): string {\n return createHash('sha256')\n .update(`rdf-materialized-result-cache:${RDF_MATERIALIZED_RESULT_CACHE_KEY_VERSION}`)\n .update('\\0')\n .update(materializedShape)\n .digest('hex');\n}\n\nfunction queryTemplateCacheKey(templateShape: string): string {\n return createHash('sha256')\n .update(`rdf-query-template-cache:${RDF_QUERY_TEMPLATE_CACHE_KEY_VERSION}`)\n .update('\\0')\n .update(templateShape)\n .digest('hex');\n}\n\nfunction materializedResultTemplatePlanMarker(template: PgQueryTemplateResolution): string {\n return template.templateKey === 'disabled'\n ? 'PostgresMaterializedResultTemplate(disabled)'\n : `PostgresMaterializedResultTemplate(${shortCacheKey(template.templateKey)})`;\n}\n\nfunction compiledSqlPhysicalShape(compiled: {\n sql: string;\n countSql?: string;\n indexChoice: string;\n variableAliases: Map<string, string>;\n}): string {\n return JSON.stringify({\n sql: normalizeSqlShape(compiled.sql),\n ...(compiled.countSql ? { countSql: normalizeSqlShape(compiled.countSql) } : {}),\n indexChoice: compiled.indexChoice,\n variableAliases: [...compiled.variableAliases.entries()],\n });\n}\n\nfunction normalizeSqlShape(sql: string): string {\n return sql.replace(/\\s+/g, ' ').trim();\n}\n\nfunction shortCacheKey(cacheKey: string): string {\n return cacheKey.slice(0, 12);\n}\n\nfunction normalizeQueryCacheValue(value: unknown): unknown {\n if (isTerm(value as any)) {\n return { $term: termToId(value as any) };\n }\n if (Array.isArray(value)) {\n return value.map((entry) => normalizeQueryCacheValue(entry));\n }\n if (!value || typeof value !== 'object') {\n return value;\n }\n return Object.fromEntries(Object.entries(value as Record<string, unknown>)\n .filter(([, entry]) => entry !== undefined)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([key, entry]) => [key, normalizeQueryCacheValue(entry)]));\n}\n\nfunction normalizeQueryTemplateValue(value: unknown, key = ''): unknown {\n if (isTerm(value as any)) {\n return rdfTermTemplate(value as any);\n }\n if (Array.isArray(value)) {\n if (key === 'embedding') {\n return { $vector: value.length };\n }\n return value.map((entry) => normalizeQueryTemplateValue(entry, key));\n }\n if (!value || typeof value !== 'object') {\n return shouldMaskQueryTemplateScalar(key) ? scalarTemplate(value) : value;\n }\n return Object.fromEntries(Object.entries(value as Record<string, unknown>)\n .filter(([, entry]) => entry !== undefined)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([entryKey, entry]) => [entryKey, normalizeQueryTemplateValue(entry, entryKey)]));\n}\n\nfunction rdfTermTemplate(term: Term): unknown {\n switch (term.termType) {\n case 'NamedNode':\n case 'BlankNode':\n case 'DefaultGraph':\n return { $term: term.termType };\n case 'Literal':\n return {\n $term: 'Literal',\n datatype: term.datatype?.value ?? XSD_STRING,\n language: term.language || undefined,\n };\n case 'Variable':\n return { $term: 'Variable' };\n case 'Quad':\n return { $term: 'Quad' };\n default: {\n const exhaustive: never = term;\n return { $term: String(exhaustive) };\n }\n }\n}\n\nfunction shouldMaskQueryTemplateScalar(key: string): boolean {\n return [\n '$contains',\n '$endsWith',\n '$eq',\n '$gt',\n '$gte',\n '$lt',\n '$lte',\n '$ne',\n '$startsWith',\n 'content',\n 'embedding',\n 'localPath',\n 'query',\n 'source',\n 'sourcePrefix',\n 'threshold',\n 'value',\n 'values',\n 'workspace',\n ].includes(key);\n}\n\nfunction scalarTemplate(value: unknown): unknown {\n if (value === null) {\n return { $scalar: 'null' };\n }\n return { $scalar: typeof value };\n}\n\nfunction serializeQueryResult(result: RdfQueryResult): string {\n const payload: SerializedRdfQueryResult = {\n bindings: result.bindings.map(serializeBinding),\n sourcePlan: result.metrics.plan,\n sourceIndexChoices: result.metrics.indexChoices,\n ...(result.count !== undefined ? { count: result.count } : {}),\n };\n return JSON.stringify(payload);\n}\n\nfunction serializeBinding(binding: RdfBindingRow): Record<string, SerializedRdfTerm> {\n return Object.fromEntries(Object.entries(binding)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([key, term]) => [key, serializeTerm(term)]));\n}\n\nfunction serializeTerm(term: Term): SerializedRdfTerm {\n switch (term.termType) {\n case 'NamedNode':\n return { termType: 'NamedNode', value: term.value };\n case 'BlankNode':\n return { termType: 'BlankNode', value: term.value };\n case 'DefaultGraph':\n return { termType: 'DefaultGraph', value: '' };\n case 'Literal':\n return {\n termType: 'Literal',\n value: term.value,\n ...(term.language ? { language: term.language } : {}),\n datatype: term.datatype?.value ?? XSD_STRING,\n };\n case 'Variable':\n throw new Error(`Cannot cache RDF variable term: ${term.value}`);\n case 'Quad':\n throw new Error('Cannot cache nested RDF-star quads');\n default: {\n const exhaustive: never = term;\n throw new Error(`Unsupported RDF term in query result cache: ${String(exhaustive)}`);\n }\n }\n}\n\nfunction deserializeQueryResultBindings(bindings: SerializedRdfQueryResult['bindings']): RdfBindingRow[] {\n return bindings.map((binding) => Object.fromEntries(Object.entries(binding)\n .map(([key, term]) => [key, deserializeTerm(term)])));\n}\n\nfunction deserializeTerm(term: SerializedRdfTerm): Term {\n switch (term.termType) {\n case 'NamedNode':\n return DataFactory.namedNode(term.value) as Term;\n case 'BlankNode':\n return DataFactory.blankNode(term.value) as Term;\n case 'DefaultGraph':\n return DataFactory.defaultGraph() as Term;\n case 'Literal':\n if (term.language) {\n return DataFactory.literal(term.value, term.language) as Term;\n }\n return DataFactory.literal(term.value, DataFactory.namedNode(term.datatype ?? XSD_STRING)) as Term;\n default: {\n const exhaustive: never = term.termType;\n throw new Error(`Unsupported cached RDF term type: ${String(exhaustive)}`);\n }\n }\n}\n\nfunction stripMaterializedViewBuildCache(query: RdfQuery): RdfQuery {\n const cache = {\n ...(query.cache ?? {}),\n mode: 'bypass' as const,\n };\n delete cache.materialized;\n return {\n ...query,\n cache,\n };\n}\n\nfunction normalizeMaterializedViewKey(key: string): string {\n const normalized = key.trim();\n if (!normalized) {\n throw new Error('RDF materialized view key must not be empty');\n }\n return normalized;\n}\n\nfunction normalizeMaterializedViewVersion(version: string | number | undefined): string {\n const normalized = version === undefined ? DEFAULT_RDF_MATERIALIZED_VIEW_VERSION : String(version).trim();\n if (!normalized) {\n throw new Error('RDF materialized view version must not be empty');\n }\n return normalized;\n}\n\nfunction normalizeMaterializedViewVariables(variables: string[]): string[] {\n const normalized = uniqueStrings(variables.map((variable) => variable.trim()).filter(Boolean));\n if (normalized.length === 0) {\n throw new Error('RDF materialized view requires at least one variable');\n }\n return normalized;\n}\n\nfunction inferBindingVariables(bindings: RdfBindingRow[]): string[] {\n return uniqueStrings(bindings.flatMap((binding) => Object.keys(binding))).sort();\n}\n\nfunction materializedViewCells(\n bindings: RdfBindingRow[],\n variables: string[],\n): Array<{ rowIndex: number; variable: string; termJson: string }> {\n return bindings.flatMap((binding, rowIndex) => variables.flatMap((variable) => {\n const term = binding[variable];\n return term ? [{ rowIndex, variable, termJson: JSON.stringify(serializeTerm(term)) }] : [];\n }));\n}\n\nfunction bindingsFromMaterializedViewCells(rows: PgMaterializedViewCellRow[]): RdfBindingRow[] {\n const bindings = new Map<number, RdfBindingRow>();\n for (const row of rows) {\n const rowIndex = Number(row.row_index);\n const binding = bindings.get(rowIndex) ?? {};\n binding[row.variable] = deserializeTerm(JSON.parse(row.term_json) as SerializedRdfTerm);\n bindings.set(rowIndex, binding);\n }\n return [...bindings.entries()]\n .sort(([left], [right]) => left - right)\n .map(([, binding]) => binding);\n}\n\nfunction parsePgTextArray(value: string[] | string): string[] {\n if (Array.isArray(value)) {\n return value;\n }\n const trimmed = value.trim();\n if (!trimmed) {\n return [];\n }\n if (trimmed.startsWith('[')) {\n return JSON.parse(trimmed) as string[];\n }\n if (!trimmed.startsWith('{') || !trimmed.endsWith('}')) {\n return [trimmed];\n }\n const body = trimmed.slice(1, -1);\n if (!body) {\n return [];\n }\n return body.split(',').map((entry) => entry.replace(/^\"(.*)\"$/, '$1').replace(/\\\\\"/g, '\"'));\n}\n\nfunction pgBoolean(value: boolean | string): boolean {\n return value === true || value === 't' || value === 'true';\n}\n\nfunction withQueryCachePlan(result: RdfQueryResult, ...markers: string[]): RdfQueryResult {\n return {\n ...result,\n metrics: {\n ...result.metrics,\n plan: [\n ...result.metrics.plan,\n ...markers,\n ],\n },\n };\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction chunkArray<T>(values: T[], size: number): T[][] {\n const chunks: T[][] = [];\n for (let index = 0; index < values.length; index += size) {\n chunks.push(values.slice(index, index + size));\n }\n return chunks;\n}\n\nfunction isEmptyDirtyProjectionStats(stats: PgDirtyProjectionStats): boolean {\n return stats.graphs === 0 && stats.pairs === 0 && stats.terms === 0;\n}\n\nfunction restoreValue(key: string, value: unknown): unknown {\n if (typeof value !== 'string') {\n return value;\n }\n if (isIntegerResultKey(key) && /^-?\\d+$/.test(value)) {\n return Number(value);\n }\n return fromPgSafe(value);\n}\n\nfunction isIntegerResultKey(key: string): boolean {\n return INTEGER_RESULT_KEYS.has(key) || INTEGER_ALIAS_RESULT_KEY.test(key);\n}\n\nfunction pgInteger(value: unknown): number | undefined {\n if (typeof value === 'number') {\n return Number.isFinite(value) ? value : undefined;\n }\n if (typeof value === 'string' && /^-?\\d+$/.test(value)) {\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : undefined;\n }\n return undefined;\n}\n\nfunction pgNumber(value: unknown): 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 return undefined;\n}\n\nfunction isVariable(value: RdfQueryTermPattern | undefined): value is { variable: string } {\n return Boolean(value && typeof value === 'object' && 'variable' in value);\n}\n\nfunction cardinalityTermFromQueryPattern(value: RdfQueryTermPattern | undefined): RdfCardinalityTerm | undefined {\n if (!value || isVariable(value) || !isTerm(value as any)) {\n return undefined;\n }\n const term = value as Term;\n const result: RdfCardinalityTerm = {\n value: term.value,\n kind: postgresRdfTermKind(term),\n };\n if (term.termType === 'Literal') {\n if (term.datatype.value) {\n result.datatype = term.datatype.value;\n }\n if (term.language) {\n result.language = term.language;\n }\n }\n return result;\n}\n\nfunction sameCardinalityTerm(left: RdfCardinalityTerm, right: RdfCardinalityTerm): boolean {\n return left.value === right.value\n && left.kind === right.kind\n && (left.datatype ?? '') === (right.datatype ?? '')\n && (left.language ?? '') === (right.language ?? '');\n}\n\nfunction variablesInPattern(pattern: RdfQueryPattern): string[] {\n return uniqueStrings(PATTERN_KEYS\n .map((key) => pattern[key])\n .filter(isVariable)\n .map((value) => value.variable));\n}\n\nfunction patternVariableKeys(pattern: RdfQueryPattern): Map<string, PgPatternKey[]> {\n const keys = new Map<string, PgPatternKey[]>();\n for (const key of PATTERN_KEYS) {\n const value = pattern[key];\n if (!isVariable(value)) {\n continue;\n }\n keys.set(value.variable, [...(keys.get(value.variable) ?? []), key]);\n }\n return keys;\n}\n\nfunction normalizeOptionalGroup(group: RdfQueryPattern[] | RdfOptionalQueryGroup): RdfOptionalQueryGroup {\n return Array.isArray(group) ? { patterns: group } : group;\n}\n\nfunction isPgSqlScanCompatiblePattern(pattern: QuintPattern): boolean {\n return isPgRdf3xCompatiblePattern(pattern);\n}\n\nfunction isPgRdf3xCompatiblePattern(pattern: QuintPattern): boolean {\n return PATTERN_KEYS.every((key) => {\n const value = pattern[key];\n if (!value || isTerm(value as any)) return true;\n if (value === null || typeof value !== 'object' || 'termType' in value) return false;\n const operators = value as Record<string, unknown>;\n const allowed = new Set<string>([\n '$eq',\n '$ne',\n '$in',\n '$notIn',\n '$termType',\n '$language',\n '$notLanguage',\n '$langMatches',\n '$datatype',\n '$notDatatype',\n ...(key === 'graph' ? ['$startsWith'] : []),\n ...(key === 'object' ? ['$gt', '$gte', '$lt', '$lte', '$contains', '$endsWith'] : []),\n ]);\n if (Object.keys(operators).length === 0 || Object.keys(operators).some((operator) => !allowed.has(operator))) return false;\n if (operators.$eq !== undefined && !isTerm(operators.$eq as any)) return false;\n if (operators.$ne !== undefined && !isTerm(operators.$ne as any)) return false;\n if (operators.$in !== undefined && (!Array.isArray(operators.$in) || operators.$in.length === 0 || !operators.$in.every((entry) => isTerm(entry as any)))) return false;\n if (operators.$notIn !== undefined && (!Array.isArray(operators.$notIn) || operators.$notIn.length === 0 || !operators.$notIn.every((entry) => isTerm(entry as any)))) return false;\n if (operators.$startsWith !== undefined && typeof operators.$startsWith !== 'string') return false;\n if (operators.$termType !== undefined && !['iri', 'blank', 'literal', 'numeric'].includes(operators.$termType as string)) return false;\n for (const languageOperator of ['$language', '$notLanguage', '$langMatches']) {\n if (operators[languageOperator] !== undefined && typeof operators[languageOperator] !== 'string') return false;\n }\n for (const datatypeOperator of ['$datatype', '$notDatatype']) {\n const datatype = operators[datatypeOperator];\n if (datatype !== undefined && (!isTerm(datatype as any) || (datatype as Term).termType !== 'NamedNode')) return false;\n }\n if (key === 'object') {\n for (const rangeOperator of ['$gt', '$gte', '$lt', '$lte']) {\n const value = operators[rangeOperator];\n if (value !== undefined && !isObjectRangeValue(value)) return false;\n }\n for (const textOperator of ['$contains', '$endsWith']) {\n if (operators[textOperator] !== undefined && typeof operators[textOperator] !== 'string') return false;\n }\n }\n return true;\n });\n}\n\nfunction isObjectRangeValue(value: unknown): boolean {\n return typeof value === 'number'\n ? Number.isFinite(value)\n : typeof value === 'string'\n ? true\n : isTerm(value as any);\n}\n\nfunction shouldUseMembershipSource(resolved: PgResolvedPattern): boolean {\n return resolved.ids.graph !== undefined\n || Boolean(resolved.idSets.graph?.length)\n || Boolean(resolved.excludedIdSets.graph?.length)\n || resolved.graphPrefix !== undefined;\n}\n\nfunction termKindsForPatternKey(key: PgPatternKey): RdfTermKind[] {\n switch (key) {\n case 'object':\n return ['iri', 'literal', 'blank'];\n case 'subject':\n return ['iri', 'blank'];\n case 'graph':\n return ['iri', 'default_graph'];\n case 'predicate':\n return ['iri'];\n default: {\n const exhaustive: never = key;\n throw new Error(`Unsupported RDF pattern key: ${exhaustive}`);\n }\n }\n}\n\nfunction escapeLikePattern(value: string): string {\n return value.replace(/[\\\\%_]/g, (char) => `\\\\${char}`);\n}\n\nfunction rangeSuffix(range: PgObjectRange): string {\n return `${range.min !== undefined ? (range.minInclusive ? '$gte' : '$gt') : ''}${range.max !== undefined ? (range.maxInclusive ? '$lte' : '$lt') : ''}`;\n}\n\nfunction describeScanOrder(options?: QueryOptions): string {\n const order = options?.order ?? [];\n const directions = 'orderDirections' in (options ?? {})\n ? ((options as QueryOptions & { orderDirections?: Array<'asc' | 'desc'> })?.orderDirections ?? [])\n : order.map(() => (options?.reverse ? 'desc' : 'asc'));\n return order.map((entry, index) => `${directions[index] ?? 'asc'}:${entry}`).join(',');\n}\n\nfunction describeQueryPattern(pattern: RdfQueryPattern): string {\n return PATTERN_KEYS\n .filter((key) => pattern[key])\n .map((key) => `${key}:${describeQueryPatternValue(pattern[key])}`)\n .join(',');\n}\n\nfunction describeQueryPatternValue(value: RdfQueryTermPattern | undefined): string {\n if (!value) return '*';\n if (isVariable(value)) return `?${value.variable}`;\n if (isTerm(value as any)) return termToId(value as any);\n return 'op';\n}\n\nfunction describePatternSource(source: { pattern: QuintPattern; variables: Partial<Record<PgPatternKey, string>> }): string {\n return PATTERN_KEYS\n .map((key) => {\n const variableName = source.variables[key];\n if (variableName) return `${key}:?${variableName}`;\n const value = source.pattern[key];\n return value ? `${key}:${termMatchKey(value)}` : undefined;\n })\n .filter(Boolean)\n .join(',');\n}\n\nfunction termMatchKey(match: QuintPattern[keyof QuintPattern] | undefined): string {\n if (!match) return '*';\n if (isTerm(match as any)) return `${(match as Term).termType}:${(match as Term).value}`;\n return JSON.stringify(match);\n}\n\nfunction queryAggregates(query: RdfQuery): NonNullable<RdfQuery['aggregates']> {\n if (query.aggregates && query.aggregates.length > 0) return query.aggregates;\n return query.aggregate ? [query.aggregate] : [];\n}\n\nfunction aggregatePlan(aggregates: NonNullable<RdfQuery['aggregates']>, grouped: boolean): string {\n return `Aggregate(${grouped ? 'group-' : ''}${aggregates.map((aggregate) => (\n `${aggregate.type}${aggregate.distinct ? ':DISTINCT' : ''}(${aggregate.variable ? `?${aggregate.variable}` : '*'})`\n )).join(',')})`;\n}\n\nfunction isOnlyNumericTermFilter(filter: PgResolvedTermFilter): boolean {\n return filter.termType === 'numeric'\n && filter.language === undefined\n && filter.notLanguage === undefined\n && filter.langMatches === undefined\n && filter.datatype === undefined\n && filter.notDatatype === undefined\n && (filter.textSearches?.length ?? 0) === 0;\n}\n\nfunction describeFilter(filter: RdfQueryFilter): string {\n return `?${filter.variable}${filter.operand ? `:${filter.operand}` : ''}${filter.operator}`;\n}\n\nfunction describeQueryOrder(orderBy: NonNullable<RdfQuery['orderBy']>): string {\n return orderBy.map((entry) => `${entry.direction ?? 'asc'}:${entry.variable}`).join(',');\n}\n\nfunction isRdf3xAggregateHavingOperator(operator: RdfQueryFilter['operator']): boolean {\n return operator === '$eq'\n || operator === '$ne'\n || operator === '$gt'\n || operator === '$gte'\n || operator === '$lt'\n || operator === '$lte';\n}\n\nfunction aggregateSqlOperator(operator: RdfQueryFilter['operator']): string {\n switch (operator) {\n case '$eq':\n return '=';\n case '$ne':\n return '!=';\n case '$gt':\n return '>';\n case '$gte':\n return '>=';\n case '$lt':\n return '<';\n case '$lte':\n return '<=';\n default:\n throw new Error(`Unsupported PostgreSQL RDF-3X aggregate HAVING operator: ${operator}`);\n }\n}\n\nfunction patternEqualities(slotsByVariable: Map<string, PgPatternKey[]>): PgPatternEquality[] {\n const equalities: PgPatternEquality[] = [];\n for (const [variable, slots] of slotsByVariable) {\n const [first, ...rest] = slots;\n if (!first) continue;\n for (const slot of rest) {\n equalities.push({ variable, left: first, right: slot });\n }\n }\n return equalities;\n}\n\nfunction storagePlanMarkers(queryPlan: string[] | undefined): string[] {\n return (queryPlan ?? []).filter((entry) => (\n entry.startsWith('TextSearch(')\n || entry.startsWith('TextMatchSource(')\n || entry.startsWith('VectorSearch(')\n || entry.startsWith('VectorMatchSource(')\n || entry.startsWith('PathScopeSource(')\n || entry.startsWith('AclScopeSource(')\n || entry.startsWith('TopKPushdown(')\n || entry.startsWith('PerSourceCap(')\n || entry === 'NoTsFullMaterialize(TextSearch)'\n || entry === 'NoTsFullMaterialize(VectorSearch)'\n || entry.startsWith('Rdf3x')\n || entry === 'GraphMembershipFilter'\n || entry === 'GraphPrefixMembershipFilter'\n || entry.startsWith('LexicalRange(')\n || entry.startsWith('NumericRange(')\n || entry.startsWith('TermIn(')\n || entry.startsWith('TermNotIn(')\n || entry.startsWith('TermType(')\n || entry.startsWith('Language(')\n || entry.startsWith('Datatype(')\n || entry.startsWith('PostgresCompiledSqlTemplate')\n ));\n}\n\nfunction compilePatternForBinding(pattern: RdfQueryPattern, binding: RdfBindingRow): QuintPattern | null {\n const compiled: QuintPattern = {};\n for (const key of PATTERN_KEYS) {\n const value = pattern[key];\n if (!value) {\n continue;\n }\n if (isVariable(value)) {\n const bound = binding[value.variable];\n if (bound) {\n compiled[key] = bound;\n }\n continue;\n }\n compiled[key] = value;\n }\n return compiled;\n}\n\nfunction bindQuadPattern(pattern: RdfQueryPattern, binding: RdfBindingRow, value: Quad): RdfBindingRow | null {\n const next = { ...binding };\n for (const key of PATTERN_KEYS) {\n const patternValue = pattern[key];\n if (!isVariable(patternValue)) {\n continue;\n }\n const term = value[key] as Term;\n const existing = next[patternValue.variable];\n if (existing && !sameTerm(existing, term)) {\n return null;\n }\n next[patternValue.variable] = term;\n }\n return next;\n}\n\nfunction matchesQuadPattern(value: Quad, pattern: QuintPattern): boolean {\n return PATTERN_KEYS.every((key) => {\n const match = pattern[key];\n return !match || matchesTermPattern(value[key] as Term, key, match);\n });\n}\n\nfunction isQueryExactTerm(match: RdfQueryTermPattern | undefined): match is Term {\n return Boolean(match) && isTerm(match as any);\n}\n\nfunction isQueryTermOperator(match: RdfQueryTermPattern | undefined): match is TermOperators {\n return Boolean(match) && typeof match === 'object' && !isTerm(match as any) && !('variable' in match);\n}\n\nfunction isTermOperator(match: TermMatch | undefined): match is TermOperators {\n return Boolean(match) && typeof match === 'object' && !isTerm(match as any);\n}\n\nfunction matchesTermPattern(term: Term, key: PgPatternKey, match: TermMatch): boolean {\n if (isTerm(match as any)) {\n return sameTerm(term, match as Term);\n }\n const operators = match as TermOperators;\n if (operators.$eq !== undefined && !sameTermOrLexical(term, operators.$eq)) return false;\n if (operators.$ne !== undefined && sameTermOrLexical(term, operators.$ne)) return false;\n if (operators.$in !== undefined && !operators.$in.some((candidate) => sameTermOrLexical(term, candidate))) return false;\n if (operators.$notIn !== undefined && operators.$notIn.some((candidate) => sameTermOrLexical(term, candidate))) return false;\n if (operators.$startsWith !== undefined && !term.value.startsWith(operators.$startsWith)) return false;\n if (operators.$contains !== undefined && !term.value.includes(operators.$contains)) return false;\n if (operators.$endsWith !== undefined && !term.value.endsWith(operators.$endsWith)) return false;\n if (operators.$regex !== undefined && !new RegExp(operators.$regex).test(term.value)) return false;\n if (operators.$strStartsWith !== undefined && !term.value.startsWith(operators.$strStartsWith)) return false;\n if (operators.$strContains !== undefined && !term.value.includes(operators.$strContains)) return false;\n if (operators.$strEndsWith !== undefined && !term.value.endsWith(operators.$strEndsWith)) return false;\n if (operators.$strRegex !== undefined && !new RegExp(operators.$strRegex).test(term.value)) return false;\n if (operators.$language !== undefined && !(term.termType === 'Literal' && term.language === operators.$language)) return false;\n if (operators.$notLanguage !== undefined && !(term.termType === 'Literal' && term.language !== operators.$notLanguage)) return false;\n if (operators.$langMatches !== undefined && !(term.termType === 'Literal' && langMatches(term.language, operators.$langMatches))) return false;\n if (operators.$datatype !== undefined && !(term.termType === 'Literal' && sameTerm(term.datatype, operators.$datatype))) return false;\n if (operators.$notDatatype !== undefined && !(term.termType === 'Literal' && !sameTerm(term.datatype, operators.$notDatatype))) return false;\n if (operators.$termType !== undefined && !matchesTermTypeForKey(term, key, operators.$termType)) return false;\n if (operators.$isNull !== undefined) return !operators.$isNull;\n for (const operator of ['$gt', '$gte', '$lt', '$lte'] as const) {\n const expected = operators[operator];\n if (expected === undefined) continue;\n const comparison = compareFilterValues(term, expected);\n if (operator === '$gt' && comparison <= 0) return false;\n if (operator === '$gte' && comparison < 0) return false;\n if (operator === '$lt' && comparison >= 0) return false;\n if (operator === '$lte' && comparison > 0) return false;\n }\n return true;\n}\n\nfunction orderQuads(values: Quad[], options?: QueryOptions): Quad[] {\n if (!options?.order?.length) {\n return values;\n }\n const directions = 'orderDirections' in options && Array.isArray((options as QueryOptions & { orderDirections?: Array<'asc' | 'desc'> }).orderDirections)\n ? (options as QueryOptions & { orderDirections?: Array<'asc' | 'desc'> }).orderDirections as Array<'asc' | 'desc'>\n : options.order.map(() => (options.reverse ? 'desc' : 'asc'));\n return [...values].sort((left, right) => {\n for (const [index, key] of (options.order ?? []).entries()) {\n const comparison = termToId(left[key] as any).localeCompare(termToId(right[key] as any));\n if (comparison !== 0) {\n return directions[index] === 'desc' ? -comparison : comparison;\n }\n }\n return 0;\n });\n}\n\nfunction matchesNewlyBoundFilters(binding: RdfBindingRow, previousBinding: RdfBindingRow, filters: RdfQueryFilter[]): boolean {\n const newlyBound = filters.filter((filter) => {\n const variables = filter.variable2 ? [filter.variable, filter.variable2] : [filter.variable];\n return variables.every((variableName) => binding[variableName])\n && variables.some((variableName) => !previousBinding[variableName]);\n });\n return matchesBindingFilters(binding, newlyBound);\n}\n\nfunction matchesBindingFilters(binding: RdfBindingRow, filters: RdfQueryFilter[]): boolean {\n return filters.every((filter) => matchesBindingFilter(binding, filter));\n}\n\nfunction matchesBindingFilter(binding: RdfBindingRow, filter: RdfQueryFilter): boolean {\n const value = binding[filter.variable];\n if (filter.operator === '$bound') {\n return Boolean(filter.value) ? Boolean(value) : !value;\n }\n if (!value) {\n return false;\n }\n const comparisonValue = filterOperandValue(value, filter.operand);\n switch (filter.operator) {\n case '$eq':\n if (filter.variable2) return compareVariableFilter(binding, comparisonValue, filter, (comparison) => comparison === 0);\n return filter.value !== undefined && sameTermOrLexical(comparisonValue, filter.value);\n case '$ne':\n if (filter.variable2) return compareVariableFilter(binding, comparisonValue, filter, (comparison) => comparison !== 0);\n return filter.value === undefined || !sameTermOrLexical(comparisonValue, filter.value);\n case '$gt':\n if (filter.variable2) return compareVariableFilter(binding, comparisonValue, filter, (comparison) => comparison > 0);\n return compareTermsForFilter(comparisonValue, filter.value) > 0;\n case '$gte':\n if (filter.variable2) return compareVariableFilter(binding, comparisonValue, filter, (comparison) => comparison >= 0);\n return compareTermsForFilter(comparisonValue, filter.value) >= 0;\n case '$lt':\n if (filter.variable2) return compareVariableFilter(binding, comparisonValue, filter, (comparison) => comparison < 0);\n return compareTermsForFilter(comparisonValue, filter.value) < 0;\n case '$lte':\n if (filter.variable2) return compareVariableFilter(binding, comparisonValue, filter, (comparison) => comparison <= 0);\n return compareTermsForFilter(comparisonValue, filter.value) <= 0;\n case '$in':\n return (filter.values ?? []).some((candidate) => sameTermOrLexical(comparisonValue, candidate));\n case '$notIn':\n return !(filter.values ?? []).some((candidate) => sameTermOrLexical(comparisonValue, candidate));\n case '$startsWith':\n return typeof filter.value === 'string' && filterStringValue(value, comparisonValue).startsWith(filter.value);\n case '$notStartsWith':\n return typeof filter.value === 'string' && !filterStringValue(value, comparisonValue).startsWith(filter.value);\n case '$contains':\n return typeof filter.value === 'string' && filterStringValue(value, comparisonValue).includes(filter.value);\n case '$notContains':\n return typeof filter.value === 'string' && !filterStringValue(value, comparisonValue).includes(filter.value);\n case '$endsWith':\n return typeof filter.value === 'string' && filterStringValue(value, comparisonValue).endsWith(filter.value);\n case '$notEndsWith':\n return typeof filter.value === 'string' && !filterStringValue(value, comparisonValue).endsWith(filter.value);\n case '$regex':\n return typeof filter.value === 'string' && new RegExp(filter.value, filter.flags).test(filterStringValue(value, comparisonValue));\n case '$notRegex':\n return typeof filter.value === 'string' && !new RegExp(filter.value, filter.flags).test(filterStringValue(value, comparisonValue));\n case '$termType':\n return typeof filter.value === 'string' && matchesTermType(value, filter.value);\n case '$notTermType':\n return typeof filter.value === 'string' && !matchesTermType(value, filter.value);\n case '$sameTerm': {\n const right = filter.variable2 ? binding[filter.variable2] : filter.value;\n return Boolean(right && isTerm(right as any) && sameTerm(value, right as Term));\n }\n case '$notSameTerm': {\n const right = filter.variable2 ? binding[filter.variable2] : filter.value;\n return Boolean(right && isTerm(right as any) && !sameTerm(value, right as Term));\n }\n case '$lang':\n return typeof filter.value === 'string' && value.termType === 'Literal' && value.language === filter.value;\n case '$notLang':\n return typeof filter.value === 'string' && value.termType === 'Literal' && value.language !== filter.value;\n case '$langIn':\n return value.termType === 'Literal' && (filter.values ?? []).some((candidate) => typeof candidate === 'string' && value.language === candidate);\n case '$notLangIn':\n return value.termType === 'Literal' && !(filter.values ?? []).some((candidate) => typeof candidate === 'string' && value.language === candidate);\n case '$langMatches':\n return typeof filter.value === 'string' && value.termType === 'Literal' && langMatches(value.language, filter.value);\n case '$notLangMatches':\n return typeof filter.value === 'string' && value.termType === 'Literal' && !langMatches(value.language, filter.value);\n case '$datatype':\n return filter.value !== undefined && value.termType === 'Literal' && sameTermOrLexical(value.datatype, filter.value);\n case '$notDatatype':\n return filter.value !== undefined && value.termType === 'Literal' && !sameTermOrLexical(value.datatype, filter.value);\n case '$datatypeIn':\n return value.termType === 'Literal' && (filter.values ?? []).some((candidate) => sameTermOrLexical(value.datatype, candidate));\n case '$notDatatypeIn':\n return value.termType === 'Literal' && !(filter.values ?? []).some((candidate) => sameTermOrLexical(value.datatype, candidate));\n default: {\n const exhaustive: never = filter.operator;\n throw new Error(`Unsupported RDF facts filter operator: ${exhaustive}`);\n }\n }\n}\n\nfunction compareVariableFilter(\n binding: RdfBindingRow,\n comparisonValue: Term | number | string,\n filter: RdfQueryFilter,\n predicate: (comparison: number) => boolean,\n): boolean {\n if (!filter.variable2) {\n return false;\n }\n const right = binding[filter.variable2];\n if (!right) {\n return false;\n }\n return predicate(compareFilterValues(comparisonValue, filterOperandValue(right, filter.operand)));\n}\n\nfunction filterOperandValue(value: Term, operand: RdfQueryFilter['operand']): Term | number | string {\n switch (operand) {\n case 'stringLength':\n return value.value.length;\n case 'stringValue':\n return value.value;\n case 'lowerStringValue':\n return value.value.toLowerCase();\n case 'upperStringValue':\n return value.value.toUpperCase();\n default:\n return value;\n }\n}\n\nfunction filterStringValue(value: Term, comparisonValue: Term | number | string): string {\n return typeof comparisonValue === 'string' ? comparisonValue : value.value;\n}\n\nfunction sameTerm(left: Term, right: Term): boolean {\n return termToId(left as any) === termToId(right as any);\n}\n\nfunction sameTermOrLexical(left: Term | number | string, right: RdfQueryFilterValue | TermOperators['$eq']): boolean {\n if (typeof left === 'number') {\n if (isNumericFilterValue(right)) {\n return left === rdfNumericValue(isTerm(right as any) ? (right as Term).value : String(right));\n }\n return String(left) === String(right);\n }\n if (typeof left === 'string') {\n return left === (isTerm(right as any) ? (right as Term).value : String(right));\n }\n return isTerm(right as any) ? sameTerm(left, right as Term) : left.value === String(right);\n}\n\nfunction compareTermsForFilter(left: Term | number | string, right: RdfQueryFilterValue | undefined): number {\n if (right === undefined) {\n return 1;\n }\n return compareFilterValues(left, right);\n}\n\nfunction compareFilterValues(left: Term | number | string, right: Term | number | string | boolean): number {\n if (typeof left === 'number') {\n if (isNumericFilterValue(right)) {\n return left - rdfNumericValue(isTerm(right as any) ? (right as Term).value : String(right));\n }\n return String(left).localeCompare(String(right));\n }\n if (typeof left === 'string') {\n return left.localeCompare(isTerm(right as any) ? (right as Term).value : String(right));\n }\n if (isRdfNumericTerm(left) && isNumericFilterValue(right)) {\n return rdfNumericValue(left.value) - rdfNumericValue(isTerm(right as any) ? (right as Term).value : String(right));\n }\n return left.value.localeCompare(isTerm(right as any) ? (right as Term).value : String(right));\n}\n\nfunction matchesTermTypeForKey(term: Term, key: PgPatternKey, expected: string): boolean {\n return termKindsForPatternKey(key).includes(expected as RdfTermKind) && matchesTermType(term, expected);\n}\n\nfunction matchesTermType(term: Term, expected: string): boolean {\n switch (expected) {\n case 'iri':\n return term.termType === 'NamedNode';\n case 'blank':\n return term.termType === 'BlankNode';\n case 'literal':\n return term.termType === 'Literal';\n case 'numeric':\n return isRdfNumericTerm(term);\n default:\n return false;\n }\n}\n\nfunction langMatches(languageTag: string, languageRange: string): boolean {\n if (!languageTag) {\n return false;\n }\n if (languageRange === '*') {\n return true;\n }\n const normalizedTag = languageTag.toLowerCase();\n const normalizedRange = languageRange.toLowerCase();\n return normalizedTag === normalizedRange || normalizedTag.startsWith(`${normalizedRange}-`);\n}\n\nfunction isNumericFilterValue(value: RdfQueryFilterValue | TermOperators['$eq']): boolean {\n return isTerm(value as any)\n ? isRdfNumericTerm(value as Term)\n : (typeof value === 'number' || (typeof value === 'string' && isFiniteNumericLexical(value)));\n}\n\nfunction joinValuesSource(input: RdfBindingRow[], source: RdfValuesBindingSource): RdfBindingRow[] {\n const output: RdfBindingRow[] = [];\n for (const binding of input) {\n for (const row of source.rows) {\n const next = mergeTupleValuesBinding(binding, source.variables, row);\n if (next) {\n output.push(next);\n }\n }\n }\n return output;\n}\n\nfunction mergeTupleValuesBinding(binding: RdfBindingRow, variables: string[], row: RdfBindingRow): RdfBindingRow | null {\n const next = { ...binding };\n for (const variableName of variables) {\n const value = row[variableName];\n if (!value) {\n continue;\n }\n const existing = next[variableName];\n if (existing && !sameTerm(existing, value)) {\n return null;\n }\n next[variableName] = value;\n }\n return next;\n}\n\nfunction estimateValuesSourceVariableDistinctRows(\n source: RdfValuesBindingSource,\n): Record<string, number> {\n const output = joinValuesSource([{}], source);\n return Object.fromEntries(source.variables.map((variableName) => [\n variableName,\n Math.max(1, countBindings(output, variableName, true)),\n ]));\n}\n\nfunction projectBinding(binding: RdfBindingRow, select: string[]): RdfBindingRow {\n const projected: RdfBindingRow = {};\n for (const variableName of select) {\n const value = binding[variableName];\n if (value) {\n projected[variableName] = value;\n }\n }\n return projected;\n}\n\nfunction compareBindings(left: RdfBindingRow, right: RdfBindingRow, orderBy: NonNullable<RdfQuery['orderBy']>): number {\n for (const order of orderBy) {\n const comparison = compareBindingOrderTerm(left[order.variable], right[order.variable]);\n if (comparison !== 0) {\n return order.direction === 'desc' ? -comparison : comparison;\n }\n }\n return 0;\n}\n\nfunction orderBindingsForQuery(bindings: RdfBindingRow[], orderBy: NonNullable<RdfQuery['orderBy']>): RdfBindingRow[] {\n return [...bindings].sort((left, right) => {\n for (const order of orderBy) {\n const comparison = compareBindingOrderTerm(left[order.variable], right[order.variable]);\n if (comparison !== 0) {\n return order.direction === 'desc' ? -comparison : comparison;\n }\n }\n return 0;\n });\n}\n\nfunction compareBindingOrderTerm(left: Term | undefined, right: Term | undefined): number {\n if (!left && !right) return 0;\n if (!left) return -1;\n if (!right) return 1;\n if (isRdfNumericTerm(left) && isRdfNumericTerm(right)) {\n return rdfNumericValue(left.value) - rdfNumericValue(right.value);\n }\n return termToId(left as any).localeCompare(termToId(right as any));\n}\n\nfunction bindingKey(binding: RdfBindingRow, variables?: string[]): string {\n return [...(variables ?? Object.keys(binding))]\n .sort()\n .map((key) => {\n const value = binding[key];\n return `${key}=${value ? termToId(value as any) : '__UNBOUND__'}`;\n })\n .join('\\u001f');\n}\n\nfunction distinctBindings(bindings: RdfBindingRow[]): RdfBindingRow[] {\n const seen = new Set<string>();\n const output: RdfBindingRow[] = [];\n for (const binding of bindings) {\n const key = bindingKey(binding);\n if (seen.has(key)) {\n continue;\n }\n seen.add(key);\n output.push(binding);\n }\n return output;\n}\n\nfunction aggregateBindings(bindings: RdfBindingRow[], aggregates: RdfQueryAggregate[]): { binding: RdfBindingRow; firstCount: number } {\n const binding: RdfBindingRow = {};\n let firstCount = 0;\n aggregates.forEach((aggregate, index) => {\n const count = aggregate.type === 'count'\n ? countBindings(bindings, aggregate.variable, aggregate.distinct, aggregate.distinctVariables)\n : 0;\n if (index === 0) {\n firstCount = count;\n }\n const term = aggregateLiteral(bindings, aggregate);\n if (term) {\n binding[aggregate.as] = term;\n }\n });\n return { binding, firstCount };\n}\n\nfunction groupAggregateBindings(bindings: RdfBindingRow[], groupBy: string[], aggregates: RdfQueryAggregate[]): RdfBindingRow[] {\n const groups = new Map<string, RdfBindingRow[]>();\n for (const binding of bindings) {\n const key = groupBy.map((variableName) => {\n const value = binding[variableName];\n return value ? termToId(value as any) : '__UNBOUND__';\n }).join('\\u001f');\n groups.set(key, [...(groups.get(key) ?? []), binding]);\n }\n return [...groups.values()].map((groupBindings) => {\n const first = groupBindings[0];\n const grouped: RdfBindingRow = {};\n for (const variableName of groupBy) {\n if (first[variableName]) {\n grouped[variableName] = first[variableName];\n }\n }\n for (const aggregate of aggregates) {\n const term = aggregateLiteral(groupBindings, aggregate);\n if (term) {\n grouped[aggregate.as] = term;\n }\n }\n return grouped;\n });\n}\n\nfunction countBindings(bindings: RdfBindingRow[], variable?: string, distinct?: boolean, distinctVariables?: string[]): number {\n if (!distinct) {\n return variable ? bindings.filter((binding) => binding[variable]).length : bindings.length;\n }\n if (!variable) {\n return new Set(bindings.map((binding) => bindingKey(binding, distinctVariables))).size;\n }\n return new Set(bindings\n .map((binding) => binding[variable])\n .filter((term): term is Term => Boolean(term))\n .map((term) => termToId(term as any))).size;\n}\n\nfunction aggregateLiteral(bindings: RdfBindingRow[], aggregate: RdfQueryAggregate): Term | undefined {\n if (aggregate.type === 'count') {\n return countLiteral(countBindings(bindings, aggregate.variable, aggregate.distinct, aggregate.distinctVariables));\n }\n const values = numericAggregateValues(bindings, aggregate.variable, aggregate.distinct);\n if (values.length === 0) {\n return aggregate.type === 'sum' ? decimalLiteral(0) : undefined;\n }\n switch (aggregate.type) {\n case 'sum':\n return decimalLiteral(values.reduce((sum, value) => sum + value, 0));\n case 'avg':\n return decimalLiteral(values.reduce((sum, value) => sum + value, 0) / values.length);\n case 'min':\n return decimalLiteral(Math.min(...values));\n case 'max':\n return decimalLiteral(Math.max(...values));\n default: {\n const exhaustive: never = aggregate.type;\n throw new Error(`Unsupported RDF facts aggregate type: ${exhaustive}`);\n }\n }\n}\n\nfunction numericAggregateValues(bindings: RdfBindingRow[], variable?: string, distinct?: boolean): number[] {\n if (!variable) {\n return [];\n }\n const values: number[] = [];\n const seen = new Set<string>();\n for (const binding of bindings) {\n const term = binding[variable];\n if (!term || !isRdfNumericTerm(term)) {\n continue;\n }\n if (distinct) {\n const key = termToId(term as any);\n if (seen.has(key)) {\n continue;\n }\n seen.add(key);\n }\n values.push(rdfNumericValue(term.value));\n }\n return values;\n}\n\nfunction countLiteral(count: number): Term {\n return DataFactory.literal(String(count), DataFactory.namedNode(XSD_INTEGER)) as Term;\n}\n\nfunction decimalLiteral(value: number): Term {\n return DataFactory.literal(String(value), DataFactory.namedNode(XSD_DECIMAL)) as Term;\n}\n\nfunction evaluateBindExpression(expression: RdfBindExpression, binding: RdfBindingRow): Term | undefined {\n switch (expression.type) {\n case 'term':\n return expression.term;\n case 'variable':\n return binding[expression.variable];\n case 'stringValue': {\n const value = binding[expression.variable];\n return value ? DataFactory.literal(value.value) as Term : undefined;\n }\n case 'stringLength': {\n const value = binding[expression.variable];\n return value ? countLiteral(value.value.length) : undefined;\n }\n case 'lowerCase': {\n const value = evaluateBindExpression(expression.expression, binding);\n return value ? DataFactory.literal(value.value.toLocaleLowerCase('en-US')) as Term : undefined;\n }\n case 'upperCase': {\n const value = evaluateBindExpression(expression.expression, binding);\n return value ? DataFactory.literal(value.value.toLocaleUpperCase('en-US')) as Term : undefined;\n }\n case 'coalesce':\n for (const item of expression.expressions) {\n const value = evaluateBindExpression(item, binding);\n if (value) {\n return value;\n }\n }\n return undefined;\n case 'if':\n return matchesBindingFilters(binding, expression.condition)\n ? evaluateBindExpression(expression.then, binding)\n : evaluateBindExpression(expression.else, binding);\n case 'numericValue': {\n const value = evaluateBindExpression(expression.expression, binding);\n const numeric = value ? finiteBindNumber(value) : undefined;\n return numeric === undefined ? undefined : decimalLiteral(numeric);\n }\n case 'add': {\n const values = expression.expressions.map((item) => evaluateBindNumber(item, binding));\n return values.every((value): value is number => value !== undefined)\n ? decimalLiteral(values.reduce((total, value) => total + value, 0))\n : undefined;\n }\n case 'multiply': {\n if (expression.expressions.length === 0) {\n return undefined;\n }\n const values = expression.expressions.map((item) => evaluateBindNumber(item, binding));\n return values.every((value): value is number => value !== undefined)\n ? decimalLiteral(values.reduce((total, value) => total * value, 1))\n : undefined;\n }\n case 'substring': {\n const value = evaluateBindExpression(expression.expression, binding);\n const startTerm = evaluateBindExpression(expression.start, binding);\n const start = startTerm ? finiteBindNumber(startTerm) : undefined;\n const lengthTerm = expression.length ? evaluateBindExpression(expression.length, binding) : undefined;\n const length = lengthTerm ? finiteBindNumber(lengthTerm) : undefined;\n if (!value || start === undefined || (expression.length && length === undefined)) {\n return undefined;\n }\n const startIndex = Math.max(0, Math.round(start) - 1);\n const lengthValue = length === undefined ? undefined : Math.max(0, Math.round(length));\n return DataFactory.literal(value.value.slice(startIndex, lengthValue === undefined ? undefined : startIndex + lengthValue)) as Term;\n }\n case 'concat': {\n const values = expression.expressions.map((item) => evaluateBindExpression(item, binding));\n return values.every((value): value is Term => Boolean(value))\n ? DataFactory.literal(values.map((value) => value.value).join('')) as Term\n : undefined;\n }\n case 'iri': {\n const value = evaluateBindExpression(expression.expression, binding);\n if (!value) {\n return undefined;\n }\n try {\n return DataFactory.namedNode(new URL(value.value, expression.base).href) as Term;\n } catch {\n return undefined;\n }\n }\n case 'strdt': {\n const lexical = evaluateBindExpression(expression.lexical, binding);\n const datatype = evaluateBindExpression(expression.datatype, binding);\n if (!lexical || !datatype || datatype.termType !== 'NamedNode') {\n return undefined;\n }\n return DataFactory.literal(lexical.value, DataFactory.namedNode(datatype.value)) as Term;\n }\n case 'strlang': {\n const lexical = evaluateBindExpression(expression.lexical, binding);\n const language = evaluateBindExpression(expression.language, binding);\n if (!lexical || !language) {\n return undefined;\n }\n return DataFactory.literal(lexical.value, language.value) as Term;\n }\n default: {\n const exhaustive: never = expression;\n throw new Error(`Unsupported RDF facts BIND expression: ${JSON.stringify(exhaustive)}`);\n }\n }\n}\n\nfunction evaluateBindNumber(expression: RdfBindExpression, binding: RdfBindingRow): number | undefined {\n const value = evaluateBindExpression(expression, binding);\n return value ? finiteBindNumber(value) : undefined;\n}\n\nfunction finiteBindNumber(term: Term): number | undefined {\n if (term.termType !== 'Literal') {\n return undefined;\n }\n const value = Number(term.value);\n return Number.isFinite(value) ? value : undefined;\n}\n\nfunction describeBind(bind: RdfQueryBind): string {\n return `?${bind.variable}:=${describeBindExpression(bind.expression)}`;\n}\n\nfunction describeBindExpression(expression: RdfBindExpression): string {\n switch (expression.type) {\n case 'term':\n return termToId(expression.term as any);\n case 'variable':\n return `?${expression.variable}`;\n case 'stringValue':\n return `STR(?${expression.variable})`;\n case 'stringLength':\n return `STRLEN(?${expression.variable})`;\n case 'lowerCase':\n return `LCASE(${describeBindExpression(expression.expression)})`;\n case 'upperCase':\n return `UCASE(${describeBindExpression(expression.expression)})`;\n case 'coalesce':\n return `COALESCE(${expression.expressions.map(describeBindExpression).join(',')})`;\n case 'if':\n return `IF(${expression.condition.map(describeFilter).join('&')},${describeBindExpression(expression.then)},${describeBindExpression(expression.else)})`;\n case 'numericValue':\n return `NUM(${describeBindExpression(expression.expression)})`;\n case 'add':\n return `(${expression.expressions.map(describeBindExpression).join('+')})`;\n case 'multiply':\n return `(${expression.expressions.map(describeBindExpression).join('*')})`;\n case 'substring':\n return `SUBSTR(${[\n describeBindExpression(expression.expression),\n describeBindExpression(expression.start),\n expression.length ? describeBindExpression(expression.length) : undefined,\n ].filter(Boolean).join(',')})`;\n case 'concat':\n return `CONCAT(${expression.expressions.map(describeBindExpression).join(',')})`;\n case 'iri':\n return `IRI(${describeBindExpression(expression.expression)})`;\n case 'strdt':\n return `STRDT(${describeBindExpression(expression.lexical)},${describeBindExpression(expression.datatype)})`;\n case 'strlang':\n return `STRLANG(${describeBindExpression(expression.lexical)},${describeBindExpression(expression.language)})`;\n default: {\n const exhaustive: never = expression;\n return JSON.stringify(exhaustive);\n }\n }\n}\n\nfunction describeTextSearch(pattern: RdfTextSearchPattern): string {\n const bindings = [\n pattern.source ? `source:?${pattern.source}` : undefined,\n pattern.chunk ? `chunk:?${pattern.chunk}` : undefined,\n pattern.content ? `content:?${pattern.content}` : undefined,\n pattern.heading ? `heading:?${pattern.heading}` : undefined,\n pattern.score ? `score:?${pattern.score}` : undefined,\n ].filter(Boolean).join(',');\n const scope = pattern.scope?.workspace\n ? `workspace:${pattern.scope.workspace}`\n : pattern.scope?.sourcePrefix\n ? `prefix:${pattern.scope.sourcePrefix}`\n : '*';\n const entityConstraint = pattern.entities?.length ? ` entities:${pattern.entities.length}` : '';\n return `${JSON.stringify(pattern.query)}@${scope}${bindings ? ` ${bindings}` : ''}${entityConstraint}${describeSearchWindow(pattern.limit, pattern.offset)}${describeSearchOrder(pattern.orderBy)}`;\n}\n\nfunction describeTextSearchPlan(pattern: RdfTextSearchPattern): string[] {\n const source = describeTextSearch(pattern);\n const entries = [\n `TextSearch(${source})`,\n `TextMatchSource(${source})`,\n ];\n entries.push(...describeSearchScopePlan(pattern.scope));\n const topK = describeTextSearchTopKPushdown(pattern);\n if (topK) {\n entries.push(topK, 'NoTsFullMaterialize(TextSearch)');\n }\n const perSourceCap = describeTextSearchPerSourceCap(pattern);\n if (perSourceCap) {\n entries.push(perSourceCap);\n }\n return entries;\n}\n\nfunction pushUniquePlan(plan: string[], entry: string): void {\n if (!plan.includes(entry)) {\n plan.push(entry);\n }\n}\n\nfunction describePgSourceEstimate(\n source: string,\n estimatedRows: number,\n estimatedCostRows: number,\n topK: string,\n connected: boolean,\n): string {\n const rows = Math.max(0, Math.ceil(estimatedRows));\n const costRows = Math.max(rows, Math.ceil(estimatedCostRows));\n const selectivity = costRows > 0 ? rows / costRows : 0;\n return `SourceEstimate(${source} rows:${rows} cost:${costRows} selectivity:${formatPlanRatio(selectivity)} topk:${topK} connected:${connected})`;\n}\n\nfunction describePgSearchScopeSourceEstimates(\n pattern: RdfTextSearchPattern | RdfVectorSearchPattern,\n sourceIndex: number,\n estimatedRows: number,\n estimatedCostRows: number,\n connected: boolean,\n): string[] {\n const scope = pattern.scope;\n if (!scope) {\n return [];\n }\n\n const entries: string[] = [];\n if (scope.workspace || scope.sourcePrefix || scope.localPathPrefix) {\n entries.push(describePgSourceEstimate(\n `PathScopeSource#${sourceIndex}`,\n estimatedRows,\n estimatedCostRows,\n 'none',\n connected,\n ));\n }\n if (\n scope.accessBasePath\n || (scope.allowedSources?.length ?? 0) > 0\n || (scope.deniedSources?.length ?? 0) > 0\n || (scope.deniedSourcePrefixes?.length ?? 0) > 0\n ) {\n entries.push(describePgSourceEstimate(\n `AclScopeSource#${sourceIndex}`,\n estimatedRows,\n estimatedCostRows,\n 'none',\n connected,\n ));\n }\n return entries;\n}\n\nfunction buildPgRequiredSources(\n requiredPatterns: RdfQueryPattern[],\n query: RdfQuery,\n): PgRequiredSource[] {\n return [\n ...(query.values ?? []).map((source, originalIndex): PgRequiredSource => ({\n kind: 'values',\n source,\n originalIndex,\n })),\n ...requiredPatterns.map((pattern, originalIndex): PgRequiredSource => ({\n kind: 'pattern',\n pattern,\n originalIndex,\n })),\n ...(query.textSearch ?? []).map((pattern, originalIndex): PgRequiredSource => ({\n kind: 'text',\n pattern,\n originalIndex,\n })),\n ...(query.vectorSearch ?? []).map((pattern, originalIndex): PgRequiredSource => ({\n kind: 'vector',\n pattern,\n originalIndex,\n })),\n ];\n}\n\nfunction pgBoundVariables(bindings: RdfBindingRow[]): Set<string> {\n const names = new Set<string>();\n for (const binding of bindings.slice(0, PG_PLANNER_SAMPLE_BINDINGS)) {\n for (const name of Object.keys(binding)) {\n names.add(name);\n }\n }\n return names;\n}\n\nfunction pgBoundVariableDistinctRows(bindings: RdfBindingRow[]): Map<string, number> {\n const distinctRows = new Map<string, number>();\n for (const variableName of pgBoundVariables(bindings)) {\n distinctRows.set(variableName, Math.max(1, countBindings(bindings, variableName, true)));\n }\n return distinctRows;\n}\n\nfunction pgPlannerBindingsAreRoot(bindings: RdfBindingRow[]): boolean {\n return bindings.length === 0\n || (bindings.length === 1 && Object.keys(bindings[0] ?? {}).length === 0);\n}\n\nfunction pgRequiredSourceConnected(source: PgRequiredSource, boundVariables: Set<string>): boolean {\n const sourceVariables = pgVariablesInRequiredSource(source);\n return sourceVariables.length === 0 || sourceVariables.some((name) => boundVariables.has(name));\n}\n\nfunction estimatePgPlannerFutureCostRows(\n selected: PgRequiredSourceChoice,\n candidates: PgRequiredSourceChoice[],\n boundVariables: Set<string>,\n boundDistinctRows: Map<string, number>,\n): { costRows: number; bounded: boolean } {\n const remaining = candidates.filter((candidate) => candidate.originalOrder !== selected.originalOrder);\n if (remaining.length === 0) {\n return { costRows: 0, bounded: false };\n }\n const nextBoundVariables = new Set(boundVariables);\n for (const variable of pgVariablesInRequiredSource(selected.source)) {\n nextBoundVariables.add(variable);\n }\n const nextBoundDistinctRows = mergePgPlannerBoundDistinctRows(\n boundDistinctRows,\n selected,\n selected.outputRows,\n );\n return estimatePgPlannerSuffixCostRows(\n remaining,\n nextBoundVariables,\n nextBoundDistinctRows,\n Math.max(1, selected.outputRows),\n PG_PLANNER_SUFFIX_LOOKAHEAD_DEPTH,\n );\n}\n\nfunction estimatePgPlannerSuffixCostRows(\n candidates: PgRequiredSourceChoice[],\n boundVariables: Set<string>,\n boundDistinctRows: Map<string, number>,\n inputRows: number,\n depthRemaining: number,\n): { costRows: number; bounded: boolean } {\n if (candidates.length === 0) {\n return { costRows: 0, bounded: false };\n }\n if (depthRemaining <= 0) {\n return {\n costRows: estimatePgPlannerGreedySuffixCostRows(candidates, boundVariables, boundDistinctRows, inputRows),\n bounded: true,\n };\n }\n\n let bestCost = Number.POSITIVE_INFINITY;\n let bounded = candidates.length > PG_PLANNER_SUFFIX_LOOKAHEAD_WIDTH;\n const considered = rankPgPlannerLookaheadCandidates(candidates, boundVariables, boundDistinctRows, inputRows)\n .slice(0, PG_PLANNER_SUFFIX_LOOKAHEAD_WIDTH);\n for (const candidate of considered) {\n const connected = pgRequiredSourceConnected(candidate.source, boundVariables);\n const outputRows = estimatePgPlannerAbstractOutputRows(\n candidate.source,\n candidate.baseRows,\n inputRows,\n connected,\n boundDistinctRows,\n candidate.variableDistinctRows,\n );\n const immediateCost = estimatePgPlannerImmediateCostRows(candidate.source, candidate.baseRows, outputRows, inputRows);\n const nextBoundVariables = new Set(boundVariables);\n for (const variable of pgVariablesInRequiredSource(candidate.source)) {\n nextBoundVariables.add(variable);\n }\n const nextBoundDistinctRows = mergePgPlannerBoundDistinctRows(boundDistinctRows, candidate, outputRows);\n const remaining = candidates.filter((entry) => entry.originalOrder !== candidate.originalOrder);\n const suffixCost = estimatePgPlannerSuffixCostRows(\n remaining,\n nextBoundVariables,\n nextBoundDistinctRows,\n Math.max(1, outputRows),\n depthRemaining - 1,\n );\n bounded = bounded || suffixCost.bounded;\n const cost = immediateCost.totalCostRows + suffixCost.costRows;\n bestCost = Math.min(bestCost, cost);\n }\n return {\n costRows: Number.isFinite(bestCost) ? bestCost : 0,\n bounded,\n };\n}\n\nfunction estimatePgPlannerAbstractOutputRows(\n source: PgRequiredSource,\n estimateRows: number,\n inputRows: number,\n connected: boolean,\n boundDistinctRows?: Map<string, number>,\n sourceVariableDistinctRows?: Record<string, number>,\n): number {\n const safeEstimateRows = Math.max(0, estimateRows);\n const safeInputRows = Math.max(1, inputRows);\n if (!connected) {\n return safeEstimateRows * safeInputRows;\n }\n const variables = pgVariablesInRequiredSource(source);\n if (variables.length === 0) {\n return safeEstimateRows;\n }\n const sharedVariables = boundDistinctRows\n ? variables.filter((variableName) => boundDistinctRows.has(variableName))\n : [];\n if (sharedVariables.length === 0) {\n return Math.max(safeEstimateRows, safeInputRows);\n }\n let outputRows = safeInputRows * safeEstimateRows;\n for (const variableName of sharedVariables) {\n const inputDistinctRows = Math.max(1, boundDistinctRows?.get(variableName) ?? safeInputRows);\n const sourceDistinctRows = Math.max(1, sourceVariableDistinctRows?.[variableName] ?? safeEstimateRows);\n outputRows /= Math.max(inputDistinctRows, sourceDistinctRows);\n }\n return Math.max(1, Math.ceil(Math.min(safeInputRows * safeEstimateRows, outputRows)));\n}\n\nfunction estimatePgPlannerImmediateCostRows(\n source: PgRequiredSource,\n estimateRows: number,\n outputRows: number,\n inputRows: number,\n): { costRows: number; cpuCostRows: number; ioCostRows: number; totalCostRows: number } {\n const safeEstimateRows = Math.max(0, estimateRows);\n const safeOutputRows = Math.max(0, outputRows);\n const safeInputRows = Math.max(1, inputRows);\n const costRows = safeOutputRows;\n let cpuCostRows = 0;\n let ioCostRows = 0;\n switch (source.kind) {\n case 'values':\n cpuCostRows = safeInputRows * safeEstimateRows;\n ioCostRows = 0;\n break;\n case 'pattern':\n cpuCostRows = safeOutputRows * 0.1;\n ioCostRows = safeEstimateRows;\n break;\n case 'text':\n cpuCostRows = safeEstimateRows * 0.75 + safeOutputRows * 0.25;\n ioCostRows = safeEstimateRows > 0 ? Math.max(1, safeEstimateRows * 0.2) : 0;\n break;\n case 'vector':\n cpuCostRows = safeEstimateRows * 1.25 + safeOutputRows * 0.25;\n ioCostRows = safeEstimateRows > 0 ? Math.max(1, safeEstimateRows * 0.4) : 0;\n break;\n }\n return {\n costRows,\n cpuCostRows,\n ioCostRows,\n totalCostRows: costRows + cpuCostRows + ioCostRows,\n };\n}\n\nfunction mergePgPlannerBoundDistinctRows(\n boundDistinctRows: Map<string, number>,\n source: PgRequiredSourceChoice,\n outputRows: number,\n): Map<string, number> {\n const next = new Map(boundDistinctRows);\n mergePgPlannerBoundDistinctRowsInPlace(next, source, outputRows);\n return next;\n}\n\nfunction mergePgPlannerBoundDistinctRowsInPlace(\n boundDistinctRows: Map<string, number>,\n source: PgRequiredSourceChoice,\n outputRows: number,\n): void {\n const safeOutputRows = Math.max(1, outputRows);\n for (const variableName of pgVariablesInRequiredSource(source.source)) {\n const sourceDistinctRows = Math.max(1, source.variableDistinctRows[variableName] ?? source.estimateRows);\n const existingDistinctRows = boundDistinctRows.get(variableName);\n const mergedDistinctRows = existingDistinctRows === undefined\n ? sourceDistinctRows\n : Math.min(existingDistinctRows, sourceDistinctRows);\n boundDistinctRows.set(variableName, Math.max(1, Math.min(safeOutputRows, mergedDistinctRows)));\n }\n}\n\nfunction estimatePgPlannerGreedySuffixCostRows(\n candidates: PgRequiredSourceChoice[],\n boundVariables: Set<string>,\n boundDistinctRows: Map<string, number>,\n inputRows: number,\n): number {\n let remaining = [...candidates];\n const currentBoundVariables = new Set(boundVariables);\n const currentBoundDistinctRows = new Map(boundDistinctRows);\n let currentInputRows = inputRows;\n let totalCostRows = 0;\n while (remaining.length > 0) {\n const [candidate] = rankPgPlannerLookaheadCandidates(\n remaining,\n currentBoundVariables,\n currentBoundDistinctRows,\n currentInputRows,\n );\n if (!candidate) {\n break;\n }\n const connected = pgRequiredSourceConnected(candidate.source, currentBoundVariables);\n const outputRows = estimatePgPlannerAbstractOutputRows(\n candidate.source,\n candidate.baseRows,\n currentInputRows,\n connected,\n currentBoundDistinctRows,\n candidate.variableDistinctRows,\n );\n totalCostRows += estimatePgPlannerImmediateCostRows(candidate.source, candidate.baseRows, outputRows, currentInputRows).totalCostRows;\n currentInputRows = Math.max(1, outputRows);\n for (const variable of pgVariablesInRequiredSource(candidate.source)) {\n currentBoundVariables.add(variable);\n }\n mergePgPlannerBoundDistinctRowsInPlace(currentBoundDistinctRows, candidate, outputRows);\n remaining = remaining.filter((entry) => entry.originalOrder !== candidate.originalOrder);\n }\n return totalCostRows;\n}\n\nfunction rankPgPlannerLookaheadCandidates(\n candidates: PgRequiredSourceChoice[],\n boundVariables: Set<string>,\n boundDistinctRows: Map<string, number>,\n inputRows: number,\n): PgRequiredSourceChoice[] {\n return [...candidates].sort((left, right) => {\n const leftConnected = pgRequiredSourceConnected(left.source, boundVariables);\n const rightConnected = pgRequiredSourceConnected(right.source, boundVariables);\n const leftOutputRows = estimatePgPlannerAbstractOutputRows(\n left.source,\n left.baseRows,\n inputRows,\n leftConnected,\n boundDistinctRows,\n left.variableDistinctRows,\n );\n const rightOutputRows = estimatePgPlannerAbstractOutputRows(\n right.source,\n right.baseRows,\n inputRows,\n rightConnected,\n boundDistinctRows,\n right.variableDistinctRows,\n );\n const leftCost = estimatePgPlannerImmediateCostRows(left.source, left.baseRows, leftOutputRows, inputRows);\n const rightCost = estimatePgPlannerImmediateCostRows(right.source, right.baseRows, rightOutputRows, inputRows);\n return left.priority - right.priority\n || Number(!leftConnected) - Number(!rightConnected)\n || leftCost.totalCostRows - rightCost.totalCostRows\n || leftOutputRows - rightOutputRows\n || left.estimateRows - right.estimateRows\n || left.originalOrder - right.originalOrder;\n });\n}\n\nfunction pgVariablesInRequiredSource(source: PgRequiredSource): string[] {\n if (source.kind === 'pattern') {\n return variablesInPattern(source.pattern);\n }\n if (source.kind === 'values') {\n return source.source.variables;\n }\n return uniqueStrings([\n source.pattern.source,\n source.pattern.chunk,\n source.pattern.content,\n source.pattern.heading,\n source.pattern.score,\n source.pattern.scoreComponents,\n source.pattern.workspace,\n source.pattern.localPath,\n source.pattern.contentType,\n source.pattern.sourceKey,\n source.pattern.retrievalPoint,\n source.pattern.ordinal,\n source.pattern.level,\n source.pattern.startOffset,\n source.pattern.endOffset,\n ...(source.kind === 'text'\n ? [\n source.pattern.retrievalKind,\n source.pattern.entityProvenance,\n ]\n : [\n source.pattern.distance,\n source.pattern.provider,\n source.pattern.model,\n source.pattern.modelVersion,\n source.pattern.inputKind,\n source.pattern.inputHash,\n source.pattern.projectionPolicyVersion,\n ]),\n ].filter((value): value is string => typeof value === 'string' && value.length > 0));\n}\n\nfunction describePgPlannerSourceChoice(\n selected: PgRequiredSourceChoice,\n candidates: PgRequiredSourceChoice[],\n): string {\n return `PostgresPlannerSourceChoice(selected:${describePgRequiredSourceName(selected.source)} candidates:${candidates.map((candidate) => (\n `${describePgRequiredSourceName(candidate.source)}[priority:${candidate.priority},connected:${candidate.connected},input:${candidate.inputRows},rows:${Math.max(0, Math.ceil(candidate.estimateRows))},base:${Math.max(0, Math.ceil(candidate.baseRows))},dist:${describePgPlannerDistinctRows(candidate.variableDistinctRows)},output:${Math.max(0, Math.ceil(candidate.outputRows))},cost:${Math.max(0, Math.ceil(candidate.costRows))},cpu:${Math.max(0, Math.ceil(candidate.cpuCostRows))},io:${Math.max(0, Math.ceil(candidate.ioCostRows))},future:${Math.max(0, Math.ceil(candidate.futureCostRows))},lookahead:${candidate.futureCostBounded ? 'bounded' : 'full'},total:${Math.max(0, Math.ceil(candidate.totalCostRows))},penalty:${candidate.disconnectedPenalty}]`\n )).join(',')})`;\n}\n\nfunction describePgPlannerDistinctRows(variableDistinctRows: Record<string, number>): string {\n const entries = Object.entries(variableDistinctRows)\n .filter(([, rows]) => Number.isFinite(rows) && rows > 0)\n .sort(([left], [right]) => left.localeCompare(right));\n return entries.length > 0\n ? entries.map(([variableName, rows]) => `${variableName}=${Math.max(1, Math.ceil(rows))}`).join('|')\n : 'none';\n}\n\nfunction describePgRequiredSourceName(source: PgRequiredSource): string {\n switch (source.kind) {\n case 'pattern':\n return `RdfBgpSource#${source.originalIndex}`;\n case 'values':\n return `ValuesSource#${source.originalIndex}`;\n case 'text':\n return `TextMatchSource#${source.originalIndex}`;\n case 'vector':\n return `VectorMatchSource#${source.originalIndex}`;\n }\n}\n\nfunction applyPgSearchCandidateBudget(query: RdfQuery): { query: RdfQuery; plan: string[] } {\n const budget = pgSearchCandidateBudget(query);\n if (budget === undefined) {\n return { query, plan: [] };\n }\n const rankedVariables = pgSearchRankInputVariables(query);\n if (rankedVariables.size === 0) {\n return { query, plan: [] };\n }\n\n const plan: string[] = [];\n const textSearch = (query.textSearch ?? []).map((pattern) => {\n if (!pattern.score || !rankedVariables.has(pattern.score) || hasSearchWindow(pattern)) {\n return pattern;\n }\n plan.push(`CandidateBudget(TextSearch limit:${budget} from-query-limit:${Math.max(0, query.limit ?? 0)})`);\n return { ...pattern, candidateLimit: budget };\n });\n const vectorSearch = (query.vectorSearch ?? []).map((pattern) => {\n if (!pattern.score || !rankedVariables.has(pattern.score) || hasSearchWindow(pattern)) {\n return pattern;\n }\n plan.push(`CandidateBudget(VectorSearch limit:${budget} from-query-limit:${Math.max(0, query.limit ?? 0)})`);\n return { ...pattern, candidateLimit: budget };\n });\n\n if (plan.length === 0) {\n return { query, plan: [] };\n }\n\n return {\n query: {\n ...query,\n ...(textSearch.length > 0 ? { textSearch } : {}),\n ...(vectorSearch.length > 0 ? { vectorSearch } : {}),\n },\n plan,\n };\n}\n\nfunction pgSearchCandidateBudget(query: RdfQuery): number | undefined {\n if (query.limit === undefined) {\n return undefined;\n }\n if ((query.textSearch?.length ?? 0) === 0 && (query.vectorSearch?.length ?? 0) === 0) {\n return undefined;\n }\n if (!query.orderBy?.some((entry) => (entry.direction ?? 'asc') === 'desc')) {\n return undefined;\n }\n const requestedRows = Math.max(0, query.limit + (query.offset ?? 0));\n if (requestedRows === 0) {\n return 0;\n }\n return Math.min(\n PG_SEARCH_CANDIDATE_BUDGET_MAX,\n Math.max(PG_SEARCH_CANDIDATE_BUDGET_MIN, requestedRows * PG_SEARCH_CANDIDATE_BUDGET_MULTIPLIER),\n );\n}\n\nfunction pgSearchRankInputVariables(query: RdfQuery): Set<string> {\n const rankedVariables = new Set<string>();\n for (const order of query.orderBy ?? []) {\n if ((order.direction ?? 'asc') !== 'desc') {\n continue;\n }\n const bind = query.binds?.find((entry) => entry.variable === order.variable);\n if (!bind) {\n continue;\n }\n for (const variable of bindExpressionVariables(bind.expression)) {\n rankedVariables.add(variable);\n }\n }\n return rankedVariables;\n}\n\nfunction bindExpressionVariables(expression: RdfBindExpression): Set<string> {\n const variables = new Set<string>();\n collectBindExpressionVariables(expression, variables);\n return variables;\n}\n\nfunction collectBindExpressionVariables(expression: RdfBindExpression, variables: Set<string>): void {\n switch (expression.type) {\n case 'variable':\n variables.add(expression.variable);\n return;\n case 'stringValue':\n case 'stringLength':\n variables.add(expression.variable);\n return;\n case 'term':\n return;\n case 'lowerCase':\n case 'upperCase':\n case 'numericValue':\n case 'iri':\n collectBindExpressionVariables(expression.expression, variables);\n return;\n case 'coalesce':\n case 'add':\n case 'multiply':\n case 'concat':\n for (const child of expression.expressions) {\n collectBindExpressionVariables(child, variables);\n }\n return;\n case 'if':\n collectBindExpressionVariables(expression.then, variables);\n collectBindExpressionVariables(expression.else, variables);\n return;\n case 'substring':\n collectBindExpressionVariables(expression.expression, variables);\n collectBindExpressionVariables(expression.start, variables);\n if (expression.length) {\n collectBindExpressionVariables(expression.length, variables);\n }\n return;\n case 'strdt':\n collectBindExpressionVariables(expression.lexical, variables);\n collectBindExpressionVariables(expression.datatype, variables);\n return;\n case 'strlang':\n collectBindExpressionVariables(expression.lexical, variables);\n collectBindExpressionVariables(expression.language, variables);\n return;\n default: {\n const exhaustive: never = expression;\n throw new Error(`Unsupported RDF bind expression: ${JSON.stringify(exhaustive)}`);\n }\n }\n}\n\nfunction pgRequiredSourcePriority(source: PgRequiredSource): number {\n if ((source.kind === 'text' || source.kind === 'vector') && hasSearchWindow(source.pattern)) {\n return 0;\n }\n return 1;\n}\n\nfunction describePgSearchTopK(pattern: RdfTextSearchPattern | RdfVectorSearchPattern): string {\n return hasSearchWindow(pattern) ? 'source-local' : 'none';\n}\n\nfunction pgSearchSourceConnected(\n bindings: RdfBindingRow[],\n pattern: RdfTextSearchPattern | RdfVectorSearchPattern,\n): boolean {\n const variables = [\n pattern.source,\n pattern.chunk,\n pattern.content,\n pattern.heading,\n pattern.score,\n ].filter((value): value is string => Boolean(value));\n if (pattern.source === undefined && variables.length === 0) {\n return true;\n }\n return bindings.some((binding) => variables.some((variableName) => binding[variableName] !== undefined));\n}\n\nfunction formatPlanRatio(value: number): string {\n if (!Number.isFinite(value)) {\n return '0.000';\n }\n return Math.max(0, Math.min(1, value)).toFixed(3);\n}\n\nfunction describeVectorSearchPlan(pattern: RdfVectorSearchPattern): string[] {\n const source = describeVectorSearch(pattern);\n const entries = [\n `VectorSearch(${source})`,\n `VectorMatchSource(${source})`,\n ];\n entries.push(...describeSearchScopePlan(pattern.scope));\n const topK = describeVectorSearchTopKPushdown(pattern);\n if (topK) {\n entries.push(topK, 'NoTsFullMaterialize(VectorSearch)');\n }\n return entries;\n}\n\nfunction describeVectorSearchTopKPushdown(pattern: RdfVectorSearchPattern): string | undefined {\n const window = describeSearchWindow(pattern.limit ?? pattern.candidateLimit, pattern.offset).trim();\n if (!window) {\n return undefined;\n }\n const order = describeSearchOrder(pattern.orderBy).trim();\n return `TopKPushdown(VectorSearch ${[window, order].filter(Boolean).join(' ')})`;\n}\n\nfunction describeTextSearchTopKPushdown(pattern: RdfTextSearchPattern): string | undefined {\n const window = describeSearchWindow(pattern.limit ?? pattern.candidateLimit, pattern.offset).trim();\n if (!window) {\n return undefined;\n }\n const order = describeSearchOrder(pattern.orderBy).trim();\n return `TopKPushdown(TextSearch ${[window, order].filter(Boolean).join(' ')})`;\n}\n\nfunction describeTextSearchPerSourceCap(pattern: RdfTextSearchPattern): string | undefined {\n if (pattern.perSourceLimit === undefined || !Number.isFinite(pattern.perSourceLimit)) {\n return undefined;\n }\n return `PerSourceCap(TextSearch per-source:${Math.max(0, Math.trunc(pattern.perSourceLimit))})`;\n}\n\nfunction describeSearchScopePlan(scope: RdfTextSearchPattern['scope']): string[] {\n if (!scope) {\n return [];\n }\n const entries: string[] = [];\n const pathParts = [\n scope.workspace ? `workspace:${scope.workspace}` : undefined,\n scope.sourcePrefix ? `prefix:${scope.sourcePrefix}` : undefined,\n scope.localPathPrefix ? `local-path-prefix:${scope.localPathPrefix}` : undefined,\n ].filter(Boolean);\n if (pathParts.length > 0) {\n entries.push(`PathScopeSource(${pathParts.join(',')})`);\n }\n const aclParts = [\n scope.accessBasePath ? `base-path:${scope.accessBasePath}` : undefined,\n scope.allowedSources ? `allowed:${scope.allowedSources.length}` : undefined,\n scope.deniedSources?.length ? `denied:${scope.deniedSources.length}` : undefined,\n scope.deniedSourcePrefixes?.length ? `denied-prefix:${scope.deniedSourcePrefixes.length}` : undefined,\n ].filter(Boolean);\n if (aclParts.length > 0) {\n entries.push(`AclScopeSource(${aclParts.join(' ')})`);\n }\n return entries;\n}\n\nfunction describeVectorSearch(pattern: RdfVectorSearchPattern): string {\n const bindings = [\n pattern.source ? `source:?${pattern.source}` : undefined,\n pattern.chunk ? `chunk:?${pattern.chunk}` : undefined,\n pattern.content ? `content:?${pattern.content}` : undefined,\n pattern.heading ? `heading:?${pattern.heading}` : undefined,\n pattern.score ? `score:?${pattern.score}` : undefined,\n pattern.distance ? `distance:?${pattern.distance}` : undefined,\n ].filter(Boolean).join(',');\n const scope = pattern.scope?.workspace\n ? `workspace:${pattern.scope.workspace}`\n : pattern.scope?.sourcePrefix\n ? `prefix:${pattern.scope.sourcePrefix}`\n : '*';\n const metric = pattern.metric ?? 'cosine';\n return `${metric}:${pattern.embedding.length}d@${scope}${bindings ? ` ${bindings}` : ''}${describeSearchWindow(pattern.limit, pattern.offset)}${describeSearchOrder(pattern.orderBy)}`;\n}\n\nfunction describeSearchWindow(limit?: number, offset?: number): string {\n const parts = [\n limit !== undefined ? `limit:${Math.max(0, limit)}` : undefined,\n offset !== undefined ? `offset:${Math.max(0, offset)}` : undefined,\n ].filter(Boolean);\n return parts.length > 0 ? ` ${parts.join(',')}` : '';\n}\n\nfunction describeSearchOrder(orderBy: Array<{ field: string; direction?: 'asc' | 'desc' }> | undefined): string {\n if (!orderBy?.length) {\n return '';\n }\n return ` order:${orderBy.map((entry) => `${entry.field}:${entry.direction ?? 'asc'}`).join(',')}`;\n}\n\nfunction textSearchOptions(pattern: RdfTextSearchPattern, exactSource?: string): RdfTextSearchOptions {\n return {\n query: pattern.query,\n source: exactSource,\n workspace: pattern.scope?.workspace,\n sourcePrefix: pattern.scope?.sourcePrefix,\n localPathPrefix: pattern.scope?.localPathPrefix,\n allowedSources: pattern.scope?.allowedSources,\n deniedSources: pattern.scope?.deniedSources,\n deniedSourcePrefixes: pattern.scope?.deniedSourcePrefixes,\n entities: pattern.entities,\n limit: pattern.limit ?? pattern.candidateLimit,\n offset: pattern.offset,\n perSourceLimit: pattern.perSourceLimit,\n orderBy: pattern.orderBy,\n };\n}\n\nfunction vectorSearchOptions(pattern: RdfVectorSearchPattern, exactSource?: string): RdfVectorSearchOptions {\n return {\n embedding: pattern.embedding,\n metric: pattern.metric,\n provider: pattern.vectorProvider,\n model: pattern.vectorModel,\n modelVersion: pattern.vectorModelVersion,\n inputKind: pattern.vectorInputKind,\n inputHash: pattern.vectorInputHash,\n projectionPolicyVersion: pattern.vectorProjectionPolicyVersion,\n source: exactSource,\n workspace: pattern.scope?.workspace,\n sourcePrefix: pattern.scope?.sourcePrefix,\n localPathPrefix: pattern.scope?.localPathPrefix,\n allowedSources: pattern.scope?.allowedSources,\n deniedSources: pattern.scope?.deniedSources,\n deniedSourcePrefixes: pattern.scope?.deniedSourcePrefixes,\n limit: pattern.limit ?? pattern.candidateLimit,\n offset: pattern.offset,\n threshold: pattern.threshold,\n orderBy: pattern.orderBy,\n };\n}\n\n\ninterface PgBoundTermBatchCandidate {\n key: PgPatternKey;\n variable: string;\n terms: Term[];\n buckets: Map<string, RdfBindingRow[]>;\n unbatched: RdfBindingRow[];\n}\n\nfunction pgBoundTermBatchCandidate(\n input: RdfBindingRow[],\n pattern: RdfQueryPattern,\n): PgBoundTermBatchCandidate | undefined {\n if (input.length < PG_FACTS_BATCH_BOUND_TERM_MIN_ROWS) {\n return undefined;\n }\n const keyOrder: PgPatternKey[] = ['subject', 'object', 'predicate', 'graph'];\n for (const key of keyOrder) {\n const patternValue = pattern[key];\n if (!isVariable(patternValue)) {\n continue;\n }\n const buckets = new Map<string, RdfBindingRow[]>();\n const termsByKey = new Map<string, Term>();\n const unbatched: RdfBindingRow[] = [];\n for (const binding of input) {\n const term = binding[patternValue.variable];\n if (!term || !termKindsForPatternKey(key).includes(postgresRdfTermKind(term))) {\n unbatched.push(binding);\n continue;\n }\n const termKey = termToId(term as any);\n termsByKey.set(termKey, term);\n const bucket = buckets.get(termKey);\n if (bucket) {\n bucket.push(binding);\n } else {\n buckets.set(termKey, [binding]);\n }\n }\n if (termsByKey.size >= PG_FACTS_BATCH_BOUND_TERM_MIN_ROWS) {\n return {\n key,\n variable: patternValue.variable,\n terms: [...termsByKey.values()],\n buckets,\n unbatched,\n };\n }\n }\n return undefined;\n}\n\nfunction canUseGlobalSearchForBoundSources(\n input: RdfBindingRow[],\n pattern: RdfTextSearchPattern | RdfVectorSearchPattern,\n sourceVariable: string,\n): boolean {\n return !hasSearchWindow(pattern) && boundSearchSourceCount(input, sourceVariable) > PG_BOUND_SOURCE_EXACT_SEARCH_MAX;\n}\n\nfunction boundSearchSourceCount(input: RdfBindingRow[], sourceVariable: string): number {\n return boundSearchSourceValues(input, sourceVariable).length;\n}\n\nfunction boundSearchSourceValues(input: RdfBindingRow[], sourceVariable: string): string[] {\n const sources = new Set<string>();\n for (const binding of input) {\n const term = binding[sourceVariable];\n if (term?.termType === 'NamedNode') {\n sources.add(term.value);\n }\n }\n return [...sources];\n}\n\nfunction bindTextSearchResultsBySource(\n input: RdfBindingRow[],\n pattern: RdfTextSearchPattern,\n sourceVariable: string,\n results: RdfTextSearchResult[],\n): RdfBindingRow[] {\n return bindSearchResultsBySource(input, sourceVariable, results, (binding, result) => bindTextSearchResult(binding, pattern, result));\n}\n\nfunction bindVectorSearchResultsBySource(\n input: RdfBindingRow[],\n pattern: RdfVectorSearchPattern,\n sourceVariable: string,\n results: RdfVectorSearchResult[],\n): RdfBindingRow[] {\n return bindSearchResultsBySource(input, sourceVariable, results, (binding, result) => bindVectorSearchResult(binding, pattern, result));\n}\n\nfunction bindSearchResultsBySource<Result extends { source: string }>(\n input: RdfBindingRow[],\n sourceVariable: string,\n results: Result[],\n bind: (binding: RdfBindingRow, result: Result) => RdfBindingRow | null,\n): RdfBindingRow[] {\n const resultsBySource = new Map<string, Result[]>();\n for (const result of results) {\n const bucket = resultsBySource.get(result.source);\n if (bucket) {\n bucket.push(result);\n } else {\n resultsBySource.set(result.source, [result]);\n }\n }\n\n const output: RdfBindingRow[] = [];\n for (const binding of input) {\n const term = binding[sourceVariable];\n const candidates = term === undefined\n ? results\n : term.termType === 'NamedNode'\n ? resultsBySource.get(term.value) ?? []\n : [];\n for (const result of candidates) {\n const next = bind(binding, result);\n if (next) {\n output.push(next);\n }\n }\n }\n return output;\n}\n\nfunction canUseBoundSourceSearch(\n input: RdfBindingRow[],\n pattern: RdfTextSearchPattern | RdfVectorSearchPattern,\n sourceVariable: string,\n): boolean {\n if (hasSearchWindow(pattern)) {\n return false;\n }\n\n const boundSources = new Set<string>();\n let sawBound = false;\n\n for (const binding of input) {\n const term = binding[sourceVariable];\n if (!term) {\n continue;\n }\n\n sawBound = true;\n if (term.termType !== 'NamedNode') {\n continue;\n }\n\n boundSources.add(term.value);\n }\n\n return sawBound && boundSources.size > 0 && boundSources.size <= PG_BOUND_SOURCE_EXACT_SEARCH_MAX;\n}\n\nfunction hasSearchWindow(pattern: RdfTextSearchPattern | RdfVectorSearchPattern): boolean {\n return pattern.limit !== undefined || pattern.offset !== undefined;\n}\n\nfunction bindTextSearchResult(\n binding: RdfBindingRow,\n pattern: RdfTextSearchPattern,\n result: RdfTextSearchResult,\n): RdfBindingRow | null {\n const next = { ...binding };\n const chunkResource = `${result.source}#chunk-${encodeURIComponent(result.chunkKey)}`;\n const candidates: Array<[string | undefined, Term | undefined]> = [\n [pattern.source, DataFactory.namedNode(result.source) as Term],\n [pattern.chunk, DataFactory.namedNode(chunkResource) as Term],\n [pattern.content, DataFactory.literal(result.content) as Term],\n [pattern.heading, result.heading ? DataFactory.literal(result.heading) as Term : undefined],\n [pattern.score, decimalLiteral(result.score)],\n [pattern.scoreComponents, result.scoreComponents ? DataFactory.literal(JSON.stringify(result.scoreComponents)) as Term : undefined],\n [pattern.workspace, DataFactory.namedNode(result.workspace) as Term],\n [pattern.localPath, result.localPath ? DataFactory.literal(result.localPath) as Term : undefined],\n [pattern.contentType, result.contentType ? DataFactory.literal(result.contentType) as Term : undefined],\n [pattern.sourceKey, DataFactory.literal(result.sourceKey) as Term],\n [pattern.retrievalPoint, DataFactory.literal(result.retrievalPointKey) as Term],\n [pattern.retrievalKind, DataFactory.literal(result.retrievalKind) as Term],\n [pattern.entityProvenance, DataFactory.literal(JSON.stringify(result.entities)) as Term],\n [pattern.ordinal, integerLiteral(result.ordinal)],\n [pattern.level, integerLiteral(result.level)],\n [pattern.startOffset, integerLiteral(result.startOffset)],\n [pattern.endOffset, integerLiteral(result.endOffset)],\n ];\n\n for (const [variableName, term] of candidates) {\n if (!variableName || !term) {\n continue;\n }\n const existing = next[variableName];\n if (existing && !sameTerm(existing, term)) {\n return null;\n }\n next[variableName] = term;\n }\n return next;\n}\n\nfunction bindVectorSearchResult(\n binding: RdfBindingRow,\n pattern: RdfVectorSearchPattern,\n result: RdfVectorSearchResult,\n): RdfBindingRow | null {\n const next = { ...binding };\n const chunkResource = `${result.source}#chunk-${encodeURIComponent(result.chunkKey)}`;\n const candidates: Array<[string | undefined, Term | undefined]> = [\n [pattern.source, DataFactory.namedNode(result.source) as Term],\n [pattern.chunk, DataFactory.namedNode(chunkResource) as Term],\n [pattern.content, DataFactory.literal(result.content) as Term],\n [pattern.heading, result.heading ? DataFactory.literal(result.heading) as Term : undefined],\n [pattern.score, decimalLiteral(result.score)],\n [pattern.distance, decimalLiteral(result.distance)],\n [pattern.scoreComponents, result.scoreComponents ? DataFactory.literal(JSON.stringify(result.scoreComponents)) as Term : undefined],\n [pattern.workspace, DataFactory.namedNode(result.workspace) as Term],\n [pattern.localPath, result.localPath ? DataFactory.literal(result.localPath) as Term : undefined],\n [pattern.contentType, result.contentType ? DataFactory.literal(result.contentType) as Term : undefined],\n [pattern.sourceKey, DataFactory.literal(result.sourceKey) as Term],\n [pattern.retrievalPoint, DataFactory.literal(result.retrievalPointKey) as Term],\n [pattern.ordinal, integerLiteral(result.ordinal)],\n [pattern.level, integerLiteral(result.level)],\n [pattern.startOffset, integerLiteral(result.startOffset)],\n [pattern.endOffset, integerLiteral(result.endOffset)],\n [pattern.provider, result.provider ? DataFactory.literal(result.provider) as Term : undefined],\n [pattern.model, result.model ? DataFactory.literal(result.model) as Term : undefined],\n [pattern.modelVersion, result.modelVersion ? DataFactory.literal(result.modelVersion) as Term : undefined],\n [pattern.inputKind, result.inputKind ? DataFactory.literal(result.inputKind) as Term : undefined],\n [pattern.inputHash, result.inputHash ? DataFactory.literal(result.inputHash) as Term : undefined],\n [pattern.projectionPolicyVersion, result.projectionPolicyVersion ? DataFactory.literal(result.projectionPolicyVersion) as Term : undefined],\n ];\n\n for (const [variableName, term] of candidates) {\n if (!variableName || !term) {\n continue;\n }\n const existing = next[variableName];\n if (existing && !sameTerm(existing, term)) {\n return null;\n }\n next[variableName] = term;\n }\n return next;\n}\n\nfunction integerLiteral(value: number): Term {\n return DataFactory.literal(String(value), DataFactory.namedNode(XSD_INTEGER)) as Term;\n}\n\nfunction isRdfTextIndexOptions(input: RdfTextIndexInput | undefined): input is RdfTextIndexOptions {\n return input !== undefined && typeof (input as RdfTextIndexOptions).path === 'string'\n && !isRdfTextIndexLike(input);\n}\n\nfunction isPostgresRdfTextIndexOptions(input: RdfTextIndexInput | undefined): input is PostgresRdfTextIndexOptions {\n if (input === undefined || isRdfTextIndexLike(input) || isRdfTextIndexOptions(input)) {\n return false;\n }\n const options = input as PostgresRdfTextIndexOptions;\n return options.driver === 'pg'\n || options.driver === 'pglite'\n || typeof options.connectionString === 'string'\n || typeof options.dataDir === 'string'\n || typeof options.host === 'string'\n || typeof options.port === 'number'\n || typeof options.database === 'string'\n || typeof options.user === 'string'\n || typeof options.password === 'string'\n || options.pool !== undefined\n || typeof options.autoOpen === 'boolean';\n}\n\nfunction isRdfTextIndexLike(input: RdfTextIndexInput | undefined): input is RdfTextIndexLike {\n return input !== undefined\n && typeof (input as Partial<RdfTextIndexLike>).indexText === 'function'\n && typeof (input as Partial<RdfTextIndexLike>).search === 'function';\n}\n\nfunction isRdfVectorIndexOptions(input: RdfVectorIndexInput | undefined): input is RdfVectorIndexOptions {\n return input !== undefined && typeof (input as RdfVectorIndexOptions).path === 'string'\n && !isRdfVectorIndexLike(input);\n}\n\nfunction isPostgresRdfVectorIndexOptions(input: RdfVectorIndexInput | undefined): input is PostgresRdfVectorIndexOptions {\n if (input === undefined || isRdfVectorIndexLike(input) || isRdfVectorIndexOptions(input)) {\n return false;\n }\n const options = input as PostgresRdfVectorIndexOptions;\n return options.driver === 'pg'\n || options.driver === 'pglite'\n || typeof options.connectionString === 'string'\n || typeof options.dataDir === 'string'\n || typeof options.host === 'string'\n || typeof options.port === 'number'\n || typeof options.database === 'string'\n || typeof options.user === 'string'\n || typeof options.password === 'string'\n || options.pool !== undefined\n || typeof options.autoOpen === 'boolean';\n}\n\nfunction isRdfVectorIndexLike(input: RdfVectorIndexInput | undefined): input is RdfVectorIndexLike {\n return input !== undefined\n && typeof (input as Partial<RdfVectorIndexLike>).indexVector === 'function'\n && typeof (input as Partial<RdfVectorIndexLike>).search === 'function';\n}\n\nfunction uniqueStrings(values: string[]): string[] {\n return [...new Set(values)];\n}\n\nfunction rdfAccessControlCacheInvalidation(\n quads: readonly Quad[],\n source?: RdfSourceInput,\n): RdfAccessControlCacheInvalidation | undefined {\n const fallbackScopes = [\n ...accessControlAffectedScopes(source?.source, source?.workspace, source?.sourceVersion),\n ...accessControlAffectedScopes(source?.localPath, source?.workspace, source?.sourceVersion),\n ...quads.flatMap((value) => accessControlAffectedScopes(value.graph.value)),\n ];\n const sourceKeys = accessControlInvalidationSourceKeys(quads, source);\n const sourceTargets = accessControlOverrideTargets(quads, source, sourceKeys);\n if (fallbackScopes.length === 0 && sourceKeys.length === 0 && sourceTargets.length === 0) {\n return undefined;\n }\n return {\n fallbackScopes: mergeAccessControlInvalidationScopes(fallbackScopes),\n sourceKeys,\n sourceTargets,\n };\n}\n\nfunction rdfSourceAccessControlCacheInvalidation(\n source?: string | null,\n localPath?: string | null,\n workspace?: string | null,\n sourceVersion?: string | null,\n): RdfAccessControlCacheInvalidation | undefined {\n const fallbackScopes = [\n ...accessControlAffectedScopes(source, workspace, sourceVersion),\n ...accessControlAffectedScopes(localPath, workspace, sourceVersion),\n ];\n const sourceKeys = uniqueStrings([\n ...accessControlSourceKeys(source, workspace),\n ...accessControlSourceKeys(localPath, workspace),\n ]);\n if (fallbackScopes.length === 0 && sourceKeys.length === 0) {\n return undefined;\n }\n return {\n fallbackScopes: mergeAccessControlInvalidationScopes(fallbackScopes),\n sourceKeys,\n sourceTargets: [],\n };\n}\n\nfunction accessControlInvalidationSourceKeys(\n quads: readonly Quad[],\n source?: RdfSourceInput,\n): string[] {\n return uniqueStrings([\n ...accessControlSourceKeys(source?.source, source?.workspace),\n ...accessControlSourceKeys(source?.localPath, source?.workspace),\n ...quads.flatMap((value) => accessControlSourceKeys(value.graph.value)),\n ]);\n}\n\nfunction accessControlOverrideTargets(\n quads: readonly Quad[],\n source: RdfSourceInput | undefined,\n sourceKeys: string[],\n): RdfAccessControlOverrideTargets[] {\n const targetsBySource = new Map<string, Set<string>>();\n const sourceInputKeys = uniqueStrings([\n ...accessControlSourceKeys(source?.source, source?.workspace),\n ...accessControlSourceKeys(source?.localPath, source?.workspace),\n ]);\n const allTargetBasePaths = new Set<string>();\n\n for (const value of quads) {\n const target = accessControlOverrideTargetBasePath(value);\n if (!target) {\n continue;\n }\n allTargetBasePaths.add(target);\n for (const sourceKey of accessControlSourceKeys(value.graph.value)) {\n addMapSetValue(targetsBySource, sourceKey, target);\n }\n }\n\n for (const sourceKey of sourceInputKeys) {\n for (const target of allTargetBasePaths) {\n addMapSetValue(targetsBySource, sourceKey, target);\n }\n }\n\n return sourceKeys\n .map((sourceKey) => ({\n sourceKey,\n basePaths: [...(targetsBySource.get(sourceKey) ?? new Set<string>())].sort(),\n sourceVersion: source?.sourceVersion ?? null,\n }))\n .filter((target) => target.basePaths.length > 0);\n}\n\nfunction accessControlInvalidationScopesForTargetReplacements(\n storedTargets: RdfAccessControlOverrideTargets[],\n currentTargets: RdfAccessControlOverrideTargets[],\n): RdfAccessControlInvalidationScope[] {\n const targetsBySource = new Map<string, {\n basePaths: Set<string>;\n permissionVersions: Set<string> | null;\n }>();\n for (const target of [...storedTargets, ...currentTargets]) {\n let sourceTargets = targetsBySource.get(target.sourceKey);\n if (!sourceTargets) {\n sourceTargets = {\n basePaths: new Set<string>(),\n permissionVersions: new Set<string>(),\n };\n targetsBySource.set(target.sourceKey, sourceTargets);\n }\n for (const basePath of target.basePaths) {\n sourceTargets.basePaths.add(basePath);\n }\n if (target.sourceVersion) {\n sourceTargets.permissionVersions?.add(target.sourceVersion);\n } else {\n sourceTargets.permissionVersions = null;\n }\n }\n\n const scopes: RdfAccessControlInvalidationScope[] = [];\n for (const sourceTargets of targetsBySource.values()) {\n const permissionVersions = sourceTargets.permissionVersions === null\n ? null\n : [...sourceTargets.permissionVersions].sort();\n for (const basePath of sourceTargets.basePaths) {\n scopes.push({ basePath, permissionVersions });\n }\n }\n return mergeAccessControlInvalidationScopes(scopes);\n}\n\nfunction mergeAccessControlInvalidationScopes(\n scopes: RdfAccessControlInvalidationScope[],\n): RdfAccessControlInvalidationScope[] {\n const versionsByBasePath = new Map<string, Set<string> | null>();\n for (const scope of scopes) {\n const existing = versionsByBasePath.get(scope.basePath);\n if (existing === null) {\n continue;\n }\n if (scope.permissionVersions === null) {\n versionsByBasePath.set(scope.basePath, null);\n continue;\n }\n const next = existing ?? new Set<string>();\n for (const version of scope.permissionVersions) {\n next.add(version);\n }\n versionsByBasePath.set(scope.basePath, next);\n }\n\n return [...versionsByBasePath.entries()]\n .map(([basePath, versions]) => ({\n basePath,\n permissionVersions: versions === null ? null : [...versions].sort(),\n }))\n .sort((left, right) => left.basePath.localeCompare(right.basePath));\n}\n\nfunction addMapSetValue(map: Map<string, Set<string>>, key: string, value: string): void {\n const existing = map.get(key);\n if (existing) {\n existing.add(value);\n return;\n }\n map.set(key, new Set([value]));\n}\n\nfunction accessControlOverrideTargetBasePath(value: Quad): string | undefined {\n const predicate = value.predicate.value;\n if (predicate === ACL_ACCESS_TO || predicate === ACL_DEFAULT || predicate === ACP_APPLY) {\n return value.object.termType === 'NamedNode'\n ? normalizeAccessControlTargetPath(value.object.value)\n : undefined;\n }\n if (predicate === ACP_ACCESS_CONTROL) {\n return value.subject.termType === 'NamedNode'\n ? normalizeAccessControlTargetPath(value.subject.value)\n : undefined;\n }\n return undefined;\n}\n\nfunction accessControlSourceKeys(value?: string | null, workspace?: string | null): string[] {\n if (typeof value !== 'string' || !isAccessControlResourcePath(value)) {\n return [];\n }\n return [normalizeAccessControlResourcePath(value, workspace)];\n}\n\nfunction accessControlAffectedScopes(\n value?: string | null,\n workspace?: string | null,\n sourceVersion?: string | null,\n): RdfAccessControlInvalidationScope[] {\n return accessControlAffectedBasePaths(value, workspace).map((basePath) => ({\n basePath,\n permissionVersions: sourceVersion ? [sourceVersion] : null,\n }));\n}\n\nfunction accessControlAffectedBasePaths(value?: string | null, workspace?: string | null): string[] {\n if (typeof value !== 'string' || !isAccessControlResourcePath(value)) {\n return [];\n }\n const normalized = normalizeAccessControlResourcePath(value, workspace);\n const affected = affectedBasePathForAccessControlResource(normalized);\n return affected ? [affected] : [];\n}\n\nfunction isAccessControlResourcePath(value: string): boolean {\n const normalized = value.split(/[?#]/, 1)[0] ?? value;\n return normalized.endsWith('.acl')\n || normalized.endsWith('/.acl')\n || normalized.endsWith('.acr')\n || normalized.endsWith('/.acr')\n || normalized.includes('/.acr/');\n}\n\nfunction normalizeAccessControlResourcePath(value: string, workspace?: string | null): string {\n try {\n const url = workspace ? new URL(value, workspace) : new URL(value);\n url.hash = '';\n url.search = '';\n return url.href;\n } catch {\n return value.split(/[?#]/, 1)[0] ?? value;\n }\n}\n\nfunction normalizeAccessControlTargetPath(value: string): string {\n try {\n const url = new URL(value);\n url.hash = '';\n url.search = '';\n return url.href;\n } catch {\n return value.split(/[?#]/, 1)[0] ?? value;\n }\n}\n\nfunction affectedBasePathForAccessControlResource(value: string): string | undefined {\n if (value.endsWith('/.acl')) {\n return value.slice(0, -'.acl'.length);\n }\n if (value.endsWith('.acl')) {\n return value.slice(0, -'.acl'.length);\n }\n if (value.endsWith('/.acr')) {\n return value.slice(0, -'.acr'.length);\n }\n if (value.endsWith('.acr')) {\n return value.slice(0, -'.acr'.length);\n }\n const nestedAcrIndex = value.indexOf('/.acr/');\n if (nestedAcrIndex >= 0) {\n return `${value.slice(0, nestedAcrIndex)}/`;\n }\n return undefined;\n}\n\nfunction parsePgAccelerationCapabilities(value: unknown): string[] {\n if (typeof value !== 'string') {\n return [];\n }\n return value\n .split(',')\n .map((entry) => entry.trim())\n .filter(Boolean);\n}\n\nfunction parseJsonObject(value: unknown): Record<string, unknown> {\n if (typeof value !== 'string') {\n return {};\n }\n try {\n const parsed = JSON.parse(value);\n return parsed && typeof parsed === 'object' && !Array.isArray(parsed)\n ? parsed as Record<string, unknown>\n : {};\n } catch {\n return {};\n }\n}\n\nfunction isNativeExtensionOnlyCapability(capability: string): boolean {\n return NATIVE_EXTENSION_ONLY_CAPABILITIES.includes(capability);\n}\n\nfunction pgCustomPermutationIndexName(permutation: PgPermutation): string {\n return `${permutation.indexName}_perm`;\n}\n\nfunction patternKeyForVariable(variables: Partial<Record<PgPatternKey, string>>, variableName: string): PgPatternKey | undefined {\n for (const key of PATTERN_KEYS) {\n if (variables[key] === variableName) {\n return key;\n }\n }\n return undefined;\n}\n\nfunction patternHasIdSet(resolved: PgResolvedPattern): boolean {\n return PATTERN_KEYS.some((key) => (resolved.idSets[key]?.length ?? 0) > 0);\n}\n\nfunction uniqueNumbers(values: number[]): number[] {\n return [...new Set(values)];\n}\n\nfunction intersectNumbers(left: number[], right: number[]): number[] {\n const rightSet = new Set(right);\n return uniqueNumbers(left.filter((value) => rightSet.has(value)));\n}\n\nfunction joinSourceVariables(source: PgJoinSource): string[] {\n return uniqueStrings(Object.values(source.entry.variables).filter((value): value is string => Boolean(value)));\n}\n\nfunction pgPatternKeyForIndexedColumn(column: PgIndexedColumn): PgPatternKey {\n switch (column) {\n case 'graph_id':\n return 'graph';\n case 'subject_id':\n return 'subject';\n case 'predicate_id':\n return 'predicate';\n case 'object_id':\n return 'object';\n default: {\n const exhaustive: never = column;\n throw new Error(`Unsupported PostgreSQL RDF indexed column: ${String(exhaustive)}`);\n }\n }\n}\n\nfunction joinSolutionMappingKeyExpression(variableAliases: Map<string, string>, variables?: string[]): string {\n const variableNames = uniqueStrings(variables ?? [...variableAliases.keys()]);\n if (variableNames.length === 0) return '1';\n return variableNames.map((variableName) => {\n const alias = variableAliases.get(variableName);\n if (!alias) throw new Error(`Postgres RDF-3X COUNT(DISTINCT *) cannot read unbound variable: ${variableName}`);\n return `source.${alias}`;\n }).join(` || ':' || `);\n}\n\nfunction pairProjectionRowTotal(rows: Record<Rdf3xPairProjectionName, number>): number {\n return Object.values(rows).reduce((sum, count) => sum + count, 0);\n}\n\nfunction termProjectionRowTotal(rows: Record<Rdf3xTermProjectionName, number>): number {\n return Object.values(rows).reduce((sum, count) => sum + count, 0);\n}\n\nfunction sumSpaceObjects(objects: RdfIndexSpaceObject[], kind: RdfIndexSpaceObject['kind']): number {\n return objects\n .filter((object) => object.kind === kind)\n .reduce((sum, object) => sum + object.bytes, 0);\n}\n\nfunction postgresRdfTermKind(term: Term): RdfTermKind {\n switch (term.termType) {\n case 'NamedNode':\n return 'iri';\n case 'BlankNode':\n return 'blank';\n case 'Literal':\n return 'literal';\n case 'DefaultGraph':\n return 'default_graph';\n default:\n return 'iri';\n }\n}\n\nconst INTEGER_RESULT_KEYS = new Set([\n 'id',\n 'graph_id',\n 'subject_id',\n 'predicate_id',\n 'object_id',\n 'source_file_id',\n 'source_line_no',\n 'datatype_id',\n 'count',\n 'term_count',\n 'quad_count',\n 'source_count',\n 'graph_count',\n]);\nconst INTEGER_ALIAS_RESULT_KEY = /^(?:v|a)\\d+$/;\n\nfunction uniqueQuads(quads: Quad[]): Quad[] {\n const seen = new Set<string>();\n const result: Quad[] = [];\n for (const value of quads) {\n const key = [\n value.graph.termType,\n value.graph.value,\n value.subject.termType,\n value.subject.value,\n value.predicate.termType,\n value.predicate.value,\n value.object.termType,\n value.object.value,\n value.object.termType === 'Literal' ? value.object.language : '',\n value.object.termType === 'Literal' ? value.object.datatype.value : '',\n ].join('\\u001f');\n if (!seen.has(key)) {\n seen.add(key);\n result.push(value);\n }\n }\n return result;\n}\n"]}
|