@undefineds.co/xpod 0.3.58 → 0.3.62

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (806) hide show
  1. package/README.md +3 -0
  2. package/config/cli.json +88 -0
  3. package/config/cloud.json +32 -1
  4. package/config/components-ignore.json +3 -0
  5. package/config/extensions.local.initializer.json +44 -0
  6. package/config/resolver.json +86 -0
  7. package/config/xpod.base.json +4 -0
  8. package/dist/agents/AgentExecutorFactory.d.ts +3 -3
  9. package/dist/agents/AgentExecutorFactory.js +28 -15
  10. package/dist/agents/AgentExecutorFactory.js.map +1 -1
  11. package/dist/agents/BaseAgentExecutor.d.ts +2 -1
  12. package/dist/agents/BaseAgentExecutor.js +1 -0
  13. package/dist/agents/BaseAgentExecutor.js.map +1 -1
  14. package/dist/agents/ClaudeExecutor.d.ts +3 -1
  15. package/dist/agents/ClaudeExecutor.js +18 -12
  16. package/dist/agents/ClaudeExecutor.js.map +1 -1
  17. package/dist/agents/config/resolve.js +0 -21
  18. package/dist/agents/config/resolve.js.map +1 -1
  19. package/dist/agents/config/types.d.ts +2 -7
  20. package/dist/agents/config/types.js +2 -1
  21. package/dist/agents/config/types.js.map +1 -1
  22. package/dist/agents/types.d.ts +18 -0
  23. package/dist/agents/types.js.map +1 -1
  24. package/dist/ai/schema/types.d.ts +2 -1
  25. package/dist/ai/schema/types.js +1 -0
  26. package/dist/ai/schema/types.js.map +1 -1
  27. package/dist/ai/service/CredentialReader.d.ts +3 -1
  28. package/dist/ai/service/CredentialReader.js.map +1 -1
  29. package/dist/ai/service/CredentialReaderImpl.d.ts +3 -1
  30. package/dist/ai/service/CredentialReaderImpl.js +24 -2
  31. package/dist/ai/service/CredentialReaderImpl.js.map +1 -1
  32. package/dist/ai/service/EmbeddingServiceImpl.js +13 -2
  33. package/dist/ai/service/EmbeddingServiceImpl.js.map +1 -1
  34. package/dist/ai/service/ProviderRegistry.d.ts +4 -0
  35. package/dist/ai/service/ProviderRegistry.js.map +1 -1
  36. package/dist/ai/service/ProviderRegistry.jsonld +4 -0
  37. package/dist/ai/service/ProviderRegistryImpl.d.ts +4 -1
  38. package/dist/ai/service/ProviderRegistryImpl.js +26 -4
  39. package/dist/ai/service/ProviderRegistryImpl.js.map +1 -1
  40. package/dist/ai/service/ProviderRegistryImpl.jsonld +12 -0
  41. package/dist/ai/service/defaultEmbeddingProfile.d.ts +5 -0
  42. package/dist/ai/service/defaultEmbeddingProfile.js +31 -0
  43. package/dist/ai/service/defaultEmbeddingProfile.js.map +1 -0
  44. package/dist/ai/service/index.d.ts +1 -0
  45. package/dist/ai/service/index.js +1 -0
  46. package/dist/ai/service/index.js.map +1 -1
  47. package/dist/ai/service/types.d.ts +1 -0
  48. package/dist/ai/service/types.js.map +1 -1
  49. package/dist/api/ApiServer.js +17 -2
  50. package/dist/api/ApiServer.js.map +1 -1
  51. package/dist/api/ai-gateway/AiGatewayService.d.ts +106 -0
  52. package/dist/api/ai-gateway/AiGatewayService.js +527 -0
  53. package/dist/api/ai-gateway/AiGatewayService.js.map +1 -0
  54. package/dist/api/ai-gateway/auth/AiConnectionInvocationKeyIssuer.d.ts +38 -0
  55. package/dist/api/ai-gateway/auth/AiConnectionInvocationKeyIssuer.js +128 -0
  56. package/dist/api/ai-gateway/auth/AiConnectionInvocationKeyIssuer.js.map +1 -0
  57. package/dist/api/ai-gateway/auth/ClientCredentialsInternalPodAccessTokenProvider.d.ts +25 -0
  58. package/dist/api/ai-gateway/auth/ClientCredentialsInternalPodAccessTokenProvider.js +91 -0
  59. package/dist/api/ai-gateway/auth/ClientCredentialsInternalPodAccessTokenProvider.js.map +1 -0
  60. package/dist/api/ai-gateway/auth/GatewayApiKey.d.ts +28 -0
  61. package/dist/api/ai-gateway/auth/GatewayApiKey.js +162 -0
  62. package/dist/api/ai-gateway/auth/GatewayApiKey.js.map +1 -0
  63. package/dist/api/ai-gateway/auth/GatewayApiKeyAuthenticator.d.ts +56 -0
  64. package/dist/api/ai-gateway/auth/GatewayApiKeyAuthenticator.js +143 -0
  65. package/dist/api/ai-gateway/auth/GatewayApiKeyAuthenticator.js.map +1 -0
  66. package/dist/api/ai-gateway/auth/GatewayKeyLocatorCodec.d.ts +26 -0
  67. package/dist/api/ai-gateway/auth/GatewayKeyLocatorCodec.js +97 -0
  68. package/dist/api/ai-gateway/auth/GatewayKeyLocatorCodec.js.map +1 -0
  69. package/dist/api/ai-gateway/auth/GatewayPrincipal.d.ts +20 -0
  70. package/dist/api/ai-gateway/auth/GatewayPrincipal.js +37 -0
  71. package/dist/api/ai-gateway/auth/GatewayPrincipal.js.map +1 -0
  72. package/dist/api/ai-gateway/auth/InvocationTokenCodec.d.ts +41 -0
  73. package/dist/api/ai-gateway/auth/InvocationTokenCodec.js +221 -0
  74. package/dist/api/ai-gateway/auth/InvocationTokenCodec.js.map +1 -0
  75. package/dist/api/ai-gateway/auth/PodGatewayAccessKeyRepository.d.ts +54 -0
  76. package/dist/api/ai-gateway/auth/PodGatewayAccessKeyRepository.js +152 -0
  77. package/dist/api/ai-gateway/auth/PodGatewayAccessKeyRepository.js.map +1 -0
  78. package/dist/api/ai-gateway/connect/index.d.ts +367 -0
  79. package/dist/api/ai-gateway/connect/index.js +1061 -0
  80. package/dist/api/ai-gateway/connect/index.js.map +1 -0
  81. package/dist/api/ai-gateway/credentials/CloudKmsWrapper.d.ts +40 -0
  82. package/dist/api/ai-gateway/credentials/CloudKmsWrapper.js +59 -0
  83. package/dist/api/ai-gateway/credentials/CloudKmsWrapper.js.map +1 -0
  84. package/dist/api/ai-gateway/credentials/CredentialVault.d.ts +14 -0
  85. package/dist/api/ai-gateway/credentials/CredentialVault.js +11 -0
  86. package/dist/api/ai-gateway/credentials/CredentialVault.js.map +1 -0
  87. package/dist/api/ai-gateway/credentials/KeyWrapper.d.ts +27 -0
  88. package/dist/api/ai-gateway/credentials/KeyWrapper.js +3 -0
  89. package/dist/api/ai-gateway/credentials/KeyWrapper.js.map +1 -0
  90. package/dist/api/ai-gateway/credentials/LocalKeychainWrapper.d.ts +27 -0
  91. package/dist/api/ai-gateway/credentials/LocalKeychainWrapper.js +145 -0
  92. package/dist/api/ai-gateway/credentials/LocalKeychainWrapper.js.map +1 -0
  93. package/dist/api/ai-gateway/credentials/SecretCellCredentialVault.d.ts +13 -0
  94. package/dist/api/ai-gateway/credentials/SecretCellCredentialVault.js +133 -0
  95. package/dist/api/ai-gateway/credentials/SecretCellCredentialVault.js.map +1 -0
  96. package/dist/api/ai-gateway/credentials/SecretCellKeyWrapper.d.ts +23 -0
  97. package/dist/api/ai-gateway/credentials/SecretCellKeyWrapper.js +62 -0
  98. package/dist/api/ai-gateway/credentials/SecretCellKeyWrapper.js.map +1 -0
  99. package/dist/api/ai-gateway/credentials/WebCryptoCredentialVault.d.ts +23 -0
  100. package/dist/api/ai-gateway/credentials/WebCryptoCredentialVault.js +173 -0
  101. package/dist/api/ai-gateway/credentials/WebCryptoCredentialVault.js.map +1 -0
  102. package/dist/api/ai-gateway/errors.d.ts +21 -0
  103. package/dist/api/ai-gateway/errors.js +50 -0
  104. package/dist/api/ai-gateway/errors.js.map +1 -0
  105. package/dist/api/ai-gateway/protocol/ChatCompletionsFrontend.d.ts +6 -0
  106. package/dist/api/ai-gateway/protocol/ChatCompletionsFrontend.js +111 -0
  107. package/dist/api/ai-gateway/protocol/ChatCompletionsFrontend.js.map +1 -0
  108. package/dist/api/ai-gateway/protocol/MessagesFrontend.d.ts +6 -0
  109. package/dist/api/ai-gateway/protocol/MessagesFrontend.js +99 -0
  110. package/dist/api/ai-gateway/protocol/MessagesFrontend.js.map +1 -0
  111. package/dist/api/ai-gateway/protocol/ResponsesFrontend.d.ts +6 -0
  112. package/dist/api/ai-gateway/protocol/ResponsesFrontend.js +232 -0
  113. package/dist/api/ai-gateway/protocol/ResponsesFrontend.js.map +1 -0
  114. package/dist/api/ai-gateway/protocol/index.d.ts +3 -0
  115. package/dist/api/ai-gateway/protocol/index.js +10 -0
  116. package/dist/api/ai-gateway/protocol/index.js.map +1 -0
  117. package/dist/api/ai-gateway/providers/AnthropicRuntimeAdapter.d.ts +7 -0
  118. package/dist/api/ai-gateway/providers/AnthropicRuntimeAdapter.js +37 -0
  119. package/dist/api/ai-gateway/providers/AnthropicRuntimeAdapter.js.map +1 -0
  120. package/dist/api/ai-gateway/providers/BailianRuntimeAdapter.d.ts +9 -0
  121. package/dist/api/ai-gateway/providers/BailianRuntimeAdapter.js +127 -0
  122. package/dist/api/ai-gateway/providers/BailianRuntimeAdapter.js.map +1 -0
  123. package/dist/api/ai-gateway/providers/DeepSeekRuntimeAdapter.d.ts +8 -0
  124. package/dist/api/ai-gateway/providers/DeepSeekRuntimeAdapter.js +47 -0
  125. package/dist/api/ai-gateway/providers/DeepSeekRuntimeAdapter.js.map +1 -0
  126. package/dist/api/ai-gateway/providers/KimiRuntimeAdapter.d.ts +8 -0
  127. package/dist/api/ai-gateway/providers/KimiRuntimeAdapter.js +57 -0
  128. package/dist/api/ai-gateway/providers/KimiRuntimeAdapter.js.map +1 -0
  129. package/dist/api/ai-gateway/providers/OpenAiCompatibleRuntimeAdapter.d.ts +1 -0
  130. package/dist/api/ai-gateway/providers/OpenAiCompatibleRuntimeAdapter.js +6 -0
  131. package/dist/api/ai-gateway/providers/OpenAiCompatibleRuntimeAdapter.js.map +1 -0
  132. package/dist/api/ai-gateway/providers/OpenAiRuntimeAdapter.d.ts +13 -0
  133. package/dist/api/ai-gateway/providers/OpenAiRuntimeAdapter.js +34 -0
  134. package/dist/api/ai-gateway/providers/OpenAiRuntimeAdapter.js.map +1 -0
  135. package/dist/api/ai-gateway/providers/ProviderRegistry.d.ts +68 -0
  136. package/dist/api/ai-gateway/providers/ProviderRegistry.js +288 -0
  137. package/dist/api/ai-gateway/providers/ProviderRegistry.js.map +1 -0
  138. package/dist/api/ai-gateway/providers/ProviderRuntimeAdapter.d.ts +88 -0
  139. package/dist/api/ai-gateway/providers/ProviderRuntimeAdapter.js +645 -0
  140. package/dist/api/ai-gateway/providers/ProviderRuntimeAdapter.js.map +1 -0
  141. package/dist/api/ai-gateway/providers/ProviderRuntimeRegistry.d.ts +13 -0
  142. package/dist/api/ai-gateway/providers/ProviderRuntimeRegistry.js +48 -0
  143. package/dist/api/ai-gateway/providers/ProviderRuntimeRegistry.js.map +1 -0
  144. package/dist/api/ai-gateway/providers/index.d.ts +9 -0
  145. package/dist/api/ai-gateway/providers/index.js +26 -0
  146. package/dist/api/ai-gateway/providers/index.js.map +1 -0
  147. package/dist/api/ai-gateway/quota/AnthropicQuotaAdapter.d.ts +5 -0
  148. package/dist/api/ai-gateway/quota/AnthropicQuotaAdapter.js +21 -0
  149. package/dist/api/ai-gateway/quota/AnthropicQuotaAdapter.js.map +1 -0
  150. package/dist/api/ai-gateway/quota/BailianQuotaAdapter.d.ts +5 -0
  151. package/dist/api/ai-gateway/quota/BailianQuotaAdapter.js +21 -0
  152. package/dist/api/ai-gateway/quota/BailianQuotaAdapter.js.map +1 -0
  153. package/dist/api/ai-gateway/quota/DeepSeekQuotaAdapter.d.ts +10 -0
  154. package/dist/api/ai-gateway/quota/DeepSeekQuotaAdapter.js +83 -0
  155. package/dist/api/ai-gateway/quota/DeepSeekQuotaAdapter.js.map +1 -0
  156. package/dist/api/ai-gateway/quota/KimiQuotaAdapter.d.ts +10 -0
  157. package/dist/api/ai-gateway/quota/KimiQuotaAdapter.js +70 -0
  158. package/dist/api/ai-gateway/quota/KimiQuotaAdapter.js.map +1 -0
  159. package/dist/api/ai-gateway/quota/OpenAiQuotaAdapter.d.ts +5 -0
  160. package/dist/api/ai-gateway/quota/OpenAiQuotaAdapter.js +21 -0
  161. package/dist/api/ai-gateway/quota/OpenAiQuotaAdapter.js.map +1 -0
  162. package/dist/api/ai-gateway/quota/ProviderQuotaAdapter.d.ts +214 -0
  163. package/dist/api/ai-gateway/quota/ProviderQuotaAdapter.js +511 -0
  164. package/dist/api/ai-gateway/quota/ProviderQuotaAdapter.js.map +1 -0
  165. package/dist/api/ai-gateway/quota/index.d.ts +6 -0
  166. package/dist/api/ai-gateway/quota/index.js +23 -0
  167. package/dist/api/ai-gateway/quota/index.js.map +1 -0
  168. package/dist/api/ai-gateway/routing/InMemorySessionAffinityStore.d.ts +26 -0
  169. package/dist/api/ai-gateway/routing/InMemorySessionAffinityStore.js +67 -0
  170. package/dist/api/ai-gateway/routing/InMemorySessionAffinityStore.js.map +1 -0
  171. package/dist/api/ai-gateway/routing/ModelRouter.d.ts +84 -0
  172. package/dist/api/ai-gateway/routing/ModelRouter.js +274 -0
  173. package/dist/api/ai-gateway/routing/ModelRouter.js.map +1 -0
  174. package/dist/api/ai-gateway/routing/RedisSessionAffinityStore.d.ts +39 -0
  175. package/dist/api/ai-gateway/routing/RedisSessionAffinityStore.js +122 -0
  176. package/dist/api/ai-gateway/routing/RedisSessionAffinityStore.js.map +1 -0
  177. package/dist/api/ai-gateway/routing/SessionAffinityStore.d.ts +49 -0
  178. package/dist/api/ai-gateway/routing/SessionAffinityStore.js +66 -0
  179. package/dist/api/ai-gateway/routing/SessionAffinityStore.js.map +1 -0
  180. package/dist/api/ai-gateway/service-access/AiConnectionServiceAccess.d.ts +25 -0
  181. package/dist/api/ai-gateway/service-access/AiConnectionServiceAccess.js +50 -0
  182. package/dist/api/ai-gateway/service-access/AiConnectionServiceAccess.js.map +1 -0
  183. package/dist/api/ai-gateway/types.d.ts +112 -0
  184. package/dist/api/ai-gateway/types.js +305 -0
  185. package/dist/api/ai-gateway/types.js.map +1 -0
  186. package/dist/api/auth/AuthContext.d.ts +18 -3
  187. package/dist/api/auth/AuthContext.js +13 -2
  188. package/dist/api/auth/AuthContext.js.map +1 -1
  189. package/dist/api/auth/Authenticator.d.ts +3 -0
  190. package/dist/api/auth/Authenticator.js.map +1 -1
  191. package/dist/api/auth/ClientCredentialsAuthenticator.d.ts +2 -6
  192. package/dist/api/auth/ClientCredentialsAuthenticator.js +12 -30
  193. package/dist/api/auth/ClientCredentialsAuthenticator.js.map +1 -1
  194. package/dist/api/auth/SolidTokenAuthenticator.d.ts +2 -0
  195. package/dist/api/auth/SolidTokenAuthenticator.js +88 -2
  196. package/dist/api/auth/SolidTokenAuthenticator.js.map +1 -1
  197. package/dist/api/auth/TokenIdentity.d.ts +6 -0
  198. package/dist/api/auth/TokenIdentity.js +31 -0
  199. package/dist/api/auth/TokenIdentity.js.map +1 -0
  200. package/dist/api/chatkit/ai-provider.d.ts +9 -23
  201. package/dist/api/chatkit/ai-provider.js +30 -153
  202. package/dist/api/chatkit/ai-provider.js.map +1 -1
  203. package/dist/api/chatkit/default-agent.d.ts +24 -15
  204. package/dist/api/chatkit/default-agent.js +24 -83
  205. package/dist/api/chatkit/default-agent.js.map +1 -1
  206. package/dist/api/chatkit/index.d.ts +2 -1
  207. package/dist/api/chatkit/index.js +3 -1
  208. package/dist/api/chatkit/index.js.map +1 -1
  209. package/dist/api/chatkit/pod-store.d.ts +13 -1
  210. package/dist/api/chatkit/pod-store.js +127 -7
  211. package/dist/api/chatkit/pod-store.js.map +1 -1
  212. package/dist/api/chatkit/runtime/AcpAgentRuntime.d.ts +0 -1
  213. package/dist/api/chatkit/runtime/AcpAgentRuntime.js +14 -51
  214. package/dist/api/chatkit/runtime/AcpAgentRuntime.js.map +1 -1
  215. package/dist/api/chatkit/runtime/AcpRunner.js +2 -1
  216. package/dist/api/chatkit/runtime/AcpRunner.js.map +1 -1
  217. package/dist/api/chatkit/runtime/CodexRuntimeProjector.d.ts +15 -1
  218. package/dist/api/chatkit/runtime/CodexRuntimeProjector.js +52 -34
  219. package/dist/api/chatkit/runtime/CodexRuntimeProjector.js.map +1 -1
  220. package/dist/api/chatkit/service.d.ts +8 -1
  221. package/dist/api/chatkit/service.js +46 -5
  222. package/dist/api/chatkit/service.js.map +1 -1
  223. package/dist/api/chatkit/store.d.ts +23 -1
  224. package/dist/api/chatkit/store.js +56 -0
  225. package/dist/api/chatkit/store.js.map +1 -1
  226. package/dist/api/chatkit/types.d.ts +1 -0
  227. package/dist/api/chatkit/types.js.map +1 -1
  228. package/dist/api/container/common.js +286 -13
  229. package/dist/api/container/common.js.map +1 -1
  230. package/dist/api/container/index.js +126 -6
  231. package/dist/api/container/index.js.map +1 -1
  232. package/dist/api/container/local.js +50 -6
  233. package/dist/api/container/local.js.map +1 -1
  234. package/dist/api/container/rdf.d.ts +15 -0
  235. package/dist/api/container/rdf.js +90 -0
  236. package/dist/api/container/rdf.js.map +1 -0
  237. package/dist/api/container/routes.js +151 -11
  238. package/dist/api/container/routes.js.map +1 -1
  239. package/dist/api/container/types.d.ts +96 -0
  240. package/dist/api/container/types.js.map +1 -1
  241. package/dist/api/handlers/AdminHandler.d.ts +25 -2
  242. package/dist/api/handlers/AdminHandler.js +60 -10
  243. package/dist/api/handlers/AdminHandler.js.map +1 -1
  244. package/dist/api/handlers/AiClientConfigurationHandler.d.ts +7 -0
  245. package/dist/api/handlers/AiClientConfigurationHandler.js +202 -0
  246. package/dist/api/handlers/AiClientConfigurationHandler.js.map +1 -0
  247. package/dist/api/handlers/AiGatewayHandler.d.ts +23 -0
  248. package/dist/api/handlers/AiGatewayHandler.js +231 -0
  249. package/dist/api/handlers/AiGatewayHandler.js.map +1 -0
  250. package/dist/api/handlers/AiGatewayManagementHandler.d.ts +24 -0
  251. package/dist/api/handlers/AiGatewayManagementHandler.js +503 -0
  252. package/dist/api/handlers/AiGatewayManagementHandler.js.map +1 -0
  253. package/dist/api/handlers/ChatHandler.d.ts +11 -12
  254. package/dist/api/handlers/ChatHandler.js +12 -219
  255. package/dist/api/handlers/ChatHandler.js.map +1 -1
  256. package/dist/api/handlers/DashboardHandler.js +22 -116
  257. package/dist/api/handlers/DashboardHandler.js.map +1 -1
  258. package/dist/api/handlers/NetworkSettingsHandler.d.ts +97 -0
  259. package/dist/api/handlers/NetworkSettingsHandler.js +511 -0
  260. package/dist/api/handlers/NetworkSettingsHandler.js.map +1 -0
  261. package/dist/api/handlers/PodSettingsHandler.d.ts +79 -0
  262. package/dist/api/handlers/PodSettingsHandler.js +162 -0
  263. package/dist/api/handlers/PodSettingsHandler.js.map +1 -0
  264. package/dist/api/handlers/ProvisionHandler.d.ts +3 -1
  265. package/dist/api/handlers/ProvisionHandler.js +22 -87
  266. package/dist/api/handlers/ProvisionHandler.js.map +1 -1
  267. package/dist/api/handlers/RdfStatsHandler.d.ts +6 -0
  268. package/dist/api/handlers/RdfStatsHandler.js +85 -0
  269. package/dist/api/handlers/RdfStatsHandler.js.map +1 -0
  270. package/dist/api/handlers/SettingsHandler.d.ts +5 -0
  271. package/dist/api/handlers/SettingsHandler.js +13 -0
  272. package/dist/api/handlers/SettingsHandler.js.map +1 -0
  273. package/dist/api/handlers/StaticSpaHandler.d.ts +8 -0
  274. package/dist/api/handlers/StaticSpaHandler.js +102 -0
  275. package/dist/api/handlers/StaticSpaHandler.js.map +1 -0
  276. package/dist/api/handlers/index.d.ts +1 -0
  277. package/dist/api/handlers/index.js +1 -0
  278. package/dist/api/handlers/index.js.map +1 -1
  279. package/dist/api/http/readBoundedJsonBody.d.ts +14 -0
  280. package/dist/api/http/readBoundedJsonBody.js +58 -0
  281. package/dist/api/http/readBoundedJsonBody.js.map +1 -0
  282. package/dist/api/middleware/AuthMiddleware.d.ts +1 -0
  283. package/dist/api/middleware/AuthMiddleware.js +33 -4
  284. package/dist/api/middleware/AuthMiddleware.js.map +1 -1
  285. package/dist/api/runs/AgentRuntimeTypes.d.ts +18 -3
  286. package/dist/api/runs/AgentRuntimeTypes.js +61 -0
  287. package/dist/api/runs/AgentRuntimeTypes.js.map +1 -1
  288. package/dist/api/runs/InngestRunExecutionBackend.d.ts +28 -3
  289. package/dist/api/runs/InngestRunExecutionBackend.js +26 -3
  290. package/dist/api/runs/InngestRunExecutionBackend.js.map +1 -1
  291. package/dist/api/runs/ManagedRunWorker.d.ts +4 -1
  292. package/dist/api/runs/ManagedRunWorker.js +39 -8
  293. package/dist/api/runs/ManagedRunWorker.js.map +1 -1
  294. package/dist/api/runs/PiAgentRuntimeDriver.d.ts +5 -1
  295. package/dist/api/runs/PiAgentRuntimeDriver.js +94 -57
  296. package/dist/api/runs/PiAgentRuntimeDriver.js.map +1 -1
  297. package/dist/api/runs/RdfRunContextRetriever.d.ts +46 -0
  298. package/dist/api/runs/RdfRunContextRetriever.js +277 -0
  299. package/dist/api/runs/RdfRunContextRetriever.js.map +1 -0
  300. package/dist/api/runs/RunExecutionBackend.d.ts +38 -0
  301. package/dist/api/runs/RunExecutionBackend.js.map +1 -1
  302. package/dist/api/runs/RunStateCenter.d.ts +18 -3
  303. package/dist/api/runs/RunStateCenter.js +85 -24
  304. package/dist/api/runs/RunStateCenter.js.map +1 -1
  305. package/dist/api/runtime.js +163 -3
  306. package/dist/api/runtime.js.map +1 -1
  307. package/dist/api/service/AiClientConfigurationService.d.ts +97 -0
  308. package/dist/api/service/AiClientConfigurationService.js +379 -0
  309. package/dist/api/service/AiClientConfigurationService.js.map +1 -0
  310. package/dist/api/service/RdfBenchmarkReportCatalog.d.ts +86 -0
  311. package/dist/api/service/RdfBenchmarkReportCatalog.js +349 -0
  312. package/dist/api/service/RdfBenchmarkReportCatalog.js.map +1 -0
  313. package/dist/api/service/RdfBenchmarkReportGate.d.ts +78 -0
  314. package/dist/api/service/RdfBenchmarkReportGate.js +197 -0
  315. package/dist/api/service/RdfBenchmarkReportGate.js.map +1 -0
  316. package/dist/api/service/RdfSearchIndexingService.d.ts +113 -0
  317. package/dist/api/service/RdfSearchIndexingService.js +272 -0
  318. package/dist/api/service/RdfSearchIndexingService.js.map +1 -0
  319. package/dist/api/service/RdfSearchIndexingSolidFsSyncer.d.ts +27 -0
  320. package/dist/api/service/RdfSearchIndexingSolidFsSyncer.js +90 -0
  321. package/dist/api/service/RdfSearchIndexingSolidFsSyncer.js.map +1 -0
  322. package/dist/api/service/RdfStorageStatsService.d.ts +31 -0
  323. package/dist/api/service/RdfStorageStatsService.js +97 -0
  324. package/dist/api/service/RdfStorageStatsService.js.map +1 -0
  325. package/dist/api/service/VectorStoreService.d.ts +2 -0
  326. package/dist/api/service/VectorStoreService.js +70 -2
  327. package/dist/api/service/VectorStoreService.js.map +1 -1
  328. package/dist/api/service/VercelChatService.d.ts +27 -38
  329. package/dist/api/service/VercelChatService.js +153 -505
  330. package/dist/api/service/VercelChatService.js.map +1 -1
  331. package/dist/api/service/provider-http-transport.d.ts +21 -0
  332. package/dist/api/service/provider-http-transport.js +108 -2
  333. package/dist/api/service/provider-http-transport.js.map +1 -1
  334. package/dist/api/service/provider-registry.d.ts +5 -7
  335. package/dist/api/service/provider-registry.js +81 -64
  336. package/dist/api/service/provider-registry.js.map +1 -1
  337. package/dist/api/tasks/InngestTaskScheduler.d.ts +44 -4
  338. package/dist/api/tasks/TaskMaterializer.d.ts +10 -1
  339. package/dist/api/tasks/TaskMaterializer.js +39 -4
  340. package/dist/api/tasks/TaskMaterializer.js.map +1 -1
  341. package/dist/api/tasks/TaskService.d.ts +5 -1
  342. package/dist/api/tasks/TaskService.js +3 -0
  343. package/dist/api/tasks/TaskService.js.map +1 -1
  344. package/dist/cli/commands/rdf.d.ts +9 -0
  345. package/dist/cli/commands/rdf.js +66 -1
  346. package/dist/cli/commands/rdf.js.map +1 -1
  347. package/dist/cli/commands/start.js +3 -0
  348. package/dist/cli/commands/start.js.map +1 -1
  349. package/dist/cli/lib/solid-auth.d.ts +3 -3
  350. package/dist/cli/lib/solid-auth.js +4 -4
  351. package/dist/cli/lib/solid-auth.js.map +1 -1
  352. package/dist/components/components.jsonld +16 -0
  353. package/dist/components/context.jsonld +815 -28
  354. package/dist/document/Chunker.jsonld +110 -0
  355. package/dist/document/{DocumentParser.d.ts → DocumentReader.d.ts} +23 -11
  356. package/dist/document/{DocumentParser.js → DocumentReader.js} +2 -2
  357. package/dist/document/DocumentReader.js.map +1 -0
  358. package/dist/document/DocumentReader.jsonld +82 -0
  359. package/dist/document/HeadingChunker.jsonld +41 -0
  360. package/dist/document/{JinaDocumentParser.d.ts → JinaReader.d.ts} +7 -7
  361. package/dist/document/{JinaDocumentParser.js → JinaReader.js} +12 -12
  362. package/dist/document/JinaReader.js.map +1 -0
  363. package/dist/document/JinaReader.jsonld +133 -0
  364. package/dist/document/L0SourceSummary.d.ts +103 -0
  365. package/dist/document/L0SourceSummary.js +157 -0
  366. package/dist/document/L0SourceSummary.js.map +1 -0
  367. package/dist/document/L0SourceSummary.jsonld +326 -0
  368. package/dist/document/PaddleOcrReader.d.ts +40 -0
  369. package/dist/document/PaddleOcrReader.js +53 -0
  370. package/dist/document/PaddleOcrReader.js.map +1 -0
  371. package/dist/document/PaddleOcrReader.jsonld +234 -0
  372. package/dist/document/ReaderAiConfig.d.ts +50 -0
  373. package/dist/document/ReaderAiConfig.js +109 -0
  374. package/dist/document/ReaderAiConfig.js.map +1 -0
  375. package/dist/document/ReaderAiConfig.jsonld +185 -0
  376. package/dist/document/ReaderPolicy.d.ts +89 -0
  377. package/dist/document/ReaderPolicy.js +158 -0
  378. package/dist/document/ReaderPolicy.js.map +1 -0
  379. package/dist/document/ReaderPolicy.jsonld +218 -0
  380. package/dist/document/index.d.ts +6 -2
  381. package/dist/document/index.js +6 -2
  382. package/dist/document/index.js.map +1 -1
  383. package/dist/edge/DdnsManager.d.ts +1 -1
  384. package/dist/edge/DdnsManager.js.map +1 -1
  385. package/dist/edge/EdgeNodeAgent.d.ts +4 -0
  386. package/dist/edge/EdgeNodeAgent.js +6 -0
  387. package/dist/edge/EdgeNodeAgent.js.map +1 -1
  388. package/dist/edge/EdgeNodeAgent.jsonld +8 -0
  389. package/dist/edge/EdgeNodeAgentInitializer.d.ts +16 -0
  390. package/dist/edge/EdgeNodeAgentInitializer.js +51 -0
  391. package/dist/edge/EdgeNodeAgentInitializer.js.map +1 -1
  392. package/dist/edge/EdgeNodeAgentInitializer.jsonld +250 -0
  393. package/dist/edge/EdgeNodeCertificateCapabilityBridge.d.ts +34 -0
  394. package/dist/edge/EdgeNodeCertificateCapabilityBridge.js +111 -0
  395. package/dist/edge/EdgeNodeCertificateCapabilityBridge.js.map +1 -0
  396. package/dist/edge/acme/AcmeCertificateManager.d.ts +14 -1
  397. package/dist/edge/acme/AcmeCertificateManager.js +67 -7
  398. package/dist/edge/acme/AcmeCertificateManager.js.map +1 -1
  399. package/dist/edge/acme/AcmeCertificateManager.jsonld +22 -2
  400. package/dist/edge/acme/ClusterCertificateManager.d.ts +12 -0
  401. package/dist/edge/acme/ClusterCertificateManager.js +38 -0
  402. package/dist/edge/acme/ClusterCertificateManager.js.map +1 -1
  403. package/dist/extensions/ExtensionRuntime.d.ts +17 -0
  404. package/dist/extensions/ExtensionRuntime.js +171 -0
  405. package/dist/extensions/ExtensionRuntime.js.map +1 -0
  406. package/dist/extensions/PodCredentialResolver.d.ts +23 -0
  407. package/dist/extensions/PodCredentialResolver.js +139 -0
  408. package/dist/extensions/PodCredentialResolver.js.map +1 -0
  409. package/dist/extensions/index.d.ts +3 -0
  410. package/dist/extensions/index.js +20 -0
  411. package/dist/extensions/index.js.map +1 -0
  412. package/dist/extensions/types.d.ts +73 -0
  413. package/dist/extensions/types.js +3 -0
  414. package/dist/extensions/types.js.map +1 -0
  415. package/dist/http/SubgraphSparqlHttpHandler.d.ts +20 -1
  416. package/dist/http/SubgraphSparqlHttpHandler.js +324 -43
  417. package/dist/http/SubgraphSparqlHttpHandler.js.map +1 -1
  418. package/dist/http/SubgraphSparqlHttpHandler.jsonld +87 -0
  419. package/dist/identity/drizzle/EdgeNodeRepository.js +3 -2
  420. package/dist/identity/drizzle/EdgeNodeRepository.js.map +1 -1
  421. package/dist/identity/drizzle/schema.pg.js +1 -1
  422. package/dist/identity/drizzle/schema.pg.js.map +1 -1
  423. package/dist/identity/drizzle/schema.sqlite.js +1 -1
  424. package/dist/identity/drizzle/schema.sqlite.js.map +1 -1
  425. package/dist/identity/oidc/ScopedPickWebIdHandler.js +5 -5
  426. package/dist/identity/oidc/ScopedPickWebIdHandler.js.map +1 -1
  427. package/dist/index.d.ts +12 -2
  428. package/dist/index.js +13 -1
  429. package/dist/index.js.map +1 -1
  430. package/dist/main.js +3 -0
  431. package/dist/main.js.map +1 -1
  432. package/dist/provision/LocalProvisionState.d.ts +28 -0
  433. package/dist/provision/LocalProvisionState.js +124 -0
  434. package/dist/provision/LocalProvisionState.js.map +1 -0
  435. package/dist/provision/ProvisionCodeCodec.d.ts +7 -3
  436. package/dist/provision/ProvisionCodeCodec.js +10 -3
  437. package/dist/provision/ProvisionCodeCodec.js.map +1 -1
  438. package/dist/provision/ProvisionPodCreator.d.ts +15 -1
  439. package/dist/provision/ProvisionPodCreator.js +68 -1
  440. package/dist/provision/ProvisionPodCreator.js.map +1 -1
  441. package/dist/provision/ProvisionPodCreator.jsonld +31 -0
  442. package/dist/provision/ServiceAccessTokenCodec.d.ts +45 -0
  443. package/dist/provision/ServiceAccessTokenCodec.js +86 -0
  444. package/dist/provision/ServiceAccessTokenCodec.js.map +1 -0
  445. package/dist/runtime/GatewayAdminProxyAuth.d.ts +29 -0
  446. package/dist/runtime/GatewayAdminProxyAuth.js +108 -0
  447. package/dist/runtime/GatewayAdminProxyAuth.js.map +1 -0
  448. package/dist/runtime/Proxy.d.ts +10 -0
  449. package/dist/runtime/Proxy.js +64 -6
  450. package/dist/runtime/Proxy.js.map +1 -1
  451. package/dist/runtime/XpodRuntime.js +1 -0
  452. package/dist/runtime/XpodRuntime.js.map +1 -1
  453. package/dist/runtime/bootstrap.d.ts +1 -0
  454. package/dist/runtime/bootstrap.js +29 -0
  455. package/dist/runtime/bootstrap.js.map +1 -1
  456. package/dist/runtime/css-process.d.ts +1 -0
  457. package/dist/runtime/css-process.js +1 -0
  458. package/dist/runtime/css-process.js.map +1 -1
  459. package/dist/runtime/index.d.ts +1 -0
  460. package/dist/runtime/index.js +3 -1
  461. package/dist/runtime/index.js.map +1 -1
  462. package/dist/runtime/lifecycle.d.ts +3 -1
  463. package/dist/runtime/lifecycle.js +3 -1
  464. package/dist/runtime/lifecycle.js.map +1 -1
  465. package/dist/runtime/runner/node/NodeGatewayRuntimeRunner.js +2 -0
  466. package/dist/runtime/runner/node/NodeGatewayRuntimeRunner.js.map +1 -1
  467. package/dist/runtime/runner/types.d.ts +3 -0
  468. package/dist/runtime/runner/types.js.map +1 -1
  469. package/dist/runtime/runtime-types.d.ts +2 -0
  470. package/dist/runtime/runtime-types.js.map +1 -1
  471. package/dist/runtime/safe-env.d.ts +15 -0
  472. package/dist/runtime/safe-env.js +109 -0
  473. package/dist/runtime/safe-env.js.map +1 -0
  474. package/dist/security/index.d.ts +1 -0
  475. package/dist/security/index.js +18 -0
  476. package/dist/security/index.js.map +1 -0
  477. package/dist/security/secret-cell/DeploymentRootKeyProvider.d.ts +17 -0
  478. package/dist/security/secret-cell/DeploymentRootKeyProvider.js +61 -0
  479. package/dist/security/secret-cell/DeploymentRootKeyProvider.js.map +1 -0
  480. package/dist/security/secret-cell/DeploymentRootKeyProvider.jsonld +124 -0
  481. package/dist/security/secret-cell/SecretCellVault.d.ts +55 -0
  482. package/dist/security/secret-cell/SecretCellVault.js +242 -0
  483. package/dist/security/secret-cell/SecretCellVault.js.map +1 -0
  484. package/dist/security/secret-cell/SecretCellVault.jsonld +207 -0
  485. package/dist/security/secret-cell/index.d.ts +2 -0
  486. package/dist/security/secret-cell/index.js +11 -0
  487. package/dist/security/secret-cell/index.js.map +1 -0
  488. package/dist/solidfs/CompositeSolidFsSyncer.d.ts +18 -0
  489. package/dist/solidfs/CompositeSolidFsSyncer.js +32 -0
  490. package/dist/solidfs/CompositeSolidFsSyncer.js.map +1 -0
  491. package/dist/solidfs/LocalSolidFS.js +25 -1
  492. package/dist/solidfs/LocalSolidFS.js.map +1 -1
  493. package/dist/solidfs/RdfIndexSolidFsSyncer.d.ts +41 -2
  494. package/dist/solidfs/RdfIndexSolidFsSyncer.js +331 -21
  495. package/dist/solidfs/RdfIndexSolidFsSyncer.js.map +1 -1
  496. package/dist/solidfs/SolidFsMetaNotes.d.ts +25 -0
  497. package/dist/solidfs/SolidFsMetaNotes.js +103 -0
  498. package/dist/solidfs/SolidFsMetaNotes.js.map +1 -0
  499. package/dist/solidfs/SolidFsSyncJournal.d.ts +2 -2
  500. package/dist/solidfs/SolidFsSyncJournal.js +9 -4
  501. package/dist/solidfs/SolidFsSyncJournal.js.map +1 -1
  502. package/dist/solidfs/SolidFsSyncJournal.jsonld +119 -0
  503. package/dist/solidfs/WorkspacePrompt.d.ts +13 -0
  504. package/dist/solidfs/WorkspacePrompt.js +42 -0
  505. package/dist/solidfs/WorkspacePrompt.js.map +1 -0
  506. package/dist/solidfs/index.d.ts +3 -0
  507. package/dist/solidfs/index.js +3 -0
  508. package/dist/solidfs/index.js.map +1 -1
  509. package/dist/solidfs/types.d.ts +12 -2
  510. package/dist/solidfs/types.js.map +1 -1
  511. package/dist/storage/accessors/MixDataAccessor.d.ts +36 -4
  512. package/dist/storage/accessors/MixDataAccessor.js +222 -23
  513. package/dist/storage/accessors/MixDataAccessor.js.map +1 -1
  514. package/dist/storage/accessors/MixDataAccessor.jsonld +89 -0
  515. package/dist/storage/accessors/SolidRdfDataAccessor.d.ts +6 -1
  516. package/dist/storage/accessors/SolidRdfDataAccessor.js +35 -0
  517. package/dist/storage/accessors/SolidRdfDataAccessor.js.map +1 -1
  518. package/dist/storage/accessors/SolidRdfDataAccessor.jsonld +20 -0
  519. package/dist/storage/database/PostgresPoolManager.d.ts +1 -0
  520. package/dist/storage/database/PostgresPoolManager.js +2 -2
  521. package/dist/storage/database/PostgresPoolManager.js.map +1 -1
  522. package/dist/storage/locking/UrlAwareRedisLocker.d.ts +2 -0
  523. package/dist/storage/locking/UrlAwareRedisLocker.js +65 -0
  524. package/dist/storage/locking/UrlAwareRedisLocker.js.map +1 -1
  525. package/dist/storage/locking/UrlAwareRedisLocker.jsonld +19 -0
  526. package/dist/storage/rdf/PostgresRdfEngine.d.ts +286 -9
  527. package/dist/storage/rdf/PostgresRdfEngine.js +10773 -2084
  528. package/dist/storage/rdf/PostgresRdfEngine.js.map +1 -1
  529. package/dist/storage/rdf/PostgresRdfEngine.jsonld +1693 -89
  530. package/dist/storage/rdf/PostgresRdfSqlExecutor.d.ts +24 -0
  531. package/dist/storage/rdf/PostgresRdfSqlExecutor.js +131 -0
  532. package/dist/storage/rdf/PostgresRdfSqlExecutor.js.map +1 -0
  533. package/dist/storage/rdf/PostgresRdfTextIndex.d.ts +54 -0
  534. package/dist/storage/rdf/PostgresRdfTextIndex.js +1255 -0
  535. package/dist/storage/rdf/PostgresRdfTextIndex.js.map +1 -0
  536. package/dist/storage/rdf/PostgresRdfTextIndex.jsonld +487 -0
  537. package/dist/storage/rdf/PostgresRdfVectorIndex.d.ts +46 -0
  538. package/dist/storage/rdf/PostgresRdfVectorIndex.js +1165 -0
  539. package/dist/storage/rdf/PostgresRdfVectorIndex.js.map +1 -0
  540. package/dist/storage/rdf/PostgresRdfVectorIndex.jsonld +423 -0
  541. package/dist/storage/rdf/Rdf3xIndex.d.ts +14 -1
  542. package/dist/storage/rdf/Rdf3xIndex.js +286 -2
  543. package/dist/storage/rdf/Rdf3xIndex.js.map +1 -1
  544. package/dist/storage/rdf/Rdf3xIndex.jsonld +36 -0
  545. package/dist/storage/rdf/Rdf3xSchema.d.ts +5 -1
  546. package/dist/storage/rdf/Rdf3xSchema.js +17 -3
  547. package/dist/storage/rdf/Rdf3xSchema.js.map +1 -1
  548. package/dist/storage/rdf/RdfAccessScope.d.ts +22 -0
  549. package/dist/storage/rdf/RdfAccessScope.js +345 -0
  550. package/dist/storage/rdf/RdfAccessScope.js.map +1 -0
  551. package/dist/storage/rdf/RdfAccessScope.jsonld +45 -0
  552. package/dist/storage/rdf/RdfFusionRankPlan.d.ts +2 -0
  553. package/dist/storage/rdf/RdfFusionRankPlan.js +186 -0
  554. package/dist/storage/rdf/RdfFusionRankPlan.js.map +1 -0
  555. package/dist/storage/rdf/RdfJoinShape.d.ts +8 -0
  556. package/dist/storage/rdf/RdfJoinShape.js +31 -0
  557. package/dist/storage/rdf/RdfJoinShape.js.map +1 -0
  558. package/dist/storage/rdf/RdfQuadIndex.d.ts +5 -2
  559. package/dist/storage/rdf/RdfQuadIndex.js +94 -6
  560. package/dist/storage/rdf/RdfQuadIndex.js.map +1 -1
  561. package/dist/storage/rdf/RdfQuadIndex.jsonld +12 -0
  562. package/dist/storage/rdf/RdfQueryExecutor.d.ts +3 -4
  563. package/dist/storage/rdf/RdfQueryExecutor.js +235 -8
  564. package/dist/storage/rdf/RdfQueryExecutor.js.map +1 -1
  565. package/dist/storage/rdf/RdfSearchSourceFilter.d.ts +10 -0
  566. package/dist/storage/rdf/RdfSearchSourceFilter.js +83 -0
  567. package/dist/storage/rdf/RdfSearchSourceFilter.js.map +1 -0
  568. package/dist/storage/rdf/RdfSparqlAdapter.d.ts +27 -1
  569. package/dist/storage/rdf/RdfSparqlAdapter.js +265 -3
  570. package/dist/storage/rdf/RdfSparqlAdapter.js.map +1 -1
  571. package/dist/storage/rdf/RdfSparqlAdapter.jsonld +8 -0
  572. package/dist/storage/rdf/RdfTermDictionary.d.ts +7 -1
  573. package/dist/storage/rdf/RdfTermDictionary.js +139 -0
  574. package/dist/storage/rdf/RdfTermDictionary.js.map +1 -1
  575. package/dist/storage/rdf/RdfTermDictionary.jsonld +4 -0
  576. package/dist/storage/rdf/RdfTextIndex.d.ts +45 -2
  577. package/dist/storage/rdf/RdfTextIndex.js +810 -114
  578. package/dist/storage/rdf/RdfTextIndex.js.map +1 -1
  579. package/dist/storage/rdf/RdfTextIndex.jsonld +193 -0
  580. package/dist/storage/rdf/RdfTextProjection.d.ts +10 -0
  581. package/dist/storage/rdf/RdfTextProjection.js +258 -0
  582. package/dist/storage/rdf/RdfTextProjection.js.map +1 -0
  583. package/dist/storage/rdf/RdfVectorIndex.d.ts +30 -2
  584. package/dist/storage/rdf/RdfVectorIndex.js +461 -38
  585. package/dist/storage/rdf/RdfVectorIndex.js.map +1 -1
  586. package/dist/storage/rdf/RdfVectorIndex.jsonld +163 -0
  587. package/dist/storage/rdf/SolidRdfEngine.d.ts +12 -9
  588. package/dist/storage/rdf/SolidRdfEngine.js +48 -22
  589. package/dist/storage/rdf/SolidRdfEngine.js.map +1 -1
  590. package/dist/storage/rdf/SolidRdfEngine.jsonld +33 -43
  591. package/dist/storage/rdf/SolidRdfSparqlEngine.d.ts +19 -8
  592. package/dist/storage/rdf/SolidRdfSparqlEngine.js +674 -44
  593. package/dist/storage/rdf/SolidRdfSparqlEngine.js.map +1 -1
  594. package/dist/storage/rdf/SolidRdfSparqlEngine.jsonld +51 -0
  595. package/dist/storage/rdf/index.d.ts +9 -5
  596. package/dist/storage/rdf/index.js +42 -1
  597. package/dist/storage/rdf/index.js.map +1 -1
  598. package/dist/storage/rdf/models-benchmark.d.ts +264 -2
  599. package/dist/storage/rdf/models-benchmark.js +4207 -155
  600. package/dist/storage/rdf/models-benchmark.js.map +1 -1
  601. package/dist/storage/rdf/types.d.ts +833 -4
  602. package/dist/storage/rdf/types.js.map +1 -1
  603. package/dist/storage/rdf/types.jsonld +348 -0
  604. package/dist/storage/sparql/CompatibilitySparqlEngine.d.ts +14 -13
  605. package/dist/storage/sparql/CompatibilitySparqlEngine.js +24 -24
  606. package/dist/storage/sparql/CompatibilitySparqlEngine.js.map +1 -1
  607. package/dist/storage/sparql/CompatibilitySparqlEngineImpl.d.ts +14 -13
  608. package/dist/storage/sparql/CompatibilitySparqlEngineImpl.js +30 -18
  609. package/dist/storage/sparql/CompatibilitySparqlEngineImpl.js.map +1 -1
  610. package/dist/storage/sparql/SubgraphQueryEngine.d.ts +21 -12
  611. package/dist/storage/sparql/SubgraphQueryEngine.js +12 -12
  612. package/dist/storage/sparql/SubgraphQueryEngine.js.map +1 -1
  613. package/dist/terminal/sandbox/MacOSSandbox.js +2 -1
  614. package/dist/terminal/sandbox/MacOSSandbox.js.map +1 -1
  615. package/dist/terminal/sandbox/index.js +2 -1
  616. package/dist/terminal/sandbox/index.js.map +1 -1
  617. package/dist/test-utils/no-auth-xpod.js +3 -0
  618. package/dist/test-utils/no-auth-xpod.js.map +1 -1
  619. package/dist/tunnel/LocalTunnelProvider.d.ts +3 -0
  620. package/dist/tunnel/LocalTunnelProvider.js +17 -1
  621. package/dist/tunnel/LocalTunnelProvider.js.map +1 -1
  622. package/dist/tunnel/LocalTunnelProvider.jsonld +23 -0
  623. package/dist/tunnel/SakuraFrpTunnelProvider.d.ts +3 -0
  624. package/dist/tunnel/SakuraFrpTunnelProvider.js +18 -2
  625. package/dist/tunnel/SakuraFrpTunnelProvider.js.map +1 -1
  626. package/dist/tunnel/TunnelProfiles.d.ts +22 -0
  627. package/dist/tunnel/TunnelProfiles.js +208 -0
  628. package/dist/tunnel/TunnelProfiles.js.map +1 -0
  629. package/dist/tunnel/index.d.ts +2 -0
  630. package/dist/tunnel/index.js +4 -1
  631. package/dist/tunnel/index.js.map +1 -1
  632. package/dist/util/identifiers/ClusterIdentifierStrategy.d.ts +3 -0
  633. package/dist/util/identifiers/ClusterIdentifierStrategy.js +18 -2
  634. package/dist/util/identifiers/ClusterIdentifierStrategy.js.map +1 -1
  635. package/dist/util/identifiers/ClusterIdentifierStrategy.jsonld +5 -1
  636. package/node_modules/@undefineds.co/ai-connection/dist/AiClientConfigurationSection.d.ts +55 -0
  637. package/node_modules/@undefineds.co/ai-connection/dist/AiClientConfigurationSection.js +167 -0
  638. package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionHeader.d.ts +3 -0
  639. package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionHeader.js +8 -0
  640. package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionList.d.ts +4 -0
  641. package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionList.js +36 -0
  642. package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionMain.d.ts +4 -0
  643. package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionMain.js +37 -0
  644. package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionMainHeader.d.ts +3 -0
  645. package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionMainHeader.js +7 -0
  646. package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionPanel.d.ts +14 -0
  647. package/node_modules/@undefineds.co/ai-connection/dist/AiConnectionPanel.js +333 -0
  648. package/node_modules/@undefineds.co/ai-connection/dist/AiProviderCard.d.ts +22 -0
  649. package/node_modules/@undefineds.co/ai-connection/dist/AiProviderCard.js +43 -0
  650. package/node_modules/@undefineds.co/ai-connection/dist/AiQuotaCard.d.ts +8 -0
  651. package/node_modules/@undefineds.co/ai-connection/dist/AiQuotaCard.js +6 -0
  652. package/node_modules/@undefineds.co/ai-connection/dist/ai-connection-client.d.ts +120 -0
  653. package/node_modules/@undefineds.co/ai-connection/dist/ai-connection-client.js +414 -0
  654. package/node_modules/@undefineds.co/ai-connection/dist/client-config/base-adapter.d.ts +32 -0
  655. package/node_modules/@undefineds.co/ai-connection/dist/client-config/base-adapter.js +212 -0
  656. package/node_modules/@undefineds.co/ai-connection/dist/client-config/codex.d.ts +14 -0
  657. package/node_modules/@undefineds.co/ai-connection/dist/client-config/codex.js +90 -0
  658. package/node_modules/@undefineds.co/ai-connection/dist/client-config/index.cjs +668 -0
  659. package/node_modules/@undefineds.co/ai-connection/dist/client-config/index.d.ts +6 -0
  660. package/node_modules/@undefineds.co/ai-connection/dist/client-config/index.js +6 -0
  661. package/node_modules/@undefineds.co/ai-connection/dist/client-config/json-env-adapter.d.ts +21 -0
  662. package/node_modules/@undefineds.co/ai-connection/dist/client-config/json-env-adapter.js +82 -0
  663. package/node_modules/@undefineds.co/ai-connection/dist/client-config/pi.d.ts +13 -0
  664. package/node_modules/@undefineds.co/ai-connection/dist/client-config/pi.js +83 -0
  665. package/node_modules/@undefineds.co/ai-connection/dist/client-config/transaction.d.ts +17 -0
  666. package/node_modules/@undefineds.co/ai-connection/dist/client-config/transaction.js +153 -0
  667. package/node_modules/@undefineds.co/ai-connection/dist/client-config/types.d.ts +40 -0
  668. package/node_modules/@undefineds.co/ai-connection/dist/client-config/types.js +1 -0
  669. package/node_modules/@undefineds.co/ai-connection/dist/controller.d.ts +42 -0
  670. package/node_modules/@undefineds.co/ai-connection/dist/controller.js +289 -0
  671. package/node_modules/@undefineds.co/ai-connection/dist/index.d.ts +16 -0
  672. package/node_modules/@undefineds.co/ai-connection/dist/index.js +41 -0
  673. package/node_modules/@undefineds.co/ai-connection/dist/manifest.d.ts +1 -0
  674. package/node_modules/@undefineds.co/ai-connection/dist/manifest.js +18 -0
  675. package/node_modules/@undefineds.co/ai-connection/dist/service-access.d.ts +3 -0
  676. package/node_modules/@undefineds.co/ai-connection/dist/service-access.js +133 -0
  677. package/node_modules/@undefineds.co/ai-connection/package.json +50 -0
  678. package/node_modules/@undefineds.co/extension-sdk/README.md +299 -0
  679. package/node_modules/@undefineds.co/extension-sdk/dist/index.d.ts +5 -0
  680. package/node_modules/@undefineds.co/extension-sdk/dist/index.js +5 -0
  681. package/node_modules/@undefineds.co/extension-sdk/dist/layout.d.ts +16 -0
  682. package/node_modules/@undefineds.co/extension-sdk/dist/layout.js +36 -0
  683. package/node_modules/@undefineds.co/extension-sdk/dist/manifest.d.ts +27 -0
  684. package/node_modules/@undefineds.co/extension-sdk/dist/manifest.js +79 -0
  685. package/node_modules/@undefineds.co/extension-sdk/dist/react/app-layout.d.ts +7 -0
  686. package/node_modules/@undefineds.co/extension-sdk/dist/react/app-layout.js +8 -0
  687. package/node_modules/@undefineds.co/extension-sdk/dist/react/auth-boundary.d.ts +27 -0
  688. package/node_modules/@undefineds.co/extension-sdk/dist/react/auth-boundary.js +49 -0
  689. package/node_modules/@undefineds.co/extension-sdk/dist/react/layout-context.d.ts +11 -0
  690. package/node_modules/@undefineds.co/extension-sdk/dist/react/layout-context.js +9 -0
  691. package/node_modules/@undefineds.co/extension-sdk/dist/react/workspace-layout.d.ts +38 -0
  692. package/node_modules/@undefineds.co/extension-sdk/dist/react/workspace-layout.js +132 -0
  693. package/node_modules/@undefineds.co/extension-sdk/dist/react.d.ts +12 -0
  694. package/node_modules/@undefineds.co/extension-sdk/dist/react.js +19 -0
  695. package/node_modules/@undefineds.co/extension-sdk/dist/testing.d.ts +7 -0
  696. package/node_modules/@undefineds.co/extension-sdk/dist/testing.js +27 -0
  697. package/node_modules/@undefineds.co/extension-sdk/dist/web.d.ts +225 -0
  698. package/node_modules/@undefineds.co/extension-sdk/dist/web.js +142 -0
  699. package/node_modules/@undefineds.co/extension-sdk/package.json +49 -0
  700. package/node_modules/@undefineds.co/extensions/README.md +101 -0
  701. package/node_modules/@undefineds.co/extensions/dist/adapters/langchain.d.ts +25 -0
  702. package/node_modules/@undefineds.co/extensions/dist/adapters/langchain.d.ts.map +1 -0
  703. package/node_modules/@undefineds.co/extensions/dist/adapters/langchain.js +45 -0
  704. package/node_modules/@undefineds.co/extensions/dist/adapters/langchain.js.map +1 -0
  705. package/node_modules/@undefineds.co/extensions/dist/adapters/llamaindex.d.ts +31 -0
  706. package/node_modules/@undefineds.co/extensions/dist/adapters/llamaindex.d.ts.map +1 -0
  707. package/node_modules/@undefineds.co/extensions/dist/adapters/llamaindex.js +50 -0
  708. package/node_modules/@undefineds.co/extensions/dist/adapters/llamaindex.js.map +1 -0
  709. package/node_modules/@undefineds.co/extensions/dist/index.d.ts +7 -0
  710. package/node_modules/@undefineds.co/extensions/dist/index.d.ts.map +1 -0
  711. package/node_modules/@undefineds.co/extensions/dist/index.js +7 -0
  712. package/node_modules/@undefineds.co/extensions/dist/index.js.map +1 -0
  713. package/node_modules/@undefineds.co/extensions/dist/paddleocr.d.ts +16 -0
  714. package/node_modules/@undefineds.co/extensions/dist/paddleocr.d.ts.map +1 -0
  715. package/node_modules/@undefineds.co/extensions/dist/paddleocr.js +267 -0
  716. package/node_modules/@undefineds.co/extensions/dist/paddleocr.js.map +1 -0
  717. package/node_modules/@undefineds.co/extensions/dist/reader.d.ts +18 -0
  718. package/node_modules/@undefineds.co/extensions/dist/reader.d.ts.map +1 -0
  719. package/node_modules/@undefineds.co/extensions/dist/reader.js +39 -0
  720. package/node_modules/@undefineds.co/extensions/dist/reader.js.map +1 -0
  721. package/node_modules/@undefineds.co/extensions/dist/registry.d.ts +16 -0
  722. package/node_modules/@undefineds.co/extensions/dist/registry.d.ts.map +1 -0
  723. package/node_modules/@undefineds.co/extensions/dist/registry.js +97 -0
  724. package/node_modules/@undefineds.co/extensions/dist/registry.js.map +1 -0
  725. package/node_modules/@undefineds.co/extensions/dist/types.d.ts +141 -0
  726. package/node_modules/@undefineds.co/extensions/dist/types.d.ts.map +1 -0
  727. package/node_modules/@undefineds.co/extensions/dist/types.js +2 -0
  728. package/node_modules/@undefineds.co/extensions/dist/types.js.map +1 -0
  729. package/node_modules/@undefineds.co/extensions/package.json +38 -0
  730. package/node_modules/@undefineds.co/shared-ui/dist/badge.d.ts +8 -0
  731. package/node_modules/@undefineds.co/shared-ui/dist/badge.js +17 -0
  732. package/node_modules/@undefineds.co/shared-ui/dist/button.d.ts +10 -0
  733. package/node_modules/@undefineds.co/shared-ui/dist/button.js +30 -0
  734. package/node_modules/@undefineds.co/shared-ui/dist/card.d.ts +7 -0
  735. package/node_modules/@undefineds.co/shared-ui/dist/card.js +15 -0
  736. package/node_modules/@undefineds.co/shared-ui/dist/index.d.ts +6 -0
  737. package/node_modules/@undefineds.co/shared-ui/dist/index.js +6 -0
  738. package/node_modules/@undefineds.co/shared-ui/dist/input.d.ts +4 -0
  739. package/node_modules/@undefineds.co/shared-ui/dist/input.js +5 -0
  740. package/node_modules/@undefineds.co/shared-ui/dist/theme.css +121 -0
  741. package/node_modules/@undefineds.co/shared-ui/dist/utils.d.ts +2 -0
  742. package/node_modules/@undefineds.co/shared-ui/dist/utils.js +5 -0
  743. package/node_modules/@undefineds.co/shared-ui/dist/workspace.d.ts +23 -0
  744. package/node_modules/@undefineds.co/shared-ui/dist/workspace.js +38 -0
  745. package/node_modules/@undefineds.co/shared-ui/package.json +39 -0
  746. package/node_modules/@undefineds.co/solid-sdk/dist/index.d.ts +3 -0
  747. package/node_modules/@undefineds.co/solid-sdk/dist/index.js +3 -0
  748. package/node_modules/@undefineds.co/solid-sdk/dist/pod-runtime.d.ts +45 -0
  749. package/node_modules/@undefineds.co/solid-sdk/dist/pod-runtime.js +147 -0
  750. package/node_modules/@undefineds.co/solid-sdk/dist/react.d.ts +15 -0
  751. package/node_modules/@undefineds.co/solid-sdk/dist/react.js +15 -0
  752. package/node_modules/@undefineds.co/solid-sdk/dist/session.d.ts +42 -0
  753. package/node_modules/@undefineds.co/solid-sdk/dist/session.js +127 -0
  754. package/node_modules/@undefineds.co/solid-sdk/package.json +45 -0
  755. package/package.json +31 -13
  756. package/static/app/assets/index-BoYHJ6si.js +230 -0
  757. package/static/app/assets/inrupt-smoke.js +2 -2
  758. package/static/app/assets/main.css +1 -1
  759. package/static/app/assets/main.js +9 -9
  760. package/static/dashboard/assets/NetworkPage-Brt79fuQ.js +2 -0
  761. package/static/dashboard/assets/PaneListHeader-57nvMwH6.js +1 -0
  762. package/static/dashboard/assets/PodPage-CM6do1vB.js +2 -0
  763. package/static/dashboard/assets/ServicesPage-BUNxGJRz.js +1 -0
  764. package/static/dashboard/assets/card-B9Zjf_2p.js +1 -0
  765. package/static/dashboard/assets/dashboard-8C6o666W.js +305 -0
  766. package/static/dashboard/assets/dashboard-CSdewNeA.css +1 -0
  767. package/static/dashboard/assets/database-DPh9wDY9.js +1 -0
  768. package/static/dashboard/assets/external-link-VbMQvVMz.js +1 -0
  769. package/static/dashboard/assets/index-RfiFckzb.js +51 -0
  770. package/static/dashboard/assets/refresh-cw-BxVxNxNr.js +1 -0
  771. package/static/dashboard/assets/services-status-context-DKmJ7ISr.js +1 -0
  772. package/static/dashboard/dashboard.html +2 -2
  773. package/static/settings/assets/ModelsPage-D_IH7AH3.js +1 -0
  774. package/static/settings/assets/PaneListHeader-Bgaze006.js +1 -0
  775. package/static/settings/assets/PodPage-Cy1VNObw.js +2 -0
  776. package/static/settings/assets/ServicesPage-BsFaxVWC.js +1 -0
  777. package/static/settings/assets/SettingsPage-UafNWE_p.js +48 -0
  778. package/static/settings/assets/card-B_bXSIn-.js +1 -0
  779. package/static/settings/assets/services-status-context-DiX-AbrP.js +1 -0
  780. package/static/settings/assets/settings-B30oMfZq.js +305 -0
  781. package/static/settings/assets/settings-CSdewNeA.css +1 -0
  782. package/static/settings/assets/workspace-layout-Dv1Yn9Ci.js +1 -0
  783. package/static/settings/auth.html +21 -0
  784. package/static/settings/reachability.html +221 -0
  785. package/static/settings/reachability.svg +7 -0
  786. package/static/settings/reachability.webmanifest +18 -0
  787. package/static/settings/settings.html +13 -0
  788. package/static/settings/signal-pod.html +293 -0
  789. package/static/settings/vite.svg +1 -0
  790. package/dist/api/service/ai-gateway-transport.d.ts +0 -25
  791. package/dist/api/service/ai-gateway-transport.js +0 -136
  792. package/dist/api/service/ai-gateway-transport.js.map +0 -1
  793. package/dist/api/service/chat-protocol-adapters.d.ts +0 -5
  794. package/dist/api/service/chat-protocol-adapters.js +0 -146
  795. package/dist/api/service/chat-protocol-adapters.js.map +0 -1
  796. package/dist/api/service/chat-routing.d.ts +0 -8
  797. package/dist/api/service/chat-routing.js +0 -16
  798. package/dist/api/service/chat-routing.js.map +0 -1
  799. package/dist/api/service/platform-ai-config.d.ts +0 -10
  800. package/dist/api/service/platform-ai-config.js +0 -76
  801. package/dist/api/service/platform-ai-config.js.map +0 -1
  802. package/dist/document/DocumentParser.js.map +0 -1
  803. package/dist/document/JinaDocumentParser.js.map +0 -1
  804. package/static/app/assets/index-C1yksyT4.js +0 -171
  805. package/static/dashboard/assets/dashboard-BssaVKTn.css +0 -1
  806. package/static/dashboard/assets/dashboard-Ckuadl3C.js +0 -54
@@ -1 +1 @@
1
- {"version":3,"file":"RdfQuadIndex.js","sourceRoot":"","sources":["../../../src/storage/rdf/RdfQuadIndex.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, mkdirSync } from 'node:fs';\nimport { dirname } from 'node:path';\nimport { DataFactory } from 'n3';\nimport type { Quad, Term } from '@rdfjs/types';\nimport { createSqliteRuntime, type SqliteDatabase } from '../SqliteRuntime';\nimport type { QueryOptions, QuintPattern, TermOperators } from '../quint/types';\nimport { isTerm } from '../quint/types';\nimport { RdfTermDictionary, rdfTermValueHead } from './RdfTermDictionary';\nimport { dropRdf3xDerivedSchemaObjects } from './Rdf3xSchema';\nimport type {\n RdfCardinalityEstimate,\n RdfCardinalityDistributions,\n RdfCardinalityTerm,\n RdfIndexStats,\n RdfLiteralDatatypeDistribution,\n RdfIndexMetrics,\n RdfIndexPutOptions,\n RdfIndexSpaceObject,\n RdfQuadJoinAggregateOptions,\n RdfQuadJoinCountOptions,\n RdfQuadJoinGroupAggregateHaving,\n RdfQuadJoinGroupAggregateOptions,\n RdfQuadJoinOptions,\n RdfQuadJoinPattern,\n RdfQuadJoinScanResult,\n RdfQueryFilterOperator,\n RdfQuadTupleConstraintSource,\n RdfQuadIndexOptions,\n RdfQuadIndexScanResult,\n RdfQuadScanOptions,\n RdfQuadRow,\n RdfQueryAggregate,\n RdfSourceInput,\n RdfSourceRow,\n RdfTermKind,\n} from './types';\nimport { isRdfNumericDatatype, rdfNumericValue } from './RdfTermSemantics';\n\nconst XSD_INTEGER = 'http://www.w3.org/2001/XMLSchema#integer';\nconst XSD_DECIMAL = 'http://www.w3.org/2001/XMLSchema#decimal';\nconst XSD_STRING = 'http://www.w3.org/2001/XMLSchema#string';\nconst RDF_QUAD_INDEX_SCHEMA_VERSION = 1;\n\ntype IndexedColumn = 'graph_id' | 'subject_id' | 'predicate_id' | 'object_id';\ntype PatternKey = 'graph' | 'subject' | 'predicate' | 'object';\n\ninterface RdfWhereClause {\n joins: string;\n whereClause: string;\n params: unknown[];\n indexHint: string;\n queryPlan: string[];\n unresolved?: PatternKey;\n}\n\ninterface RdfCondition {\n joins: string[];\n sql?: string;\n params: unknown[];\n equality?: boolean;\n queryPlan: string[];\n unresolved?: boolean;\n}\n\ninterface RdfConditionScope {\n quadAlias?: string;\n aliasPrefix?: string;\n}\n\nconst TERM_COLUMN: Record<PatternKey, IndexedColumn> = {\n graph: 'graph_id',\n subject: 'subject_id',\n predicate: 'predicate_id',\n object: 'object_id',\n};\n\nconst TERM_KEYS: PatternKey[] = ['graph', 'subject', 'predicate', 'object'];\nconst TERM_IN_JOIN_THRESHOLD = 64;\nexport class RdfQuadIndex {\n private readonly sqliteRuntime = createSqliteRuntime();\n private db: SqliteDatabase | null = null;\n private dictionary: RdfTermDictionary | null = null;\n private readonly cardinalityCache = new Map<string, RdfCardinalityEstimate>();\n\n public constructor(private readonly options: RdfQuadIndexOptions) {}\n\n public open(): void {\n if (this.db) {\n return;\n }\n\n if (this.options.path !== ':memory:') {\n const dir = dirname(this.options.path);\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n }\n\n this.db = this.sqliteRuntime.openDatabase(this.options.path);\n this.prepareSchemaVersion();\n this.dictionary = new RdfTermDictionary(this.db);\n this.dictionary.initialize();\n this.initializeSchema();\n }\n\n public close(): void {\n this.db?.close();\n this.db = null;\n this.dictionary = null;\n }\n\n public clear(): void {\n const db = this.requireDb();\n db.exec('DELETE FROM rdf_quads; DELETE FROM rdf_sources; DELETE FROM rdf_terms;');\n this.cardinalityCache.clear();\n this.bumpDataVersion();\n }\n\n public put(quad: Quad, options?: RdfIndexPutOptions): void {\n this.multiPut([quad], options);\n }\n\n public replaceSource(quads: Quad[], source: RdfSourceInput): void {\n const db = this.requireDb();\n db.transaction(() => {\n this.deleteSourceInternal(source.source);\n if (quads.length > 0) {\n this.insertQuads(quads, { source });\n } else {\n this.upsertSource(source);\n }\n })();\n this.cardinalityCache.clear();\n this.bumpDataVersion();\n }\n\n public deleteSource(source: string): number {\n const result = this.deleteSourceInternal(source);\n if (result > 0) {\n this.cardinalityCache.clear();\n this.bumpDataVersion();\n }\n return result;\n }\n\n private deleteSourceInternal(source: string): number {\n const db = this.requireDb();\n const row = db\n .prepare<{ id: number }>('SELECT id FROM rdf_sources WHERE source = ?')\n .get(source);\n if (!row) {\n return 0;\n }\n\n const result = db.prepare('DELETE FROM rdf_quads WHERE source_file_id = ?').run(row.id);\n db.prepare('DELETE FROM rdf_sources WHERE id = ?').run(row.id);\n return result.changes;\n }\n\n public multiPut(quads: Quad[], options?: RdfIndexPutOptions): void {\n if (quads.length === 0) {\n return;\n }\n\n const db = this.requireDb();\n db.transaction(() => {\n this.insertQuads(quads, options);\n })();\n this.cardinalityCache.clear();\n this.bumpDataVersion();\n }\n\n private insertQuads(quads: Quad[], options?: RdfIndexPutOptions): void {\n const db = this.requireDb();\n const dictionary = this.requireDictionary();\n const sourceId = options?.source ? this.upsertSource(options.source) : null;\n const insert = db.prepare(`\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 (?, ?, ?, ?, ?, ?)\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\n for (const quad of quads) {\n insert.run(\n dictionary.getOrCreate(quad.graph),\n dictionary.getOrCreate(quad.subject),\n dictionary.getOrCreate(quad.predicate),\n dictionary.getOrCreate(quad.object),\n sourceId,\n options?.sourceLineNo ?? null,\n );\n }\n }\n\n public delete(pattern: QuintPattern): number {\n const changes = this.deleteInternal(pattern);\n if (changes > 0) {\n this.cardinalityCache.clear();\n this.bumpDataVersion();\n }\n return changes;\n }\n\n public applyDelta(deletes: QuintPattern[], inserts: Quad[], options?: RdfIndexPutOptions): { deletedRows: number; insertedRows: number } {\n if (deletes.length === 0 && inserts.length === 0) {\n return { deletedRows: 0, insertedRows: 0 };\n }\n\n const db = this.requireDb();\n let deletedRows = 0;\n db.transaction(() => {\n for (const pattern of deletes) {\n deletedRows += this.deleteInternal(pattern);\n }\n if (inserts.length > 0) {\n this.insertQuads(inserts, options);\n }\n })();\n if (deletedRows > 0 || inserts.length > 0) {\n this.cardinalityCache.clear();\n this.bumpDataVersion();\n }\n return {\n deletedRows,\n insertedRows: inserts.length,\n };\n }\n\n private deleteInternal(pattern: QuintPattern): number {\n const db = this.requireDb();\n const { joins, whereClause, params } = this.buildWhereClause(pattern, false);\n if (!whereClause) {\n const result = db.prepare('DELETE FROM rdf_quads').run();\n return result.changes;\n }\n const sql = joins\n ? `DELETE FROM rdf_quads WHERE rowid IN (SELECT rdf_quads.rowid FROM rdf_quads${joins}${whereClause})`\n : `DELETE FROM rdf_quads${whereClause}`;\n return db.prepare(sql).run(...params).changes;\n }\n\n public dataVersion(): number {\n const row = this.requireDb()\n .prepare<{ value: string }>(\"SELECT value FROM rdf_index_metadata WHERE key = 'data_version'\")\n .get();\n return Number(row?.value ?? 0) || 0;\n }\n\n public scan(pattern: QuintPattern, options?: RdfQuadScanOptions): RdfQuadIndexScanResult {\n return this.scanInternal(pattern, options);\n }\n\n public scanWithTupleConstraints(\n pattern: QuintPattern,\n tupleSource: RdfQuadTupleConstraintSource,\n options?: RdfQuadScanOptions,\n ): RdfQuadIndexScanResult {\n return this.scanInternal(pattern, options, tupleSource);\n }\n\n public joinPatterns(patterns: RdfQuadJoinPattern[], options?: RdfQuadJoinOptions): RdfQuadJoinScanResult {\n const start = Date.now();\n if (patterns.length === 0) {\n return {\n bindings: [],\n metrics: this.metrics('none', 0, 0, start, ['JoinBGP(empty)']),\n };\n }\n\n const compiled = this.compileJoinPatterns(patterns, options);\n if (compiled.unresolved) {\n return {\n bindings: [],\n metrics: this.metrics('none', 0, 0, start, [...compiled.queryPlan, `unresolved ${compiled.unresolved}`]),\n };\n }\n\n const rows = this.requireDb().prepare<Record<string, number>>(compiled.sql).all(...compiled.params);\n const matchedRows = compiled.countSql\n ? this.requireDb().prepare<{ count: number }>(compiled.countSql).get(...compiled.countParams)?.count ?? 0\n : rows.length;\n return {\n bindings: this.joinRowsToBindings(rows, compiled.variableAliases),\n metrics: this.metrics(\n compiled.indexChoice,\n matchedRows,\n rows.length,\n start,\n [...compiled.queryPlan, compiled.sql],\n ),\n };\n }\n\n public countJoinPatterns(\n patterns: RdfQuadJoinPattern[],\n options: RdfQuadJoinCountOptions,\n ): RdfQuadJoinScanResult {\n return this.aggregateJoinPatternsInternal(patterns, options, 'JoinCount');\n }\n\n public aggregateJoinPatterns(\n patterns: RdfQuadJoinPattern[],\n options: RdfQuadJoinAggregateOptions,\n ): RdfQuadJoinScanResult {\n return this.aggregateJoinPatternsInternal(patterns, options, 'JoinAggregate');\n }\n\n private aggregateJoinPatternsInternal(\n patterns: RdfQuadJoinPattern[],\n options: RdfQuadJoinAggregateOptions,\n label: 'JoinCount' | 'JoinAggregate',\n ): RdfQuadJoinScanResult {\n const start = Date.now();\n if (patterns.length === 0) {\n return {\n bindings: [],\n metrics: this.metrics('none', 0, 0, start, [`${label}(empty)`]),\n };\n }\n\n const compiled = this.compileJoinPatterns(patterns);\n if (compiled.unresolved) {\n return {\n bindings: [],\n metrics: this.metrics('none', 0, 0, start, [...compiled.queryPlan, `unresolved ${compiled.unresolved}`]),\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 projection = options.aggregates.map((aggregate, index) => {\n const alias = `a${index}`;\n aggregateAliases.set(aggregate.as, alias);\n return this.buildJoinAggregateColumn(\n aggregate,\n alias,\n compiled.variableColumns,\n aggregateTypes,\n numericJoins,\n numericJoinSql,\n 'RDF BGP',\n );\n }).join(', ');\n const aggregateJoins = numericJoinSql.join('');\n const sql = `SELECT ${projection} FROM ${compiled.from}${compiled.joins}${aggregateJoins}${compiled.whereClause}`;\n const rows = this.requireDb().prepare<Record<string, number>>(sql).all(...compiled.params);\n const matchedRows = this.requireDb()\n .prepare<{ count: number }>(`SELECT COUNT(*) AS count FROM ${compiled.from}${compiled.joins}${aggregateJoins}${compiled.whereClause}`)\n .get(...compiled.params)?.count ?? 0;\n return {\n bindings: this.joinRowsToBindings(rows, compiled.variableAliases, aggregateAliases, aggregateTypes),\n metrics: this.metrics(\n compiled.indexChoice,\n matchedRows,\n rows.length,\n start,\n [\n ...compiled.queryPlan,\n ...(numericJoinSql.length > 0 ? [`JoinAggregateNumeric(${[...numericJoins.keys()].map((variableName) => `?${variableName}`).join(',')})`] : []),\n `${label}(${options.aggregates.map((aggregate) => (\n `${aggregate.type}${aggregate.distinct ? ':DISTINCT' : ''}(${aggregate.variable ? `?${aggregate.variable}` : '*'})`\n )).join(',')})`,\n sql,\n ],\n ),\n };\n }\n\n public groupCountJoinPatterns(\n patterns: RdfQuadJoinPattern[],\n options: RdfQuadJoinGroupAggregateOptions,\n ): RdfQuadJoinScanResult {\n return this.groupAggregateJoinPatternsInternal(patterns, options, 'JoinGroupCount');\n }\n\n public groupAggregateJoinPatterns(\n patterns: RdfQuadJoinPattern[],\n options: RdfQuadJoinGroupAggregateOptions,\n ): RdfQuadJoinScanResult {\n return this.groupAggregateJoinPatternsInternal(patterns, options, 'JoinGroupAggregate');\n }\n\n private groupAggregateJoinPatternsInternal(\n patterns: RdfQuadJoinPattern[],\n options: RdfQuadJoinGroupAggregateOptions,\n label: 'JoinGroupCount' | 'JoinGroupAggregate',\n ): RdfQuadJoinScanResult {\n const start = Date.now();\n if (patterns.length === 0) {\n return {\n bindings: [],\n metrics: this.metrics('none', 0, 0, start, [`${label}(empty)`]),\n };\n }\n\n const compiled = this.compileJoinPatterns(patterns);\n if (compiled.unresolved) {\n return {\n bindings: [],\n metrics: this.metrics('none', 0, 0, start, [...compiled.queryPlan, `unresolved ${compiled.unresolved}`]),\n };\n }\n\n const aggregateAliases = new Map<string, string>();\n const aggregateSqlAliases = 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 groupColumns = options.groupBy.map((variableName) => {\n const column = compiled.variableColumns.get(variableName);\n if (!column) {\n throw new Error(`RDF BGP group aggregate cannot group by unbound variable: ${variableName}`);\n }\n return column;\n });\n const aggregateColumns = options.aggregates.map((aggregate, index) => {\n const alias = `a${index}`;\n aggregateAliases.set(aggregate.as, alias);\n aggregateSqlAliases.set(aggregate.as, alias);\n return this.buildJoinAggregateColumn(\n aggregate,\n alias,\n compiled.variableColumns,\n aggregateTypes,\n numericJoins,\n numericJoinSql,\n 'RDF BGP group aggregate',\n );\n });\n const projection = [\n ...options.groupBy.map((variableName) => {\n const alias = compiled.variableAliases.get(variableName);\n const column = compiled.variableColumns.get(variableName);\n if (!alias || !column) {\n throw new Error(`RDF BGP group aggregate cannot project unbound group variable: ${variableName}`);\n }\n return `${column} AS ${alias}`;\n }),\n ...aggregateColumns,\n ].join(', ');\n const groupBy = groupColumns.join(', ');\n const aggregateJoins = numericJoinSql.join('');\n const havingClause = this.buildGroupAggregateHavingClause(options.having, aggregateSqlAliases);\n const orderScope = this.buildGroupAggregateOrderScope(options, compiled.variableColumns, aggregateSqlAliases);\n const fromSql = `${compiled.from}${compiled.joins}${aggregateJoins}${compiled.whereClause}`;\n const sourceFromSql = `${compiled.from}${compiled.joins}${aggregateJoins}${orderScope.joins}${compiled.whereClause}`;\n const sourceSql = `SELECT ${projection} FROM ${sourceFromSql} GROUP BY ${groupBy}${havingClause.sql}`;\n const orderClause = orderScope.orderBy;\n let sql = `${sourceSql}${orderClause}`;\n const params = [...compiled.params, ...havingClause.params];\n const paginated = options.limit !== undefined || options.offset !== undefined;\n if (options.limit !== undefined) {\n sql += ' LIMIT ?';\n params.push(options.limit);\n }\n if (options.offset !== undefined) {\n if (options.limit === undefined) {\n sql += ' LIMIT -1';\n }\n sql += ' OFFSET ?';\n params.push(options.offset);\n }\n const rows = this.requireDb().prepare<Record<string, number>>(sql).all(...params);\n const matchedRows = this.requireDb()\n .prepare<{ count: number }>(`SELECT COUNT(*) AS count FROM ${fromSql}`)\n .get(...compiled.params)?.count ?? 0;\n return {\n bindings: this.joinRowsToBindings(rows, compiled.variableAliases, aggregateAliases, aggregateTypes),\n metrics: this.metrics(\n compiled.indexChoice,\n matchedRows,\n rows.length,\n start,\n [\n ...compiled.queryPlan,\n ...(numericJoinSql.length > 0 ? [`JoinGroupAggregateNumeric(${[...numericJoins.keys()].map((variableName) => `?${variableName}`).join(',')})`] : []),\n `${label}(${options.groupBy.map((variableName) => `?${variableName}`).join(',')})`,\n ...(havingClause.sql ? [`${label}Having(${(options.having ?? []).map((entry) => `${entry.aggregate}${entry.operator}`).join(',')})`] : []),\n ...(orderClause ? [`${label}Order(${(options.orderBy ?? []).map((entry) => `${entry.direction ?? 'asc'}:${entry.variable}`).join(',')})`] : []),\n ...(paginated ? [`${label}Limit`] : []),\n sql,\n ],\n ),\n };\n }\n\n private scanInternal(\n pattern: QuintPattern,\n options?: RdfQuadScanOptions,\n tupleSource?: RdfQuadTupleConstraintSource,\n ): RdfQuadIndexScanResult {\n const start = Date.now();\n const { joins, whereClause, params, indexHint, queryPlan, unresolved } = this.buildWhereClause(pattern, true);\n if (unresolved) {\n return {\n quads: [],\n metrics: this.metrics(indexHint, 0, 0, start, [...queryPlan, `unresolved ${unresolved}`]),\n };\n }\n\n const orderClause = this.buildOrderClause(options);\n const tupleJoin = tupleSource ? this.buildTupleConstraintJoin(tupleSource) : undefined;\n let sql = `SELECT rdf_quads.graph_id, rdf_quads.subject_id, rdf_quads.predicate_id, rdf_quads.object_id, rdf_quads.source_file_id, rdf_quads.source_line_no FROM rdf_quads${joins}${tupleJoin?.join ?? ''}${orderClause.joins}`;\n if (whereClause) {\n sql += whereClause;\n }\n\n if (orderClause.orderBy) {\n sql += orderClause.orderBy;\n }\n\n if (options?.limit !== undefined) {\n sql += ' LIMIT ?';\n params.push(options.limit);\n }\n if (options?.offset !== undefined) {\n if (options.limit === undefined) {\n sql += ' LIMIT -1';\n }\n sql += ' OFFSET ?';\n params.push(options.offset);\n }\n\n const countSql = `SELECT COUNT(*) AS count FROM rdf_quads${joins}${tupleJoin?.join ?? ''}${orderClause.joins}${whereClause}`;\n const countParams = [...params.slice(0, params.length - this.paginationParamCount(options))];\n const countRow = this.requireDb().prepare<{ count: number }>(countSql).get(...countParams);\n const matchedRows = countRow?.count ?? 0;\n const rows = this.requireDb().prepare<RdfQuadRow>(sql).all(...params);\n return {\n quads: this.rowsToQuads(rows),\n metrics: this.metrics(indexHint, matchedRows, rows.length, start, [\n ...queryPlan,\n ...(tupleJoin ? [`TupleValuesJoin(${tupleSource?.columns.join(',')})`] : []),\n sql,\n ]),\n };\n }\n\n private compileJoinPatterns(patterns: RdfQuadJoinPattern[], options?: RdfQuadJoinOptions): {\n from: string;\n joins: string;\n whereClause: string;\n sql: string;\n params: unknown[];\n countSql?: string;\n countParams: unknown[];\n indexChoice: string;\n queryPlan: string[];\n variableColumns: Map<string, string>;\n variableAliases: Map<string, string>;\n unresolved?: PatternKey;\n } {\n const from = 'rdf_quads q0';\n const joins: string[] = [];\n const conditions: string[] = [];\n const params: unknown[] = [];\n const queryPlan: string[] = [`JoinBGP(${patterns.length})`];\n const variableColumns = new Map<string, string>();\n const variableAliases = new Map<string, string>();\n const indexChoices: string[] = [];\n\n for (const [patternIndex, entry] of patterns.entries()) {\n const alias = `q${patternIndex}`;\n if (patternIndex > 0) {\n joins.push(` JOIN rdf_quads ${alias} ON 1 = 1`);\n }\n const equalityColumns = new Set<IndexedColumn>();\n\n for (const key of TERM_KEYS) {\n const match = entry.pattern[key];\n const column = `${alias}.${TERM_COLUMN[key]}`;\n const variableName = entry.variables[key];\n if (variableName) {\n const existingColumn = variableColumns.get(variableName);\n if (existingColumn) {\n conditions.push(`${existingColumn} = ${column}`);\n } else {\n variableColumns.set(variableName, column);\n }\n }\n if (!match) {\n continue;\n }\n const condition = this.matchToJoinCondition(key, alias, TERM_COLUMN[key], match, true);\n if (condition.unresolved) {\n return {\n from,\n joins: joins.join(''),\n whereClause: '',\n sql: '',\n params: [],\n countParams: [],\n indexChoice: 'none',\n queryPlan,\n variableColumns,\n variableAliases,\n unresolved: key,\n };\n }\n joins.push(...condition.joins);\n if (condition.sql) {\n conditions.push(condition.sql);\n params.push(...condition.params);\n }\n queryPlan.push(...condition.queryPlan);\n if (condition.equality) {\n equalityColumns.add(TERM_COLUMN[key]);\n }\n }\n indexChoices.push(this.chooseIndex(equalityColumns));\n }\n\n const projectVariables = options?.project ?? [...variableColumns.keys()];\n const projectionColumns = projectVariables.map((variableName) => {\n const column = variableColumns.get(variableName);\n if (!column) {\n throw new Error(`RDF BGP join cannot project unbound variable: ${variableName}`);\n }\n const columnAlias = `v${variableAliases.size}`;\n variableAliases.set(variableName, columnAlias);\n return `${column} AS ${columnAlias}`;\n });\n const projection = projectionColumns.length > 0\n ? `${options?.distinct ? 'DISTINCT ' : ''}${projectionColumns.join(', ')}`\n : `${options?.distinct ? 'DISTINCT ' : ''}1 AS __empty`;\n const orderClause = this.buildJoinOrderClause(options, variableColumns);\n const whereClause = conditions.length > 0 ? ` WHERE ${conditions.join(' AND ')}` : '';\n let sql = `SELECT ${projection} FROM ${from}${joins.join('')}${orderClause.joins}${whereClause}${orderClause.orderBy}`;\n const sqlParams = [...params];\n const paginated = options?.limit !== undefined || options?.offset !== undefined;\n const countMatchedRows = options?.countMatchedRows ?? true;\n if (options?.limit !== undefined) {\n sql += ' LIMIT ?';\n sqlParams.push(options.limit);\n }\n if (options?.offset !== undefined) {\n if (options.limit === undefined) {\n sql += ' LIMIT -1';\n }\n sql += ' OFFSET ?';\n sqlParams.push(options.offset);\n }\n if (orderClause.orderBy) {\n queryPlan.push(`JoinOrder(${(options?.orderBy ?? []).map((entry) => `${entry.direction ?? 'asc'}:${entry.variable}`).join(',')})`);\n }\n if (options?.distinct) {\n queryPlan.push(`JoinDistinct(${projectVariables.map((variableName) => `?${variableName}`).join(',')})`);\n }\n if (paginated) {\n queryPlan.push('JoinLimit');\n }\n return {\n from,\n joins: joins.join(''),\n whereClause,\n sql,\n params: sqlParams,\n countSql: paginated && countMatchedRows ? `SELECT COUNT(*) AS count FROM ${from}${joins.join('')}${whereClause}` : undefined,\n countParams: params,\n indexChoice: `JoinBGP(${indexChoices.join('>')})`,\n queryPlan,\n variableColumns,\n variableAliases,\n };\n }\n\n private buildJoinOrderClause(\n options: RdfQuadJoinOptions | undefined,\n variableColumns: Map<string, string>,\n ): { joins: string; orderBy: string } {\n if (!options?.orderBy || options.orderBy.length === 0) {\n return { joins: '', orderBy: '' };\n }\n\n const joins = options.orderBy.map((entry, index) => {\n const column = variableColumns.get(entry.variable);\n if (!column) {\n throw new Error(`RDF BGP join cannot order by unbound variable: ${entry.variable}`);\n }\n const alias = `join_order_t${index}`;\n return {\n join: ` JOIN rdf_terms ${alias} ON ${alias}.id = ${column}`,\n order: `${alias}.value${entry.direction === 'desc' ? ' DESC' : ''}`,\n };\n });\n return {\n joins: joins.map((entry) => entry.join).join(''),\n orderBy: ` ORDER BY ${joins.map((entry) => entry.order).join(', ')}`,\n };\n }\n\n private buildJoinAggregateColumn(\n aggregate: RdfQueryAggregate,\n alias: string,\n variableColumns: Map<string, string>,\n aggregateTypes: Map<string, 'integer' | 'decimal'>,\n numericJoins: Map<string, string>,\n numericJoinSql: string[],\n errorPrefix: string,\n ): string {\n if (aggregate.type === 'count' && !aggregate.variable) {\n aggregateTypes.set(aggregate.as, 'integer');\n return `${aggregate.distinct ? `COUNT(DISTINCT ${joinSolutionMappingKeyExpression(variableColumns, aggregate.distinctVariables, errorPrefix)})` : 'COUNT(*)'} AS ${alias}`;\n }\n if (!aggregate.variable) {\n throw new Error(`${errorPrefix} ${aggregate.type} aggregate requires a bound variable`);\n }\n const column = variableColumns.get(aggregate.variable);\n if (!column) {\n throw new Error(`${errorPrefix} aggregate cannot read unbound variable: ${aggregate.variable}`);\n }\n if (aggregate.type === 'count') {\n aggregateTypes.set(aggregate.as, 'integer');\n return `COUNT(${aggregate.distinct ? 'DISTINCT ' : ''}${column}) AS ${alias}`;\n }\n if (aggregate.distinct) {\n throw new Error(`${errorPrefix} ${aggregate.type} DISTINCT aggregate is not supported in SQL 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 = ${column} AND ${termAlias}.kind = 'literal' AND ${termAlias}.numeric_value IS NOT NULL`);\n }\n switch (aggregate.type) {\n case 'sum':\n return `COALESCE(SUM(${termAlias}.numeric_value), 0) AS ${alias}`;\n case 'avg':\n return `AVG(${termAlias}.numeric_value) AS ${alias}`;\n case 'min':\n return `MIN(${termAlias}.numeric_value) AS ${alias}`;\n case 'max':\n return `MAX(${termAlias}.numeric_value) AS ${alias}`;\n default: {\n const exhaustive: never = aggregate.type;\n throw new Error(`Unsupported RDF BGP aggregate type: ${exhaustive}`);\n }\n }\n }\n\n private buildGroupCountHavingClause(\n having: RdfQuadJoinGroupAggregateHaving[] | undefined,\n aggregateAliases: Map<string, string>,\n ): { sql: string; params: number[] } {\n return this.buildGroupAggregateHavingClause(having, aggregateAliases);\n }\n\n private buildGroupAggregateHavingClause(\n having: RdfQuadJoinGroupAggregateHaving[] | undefined,\n aggregateAliases: Map<string, string>,\n ): { sql: string; params: number[] } {\n if (!having || having.length === 0) {\n return { sql: '', params: [] };\n }\n\n const conditions: string[] = [];\n const params: number[] = [];\n for (const entry of having) {\n const alias = aggregateAliases.get(entry.aggregate);\n if (!alias) {\n throw new Error(`RDF BGP group count cannot HAVING on unknown aggregate: ${entry.aggregate}`);\n }\n conditions.push(`${alias} ${this.havingSqlOperator(entry.operator)} ?`);\n params.push(entry.value);\n }\n return {\n sql: ` HAVING ${conditions.join(' AND ')}`,\n params,\n };\n }\n\n private havingSqlOperator(operator: RdfQuadJoinGroupAggregateHaving['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 const exhaustive: never = operator;\n throw new Error(`Unsupported RDF BGP group count HAVING operator: ${exhaustive}`);\n }\n }\n }\n\n private buildGroupCountOrderScope(\n options: RdfQuadJoinGroupAggregateOptions,\n variableColumns: Map<string, string>,\n aggregateAliases: Map<string, string>,\n ): { joins: string; orderBy: string } {\n return this.buildGroupAggregateOrderScope(options, variableColumns, aggregateAliases);\n }\n\n private buildGroupAggregateOrderScope(\n options: RdfQuadJoinGroupAggregateOptions,\n variableColumns: Map<string, string>,\n aggregateAliases: Map<string, string>,\n ): { joins: string; orderBy: string } {\n if (!options.orderBy || options.orderBy.length === 0) {\n return { joins: '', orderBy: '' };\n }\n\n const joins: string[] = [];\n const orders = options.orderBy.map((entry, index) => {\n const aggregateAlias = aggregateAliases.get(entry.variable);\n if (aggregateAlias) {\n return `${aggregateAlias}${entry.direction === 'desc' ? ' DESC' : ''}`;\n }\n const column = variableColumns.get(entry.variable);\n if (!column) {\n throw new Error(`RDF BGP group count cannot order by unbound variable: ${entry.variable}`);\n }\n const alias = `group_order_t${index}`;\n joins.push(` JOIN rdf_terms ${alias} ON ${alias}.id = ${column}`);\n return `${alias}.value${entry.direction === 'desc' ? ' DESC' : ''}`;\n });\n return {\n joins: joins.join(''),\n orderBy: ` ORDER BY ${orders.join(', ')}`,\n };\n }\n\n private matchToJoinCondition(\n key: PatternKey,\n alias: string,\n columnName: IndexedColumn,\n match: unknown,\n allowUnresolved: boolean,\n ): RdfCondition {\n return this.matchToCondition(key, columnName, match, allowUnresolved, {\n quadAlias: alias,\n aliasPrefix: alias,\n });\n }\n\n private joinRowsToBindings(\n rows: Array<Record<string, number>>,\n variableAliases: Map<string, string>,\n aggregateAliases?: Map<string, string>,\n aggregateTypes?: Map<string, 'integer' | 'decimal'>,\n ): RdfQuadJoinScanResult['bindings'] {\n const aliases = [...variableAliases.entries()];\n const termMap = this.requireDictionary().rowsForIds(rows.flatMap((row) => (\n aliases\n .map(([, alias]) => row[alias])\n .filter((id): id is number => typeof id === 'number')\n )));\n\n return rows.map((row) => {\n const binding: RdfQuadJoinScanResult['bindings'][number] = {};\n for (const [variableName, alias] of aliases) {\n const id = row[alias];\n if (typeof id !== 'number') {\n continue;\n }\n binding[variableName] = this.requiredTerm(termMap, id);\n }\n for (const [variableName, alias] of aggregateAliases ?? []) {\n const value = row[alias];\n if (typeof value === 'number') {\n const datatype = aggregateTypes?.get(variableName) === 'decimal' ? XSD_DECIMAL : XSD_INTEGER;\n binding[variableName] = DataFactory.literal(String(value), DataFactory.namedNode(datatype)) as Term;\n }\n }\n return binding;\n });\n }\n\n public count(pattern: QuintPattern): number {\n const { joins, whereClause, params, unresolved } = this.buildWhereClause(pattern, true);\n if (unresolved) {\n return 0;\n }\n const row = this.requireDb()\n .prepare<{ count: number }>(`SELECT COUNT(*) AS count FROM rdf_quads${joins}${whereClause}`)\n .get(...params);\n return row?.count ?? 0;\n }\n\n public estimateCardinality(pattern: QuintPattern): RdfCardinalityEstimate {\n const exact = this.exactTermPattern(pattern);\n if (!exact) {\n return {\n rows: this.count(pattern),\n source: 'exact-count',\n indexChoice: this.buildWhereClause(pattern, true).indexHint,\n };\n }\n\n const cacheKey = exact.cacheKey;\n const cached = this.cardinalityCache.get(cacheKey);\n if (cached) {\n return {\n ...cached,\n source: 'cached-exact-count',\n };\n }\n\n const estimate = this.countExactTermPattern(exact.ids, exact.indexChoice);\n this.cardinalityCache.set(cacheKey, estimate);\n return estimate;\n }\n\n public countDistinct(pattern: QuintPattern, distinctKey: PatternKey): RdfCardinalityEstimate {\n const exact = this.exactTermPattern(pattern);\n if (!exact) {\n const count = this.countDistinctPattern(pattern, distinctKey);\n return {\n rows: count,\n source: 'exact-distinct-count',\n indexChoice: this.buildWhereClause(pattern, true).indexHint,\n };\n }\n\n const cacheKey = `distinct:${distinctKey}|${exact.cacheKey}`;\n const cached = this.cardinalityCache.get(cacheKey);\n if (cached) {\n return {\n ...cached,\n source: 'cached-exact-distinct-count',\n };\n }\n\n const estimate = this.countExactDistinctTermPattern(exact.ids, exact.indexChoice, distinctKey);\n this.cardinalityCache.set(cacheKey, estimate);\n return estimate;\n }\n\n public countDistinctTuple(pattern: QuintPattern, distinctKeys: PatternKey[]): RdfCardinalityEstimate {\n const keys = uniquePatternKeys(distinctKeys);\n if (keys.length === 0) {\n return this.estimateCardinality(pattern);\n }\n if (keys.length === 1) {\n return this.countDistinct(pattern, keys[0]);\n }\n\n const exact = this.exactTermPattern(pattern);\n if (!exact) {\n const count = this.countDistinctTuplePattern(pattern, keys);\n return {\n rows: count,\n source: 'exact-distinct-tuple-count',\n indexChoice: this.buildWhereClause(pattern, true).indexHint,\n };\n }\n\n const cacheKey = `distinct-tuple:${keys.join(',')}|${exact.cacheKey}`;\n const cached = this.cardinalityCache.get(cacheKey);\n if (cached) {\n return {\n ...cached,\n source: 'cached-exact-distinct-tuple-count',\n };\n }\n\n const estimate = this.countExactDistinctTupleTermPattern(exact.ids, exact.indexChoice, keys);\n this.cardinalityCache.set(cacheKey, estimate);\n return estimate;\n }\n\n public stats(): RdfIndexStats {\n const db = this.requireDb();\n const spaceObjects = this.collectSpaceObjects();\n const databaseBytes = this.estimateDatabaseBytes();\n const accountedBytes = spaceObjects.reduce((sum, object) => sum + object.bytes, 0);\n return {\n termCount: this.requireDictionary().count(),\n quadCount: db.prepare<{ count: number }>('SELECT COUNT(*) AS count FROM rdf_quads').get()?.count ?? 0,\n sourceCount: db.prepare<{ count: number }>('SELECT COUNT(*) AS count FROM rdf_sources').get()?.count ?? 0,\n graphCount: db.prepare<{ count: number }>('SELECT COUNT(DISTINCT graph_id) AS count FROM rdf_quads').get()?.count ?? 0,\n databaseBytes: accountedBytes || databaseBytes,\n tableBytes: sumSpaceObjects(spaceObjects, 'table'),\n indexBytes: sumSpaceObjects(spaceObjects, 'index'),\n spaceObjects,\n serializedTermTextBytes: this.estimateSerializedTextBytes(),\n literalDatatypeDistribution: this.literalDatatypeDistribution(),\n cardinalityDistributions: this.cardinalityDistributions(),\n };\n }\n\n public cardinalityDistributions(limit = 100): RdfCardinalityDistributions {\n return {\n graphs: this.graphCardinalityDistribution(limit),\n predicates: this.predicateCardinalityDistribution(limit),\n predicateObjects: this.predicateObjectCardinalityDistribution(limit),\n subjectPredicates: this.subjectPredicateCardinalityDistribution(limit),\n };\n }\n\n public literalDatatypeDistribution(): RdfLiteralDatatypeDistribution[] {\n const rows = this.requireDb().prepare<{\n datatype: string | null;\n term_count: number;\n object_quad_count: number | null;\n }>(`\n SELECT\n COALESCE(datatype.value, 'http://www.w3.org/2001/XMLSchema#string') 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_quads quad ON quad.object_id = literal.id\n WHERE literal.kind = 'literal'\n GROUP BY datatype\n ORDER BY object_quad_count DESC, term_count DESC, datatype ASC\n `).all();\n return rows.map((row) => ({\n datatype: row.datatype ?? 'http://www.w3.org/2001/XMLSchema#string',\n termCount: row.term_count,\n objectQuadCount: row.object_quad_count ?? 0,\n }));\n }\n\n private graphCardinalityDistribution(limit: number): RdfCardinalityDistributions['graphs'] {\n const rows = this.requireDb().prepare<{\n graph_id: number;\n quad_count: number;\n distinct_subjects: number;\n distinct_predicates: number;\n distinct_objects: number;\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_quads\n GROUP BY graph_id\n ORDER BY quad_count DESC, graph_id ASC\n LIMIT ?\n `).all(limit);\n const termMap = this.requireDictionary().rowsForIds(rows.map((row) => row.graph_id));\n return rows.map((row) => ({\n graph: this.cardinalityTerm(termMap, row.graph_id),\n quadCount: row.quad_count,\n distinctSubjects: row.distinct_subjects,\n distinctPredicates: row.distinct_predicates,\n distinctObjects: row.distinct_objects,\n }));\n }\n\n private predicateCardinalityDistribution(limit: number): RdfCardinalityDistributions['predicates'] {\n const rows = this.requireDb().prepare<{\n predicate_id: number;\n quad_count: number;\n graph_count: number;\n distinct_subjects: number;\n distinct_objects: number;\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_quads\n GROUP BY predicate_id\n ORDER BY quad_count DESC, predicate_id ASC\n LIMIT ?\n `).all(limit);\n const termMap = this.requireDictionary().rowsForIds(rows.map((row) => row.predicate_id));\n return rows.map((row) => ({\n predicate: this.cardinalityTerm(termMap, row.predicate_id),\n quadCount: row.quad_count,\n graphCount: row.graph_count,\n distinctSubjects: row.distinct_subjects,\n distinctObjects: row.distinct_objects,\n }));\n }\n\n private predicateObjectCardinalityDistribution(limit: number): RdfCardinalityDistributions['predicateObjects'] {\n const rows = this.requireDb().prepare<{\n predicate_id: number;\n object_id: number;\n quad_count: number;\n graph_count: number;\n distinct_subjects: number;\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_quads\n GROUP BY predicate_id, object_id\n ORDER BY quad_count DESC, predicate_id ASC, object_id ASC\n LIMIT ?\n `).all(limit);\n const termMap = this.requireDictionary().rowsForIds(rows.flatMap((row) => [row.predicate_id, row.object_id]));\n return rows.map((row) => ({\n predicate: this.cardinalityTerm(termMap, row.predicate_id),\n object: this.cardinalityTerm(termMap, row.object_id),\n quadCount: row.quad_count,\n graphCount: row.graph_count,\n distinctSubjects: row.distinct_subjects,\n }));\n }\n\n private subjectPredicateCardinalityDistribution(limit: number): RdfCardinalityDistributions['subjectPredicates'] {\n const rows = this.requireDb().prepare<{\n subject_id: number;\n predicate_id: number;\n quad_count: number;\n graph_count: number;\n distinct_objects: number;\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_quads\n GROUP BY subject_id, predicate_id\n ORDER BY quad_count DESC, subject_id ASC, predicate_id ASC\n LIMIT ?\n `).all(limit);\n const termMap = this.requireDictionary().rowsForIds(rows.flatMap((row) => [row.subject_id, row.predicate_id]));\n return rows.map((row) => ({\n subject: this.cardinalityTerm(termMap, row.subject_id),\n predicate: this.cardinalityTerm(termMap, row.predicate_id),\n quadCount: row.quad_count,\n graphCount: row.graph_count,\n distinctObjects: row.distinct_objects,\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: rdfTermKind(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 public estimateSerializedTextBytes(): number {\n const db = this.requireDb();\n const row = db.prepare<{ bytes: number | null }>(`\n SELECT\n COALESCE(SUM(length(value)), 0) +\n COALESCE(SUM(CASE WHEN lang IS NULL THEN 0 ELSE length(lang) END), 0) AS bytes\n FROM rdf_terms\n `).get();\n return row?.bytes ?? 0;\n }\n\n public estimateDatabaseBytes(): number {\n const db = this.requireDb();\n try {\n const pageCount = db.prepare<{ page_count: number }>('PRAGMA page_count').get()?.page_count ?? 0;\n const pageSize = db.prepare<{ page_size: number }>('PRAGMA page_size').get()?.page_size ?? 0;\n return pageCount * pageSize;\n } catch {\n return 0;\n }\n }\n\n public collectSpaceObjects(): RdfIndexSpaceObject[] {\n const db = this.requireDb();\n try {\n const schemaRows = db.prepare<{ name: string; type: string; tbl_name: string }>(`\n SELECT name, type, tbl_name\n FROM sqlite_schema\n WHERE type IN ('table', 'index')\n AND (\n name IN ('rdf_terms', 'rdf_sources', 'rdf_quads')\n OR tbl_name IN ('rdf_terms', 'rdf_sources', 'rdf_quads')\n )\n `).all();\n const schema = new Map(schemaRows.map((row) => [row.name, row]));\n try {\n const rows = db.prepare<{ name: string; pages: number; bytes: number | null }>(`\n SELECT name, COUNT(*) AS pages, SUM(pgsize) AS bytes\n FROM dbstat\n WHERE name IN (\n SELECT name\n FROM sqlite_schema\n WHERE type IN ('table', 'index')\n AND (\n name IN ('rdf_terms', 'rdf_sources', 'rdf_quads')\n OR tbl_name IN ('rdf_terms', 'rdf_sources', 'rdf_quads')\n )\n )\n GROUP BY name\n ORDER BY name\n `).all();\n\n if (rows.length > 0) {\n return rows.map((row) => {\n const object = schema.get(row.name);\n const kind = rdfSpaceObjectKind(row.name, object?.type, object?.tbl_name);\n return {\n name: row.name,\n kind,\n ...(object?.tbl_name && object.tbl_name !== row.name ? { tableName: object.tbl_name } : {}),\n pages: row.pages,\n bytes: row.bytes ?? 0,\n };\n });\n }\n } catch {\n // Some SQLite builds do not expose dbstat for in-memory databases.\n }\n\n return this.estimateSpaceObjectsFromSchema(schemaRows);\n } catch {\n return [];\n }\n }\n\n private estimateSpaceObjectsFromSchema(schemaRows: Array<{ name: string; type: string; tbl_name: string }>): RdfIndexSpaceObject[] {\n const pageSize = this.estimatePageSize();\n return schemaRows.map((object) => ({\n name: object.name,\n kind: rdfSpaceObjectKind(object.name, object.type, object.tbl_name),\n ...(object.tbl_name && object.tbl_name !== object.name ? { tableName: object.tbl_name } : {}),\n pages: 1,\n bytes: pageSize,\n estimated: true,\n }));\n }\n\n private estimatePageSize(): number {\n try {\n return this.requireDb().prepare<{ page_size: number }>('PRAGMA page_size').get()?.page_size ?? 4096;\n } catch {\n return 4096;\n }\n }\n\n private initializeSchema(): void {\n this.requireDb().exec(`\n CREATE TABLE IF NOT EXISTS rdf_sources (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n source TEXT NOT NULL UNIQUE,\n workspace TEXT NOT NULL,\n local_path TEXT,\n content_type TEXT,\n last_indexed_at TEXT,\n source_version TEXT\n );\n\n CREATE TABLE IF NOT EXISTS rdf_quads (\n graph_id INTEGER NOT NULL,\n subject_id INTEGER NOT NULL,\n predicate_id INTEGER NOT NULL,\n object_id INTEGER NOT NULL,\n source_file_id INTEGER,\n source_line_no INTEGER,\n PRIMARY KEY (graph_id, subject_id, predicate_id, object_id),\n FOREIGN KEY (graph_id) REFERENCES rdf_terms(id),\n FOREIGN KEY (subject_id) REFERENCES rdf_terms(id),\n FOREIGN KEY (predicate_id) REFERENCES rdf_terms(id),\n FOREIGN KEY (object_id) REFERENCES rdf_terms(id),\n FOREIGN KEY (source_file_id) REFERENCES rdf_sources(id)\n );\n\n CREATE INDEX IF NOT EXISTS rdf_quads_spog ON rdf_quads(subject_id, predicate_id, object_id, graph_id);\n CREATE INDEX IF NOT EXISTS rdf_quads_sopg ON rdf_quads(subject_id, object_id, predicate_id, graph_id);\n CREATE INDEX IF NOT EXISTS rdf_quads_psog ON rdf_quads(predicate_id, subject_id, object_id, graph_id);\n CREATE INDEX IF NOT EXISTS rdf_quads_posg ON rdf_quads(predicate_id, object_id, subject_id, graph_id);\n CREATE INDEX IF NOT EXISTS rdf_quads_ospg ON rdf_quads(object_id, subject_id, predicate_id, graph_id);\n CREATE INDEX IF NOT EXISTS rdf_quads_opsg ON rdf_quads(object_id, predicate_id, subject_id, graph_id);\n CREATE INDEX IF NOT EXISTS rdf_quads_gspo ON rdf_quads(graph_id, subject_id, predicate_id, object_id);\n CREATE INDEX IF NOT EXISTS rdf_quads_gpos ON rdf_quads(graph_id, predicate_id, object_id, subject_id);\n CREATE INDEX IF NOT EXISTS rdf_quads_source ON rdf_quads(source_file_id);\n\n CREATE TABLE IF NOT EXISTS rdf_index_metadata (\n key TEXT PRIMARY KEY,\n value TEXT NOT NULL\n );\n `);\n this.requireDb().prepare(`\n INSERT OR IGNORE INTO rdf_index_metadata (key, value)\n SELECT 'data_version', '1'\n WHERE EXISTS (SELECT 1 FROM rdf_quads LIMIT 1)\n `).run();\n }\n\n private prepareSchemaVersion(): void {\n this.ensureMetadataTable();\n const db = this.requireDb();\n const row = db\n .prepare<{ value: string }>(\"SELECT value FROM rdf_index_metadata WHERE key = 'schema_version'\")\n .get();\n if (row && row.value !== String(RDF_QUAD_INDEX_SCHEMA_VERSION)) {\n this.dropIndexSchema();\n this.ensureMetadataTable();\n }\n this.setMetadataValue('schema_version', String(RDF_QUAD_INDEX_SCHEMA_VERSION));\n }\n\n private ensureMetadataTable(): void {\n this.requireDb().exec(`\n CREATE TABLE IF NOT EXISTS rdf_index_metadata (\n key TEXT PRIMARY KEY,\n value TEXT NOT NULL\n );\n `);\n }\n\n private dropIndexSchema(): void {\n const db = this.requireDb();\n const foreignKeys = db.prepare<{ foreign_keys: number }>('PRAGMA foreign_keys').get()?.foreign_keys ?? 0;\n db.exec('PRAGMA foreign_keys = OFF;');\n try {\n db.exec(`\n DROP INDEX IF EXISTS rdf_quads_spog;\n DROP INDEX IF EXISTS rdf_quads_sopg;\n DROP INDEX IF EXISTS rdf_quads_psog;\n DROP INDEX IF EXISTS rdf_quads_posg;\n DROP INDEX IF EXISTS rdf_quads_ospg;\n DROP INDEX IF EXISTS rdf_quads_opsg;\n DROP INDEX IF EXISTS rdf_quads_gspo;\n DROP INDEX IF EXISTS rdf_quads_gpos;\n DROP INDEX IF EXISTS rdf_quads_source;\n DROP TABLE IF EXISTS rdf_quads;\n DROP TABLE IF EXISTS rdf_sources;\n DROP TABLE IF EXISTS rdf_terms;\n DROP TABLE IF EXISTS rdf_index_metadata;\n `);\n dropRdf3xDerivedSchemaObjects(db);\n } finally {\n if (foreignKeys) {\n db.exec('PRAGMA foreign_keys = ON;');\n }\n }\n this.cardinalityCache.clear();\n }\n\n private bumpDataVersion(): void {\n this.requireDb().prepare(`\n INSERT INTO rdf_index_metadata (key, value)\n VALUES ('data_version', '1')\n ON CONFLICT (key)\n DO UPDATE SET value = CAST(value AS INTEGER) + 1\n `).run();\n }\n\n private setMetadataValue(key: string, value: string): void {\n this.requireDb().prepare(`\n INSERT INTO rdf_index_metadata (key, value)\n VALUES (?, ?)\n ON CONFLICT (key)\n DO UPDATE SET value = excluded.value\n `).run(key, value);\n }\n\n private upsertSource(source: RdfSourceInput): number {\n const db = this.requireDb();\n db.prepare(`\n INSERT INTO rdf_sources (\n source,\n workspace,\n local_path,\n content_type,\n last_indexed_at,\n source_version\n )\n VALUES (?, ?, ?, ?, strftime('%Y-%m-%dT%H:%M:%fZ', 'now'), ?)\n ON CONFLICT (source)\n DO UPDATE SET\n workspace = excluded.workspace,\n local_path = excluded.local_path,\n content_type = excluded.content_type,\n last_indexed_at = excluded.last_indexed_at,\n source_version = excluded.source_version\n `).run(\n source.source,\n source.workspace,\n source.localPath ?? null,\n source.contentType ?? null,\n source.sourceVersion ?? null,\n );\n\n const row = db.prepare<RdfSourceRow>('SELECT * FROM rdf_sources WHERE source = ?').get(source.source);\n if (!row) {\n throw new Error(`Failed to upsert RDF source: ${source.source}`);\n }\n return row.id;\n }\n\n private buildWhereClause(\n pattern: QuintPattern,\n allowUnresolved: boolean,\n ): RdfWhereClause {\n const conditions: string[] = [];\n const joins: string[] = [];\n const params: unknown[] = [];\n const queryPlan: string[] = [];\n const equalityColumns = new Set<IndexedColumn>();\n\n for (const key of TERM_KEYS) {\n const match = pattern[key];\n if (!match) {\n continue;\n }\n const column = TERM_COLUMN[key];\n const condition = this.matchToCondition(key, column, match, allowUnresolved);\n if (condition.unresolved) {\n return { joins: '', whereClause: '', params: [], indexHint: 'none', queryPlan, unresolved: key };\n }\n joins.push(...condition.joins);\n if (condition.sql) {\n conditions.push(condition.sql);\n params.push(...condition.params);\n }\n queryPlan.push(...condition.queryPlan);\n if (condition.equality) {\n equalityColumns.add(column);\n }\n }\n\n return {\n joins: joins.join(''),\n whereClause: conditions.length > 0 ? ` WHERE ${conditions.join(' AND ')}` : '',\n params,\n indexHint: this.chooseIndex(equalityColumns),\n queryPlan,\n };\n }\n\n private matchToCondition(\n key: PatternKey,\n column: IndexedColumn,\n match: unknown,\n allowUnresolved: boolean,\n scope?: RdfConditionScope,\n ): RdfCondition {\n const columnRef = this.scopedQuadColumn(column, scope);\n if (isTerm(match as any)) {\n const id = this.requireDictionary().find(match as Term);\n if (id === undefined) {\n if (allowUnresolved) {\n return { joins: [], params: [], queryPlan: [], unresolved: true };\n }\n return { joins: [], sql: `${columnRef} = ?`, params: [-1], equality: true, queryPlan: [] };\n }\n return { joins: [], sql: `${columnRef} = ?`, params: [id], equality: true, queryPlan: [] };\n }\n\n const ops = match as TermOperators;\n const fragments: string[] = [];\n const joins: string[] = [];\n const params: unknown[] = [];\n const queryPlan: string[] = [];\n let equality = false;\n\n if (ops.$eq !== undefined) {\n const id = this.termOperatorValueId(ops.$eq, allowUnresolved);\n if (id === undefined) return { joins, params: [], queryPlan, unresolved: true };\n fragments.push(`${columnRef} = ?`);\n params.push(id);\n equality = true;\n }\n if (ops.$in !== undefined) {\n const ids = uniqueNumbers(ops.$in\n .map((value) => this.termOperatorValueId(value, allowUnresolved))\n .filter((value): value is number => value !== undefined));\n if (ids.length === 0) {\n return { joins, params: [], queryPlan, unresolved: true };\n }\n if (ids.length > TERM_IN_JOIN_THRESHOLD) {\n const candidateTable = this.populateTermInCandidateTable(column, 'in', ids, scope);\n const candidateAlias = this.scopedSqlName(`${column}_in_candidates`, scope);\n joins.push(` JOIN ${candidateTable} ${candidateAlias} ON ${candidateAlias}.id = ${columnRef}`);\n } else {\n fragments.push(`${columnRef} IN (${ids.map(() => '?').join(', ')})`);\n params.push(...ids);\n }\n queryPlan.push(`TermIn(${key})`);\n equality = true;\n }\n if (ops.$ne !== undefined) {\n const id = this.termOperatorValueId(ops.$ne, allowUnresolved);\n if (id !== undefined) {\n fragments.push(`${columnRef} != ?`);\n params.push(id);\n }\n }\n for (const operator of ['$gt', '$gte', '$lt', '$lte'] as const) {\n if (ops[operator] !== undefined) {\n const range = this.termRangeCondition(key, column, operator, ops[operator], allowUnresolved, scope);\n if (range.unresolved) {\n return { joins, params: [], queryPlan, unresolved: true };\n }\n joins.push(...(range.joins ?? []));\n fragments.push(range.sql);\n params.push(...range.params);\n queryPlan.push(...(range.queryPlan ?? []));\n }\n }\n\n if (ops.$notIn !== undefined) {\n const ids = uniqueNumbers(ops.$notIn\n .map((value) => this.termOperatorValueId(value, allowUnresolved))\n .filter((value): value is number => value !== undefined));\n if (ids.length > 0) {\n if (ids.length > TERM_IN_JOIN_THRESHOLD) {\n const candidateTable = this.populateTermInCandidateTable(column, 'not_in', ids, scope);\n const candidateAlias = this.scopedSqlName(`${column}_not_in_candidates`, scope);\n joins.push(` LEFT JOIN ${candidateTable} ${candidateAlias} ON ${candidateAlias}.id = ${columnRef}`);\n fragments.push(`${candidateAlias}.id IS NULL`);\n } else {\n fragments.push(`${columnRef} NOT IN (${ids.map(() => '?').join(', ')})`);\n params.push(...ids);\n }\n queryPlan.push(`TermNotIn(${key})`);\n }\n }\n\n if (ops.$termType !== undefined) {\n const condition = this.termTypeConditionJoin(key, column, ops.$termType, scope);\n joins.push(condition.join);\n fragments.push(condition.sql);\n params.push(...condition.params);\n queryPlan.push(condition.queryPlan);\n }\n\n if (ops.$language !== undefined) {\n const condition = this.languageConditionJoin(key, column, '$language', ops.$language, scope);\n joins.push(condition.join);\n fragments.push(condition.sql);\n params.push(...condition.params);\n queryPlan.push(condition.queryPlan);\n }\n\n if (ops.$notLanguage !== undefined) {\n const condition = this.languageConditionJoin(key, column, '$notLanguage', ops.$notLanguage, scope);\n joins.push(condition.join);\n fragments.push(condition.sql);\n params.push(...condition.params);\n queryPlan.push(condition.queryPlan);\n }\n\n if (ops.$langMatches !== undefined) {\n const condition = this.languageConditionJoin(key, column, '$langMatches', ops.$langMatches, scope);\n joins.push(condition.join);\n fragments.push(condition.sql);\n params.push(...condition.params);\n queryPlan.push(condition.queryPlan);\n }\n\n if (ops.$datatype !== undefined) {\n const condition = this.datatypeConditionJoin(key, column, '$datatype', ops.$datatype, allowUnresolved, scope);\n if (condition.unresolved) {\n return { joins, params: [], queryPlan, unresolved: true };\n }\n joins.push(condition.join);\n fragments.push(condition.sql);\n params.push(...condition.params);\n queryPlan.push(condition.queryPlan);\n }\n\n if (ops.$notDatatype !== undefined) {\n const condition = this.datatypeConditionJoin(key, column, '$notDatatype', ops.$notDatatype, allowUnresolved, scope);\n if (condition.unresolved) {\n return { joins, params: [], queryPlan, unresolved: true };\n }\n joins.push(condition.join);\n fragments.push(condition.sql);\n params.push(...condition.params);\n queryPlan.push(condition.queryPlan);\n }\n\n if (ops.$startsWith !== undefined) {\n const condition = this.prefixSearchConditionJoin(key, column, ops.$startsWith, scope);\n joins.push(condition.join);\n fragments.push(condition.sql);\n params.push(...condition.params);\n queryPlan.push(`PrefixRange(${key})`);\n equality = true;\n }\n\n equality = this.addTextSearchCondition(joins, fragments, params, queryPlan, key, column, '$contains', ops.$contains, scope) || equality;\n equality = this.addTextSearchCondition(joins, fragments, params, queryPlan, key, column, '$endsWith', ops.$endsWith, scope) || equality;\n equality = this.addTextSearchCondition(joins, fragments, params, queryPlan, key, column, '$regex', ops.$regex, scope) || equality;\n\n return {\n joins,\n sql: fragments.length > 0 ? fragments.join(' AND ') : undefined,\n params,\n equality,\n queryPlan,\n };\n }\n\n private termTypeConditionJoin(\n key: PatternKey,\n column: IndexedColumn,\n termType: 'iri' | 'blank' | 'literal' | 'numeric',\n scope?: RdfConditionScope,\n ): { join: string; sql: string; params: unknown[]; queryPlan: string } {\n const alias = this.scopedSqlName(`${column}_term_type_${termType}`, scope);\n const columnRef = this.scopedQuadColumn(column, scope);\n const possibleKinds = this.termKindsForPatternKey(key);\n if (termType === 'numeric') {\n if (!possibleKinds.includes('literal')) {\n return {\n join: ` JOIN rdf_terms ${alias} ON ${alias}.id = ${columnRef}`,\n sql: '1 = 0',\n params: [],\n queryPlan: `TermType(${key}:numeric)`,\n };\n }\n return {\n join: ` JOIN rdf_terms ${alias} ON ${alias}.id = ${columnRef}`,\n sql: `${alias}.kind = 'literal' AND ${alias}.numeric_value IS NOT NULL`,\n params: [],\n queryPlan: `TermType(${key}:numeric)`,\n };\n }\n if (!possibleKinds.includes(termType)) {\n return {\n join: ` JOIN rdf_terms ${alias} ON ${alias}.id = ${columnRef}`,\n sql: '1 = 0',\n params: [],\n queryPlan: `TermType(${key}:${termType})`,\n };\n }\n return {\n join: ` JOIN rdf_terms ${alias} ON ${alias}.id = ${columnRef}`,\n sql: `${alias}.kind = ?`,\n params: [termType],\n queryPlan: `TermType(${key}:${termType})`,\n };\n }\n\n private languageConditionJoin(\n key: PatternKey,\n column: IndexedColumn,\n operator: '$language' | '$notLanguage' | '$langMatches',\n language: string,\n scope?: RdfConditionScope,\n ): { join: string; sql: string; params: unknown[]; queryPlan: string } {\n const alias = this.scopedSqlName(`${column}_${operator.slice(1).toLowerCase()}`, scope);\n const columnRef = this.scopedQuadColumn(column, scope);\n if (!this.termKindsForPatternKey(key).includes('literal')) {\n return {\n join: ` JOIN rdf_terms ${alias} ON ${alias}.id = ${columnRef}`,\n sql: '1 = 0',\n params: [],\n queryPlan: `Language(${key}${operator})`,\n };\n }\n const join = ` JOIN rdf_terms ${alias} ON ${alias}.id = ${columnRef}`;\n if (operator === '$language') {\n return {\n join,\n sql: `${alias}.kind = 'literal' AND COALESCE(${alias}.lang, '') = ?`,\n params: [language],\n queryPlan: `Language(${key}${operator})`,\n };\n }\n if (operator === '$notLanguage') {\n return {\n join,\n sql: `${alias}.kind = 'literal' AND COALESCE(${alias}.lang, '') != ?`,\n params: [language],\n queryPlan: `Language(${key}${operator})`,\n };\n }\n if (language === '*') {\n return {\n join,\n sql: `${alias}.kind = 'literal' AND ${alias}.lang IS NOT NULL AND ${alias}.lang != ''`,\n params: [],\n queryPlan: `Language(${key}${operator})`,\n };\n }\n return {\n join,\n sql: `${alias}.kind = 'literal'\n AND (lower(${alias}.lang) = lower(?) OR lower(${alias}.lang) LIKE lower(?) ESCAPE '\\\\')`,\n params: [language, `${escapeLikePattern(language)}-%`],\n queryPlan: `Language(${key}${operator})`,\n };\n }\n\n private datatypeConditionJoin(\n key: PatternKey,\n column: IndexedColumn,\n operator: '$datatype' | '$notDatatype',\n datatype: Term,\n allowUnresolved: boolean,\n scope?: RdfConditionScope,\n ): { join: string; sql: string; params: unknown[]; queryPlan: string; unresolved?: boolean } {\n const alias = this.scopedSqlName(`${column}_${operator.slice(1).toLowerCase()}`, scope);\n const columnRef = this.scopedQuadColumn(column, scope);\n if (datatype.termType !== 'NamedNode') {\n throw new Error('RdfQuadIndex datatype filters only support named node datatype terms');\n }\n if (!this.termKindsForPatternKey(key).includes('literal')) {\n return {\n join: ` JOIN rdf_terms ${alias} ON ${alias}.id = ${columnRef}`,\n sql: '1 = 0',\n params: [],\n queryPlan: `Datatype(${key}${operator})`,\n };\n }\n const join = ` JOIN rdf_terms ${alias} ON ${alias}.id = ${columnRef}`;\n if (datatype.value === XSD_STRING) {\n return {\n join,\n sql: 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 params: [],\n queryPlan: `Datatype(${key}${operator})`,\n };\n }\n const datatypeId = this.requireDictionary().find(datatype);\n if (datatypeId === undefined) {\n if (operator === '$notDatatype') {\n return {\n join,\n sql: `${alias}.kind = 'literal'`,\n params: [],\n queryPlan: `Datatype(${key}${operator})`,\n };\n }\n if (allowUnresolved) {\n return { join, sql: '', params: [], queryPlan: `Datatype(${key}${operator})`, unresolved: true };\n }\n return {\n join,\n sql: operator === '$datatype' ? '1 = 0' : `${alias}.kind = 'literal'`,\n params: [],\n queryPlan: `Datatype(${key}${operator})`,\n };\n }\n return {\n join,\n sql: operator === '$datatype'\n ? `${alias}.kind = 'literal' AND ${alias}.datatype_id = ?`\n : `${alias}.kind = 'literal' AND (${alias}.datatype_id IS NULL OR ${alias}.datatype_id != ?)`,\n params: [datatypeId],\n queryPlan: `Datatype(${key}${operator})`,\n };\n }\n\n private termRangeCondition(\n key: PatternKey,\n column: IndexedColumn,\n operator: '$gt' | '$gte' | '$lt' | '$lte',\n value: unknown,\n allowUnresolved: boolean,\n scope?: RdfConditionScope,\n ): { joins?: string[]; sql: string; params: unknown[]; queryPlan?: string[]; unresolved?: boolean } {\n const kinds = this.termKindsForPatternKey(key);\n const lexicalValue = this.termOperatorLexicalValue(value);\n if (lexicalValue === undefined) {\n if (allowUnresolved) {\n return { sql: '', params: [], unresolved: true };\n }\n return { sql: '1 = 0', params: [] };\n }\n\n const comparator = {\n $gt: '>',\n $gte: '>=',\n $lt: '<',\n $lte: '<=',\n }[operator];\n const numericValue = this.termOperatorNumericValue(value);\n if (numericValue !== undefined) {\n if (!kinds.includes('literal')) {\n if (allowUnresolved) {\n return { sql: '', params: [], unresolved: true };\n }\n return { sql: '1 = 0', params: [] };\n }\n const termAlias = this.scopedSqlName(`${column}_numeric_range_${operator.slice(1)}`, scope);\n return {\n joins: [` JOIN rdf_terms ${termAlias} ON ${termAlias}.id = ${this.scopedQuadColumn(column, scope)}`],\n sql: `${termAlias}.kind = 'literal'\n AND ${termAlias}.numeric_value IS NOT NULL\n AND ${termAlias}.numeric_value ${comparator} ?`,\n params: [numericValue],\n queryPlan: [`NumericRange(${key}${operator})`],\n };\n }\n\n const termAlias = this.scopedSqlName(`${column}_range_${operator.slice(1)}`, scope);\n return {\n joins: [` JOIN rdf_terms ${termAlias} ON ${termAlias}.id = ${this.scopedQuadColumn(column, scope)}`],\n sql: `${termAlias}.kind IN (${kinds.map(() => '?').join(', ')})\n AND ${termAlias}.value ${comparator} ?`,\n params: [...kinds, lexicalValue],\n queryPlan: [`LexicalRange(${key}${operator})`],\n };\n }\n\n private termOperatorLexicalValue(value: unknown): string | undefined {\n if (!value || typeof value !== 'object' || !('termType' in value)) {\n if (typeof value === 'string' || typeof value === 'number') {\n return String(value);\n }\n throw new Error('RdfQuadIndex range operators only support Term, string, or number values');\n }\n const term = value as Term;\n switch (term.termType) {\n case 'NamedNode':\n case 'BlankNode':\n case 'Literal':\n return term.value;\n case 'DefaultGraph':\n return '';\n default:\n throw new Error(`RdfQuadIndex range operators do not support ${term.termType}`);\n }\n }\n\n private termOperatorNumericValue(value: unknown): number | undefined {\n if (typeof value === 'number') {\n return Number.isFinite(value) ? value : undefined;\n }\n if (!value || typeof value !== 'object' || !('termType' in value)) {\n return undefined;\n }\n const term = value as Term;\n if (term.termType !== 'Literal' || !isRdfNumericDatatype(term.datatype.value)) {\n return undefined;\n }\n const parsed = rdfNumericValue(term.value);\n return Number.isFinite(parsed) ? parsed : undefined;\n }\n\n private termKindsForPatternKey(key: PatternKey): 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\n private termOperatorValueId(value: unknown, allowUnresolved: boolean): number | undefined {\n if (!value || typeof value !== 'object' || !('termType' in value)) {\n throw new Error('RdfQuadIndex only supports Term values in first-stage exact scans');\n }\n const id = this.requireDictionary().find(value as Term);\n if (id === undefined && !allowUnresolved) {\n return -1;\n }\n return id;\n }\n\n private addTextSearchCondition(\n joins: string[],\n fragments: string[],\n params: unknown[],\n queryPlan: string[],\n key: PatternKey,\n column: IndexedColumn,\n operator: RdfQueryFilterOperator,\n value: string | undefined,\n scope?: RdfConditionScope,\n ): boolean {\n if (value === undefined) {\n return false;\n }\n if (typeof value !== 'string') {\n throw new Error(`RdfQuadIndex text search ${operator} only supports string values`);\n }\n const kind = this.termKindsForPatternKey(key);\n queryPlan.push(`TextSearch(${key}${operator})`);\n const condition = this.textSearchConditionJoin(kind, column, operator, value, scope);\n joins.push(condition.join);\n fragments.push(condition.sql);\n params.push(...condition.params);\n return true;\n }\n\n private prefixSearchConditionJoin(\n key: PatternKey,\n column: IndexedColumn,\n prefix: string,\n scope?: RdfConditionScope,\n ): { join: string; sql: string; params: unknown[] } {\n const kind = this.termKindsForPatternKey(key);\n const alias = this.scopedSqlName(`prefix_${column}`, scope);\n return {\n join: ` JOIN rdf_terms ${alias} ON ${alias}.id = ${this.scopedQuadColumn(column, scope)}`,\n sql: `${alias}.kind IN (${kind.map(() => '?').join(', ')})\n AND ${alias}.value_head >= ?\n AND ${alias}.value_head < ?\n AND ${alias}.value >= ?\n AND ${alias}.value < ?`,\n params: [...kind, rdfTermValueHead(prefix), `${rdfTermValueHead(prefix)}\\uffff`, prefix, `${prefix}\\uffff`],\n };\n }\n\n private textSearchConditionJoin(\n kind: RdfTermKind[],\n column: IndexedColumn,\n operator: RdfQueryFilterOperator,\n value: string,\n scope?: RdfConditionScope,\n ): { join: string; sql: string; params: unknown[] } {\n const alias = this.scopedSqlName(`text_${column}_${operator.slice(1).toLowerCase()}`, scope);\n if (kind.length === 0) {\n return {\n join: ` JOIN rdf_terms ${alias} ON ${alias}.id = ${this.scopedQuadColumn(column, scope)}`,\n sql: '1 = 0',\n params: [],\n };\n }\n const kindPlaceholders = kind.map(() => '?').join(', ');\n const normalized = value.toLowerCase();\n const join = ` JOIN rdf_terms ${alias} ON ${alias}.id = ${this.scopedQuadColumn(column, scope)}`;\n switch (operator) {\n case '$contains':\n return {\n join,\n sql: `${alias}.kind IN (${kindPlaceholders})\n AND ${alias}.normalized_text LIKE ? ESCAPE '\\\\'\n AND instr(${alias}.value, ?) > 0`,\n params: [...kind, `%${escapeLikePattern(normalized)}%`, value],\n };\n case '$endsWith':\n return {\n join,\n sql: `${alias}.kind IN (${kindPlaceholders})\n AND ${alias}.normalized_text LIKE ? ESCAPE '\\\\'\n AND substr(${alias}.value, -length(?)) = ?`,\n params: [...kind, `%${escapeLikePattern(normalized)}`, value, value],\n };\n case '$regex':\n return this.regexTextSearchConditionJoin(kind, alias, column, value, scope);\n default:\n throw new Error(`Unsupported RDF text search operator: ${operator}`);\n }\n }\n\n private regexTextSearchConditionJoin(\n kind: RdfTermKind[],\n alias: string,\n column: IndexedColumn,\n pattern: string,\n scope?: RdfConditionScope,\n ): { join: string; sql: string; params: unknown[] } {\n const ids = this.requireDictionary().idsByNormalizedTextRegex(kind, pattern);\n const candidateTable = this.populateRegexCandidateTable(column, ids, scope);\n const candidateAlias = `${alias}_candidates`;\n const join = ` JOIN rdf_terms ${alias} ON ${alias}.id = ${this.scopedQuadColumn(column, scope)}\n JOIN ${candidateTable} ${candidateAlias} ON ${candidateAlias}.id = ${alias}.id`;\n if (ids.length === 0) {\n return { join, sql: '1 = 0', params: [] };\n }\n const kindPlaceholders = kind.map(() => '?').join(', ');\n return {\n join,\n sql: `${alias}.kind IN (${kindPlaceholders})`,\n params: kind,\n };\n }\n\n private populateRegexCandidateTable(column: IndexedColumn, ids: number[], scope?: RdfConditionScope): string {\n const tableName = this.scopedSqlName(`rdf_regex_candidates_${column}`, scope);\n this.populateCandidateTable(tableName, ids);\n return tableName;\n }\n\n private populateTermInCandidateTable(column: IndexedColumn, operator: 'in' | 'not_in', ids: number[], scope?: RdfConditionScope): string {\n const tableName = this.scopedSqlName(`rdf_term_${operator}_candidates_${column}`, scope);\n this.populateCandidateTable(tableName, ids);\n return tableName;\n }\n\n private scopedQuadColumn(column: IndexedColumn, scope?: RdfConditionScope): string {\n return `${scope?.quadAlias ?? 'rdf_quads'}.${column}`;\n }\n\n private scopedSqlName(base: string, scope?: RdfConditionScope): string {\n const name = scope?.aliasPrefix ? `${scope.aliasPrefix}_${base}` : base;\n return name.replace(/[^A-Za-z0-9_]/g, '_');\n }\n\n private buildTupleConstraintJoin(source: RdfQuadTupleConstraintSource): { join: string } {\n const columns = Array.from(new Set(source.columns));\n if (columns.length === 0) {\n return { join: '' };\n }\n\n const candidateColumns = columns.map((key) => TERM_COLUMN[key]);\n const tableName = `rdf_tuple_values_${candidateColumns.join('_')}`;\n this.populateTupleConstraintTable(tableName, columns, source.rows);\n const alias = 'tuple_values';\n const onClause = columns\n .map((key) => `${alias}.${TERM_COLUMN[key]} = rdf_quads.${TERM_COLUMN[key]}`)\n .join(' AND ');\n return {\n join: ` JOIN ${tableName} ${alias} ON ${onClause}`,\n };\n }\n\n private populateTupleConstraintTable(\n tableName: string,\n columns: PatternKey[],\n rows: RdfQuadTupleConstraintSource['rows'],\n ): void {\n const db = this.requireDb();\n const columnDefs = columns.map((key) => `${TERM_COLUMN[key]} INTEGER NOT NULL`).join(', ');\n const primaryKey = columns.map((key) => TERM_COLUMN[key]).join(', ');\n db.exec(`CREATE TEMP TABLE IF NOT EXISTS ${tableName} (${columnDefs}, PRIMARY KEY (${primaryKey}))`);\n db.prepare(`DELETE FROM ${tableName}`).run();\n\n const valueRows = rows\n .map((row) => columns.map((key) => this.termIdForTupleConstraint(row[key])))\n .filter((ids): ids is number[] => ids.every((id) => id !== undefined));\n if (valueRows.length === 0) {\n return;\n }\n\n const insertColumns = columns.map((key) => TERM_COLUMN[key]).join(', ');\n const placeholders = `(${columns.map(() => '?').join(', ')})`;\n const insert = db.prepare(`INSERT OR IGNORE INTO ${tableName} (${insertColumns}) VALUES ${placeholders}`);\n for (const valueRow of valueRows) {\n insert.run(...valueRow);\n }\n }\n\n private termIdForTupleConstraint(term: Term | undefined): number | undefined {\n if (!term) {\n return undefined;\n }\n return this.requireDictionary().find(term);\n }\n\n private populateCandidateTable(tableName: string, ids: number[]): void {\n const db = this.requireDb();\n db.exec(`CREATE TEMP TABLE IF NOT EXISTS ${tableName} (id INTEGER PRIMARY KEY)`);\n db.prepare(`DELETE FROM ${tableName}`).run();\n for (let offset = 0; offset < ids.length; offset += 500) {\n const batch = ids.slice(offset, offset + 500);\n db.prepare(`INSERT OR IGNORE INTO ${tableName} (id) VALUES ${batch.map(() => '(?)').join(', ')}`).run(...batch);\n }\n }\n\n private chooseIndex(columns: Set<IndexedColumn>): string {\n const has = (column: IndexedColumn): boolean => columns.has(column);\n if (has('graph_id') && has('subject_id')) return 'GSPO';\n if (has('graph_id') && has('predicate_id')) return 'GPOS';\n if (has('subject_id') && has('predicate_id')) return 'SPOG';\n if (has('subject_id') && has('object_id')) return 'SOPG';\n if (has('predicate_id') && has('object_id')) return 'POSG';\n if (has('object_id') && has('subject_id')) return 'OSPG';\n if (has('subject_id')) return 'SPOG';\n if (has('predicate_id')) return 'POSG';\n if (has('object_id')) return 'OSPG';\n if (has('graph_id')) return 'GSPO';\n return 'full-scan';\n }\n\n private exactTermPattern(pattern: QuintPattern): { ids: Partial<Record<PatternKey, number>>; cacheKey: string; indexChoice: string } | undefined {\n const ids: Partial<Record<PatternKey, number>> = {};\n const columns = new Set<IndexedColumn>();\n\n for (const key of TERM_KEYS) {\n const match = pattern[key];\n if (!match) {\n continue;\n }\n if (!isTerm(match as any)) {\n return undefined;\n }\n const id = this.requireDictionary().find(match as Term);\n if (id === undefined) {\n return {\n ids: { [key]: -1 },\n cacheKey: `${key}=-1`,\n indexChoice: this.chooseIndex(new Set([TERM_COLUMN[key]])),\n };\n }\n ids[key] = id;\n columns.add(TERM_COLUMN[key]);\n }\n\n return {\n ids,\n cacheKey: TERM_KEYS\n .map((key) => `${key}:${ids[key] ?? '*'}`)\n .join('|'),\n indexChoice: this.chooseIndex(columns),\n };\n }\n\n private countExactTermPattern(\n ids: Partial<Record<PatternKey, number>>,\n indexChoice: string,\n ): RdfCardinalityEstimate {\n if (Object.values(ids).some((id) => id === -1)) {\n return {\n rows: 0,\n source: 'exact-count',\n indexChoice,\n };\n }\n\n const conditions: string[] = [];\n const params: number[] = [];\n for (const key of TERM_KEYS) {\n const id = ids[key];\n if (id === undefined) {\n continue;\n }\n conditions.push(`${TERM_COLUMN[key]} = ?`);\n params.push(id);\n }\n\n const sql = `SELECT COUNT(*) AS count FROM rdf_quads${conditions.length > 0 ? ` WHERE ${conditions.join(' AND ')}` : ''}`;\n const row = this.requireDb().prepare<{ count: number }>(sql).get(...params);\n return {\n rows: row?.count ?? 0,\n source: 'exact-count',\n indexChoice,\n };\n }\n\n private countExactDistinctTermPattern(\n ids: Partial<Record<PatternKey, number>>,\n indexChoice: string,\n distinctKey: PatternKey,\n ): RdfCardinalityEstimate {\n if (Object.values(ids).some((id) => id === -1)) {\n return {\n rows: 0,\n source: 'exact-distinct-count',\n indexChoice,\n };\n }\n\n const conditions: string[] = [];\n const params: number[] = [];\n for (const key of TERM_KEYS) {\n const id = ids[key];\n if (id === undefined) {\n continue;\n }\n conditions.push(`${TERM_COLUMN[key]} = ?`);\n params.push(id);\n }\n\n const sql = `SELECT COUNT(DISTINCT ${TERM_COLUMN[distinctKey]}) AS count FROM rdf_quads${conditions.length > 0 ? ` WHERE ${conditions.join(' AND ')}` : ''}`;\n const row = this.requireDb().prepare<{ count: number }>(sql).get(...params);\n return {\n rows: row?.count ?? 0,\n source: 'exact-distinct-count',\n indexChoice,\n };\n }\n\n private countExactDistinctTupleTermPattern(\n ids: Partial<Record<PatternKey, number>>,\n indexChoice: string,\n distinctKeys: PatternKey[],\n ): RdfCardinalityEstimate {\n if (Object.values(ids).some((id) => id === -1)) {\n return {\n rows: 0,\n source: 'exact-distinct-tuple-count',\n indexChoice,\n };\n }\n\n const conditions: string[] = [];\n const params: number[] = [];\n for (const key of TERM_KEYS) {\n const id = ids[key];\n if (id === undefined) {\n continue;\n }\n conditions.push(`${TERM_COLUMN[key]} = ?`);\n params.push(id);\n }\n\n const tupleProjection = distinctKeys.map((key) => TERM_COLUMN[key]).join(', ');\n const sql = `\n SELECT COUNT(*) AS count\n FROM (\n SELECT DISTINCT ${tupleProjection}\n FROM rdf_quads${conditions.length > 0 ? ` WHERE ${conditions.join(' AND ')}` : ''}\n ) distinct_tuple\n `;\n const row = this.requireDb().prepare<{ count: number }>(sql).get(...params);\n return {\n rows: row?.count ?? 0,\n source: 'exact-distinct-tuple-count',\n indexChoice,\n };\n }\n\n private countDistinctPattern(pattern: QuintPattern, distinctKey: PatternKey): number {\n const { joins, whereClause, params, unresolved } = this.buildWhereClause(pattern, true);\n if (unresolved) {\n return 0;\n }\n const row = this.requireDb()\n .prepare<{ count: number }>(`SELECT COUNT(DISTINCT rdf_quads.${TERM_COLUMN[distinctKey]}) AS count FROM rdf_quads${joins}${whereClause}`)\n .get(...params);\n return row?.count ?? 0;\n }\n\n private countDistinctTuplePattern(pattern: QuintPattern, distinctKeys: PatternKey[]): number {\n const { joins, whereClause, params, unresolved } = this.buildWhereClause(pattern, true);\n if (unresolved) {\n return 0;\n }\n const tupleProjection = distinctKeys.map((key) => `rdf_quads.${TERM_COLUMN[key]}`).join(', ');\n const row = this.requireDb()\n .prepare<{ count: number }>(`\n SELECT COUNT(*) AS count\n FROM (\n SELECT DISTINCT ${tupleProjection}\n FROM rdf_quads${joins}${whereClause}\n ) distinct_tuple\n `)\n .get(...params);\n return row?.count ?? 0;\n }\n\n private buildOrderClause(options?: RdfQuadScanOptions): { joins: string; orderBy: string } {\n if (!options?.order || options.order.length === 0) {\n return { joins: '', orderBy: '' };\n }\n const columns = options.order.map((termName) => TERM_COLUMN[termName as PatternKey]);\n if (columns.some((column) => !column)) {\n throw new Error(`Unsupported RDF quad order fields: ${options.order.join(', ')}`);\n }\n const joins = options.order.map((termName, index) => {\n const column = TERM_COLUMN[termName as PatternKey];\n const direction = options.orderDirections?.[index] ?? (options.reverse ? 'desc' : 'asc');\n return {\n join: ` JOIN rdf_terms order_t${index} ON order_t${index}.id = rdf_quads.${column}`,\n order: `order_t${index}.value${direction === 'desc' ? ' DESC' : ''}`,\n };\n });\n return {\n joins: joins.map((join) => join.join).join(''),\n orderBy: ` ORDER BY ${joins.map((join) => join.order).join(', ')}`,\n };\n }\n\n private paginationParamCount(options?: QueryOptions): number {\n return (options?.limit !== undefined ? 1 : 0) + (options?.offset !== undefined ? 1 : 0);\n }\n\n private rowsToQuads(rows: RdfQuadRow[]): Quad[] {\n const dictionary = this.requireDictionary();\n const termMap = dictionary.rowsForIds(rows.flatMap((row) => [\n row.graph_id,\n row.subject_id,\n row.predicate_id,\n row.object_id,\n ]));\n\n return rows.map((row) => DataFactory.quad(\n this.requiredTerm(termMap, row.subject_id) as any,\n this.requiredTerm(termMap, row.predicate_id) as any,\n this.requiredTerm(termMap, row.object_id) as any,\n this.requiredTerm(termMap, row.graph_id) as any,\n ));\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 index: ${id}`);\n }\n return term;\n }\n\n private metrics(\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 requireDb(): SqliteDatabase {\n if (!this.db) {\n throw new Error('RdfQuadIndex is not open');\n }\n return this.db;\n }\n\n private requireDictionary(): RdfTermDictionary {\n if (!this.dictionary) {\n throw new Error('RdfQuadIndex is not open');\n }\n return this.dictionary;\n }\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 rdfSpaceObjectKind(name: string, schemaType?: string, tableName?: string): RdfIndexSpaceObject['kind'] {\n if (schemaType === 'table' && name.startsWith('rdf_')) {\n return 'table';\n }\n if (schemaType === 'index' && (name.startsWith('rdf_') || tableName?.startsWith('rdf_'))) {\n return 'index';\n }\n if (name.startsWith('sqlite_')) {\n return 'internal';\n }\n return 'unknown';\n}\n\nfunction rdfTermKind(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\nfunction escapeLikePattern(value: string): string {\n return value.replace(/[\\\\%_]/g, (match) => `\\\\${match}`);\n}\n\nfunction uniqueNumbers(values: number[]): number[] {\n return [...new Set(values)];\n}\n\nfunction uniquePatternKeys(values: PatternKey[]): PatternKey[] {\n return TERM_KEYS.filter((key) => values.includes(key));\n}\n\nfunction uniqueVariableNames(values: string[]): string[] {\n return [...new Set(values)];\n}\n\nfunction joinSolutionMappingKeyExpression(\n variableColumns: Map<string, string>,\n variables: string[] | undefined,\n errorPrefix: string,\n): string {\n const variableNames = uniqueVariableNames(variables ?? [...variableColumns.keys()]);\n if (variableNames.length === 0) {\n return '1';\n }\n return variableNames.map((variableName) => {\n const column = variableColumns.get(variableName);\n if (!column) {\n throw new Error(`${errorPrefix} COUNT(DISTINCT *) cannot read unbound variable: ${variableName}`);\n }\n return column;\n }).join(` || ':' || `);\n}\n"]}
1
+ {"version":3,"file":"RdfQuadIndex.js","sourceRoot":"","sources":["../../../src/storage/rdf/RdfQuadIndex.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, mkdirSync } from 'node:fs';\nimport { dirname } from 'node:path';\nimport { DataFactory } from 'n3';\nimport type { Quad, Term } from '@rdfjs/types';\nimport { createSqliteRuntime, type SqliteDatabase } from '../SqliteRuntime';\nimport type { QueryOptions, QuintPattern, TermOperators } from '../quint/types';\nimport { isTerm } from '../quint/types';\nimport { RdfTermDictionary, rdfTermValueHead } from './RdfTermDictionary';\nimport { dropRdf3xDerivedSchemaObjects } from './Rdf3xSchema';\nimport { rdfSubjectStarJoinPlanMarker } from './RdfJoinShape';\nimport type {\n RdfCardinalityEstimate,\n RdfCardinalityDistributions,\n RdfCardinalityTerm,\n RdfIndexStats,\n RdfLiteralDatatypeDistribution,\n RdfIndexMetrics,\n RdfIndexPutOptions,\n RdfIndexSpaceObject,\n RdfQuadJoinAggregateOptions,\n RdfQuadJoinCountOptions,\n RdfQuadJoinGroupAggregateHaving,\n RdfQuadJoinGroupAggregateOptions,\n RdfQuadJoinOptions,\n RdfQuadJoinPattern,\n RdfQuadJoinScanResult,\n RdfQueryFilterOperator,\n RdfQuadTupleConstraintSource,\n RdfQuadIndexOptions,\n RdfQuadIndexScanResult,\n RdfQuadScanOptions,\n RdfQuadRow,\n RdfPatternQuery,\n RdfQueryAggregate,\n RdfSourceInput,\n RdfSourceRow,\n RdfTermKind,\n RdfTermRewriteInput,\n RdfTermRewriteResult,\n} from './types';\nimport { isRdfNumericDatatype, rdfNumericValue } from './RdfTermSemantics';\n\nconst XSD_INTEGER = 'http://www.w3.org/2001/XMLSchema#integer';\nconst XSD_DECIMAL = 'http://www.w3.org/2001/XMLSchema#decimal';\nconst XSD_STRING = 'http://www.w3.org/2001/XMLSchema#string';\nconst RDF_QUAD_INDEX_SCHEMA_VERSION = 1;\n\ntype IndexedColumn = 'graph_id' | 'subject_id' | 'predicate_id' | 'object_id';\ntype PatternKey = 'graph' | 'subject' | 'predicate' | 'object';\n\ninterface RdfWhereClause {\n joins: string;\n whereClause: string;\n params: unknown[];\n indexHint: string;\n queryPlan: string[];\n unresolved?: PatternKey;\n}\n\ninterface RdfCondition {\n joins: string[];\n sql?: string;\n params: unknown[];\n equality?: boolean;\n queryPlan: string[];\n unresolved?: boolean;\n}\n\ninterface RdfConditionScope {\n quadAlias?: string;\n aliasPrefix?: string;\n}\n\nconst TERM_COLUMN: Record<PatternKey, IndexedColumn> = {\n graph: 'graph_id',\n subject: 'subject_id',\n predicate: 'predicate_id',\n object: 'object_id',\n};\n\nconst TERM_KEYS: PatternKey[] = ['graph', 'subject', 'predicate', 'object'];\nconst TERM_IN_JOIN_THRESHOLD = 64;\n\nfunction emptyTermRewriteResult(): RdfTermRewriteResult {\n return {\n matchedTerms: 0,\n rewrittenTerms: 0,\n remappedTerms: 0,\n skippedTerms: [],\n affectedQuads: 0,\n };\n}\n\nexport class RdfQuadIndex {\n private readonly sqliteRuntime = createSqliteRuntime();\n private db: SqliteDatabase | null = null;\n private dictionary: RdfTermDictionary | null = null;\n private readonly cardinalityCache = new Map<string, RdfCardinalityEstimate>();\n\n public constructor(private readonly options: RdfQuadIndexOptions) {}\n\n public open(): void {\n if (this.db) {\n return;\n }\n\n if (this.options.path !== ':memory:') {\n const dir = dirname(this.options.path);\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n }\n\n this.db = this.sqliteRuntime.openDatabase(this.options.path);\n this.prepareSchemaVersion();\n this.dictionary = new RdfTermDictionary(this.db);\n this.dictionary.initialize();\n this.initializeSchema();\n }\n\n public close(): void {\n this.db?.close();\n this.db = null;\n this.dictionary = null;\n }\n\n public clear(): void {\n const db = this.requireDb();\n db.exec('DELETE FROM rdf_quads; DELETE FROM rdf_sources; DELETE FROM rdf_terms;');\n this.cardinalityCache.clear();\n this.bumpDataVersion();\n }\n\n public put(quad: Quad, options?: RdfIndexPutOptions): void {\n this.multiPut([quad], options);\n }\n\n public replaceSource(quads: Quad[], source: RdfSourceInput): void {\n const db = this.requireDb();\n db.transaction(() => {\n this.deleteSourceInternal(source.source);\n if (quads.length > 0) {\n this.insertQuads(quads, { source });\n } else {\n this.upsertSource(source);\n }\n })();\n this.cardinalityCache.clear();\n this.bumpDataVersion();\n }\n\n public deleteSource(source: string): number {\n const result = this.deleteSourceInternal(source);\n if (result > 0) {\n this.cardinalityCache.clear();\n this.bumpDataVersion();\n }\n return result;\n }\n\n public moveSource(oldSource: string, next: RdfSourceInput): number {\n const db = this.requireDb();\n let affectedRows = 0;\n db.transaction(() => {\n const oldRow = db\n .prepare<RdfSourceRow>('SELECT * FROM rdf_sources WHERE source = ?')\n .get(oldSource);\n if (!oldRow) {\n return;\n }\n\n const sourceQuadCount = db\n .prepare<{ count: number }>('SELECT COUNT(*) AS count FROM rdf_quads WHERE source_file_id = ?')\n .get(oldRow.id)?.count ?? 0;\n const targetRow = db\n .prepare<RdfSourceRow>('SELECT * FROM rdf_sources WHERE source = ?')\n .get(next.source);\n\n if (!targetRow || targetRow.id === oldRow.id) {\n this.updateSourceRow(oldRow.id, next);\n affectedRows = Math.max(sourceQuadCount, 1);\n return;\n }\n\n const movedQuads = db\n .prepare('UPDATE rdf_quads SET source_file_id = ? WHERE source_file_id = ?')\n .run(targetRow.id, oldRow.id).changes;\n this.updateSourceRow(targetRow.id, next);\n db.prepare('DELETE FROM rdf_sources WHERE id = ?').run(oldRow.id);\n affectedRows = Math.max(movedQuads, sourceQuadCount, 1);\n })();\n\n if (affectedRows > 0) {\n this.cardinalityCache.clear();\n this.bumpDataVersion();\n }\n return affectedRows;\n }\n\n private deleteSourceInternal(source: string): number {\n const db = this.requireDb();\n const row = db\n .prepare<{ id: number }>('SELECT id FROM rdf_sources WHERE source = ?')\n .get(source);\n if (!row) {\n return 0;\n }\n\n const deletedRows = db\n .prepare<{ count: number }>('SELECT COUNT(*) AS count FROM rdf_quads WHERE source_file_id = ?')\n .get(row.id)?.count ?? 0;\n db.prepare('DELETE FROM rdf_quads WHERE source_file_id = ?').run(row.id);\n db.prepare('DELETE FROM rdf_sources WHERE id = ?').run(row.id);\n return deletedRows;\n }\n\n public multiPut(quads: Quad[], options?: RdfIndexPutOptions): void {\n if (quads.length === 0) {\n return;\n }\n\n const db = this.requireDb();\n db.transaction(() => {\n this.insertQuads(quads, options);\n })();\n this.cardinalityCache.clear();\n this.bumpDataVersion();\n }\n\n private insertQuads(quads: Quad[], options?: RdfIndexPutOptions): void {\n const db = this.requireDb();\n const dictionary = this.requireDictionary();\n const sourceId = options?.source ? this.upsertSource(options.source) : null;\n const insert = db.prepare(`\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 (?, ?, ?, ?, ?, ?)\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\n for (const quad of quads) {\n insert.run(\n dictionary.getOrCreate(quad.graph),\n dictionary.getOrCreate(quad.subject),\n dictionary.getOrCreate(quad.predicate),\n dictionary.getOrCreate(quad.object),\n sourceId,\n options?.sourceLineNo ?? null,\n );\n }\n }\n\n public delete(pattern: QuintPattern): number {\n const changes = this.deleteInternal(pattern);\n if (changes > 0) {\n this.cardinalityCache.clear();\n this.bumpDataVersion();\n }\n return changes;\n }\n\n public applyDelta(deletes: QuintPattern[], inserts: Quad[], options?: RdfIndexPutOptions): { deletedRows: number; insertedRows: number } {\n if (deletes.length === 0 && inserts.length === 0) {\n return { deletedRows: 0, insertedRows: 0 };\n }\n\n const db = this.requireDb();\n let deletedRows = 0;\n db.transaction(() => {\n for (const pattern of deletes) {\n deletedRows += this.deleteInternal(pattern);\n }\n if (inserts.length > 0) {\n this.insertQuads(inserts, options);\n }\n })();\n if (deletedRows > 0 || inserts.length > 0) {\n this.cardinalityCache.clear();\n this.bumpDataVersion();\n }\n return {\n deletedRows,\n insertedRows: inserts.length,\n };\n }\n\n public rewriteTerms(input: RdfTermRewriteInput): RdfTermRewriteResult {\n const db = this.requireDb();\n const dictionary = this.requireDictionary();\n let result = emptyTermRewriteResult();\n db.transaction(() => {\n result = dictionary.rewriteNamedNodePrefix(input, { useTransaction: false });\n if (result.rewrittenTerms > 0 || result.remappedTerms > 0) {\n this.bumpDataVersion();\n }\n })();\n if (result.rewrittenTerms > 0 || result.remappedTerms > 0) {\n this.cardinalityCache.clear();\n }\n return result;\n }\n\n private deleteInternal(pattern: QuintPattern): number {\n const db = this.requireDb();\n const { joins, whereClause, params } = this.buildWhereClause(pattern, false);\n if (!whereClause) {\n const deletedRows = db.prepare<{ count: number }>('SELECT COUNT(*) AS count FROM rdf_quads').get()?.count ?? 0;\n db.prepare('DELETE FROM rdf_quads').run();\n return deletedRows;\n }\n const deletedRows = db.prepare<{ count: number }>(`SELECT COUNT(*) AS count FROM rdf_quads${joins}${whereClause}`).get(...params)?.count ?? 0;\n const sql = joins\n ? `DELETE FROM rdf_quads WHERE rowid IN (SELECT rdf_quads.rowid FROM rdf_quads${joins}${whereClause})`\n : `DELETE FROM rdf_quads${whereClause}`;\n db.prepare(sql).run(...params);\n return deletedRows;\n }\n\n public dataVersion(): number {\n const row = this.requireDb()\n .prepare<{ value: string }>(\"SELECT value FROM rdf_index_metadata WHERE key = 'data_version'\")\n .get();\n return Number(row?.value ?? 0) || 0;\n }\n\n public scan(pattern: QuintPattern | RdfPatternQuery, options?: RdfQuadScanOptions): RdfQuadIndexScanResult {\n if (isRdfPatternQueryInput(pattern)) {\n return this.scanInternal(pattern.pattern, options ?? pattern.options as RdfQuadScanOptions | undefined);\n }\n return this.scanInternal(pattern, options);\n }\n\n public scanWithTupleConstraints(\n pattern: QuintPattern,\n tupleSource: RdfQuadTupleConstraintSource,\n options?: RdfQuadScanOptions,\n ): RdfQuadIndexScanResult {\n return this.scanInternal(pattern, options, tupleSource);\n }\n\n public joinPatterns(patterns: RdfQuadJoinPattern[], options?: RdfQuadJoinOptions): RdfQuadJoinScanResult {\n const start = Date.now();\n if (patterns.length === 0) {\n return {\n bindings: [],\n metrics: this.metrics('none', 0, 0, start, ['JoinBGP(empty)']),\n };\n }\n\n const compiled = this.compileJoinPatterns(patterns, options);\n if (compiled.unresolved) {\n return {\n bindings: [],\n metrics: this.metrics('none', 0, 0, start, [...compiled.queryPlan, `unresolved ${compiled.unresolved}`]),\n };\n }\n\n const rows = this.requireDb().prepare<Record<string, number>>(compiled.sql).all(...compiled.params);\n const matchedRows = compiled.countSql\n ? this.requireDb().prepare<{ count: number }>(compiled.countSql).get(...compiled.countParams)?.count ?? 0\n : rows.length;\n return {\n bindings: this.joinRowsToBindings(rows, compiled.variableAliases),\n metrics: this.metrics(\n compiled.indexChoice,\n matchedRows,\n rows.length,\n start,\n [...compiled.queryPlan, compiled.sql],\n ),\n };\n }\n\n public countJoinPatterns(\n patterns: RdfQuadJoinPattern[],\n options: RdfQuadJoinCountOptions,\n ): RdfQuadJoinScanResult {\n return this.aggregateJoinPatternsInternal(patterns, options, 'JoinCount');\n }\n\n public aggregateJoinPatterns(\n patterns: RdfQuadJoinPattern[],\n options: RdfQuadJoinAggregateOptions,\n ): RdfQuadJoinScanResult {\n return this.aggregateJoinPatternsInternal(patterns, options, 'JoinAggregate');\n }\n\n private aggregateJoinPatternsInternal(\n patterns: RdfQuadJoinPattern[],\n options: RdfQuadJoinAggregateOptions,\n label: 'JoinCount' | 'JoinAggregate',\n ): RdfQuadJoinScanResult {\n const start = Date.now();\n if (patterns.length === 0) {\n return {\n bindings: [],\n metrics: this.metrics('none', 0, 0, start, [`${label}(empty)`]),\n };\n }\n\n const compiled = this.compileJoinPatterns(patterns);\n if (compiled.unresolved) {\n return {\n bindings: [],\n metrics: this.metrics('none', 0, 0, start, [...compiled.queryPlan, `unresolved ${compiled.unresolved}`]),\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 projection = options.aggregates.map((aggregate, index) => {\n const alias = `a${index}`;\n aggregateAliases.set(aggregate.as, alias);\n return this.buildJoinAggregateColumn(\n aggregate,\n alias,\n compiled.variableColumns,\n aggregateTypes,\n numericJoins,\n numericJoinSql,\n 'RDF BGP',\n );\n }).join(', ');\n const aggregateJoins = numericJoinSql.join('');\n const sql = `SELECT ${projection} FROM ${compiled.from}${compiled.joins}${aggregateJoins}${compiled.whereClause}`;\n const rows = this.requireDb().prepare<Record<string, number>>(sql).all(...compiled.params);\n const matchedRows = this.requireDb()\n .prepare<{ count: number }>(`SELECT COUNT(*) AS count FROM ${compiled.from}${compiled.joins}${aggregateJoins}${compiled.whereClause}`)\n .get(...compiled.params)?.count ?? 0;\n return {\n bindings: this.joinRowsToBindings(rows, compiled.variableAliases, aggregateAliases, aggregateTypes),\n metrics: this.metrics(\n compiled.indexChoice,\n matchedRows,\n rows.length,\n start,\n [\n ...compiled.queryPlan,\n ...(numericJoinSql.length > 0 ? [`JoinAggregateNumeric(${[...numericJoins.keys()].map((variableName) => `?${variableName}`).join(',')})`] : []),\n `${label}(${options.aggregates.map((aggregate) => (\n `${aggregate.type}${aggregate.distinct ? ':DISTINCT' : ''}(${aggregate.variable ? `?${aggregate.variable}` : '*'})`\n )).join(',')})`,\n sql,\n ],\n ),\n };\n }\n\n public groupCountJoinPatterns(\n patterns: RdfQuadJoinPattern[],\n options: RdfQuadJoinGroupAggregateOptions,\n ): RdfQuadJoinScanResult {\n return this.groupAggregateJoinPatternsInternal(patterns, options, 'JoinGroupCount');\n }\n\n public groupAggregateJoinPatterns(\n patterns: RdfQuadJoinPattern[],\n options: RdfQuadJoinGroupAggregateOptions,\n ): RdfQuadJoinScanResult {\n return this.groupAggregateJoinPatternsInternal(patterns, options, 'JoinGroupAggregate');\n }\n\n private groupAggregateJoinPatternsInternal(\n patterns: RdfQuadJoinPattern[],\n options: RdfQuadJoinGroupAggregateOptions,\n label: 'JoinGroupCount' | 'JoinGroupAggregate',\n ): RdfQuadJoinScanResult {\n const start = Date.now();\n if (patterns.length === 0) {\n return {\n bindings: [],\n metrics: this.metrics('none', 0, 0, start, [`${label}(empty)`]),\n };\n }\n\n const compiled = this.compileJoinPatterns(patterns);\n if (compiled.unresolved) {\n return {\n bindings: [],\n metrics: this.metrics('none', 0, 0, start, [...compiled.queryPlan, `unresolved ${compiled.unresolved}`]),\n };\n }\n\n const aggregateAliases = new Map<string, string>();\n const aggregateSqlAliases = 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 groupColumns = options.groupBy.map((variableName) => {\n const column = compiled.variableColumns.get(variableName);\n if (!column) {\n throw new Error(`RDF BGP group aggregate cannot group by unbound variable: ${variableName}`);\n }\n return column;\n });\n const aggregateColumns = options.aggregates.map((aggregate, index) => {\n const alias = `a${index}`;\n aggregateAliases.set(aggregate.as, alias);\n aggregateSqlAliases.set(aggregate.as, alias);\n return this.buildJoinAggregateColumn(\n aggregate,\n alias,\n compiled.variableColumns,\n aggregateTypes,\n numericJoins,\n numericJoinSql,\n 'RDF BGP group aggregate',\n );\n });\n const projection = [\n ...options.groupBy.map((variableName) => {\n const alias = compiled.variableAliases.get(variableName);\n const column = compiled.variableColumns.get(variableName);\n if (!alias || !column) {\n throw new Error(`RDF BGP group aggregate cannot project unbound group variable: ${variableName}`);\n }\n return `${column} AS ${alias}`;\n }),\n ...aggregateColumns,\n ].join(', ');\n const groupBy = groupColumns.join(', ');\n const aggregateJoins = numericJoinSql.join('');\n const havingClause = this.buildGroupAggregateHavingClause(options.having, aggregateSqlAliases);\n const orderScope = this.buildGroupAggregateOrderScope(options, compiled.variableColumns, aggregateSqlAliases);\n const fromSql = `${compiled.from}${compiled.joins}${aggregateJoins}${compiled.whereClause}`;\n const sourceFromSql = `${compiled.from}${compiled.joins}${aggregateJoins}${orderScope.joins}${compiled.whereClause}`;\n const sourceSql = `SELECT ${projection} FROM ${sourceFromSql} GROUP BY ${groupBy}${havingClause.sql}`;\n const orderClause = orderScope.orderBy;\n let sql = `${sourceSql}${orderClause}`;\n const params = [...compiled.params, ...havingClause.params];\n const paginated = options.limit !== undefined || options.offset !== undefined;\n if (options.limit !== undefined) {\n sql += ' LIMIT ?';\n params.push(options.limit);\n }\n if (options.offset !== undefined) {\n if (options.limit === undefined) {\n sql += ' LIMIT -1';\n }\n sql += ' OFFSET ?';\n params.push(options.offset);\n }\n const rows = this.requireDb().prepare<Record<string, number>>(sql).all(...params);\n const matchedRows = this.requireDb()\n .prepare<{ count: number }>(`SELECT COUNT(*) AS count FROM ${fromSql}`)\n .get(...compiled.params)?.count ?? 0;\n return {\n bindings: this.joinRowsToBindings(rows, compiled.variableAliases, aggregateAliases, aggregateTypes),\n metrics: this.metrics(\n compiled.indexChoice,\n matchedRows,\n rows.length,\n start,\n [\n ...compiled.queryPlan,\n ...(numericJoinSql.length > 0 ? [`JoinGroupAggregateNumeric(${[...numericJoins.keys()].map((variableName) => `?${variableName}`).join(',')})`] : []),\n `${label}(${options.groupBy.map((variableName) => `?${variableName}`).join(',')})`,\n ...(havingClause.sql ? [`${label}Having(${(options.having ?? []).map((entry) => `${entry.aggregate}${entry.operator}`).join(',')})`] : []),\n ...(orderClause ? [`${label}Order(${(options.orderBy ?? []).map((entry) => `${entry.direction ?? 'asc'}:${entry.variable}`).join(',')})`] : []),\n ...(paginated ? [`${label}Limit`] : []),\n sql,\n ],\n ),\n };\n }\n\n private scanInternal(\n pattern: QuintPattern,\n options?: RdfQuadScanOptions,\n tupleSource?: RdfQuadTupleConstraintSource,\n ): RdfQuadIndexScanResult {\n const start = Date.now();\n const { joins, whereClause, params, indexHint, queryPlan, unresolved } = this.buildWhereClause(pattern, true);\n if (unresolved) {\n return {\n quads: [],\n metrics: this.metrics(indexHint, 0, 0, start, [...queryPlan, `unresolved ${unresolved}`]),\n };\n }\n\n const orderClause = this.buildOrderClause(options);\n const tupleJoin = tupleSource ? this.buildTupleConstraintJoin(tupleSource) : undefined;\n let sql = `SELECT rdf_quads.graph_id, rdf_quads.subject_id, rdf_quads.predicate_id, rdf_quads.object_id, rdf_quads.source_file_id, rdf_quads.source_line_no FROM rdf_quads${joins}${tupleJoin?.join ?? ''}${orderClause.joins}`;\n if (whereClause) {\n sql += whereClause;\n }\n\n if (orderClause.orderBy) {\n sql += orderClause.orderBy;\n }\n\n if (options?.limit !== undefined) {\n sql += ' LIMIT ?';\n params.push(options.limit);\n }\n if (options?.offset !== undefined) {\n if (options.limit === undefined) {\n sql += ' LIMIT -1';\n }\n sql += ' OFFSET ?';\n params.push(options.offset);\n }\n\n const countSql = `SELECT COUNT(*) AS count FROM rdf_quads${joins}${tupleJoin?.join ?? ''}${orderClause.joins}${whereClause}`;\n const countParams = [...params.slice(0, params.length - this.paginationParamCount(options))];\n const countRow = this.requireDb().prepare<{ count: number }>(countSql).get(...countParams);\n const matchedRows = countRow?.count ?? 0;\n const rows = this.requireDb().prepare<RdfQuadRow>(sql).all(...params);\n return {\n quads: this.rowsToQuads(rows),\n metrics: this.metrics(indexHint, matchedRows, rows.length, start, [\n ...queryPlan,\n ...(tupleJoin ? [`TupleValuesJoin(${tupleSource?.columns.join(',')})`] : []),\n sql,\n ]),\n };\n }\n\n private compileJoinPatterns(patterns: RdfQuadJoinPattern[], options?: RdfQuadJoinOptions): {\n from: string;\n joins: string;\n whereClause: string;\n sql: string;\n params: unknown[];\n countSql?: string;\n countParams: unknown[];\n indexChoice: string;\n queryPlan: string[];\n variableColumns: Map<string, string>;\n variableAliases: Map<string, string>;\n unresolved?: PatternKey;\n } {\n const from = 'rdf_quads q0';\n const joins: string[] = [];\n const conditions: string[] = [];\n const params: unknown[] = [];\n const queryPlan: string[] = [\n `JoinBGP(${patterns.length})`,\n ...rdfSubjectStarJoinPlanMarker('SubjectStarJoin', patterns),\n ];\n const variableColumns = new Map<string, string>();\n const variableAliases = new Map<string, string>();\n const indexChoices: string[] = [];\n\n for (const [patternIndex, entry] of patterns.entries()) {\n const alias = `q${patternIndex}`;\n if (patternIndex > 0) {\n joins.push(` JOIN rdf_quads ${alias} ON 1 = 1`);\n }\n const equalityColumns = new Set<IndexedColumn>();\n\n for (const key of TERM_KEYS) {\n const match = entry.pattern[key];\n const column = `${alias}.${TERM_COLUMN[key]}`;\n const variableName = entry.variables[key];\n if (variableName) {\n const existingColumn = variableColumns.get(variableName);\n if (existingColumn) {\n conditions.push(`${existingColumn} = ${column}`);\n } else {\n variableColumns.set(variableName, column);\n }\n }\n if (!match) {\n continue;\n }\n const condition = this.matchToJoinCondition(key, alias, TERM_COLUMN[key], match, true);\n if (condition.unresolved) {\n return {\n from,\n joins: joins.join(''),\n whereClause: '',\n sql: '',\n params: [],\n countParams: [],\n indexChoice: 'none',\n queryPlan,\n variableColumns,\n variableAliases,\n unresolved: key,\n };\n }\n joins.push(...condition.joins);\n if (condition.sql) {\n conditions.push(condition.sql);\n params.push(...condition.params);\n }\n queryPlan.push(...condition.queryPlan);\n if (condition.equality) {\n equalityColumns.add(TERM_COLUMN[key]);\n }\n }\n indexChoices.push(this.chooseIndex(equalityColumns));\n }\n\n const projectVariables = options?.project ?? [...variableColumns.keys()];\n const projectionColumns = projectVariables.map((variableName) => {\n const column = variableColumns.get(variableName);\n if (!column) {\n throw new Error(`RDF BGP join cannot project unbound variable: ${variableName}`);\n }\n const columnAlias = `v${variableAliases.size}`;\n variableAliases.set(variableName, columnAlias);\n return `${column} AS ${columnAlias}`;\n });\n const projection = projectionColumns.length > 0\n ? `${options?.distinct ? 'DISTINCT ' : ''}${projectionColumns.join(', ')}`\n : `${options?.distinct ? 'DISTINCT ' : ''}1 AS __empty`;\n const orderClause = this.buildJoinOrderClause(options, variableColumns);\n const whereClause = conditions.length > 0 ? ` WHERE ${conditions.join(' AND ')}` : '';\n let sql = `SELECT ${projection} FROM ${from}${joins.join('')}${orderClause.joins}${whereClause}${orderClause.orderBy}`;\n const sqlParams = [...params];\n const paginated = options?.limit !== undefined || options?.offset !== undefined;\n const countMatchedRows = options?.countMatchedRows ?? true;\n if (options?.limit !== undefined) {\n sql += ' LIMIT ?';\n sqlParams.push(options.limit);\n }\n if (options?.offset !== undefined) {\n if (options.limit === undefined) {\n sql += ' LIMIT -1';\n }\n sql += ' OFFSET ?';\n sqlParams.push(options.offset);\n }\n if (orderClause.orderBy) {\n queryPlan.push(`JoinOrder(${(options?.orderBy ?? []).map((entry) => `${entry.direction ?? 'asc'}:${entry.variable}`).join(',')})`);\n }\n if (options?.distinct) {\n queryPlan.push(`JoinDistinct(${projectVariables.map((variableName) => `?${variableName}`).join(',')})`);\n }\n if (paginated) {\n queryPlan.push('JoinLimit');\n }\n return {\n from,\n joins: joins.join(''),\n whereClause,\n sql,\n params: sqlParams,\n countSql: paginated && countMatchedRows ? `SELECT COUNT(*) AS count FROM ${from}${joins.join('')}${whereClause}` : undefined,\n countParams: params,\n indexChoice: `JoinBGP(${indexChoices.join('>')})`,\n queryPlan,\n variableColumns,\n variableAliases,\n };\n }\n\n private buildJoinOrderClause(\n options: RdfQuadJoinOptions | undefined,\n variableColumns: Map<string, string>,\n ): { joins: string; orderBy: string } {\n if (!options?.orderBy || options.orderBy.length === 0) {\n return { joins: '', orderBy: '' };\n }\n\n const joins = options.orderBy.map((entry, index) => {\n const column = variableColumns.get(entry.variable);\n if (!column) {\n throw new Error(`RDF BGP join cannot order by unbound variable: ${entry.variable}`);\n }\n const alias = `join_order_t${index}`;\n return {\n join: ` JOIN rdf_terms ${alias} ON ${alias}.id = ${column}`,\n order: `${alias}.value${entry.direction === 'desc' ? ' DESC' : ''}`,\n };\n });\n return {\n joins: joins.map((entry) => entry.join).join(''),\n orderBy: ` ORDER BY ${joins.map((entry) => entry.order).join(', ')}`,\n };\n }\n\n private buildJoinAggregateColumn(\n aggregate: RdfQueryAggregate,\n alias: string,\n variableColumns: Map<string, string>,\n aggregateTypes: Map<string, 'integer' | 'decimal'>,\n numericJoins: Map<string, string>,\n numericJoinSql: string[],\n errorPrefix: string,\n ): string {\n if (aggregate.type === 'count' && !aggregate.variable) {\n aggregateTypes.set(aggregate.as, 'integer');\n return `${aggregate.distinct ? `COUNT(DISTINCT ${joinSolutionMappingKeyExpression(variableColumns, aggregate.distinctVariables, errorPrefix)})` : 'COUNT(*)'} AS ${alias}`;\n }\n if (!aggregate.variable) {\n throw new Error(`${errorPrefix} ${aggregate.type} aggregate requires a bound variable`);\n }\n const column = variableColumns.get(aggregate.variable);\n if (!column) {\n throw new Error(`${errorPrefix} aggregate cannot read unbound variable: ${aggregate.variable}`);\n }\n if (aggregate.type === 'count') {\n aggregateTypes.set(aggregate.as, 'integer');\n return `COUNT(${aggregate.distinct ? 'DISTINCT ' : ''}${column}) AS ${alias}`;\n }\n if (aggregate.distinct) {\n throw new Error(`${errorPrefix} ${aggregate.type} DISTINCT aggregate is not supported in SQL 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 = ${column} AND ${termAlias}.kind = 'literal' AND ${termAlias}.numeric_value IS NOT NULL`);\n }\n switch (aggregate.type) {\n case 'sum':\n return `COALESCE(SUM(${termAlias}.numeric_value), 0) AS ${alias}`;\n case 'avg':\n return `AVG(${termAlias}.numeric_value) AS ${alias}`;\n case 'min':\n return `MIN(${termAlias}.numeric_value) AS ${alias}`;\n case 'max':\n return `MAX(${termAlias}.numeric_value) AS ${alias}`;\n default: {\n const exhaustive: never = aggregate.type;\n throw new Error(`Unsupported RDF BGP aggregate type: ${exhaustive}`);\n }\n }\n }\n\n private buildGroupCountHavingClause(\n having: RdfQuadJoinGroupAggregateHaving[] | undefined,\n aggregateAliases: Map<string, string>,\n ): { sql: string; params: number[] } {\n return this.buildGroupAggregateHavingClause(having, aggregateAliases);\n }\n\n private buildGroupAggregateHavingClause(\n having: RdfQuadJoinGroupAggregateHaving[] | undefined,\n aggregateAliases: Map<string, string>,\n ): { sql: string; params: number[] } {\n if (!having || having.length === 0) {\n return { sql: '', params: [] };\n }\n\n const conditions: string[] = [];\n const params: number[] = [];\n for (const entry of having) {\n const alias = aggregateAliases.get(entry.aggregate);\n if (!alias) {\n throw new Error(`RDF BGP group count cannot HAVING on unknown aggregate: ${entry.aggregate}`);\n }\n conditions.push(`${alias} ${this.havingSqlOperator(entry.operator)} ?`);\n params.push(entry.value);\n }\n return {\n sql: ` HAVING ${conditions.join(' AND ')}`,\n params,\n };\n }\n\n private havingSqlOperator(operator: RdfQuadJoinGroupAggregateHaving['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 const exhaustive: never = operator;\n throw new Error(`Unsupported RDF BGP group count HAVING operator: ${exhaustive}`);\n }\n }\n }\n\n private buildGroupCountOrderScope(\n options: RdfQuadJoinGroupAggregateOptions,\n variableColumns: Map<string, string>,\n aggregateAliases: Map<string, string>,\n ): { joins: string; orderBy: string } {\n return this.buildGroupAggregateOrderScope(options, variableColumns, aggregateAliases);\n }\n\n private buildGroupAggregateOrderScope(\n options: RdfQuadJoinGroupAggregateOptions,\n variableColumns: Map<string, string>,\n aggregateAliases: Map<string, string>,\n ): { joins: string; orderBy: string } {\n if (!options.orderBy || options.orderBy.length === 0) {\n return { joins: '', orderBy: '' };\n }\n\n const joins: string[] = [];\n const orders = options.orderBy.map((entry, index) => {\n const aggregateAlias = aggregateAliases.get(entry.variable);\n if (aggregateAlias) {\n return `${aggregateAlias}${entry.direction === 'desc' ? ' DESC' : ''}`;\n }\n const column = variableColumns.get(entry.variable);\n if (!column) {\n throw new Error(`RDF BGP group count cannot order by unbound variable: ${entry.variable}`);\n }\n const alias = `group_order_t${index}`;\n joins.push(` JOIN rdf_terms ${alias} ON ${alias}.id = ${column}`);\n return `${alias}.value${entry.direction === 'desc' ? ' DESC' : ''}`;\n });\n return {\n joins: joins.join(''),\n orderBy: ` ORDER BY ${orders.join(', ')}`,\n };\n }\n\n private matchToJoinCondition(\n key: PatternKey,\n alias: string,\n columnName: IndexedColumn,\n match: unknown,\n allowUnresolved: boolean,\n ): RdfCondition {\n return this.matchToCondition(key, columnName, match, allowUnresolved, {\n quadAlias: alias,\n aliasPrefix: alias,\n });\n }\n\n private joinRowsToBindings(\n rows: Array<Record<string, number>>,\n variableAliases: Map<string, string>,\n aggregateAliases?: Map<string, string>,\n aggregateTypes?: Map<string, 'integer' | 'decimal'>,\n ): RdfQuadJoinScanResult['bindings'] {\n const aliases = [...variableAliases.entries()];\n const termMap = this.requireDictionary().rowsForIds(rows.flatMap((row) => (\n aliases\n .map(([, alias]) => row[alias])\n .filter((id): id is number => typeof id === 'number')\n )));\n\n return rows.map((row) => {\n const binding: RdfQuadJoinScanResult['bindings'][number] = {};\n for (const [variableName, alias] of aliases) {\n const id = row[alias];\n if (typeof id !== 'number') {\n continue;\n }\n binding[variableName] = this.requiredTerm(termMap, id);\n }\n for (const [variableName, alias] of aggregateAliases ?? []) {\n const value = row[alias];\n if (typeof value === 'number') {\n const datatype = aggregateTypes?.get(variableName) === 'decimal' ? XSD_DECIMAL : XSD_INTEGER;\n binding[variableName] = DataFactory.literal(String(value), DataFactory.namedNode(datatype)) as Term;\n }\n }\n return binding;\n });\n }\n\n public count(pattern: QuintPattern): number {\n const { joins, whereClause, params, unresolved } = this.buildWhereClause(pattern, true);\n if (unresolved) {\n return 0;\n }\n const row = this.requireDb()\n .prepare<{ count: number }>(`SELECT COUNT(*) AS count FROM rdf_quads${joins}${whereClause}`)\n .get(...params);\n return row?.count ?? 0;\n }\n\n public estimateCardinality(pattern: QuintPattern): RdfCardinalityEstimate {\n const exact = this.exactTermPattern(pattern);\n if (!exact) {\n return {\n rows: this.count(pattern),\n source: 'exact-count',\n indexChoice: this.buildWhereClause(pattern, true).indexHint,\n };\n }\n\n const cacheKey = exact.cacheKey;\n const cached = this.cardinalityCache.get(cacheKey);\n if (cached) {\n return {\n ...cached,\n source: 'cached-exact-count',\n };\n }\n\n const estimate = this.countExactTermPattern(exact.ids, exact.indexChoice);\n this.cardinalityCache.set(cacheKey, estimate);\n return estimate;\n }\n\n public countDistinct(pattern: QuintPattern, distinctKey: PatternKey): RdfCardinalityEstimate {\n const exact = this.exactTermPattern(pattern);\n if (!exact) {\n const count = this.countDistinctPattern(pattern, distinctKey);\n return {\n rows: count,\n source: 'exact-distinct-count',\n indexChoice: this.buildWhereClause(pattern, true).indexHint,\n };\n }\n\n const cacheKey = `distinct:${distinctKey}|${exact.cacheKey}`;\n const cached = this.cardinalityCache.get(cacheKey);\n if (cached) {\n return {\n ...cached,\n source: 'cached-exact-distinct-count',\n };\n }\n\n const estimate = this.countExactDistinctTermPattern(exact.ids, exact.indexChoice, distinctKey);\n this.cardinalityCache.set(cacheKey, estimate);\n return estimate;\n }\n\n public countDistinctTuple(pattern: QuintPattern, distinctKeys: PatternKey[]): RdfCardinalityEstimate {\n const keys = uniquePatternKeys(distinctKeys);\n if (keys.length === 0) {\n return this.estimateCardinality(pattern);\n }\n if (keys.length === 1) {\n return this.countDistinct(pattern, keys[0]);\n }\n\n const exact = this.exactTermPattern(pattern);\n if (!exact) {\n const count = this.countDistinctTuplePattern(pattern, keys);\n return {\n rows: count,\n source: 'exact-distinct-tuple-count',\n indexChoice: this.buildWhereClause(pattern, true).indexHint,\n };\n }\n\n const cacheKey = `distinct-tuple:${keys.join(',')}|${exact.cacheKey}`;\n const cached = this.cardinalityCache.get(cacheKey);\n if (cached) {\n return {\n ...cached,\n source: 'cached-exact-distinct-tuple-count',\n };\n }\n\n const estimate = this.countExactDistinctTupleTermPattern(exact.ids, exact.indexChoice, keys);\n this.cardinalityCache.set(cacheKey, estimate);\n return estimate;\n }\n\n public stats(): RdfIndexStats {\n const db = this.requireDb();\n const spaceObjects = this.collectSpaceObjects();\n const databaseBytes = this.estimateDatabaseBytes();\n const accountedBytes = spaceObjects.reduce((sum, object) => sum + object.bytes, 0);\n return {\n termCount: this.requireDictionary().count(),\n quadCount: db.prepare<{ count: number }>('SELECT COUNT(*) AS count FROM rdf_quads').get()?.count ?? 0,\n sourceCount: db.prepare<{ count: number }>('SELECT COUNT(*) AS count FROM rdf_sources').get()?.count ?? 0,\n graphCount: db.prepare<{ count: number }>('SELECT COUNT(DISTINCT graph_id) AS count FROM rdf_quads').get()?.count ?? 0,\n databaseBytes: accountedBytes || databaseBytes,\n tableBytes: sumSpaceObjects(spaceObjects, 'table'),\n indexBytes: sumSpaceObjects(spaceObjects, 'index'),\n spaceObjects,\n serializedTermTextBytes: this.estimateSerializedTextBytes(),\n literalDatatypeDistribution: this.literalDatatypeDistribution(),\n cardinalityDistributions: this.cardinalityDistributions(),\n };\n }\n\n public cardinalityDistributions(limit = 100): RdfCardinalityDistributions {\n return {\n graphs: this.graphCardinalityDistribution(limit),\n predicates: this.predicateCardinalityDistribution(limit),\n predicateObjects: this.predicateObjectCardinalityDistribution(limit),\n subjectPredicates: this.subjectPredicateCardinalityDistribution(limit),\n };\n }\n\n public literalDatatypeDistribution(): RdfLiteralDatatypeDistribution[] {\n const rows = this.requireDb().prepare<{\n datatype: string | null;\n term_count: number;\n object_quad_count: number | null;\n }>(`\n SELECT\n COALESCE(datatype.value, 'http://www.w3.org/2001/XMLSchema#string') 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_quads quad ON quad.object_id = literal.id\n WHERE literal.kind = 'literal'\n GROUP BY datatype\n ORDER BY object_quad_count DESC, term_count DESC, datatype ASC\n `).all();\n return rows.map((row) => ({\n datatype: row.datatype ?? 'http://www.w3.org/2001/XMLSchema#string',\n termCount: row.term_count,\n objectQuadCount: row.object_quad_count ?? 0,\n }));\n }\n\n private graphCardinalityDistribution(limit: number): RdfCardinalityDistributions['graphs'] {\n const rows = this.requireDb().prepare<{\n graph_id: number;\n quad_count: number;\n distinct_subjects: number;\n distinct_predicates: number;\n distinct_objects: number;\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_quads\n GROUP BY graph_id\n ORDER BY quad_count DESC, graph_id ASC\n LIMIT ?\n `).all(limit);\n const termMap = this.requireDictionary().rowsForIds(rows.map((row) => row.graph_id));\n return rows.map((row) => ({\n graph: this.cardinalityTerm(termMap, row.graph_id),\n quadCount: row.quad_count,\n distinctSubjects: row.distinct_subjects,\n distinctPredicates: row.distinct_predicates,\n distinctObjects: row.distinct_objects,\n }));\n }\n\n private predicateCardinalityDistribution(limit: number): RdfCardinalityDistributions['predicates'] {\n const rows = this.requireDb().prepare<{\n predicate_id: number;\n quad_count: number;\n graph_count: number;\n distinct_subjects: number;\n distinct_objects: number;\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_quads\n GROUP BY predicate_id\n ORDER BY quad_count DESC, predicate_id ASC\n LIMIT ?\n `).all(limit);\n const termMap = this.requireDictionary().rowsForIds(rows.map((row) => row.predicate_id));\n return rows.map((row) => ({\n predicate: this.cardinalityTerm(termMap, row.predicate_id),\n quadCount: row.quad_count,\n graphCount: row.graph_count,\n distinctSubjects: row.distinct_subjects,\n distinctObjects: row.distinct_objects,\n }));\n }\n\n private predicateObjectCardinalityDistribution(limit: number): RdfCardinalityDistributions['predicateObjects'] {\n const rows = this.requireDb().prepare<{\n predicate_id: number;\n object_id: number;\n quad_count: number;\n graph_count: number;\n distinct_subjects: number;\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_quads\n GROUP BY predicate_id, object_id\n ORDER BY quad_count DESC, predicate_id ASC, object_id ASC\n LIMIT ?\n `).all(limit);\n const termMap = this.requireDictionary().rowsForIds(rows.flatMap((row) => [row.predicate_id, row.object_id]));\n return rows.map((row) => ({\n predicate: this.cardinalityTerm(termMap, row.predicate_id),\n object: this.cardinalityTerm(termMap, row.object_id),\n quadCount: row.quad_count,\n graphCount: row.graph_count,\n distinctSubjects: row.distinct_subjects,\n }));\n }\n\n private subjectPredicateCardinalityDistribution(limit: number): RdfCardinalityDistributions['subjectPredicates'] {\n const rows = this.requireDb().prepare<{\n subject_id: number;\n predicate_id: number;\n quad_count: number;\n graph_count: number;\n distinct_objects: number;\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_quads\n GROUP BY subject_id, predicate_id\n ORDER BY quad_count DESC, subject_id ASC, predicate_id ASC\n LIMIT ?\n `).all(limit);\n const termMap = this.requireDictionary().rowsForIds(rows.flatMap((row) => [row.subject_id, row.predicate_id]));\n return rows.map((row) => ({\n subject: this.cardinalityTerm(termMap, row.subject_id),\n predicate: this.cardinalityTerm(termMap, row.predicate_id),\n quadCount: row.quad_count,\n graphCount: row.graph_count,\n distinctObjects: row.distinct_objects,\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: rdfTermKind(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 public estimateSerializedTextBytes(): number {\n const db = this.requireDb();\n const row = db.prepare<{ bytes: number | null }>(`\n SELECT\n COALESCE(SUM(length(value)), 0) +\n COALESCE(SUM(CASE WHEN lang IS NULL THEN 0 ELSE length(lang) END), 0) AS bytes\n FROM rdf_terms\n `).get();\n return row?.bytes ?? 0;\n }\n\n public estimateDatabaseBytes(): number {\n const db = this.requireDb();\n try {\n const pageCount = db.prepare<{ page_count: number }>('PRAGMA page_count').get()?.page_count ?? 0;\n const pageSize = db.prepare<{ page_size: number }>('PRAGMA page_size').get()?.page_size ?? 0;\n return pageCount * pageSize;\n } catch {\n return 0;\n }\n }\n\n public collectSpaceObjects(): RdfIndexSpaceObject[] {\n const db = this.requireDb();\n try {\n const schemaRows = db.prepare<{ name: string; type: string; tbl_name: string }>(`\n SELECT name, type, tbl_name\n FROM sqlite_schema\n WHERE type IN ('table', 'index')\n AND (\n name IN ('rdf_terms', 'rdf_sources', 'rdf_quads')\n OR tbl_name IN ('rdf_terms', 'rdf_sources', 'rdf_quads')\n )\n `).all();\n const schema = new Map(schemaRows.map((row) => [row.name, row]));\n try {\n const rows = db.prepare<{ name: string; pages: number; bytes: number | null }>(`\n SELECT name, COUNT(*) AS pages, SUM(pgsize) AS bytes\n FROM dbstat\n WHERE name IN (\n SELECT name\n FROM sqlite_schema\n WHERE type IN ('table', 'index')\n AND (\n name IN ('rdf_terms', 'rdf_sources', 'rdf_quads')\n OR tbl_name IN ('rdf_terms', 'rdf_sources', 'rdf_quads')\n )\n )\n GROUP BY name\n ORDER BY name\n `).all();\n\n if (rows.length > 0) {\n return rows.map((row) => {\n const object = schema.get(row.name);\n const kind = rdfSpaceObjectKind(row.name, object?.type, object?.tbl_name);\n return {\n name: row.name,\n kind,\n ...(object?.tbl_name && object.tbl_name !== row.name ? { tableName: object.tbl_name } : {}),\n pages: row.pages,\n bytes: row.bytes ?? 0,\n };\n });\n }\n } catch {\n // Some SQLite builds do not expose dbstat for in-memory databases.\n }\n\n return this.estimateSpaceObjectsFromSchema(schemaRows);\n } catch {\n return [];\n }\n }\n\n private estimateSpaceObjectsFromSchema(schemaRows: Array<{ name: string; type: string; tbl_name: string }>): RdfIndexSpaceObject[] {\n const pageSize = this.estimatePageSize();\n return schemaRows.map((object) => ({\n name: object.name,\n kind: rdfSpaceObjectKind(object.name, object.type, object.tbl_name),\n ...(object.tbl_name && object.tbl_name !== object.name ? { tableName: object.tbl_name } : {}),\n pages: 1,\n bytes: pageSize,\n estimated: true,\n }));\n }\n\n private estimatePageSize(): number {\n try {\n return this.requireDb().prepare<{ page_size: number }>('PRAGMA page_size').get()?.page_size ?? 4096;\n } catch {\n return 4096;\n }\n }\n\n private initializeSchema(): void {\n this.requireDb().exec(`\n CREATE TABLE IF NOT EXISTS rdf_sources (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n source TEXT NOT NULL UNIQUE,\n workspace TEXT NOT NULL,\n local_path TEXT,\n content_type TEXT,\n last_indexed_at TEXT,\n source_version TEXT\n );\n\n CREATE TABLE IF NOT EXISTS rdf_quads (\n graph_id INTEGER NOT NULL,\n subject_id INTEGER NOT NULL,\n predicate_id INTEGER NOT NULL,\n object_id INTEGER NOT NULL,\n source_file_id INTEGER,\n source_line_no INTEGER,\n PRIMARY KEY (graph_id, subject_id, predicate_id, object_id),\n FOREIGN KEY (graph_id) REFERENCES rdf_terms(id),\n FOREIGN KEY (subject_id) REFERENCES rdf_terms(id),\n FOREIGN KEY (predicate_id) REFERENCES rdf_terms(id),\n FOREIGN KEY (object_id) REFERENCES rdf_terms(id),\n FOREIGN KEY (source_file_id) REFERENCES rdf_sources(id)\n );\n\n CREATE INDEX IF NOT EXISTS rdf_quads_spog ON rdf_quads(subject_id, predicate_id, object_id, graph_id);\n CREATE INDEX IF NOT EXISTS rdf_quads_sopg ON rdf_quads(subject_id, object_id, predicate_id, graph_id);\n CREATE INDEX IF NOT EXISTS rdf_quads_psog ON rdf_quads(predicate_id, subject_id, object_id, graph_id);\n CREATE INDEX IF NOT EXISTS rdf_quads_posg ON rdf_quads(predicate_id, object_id, subject_id, graph_id);\n CREATE INDEX IF NOT EXISTS rdf_quads_ospg ON rdf_quads(object_id, subject_id, predicate_id, graph_id);\n CREATE INDEX IF NOT EXISTS rdf_quads_opsg ON rdf_quads(object_id, predicate_id, subject_id, graph_id);\n CREATE INDEX IF NOT EXISTS rdf_quads_gspo ON rdf_quads(graph_id, subject_id, predicate_id, object_id);\n CREATE INDEX IF NOT EXISTS rdf_quads_gpos ON rdf_quads(graph_id, predicate_id, object_id, subject_id);\n CREATE INDEX IF NOT EXISTS rdf_quads_source ON rdf_quads(source_file_id);\n\n CREATE TABLE IF NOT EXISTS rdf_index_metadata (\n key TEXT PRIMARY KEY,\n value TEXT NOT NULL\n );\n `);\n this.requireDb().prepare(`\n INSERT OR IGNORE INTO rdf_index_metadata (key, value)\n SELECT 'data_version', '1'\n WHERE EXISTS (SELECT 1 FROM rdf_quads LIMIT 1)\n `).run();\n }\n\n private prepareSchemaVersion(): void {\n this.ensureMetadataTable();\n const db = this.requireDb();\n const row = db\n .prepare<{ value: string }>(\"SELECT value FROM rdf_index_metadata WHERE key = 'schema_version'\")\n .get();\n if (row && row.value !== String(RDF_QUAD_INDEX_SCHEMA_VERSION)) {\n this.dropIndexSchema();\n this.ensureMetadataTable();\n }\n this.setMetadataValue('schema_version', String(RDF_QUAD_INDEX_SCHEMA_VERSION));\n }\n\n private ensureMetadataTable(): void {\n this.requireDb().exec(`\n CREATE TABLE IF NOT EXISTS rdf_index_metadata (\n key TEXT PRIMARY KEY,\n value TEXT NOT NULL\n );\n `);\n }\n\n private dropIndexSchema(): void {\n const db = this.requireDb();\n const foreignKeys = db.prepare<{ foreign_keys: number }>('PRAGMA foreign_keys').get()?.foreign_keys ?? 0;\n db.exec('PRAGMA foreign_keys = OFF;');\n try {\n db.exec(`\n DROP INDEX IF EXISTS rdf_quads_spog;\n DROP INDEX IF EXISTS rdf_quads_sopg;\n DROP INDEX IF EXISTS rdf_quads_psog;\n DROP INDEX IF EXISTS rdf_quads_posg;\n DROP INDEX IF EXISTS rdf_quads_ospg;\n DROP INDEX IF EXISTS rdf_quads_opsg;\n DROP INDEX IF EXISTS rdf_quads_gspo;\n DROP INDEX IF EXISTS rdf_quads_gpos;\n DROP INDEX IF EXISTS rdf_quads_source;\n DROP TABLE IF EXISTS rdf_quads;\n DROP TABLE IF EXISTS rdf_sources;\n DROP TABLE IF EXISTS rdf_terms;\n DROP TABLE IF EXISTS rdf_index_metadata;\n `);\n dropRdf3xDerivedSchemaObjects(db);\n } finally {\n if (foreignKeys) {\n db.exec('PRAGMA foreign_keys = ON;');\n }\n }\n this.cardinalityCache.clear();\n }\n\n private bumpDataVersion(): void {\n this.requireDb().prepare(`\n INSERT INTO rdf_index_metadata (key, value)\n VALUES ('data_version', '1')\n ON CONFLICT (key)\n DO UPDATE SET value = CAST(value AS INTEGER) + 1\n `).run();\n }\n\n private setMetadataValue(key: string, value: string): void {\n this.requireDb().prepare(`\n INSERT INTO rdf_index_metadata (key, value)\n VALUES (?, ?)\n ON CONFLICT (key)\n DO UPDATE SET value = excluded.value\n `).run(key, value);\n }\n\n private upsertSource(source: RdfSourceInput): number {\n const db = this.requireDb();\n db.prepare(`\n INSERT INTO rdf_sources (\n source,\n workspace,\n local_path,\n content_type,\n last_indexed_at,\n source_version\n )\n VALUES (?, ?, ?, ?, strftime('%Y-%m-%dT%H:%M:%fZ', 'now'), ?)\n ON CONFLICT (source)\n DO UPDATE SET\n workspace = excluded.workspace,\n local_path = excluded.local_path,\n content_type = excluded.content_type,\n last_indexed_at = excluded.last_indexed_at,\n source_version = excluded.source_version\n `).run(\n source.source,\n source.workspace,\n source.localPath ?? null,\n source.contentType ?? null,\n source.sourceVersion ?? null,\n );\n\n const row = db.prepare<RdfSourceRow>('SELECT * FROM rdf_sources WHERE source = ?').get(source.source);\n if (!row) {\n throw new Error(`Failed to upsert RDF source: ${source.source}`);\n }\n return row.id;\n }\n\n private updateSourceRow(id: number, source: RdfSourceInput): void {\n this.requireDb().prepare(`\n UPDATE rdf_sources\n SET source = ?,\n workspace = ?,\n local_path = ?,\n content_type = ?,\n last_indexed_at = strftime('%Y-%m-%dT%H:%M:%fZ', 'now'),\n source_version = ?\n WHERE id = ?\n `).run(\n source.source,\n source.workspace,\n source.localPath ?? null,\n source.contentType ?? null,\n source.sourceVersion ?? null,\n id,\n );\n }\n\n private buildWhereClause(\n pattern: QuintPattern,\n allowUnresolved: boolean,\n ): RdfWhereClause {\n const conditions: string[] = [];\n const joins: string[] = [];\n const params: unknown[] = [];\n const queryPlan: string[] = [];\n const equalityColumns = new Set<IndexedColumn>();\n\n for (const key of TERM_KEYS) {\n const match = pattern[key];\n if (!match) {\n continue;\n }\n const column = TERM_COLUMN[key];\n const condition = this.matchToCondition(key, column, match, allowUnresolved);\n if (condition.unresolved) {\n return { joins: '', whereClause: '', params: [], indexHint: 'none', queryPlan, unresolved: key };\n }\n joins.push(...condition.joins);\n if (condition.sql) {\n conditions.push(condition.sql);\n params.push(...condition.params);\n }\n queryPlan.push(...condition.queryPlan);\n if (condition.equality) {\n equalityColumns.add(column);\n }\n }\n\n return {\n joins: joins.join(''),\n whereClause: conditions.length > 0 ? ` WHERE ${conditions.join(' AND ')}` : '',\n params,\n indexHint: this.chooseIndex(equalityColumns),\n queryPlan,\n };\n }\n\n private matchToCondition(\n key: PatternKey,\n column: IndexedColumn,\n match: unknown,\n allowUnresolved: boolean,\n scope?: RdfConditionScope,\n ): RdfCondition {\n const columnRef = this.scopedQuadColumn(column, scope);\n if (isTerm(match as any)) {\n const id = this.requireDictionary().find(match as Term);\n if (id === undefined) {\n if (allowUnresolved) {\n return { joins: [], params: [], queryPlan: [], unresolved: true };\n }\n return { joins: [], sql: `${columnRef} = ?`, params: [-1], equality: true, queryPlan: [] };\n }\n return { joins: [], sql: `${columnRef} = ?`, params: [id], equality: true, queryPlan: [] };\n }\n\n const ops = match as TermOperators;\n const fragments: string[] = [];\n const joins: string[] = [];\n const params: unknown[] = [];\n const queryPlan: string[] = [];\n let equality = false;\n\n if (ops.$eq !== undefined) {\n const id = this.termOperatorValueId(ops.$eq, allowUnresolved);\n if (id === undefined) return { joins, params: [], queryPlan, unresolved: true };\n fragments.push(`${columnRef} = ?`);\n params.push(id);\n equality = true;\n }\n if (ops.$in !== undefined) {\n const ids = uniqueNumbers(ops.$in\n .map((value) => this.termOperatorValueId(value, allowUnresolved))\n .filter((value): value is number => value !== undefined));\n if (ids.length === 0) {\n return { joins, params: [], queryPlan, unresolved: true };\n }\n if (ids.length > TERM_IN_JOIN_THRESHOLD) {\n const candidateTable = this.populateTermInCandidateTable(column, 'in', ids, scope);\n const candidateAlias = this.scopedSqlName(`${column}_in_candidates`, scope);\n joins.push(` JOIN ${candidateTable} ${candidateAlias} ON ${candidateAlias}.id = ${columnRef}`);\n } else {\n fragments.push(`${columnRef} IN (${ids.map(() => '?').join(', ')})`);\n params.push(...ids);\n }\n queryPlan.push(`TermIn(${key})`);\n equality = true;\n }\n if (ops.$ne !== undefined) {\n const id = this.termOperatorValueId(ops.$ne, allowUnresolved);\n if (id !== undefined) {\n fragments.push(`${columnRef} != ?`);\n params.push(id);\n }\n }\n for (const operator of ['$gt', '$gte', '$lt', '$lte'] as const) {\n if (ops[operator] !== undefined) {\n const range = this.termRangeCondition(key, column, operator, ops[operator], allowUnresolved, scope);\n if (range.unresolved) {\n return { joins, params: [], queryPlan, unresolved: true };\n }\n joins.push(...(range.joins ?? []));\n fragments.push(range.sql);\n params.push(...range.params);\n queryPlan.push(...(range.queryPlan ?? []));\n }\n }\n\n if (ops.$notIn !== undefined) {\n const ids = uniqueNumbers(ops.$notIn\n .map((value) => this.termOperatorValueId(value, allowUnresolved))\n .filter((value): value is number => value !== undefined));\n if (ids.length > 0) {\n if (ids.length > TERM_IN_JOIN_THRESHOLD) {\n const candidateTable = this.populateTermInCandidateTable(column, 'not_in', ids, scope);\n const candidateAlias = this.scopedSqlName(`${column}_not_in_candidates`, scope);\n joins.push(` LEFT JOIN ${candidateTable} ${candidateAlias} ON ${candidateAlias}.id = ${columnRef}`);\n fragments.push(`${candidateAlias}.id IS NULL`);\n } else {\n fragments.push(`${columnRef} NOT IN (${ids.map(() => '?').join(', ')})`);\n params.push(...ids);\n }\n queryPlan.push(`TermNotIn(${key})`);\n }\n }\n\n if (ops.$termType !== undefined) {\n const condition = this.termTypeConditionJoin(key, column, ops.$termType, scope);\n joins.push(condition.join);\n fragments.push(condition.sql);\n params.push(...condition.params);\n queryPlan.push(condition.queryPlan);\n }\n\n if (ops.$language !== undefined) {\n const condition = this.languageConditionJoin(key, column, '$language', ops.$language, scope);\n joins.push(condition.join);\n fragments.push(condition.sql);\n params.push(...condition.params);\n queryPlan.push(condition.queryPlan);\n }\n\n if (ops.$notLanguage !== undefined) {\n const condition = this.languageConditionJoin(key, column, '$notLanguage', ops.$notLanguage, scope);\n joins.push(condition.join);\n fragments.push(condition.sql);\n params.push(...condition.params);\n queryPlan.push(condition.queryPlan);\n }\n\n if (ops.$langMatches !== undefined) {\n const condition = this.languageConditionJoin(key, column, '$langMatches', ops.$langMatches, scope);\n joins.push(condition.join);\n fragments.push(condition.sql);\n params.push(...condition.params);\n queryPlan.push(condition.queryPlan);\n }\n\n if (ops.$datatype !== undefined) {\n const condition = this.datatypeConditionJoin(key, column, '$datatype', ops.$datatype, allowUnresolved, scope);\n if (condition.unresolved) {\n return { joins, params: [], queryPlan, unresolved: true };\n }\n joins.push(condition.join);\n fragments.push(condition.sql);\n params.push(...condition.params);\n queryPlan.push(condition.queryPlan);\n }\n\n if (ops.$notDatatype !== undefined) {\n const condition = this.datatypeConditionJoin(key, column, '$notDatatype', ops.$notDatatype, allowUnresolved, scope);\n if (condition.unresolved) {\n return { joins, params: [], queryPlan, unresolved: true };\n }\n joins.push(condition.join);\n fragments.push(condition.sql);\n params.push(...condition.params);\n queryPlan.push(condition.queryPlan);\n }\n\n if (ops.$startsWith !== undefined) {\n const condition = this.prefixSearchConditionJoin(key, column, ops.$startsWith, scope);\n joins.push(condition.join);\n fragments.push(condition.sql);\n params.push(...condition.params);\n queryPlan.push(`PrefixRange(${key})`);\n equality = true;\n }\n\n equality = this.addTextSearchCondition(joins, fragments, params, queryPlan, key, column, '$contains', ops.$contains, scope) || equality;\n equality = this.addTextSearchCondition(joins, fragments, params, queryPlan, key, column, '$endsWith', ops.$endsWith, scope) || equality;\n equality = this.addTextSearchCondition(joins, fragments, params, queryPlan, key, column, '$regex', ops.$regex, scope) || equality;\n\n return {\n joins,\n sql: fragments.length > 0 ? fragments.join(' AND ') : undefined,\n params,\n equality,\n queryPlan,\n };\n }\n\n private termTypeConditionJoin(\n key: PatternKey,\n column: IndexedColumn,\n termType: 'iri' | 'blank' | 'literal' | 'numeric',\n scope?: RdfConditionScope,\n ): { join: string; sql: string; params: unknown[]; queryPlan: string } {\n const alias = this.scopedSqlName(`${column}_term_type_${termType}`, scope);\n const columnRef = this.scopedQuadColumn(column, scope);\n const possibleKinds = this.termKindsForPatternKey(key);\n if (termType === 'numeric') {\n if (!possibleKinds.includes('literal')) {\n return {\n join: ` JOIN rdf_terms ${alias} ON ${alias}.id = ${columnRef}`,\n sql: '1 = 0',\n params: [],\n queryPlan: `TermType(${key}:numeric)`,\n };\n }\n return {\n join: ` JOIN rdf_terms ${alias} ON ${alias}.id = ${columnRef}`,\n sql: `${alias}.kind = 'literal' AND ${alias}.numeric_value IS NOT NULL`,\n params: [],\n queryPlan: `TermType(${key}:numeric)`,\n };\n }\n if (!possibleKinds.includes(termType)) {\n return {\n join: ` JOIN rdf_terms ${alias} ON ${alias}.id = ${columnRef}`,\n sql: '1 = 0',\n params: [],\n queryPlan: `TermType(${key}:${termType})`,\n };\n }\n return {\n join: ` JOIN rdf_terms ${alias} ON ${alias}.id = ${columnRef}`,\n sql: `${alias}.kind = ?`,\n params: [termType],\n queryPlan: `TermType(${key}:${termType})`,\n };\n }\n\n private languageConditionJoin(\n key: PatternKey,\n column: IndexedColumn,\n operator: '$language' | '$notLanguage' | '$langMatches',\n language: string,\n scope?: RdfConditionScope,\n ): { join: string; sql: string; params: unknown[]; queryPlan: string } {\n const alias = this.scopedSqlName(`${column}_${operator.slice(1).toLowerCase()}`, scope);\n const columnRef = this.scopedQuadColumn(column, scope);\n if (!this.termKindsForPatternKey(key).includes('literal')) {\n return {\n join: ` JOIN rdf_terms ${alias} ON ${alias}.id = ${columnRef}`,\n sql: '1 = 0',\n params: [],\n queryPlan: `Language(${key}${operator})`,\n };\n }\n const join = ` JOIN rdf_terms ${alias} ON ${alias}.id = ${columnRef}`;\n if (operator === '$language') {\n return {\n join,\n sql: `${alias}.kind = 'literal' AND COALESCE(${alias}.lang, '') = ?`,\n params: [language],\n queryPlan: `Language(${key}${operator})`,\n };\n }\n if (operator === '$notLanguage') {\n return {\n join,\n sql: `${alias}.kind = 'literal' AND COALESCE(${alias}.lang, '') != ?`,\n params: [language],\n queryPlan: `Language(${key}${operator})`,\n };\n }\n if (language === '*') {\n return {\n join,\n sql: `${alias}.kind = 'literal' AND ${alias}.lang IS NOT NULL AND ${alias}.lang != ''`,\n params: [],\n queryPlan: `Language(${key}${operator})`,\n };\n }\n return {\n join,\n sql: `${alias}.kind = 'literal'\n AND (lower(${alias}.lang) = lower(?) OR lower(${alias}.lang) LIKE lower(?) ESCAPE '\\\\')`,\n params: [language, `${escapeLikePattern(language)}-%`],\n queryPlan: `Language(${key}${operator})`,\n };\n }\n\n private datatypeConditionJoin(\n key: PatternKey,\n column: IndexedColumn,\n operator: '$datatype' | '$notDatatype',\n datatype: Term,\n allowUnresolved: boolean,\n scope?: RdfConditionScope,\n ): { join: string; sql: string; params: unknown[]; queryPlan: string; unresolved?: boolean } {\n const alias = this.scopedSqlName(`${column}_${operator.slice(1).toLowerCase()}`, scope);\n const columnRef = this.scopedQuadColumn(column, scope);\n if (datatype.termType !== 'NamedNode') {\n throw new Error('RdfQuadIndex datatype filters only support named node datatype terms');\n }\n if (!this.termKindsForPatternKey(key).includes('literal')) {\n return {\n join: ` JOIN rdf_terms ${alias} ON ${alias}.id = ${columnRef}`,\n sql: '1 = 0',\n params: [],\n queryPlan: `Datatype(${key}${operator})`,\n };\n }\n const join = ` JOIN rdf_terms ${alias} ON ${alias}.id = ${columnRef}`;\n if (datatype.value === XSD_STRING) {\n return {\n join,\n sql: 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 params: [],\n queryPlan: `Datatype(${key}${operator})`,\n };\n }\n const datatypeId = this.requireDictionary().find(datatype);\n if (datatypeId === undefined) {\n if (operator === '$notDatatype') {\n return {\n join,\n sql: `${alias}.kind = 'literal'`,\n params: [],\n queryPlan: `Datatype(${key}${operator})`,\n };\n }\n if (allowUnresolved) {\n return { join, sql: '', params: [], queryPlan: `Datatype(${key}${operator})`, unresolved: true };\n }\n return {\n join,\n sql: operator === '$datatype' ? '1 = 0' : `${alias}.kind = 'literal'`,\n params: [],\n queryPlan: `Datatype(${key}${operator})`,\n };\n }\n return {\n join,\n sql: operator === '$datatype'\n ? `${alias}.kind = 'literal' AND ${alias}.datatype_id = ?`\n : `${alias}.kind = 'literal' AND (${alias}.datatype_id IS NULL OR ${alias}.datatype_id != ?)`,\n params: [datatypeId],\n queryPlan: `Datatype(${key}${operator})`,\n };\n }\n\n private termRangeCondition(\n key: PatternKey,\n column: IndexedColumn,\n operator: '$gt' | '$gte' | '$lt' | '$lte',\n value: unknown,\n allowUnresolved: boolean,\n scope?: RdfConditionScope,\n ): { joins?: string[]; sql: string; params: unknown[]; queryPlan?: string[]; unresolved?: boolean } {\n const kinds = this.termKindsForPatternKey(key);\n const lexicalValue = this.termOperatorLexicalValue(value);\n if (lexicalValue === undefined) {\n if (allowUnresolved) {\n return { sql: '', params: [], unresolved: true };\n }\n return { sql: '1 = 0', params: [] };\n }\n\n const comparator = {\n $gt: '>',\n $gte: '>=',\n $lt: '<',\n $lte: '<=',\n }[operator];\n const numericValue = this.termOperatorNumericValue(value);\n if (numericValue !== undefined) {\n if (!kinds.includes('literal')) {\n if (allowUnresolved) {\n return { sql: '', params: [], unresolved: true };\n }\n return { sql: '1 = 0', params: [] };\n }\n const termAlias = this.scopedSqlName(`${column}_numeric_range_${operator.slice(1)}`, scope);\n return {\n joins: [` JOIN rdf_terms ${termAlias} ON ${termAlias}.id = ${this.scopedQuadColumn(column, scope)}`],\n sql: `${termAlias}.kind = 'literal'\n AND ${termAlias}.numeric_value IS NOT NULL\n AND ${termAlias}.numeric_value ${comparator} ?`,\n params: [numericValue],\n queryPlan: [`NumericRange(${key}${operator})`],\n };\n }\n\n const termAlias = this.scopedSqlName(`${column}_range_${operator.slice(1)}`, scope);\n return {\n joins: [` JOIN rdf_terms ${termAlias} ON ${termAlias}.id = ${this.scopedQuadColumn(column, scope)}`],\n sql: `${termAlias}.kind IN (${kinds.map(() => '?').join(', ')})\n AND ${termAlias}.value ${comparator} ?`,\n params: [...kinds, lexicalValue],\n queryPlan: [`LexicalRange(${key}${operator})`],\n };\n }\n\n private termOperatorLexicalValue(value: unknown): string | undefined {\n if (!value || typeof value !== 'object' || !('termType' in value)) {\n if (typeof value === 'string' || typeof value === 'number') {\n return String(value);\n }\n throw new Error('RdfQuadIndex range operators only support Term, string, or number values');\n }\n const term = value as Term;\n switch (term.termType) {\n case 'NamedNode':\n case 'BlankNode':\n case 'Literal':\n return term.value;\n case 'DefaultGraph':\n return '';\n default:\n throw new Error(`RdfQuadIndex range operators do not support ${term.termType}`);\n }\n }\n\n private termOperatorNumericValue(value: unknown): number | undefined {\n if (typeof value === 'number') {\n return Number.isFinite(value) ? value : undefined;\n }\n if (!value || typeof value !== 'object' || !('termType' in value)) {\n return undefined;\n }\n const term = value as Term;\n if (term.termType !== 'Literal' || !isRdfNumericDatatype(term.datatype.value)) {\n return undefined;\n }\n const parsed = rdfNumericValue(term.value);\n return Number.isFinite(parsed) ? parsed : undefined;\n }\n\n private termKindsForPatternKey(key: PatternKey): 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\n private termOperatorValueId(value: unknown, allowUnresolved: boolean): number | undefined {\n if (!value || typeof value !== 'object' || !('termType' in value)) {\n throw new Error('RdfQuadIndex only supports Term values in first-stage exact scans');\n }\n const id = this.requireDictionary().find(value as Term);\n if (id === undefined && !allowUnresolved) {\n return -1;\n }\n return id;\n }\n\n private addTextSearchCondition(\n joins: string[],\n fragments: string[],\n params: unknown[],\n queryPlan: string[],\n key: PatternKey,\n column: IndexedColumn,\n operator: RdfQueryFilterOperator,\n value: string | undefined,\n scope?: RdfConditionScope,\n ): boolean {\n if (value === undefined) {\n return false;\n }\n if (typeof value !== 'string') {\n throw new Error(`RdfQuadIndex text search ${operator} only supports string values`);\n }\n const kind = this.termKindsForPatternKey(key);\n queryPlan.push(`TextSearch(${key}${operator})`);\n const condition = this.textSearchConditionJoin(kind, column, operator, value, scope);\n joins.push(condition.join);\n fragments.push(condition.sql);\n params.push(...condition.params);\n return true;\n }\n\n private prefixSearchConditionJoin(\n key: PatternKey,\n column: IndexedColumn,\n prefix: string,\n scope?: RdfConditionScope,\n ): { join: string; sql: string; params: unknown[] } {\n const kind = this.termKindsForPatternKey(key);\n const alias = this.scopedSqlName(`prefix_${column}`, scope);\n return {\n join: ` JOIN rdf_terms ${alias} ON ${alias}.id = ${this.scopedQuadColumn(column, scope)}`,\n sql: `${alias}.kind IN (${kind.map(() => '?').join(', ')})\n AND ${alias}.value_head >= ?\n AND ${alias}.value_head < ?\n AND ${alias}.value >= ?\n AND ${alias}.value < ?`,\n params: [...kind, rdfTermValueHead(prefix), `${rdfTermValueHead(prefix)}\\uffff`, prefix, `${prefix}\\uffff`],\n };\n }\n\n private textSearchConditionJoin(\n kind: RdfTermKind[],\n column: IndexedColumn,\n operator: RdfQueryFilterOperator,\n value: string,\n scope?: RdfConditionScope,\n ): { join: string; sql: string; params: unknown[] } {\n const alias = this.scopedSqlName(`text_${column}_${operator.slice(1).toLowerCase()}`, scope);\n if (kind.length === 0) {\n return {\n join: ` JOIN rdf_terms ${alias} ON ${alias}.id = ${this.scopedQuadColumn(column, scope)}`,\n sql: '1 = 0',\n params: [],\n };\n }\n const kindPlaceholders = kind.map(() => '?').join(', ');\n const normalized = value.toLowerCase();\n const join = ` JOIN rdf_terms ${alias} ON ${alias}.id = ${this.scopedQuadColumn(column, scope)}`;\n switch (operator) {\n case '$contains':\n return {\n join,\n sql: `${alias}.kind IN (${kindPlaceholders})\n AND ${alias}.normalized_text LIKE ? ESCAPE '\\\\'\n AND instr(${alias}.value, ?) > 0`,\n params: [...kind, `%${escapeLikePattern(normalized)}%`, value],\n };\n case '$endsWith':\n return {\n join,\n sql: `${alias}.kind IN (${kindPlaceholders})\n AND ${alias}.normalized_text LIKE ? ESCAPE '\\\\'\n AND substr(${alias}.value, -length(?)) = ?`,\n params: [...kind, `%${escapeLikePattern(normalized)}`, value, value],\n };\n case '$regex':\n return this.regexTextSearchConditionJoin(kind, alias, column, value, scope);\n default:\n throw new Error(`Unsupported RDF text search operator: ${operator}`);\n }\n }\n\n private regexTextSearchConditionJoin(\n kind: RdfTermKind[],\n alias: string,\n column: IndexedColumn,\n pattern: string,\n scope?: RdfConditionScope,\n ): { join: string; sql: string; params: unknown[] } {\n const ids = this.requireDictionary().idsByNormalizedTextRegex(kind, pattern);\n const candidateTable = this.populateRegexCandidateTable(column, ids, scope);\n const candidateAlias = `${alias}_candidates`;\n const join = ` JOIN rdf_terms ${alias} ON ${alias}.id = ${this.scopedQuadColumn(column, scope)}\n JOIN ${candidateTable} ${candidateAlias} ON ${candidateAlias}.id = ${alias}.id`;\n if (ids.length === 0) {\n return { join, sql: '1 = 0', params: [] };\n }\n const kindPlaceholders = kind.map(() => '?').join(', ');\n return {\n join,\n sql: `${alias}.kind IN (${kindPlaceholders})`,\n params: kind,\n };\n }\n\n private populateRegexCandidateTable(column: IndexedColumn, ids: number[], scope?: RdfConditionScope): string {\n const tableName = this.scopedSqlName(`rdf_regex_candidates_${column}`, scope);\n this.populateCandidateTable(tableName, ids);\n return tableName;\n }\n\n private populateTermInCandidateTable(column: IndexedColumn, operator: 'in' | 'not_in', ids: number[], scope?: RdfConditionScope): string {\n const tableName = this.scopedSqlName(`rdf_term_${operator}_candidates_${column}`, scope);\n this.populateCandidateTable(tableName, ids);\n return tableName;\n }\n\n private scopedQuadColumn(column: IndexedColumn, scope?: RdfConditionScope): string {\n return `${scope?.quadAlias ?? 'rdf_quads'}.${column}`;\n }\n\n private scopedSqlName(base: string, scope?: RdfConditionScope): string {\n const name = scope?.aliasPrefix ? `${scope.aliasPrefix}_${base}` : base;\n return name.replace(/[^A-Za-z0-9_]/g, '_');\n }\n\n private buildTupleConstraintJoin(source: RdfQuadTupleConstraintSource): { join: string } {\n const columns = Array.from(new Set(source.columns));\n if (columns.length === 0) {\n return { join: '' };\n }\n\n const candidateColumns = columns.map((key) => TERM_COLUMN[key]);\n const tableName = `rdf_tuple_values_${candidateColumns.join('_')}`;\n this.populateTupleConstraintTable(tableName, columns, source.rows);\n const alias = 'tuple_values';\n const onClause = columns\n .map((key) => `${alias}.${TERM_COLUMN[key]} = rdf_quads.${TERM_COLUMN[key]}`)\n .join(' AND ');\n return {\n join: ` JOIN ${tableName} ${alias} ON ${onClause}`,\n };\n }\n\n private populateTupleConstraintTable(\n tableName: string,\n columns: PatternKey[],\n rows: RdfQuadTupleConstraintSource['rows'],\n ): void {\n const db = this.requireDb();\n const columnDefs = columns.map((key) => `${TERM_COLUMN[key]} INTEGER NOT NULL`).join(', ');\n const primaryKey = columns.map((key) => TERM_COLUMN[key]).join(', ');\n db.exec(`CREATE TEMP TABLE IF NOT EXISTS ${tableName} (${columnDefs}, PRIMARY KEY (${primaryKey}))`);\n db.prepare(`DELETE FROM ${tableName}`).run();\n\n const valueRows = rows\n .map((row) => columns.map((key) => this.termIdForTupleConstraint(row[key])))\n .filter((ids): ids is number[] => ids.every((id) => id !== undefined));\n if (valueRows.length === 0) {\n return;\n }\n\n const insertColumns = columns.map((key) => TERM_COLUMN[key]).join(', ');\n const placeholders = `(${columns.map(() => '?').join(', ')})`;\n const insert = db.prepare(`INSERT OR IGNORE INTO ${tableName} (${insertColumns}) VALUES ${placeholders}`);\n for (const valueRow of valueRows) {\n insert.run(...valueRow);\n }\n }\n\n private termIdForTupleConstraint(term: Term | undefined): number | undefined {\n if (!term) {\n return undefined;\n }\n return this.requireDictionary().find(term);\n }\n\n private populateCandidateTable(tableName: string, ids: number[]): void {\n const db = this.requireDb();\n db.exec(`CREATE TEMP TABLE IF NOT EXISTS ${tableName} (id INTEGER PRIMARY KEY)`);\n db.prepare(`DELETE FROM ${tableName}`).run();\n for (let offset = 0; offset < ids.length; offset += 500) {\n const batch = ids.slice(offset, offset + 500);\n db.prepare(`INSERT OR IGNORE INTO ${tableName} (id) VALUES ${batch.map(() => '(?)').join(', ')}`).run(...batch);\n }\n }\n\n private chooseIndex(columns: Set<IndexedColumn>): string {\n const has = (column: IndexedColumn): boolean => columns.has(column);\n if (has('graph_id') && has('subject_id')) return 'GSPO';\n if (has('graph_id') && has('predicate_id')) return 'GPOS';\n if (has('subject_id') && has('predicate_id')) return 'SPOG';\n if (has('subject_id') && has('object_id')) return 'SOPG';\n if (has('predicate_id') && has('object_id')) return 'POSG';\n if (has('object_id') && has('subject_id')) return 'OSPG';\n if (has('subject_id')) return 'SPOG';\n if (has('predicate_id')) return 'POSG';\n if (has('object_id')) return 'OSPG';\n if (has('graph_id')) return 'GSPO';\n return 'full-scan';\n }\n\n private exactTermPattern(pattern: QuintPattern): { ids: Partial<Record<PatternKey, number>>; cacheKey: string; indexChoice: string } | undefined {\n const ids: Partial<Record<PatternKey, number>> = {};\n const columns = new Set<IndexedColumn>();\n\n for (const key of TERM_KEYS) {\n const match = pattern[key];\n if (!match) {\n continue;\n }\n if (!isTerm(match as any)) {\n return undefined;\n }\n const id = this.requireDictionary().find(match as Term);\n if (id === undefined) {\n return {\n ids: { [key]: -1 },\n cacheKey: `${key}=-1`,\n indexChoice: this.chooseIndex(new Set([TERM_COLUMN[key]])),\n };\n }\n ids[key] = id;\n columns.add(TERM_COLUMN[key]);\n }\n\n return {\n ids,\n cacheKey: TERM_KEYS\n .map((key) => `${key}:${ids[key] ?? '*'}`)\n .join('|'),\n indexChoice: this.chooseIndex(columns),\n };\n }\n\n private countExactTermPattern(\n ids: Partial<Record<PatternKey, number>>,\n indexChoice: string,\n ): RdfCardinalityEstimate {\n if (Object.values(ids).some((id) => id === -1)) {\n return {\n rows: 0,\n source: 'exact-count',\n indexChoice,\n };\n }\n\n const conditions: string[] = [];\n const params: number[] = [];\n for (const key of TERM_KEYS) {\n const id = ids[key];\n if (id === undefined) {\n continue;\n }\n conditions.push(`${TERM_COLUMN[key]} = ?`);\n params.push(id);\n }\n\n const sql = `SELECT COUNT(*) AS count FROM rdf_quads${conditions.length > 0 ? ` WHERE ${conditions.join(' AND ')}` : ''}`;\n const row = this.requireDb().prepare<{ count: number }>(sql).get(...params);\n return {\n rows: row?.count ?? 0,\n source: 'exact-count',\n indexChoice,\n };\n }\n\n private countExactDistinctTermPattern(\n ids: Partial<Record<PatternKey, number>>,\n indexChoice: string,\n distinctKey: PatternKey,\n ): RdfCardinalityEstimate {\n if (Object.values(ids).some((id) => id === -1)) {\n return {\n rows: 0,\n source: 'exact-distinct-count',\n indexChoice,\n };\n }\n\n const conditions: string[] = [];\n const params: number[] = [];\n for (const key of TERM_KEYS) {\n const id = ids[key];\n if (id === undefined) {\n continue;\n }\n conditions.push(`${TERM_COLUMN[key]} = ?`);\n params.push(id);\n }\n\n const sql = `SELECT COUNT(DISTINCT ${TERM_COLUMN[distinctKey]}) AS count FROM rdf_quads${conditions.length > 0 ? ` WHERE ${conditions.join(' AND ')}` : ''}`;\n const row = this.requireDb().prepare<{ count: number }>(sql).get(...params);\n return {\n rows: row?.count ?? 0,\n source: 'exact-distinct-count',\n indexChoice,\n };\n }\n\n private countExactDistinctTupleTermPattern(\n ids: Partial<Record<PatternKey, number>>,\n indexChoice: string,\n distinctKeys: PatternKey[],\n ): RdfCardinalityEstimate {\n if (Object.values(ids).some((id) => id === -1)) {\n return {\n rows: 0,\n source: 'exact-distinct-tuple-count',\n indexChoice,\n };\n }\n\n const conditions: string[] = [];\n const params: number[] = [];\n for (const key of TERM_KEYS) {\n const id = ids[key];\n if (id === undefined) {\n continue;\n }\n conditions.push(`${TERM_COLUMN[key]} = ?`);\n params.push(id);\n }\n\n const tupleProjection = distinctKeys.map((key) => TERM_COLUMN[key]).join(', ');\n const sql = `\n SELECT COUNT(*) AS count\n FROM (\n SELECT DISTINCT ${tupleProjection}\n FROM rdf_quads${conditions.length > 0 ? ` WHERE ${conditions.join(' AND ')}` : ''}\n ) distinct_tuple\n `;\n const row = this.requireDb().prepare<{ count: number }>(sql).get(...params);\n return {\n rows: row?.count ?? 0,\n source: 'exact-distinct-tuple-count',\n indexChoice,\n };\n }\n\n private countDistinctPattern(pattern: QuintPattern, distinctKey: PatternKey): number {\n const { joins, whereClause, params, unresolved } = this.buildWhereClause(pattern, true);\n if (unresolved) {\n return 0;\n }\n const row = this.requireDb()\n .prepare<{ count: number }>(`SELECT COUNT(DISTINCT rdf_quads.${TERM_COLUMN[distinctKey]}) AS count FROM rdf_quads${joins}${whereClause}`)\n .get(...params);\n return row?.count ?? 0;\n }\n\n private countDistinctTuplePattern(pattern: QuintPattern, distinctKeys: PatternKey[]): number {\n const { joins, whereClause, params, unresolved } = this.buildWhereClause(pattern, true);\n if (unresolved) {\n return 0;\n }\n const tupleProjection = distinctKeys.map((key) => `rdf_quads.${TERM_COLUMN[key]}`).join(', ');\n const row = this.requireDb()\n .prepare<{ count: number }>(`\n SELECT COUNT(*) AS count\n FROM (\n SELECT DISTINCT ${tupleProjection}\n FROM rdf_quads${joins}${whereClause}\n ) distinct_tuple\n `)\n .get(...params);\n return row?.count ?? 0;\n }\n\n private buildOrderClause(options?: RdfQuadScanOptions): { joins: string; orderBy: string } {\n if (!options?.order || options.order.length === 0) {\n return { joins: '', orderBy: '' };\n }\n const columns = options.order.map((termName) => TERM_COLUMN[termName as PatternKey]);\n if (columns.some((column) => !column)) {\n throw new Error(`Unsupported RDF quad order fields: ${options.order.join(', ')}`);\n }\n const joins = options.order.map((termName, index) => {\n const column = TERM_COLUMN[termName as PatternKey];\n const direction = options.orderDirections?.[index] ?? (options.reverse ? 'desc' : 'asc');\n return {\n join: ` JOIN rdf_terms order_t${index} ON order_t${index}.id = rdf_quads.${column}`,\n order: `order_t${index}.value${direction === 'desc' ? ' DESC' : ''}`,\n };\n });\n return {\n joins: joins.map((join) => join.join).join(''),\n orderBy: ` ORDER BY ${joins.map((join) => join.order).join(', ')}`,\n };\n }\n\n private paginationParamCount(options?: QueryOptions): number {\n return (options?.limit !== undefined ? 1 : 0) + (options?.offset !== undefined ? 1 : 0);\n }\n\n private rowsToQuads(rows: RdfQuadRow[]): Quad[] {\n const dictionary = this.requireDictionary();\n const termMap = dictionary.rowsForIds(rows.flatMap((row) => [\n row.graph_id,\n row.subject_id,\n row.predicate_id,\n row.object_id,\n ]));\n\n return rows.map((row) => DataFactory.quad(\n this.requiredTerm(termMap, row.subject_id) as any,\n this.requiredTerm(termMap, row.predicate_id) as any,\n this.requiredTerm(termMap, row.object_id) as any,\n this.requiredTerm(termMap, row.graph_id) as any,\n ));\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 index: ${id}`);\n }\n return term;\n }\n\n private metrics(\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 requireDb(): SqliteDatabase {\n if (!this.db) {\n throw new Error('RdfQuadIndex is not open');\n }\n return this.db;\n }\n\n private requireDictionary(): RdfTermDictionary {\n if (!this.dictionary) {\n throw new Error('RdfQuadIndex is not open');\n }\n return this.dictionary;\n }\n}\n\nfunction isRdfPatternQueryInput(input: QuintPattern | RdfPatternQuery): input is RdfPatternQuery {\n return input !== null\n && typeof input === 'object'\n && 'pattern' in input;\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 rdfSpaceObjectKind(name: string, schemaType?: string, tableName?: string): RdfIndexSpaceObject['kind'] {\n if (schemaType === 'table' && name.startsWith('rdf_')) {\n return 'table';\n }\n if (schemaType === 'index' && (name.startsWith('rdf_') || tableName?.startsWith('rdf_'))) {\n return 'index';\n }\n if (name.startsWith('sqlite_')) {\n return 'internal';\n }\n return 'unknown';\n}\n\nfunction rdfTermKind(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\nfunction escapeLikePattern(value: string): string {\n return value.replace(/[\\\\%_]/g, (match) => `\\\\${match}`);\n}\n\nfunction uniqueNumbers(values: number[]): number[] {\n return [...new Set(values)];\n}\n\nfunction uniquePatternKeys(values: PatternKey[]): PatternKey[] {\n return TERM_KEYS.filter((key) => values.includes(key));\n}\n\nfunction uniqueVariableNames(values: string[]): string[] {\n return [...new Set(values)];\n}\n\nfunction joinSolutionMappingKeyExpression(\n variableColumns: Map<string, string>,\n variables: string[] | undefined,\n errorPrefix: string,\n): string {\n const variableNames = uniqueVariableNames(variables ?? [...variableColumns.keys()]);\n if (variableNames.length === 0) {\n return '1';\n }\n return variableNames.map((variableName) => {\n const column = variableColumns.get(variableName);\n if (!column) {\n throw new Error(`${errorPrefix} COUNT(DISTINCT *) cannot read unbound variable: ${variableName}`);\n }\n return column;\n }).join(` || ':' || `);\n}\n"]}