@undefineds.co/xpod 0.1.7 → 0.2.0

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 (350) hide show
  1. package/README.md +164 -3
  2. package/config/cli.json +9 -71
  3. package/config/cloud.json +34 -7
  4. package/config/local.json +6 -2
  5. package/config/resolver.json +11 -49
  6. package/config/runtime-open.json +22 -0
  7. package/config/xpod.base.json +32 -0
  8. package/config/xpod.cluster.json +2 -44
  9. package/config/xpod.json +5 -2
  10. package/dist/agents/AgentExecutorFactory.js +1 -1
  11. package/dist/agents/AgentExecutorFactory.js.map +1 -1
  12. package/dist/agents/AgentManager.js +1 -1
  13. package/dist/agents/AgentManager.js.map +1 -1
  14. package/dist/agents/config/agent-meta-schema.d.ts +7 -7
  15. package/dist/agents/config/agent-meta-schema.js +1 -1
  16. package/dist/agents/config/agent-meta-schema.js.map +1 -1
  17. package/dist/agents/config/resolve.js +1 -1
  18. package/dist/agents/config/resolve.js.map +1 -1
  19. package/dist/agents/schema/agent-config.d.ts +18 -18
  20. package/dist/agents/schema/agent-config.js +1 -1
  21. package/dist/agents/schema/agent-config.js.map +1 -1
  22. package/dist/agents/schema/tables.d.ts +8 -8
  23. package/dist/agents/schema/tables.js +1 -1
  24. package/dist/agents/schema/tables.js.map +1 -1
  25. package/dist/ai/schema/config.d.ts +7 -7
  26. package/dist/ai/schema/config.js +1 -1
  27. package/dist/ai/schema/config.js.map +1 -1
  28. package/dist/ai/schema/model.d.ts +13 -13
  29. package/dist/ai/schema/model.js +1 -1
  30. package/dist/ai/schema/model.js.map +1 -1
  31. package/dist/ai/schema/provider.d.ts +7 -7
  32. package/dist/ai/schema/provider.js +1 -1
  33. package/dist/ai/schema/provider.js.map +1 -1
  34. package/dist/ai/schema/vector-store.d.ts +17 -17
  35. package/dist/ai/schema/vector-store.js +1 -1
  36. package/dist/ai/schema/vector-store.js.map +1 -1
  37. package/dist/ai/service/CredentialReaderImpl.js +1 -1
  38. package/dist/ai/service/CredentialReaderImpl.js.map +1 -1
  39. package/dist/ai/service/DefaultAiConfigService.js.map +1 -1
  40. package/dist/api/ApiServer.d.ts +3 -1
  41. package/dist/api/ApiServer.js +14 -1
  42. package/dist/api/ApiServer.js.map +1 -1
  43. package/dist/api/auth/AuthContext.d.ts +12 -1
  44. package/dist/api/auth/AuthContext.js +18 -1
  45. package/dist/api/auth/AuthContext.js.map +1 -1
  46. package/dist/api/auth/ClientCredentialsAuthenticator.d.ts +0 -1
  47. package/dist/api/auth/ClientCredentialsAuthenticator.js.map +1 -1
  48. package/dist/api/auth/ServiceTokenAuthenticator.d.ts +18 -0
  49. package/dist/api/auth/ServiceTokenAuthenticator.js +50 -0
  50. package/dist/api/auth/ServiceTokenAuthenticator.js.map +1 -0
  51. package/dist/api/auth/index.d.ts +1 -0
  52. package/dist/api/auth/index.js +1 -0
  53. package/dist/api/auth/index.js.map +1 -1
  54. package/dist/api/chatkit/ai-provider.d.ts +0 -10
  55. package/dist/api/chatkit/ai-provider.js +11 -120
  56. package/dist/api/chatkit/ai-provider.js.map +1 -1
  57. package/dist/api/chatkit/default-agent.js +11 -8
  58. package/dist/api/chatkit/default-agent.js.map +1 -1
  59. package/dist/api/chatkit/pod-store.d.ts +6 -0
  60. package/dist/api/chatkit/pod-store.js +103 -36
  61. package/dist/api/chatkit/pod-store.js.map +1 -1
  62. package/dist/api/chatkit/schema.d.ts +32 -26
  63. package/dist/api/chatkit/schema.js +16 -8
  64. package/dist/api/chatkit/schema.js.map +1 -1
  65. package/dist/api/container/business-token.d.ts +9 -0
  66. package/dist/api/container/business-token.js +32 -0
  67. package/dist/api/container/business-token.js.map +1 -0
  68. package/dist/api/container/cloud.js +36 -12
  69. package/dist/api/container/cloud.js.map +1 -1
  70. package/dist/api/container/common.js +13 -5
  71. package/dist/api/container/common.js.map +1 -1
  72. package/dist/api/container/index.js +94 -14
  73. package/dist/api/container/index.js.map +1 -1
  74. package/dist/api/container/local.js +2 -1
  75. package/dist/api/container/local.js.map +1 -1
  76. package/dist/api/container/routes.js +81 -9
  77. package/dist/api/container/routes.js.map +1 -1
  78. package/dist/api/container/types.d.ts +8 -6
  79. package/dist/api/container/types.js.map +1 -1
  80. package/dist/api/handlers/AdminHandler.js +9 -9
  81. package/dist/api/handlers/AdminHandler.js.map +1 -1
  82. package/dist/api/handlers/ApiKeyHandler.js +0 -6
  83. package/dist/api/handlers/ApiKeyHandler.js.map +1 -1
  84. package/dist/api/handlers/EdgeNodeSignalHandler.d.ts +17 -0
  85. package/dist/api/handlers/EdgeNodeSignalHandler.js +171 -0
  86. package/dist/api/handlers/EdgeNodeSignalHandler.js.map +1 -0
  87. package/dist/api/handlers/PodManagementHandler.d.ts +5 -4
  88. package/dist/api/handlers/PodManagementHandler.js +11 -10
  89. package/dist/api/handlers/PodManagementHandler.js.map +1 -1
  90. package/dist/api/handlers/ProvisionHandler.d.ts +42 -0
  91. package/dist/api/handlers/ProvisionHandler.js +161 -0
  92. package/dist/api/handlers/ProvisionHandler.js.map +1 -0
  93. package/dist/api/handlers/QuotaHandler.d.ts +7 -7
  94. package/dist/api/handlers/QuotaHandler.js +143 -73
  95. package/dist/api/handlers/QuotaHandler.js.map +1 -1
  96. package/dist/api/handlers/SubdomainClientHandler.js +2 -2
  97. package/dist/api/handlers/SubdomainClientHandler.js.map +1 -1
  98. package/dist/api/handlers/SubdomainHandler.js +13 -8
  99. package/dist/api/handlers/SubdomainHandler.js.map +1 -1
  100. package/dist/api/handlers/UsageHandler.d.ts +14 -0
  101. package/dist/api/handlers/UsageHandler.js +123 -0
  102. package/dist/api/handlers/UsageHandler.js.map +1 -0
  103. package/dist/api/handlers/index.d.ts +3 -1
  104. package/dist/api/handlers/index.js +3 -1
  105. package/dist/api/handlers/index.js.map +1 -1
  106. package/dist/api/main.js +18 -0
  107. package/dist/api/main.js.map +1 -1
  108. package/dist/api/middleware/OpenAuthMiddleware.d.ts +12 -0
  109. package/dist/api/middleware/OpenAuthMiddleware.js +27 -0
  110. package/dist/api/middleware/OpenAuthMiddleware.js.map +1 -0
  111. package/dist/api/runtime.d.ts +15 -0
  112. package/dist/api/runtime.js +125 -0
  113. package/dist/api/runtime.js.map +1 -0
  114. package/dist/api/service/VectorStoreService.js +1 -1
  115. package/dist/api/service/VectorStoreService.js.map +1 -1
  116. package/dist/api/service/VercelChatService.d.ts +16 -7
  117. package/dist/api/service/VercelChatService.js +98 -178
  118. package/dist/api/service/VercelChatService.js.map +1 -1
  119. package/dist/api/store/DrizzleClientCredentialsStore.d.ts +6 -11
  120. package/dist/api/store/DrizzleClientCredentialsStore.js +9 -39
  121. package/dist/api/store/DrizzleClientCredentialsStore.js.map +1 -1
  122. package/dist/authorization/AuthModeSelector.d.ts +10 -0
  123. package/dist/authorization/AuthModeSelector.js +27 -0
  124. package/dist/authorization/AuthModeSelector.js.map +1 -0
  125. package/dist/authorization/AuthModeSelector.jsonld +81 -0
  126. package/dist/cli/commands/account.d.ts +6 -0
  127. package/dist/cli/commands/account.js +119 -0
  128. package/dist/cli/commands/account.js.map +1 -0
  129. package/dist/cli/commands/auth.js +20 -29
  130. package/dist/cli/commands/auth.js.map +1 -1
  131. package/dist/cli/commands/backup.d.ts +15 -0
  132. package/dist/cli/commands/backup.js +286 -0
  133. package/dist/cli/commands/backup.js.map +1 -0
  134. package/dist/cli/commands/config.d.ts +34 -3
  135. package/dist/cli/commands/config.js +195 -258
  136. package/dist/cli/commands/config.js.map +1 -1
  137. package/dist/cli/commands/doctor.d.ts +6 -0
  138. package/dist/cli/commands/doctor.js +94 -0
  139. package/dist/cli/commands/doctor.js.map +1 -0
  140. package/dist/cli/commands/pod.d.ts +6 -0
  141. package/dist/cli/commands/pod.js +124 -0
  142. package/dist/cli/commands/pod.js.map +1 -0
  143. package/dist/cli/commands/start.js +28 -5
  144. package/dist/cli/commands/start.js.map +1 -1
  145. package/dist/cli/index.js +9 -0
  146. package/dist/cli/index.js.map +1 -1
  147. package/dist/cli/lib/credentials-store.d.ts +17 -0
  148. package/dist/cli/lib/credentials-store.js +73 -0
  149. package/dist/cli/lib/credentials-store.js.map +1 -0
  150. package/dist/cli/lib/css-account.d.ts +17 -0
  151. package/dist/cli/lib/css-account.js +56 -0
  152. package/dist/cli/lib/css-account.js.map +1 -1
  153. package/dist/cli/lib/pod-thread-store.d.ts +57 -0
  154. package/dist/cli/lib/pod-thread-store.js +310 -0
  155. package/dist/cli/lib/pod-thread-store.js.map +1 -0
  156. package/dist/cli/lib/solid-auth.d.ts +20 -0
  157. package/dist/cli/lib/solid-auth.js +70 -0
  158. package/dist/cli/lib/solid-auth.js.map +1 -0
  159. package/dist/components/components.jsonld +5 -8
  160. package/dist/components/context.jsonld +114 -244
  161. package/dist/credential/schema/tables.d.ts +14 -14
  162. package/dist/credential/schema/tables.js +1 -1
  163. package/dist/credential/schema/tables.js.map +1 -1
  164. package/dist/edge/EdgeNodeAgent.js +2 -2
  165. package/dist/edge/EdgeNodeAgent.js.map +1 -1
  166. package/dist/edge/EdgeNodeDnsCoordinator.d.ts +1 -7
  167. package/dist/edge/EdgeNodeDnsCoordinator.js +31 -41
  168. package/dist/edge/EdgeNodeDnsCoordinator.js.map +1 -1
  169. package/dist/edge/EdgeNodeDnsCoordinator.jsonld +1 -27
  170. package/dist/edge/EdgeNodeModeDetector.d.ts +1 -1
  171. package/dist/edge/EdgeNodeModeDetector.js +9 -11
  172. package/dist/edge/EdgeNodeModeDetector.js.map +1 -1
  173. package/dist/http/ClusterIngressRouter.js +3 -3
  174. package/dist/http/ClusterIngressRouter.js.map +1 -1
  175. package/dist/http/ClusterWebSocketConfigurator.js +2 -2
  176. package/dist/http/ClusterWebSocketConfigurator.js.map +1 -1
  177. package/dist/http/PodRoutingHttpHandler.js +2 -2
  178. package/dist/http/PodRoutingHttpHandler.js.map +1 -1
  179. package/dist/http/cluster/PodMigrationHttpHandler.d.ts +1 -1
  180. package/dist/http/cluster/PodMigrationHttpHandler.js +1 -1
  181. package/dist/http/cluster/PodMigrationHttpHandler.js.map +1 -1
  182. package/dist/identity/drizzle/EdgeNodeRepository.d.ts +37 -4
  183. package/dist/identity/drizzle/EdgeNodeRepository.js +120 -128
  184. package/dist/identity/drizzle/EdgeNodeRepository.js.map +1 -1
  185. package/dist/identity/drizzle/ServiceTokenRepository.d.ts +52 -0
  186. package/dist/identity/drizzle/ServiceTokenRepository.js +142 -0
  187. package/dist/identity/drizzle/ServiceTokenRepository.js.map +1 -0
  188. package/dist/identity/drizzle/db.d.ts +9 -0
  189. package/dist/identity/drizzle/db.js +235 -3
  190. package/dist/identity/drizzle/db.js.map +1 -1
  191. package/dist/identity/drizzle/schema.pg.d.ts +5 -0
  192. package/dist/identity/drizzle/schema.pg.js +49 -20
  193. package/dist/identity/drizzle/schema.pg.js.map +1 -1
  194. package/dist/identity/drizzle/schema.sqlite.d.ts +332 -57
  195. package/dist/identity/drizzle/schema.sqlite.js +48 -18
  196. package/dist/identity/drizzle/schema.sqlite.js.map +1 -1
  197. package/dist/identity/oidc/AutoDetectIdentityProviderHandler.js +6 -4
  198. package/dist/identity/oidc/AutoDetectIdentityProviderHandler.js.map +1 -1
  199. package/dist/index.d.ts +6 -9
  200. package/dist/index.js +12 -14
  201. package/dist/index.js.map +1 -1
  202. package/dist/main.js +25 -8
  203. package/dist/main.js.map +1 -1
  204. package/dist/provision/ProvisionCodeCodec.d.ts +39 -0
  205. package/dist/provision/ProvisionCodeCodec.js +65 -0
  206. package/dist/provision/ProvisionCodeCodec.js.map +1 -0
  207. package/dist/provision/ProvisionCodeCodec.jsonld +47 -0
  208. package/dist/provision/ProvisionPodCreator.d.ts +20 -0
  209. package/dist/provision/ProvisionPodCreator.js +84 -0
  210. package/dist/provision/ProvisionPodCreator.js.map +1 -0
  211. package/dist/provision/ProvisionPodCreator.jsonld +118 -0
  212. package/dist/quota/DrizzleQuotaService.d.ts +17 -3
  213. package/dist/quota/DrizzleQuotaService.js +108 -8
  214. package/dist/quota/DrizzleQuotaService.js.map +1 -1
  215. package/dist/quota/DrizzleQuotaService.jsonld +33 -22
  216. package/dist/quota/NoopQuotaService.d.ts +7 -1
  217. package/dist/quota/NoopQuotaService.js +12 -0
  218. package/dist/quota/NoopQuotaService.js.map +1 -1
  219. package/dist/quota/NoopQuotaService.jsonld +24 -0
  220. package/dist/quota/QuotaService.d.ts +17 -0
  221. package/dist/quota/QuotaService.js +5 -0
  222. package/dist/quota/QuotaService.js.map +1 -1
  223. package/dist/quota/QuotaService.jsonld +50 -0
  224. package/dist/runtime/Proxy.d.ts +22 -4
  225. package/dist/runtime/Proxy.js +154 -35
  226. package/dist/runtime/Proxy.js.map +1 -1
  227. package/dist/runtime/XpodRuntime.d.ts +49 -0
  228. package/dist/runtime/XpodRuntime.js +374 -0
  229. package/dist/runtime/XpodRuntime.js.map +1 -0
  230. package/dist/runtime/env-utils.d.ts +2 -0
  231. package/dist/runtime/env-utils.js +55 -0
  232. package/dist/runtime/env-utils.js.map +1 -0
  233. package/dist/runtime/index.d.ts +4 -0
  234. package/dist/runtime/index.js +8 -1
  235. package/dist/runtime/index.js.map +1 -1
  236. package/dist/runtime/socket-fetch.d.ts +1 -0
  237. package/dist/runtime/socket-fetch.js +72 -0
  238. package/dist/runtime/socket-fetch.js.map +1 -0
  239. package/dist/runtime/socket-http.d.ts +1 -0
  240. package/dist/runtime/socket-http.js +142 -0
  241. package/dist/runtime/socket-http.js.map +1 -0
  242. package/dist/runtime/socket-utils.d.ts +2 -0
  243. package/dist/runtime/socket-utils.js +34 -0
  244. package/dist/runtime/socket-utils.js.map +1 -0
  245. package/dist/service/{EdgeNodeHeartbeatService.d.ts → EdgeNodeSignalClient.d.ts} +3 -3
  246. package/dist/service/{EdgeNodeHeartbeatService.js → EdgeNodeSignalClient.js} +4 -4
  247. package/dist/service/EdgeNodeSignalClient.js.map +1 -0
  248. package/dist/service/PodMigrationService.d.ts +1 -2
  249. package/dist/service/PodMigrationService.js +1 -2
  250. package/dist/service/PodMigrationService.js.map +1 -1
  251. package/dist/storage/SparqlUpdateResourceStore.js +1 -1
  252. package/dist/storage/SparqlUpdateResourceStore.js.map +1 -1
  253. package/dist/storage/accessors/MinioDataAccessor.d.ts +6 -0
  254. package/dist/storage/accessors/MinioDataAccessor.js +10 -0
  255. package/dist/storage/accessors/MinioDataAccessor.js.map +1 -1
  256. package/dist/storage/accessors/MinioDataAccessor.jsonld +4 -0
  257. package/dist/storage/accessors/MixDataAccessor.d.ts +2 -1
  258. package/dist/storage/accessors/MixDataAccessor.js +12 -1
  259. package/dist/storage/accessors/MixDataAccessor.js.map +1 -1
  260. package/dist/storage/accessors/MixDataAccessor.jsonld +19 -0
  261. package/dist/storage/locking/UrlAwareRedisLocker.d.ts +18 -0
  262. package/dist/storage/locking/UrlAwareRedisLocker.js +60 -0
  263. package/dist/storage/locking/UrlAwareRedisLocker.js.map +1 -0
  264. package/dist/storage/locking/UrlAwareRedisLocker.jsonld +123 -0
  265. package/dist/storage/quota/UsageRepository.d.ts +41 -8
  266. package/dist/storage/quota/UsageRepository.js +252 -50
  267. package/dist/storage/quota/UsageRepository.js.map +1 -1
  268. package/dist/storage/sparql/ComunicaQuintEngine.d.ts +9 -0
  269. package/dist/storage/sparql/ComunicaQuintEngine.js +50 -9
  270. package/dist/storage/sparql/ComunicaQuintEngine.js.map +1 -1
  271. package/dist/storage/sparql/QueryOptimizer.js +13 -1
  272. package/dist/storage/sparql/QueryOptimizer.js.map +1 -1
  273. package/dist/storage/sparql/QuintQuerySource.d.ts +14 -0
  274. package/dist/storage/sparql/QuintQuerySource.js +152 -1
  275. package/dist/storage/sparql/QuintQuerySource.js.map +1 -1
  276. package/dist/storage/sparql/SubgraphQueryEngine.d.ts +1 -0
  277. package/dist/storage/sparql/SubgraphQueryEngine.js +6 -2
  278. package/dist/storage/sparql/SubgraphQueryEngine.js.map +1 -1
  279. package/dist/storage/sparql/SubgraphQueryEngine.jsonld +4 -0
  280. package/dist/subdomain/SubdomainClient.d.ts +3 -3
  281. package/dist/subdomain/SubdomainClient.js +1 -1
  282. package/dist/subdomain/SubdomainClient.js.map +1 -1
  283. package/dist/subdomain/SubdomainService.d.ts +15 -16
  284. package/dist/subdomain/SubdomainService.js +80 -54
  285. package/dist/subdomain/SubdomainService.js.map +1 -1
  286. package/dist/subdomain/SubdomainService.jsonld +22 -26
  287. package/dist/supervisor/Supervisor.d.ts +7 -2
  288. package/dist/supervisor/Supervisor.js +33 -1
  289. package/dist/supervisor/Supervisor.js.map +1 -1
  290. package/dist/task/DrizzleTaskQueue.d.ts +1 -1
  291. package/dist/task/DrizzleTaskQueue.js +1 -1
  292. package/dist/task/DrizzleTaskQueue.js.map +1 -1
  293. package/dist/task/schema.d.ts +10 -10
  294. package/dist/task/schema.js +1 -1
  295. package/dist/task/schema.js.map +1 -1
  296. package/dist/test-utils/index.d.ts +4 -0
  297. package/dist/test-utils/index.js +8 -0
  298. package/dist/test-utils/index.js.map +1 -0
  299. package/dist/test-utils/no-auth-xpod.d.ts +11 -0
  300. package/dist/test-utils/no-auth-xpod.js +25 -0
  301. package/dist/test-utils/no-auth-xpod.js.map +1 -0
  302. package/dist/test-utils/seed-pod.d.ts +5 -0
  303. package/dist/test-utils/seed-pod.js +61 -0
  304. package/dist/test-utils/seed-pod.js.map +1 -0
  305. package/package.json +38 -10
  306. package/templates/identity/account/create-pod.html.ejs +110 -0
  307. package/templates/main.html.ejs +10 -0
  308. package/dist/api/handlers/DevHandler.d.ts +0 -18
  309. package/dist/api/handlers/DevHandler.js +0 -276
  310. package/dist/api/handlers/DevHandler.js.map +0 -1
  311. package/dist/api/handlers/SignalHandler.d.ts +0 -13
  312. package/dist/api/handlers/SignalHandler.js +0 -122
  313. package/dist/api/handlers/SignalHandler.js.map +0 -1
  314. package/dist/gateway/Proxy.d.ts +0 -24
  315. package/dist/gateway/Proxy.js +0 -209
  316. package/dist/gateway/Proxy.js.map +0 -1
  317. package/dist/gateway/Supervisor.d.ts +0 -2
  318. package/dist/gateway/Supervisor.js +0 -7
  319. package/dist/gateway/Supervisor.js.map +0 -1
  320. package/dist/gateway/port-finder.d.ts +0 -4
  321. package/dist/gateway/port-finder.js +0 -15
  322. package/dist/gateway/port-finder.js.map +0 -1
  323. package/dist/gateway/types.d.ts +0 -1
  324. package/dist/gateway/types.js +0 -3
  325. package/dist/gateway/types.js.map +0 -1
  326. package/dist/http/SignalInterceptHttpHandler.d.ts +0 -24
  327. package/dist/http/SignalInterceptHttpHandler.js +0 -47
  328. package/dist/http/SignalInterceptHttpHandler.js.map +0 -1
  329. package/dist/http/SignalInterceptHttpHandler.jsonld +0 -103
  330. package/dist/http/admin/EdgeNodeSignalHttpHandler.d.ts +0 -71
  331. package/dist/http/admin/EdgeNodeSignalHttpHandler.js +0 -674
  332. package/dist/http/admin/EdgeNodeSignalHttpHandler.js.map +0 -1
  333. package/dist/http/admin/EdgeNodeSignalHttpHandler.jsonld +0 -406
  334. package/dist/http/cluster/PodMigrationHttpHandler.jsonld +0 -169
  335. package/dist/quota/DefaultQuotaService.d.ts +0 -16
  336. package/dist/quota/DefaultQuotaService.js +0 -37
  337. package/dist/quota/DefaultQuotaService.js.map +0 -1
  338. package/dist/quota/DefaultQuotaService.jsonld +0 -85
  339. package/dist/service/EdgeNodeHeartbeatService.js.map +0 -1
  340. package/dist/service/PodMigrationService.jsonld +0 -76
  341. package/dist/storage/MigratableDataAccessor.d.ts +0 -63
  342. package/dist/storage/MigratableDataAccessor.js +0 -11
  343. package/dist/storage/MigratableDataAccessor.js.map +0 -1
  344. package/dist/storage/MigratableDataAccessor.jsonld +0 -60
  345. package/dist/storage/accessors/TieredMinioDataAccessor.d.ts +0 -150
  346. package/dist/storage/accessors/TieredMinioDataAccessor.js +0 -582
  347. package/dist/storage/accessors/TieredMinioDataAccessor.js.map +0 -1
  348. package/dist/storage/accessors/TieredMinioDataAccessor.jsonld +0 -333
  349. package/static/app/assets/index.css +0 -1
  350. package/static/app/assets/main.js +0 -11
@@ -1 +1 @@
1
- {"version":3,"file":"QuintQuerySource.js","sourceRoot":"","sources":["../../../src/storage/sparql/QuintQuerySource.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * QuintQuerySource - IQuerySource implementation for QuintStore\n * \n * This implements Comunica's IQuerySource interface to enable proper FILTER pushdown.\n * Unlike RDF.Store.match() which only receives 4 terms, IQuerySource.queryBindings()\n * receives the full SPARQL algebra including FILTER expressions.\n * \n * Design:\n * - Delegates filter extraction to FilterPushdownExtractor\n * - Delegates pattern building to PatternBuilder\n * - Delegates in-memory evaluation to ExpressionEvaluator\n * - Coordinates these components to execute queries efficiently\n */\n\nimport type { Quad, Term, Variable, Bindings } from '@rdfjs/types';\nimport type { AsyncIterator } from 'asynciterator';\nimport { ArrayIterator, BufferedIterator, wrap } from 'asynciterator';\nimport { Algebra, Util as AlgebraUtil } from 'sparqlalgebrajs';\nimport { DataFactory } from 'rdf-data-factory';\n\nimport type { QuintStore, QuintPattern, QueryOptions, TermName, TermOperators, CompoundPattern, CompoundResult } from '../quint/types';\nimport type { SecurityFilters } from './ComunicaQuintEngine';\nimport { FilterPushdownExtractor, type PushdownFilters, type PushdownResult } from './FilterPushdownExtractor';\nimport { PatternBuilder } from './PatternBuilder';\nimport { ExpressionEvaluator } from './ExpressionEvaluator';\nimport { extractVariables } from './AlgebraUtils';\nimport { deserializeObject } from '../quint/serialization';\n\n// Re-export types from Comunica - we define them here to avoid complex import paths\nexport interface IActionContext {\n get<V>(key: { name: string }): V | undefined;\n getSafe<V>(key: { name: string }): V;\n has(key: { name: string }): boolean;\n}\n\nexport interface FragmentSelectorShape {\n type: 'operation' | 'conjunction' | 'disjunction' | 'negation' | 'arity';\n operation?: {\n operationType: 'type' | 'pattern' | 'wildcard';\n type?: string;\n pattern?: Algebra.Operation;\n };\n children?: FragmentSelectorShape[];\n child?: FragmentSelectorShape;\n variablesOptional?: Variable[];\n joinBindings?: true;\n filterBindings?: true;\n min?: number;\n max?: number;\n}\n\nexport interface BindingsStream extends AsyncIterator<Bindings> {\n // AsyncIterator with metadata property\n}\n\nexport interface IQueryBindingsOptions {\n joinBindings?: {\n bindings: BindingsStream;\n metadata: unknown;\n };\n filterBindings?: {\n bindings: BindingsStream;\n metadata: unknown;\n };\n}\n\nexport interface MetadataValidationState {\n // Metadata validation state\n}\n\n/**\n * IQuerySource interface compatible with Comunica\n */\nexport interface IQuerySource {\n referenceValue: unknown;\n getSelectorShape(context: IActionContext): Promise<FragmentSelectorShape>;\n queryBindings(operation: Algebra.Operation, context: IActionContext, options?: IQueryBindingsOptions): BindingsStream;\n queryQuads(operation: Algebra.Operation, context: IActionContext): AsyncIterator<Quad>;\n queryBoolean(operation: Algebra.Ask, context: IActionContext): Promise<boolean>;\n queryVoid(operation: Algebra.Update, context: IActionContext): Promise<void>;\n toString(): string;\n}\n\ninterface OptimizeParams {\n limit?: number;\n offset?: number;\n order?: TermName[];\n /** 原始 ORDER BY 变量名,用于分析绑定位置 */\n orderVarName?: string;\n reverse?: boolean;\n}\n\nconst dataFactory = new DataFactory();\n\n/**\n * QuintQuerySource implements IQuerySource for QuintStore\n * \n * Key features:\n * 1. Declares support for FILTER operations via getSelectorShape()\n * 2. Receives full SPARQL algebra in queryBindings() including FILTERs\n * 3. Extracts filter conditions and pushes them down to QuintStore\n * 4. Applies security filters (ACL) unconditionally\n * 5. Tree-based evaluation for remaining non-pushdownable expressions\n */\nexport class QuintQuerySource implements IQuerySource {\n public readonly referenceValue: unknown;\n \n private readonly store: QuintStore;\n private readonly debug: boolean;\n private readonly bindingsFactory: any; // BindingsFactory from Comunica\n \n // Closures to get current query context\n private readonly getSecurityFilters: () => SecurityFilters | undefined;\n private readonly getOptimizeParams: () => OptimizeParams | null;\n private readonly getFilterExpression: ((varName: string) => Algebra.Expression | undefined) | undefined;\n \n // Delegate components\n private readonly filterExtractor: FilterPushdownExtractor;\n private readonly patternBuilder: PatternBuilder;\n private readonly expressionEvaluator: ExpressionEvaluator;\n \n constructor(\n store: QuintStore,\n options: {\n debug?: boolean;\n bindingsFactory: any;\n getSecurityFilters: () => SecurityFilters | undefined;\n getOptimizeParams: () => OptimizeParams | null;\n getFilterExpression?: (varName: string) => Algebra.Expression | undefined;\n }\n ) {\n this.store = store;\n this.referenceValue = store; // Reference for source identification\n this.debug = options.debug ?? false;\n this.bindingsFactory = options.bindingsFactory;\n this.getSecurityFilters = options.getSecurityFilters;\n this.getOptimizeParams = options.getOptimizeParams;\n this.getFilterExpression = options.getFilterExpression;\n \n // Initialize delegate components\n this.filterExtractor = new FilterPushdownExtractor();\n this.patternBuilder = new PatternBuilder(this.getSecurityFilters);\n this.expressionEvaluator = new ExpressionEvaluator(\n store,\n this.patternBuilder,\n this.extractPatternAndFilter.bind(this)\n );\n }\n\n /**\n * Declare the operations this source supports\n * \n * We support:\n * - Basic quad patterns (for simple queries)\n * - FILTER operations (for filter pushdown)\n * - BGP operations (for multi-pattern queries)\n * - joinBindings: allows Comunica to push JOIN operations down to us\n * \n * The joinBindings support enables ActorRdfJoinMultiBindSource to push\n * multiple patterns to us efficiently, using SQL JOINs instead of\n * Comunica's nested loop approach.\n */\n async getSelectorShape(_context: IActionContext): Promise<FragmentSelectorShape> {\n // Check if store supports compound queries\n const supportsCompound = !!this.store.getCompound;\n \n return {\n type: 'disjunction',\n children: [\n // Support basic patterns with joinBindings\n {\n type: 'operation',\n operation: {\n operationType: 'pattern',\n pattern: {\n type: 'pattern',\n subject: dataFactory.variable('s'),\n predicate: dataFactory.variable('p'),\n object: dataFactory.variable('o'),\n graph: dataFactory.variable('g'),\n } as Algebra.Pattern,\n },\n variablesOptional: [\n dataFactory.variable('s'),\n dataFactory.variable('p'),\n dataFactory.variable('o'),\n dataFactory.variable('g'),\n ],\n // Allow Comunica to push join bindings to us\n ...(supportsCompound ? { joinBindings: true } : {}),\n },\n // Support BGP operations (multi-pattern queries)\n {\n type: 'operation',\n operation: {\n operationType: 'type',\n type: Algebra.types.BGP,\n },\n ...(supportsCompound ? { joinBindings: true } : {}),\n },\n // Support FILTER operations\n {\n type: 'operation',\n operation: {\n operationType: 'type',\n type: Algebra.types.FILTER,\n },\n ...(supportsCompound ? { joinBindings: true } : {}),\n },\n // Support JOIN operations (for receiving compound queries from Comunica)\n {\n type: 'operation',\n operation: {\n operationType: 'type',\n type: Algebra.types.JOIN,\n },\n ...(supportsCompound ? { joinBindings: true } : {}),\n },\n ],\n };\n }\n\n /**\n * Query bindings - main entry point for SPARQL queries\n * \n * When Comunica's ActorRdfJoinMultiBindSource selects us for a join operation,\n * it passes options.joinBindings containing bindings from the first pattern.\n * We need to use these bindings to filter our query results efficiently.\n */\n queryBindings(operation: Algebra.Operation, _context: IActionContext, options?: IQueryBindingsOptions): BindingsStream {\n if (this.debug) {\n console.log(`[QuintQuerySource] queryBindings() called with operation type: ${operation.type}`);\n console.log(`[QuintQuerySource] Has joinBindings: ${!!options?.joinBindings}`);\n console.log(`[QuintQuerySource] Has filterBindings: ${!!options?.filterBindings}`);\n // Log operation structure\n if (operation.type === 'join' && (operation as any).input) {\n console.log(`[QuintQuerySource] JOIN inputs: ${(operation as any).input?.length || 0}`);\n }\n }\n\n // Wrap async execution in an iterator using wrap()\n const variables = this.getVariablesFromOperation(operation);\n const resultIterator = wrap(this.executeQuery(operation, options).then(results => results));\n\n // Add metadata for Comunica\n // Variables must be in format { variable: Variable, canBeUndef: boolean }\n const variablesMetadata = variables.map(v => ({ variable: v, canBeUndef: false }));\n resultIterator.setProperty('metadata', {\n state: { invalidate: () => {}, invalid: false, addInvalidateListener: () => {} },\n cardinality: { type: 'estimate' as const, value: Number.POSITIVE_INFINITY },\n variables: variablesMetadata,\n });\n\n return resultIterator as BindingsStream;\n }\n\n /**\n * Execute query and return bindings\n * \n * If options.joinBindings is provided, we need to:\n * 1. Collect bindings from the stream (these are from the first pattern in the JOIN)\n * 2. Extract variable values that overlap with our patterns\n * 3. Use those values as IN conditions in our query\n * 4. JOIN the results with the incoming bindings\n */\n private async executeQuery(operation: Algebra.Operation, options?: IQueryBindingsOptions): Promise<Bindings[]> {\n // Handle joinBindings from Comunica (bind join)\n if (options?.joinBindings && this.store.getCompound) {\n return this.executeBindJoin(operation, options.joinBindings);\n }\n\n const { pattern, patterns, filter } = this.extractPatternAndFilter(operation);\n \n // Check if we can use compound query (multiple patterns with same subject variable)\n if (patterns && patterns.length > 1 && this.store.getCompound) {\n const compoundResult = await this.tryCompoundQuery(patterns, filter, operation);\n if (compoundResult) {\n return compoundResult;\n }\n // Fall back to single pattern execution if compound query not applicable\n }\n\n const variables = extractVariables(pattern);\n\n // Try to get pre-extracted filter expressions for variables in this pattern\n let combinedFilter = filter;\n if (this.getFilterExpression && !filter) {\n // Check if any variable in the pattern has a pre-extracted filter\n for (const variable of variables) {\n const preExtractedFilter = this.getFilterExpression(variable.value);\n if (preExtractedFilter) {\n if (this.debug) {\n console.log(`[QuintQuerySource] Found pre-extracted filter for ?${variable.value}`);\n }\n if (combinedFilter) {\n // Combine with AND\n combinedFilter = {\n type: 'expression',\n expressionType: 'operator',\n operator: '&&',\n args: [combinedFilter, preExtractedFilter],\n } as Algebra.OperatorExpression;\n } else {\n combinedFilter = preExtractedFilter;\n }\n }\n }\n }\n\n // Extract pushdownable filters\n let pushdownFilters: PushdownFilters = {};\n let remainder: Algebra.Expression | null = combinedFilter;\n let orBranches: PushdownFilters[] | undefined;\n let orNonPushdownBranches: Algebra.Expression[] | undefined;\n\n if (combinedFilter) {\n const result = this.filterExtractor.extractPushdownFilters(combinedFilter, pattern);\n pushdownFilters = result.filters;\n remainder = result.remainder;\n orBranches = result.orBranches;\n orNonPushdownBranches = result.orNonPushdownBranches;\n }\n\n if (this.debug) {\n console.log(`[QuintQuerySource] Pushdown filters:`, JSON.stringify(pushdownFilters, null, 2));\n console.log(`[QuintQuerySource] OR branches:`, orBranches?.length || 0);\n console.log(`[QuintQuerySource] OR non-pushdown branches:`, orNonPushdownBranches?.length || 0);\n console.log(`[QuintQuerySource] Has remainder:`, remainder !== null);\n }\n\n // Get query options\n // NOTE: Comunica handles OFFSET, we only pass limit to QuintStore\n // If there's an offset, we need to fetch limit + offset records\n // and let Comunica skip the first `offset` records\n const optimizeParams = this.getOptimizeParams();\n const queryOptions: QueryOptions = {};\n if (optimizeParams?.limit) {\n // Fetch enough records for Comunica to apply offset\n queryOptions.limit = optimizeParams.limit + (optimizeParams.offset || 0);\n }\n // Don't pass offset to QuintStore - Comunica handles it\n \n // 处理 ORDER BY 下推\n if (optimizeParams?.order) {\n // 直接使用已映射的 order\n queryOptions.order = optimizeParams.order;\n } else if (optimizeParams?.orderVarName) {\n // 通过 pattern 分析变量绑定位置\n const orderField = this.findVariableBinding(optimizeParams.orderVarName, pattern);\n if (orderField) {\n queryOptions.order = [orderField];\n if (this.debug) {\n console.log(`[QuintQuerySource] ORDER BY ?${optimizeParams.orderVarName} -> ${orderField} (via pattern analysis)`);\n }\n }\n }\n if (optimizeParams?.reverse) queryOptions.reverse = optimizeParams.reverse;\n\n let results: Bindings[];\n\n // Handle OR branches (union semantics)\n if (orBranches && orBranches.length > 0) {\n results = await this.executeOrBranches(pattern, variables, orBranches, orNonPushdownBranches, queryOptions);\n if (this.debug) {\n console.log(`[QuintQuerySource] OR pushdown branches returned ${results.length} unique results`);\n }\n } else if (Object.keys(pushdownFilters).length > 0) {\n // Build pattern with pushdown filters\n const quintPattern = this.patternBuilder.buildQuintPattern(pattern, pushdownFilters);\n const quads = await this.store.get(quintPattern, queryOptions);\n results = this.quadsToBindings(quads, variables, pattern);\n if (this.debug) {\n console.log(`[QuintQuerySource] Pushdown query returned ${results.length} results`);\n }\n } else {\n // No pushdown, get all matching quads\n const quintPattern = this.patternBuilder.buildBasePattern(pattern);\n const quads = await this.store.get(quintPattern, queryOptions);\n results = this.quadsToBindings(quads, variables, pattern);\n if (this.debug) {\n console.log(`[QuintQuerySource] Base query returned ${results.length} results`);\n }\n }\n\n // NOTE: We don't apply in-memory filter for pre-extracted filters\n // because Comunica will handle the final filtering after JOIN\n // Only apply remainder if it's from the original operation's filter\n if (remainder && filter) {\n results = await this.expressionEvaluator.evaluateFilterTree(remainder, results, pattern);\n if (this.debug) {\n console.log(`[QuintQuerySource] After in-memory filter: ${results.length} results`);\n }\n }\n\n return results;\n }\n\n /**\n * Execute a bind join: use incoming bindings to filter our query\n * \n * This is called when Comunica's ActorRdfJoinMultiBindSource pushes bindings to us.\n * We use SQL IN clause to efficiently query only the rows matching the incoming bindings.\n */\n private async executeBindJoin(\n operation: Algebra.Operation,\n joinBindings: NonNullable<IQueryBindingsOptions['joinBindings']>\n ): Promise<Bindings[]> {\n // Collect all incoming bindings\n const incomingBindings: Bindings[] = [];\n for await (const binding of joinBindings.bindings) {\n incomingBindings.push(binding);\n }\n\n if (this.debug) {\n console.log(`[QuintQuerySource] executeBindJoin: received ${incomingBindings.length} bindings`);\n }\n\n if (incomingBindings.length === 0) {\n return [];\n }\n\n // Extract patterns from the operation\n const { pattern, patterns, filter } = this.extractPatternAndFilter(operation);\n const allPatterns = patterns || [pattern];\n\n // Find overlapping variables between incoming bindings and our patterns\n // These are the JOIN keys\n const incomingVars = new Set<string>();\n const firstBinding = incomingBindings[0];\n for (const key of firstBinding.keys()) {\n incomingVars.add(key.value);\n }\n\n // Find which pattern variables overlap with incoming bindings\n // Typically this would be the subject variable\n const patternVars = new Map<string, { patternIdx: number; field: TermName }>();\n for (let i = 0; i < allPatterns.length; i++) {\n const p = allPatterns[i];\n if (p.subject?.termType === 'Variable' && incomingVars.has(p.subject.value)) {\n patternVars.set(p.subject.value, { patternIdx: i, field: 'subject' });\n }\n if (p.predicate?.termType === 'Variable' && incomingVars.has(p.predicate.value)) {\n patternVars.set(p.predicate.value, { patternIdx: i, field: 'predicate' });\n }\n if (p.object?.termType === 'Variable' && incomingVars.has(p.object.value)) {\n patternVars.set(p.object.value, { patternIdx: i, field: 'object' });\n }\n if (p.graph?.termType === 'Variable' && incomingVars.has(p.graph.value)) {\n patternVars.set(p.graph.value, { patternIdx: i, field: 'graph' });\n }\n }\n\n if (this.debug) {\n console.log(`[QuintQuerySource] Overlapping variables:`, [...patternVars.keys()]);\n }\n\n if (patternVars.size === 0) {\n // No overlapping variables - just execute normally and return cartesian product\n // This shouldn't happen in typical use cases\n const results = await this.executeQuery(operation);\n return this.cartesianJoin(incomingBindings, results);\n }\n\n // Use the first overlapping variable as the join key\n const [joinVarName, joinInfo] = [...patternVars.entries()][0];\n \n // Collect unique values for the join variable from incoming bindings\n const joinValues = new Set<string>();\n for (const binding of incomingBindings) {\n const term = binding.get(dataFactory.variable(joinVarName));\n if (term) {\n joinValues.add(term.value);\n }\n }\n\n if (this.debug) {\n console.log(`[QuintQuerySource] Join variable: ?${joinVarName}, ${joinValues.size} unique values`);\n }\n\n // Build compound query with IN filter on join variable\n if (allPatterns.length > 1) {\n // Multiple patterns - use compound query\n return this.executeBindJoinCompound(\n allPatterns, filter, joinVarName, joinInfo.field, \n [...joinValues], incomingBindings\n );\n } else {\n // Single pattern - use simple query with IN filter\n return this.executeBindJoinSimple(\n pattern, filter, joinVarName, joinInfo.field,\n [...joinValues], incomingBindings\n );\n }\n }\n\n /**\n * Execute bind join for a single pattern using IN filter\n */\n private async executeBindJoinSimple(\n pattern: Algebra.Pattern,\n filter: Algebra.Expression | null,\n joinVarName: string,\n joinField: TermName,\n joinValues: string[],\n incomingBindings: Bindings[]\n ): Promise<Bindings[]> {\n const variables = extractVariables(pattern);\n\n // Build pattern with IN filter for join values\n let pushdownFilters: PushdownFilters = {};\n \n if (filter) {\n const result = this.filterExtractor.extractPushdownFilters(filter, pattern);\n pushdownFilters = result.filters;\n }\n\n // Add IN filter for join values\n pushdownFilters[joinField] = {\n ...pushdownFilters[joinField],\n $in: joinValues,\n };\n\n const quintPattern = this.patternBuilder.buildQuintPattern(pattern, pushdownFilters);\n const quads = await this.store.get(quintPattern);\n const queryResults = this.quadsToBindings(quads, variables, pattern);\n\n if (this.debug) {\n console.log(`[QuintQuerySource] Bind join simple: ${queryResults.length} results from DB`);\n }\n\n // Join with incoming bindings\n return this.hashJoin(incomingBindings, queryResults, joinVarName);\n }\n\n /**\n * Execute bind join for multiple patterns using compound query\n */\n private async executeBindJoinCompound(\n patterns: Algebra.Pattern[],\n filter: Algebra.Expression | null,\n joinVarName: string,\n joinField: TermName,\n joinValues: string[],\n incomingBindings: Bindings[]\n ): Promise<Bindings[]> {\n // Build QuintPattern for each pattern\n const quintPatterns: QuintPattern[] = [];\n const filtersByPattern = this.distributeFiltersToPatterns(filter, patterns);\n\n for (let i = 0; i < patterns.length; i++) {\n const pattern = patterns[i];\n const patternFilters = filtersByPattern.get(i) || {};\n \n // Add IN filter for join values on the first pattern\n if (i === 0) {\n patternFilters[joinField] = {\n ...patternFilters[joinField],\n $in: joinValues,\n };\n }\n \n const quintPattern = this.patternBuilder.buildQuintPattern(pattern, patternFilters);\n quintPatterns.push(quintPattern);\n }\n\n // Build compound pattern\n const compound: CompoundPattern = {\n patterns: quintPatterns,\n joinOn: joinField,\n select: this.buildSelectForPatterns(patterns),\n };\n\n const results = await this.store.getCompound!(compound);\n const queryResults = this.compoundResultsToBindings(results, patterns);\n\n if (this.debug) {\n console.log(`[QuintQuerySource] Bind join compound: ${queryResults.length} results from DB`);\n }\n\n // Join with incoming bindings\n return this.hashJoin(incomingBindings, queryResults, joinVarName);\n }\n\n /**\n * Hash join two binding sets on a common variable\n */\n private hashJoin(\n left: Bindings[],\n right: Bindings[],\n joinVarName: string\n ): Bindings[] {\n // Build hash table on right side\n const rightIndex = new Map<string, Bindings[]>();\n const joinVar = dataFactory.variable(joinVarName);\n \n for (const binding of right) {\n const term = binding.get(joinVar);\n if (term) {\n const key = term.value;\n if (!rightIndex.has(key)) {\n rightIndex.set(key, []);\n }\n rightIndex.get(key)!.push(binding);\n }\n }\n\n // Probe with left side\n const results: Bindings[] = [];\n for (const leftBinding of left) {\n const term = leftBinding.get(joinVar);\n if (term) {\n const key = term.value;\n const matches = rightIndex.get(key);\n if (matches) {\n for (const rightBinding of matches) {\n // Merge bindings\n const merged = this.mergeBindings(leftBinding, rightBinding);\n if (merged) {\n results.push(merged);\n }\n }\n }\n }\n }\n\n return results;\n }\n\n /**\n * Merge two bindings, returning null if they conflict\n */\n private mergeBindings(left: Bindings, right: Bindings): Bindings | null {\n const entries: [Variable, Term][] = [];\n \n // Add all from left\n for (const key of left.keys()) {\n const term = left.get(key);\n if (term) {\n entries.push([key, term]);\n }\n }\n \n // Add from right, checking for conflicts\n for (const key of right.keys()) {\n const rightTerm = right.get(key);\n const leftTerm = left.get(key);\n \n if (rightTerm) {\n if (leftTerm) {\n // Both have this variable - must match\n if (leftTerm.value !== rightTerm.value || leftTerm.termType !== rightTerm.termType) {\n return null; // Conflict\n }\n // Same value, already in entries\n } else {\n // Only right has it\n entries.push([key, rightTerm]);\n }\n }\n }\n \n return this.bindingsFactory.bindings(entries);\n }\n\n /**\n * Cartesian product of two binding sets\n */\n private cartesianJoin(left: Bindings[], right: Bindings[]): Bindings[] {\n const results: Bindings[] = [];\n for (const l of left) {\n for (const r of right) {\n const merged = this.mergeBindings(l, r);\n if (merged) {\n results.push(merged);\n }\n }\n }\n return results;\n }\n\n /**\n * Execute OR branches with union semantics\n */\n private async executeOrBranches(\n pattern: Algebra.Pattern,\n variables: Variable[],\n orBranches: PushdownFilters[],\n orNonPushdownBranches: Algebra.Expression[] | undefined,\n queryOptions: QueryOptions\n ): Promise<Bindings[]> {\n const seen = new Set<string>();\n const results: Bindings[] = [];\n\n // Execute each pushdownable branch\n for (const branchFilters of orBranches) {\n const quintPattern = this.patternBuilder.buildQuintPattern(pattern, branchFilters);\n const quads = await this.store.get(quintPattern, queryOptions);\n const bindings = this.quadsToBindings(quads, variables, pattern);\n \n for (const binding of bindings) {\n const key = this.expressionEvaluator.getBindingKey(binding);\n if (!seen.has(key)) {\n seen.add(key);\n results.push(binding);\n }\n }\n }\n\n // Handle non-pushdownable OR branches\n if (orNonPushdownBranches && orNonPushdownBranches.length > 0) {\n // Get base results without filter for in-memory evaluation\n const quintPattern = this.patternBuilder.buildBasePattern(pattern);\n const quads = await this.store.get(quintPattern, queryOptions);\n const candidates = this.quadsToBindings(quads, variables, pattern);\n \n // Evaluate each non-pushdownable branch\n for (const branchExpr of orNonPushdownBranches) {\n const branchResults = await this.expressionEvaluator.evaluateFilterTree(branchExpr, candidates, pattern);\n for (const binding of branchResults) {\n const key = this.expressionEvaluator.getBindingKey(binding);\n if (!seen.has(key)) {\n seen.add(key);\n results.push(binding);\n }\n }\n }\n }\n\n return results;\n }\n\n /**\n * Try to execute a compound query for multiple patterns joined by same subject\n * Returns null if compound query is not applicable\n */\n private async tryCompoundQuery(\n patterns: Algebra.Pattern[],\n filter: Algebra.Expression | null,\n _operation: Algebra.Operation\n ): Promise<Bindings[] | null> {\n // Check if all patterns share the same subject variable\n const subjectVars = patterns.map(p => \n p.subject?.termType === 'Variable' ? p.subject.value : null\n );\n const uniqueSubjectVars = [...new Set(subjectVars.filter(v => v !== null))];\n \n if (uniqueSubjectVars.length !== 1) {\n // Not all patterns share the same subject variable\n if (this.debug) {\n console.log(`[QuintQuerySource] Cannot use compound query: different subject variables`, subjectVars);\n }\n return null;\n }\n\n const joinVar = uniqueSubjectVars[0];\n if (this.debug) {\n console.log(`[QuintQuerySource] Using compound query with ${patterns.length} patterns, joined on ?${joinVar}`);\n }\n\n // Build QuintPattern for each pattern, including filter conditions\n const quintPatterns: QuintPattern[] = [];\n const filtersByPattern = this.distributeFiltersToPatterns(filter, patterns);\n\n for (let i = 0; i < patterns.length; i++) {\n const pattern = patterns[i];\n const patternFilters = filtersByPattern.get(i) || {};\n \n const quintPattern = this.patternBuilder.buildQuintPattern(pattern, patternFilters);\n quintPatterns.push(quintPattern);\n }\n\n // Build compound pattern\n const compound: CompoundPattern = {\n patterns: quintPatterns,\n joinOn: 'subject',\n select: this.buildSelectForPatterns(patterns),\n };\n\n // Execute compound query\n const optimizeParams = this.getOptimizeParams();\n const queryOptions: QueryOptions = {};\n if (optimizeParams?.limit) {\n queryOptions.limit = optimizeParams.limit + (optimizeParams.offset || 0);\n }\n\n const results = await this.store.getCompound!(compound, queryOptions);\n\n // Convert CompoundResult to Bindings\n return this.compoundResultsToBindings(results, patterns);\n }\n\n /**\n * Distribute filter conditions to their respective patterns\n * Returns a map of pattern index -> PushdownFilters\n */\n private distributeFiltersToPatterns(\n filter: Algebra.Expression | null,\n patterns: Algebra.Pattern[]\n ): Map<number, PushdownFilters> {\n const result = new Map<number, PushdownFilters>();\n \n if (!filter) return result;\n\n // Build a map of variable name to pattern index\n const varToPatternIdx = new Map<string, number>();\n for (let i = 0; i < patterns.length; i++) {\n const p = patterns[i];\n if (p.object?.termType === 'Variable') {\n varToPatternIdx.set(p.object.value, i);\n }\n }\n\n // Extract filters and distribute them\n for (let i = 0; i < patterns.length; i++) {\n const patternResult = this.filterExtractor.extractPushdownFilters(filter, patterns[i]);\n if (Object.keys(patternResult.filters).length > 0) {\n result.set(i, patternResult.filters);\n }\n }\n\n return result;\n }\n\n /**\n * Build SELECT clause config for patterns\n */\n private buildSelectForPatterns(patterns: Algebra.Pattern[]): CompoundPattern['select'] {\n const select: NonNullable<CompoundPattern['select']> = [];\n \n for (let i = 0; i < patterns.length; i++) {\n const p = patterns[i];\n \n // Select object if it's a variable\n if (p.object?.termType === 'Variable') {\n select.push({\n pattern: i,\n field: 'object',\n alias: `p${i}_${p.object.value}`,\n });\n }\n \n // Select predicate if it's a variable\n if (p.predicate?.termType === 'Variable') {\n select.push({\n pattern: i,\n field: 'predicate',\n alias: `p${i}_${p.predicate.value}`,\n });\n }\n\n // Select graph if it's a variable\n if (p.graph?.termType === 'Variable') {\n select.push({\n pattern: i,\n field: 'graph',\n alias: `p${i}_${p.graph.value}`,\n });\n }\n }\n\n return select;\n }\n\n /**\n * Convert CompoundResult array to Bindings array\n */\n private compoundResultsToBindings(\n results: CompoundResult[],\n patterns: Algebra.Pattern[]\n ): Bindings[] {\n // Collect all variables from all patterns\n const variables: Variable[] = [];\n const varNames = new Set<string>();\n \n for (const p of patterns) {\n if (p.subject?.termType === 'Variable' && !varNames.has(p.subject.value)) {\n variables.push(p.subject as Variable);\n varNames.add(p.subject.value);\n }\n if (p.predicate?.termType === 'Variable' && !varNames.has(p.predicate.value)) {\n variables.push(p.predicate as Variable);\n varNames.add(p.predicate.value);\n }\n if (p.object?.termType === 'Variable' && !varNames.has(p.object.value)) {\n variables.push(p.object as Variable);\n varNames.add(p.object.value);\n }\n if (p.graph?.termType === 'Variable' && !varNames.has(p.graph.value)) {\n variables.push(p.graph as Variable);\n varNames.add(p.graph.value);\n }\n }\n\n return results.map(result => {\n const entries: [Variable, Term][] = [];\n \n for (const v of variables) {\n const varName = v.value;\n \n // Check if this is the join variable (subject)\n if (patterns[0].subject?.termType === 'Variable' && \n patterns[0].subject.value === varName) {\n // Use joinValue for subject\n const term = dataFactory.namedNode(result.joinValue);\n entries.push([v, term]);\n continue;\n }\n \n // Look for the variable in bindings\n for (let i = 0; i < patterns.length; i++) {\n const p = patterns[i];\n \n if (p.object?.termType === 'Variable' && p.object.value === varName) {\n const alias = `p${i}_${varName}`;\n const value = result.bindings[alias];\n if (value !== undefined) {\n // Deserialize the value\n const term = this.deserializeValue(value);\n entries.push([v, term]);\n break;\n }\n }\n \n if (p.predicate?.termType === 'Variable' && p.predicate.value === varName) {\n const alias = `p${i}_${varName}`;\n const value = result.bindings[alias];\n if (value !== undefined) {\n const term = dataFactory.namedNode(value);\n entries.push([v, term]);\n break;\n }\n }\n\n if (p.graph?.termType === 'Variable' && p.graph.value === varName) {\n const alias = `p${i}_${varName}`;\n const value = result.bindings[alias];\n if (value !== undefined) {\n const term = dataFactory.namedNode(value);\n entries.push([v, term]);\n break;\n }\n }\n }\n }\n \n return this.bindingsFactory.bindings(entries);\n });\n }\n\n /**\n * Deserialize a value from storage format to RDF Term\n * Uses the same deserialization logic as QuintStore\n */\n private deserializeValue(value: string): Term {\n return deserializeObject(value);\n }\n\n /**\n * Convert quads to bindings based on pattern variables\n */\n private quadsToBindings(quads: Quad[], variables: Variable[], pattern: Algebra.Pattern): Bindings[] {\n if (this.debug) {\n console.log(`[QuintQuerySource] quadsToBindings: ${quads.length} quads, ${variables.length} variables`);\n console.log(`[QuintQuerySource] Variables:`, variables.map(v => v.value));\n console.log(`[QuintQuerySource] Pattern:`, {\n subject: pattern.subject?.termType === 'Variable' ? `?${pattern.subject.value}` : pattern.subject?.value,\n predicate: pattern.predicate?.termType === 'Variable' ? `?${pattern.predicate.value}` : pattern.predicate?.value,\n object: pattern.object?.termType === 'Variable' ? `?${pattern.object.value}` : pattern.object?.value,\n graph: pattern.graph?.termType === 'Variable' ? `?${pattern.graph.value}` : pattern.graph?.value || pattern.graph?.termType,\n });\n }\n return quads.map(quad => {\n const entries: [Variable, Term][] = [];\n for (const v of variables) {\n const term = this.getTermForVariable(v, quad, pattern);\n if (term) {\n entries.push([v, term]);\n }\n }\n if (this.debug && entries.length !== variables.length) {\n console.log(`[QuintQuerySource] Warning: only ${entries.length} of ${variables.length} variables bound`);\n }\n return this.bindingsFactory.bindings(entries);\n });\n }\n\n /**\n * Get the term from quad that matches the variable position in pattern\n */\n private getTermForVariable(variable: Variable, quad: Quad, pattern: Algebra.Pattern): Term | null {\n const varName = variable.value;\n \n // Check which position in the pattern this variable is in\n if (pattern.subject?.termType === 'Variable' && pattern.subject.value === varName) {\n return quad.subject;\n }\n if (pattern.predicate?.termType === 'Variable' && pattern.predicate.value === varName) {\n return quad.predicate;\n }\n if (pattern.object?.termType === 'Variable' && pattern.object.value === varName) {\n return quad.object;\n }\n if (pattern.graph?.termType === 'Variable' && pattern.graph.value === varName) {\n return quad.graph;\n }\n \n return null;\n }\n\n /**\n * Extract BGP pattern and filter from operation\n * Returns either a single pattern or multiple patterns (from BGP or JOIN)\n */\n extractPatternAndFilter(operation: Algebra.Operation): { \n pattern: Algebra.Pattern; \n patterns?: Algebra.Pattern[]; // Multiple patterns from BGP or JOIN\n filter: Algebra.Expression | null;\n } {\n let pattern: Algebra.Pattern | null = null;\n let patterns: Algebra.Pattern[] | undefined;\n let filter: Algebra.Expression | null = null;\n\n // Walk the algebra tree to find pattern(s) and filter\n AlgebraUtil.recurseOperation(operation, {\n [Algebra.types.JOIN]: (op: Algebra.Join) => {\n // JOIN contains multiple patterns - extract them all\n if (op.input && op.input.length > 0) {\n const extractedPatterns: Algebra.Pattern[] = [];\n for (const input of op.input) {\n if (input.type === Algebra.types.PATTERN) {\n extractedPatterns.push(input as Algebra.Pattern);\n } else {\n // Recurse into nested operation to find patterns\n const nested = this.extractPatternAndFilter(input);\n if (nested.patterns) {\n extractedPatterns.push(...nested.patterns);\n } else if (nested.pattern) {\n extractedPatterns.push(nested.pattern);\n }\n // Also collect filter from nested operations\n if (nested.filter && !filter) {\n filter = nested.filter;\n }\n }\n }\n if (extractedPatterns.length > 0) {\n patterns = extractedPatterns;\n if (!pattern) {\n pattern = patterns[0];\n }\n }\n }\n return false; // Don't recurse further\n },\n [Algebra.types.BGP]: (op: Algebra.Bgp) => {\n // BGP contains multiple patterns - this is what we want for compound queries\n if (op.patterns && op.patterns.length > 0) {\n patterns = op.patterns as Algebra.Pattern[];\n if (!pattern) {\n pattern = patterns[0];\n }\n }\n return false; // Don't recurse into individual patterns\n },\n [Algebra.types.PATTERN]: (op: Algebra.Pattern) => {\n if (!pattern) pattern = op;\n return false;\n },\n [Algebra.types.FILTER]: (op: Algebra.Filter) => {\n filter = op.expression;\n return true; // Continue to find pattern inside filter\n },\n });\n\n if (!pattern) {\n // Create empty pattern if none found\n pattern = {\n type: 'pattern',\n subject: dataFactory.variable('s'),\n predicate: dataFactory.variable('p'),\n object: dataFactory.variable('o'),\n graph: dataFactory.defaultGraph(),\n } as Algebra.Pattern;\n }\n\n return { pattern, patterns, filter };\n }\n\n /**\n * Get variables from operation\n */\n private getVariablesFromOperation(operation: Algebra.Operation): Variable[] {\n const { pattern, patterns } = this.extractPatternAndFilter(operation);\n \n if (patterns && patterns.length > 1) {\n // Collect variables from all patterns\n const allVars: Variable[] = [];\n const seen = new Set<string>();\n for (const p of patterns) {\n for (const v of extractVariables(p)) {\n if (!seen.has(v.value)) {\n seen.add(v.value);\n allVars.push(v);\n }\n }\n }\n return allVars;\n }\n \n return extractVariables(pattern);\n }\n\n // ============================================================\n // Required IQuerySource Methods\n // ============================================================\n\n queryQuads(operation: Algebra.Operation, _context: IActionContext): AsyncIterator<Quad> {\n const { pattern } = this.extractPatternAndFilter(operation);\n const quintPattern = this.patternBuilder.buildBasePattern(pattern);\n const resultIterator = wrap(this.store.get(quintPattern));\n \n resultIterator.setProperty('metadata', {\n state: { invalidate: () => {}, invalid: false, addInvalidateListener: () => {} },\n cardinality: { type: 'estimate' as const, value: Number.POSITIVE_INFINITY },\n });\n\n return resultIterator;\n }\n\n async queryBoolean(operation: Algebra.Ask, _context: IActionContext): Promise<boolean> {\n const { pattern } = this.extractPatternAndFilter(operation.input);\n const quintPattern = this.patternBuilder.buildBasePattern(pattern);\n const results = await this.store.get(quintPattern, { limit: 1 });\n return results.length > 0;\n }\n\n queryVoid(_operation: Algebra.Update, _context: IActionContext): Promise<void> {\n throw new Error('queryVoid is not implemented');\n }\n\n /**\n * 在 pattern 中查找变量绑定到哪个位置\n * \n * 例如:{ ?s <http://schema.org/name> ?name }\n * - ?s 绑定到 subject\n * - ?name 绑定到 object\n */\n private findVariableBinding(varName: string, pattern: Algebra.Pattern): TermName | null {\n if (pattern.subject?.termType === 'Variable' && pattern.subject.value === varName) {\n return 'subject';\n }\n if (pattern.predicate?.termType === 'Variable' && pattern.predicate.value === varName) {\n return 'predicate';\n }\n if (pattern.object?.termType === 'Variable' && pattern.object.value === varName) {\n return 'object';\n }\n if (pattern.graph?.termType === 'Variable' && pattern.graph.value === varName) {\n return 'graph';\n }\n return null;\n }\n\n toString(): string {\n return `QuintQuerySource(${this.store.constructor.name})`;\n }\n}\n"]}
1
+ {"version":3,"file":"QuintQuerySource.js","sourceRoot":"","sources":["../../../src/storage/sparql/QuintQuerySource.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * QuintQuerySource - IQuerySource implementation for QuintStore\n * \n * This implements Comunica's IQuerySource interface to enable proper FILTER pushdown.\n * Unlike RDF.Store.match() which only receives 4 terms, IQuerySource.queryBindings()\n * receives the full SPARQL algebra including FILTER expressions.\n * \n * Design:\n * - Delegates filter extraction to FilterPushdownExtractor\n * - Delegates pattern building to PatternBuilder\n * - Delegates in-memory evaluation to ExpressionEvaluator\n * - Coordinates these components to execute queries efficiently\n */\n\nimport type { Quad, Term, Variable, Bindings } from '@rdfjs/types';\nimport type { AsyncIterator } from 'asynciterator';\nimport { ArrayIterator, BufferedIterator, wrap } from 'asynciterator';\nimport { Algebra, Util as AlgebraUtil } from 'sparqlalgebrajs';\nimport { DataFactory } from 'rdf-data-factory';\n\nimport type { QuintStore, QuintPattern, QueryOptions, TermName, TermOperators, CompoundPattern, CompoundResult } from '../quint/types';\nimport type { SecurityFilters } from './ComunicaQuintEngine';\nimport { FilterPushdownExtractor, type PushdownFilters, type PushdownResult } from './FilterPushdownExtractor';\nimport { PatternBuilder } from './PatternBuilder';\nimport { ExpressionEvaluator } from './ExpressionEvaluator';\nimport { extractVariables } from './AlgebraUtils';\nimport { deserializeObject } from '../quint/serialization';\n\n// Re-export types from Comunica - we define them here to avoid complex import paths\nexport interface IActionContext {\n get<V>(key: { name: string }): V | undefined;\n getSafe<V>(key: { name: string }): V;\n has(key: { name: string }): boolean;\n}\n\nexport interface FragmentSelectorShape {\n type: 'operation' | 'conjunction' | 'disjunction' | 'negation' | 'arity';\n operation?: {\n operationType: 'type' | 'pattern' | 'wildcard';\n type?: string;\n pattern?: Algebra.Operation;\n };\n children?: FragmentSelectorShape[];\n child?: FragmentSelectorShape;\n variablesOptional?: Variable[];\n joinBindings?: true;\n filterBindings?: true;\n min?: number;\n max?: number;\n}\n\nexport interface BindingsStream extends AsyncIterator<Bindings> {\n // AsyncIterator with metadata property\n}\n\nexport interface IQueryBindingsOptions {\n joinBindings?: {\n bindings: BindingsStream;\n metadata: unknown;\n };\n filterBindings?: {\n bindings: BindingsStream;\n metadata: unknown;\n };\n}\n\nexport interface MetadataValidationState {\n // Metadata validation state\n}\n\n/**\n * IQuerySource interface compatible with Comunica\n */\nexport interface IQuerySource {\n referenceValue: unknown;\n getSelectorShape(context: IActionContext): Promise<FragmentSelectorShape>;\n queryBindings(operation: Algebra.Operation, context: IActionContext, options?: IQueryBindingsOptions): BindingsStream;\n queryQuads(operation: Algebra.Operation, context: IActionContext): AsyncIterator<Quad>;\n queryBoolean(operation: Algebra.Ask, context: IActionContext): Promise<boolean>;\n queryVoid(operation: Algebra.Update, context: IActionContext): Promise<void>;\n toString(): string;\n}\n\ninterface OptimizeParams {\n limit?: number;\n offset?: number;\n order?: TermName[];\n /** 原始 ORDER BY 变量名,用于分析绑定位置 */\n orderVarName?: string;\n reverse?: boolean;\n}\n\nconst dataFactory = new DataFactory();\n\n/**\n * QuintQuerySource implements IQuerySource for QuintStore\n * \n * Key features:\n * 1. Declares support for FILTER operations via getSelectorShape()\n * 2. Receives full SPARQL algebra in queryBindings() including FILTERs\n * 3. Extracts filter conditions and pushes them down to QuintStore\n * 4. Applies security filters (ACL) unconditionally\n * 5. Tree-based evaluation for remaining non-pushdownable expressions\n */\nexport class QuintQuerySource implements IQuerySource {\n public readonly referenceValue: unknown;\n \n private readonly store: QuintStore;\n private readonly debug: boolean;\n private readonly bindingsFactory: any; // BindingsFactory from Comunica\n \n // Closures to get current query context\n private readonly getSecurityFilters: () => SecurityFilters | undefined;\n private readonly getOptimizeParams: () => OptimizeParams | null;\n private readonly getFilterExpression: ((varName: string) => Algebra.Expression | undefined) | undefined;\n \n // Delegate components\n private readonly filterExtractor: FilterPushdownExtractor;\n private readonly patternBuilder: PatternBuilder;\n private readonly expressionEvaluator: ExpressionEvaluator;\n \n constructor(\n store: QuintStore,\n options: {\n debug?: boolean;\n bindingsFactory: any;\n getSecurityFilters: () => SecurityFilters | undefined;\n getOptimizeParams: () => OptimizeParams | null;\n getFilterExpression?: (varName: string) => Algebra.Expression | undefined;\n }\n ) {\n this.store = store;\n this.referenceValue = store; // Reference for source identification\n this.debug = options.debug ?? false;\n this.bindingsFactory = options.bindingsFactory;\n this.getSecurityFilters = options.getSecurityFilters;\n this.getOptimizeParams = options.getOptimizeParams;\n this.getFilterExpression = options.getFilterExpression;\n \n // Initialize delegate components\n this.filterExtractor = new FilterPushdownExtractor();\n this.patternBuilder = new PatternBuilder(this.getSecurityFilters);\n this.expressionEvaluator = new ExpressionEvaluator(\n store,\n this.patternBuilder,\n this.extractPatternAndFilter.bind(this)\n );\n }\n\n /**\n * Declare the operations this source supports\n * \n * We support:\n * - Basic quad patterns (for simple queries)\n * - FILTER operations (for filter pushdown)\n * - BGP operations (for multi-pattern queries)\n * - joinBindings: allows Comunica to push JOIN operations down to us\n * \n * The joinBindings support enables ActorRdfJoinMultiBindSource to push\n * multiple patterns to us efficiently, using SQL JOINs instead of\n * Comunica's nested loop approach.\n */\n async getSelectorShape(_context: IActionContext): Promise<FragmentSelectorShape> {\n // Check if store supports compound queries\n const supportsCompound = !!this.store.getCompound;\n \n return {\n type: 'disjunction',\n children: [\n // Support basic patterns with joinBindings\n {\n type: 'operation',\n operation: {\n operationType: 'pattern',\n pattern: {\n type: 'pattern',\n subject: dataFactory.variable('s'),\n predicate: dataFactory.variable('p'),\n object: dataFactory.variable('o'),\n graph: dataFactory.variable('g'),\n } as Algebra.Pattern,\n },\n variablesOptional: [\n dataFactory.variable('s'),\n dataFactory.variable('p'),\n dataFactory.variable('o'),\n dataFactory.variable('g'),\n ],\n // Allow Comunica to push join bindings to us\n ...(supportsCompound ? { joinBindings: true } : {}),\n },\n // Support BGP operations (multi-pattern queries)\n {\n type: 'operation',\n operation: {\n operationType: 'type',\n type: Algebra.types.BGP,\n },\n ...(supportsCompound ? { joinBindings: true } : {}),\n },\n // Support FILTER operations\n {\n type: 'operation',\n operation: {\n operationType: 'type',\n type: Algebra.types.FILTER,\n },\n ...(supportsCompound ? { joinBindings: true } : {}),\n },\n // Support JOIN operations (for receiving compound queries from Comunica)\n {\n type: 'operation',\n operation: {\n operationType: 'type',\n type: Algebra.types.JOIN,\n },\n ...(supportsCompound ? { joinBindings: true } : {}),\n },\n ],\n };\n }\n\n /**\n * Query bindings - main entry point for SPARQL queries\n * \n * When Comunica's ActorRdfJoinMultiBindSource selects us for a join operation,\n * it passes options.joinBindings containing bindings from the first pattern.\n * We need to use these bindings to filter our query results efficiently.\n */\n queryBindings(operation: Algebra.Operation, _context: IActionContext, options?: IQueryBindingsOptions): BindingsStream {\n if (this.debug) {\n console.log(`[QuintQuerySource] queryBindings() called with operation type: ${operation.type}`);\n console.log(`[QuintQuerySource] Has joinBindings: ${!!options?.joinBindings}`);\n console.log(`[QuintQuerySource] Has filterBindings: ${!!options?.filterBindings}`);\n // Log operation structure\n if (operation.type === 'join' && (operation as any).input) {\n console.log(`[QuintQuerySource] JOIN inputs: ${(operation as any).input?.length || 0}`);\n }\n }\n\n // Wrap async execution in an iterator using wrap()\n const variables = this.getVariablesFromOperation(operation);\n const resultIterator = wrap(this.executeQuery(operation, options).then(results => results));\n\n // Add metadata for Comunica\n // Variables must be in format { variable: Variable, canBeUndef: boolean }\n const variablesMetadata = variables.map(v => ({ variable: v, canBeUndef: false }));\n resultIterator.setProperty('metadata', {\n state: { invalidate: () => {}, invalid: false, addInvalidateListener: () => {} },\n cardinality: { type: 'estimate' as const, value: Number.POSITIVE_INFINITY },\n variables: variablesMetadata,\n });\n\n return resultIterator as BindingsStream;\n }\n\n /**\n * Execute query and return bindings\n * \n * If options.joinBindings is provided, we need to:\n * 1. Collect bindings from the stream (these are from the first pattern in the JOIN)\n * 2. Extract variable values that overlap with our patterns\n * 3. Use those values as IN conditions in our query\n * 4. JOIN the results with the incoming bindings\n */\n private async executeQuery(operation: Algebra.Operation, options?: IQueryBindingsOptions): Promise<Bindings[]> {\n // Handle joinBindings from Comunica (bind join)\n if (options?.joinBindings && this.store.getCompound) {\n return this.executeBindJoin(operation, options.joinBindings);\n }\n\n const { pattern, patterns, filter } = this.extractPatternAndFilter(operation);\n \n // Check if we can use compound query (multiple patterns with same subject variable)\n if (patterns && patterns.length > 1 && this.store.getCompound) {\n const compoundResult = await this.tryCompoundQuery(patterns, filter, operation);\n if (compoundResult) {\n return compoundResult;\n }\n // Compound query not applicable (e.g. inverse patterns with different subject vars).\n // Fall back to per-pattern execution with in-memory hash join.\n const multiResult = await this.executeMultiPatternJoin(patterns, filter);\n if (multiResult) {\n return multiResult;\n }\n }\n\n const variables = extractVariables(pattern);\n\n // Try to get pre-extracted filter expressions for variables in this pattern\n let combinedFilter = filter;\n if (this.getFilterExpression && !filter) {\n // Check if any variable in the pattern has a pre-extracted filter\n for (const variable of variables) {\n const preExtractedFilter = this.getFilterExpression(variable.value);\n if (preExtractedFilter) {\n if (this.debug) {\n console.log(`[QuintQuerySource] Found pre-extracted filter for ?${variable.value}`);\n }\n if (combinedFilter) {\n // Combine with AND\n combinedFilter = {\n type: 'expression',\n expressionType: 'operator',\n operator: '&&',\n args: [combinedFilter, preExtractedFilter],\n } as Algebra.OperatorExpression;\n } else {\n combinedFilter = preExtractedFilter;\n }\n }\n }\n }\n\n // Extract pushdownable filters\n let pushdownFilters: PushdownFilters = {};\n let remainder: Algebra.Expression | null = combinedFilter;\n let orBranches: PushdownFilters[] | undefined;\n let orNonPushdownBranches: Algebra.Expression[] | undefined;\n\n if (combinedFilter) {\n const result = this.filterExtractor.extractPushdownFilters(combinedFilter, pattern);\n pushdownFilters = result.filters;\n remainder = result.remainder;\n orBranches = result.orBranches;\n orNonPushdownBranches = result.orNonPushdownBranches;\n }\n\n if (this.debug) {\n console.log(`[QuintQuerySource] Pushdown filters:`, JSON.stringify(pushdownFilters, null, 2));\n console.log(`[QuintQuerySource] OR branches:`, orBranches?.length || 0);\n console.log(`[QuintQuerySource] OR non-pushdown branches:`, orNonPushdownBranches?.length || 0);\n console.log(`[QuintQuerySource] Has remainder:`, remainder !== null);\n }\n\n // Get query options\n // NOTE: Comunica handles OFFSET, we only pass limit to QuintStore\n // If there's an offset, we need to fetch limit + offset records\n // and let Comunica skip the first `offset` records\n const optimizeParams = this.getOptimizeParams();\n const queryOptions: QueryOptions = {};\n if (optimizeParams?.limit) {\n // Fetch enough records for Comunica to apply offset\n queryOptions.limit = optimizeParams.limit + (optimizeParams.offset || 0);\n }\n // Don't pass offset to QuintStore - Comunica handles it\n \n // 处理 ORDER BY 下推\n if (optimizeParams?.order) {\n // 直接使用已映射的 order\n queryOptions.order = optimizeParams.order;\n } else if (optimizeParams?.orderVarName) {\n // 通过 pattern 分析变量绑定位置\n const orderField = this.findVariableBinding(optimizeParams.orderVarName, pattern);\n if (orderField) {\n queryOptions.order = [orderField];\n if (this.debug) {\n console.log(`[QuintQuerySource] ORDER BY ?${optimizeParams.orderVarName} -> ${orderField} (via pattern analysis)`);\n }\n }\n }\n if (optimizeParams?.reverse) queryOptions.reverse = optimizeParams.reverse;\n\n let results: Bindings[];\n\n // Handle OR branches (union semantics)\n if (orBranches && orBranches.length > 0) {\n results = await this.executeOrBranches(pattern, variables, orBranches, orNonPushdownBranches, queryOptions);\n if (this.debug) {\n console.log(`[QuintQuerySource] OR pushdown branches returned ${results.length} unique results`);\n }\n } else if (Object.keys(pushdownFilters).length > 0) {\n // Build pattern with pushdown filters\n const quintPattern = this.patternBuilder.buildQuintPattern(pattern, pushdownFilters);\n const quads = await this.store.get(quintPattern, queryOptions);\n results = this.quadsToBindings(quads, variables, pattern);\n if (this.debug) {\n console.log(`[QuintQuerySource] Pushdown query returned ${results.length} results`);\n }\n } else {\n // No pushdown, get all matching quads\n const quintPattern = this.patternBuilder.buildBasePattern(pattern);\n const quads = await this.store.get(quintPattern, queryOptions);\n results = this.quadsToBindings(quads, variables, pattern);\n if (this.debug) {\n console.log(`[QuintQuerySource] Base query returned ${results.length} results`);\n }\n }\n\n // NOTE: We don't apply in-memory filter for pre-extracted filters\n // because Comunica will handle the final filtering after JOIN\n // Only apply remainder if it's from the original operation's filter\n if (remainder && filter) {\n results = await this.expressionEvaluator.evaluateFilterTree(remainder, results, pattern);\n if (this.debug) {\n console.log(`[QuintQuerySource] After in-memory filter: ${results.length} results`);\n }\n }\n\n return results;\n }\n\n /**\n * Execute a bind join: use incoming bindings to filter our query\n * \n * This is called when Comunica's ActorRdfJoinMultiBindSource pushes bindings to us.\n * We use SQL IN clause to efficiently query only the rows matching the incoming bindings.\n */\n private async executeBindJoin(\n operation: Algebra.Operation,\n joinBindings: NonNullable<IQueryBindingsOptions['joinBindings']>\n ): Promise<Bindings[]> {\n // Collect all incoming bindings\n const incomingBindings: Bindings[] = [];\n for await (const binding of joinBindings.bindings) {\n incomingBindings.push(binding);\n }\n\n if (this.debug) {\n console.log(`[QuintQuerySource] executeBindJoin: received ${incomingBindings.length} bindings`);\n }\n\n if (incomingBindings.length === 0) {\n return [];\n }\n\n // Extract patterns from the operation\n const { pattern, patterns, filter } = this.extractPatternAndFilter(operation);\n const allPatterns = patterns || [pattern];\n\n // Find overlapping variables between incoming bindings and our patterns\n // These are the JOIN keys\n const incomingVars = new Set<string>();\n const firstBinding = incomingBindings[0];\n for (const key of firstBinding.keys()) {\n incomingVars.add(key.value);\n }\n\n // Find which pattern variables overlap with incoming bindings\n // Typically this would be the subject variable\n const patternVars = new Map<string, { patternIdx: number; field: TermName }>();\n for (let i = 0; i < allPatterns.length; i++) {\n const p = allPatterns[i];\n if (p.subject?.termType === 'Variable' && incomingVars.has(p.subject.value)) {\n patternVars.set(p.subject.value, { patternIdx: i, field: 'subject' });\n }\n if (p.predicate?.termType === 'Variable' && incomingVars.has(p.predicate.value)) {\n patternVars.set(p.predicate.value, { patternIdx: i, field: 'predicate' });\n }\n if (p.object?.termType === 'Variable' && incomingVars.has(p.object.value)) {\n patternVars.set(p.object.value, { patternIdx: i, field: 'object' });\n }\n if (p.graph?.termType === 'Variable' && incomingVars.has(p.graph.value)) {\n patternVars.set(p.graph.value, { patternIdx: i, field: 'graph' });\n }\n }\n\n if (this.debug) {\n console.log(`[QuintQuerySource] Overlapping variables:`, [...patternVars.keys()]);\n }\n\n if (patternVars.size === 0) {\n // No overlapping variables - just execute normally and return cartesian product\n // This shouldn't happen in typical use cases\n const results = await this.executeQuery(operation);\n return this.cartesianJoin(incomingBindings, results);\n }\n\n // Use the first overlapping variable as the join key\n const [joinVarName, joinInfo] = [...patternVars.entries()][0];\n \n // Collect unique values for the join variable from incoming bindings\n const joinValues = new Set<string>();\n for (const binding of incomingBindings) {\n const term = binding.get(dataFactory.variable(joinVarName));\n if (term) {\n joinValues.add(term.value);\n }\n }\n\n if (this.debug) {\n console.log(`[QuintQuerySource] Join variable: ?${joinVarName}, ${joinValues.size} unique values`);\n }\n\n // Build compound query with IN filter on join variable\n if (allPatterns.length > 1) {\n // Multiple patterns - use compound query\n return this.executeBindJoinCompound(\n allPatterns, filter, joinVarName, joinInfo.field, \n [...joinValues], incomingBindings\n );\n } else {\n // Single pattern - use simple query with IN filter\n return this.executeBindJoinSimple(\n pattern, filter, joinVarName, joinInfo.field,\n [...joinValues], incomingBindings\n );\n }\n }\n\n /**\n * Execute bind join for a single pattern using IN filter\n */\n private async executeBindJoinSimple(\n pattern: Algebra.Pattern,\n filter: Algebra.Expression | null,\n joinVarName: string,\n joinField: TermName,\n joinValues: string[],\n incomingBindings: Bindings[]\n ): Promise<Bindings[]> {\n const variables = extractVariables(pattern);\n\n // Build pattern with IN filter for join values\n let pushdownFilters: PushdownFilters = {};\n \n if (filter) {\n const result = this.filterExtractor.extractPushdownFilters(filter, pattern);\n pushdownFilters = result.filters;\n }\n\n // Add IN filter for join values\n pushdownFilters[joinField] = {\n ...pushdownFilters[joinField],\n $in: joinValues,\n };\n\n const quintPattern = this.patternBuilder.buildQuintPattern(pattern, pushdownFilters);\n const quads = await this.store.get(quintPattern);\n const queryResults = this.quadsToBindings(quads, variables, pattern);\n\n if (this.debug) {\n console.log(`[QuintQuerySource] Bind join simple: ${queryResults.length} results from DB`);\n }\n\n // Join with incoming bindings\n return this.hashJoin(incomingBindings, queryResults, joinVarName);\n }\n\n /**\n * Execute bind join for multiple patterns using compound query\n */\n private async executeBindJoinCompound(\n patterns: Algebra.Pattern[],\n filter: Algebra.Expression | null,\n joinVarName: string,\n joinField: TermName,\n joinValues: string[],\n incomingBindings: Bindings[]\n ): Promise<Bindings[]> {\n // Build QuintPattern for each pattern\n const quintPatterns: QuintPattern[] = [];\n const filtersByPattern = this.distributeFiltersToPatterns(filter, patterns);\n\n for (let i = 0; i < patterns.length; i++) {\n const pattern = patterns[i];\n const patternFilters = filtersByPattern.get(i) || {};\n \n // Add IN filter for join values on the first pattern\n if (i === 0) {\n patternFilters[joinField] = {\n ...patternFilters[joinField],\n $in: joinValues,\n };\n }\n \n const quintPattern = this.patternBuilder.buildQuintPattern(pattern, patternFilters);\n quintPatterns.push(quintPattern);\n }\n\n // Build compound pattern\n const compound: CompoundPattern = {\n patterns: quintPatterns,\n joinOn: joinField,\n select: this.buildSelectForPatterns(patterns),\n };\n\n const results = await this.store.getCompound!(compound);\n const queryResults = this.compoundResultsToBindings(results, patterns);\n\n if (this.debug) {\n console.log(`[QuintQuerySource] Bind join compound: ${queryResults.length} results from DB`);\n }\n\n // Join with incoming bindings\n return this.hashJoin(incomingBindings, queryResults, joinVarName);\n }\n\n /**\n * Hash join two binding sets on a common variable\n */\n private hashJoin(\n left: Bindings[],\n right: Bindings[],\n joinVarName: string\n ): Bindings[] {\n // Build hash table on right side\n const rightIndex = new Map<string, Bindings[]>();\n const joinVar = dataFactory.variable(joinVarName);\n \n for (const binding of right) {\n const term = binding.get(joinVar);\n if (term) {\n const key = term.value;\n if (!rightIndex.has(key)) {\n rightIndex.set(key, []);\n }\n rightIndex.get(key)!.push(binding);\n }\n }\n\n // Probe with left side\n const results: Bindings[] = [];\n for (const leftBinding of left) {\n const term = leftBinding.get(joinVar);\n if (term) {\n const key = term.value;\n const matches = rightIndex.get(key);\n if (matches) {\n for (const rightBinding of matches) {\n // Merge bindings\n const merged = this.mergeBindings(leftBinding, rightBinding);\n if (merged) {\n results.push(merged);\n }\n }\n }\n }\n }\n\n return results;\n }\n\n /**\n * Merge two bindings, returning null if they conflict\n */\n private mergeBindings(left: Bindings, right: Bindings): Bindings | null {\n const entries: [Variable, Term][] = [];\n \n // Add all from left\n for (const key of left.keys()) {\n const term = left.get(key);\n if (term) {\n entries.push([key, term]);\n }\n }\n \n // Add from right, checking for conflicts\n for (const key of right.keys()) {\n const rightTerm = right.get(key);\n const leftTerm = left.get(key);\n \n if (rightTerm) {\n if (leftTerm) {\n // Both have this variable - must match\n if (leftTerm.value !== rightTerm.value || leftTerm.termType !== rightTerm.termType) {\n return null; // Conflict\n }\n // Same value, already in entries\n } else {\n // Only right has it\n entries.push([key, rightTerm]);\n }\n }\n }\n \n return this.bindingsFactory.bindings(entries);\n }\n\n /**\n * Cartesian product of two binding sets\n */\n private cartesianJoin(left: Bindings[], right: Bindings[]): Bindings[] {\n const results: Bindings[] = [];\n for (const l of left) {\n for (const r of right) {\n const merged = this.mergeBindings(l, r);\n if (merged) {\n results.push(merged);\n }\n }\n }\n return results;\n }\n\n /**\n * Execute OR branches with union semantics\n */\n private async executeOrBranches(\n pattern: Algebra.Pattern,\n variables: Variable[],\n orBranches: PushdownFilters[],\n orNonPushdownBranches: Algebra.Expression[] | undefined,\n queryOptions: QueryOptions\n ): Promise<Bindings[]> {\n const seen = new Set<string>();\n const results: Bindings[] = [];\n\n // Execute each pushdownable branch\n for (const branchFilters of orBranches) {\n const quintPattern = this.patternBuilder.buildQuintPattern(pattern, branchFilters);\n const quads = await this.store.get(quintPattern, queryOptions);\n const bindings = this.quadsToBindings(quads, variables, pattern);\n \n for (const binding of bindings) {\n const key = this.expressionEvaluator.getBindingKey(binding);\n if (!seen.has(key)) {\n seen.add(key);\n results.push(binding);\n }\n }\n }\n\n // Handle non-pushdownable OR branches\n if (orNonPushdownBranches && orNonPushdownBranches.length > 0) {\n // Get base results without filter for in-memory evaluation\n const quintPattern = this.patternBuilder.buildBasePattern(pattern);\n const quads = await this.store.get(quintPattern, queryOptions);\n const candidates = this.quadsToBindings(quads, variables, pattern);\n \n // Evaluate each non-pushdownable branch\n for (const branchExpr of orNonPushdownBranches) {\n const branchResults = await this.expressionEvaluator.evaluateFilterTree(branchExpr, candidates, pattern);\n for (const binding of branchResults) {\n const key = this.expressionEvaluator.getBindingKey(binding);\n if (!seen.has(key)) {\n seen.add(key);\n results.push(binding);\n }\n }\n }\n }\n\n return results;\n }\n\n /**\n * Try to execute a compound query for multiple patterns joined by same subject\n * Returns null if compound query is not applicable\n */\n private async tryCompoundQuery(\n patterns: Algebra.Pattern[],\n filter: Algebra.Expression | null,\n _operation: Algebra.Operation\n ): Promise<Bindings[] | null> {\n // Check if all patterns share the same subject variable\n const subjectVars = patterns.map(p => \n p.subject?.termType === 'Variable' ? p.subject.value : null\n );\n const uniqueSubjectVars = [...new Set(subjectVars.filter(v => v !== null))];\n \n if (uniqueSubjectVars.length !== 1) {\n // Not all patterns share the same subject variable\n if (this.debug) {\n console.log(`[QuintQuerySource] Cannot use compound query: different subject variables`, subjectVars);\n }\n return null;\n }\n\n const joinVar = uniqueSubjectVars[0];\n if (this.debug) {\n console.log(`[QuintQuerySource] Using compound query with ${patterns.length} patterns, joined on ?${joinVar}`);\n }\n\n // Build QuintPattern for each pattern, including filter conditions\n const quintPatterns: QuintPattern[] = [];\n const filtersByPattern = this.distributeFiltersToPatterns(filter, patterns);\n\n for (let i = 0; i < patterns.length; i++) {\n const pattern = patterns[i];\n const patternFilters = filtersByPattern.get(i) || {};\n \n const quintPattern = this.patternBuilder.buildQuintPattern(pattern, patternFilters);\n quintPatterns.push(quintPattern);\n }\n\n // Build compound pattern\n const compound: CompoundPattern = {\n patterns: quintPatterns,\n joinOn: 'subject',\n select: this.buildSelectForPatterns(patterns),\n };\n\n // Execute compound query\n const optimizeParams = this.getOptimizeParams();\n const queryOptions: QueryOptions = {};\n if (optimizeParams?.limit) {\n queryOptions.limit = optimizeParams.limit + (optimizeParams.offset || 0);\n }\n\n const results = await this.store.getCompound!(compound, queryOptions);\n\n // Convert CompoundResult to Bindings\n return this.compoundResultsToBindings(results, patterns);\n }\n\n /**\n * Execute multiple patterns individually and hash-join results on shared variables.\n * Used when compound query is not applicable (e.g. inverse patterns with different subject vars).\n */\n private async executeMultiPatternJoin(\n patterns: Algebra.Pattern[],\n filter: Algebra.Expression | null = null\n ): Promise<Bindings[] | null> {\n if (!patterns || patterns.length < 2) return null;\n\n if (this.debug) {\n console.log(`[QuintQuerySource] executeMultiPatternJoin: ${patterns.length} patterns, hasFilter=${!!filter}`);\n }\n\n // If there's a FILTER like ?subject = <uri>, extract the bound value\n // so we can push it down to individual pattern queries\n const filterBindings = this.extractFilterBindings(filter);\n\n // Execute each pattern individually and collect bindings\n const patternBindings: Bindings[][] = [];\n for (let i = 0; i < patterns.length; i++) {\n const p = patterns[i];\n const vars = extractVariables(p);\n\n // Try to apply filter bindings to this pattern\n let quintPattern: QuintPattern;\n const pushdown: PushdownFilters = {};\n if (filterBindings) {\n // Check if any variable in this pattern matches a filter binding\n for (const [varName, termValue] of Object.entries(filterBindings)) {\n if (p.subject?.termType === 'Variable' && p.subject.value === varName) {\n pushdown['subject'] = { $eq: termValue };\n } else if (p.object?.termType === 'Variable' && p.object.value === varName) {\n pushdown['object'] = { $eq: termValue };\n }\n }\n }\n\n if (Object.keys(pushdown).length > 0) {\n quintPattern = this.patternBuilder.buildQuintPattern(p, pushdown);\n } else {\n quintPattern = this.patternBuilder.buildBasePattern(p);\n }\n\n const quads = await this.store.get(quintPattern);\n const bindings = this.quadsToBindings(quads, vars, p);\n if (this.debug) {\n console.log(`[QuintQuerySource] Pattern ${i}: ${bindings.length} results, vars=[${vars.map(v => v.value)}]`);\n }\n patternBindings.push(bindings);\n }\n\n // Iteratively hash-join all pattern results\n let result = patternBindings[0];\n for (let i = 1; i < patternBindings.length; i++) {\n result = this.hashJoinBindings(result, patternBindings[i]);\n if (this.debug) {\n console.log(`[QuintQuerySource] After join with pattern ${i}: ${result.length} results`);\n }\n if (result.length === 0) break;\n }\n\n // Apply remaining in-memory filter if needed\n if (filter && result.length > 0) {\n result = await this.expressionEvaluator.evaluateFilterTree(filter, result, patterns[0]);\n }\n\n return result;\n }\n\n /**\n * Extract simple equality bindings from a FILTER expression.\n * E.g. FILTER(?subject = <uri>) -> { subject: \"uri\" }\n */\n private extractFilterBindings(filter: Algebra.Expression | null): Record<string, string> | null {\n if (!filter) return null;\n\n const bindings: Record<string, string> = {};\n\n const extract = (expr: Algebra.Expression): void => {\n if (!expr) return;\n\n if (expr.expressionType === 'operator' && (expr as Algebra.OperatorExpression).operator === '=') {\n const args = (expr as Algebra.OperatorExpression).args || [];\n if (args.length === 2) {\n let varName: string | null = null;\n let value: string | null = null;\n\n for (const arg of args) {\n if (arg.expressionType === 'term' && (arg as Algebra.TermExpression).term?.termType === 'Variable') {\n varName = ((arg as Algebra.TermExpression).term as Variable).value;\n } else if (arg.expressionType === 'term' && (arg as Algebra.TermExpression).term?.termType === 'NamedNode') {\n value = ((arg as Algebra.TermExpression).term as Term).value;\n }\n }\n\n if (varName && value) {\n bindings[varName] = value;\n }\n }\n } else if (expr.expressionType === 'operator' && (expr as Algebra.OperatorExpression).operator === '&&') {\n for (const arg of ((expr as Algebra.OperatorExpression).args || [])) {\n extract(arg);\n }\n }\n };\n\n extract(filter);\n return Object.keys(bindings).length > 0 ? bindings : null;\n }\n\n /**\n * Hash-join two binding arrays on all shared variables.\n */\n private hashJoinBindings(left: Bindings[], right: Bindings[]): Bindings[] {\n if (left.length === 0 || right.length === 0) return [];\n\n // Find shared variables\n const leftVars = new Set<string>();\n for (const k of left[0].keys()) leftVars.add(k.value);\n const rightVars = new Set<string>();\n for (const k of right[0].keys()) rightVars.add(k.value);\n const sharedVars = [...leftVars].filter(v => rightVars.has(v));\n\n if (sharedVars.length === 0) {\n // No shared variables — cartesian product\n return this.cartesianJoin(left, right);\n }\n\n // Build hash index on right side using shared vars as key\n const rightIndex = new Map<string, Bindings[]>();\n for (const binding of right) {\n const key = sharedVars.map(v => {\n const t = binding.get(dataFactory.variable(v));\n return t ? t.value : '';\n }).join('\\0');\n if (!rightIndex.has(key)) rightIndex.set(key, []);\n rightIndex.get(key)!.push(binding);\n }\n\n // Probe with left side\n const results: Bindings[] = [];\n for (const leftBinding of left) {\n const key = sharedVars.map(v => {\n const t = leftBinding.get(dataFactory.variable(v));\n return t ? t.value : '';\n }).join('\\0');\n const matches = rightIndex.get(key);\n if (matches) {\n for (const rightBinding of matches) {\n const merged = this.mergeBindings(leftBinding, rightBinding);\n if (merged) results.push(merged);\n }\n }\n }\n return results;\n }\n\n /**\n * Distribute filter conditions to their respective patterns\n * Returns a map of pattern index -> PushdownFilters\n */\n private distributeFiltersToPatterns(\n filter: Algebra.Expression | null,\n patterns: Algebra.Pattern[]\n ): Map<number, PushdownFilters> {\n const result = new Map<number, PushdownFilters>();\n \n if (!filter) return result;\n\n // Build a map of variable name to pattern index\n const varToPatternIdx = new Map<string, number>();\n for (let i = 0; i < patterns.length; i++) {\n const p = patterns[i];\n if (p.object?.termType === 'Variable') {\n varToPatternIdx.set(p.object.value, i);\n }\n }\n\n // Extract filters and distribute them\n for (let i = 0; i < patterns.length; i++) {\n const patternResult = this.filterExtractor.extractPushdownFilters(filter, patterns[i]);\n if (Object.keys(patternResult.filters).length > 0) {\n result.set(i, patternResult.filters);\n }\n }\n\n return result;\n }\n\n /**\n * Build SELECT clause config for patterns\n */\n private buildSelectForPatterns(patterns: Algebra.Pattern[]): CompoundPattern['select'] {\n const select: NonNullable<CompoundPattern['select']> = [];\n \n for (let i = 0; i < patterns.length; i++) {\n const p = patterns[i];\n \n // Select object if it's a variable\n if (p.object?.termType === 'Variable') {\n select.push({\n pattern: i,\n field: 'object',\n alias: `p${i}_${p.object.value}`,\n });\n }\n \n // Select predicate if it's a variable\n if (p.predicate?.termType === 'Variable') {\n select.push({\n pattern: i,\n field: 'predicate',\n alias: `p${i}_${p.predicate.value}`,\n });\n }\n\n // Select graph if it's a variable\n if (p.graph?.termType === 'Variable') {\n select.push({\n pattern: i,\n field: 'graph',\n alias: `p${i}_${p.graph.value}`,\n });\n }\n }\n\n return select;\n }\n\n /**\n * Convert CompoundResult array to Bindings array\n */\n private compoundResultsToBindings(\n results: CompoundResult[],\n patterns: Algebra.Pattern[]\n ): Bindings[] {\n // Collect all variables from all patterns\n const variables: Variable[] = [];\n const varNames = new Set<string>();\n \n for (const p of patterns) {\n if (p.subject?.termType === 'Variable' && !varNames.has(p.subject.value)) {\n variables.push(p.subject as Variable);\n varNames.add(p.subject.value);\n }\n if (p.predicate?.termType === 'Variable' && !varNames.has(p.predicate.value)) {\n variables.push(p.predicate as Variable);\n varNames.add(p.predicate.value);\n }\n if (p.object?.termType === 'Variable' && !varNames.has(p.object.value)) {\n variables.push(p.object as Variable);\n varNames.add(p.object.value);\n }\n if (p.graph?.termType === 'Variable' && !varNames.has(p.graph.value)) {\n variables.push(p.graph as Variable);\n varNames.add(p.graph.value);\n }\n }\n\n return results.map(result => {\n const entries: [Variable, Term][] = [];\n \n for (const v of variables) {\n const varName = v.value;\n \n // Check if this is the join variable (subject)\n if (patterns[0].subject?.termType === 'Variable' && \n patterns[0].subject.value === varName) {\n // Use joinValue for subject\n const term = dataFactory.namedNode(result.joinValue);\n entries.push([v, term]);\n continue;\n }\n \n // Look for the variable in bindings\n for (let i = 0; i < patterns.length; i++) {\n const p = patterns[i];\n \n if (p.object?.termType === 'Variable' && p.object.value === varName) {\n const alias = `p${i}_${varName}`;\n const value = result.bindings[alias];\n if (value !== undefined) {\n // Deserialize the value\n const term = this.deserializeValue(value);\n entries.push([v, term]);\n break;\n }\n }\n \n if (p.predicate?.termType === 'Variable' && p.predicate.value === varName) {\n const alias = `p${i}_${varName}`;\n const value = result.bindings[alias];\n if (value !== undefined) {\n const term = dataFactory.namedNode(value);\n entries.push([v, term]);\n break;\n }\n }\n\n if (p.graph?.termType === 'Variable' && p.graph.value === varName) {\n const alias = `p${i}_${varName}`;\n const value = result.bindings[alias];\n if (value !== undefined) {\n const term = dataFactory.namedNode(value);\n entries.push([v, term]);\n break;\n }\n }\n }\n }\n \n return this.bindingsFactory.bindings(entries);\n });\n }\n\n /**\n * Deserialize a value from storage format to RDF Term\n * Uses the same deserialization logic as QuintStore\n */\n private deserializeValue(value: string): Term {\n return deserializeObject(value);\n }\n\n /**\n * Convert quads to bindings based on pattern variables\n */\n private quadsToBindings(quads: Quad[], variables: Variable[], pattern: Algebra.Pattern): Bindings[] {\n if (this.debug) {\n console.log(`[QuintQuerySource] quadsToBindings: ${quads.length} quads, ${variables.length} variables`);\n console.log(`[QuintQuerySource] Variables:`, variables.map(v => v.value));\n console.log(`[QuintQuerySource] Pattern:`, {\n subject: pattern.subject?.termType === 'Variable' ? `?${pattern.subject.value}` : pattern.subject?.value,\n predicate: pattern.predicate?.termType === 'Variable' ? `?${pattern.predicate.value}` : pattern.predicate?.value,\n object: pattern.object?.termType === 'Variable' ? `?${pattern.object.value}` : pattern.object?.value,\n graph: pattern.graph?.termType === 'Variable' ? `?${pattern.graph.value}` : pattern.graph?.value || pattern.graph?.termType,\n });\n }\n return quads.map(quad => {\n const entries: [Variable, Term][] = [];\n for (const v of variables) {\n const term = this.getTermForVariable(v, quad, pattern);\n if (term) {\n entries.push([v, term]);\n }\n }\n if (this.debug && entries.length !== variables.length) {\n console.log(`[QuintQuerySource] Warning: only ${entries.length} of ${variables.length} variables bound`);\n }\n return this.bindingsFactory.bindings(entries);\n });\n }\n\n /**\n * Get the term from quad that matches the variable position in pattern\n */\n private getTermForVariable(variable: Variable, quad: Quad, pattern: Algebra.Pattern): Term | null {\n const varName = variable.value;\n \n // Check which position in the pattern this variable is in\n if (pattern.subject?.termType === 'Variable' && pattern.subject.value === varName) {\n return quad.subject;\n }\n if (pattern.predicate?.termType === 'Variable' && pattern.predicate.value === varName) {\n return quad.predicate;\n }\n if (pattern.object?.termType === 'Variable' && pattern.object.value === varName) {\n return quad.object;\n }\n if (pattern.graph?.termType === 'Variable' && pattern.graph.value === varName) {\n return quad.graph;\n }\n \n return null;\n }\n\n /**\n * Extract BGP pattern and filter from operation\n * Returns either a single pattern or multiple patterns (from BGP or JOIN)\n */\n extractPatternAndFilter(operation: Algebra.Operation): { \n pattern: Algebra.Pattern; \n patterns?: Algebra.Pattern[]; // Multiple patterns from BGP or JOIN\n filter: Algebra.Expression | null;\n } {\n let pattern: Algebra.Pattern | null = null;\n let patterns: Algebra.Pattern[] | undefined;\n let filter: Algebra.Expression | null = null;\n\n // Walk the algebra tree to find pattern(s) and filter\n AlgebraUtil.recurseOperation(operation, {\n [Algebra.types.JOIN]: (op: Algebra.Join) => {\n // JOIN contains multiple patterns - extract them all\n if (op.input && op.input.length > 0) {\n const extractedPatterns: Algebra.Pattern[] = [];\n for (const input of op.input) {\n if (input.type === Algebra.types.PATTERN) {\n extractedPatterns.push(input as Algebra.Pattern);\n } else {\n // Recurse into nested operation to find patterns\n const nested = this.extractPatternAndFilter(input);\n if (nested.patterns) {\n extractedPatterns.push(...nested.patterns);\n } else if (nested.pattern) {\n extractedPatterns.push(nested.pattern);\n }\n // Also collect filter from nested operations\n if (nested.filter && !filter) {\n filter = nested.filter;\n }\n }\n }\n if (extractedPatterns.length > 0) {\n patterns = extractedPatterns;\n if (!pattern) {\n pattern = patterns[0];\n }\n }\n }\n return false; // Don't recurse further\n },\n [Algebra.types.BGP]: (op: Algebra.Bgp) => {\n // BGP contains multiple patterns - this is what we want for compound queries\n if (op.patterns && op.patterns.length > 0) {\n patterns = op.patterns as Algebra.Pattern[];\n if (!pattern) {\n pattern = patterns[0];\n }\n }\n return false; // Don't recurse into individual patterns\n },\n [Algebra.types.PATTERN]: (op: Algebra.Pattern) => {\n if (!pattern) pattern = op;\n return false;\n },\n [Algebra.types.FILTER]: (op: Algebra.Filter) => {\n filter = op.expression;\n return true; // Continue to find pattern inside filter\n },\n });\n\n if (!pattern) {\n // Create empty pattern if none found\n pattern = {\n type: 'pattern',\n subject: dataFactory.variable('s'),\n predicate: dataFactory.variable('p'),\n object: dataFactory.variable('o'),\n graph: dataFactory.defaultGraph(),\n } as Algebra.Pattern;\n }\n\n return { pattern, patterns, filter };\n }\n\n /**\n * Get variables from operation\n */\n private getVariablesFromOperation(operation: Algebra.Operation): Variable[] {\n const { pattern, patterns } = this.extractPatternAndFilter(operation);\n \n if (patterns && patterns.length > 1) {\n // Collect variables from all patterns\n const allVars: Variable[] = [];\n const seen = new Set<string>();\n for (const p of patterns) {\n for (const v of extractVariables(p)) {\n if (!seen.has(v.value)) {\n seen.add(v.value);\n allVars.push(v);\n }\n }\n }\n return allVars;\n }\n \n return extractVariables(pattern);\n }\n\n // ============================================================\n // Required IQuerySource Methods\n // ============================================================\n\n queryQuads(operation: Algebra.Operation, _context: IActionContext): AsyncIterator<Quad> {\n const { pattern } = this.extractPatternAndFilter(operation);\n const quintPattern = this.patternBuilder.buildBasePattern(pattern);\n const resultIterator = wrap(this.store.get(quintPattern));\n \n resultIterator.setProperty('metadata', {\n state: { invalidate: () => {}, invalid: false, addInvalidateListener: () => {} },\n cardinality: { type: 'estimate' as const, value: Number.POSITIVE_INFINITY },\n });\n\n return resultIterator;\n }\n\n async queryBoolean(operation: Algebra.Ask, _context: IActionContext): Promise<boolean> {\n const { pattern } = this.extractPatternAndFilter(operation.input);\n const quintPattern = this.patternBuilder.buildBasePattern(pattern);\n const results = await this.store.get(quintPattern, { limit: 1 });\n return results.length > 0;\n }\n\n queryVoid(_operation: Algebra.Update, _context: IActionContext): Promise<void> {\n throw new Error('queryVoid is not implemented');\n }\n\n /**\n * 在 pattern 中查找变量绑定到哪个位置\n * \n * 例如:{ ?s <http://schema.org/name> ?name }\n * - ?s 绑定到 subject\n * - ?name 绑定到 object\n */\n private findVariableBinding(varName: string, pattern: Algebra.Pattern): TermName | null {\n if (pattern.subject?.termType === 'Variable' && pattern.subject.value === varName) {\n return 'subject';\n }\n if (pattern.predicate?.termType === 'Variable' && pattern.predicate.value === varName) {\n return 'predicate';\n }\n if (pattern.object?.termType === 'Variable' && pattern.object.value === varName) {\n return 'object';\n }\n if (pattern.graph?.termType === 'Variable' && pattern.graph.value === varName) {\n return 'graph';\n }\n return null;\n }\n\n toString(): string {\n return `QuintQuerySource(${this.store.constructor.name})`;\n }\n}\n"]}
@@ -20,6 +20,7 @@ export declare class QuadstoreSparqlEngine implements SparqlEngine {
20
20
  private readonly store;
21
21
  private readonly engine;
22
22
  private readonly optimizedEngine;
23
+ private readonly logger;
23
24
  private readonly ready;
24
25
  constructor(endpoint: string);
25
26
  queryBindings(query: string, basePath: string): Promise<any>;
@@ -13,6 +13,7 @@ const ComunicaQuintEngine_1 = require("./ComunicaQuintEngine");
13
13
  */
14
14
  class QuadstoreSparqlEngine {
15
15
  constructor(endpoint) {
16
+ this.logger = (0, global_logger_factory_1.getLoggerFor)(this);
16
17
  const backend = (0, index_1.getBackend)(endpoint, { tableName: 'quadstore' });
17
18
  this.store = new quadstore_1.Quadstore({
18
19
  backend: backend,
@@ -73,6 +74,8 @@ class QuadstoreSparqlEngine {
73
74
  await this.store.close();
74
75
  }
75
76
  createContext(basePath) {
77
+ const logger = this.logger;
78
+ const self = this;
76
79
  return {
77
80
  unionDefaultGraph: true,
78
81
  baseIRI: basePath,
@@ -81,8 +84,9 @@ class QuadstoreSparqlEngine {
81
84
  type: 'rdfjsSource',
82
85
  value: {
83
86
  match: (subject, predicate, object, graph) => {
84
- const iterator = this.store.match(subject ?? undefined, predicate ?? undefined, object ?? undefined, graph ?? undefined);
85
- const filtered = iterator.filter((quad) => this.isInScope(basePath, quad.graph));
87
+ logger.debug(`[match] s=${subject?.value ?? '*'} p=${predicate?.value ?? '*'} o=${object?.value ?? '*'} g=${graph?.value ?? '*'} gType=${graph?.termType ?? 'null'}`);
88
+ const iterator = self.store.match(subject ?? undefined, predicate ?? undefined, object ?? undefined, graph ?? undefined);
89
+ const filtered = iterator.filter((quad) => self.isInScope(basePath, quad.graph));
86
90
  return filtered;
87
91
  },
88
92
  },
@@ -1 +1 @@
1
- {"version":3,"file":"SubgraphQueryEngine.js","sourceRoot":"","sources":["../../../src/storage/sparql/SubgraphQueryEngine.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Quad, Quad_Graph, Quad_Object, Quad_Predicate, Quad_Subject } from '@rdfjs/types';\nimport type { Bindings } from '@comunica/types';\nimport type { AsyncIterator } from 'asynciterator';\nimport { QueryEngine } from '@comunica/query-sparql';\nimport { Quadstore } from 'quadstore';\nimport { DataFactory } from 'n3';\nimport { getLoggerFor } from 'global-logger-factory';\nimport { getBackend } from '../../libs/backends/index';\nimport { OptimizedQuadstoreEngine } from './OptimizedQuadstoreEngine';\nimport { ComunicaQuintEngine } from './ComunicaQuintEngine';\nimport type { QuintStore } from '../quint/types';\n\ninterface QueryContext {\n sources: [{ type: 'rdfjsSource'; value: { match: (subject?: Quad_Subject | null, predicate?: Quad_Predicate | null, object?: Quad_Object | null, graph?: Quad_Graph | null) => AsyncIterator<Quad> }}];\n unionDefaultGraph: boolean;\n baseIRI: string;\n}\n\n/**\n * SPARQL Engine interface - common abstraction for SPARQL query engines\n */\nexport interface SparqlEngine {\n queryBindings(query: string, basePath: string): Promise<any>;\n queryQuads(query: string, basePath: string): Promise<any>;\n queryBoolean(query: string, basePath: string): Promise<boolean>;\n queryVoid(query: string, basePath: string): Promise<void>;\n constructGraph(graph: string, basePath: string): Promise<AsyncIterator<Quad>>;\n listGraphs(basePath: string): Promise<Set<string>>;\n close(): Promise<void>;\n}\n\n/**\n * Quadstore-based SPARQL engine implementation\n */\nexport class QuadstoreSparqlEngine implements SparqlEngine {\n private readonly store: Quadstore;\n private readonly engine: QueryEngine;\n private readonly optimizedEngine: OptimizedQuadstoreEngine;\n private readonly ready: Promise<void>;\n\n public constructor(endpoint: string) {\n const backend = getBackend(endpoint, { tableName: 'quadstore' });\n this.store = new Quadstore({\n backend: backend as any,\n dataFactory: DataFactory as any,\n });\n this.engine = new QueryEngine();\n this.optimizedEngine = new OptimizedQuadstoreEngine(this.store);\n this.ready = this.store.open();\n }\n\n public async queryBindings(query: string, basePath: string): Promise<any> {\n await this.ready;\n return this.engine.queryBindings(query, this.createContext(basePath) as unknown as any);\n }\n\n public async queryQuads(query: string, basePath: string): Promise<any> {\n await this.ready;\n return this.engine.queryQuads(query, this.createContext(basePath) as unknown as any);\n }\n\n public async queryBoolean(query: string, basePath: string): Promise<boolean> {\n await this.ready;\n return this.engine.queryBoolean(query, this.createContext(basePath) as unknown as any);\n }\n\n public async queryVoid(query: string, basePath: string): Promise<void> {\n await this.ready;\n await this.optimizedEngine.queryVoid(query, { baseIRI: basePath });\n }\n\n public async constructGraph(graph: string, basePath: string): Promise<AsyncIterator<Quad>> {\n await this.ready;\n const constructQuery = `CONSTRUCT { ?s ?p ?o } WHERE { GRAPH <${graph}> { ?s ?p ?o } }`;\n return this.engine.queryQuads(constructQuery, this.createContext(basePath) as unknown as any) as unknown as AsyncIterator<Quad>;\n }\n\n public async listGraphs(basePath: string): Promise<Set<string>> {\n await this.ready;\n const graphs = new Set<string>();\n \n const query = `\n SELECT DISTINCT ?g WHERE {\n GRAPH ?g { ?s ?p ?o }\n FILTER(STRSTARTS(STR(?g), \"${basePath}\"))\n }\n `;\n \n const stream = await this.optimizedEngine.queryBindings(query);\n try {\n for await (const binding of stream as AsyncIterator<Bindings>) {\n const value = binding.get('g');\n if (value && typeof value === 'object' && 'termType' in value && value.termType === 'NamedNode') {\n graphs.add(value.value);\n }\n }\n } finally {\n const close = (stream as unknown as { close?: () => void }).close;\n if (typeof close === 'function') {\n close();\n }\n }\n return graphs;\n }\n\n public async close(): Promise<void> {\n await this.store.close();\n }\n\n private createContext(basePath: string): QueryContext {\n return {\n unionDefaultGraph: true,\n baseIRI: basePath,\n sources: [\n {\n type: 'rdfjsSource',\n value: {\n match: (subject?: Quad_Subject | null, predicate?: Quad_Predicate | null, object?: Quad_Object | null, graph?: Quad_Graph | null): AsyncIterator<Quad> => {\n const iterator = this.store.match(\n subject ?? undefined,\n predicate ?? undefined,\n object ?? undefined,\n graph ?? undefined,\n );\n const filtered = (iterator as unknown as AsyncIterator<Quad>).filter((quad): boolean =>\n this.isInScope(basePath, quad.graph)\n );\n return filtered;\n },\n },\n },\n ],\n };\n }\n\n private isInScope(basePath: string, graph: Quad_Graph): boolean {\n if (!graph || graph.termType !== 'NamedNode') {\n return false;\n }\n\n let graphValue = graph.value;\n\n if (graphValue.startsWith('meta:')) {\n graphValue = graphValue.slice(5);\n }\n\n if (graphValue === basePath) {\n return true;\n }\n\n const childPrefix = basePath.endsWith('/') ? basePath : `${basePath}/`;\n const fragmentPrefix = `${basePath}#`;\n\n if (graphValue.startsWith(childPrefix) || graphValue.startsWith(fragmentPrefix)) {\n return true;\n }\n\n let pathOnly = basePath;\n try {\n const url = new URL(basePath);\n pathOnly = url.pathname;\n } catch {\n // basePath is already a path\n }\n\n if (pathOnly === basePath) {\n return false;\n }\n\n if (graphValue.startsWith('meta:')) {\n graphValue = graphValue.slice(5);\n }\n\n if (graphValue === pathOnly) {\n return true;\n }\n\n const pathChildPrefix = pathOnly.endsWith('/') ? pathOnly : `${pathOnly}/`;\n const pathFragmentPrefix = `${pathOnly}#`;\n\n return graphValue.startsWith(pathChildPrefix) || graphValue.startsWith(pathFragmentPrefix);\n }\n}\n\n/**\n * QuintStore-based SPARQL engine implementation\n * \n * Uses security filters to enforce access boundaries,\n * which are pushed down to the storage layer.\n */\nexport class QuintstoreSparqlEngine implements SparqlEngine {\n private readonly store: QuintStore;\n private readonly engine: ComunicaQuintEngine;\n private readonly ready: Promise<void>;\n\n public constructor(store: QuintStore) {\n this.store = store;\n this.engine = new ComunicaQuintEngine(this.store);\n this.ready = this.store.open();\n }\n\n public async queryBindings(query: string, basePath: string): Promise<any> {\n await this.ready;\n return this.engine.queryBindings(query, {\n baseIRI: basePath,\n filters: { graph: { $startsWith: basePath } },\n });\n }\n\n public async queryQuads(query: string, basePath: string): Promise<any> {\n await this.ready;\n return this.engine.queryQuads(query, {\n baseIRI: basePath,\n filters: { graph: { $startsWith: basePath } },\n });\n }\n\n public async queryBoolean(query: string, basePath: string): Promise<boolean> {\n await this.ready;\n return this.engine.queryBoolean(query, {\n baseIRI: basePath,\n filters: { graph: { $startsWith: basePath } },\n });\n }\n\n public async queryVoid(query: string, basePath: string): Promise<void> {\n await this.ready;\n // UPDATE queries have their own graph validation in SubgraphSparqlHttpHandler\n return this.engine.queryVoid(query, {\n baseIRI: basePath,\n filters: { graph: { $startsWith: basePath } },\n });\n }\n\n public async constructGraph(graph: string, basePath: string): Promise<AsyncIterator<Quad>> {\n await this.ready;\n // CONSTRUCT with explicit graph IRI - security filter still applies\n const constructQuery = `CONSTRUCT { ?s ?p ?o } WHERE { GRAPH <${graph}> { ?s ?p ?o } }`;\n return this.engine.queryQuads(constructQuery, {\n baseIRI: basePath,\n filters: { graph: { $startsWith: basePath } },\n }) as unknown as AsyncIterator<Quad>;\n }\n\n public async listGraphs(basePath: string): Promise<Set<string>> {\n await this.ready;\n const graphs = new Set<string>();\n \n const query = `SELECT DISTINCT ?g WHERE { GRAPH ?g { ?s ?p ?o } }`;\n \n const stream = await this.engine.queryBindings(query, {\n baseIRI: basePath,\n filters: { graph: { $startsWith: basePath } },\n });\n \n try {\n for await (const binding of stream as unknown as AsyncIterator<Bindings>) {\n const value = binding.get('g');\n if (value && typeof value === 'object' && 'termType' in value && value.termType === 'NamedNode') {\n graphs.add(value.value);\n }\n }\n } finally {\n const close = (stream as unknown as { close?: () => void }).close;\n if (typeof close === 'function') {\n close();\n }\n }\n \n return graphs;\n }\n\n public async close(): Promise<void> {\n await this.store.close();\n }\n}\n\n/**\n * SubgraphQueryEngine - SPARQL engine with subgraph (tenant) isolation\n * \n * Wraps a SparqlEngine implementation for use in the system.\n */\nexport class SubgraphQueryEngine {\n private readonly logger = getLoggerFor(this);\n private readonly impl: SparqlEngine;\n\n /**\n * Create a SubgraphQueryEngine\n * @param engine - A SparqlEngine implementation (QuadstoreSparqlEngine or QuintstoreSparqlEngine)\n */\n public constructor(engine: SparqlEngine) {\n this.impl = engine;\n }\n\n public async queryBindings(query: string, basePath: string): Promise<any> {\n return this.impl.queryBindings(query, basePath);\n }\n\n public async queryQuads(query: string, basePath: string): Promise<any> {\n return this.impl.queryQuads(query, basePath);\n }\n\n public async queryBoolean(query: string, basePath: string): Promise<boolean> {\n return this.impl.queryBoolean(query, basePath);\n }\n\n public async queryVoid(query: string, basePath: string): Promise<void> {\n return this.impl.queryVoid(query, basePath);\n }\n\n public async constructGraph(graph: string, basePath: string): Promise<AsyncIterator<Quad>> {\n return this.impl.constructGraph(graph, basePath);\n }\n\n public async listGraphs(basePath: string): Promise<Set<string>> {\n return this.impl.listGraphs(basePath);\n }\n\n public async close(): Promise<void> {\n return this.impl.close();\n }\n}\n"]}
1
+ {"version":3,"file":"SubgraphQueryEngine.js","sourceRoot":"","sources":["../../../src/storage/sparql/SubgraphQueryEngine.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Quad, Quad_Graph, Quad_Object, Quad_Predicate, Quad_Subject } from '@rdfjs/types';\nimport type { Bindings } from '@comunica/types';\nimport type { AsyncIterator } from 'asynciterator';\nimport { QueryEngine } from '@comunica/query-sparql';\nimport { Quadstore } from 'quadstore';\nimport { DataFactory } from 'n3';\nimport { getLoggerFor } from 'global-logger-factory';\nimport { getBackend } from '../../libs/backends/index';\nimport { OptimizedQuadstoreEngine } from './OptimizedQuadstoreEngine';\nimport { ComunicaQuintEngine } from './ComunicaQuintEngine';\nimport type { QuintStore } from '../quint/types';\n\ninterface QueryContext {\n sources: [{ type: 'rdfjsSource'; value: { match: (subject?: Quad_Subject | null, predicate?: Quad_Predicate | null, object?: Quad_Object | null, graph?: Quad_Graph | null) => AsyncIterator<Quad> }}];\n unionDefaultGraph: boolean;\n baseIRI: string;\n}\n\n/**\n * SPARQL Engine interface - common abstraction for SPARQL query engines\n */\nexport interface SparqlEngine {\n queryBindings(query: string, basePath: string): Promise<any>;\n queryQuads(query: string, basePath: string): Promise<any>;\n queryBoolean(query: string, basePath: string): Promise<boolean>;\n queryVoid(query: string, basePath: string): Promise<void>;\n constructGraph(graph: string, basePath: string): Promise<AsyncIterator<Quad>>;\n listGraphs(basePath: string): Promise<Set<string>>;\n close(): Promise<void>;\n}\n\n/**\n * Quadstore-based SPARQL engine implementation\n */\nexport class QuadstoreSparqlEngine implements SparqlEngine {\n private readonly store: Quadstore;\n private readonly engine: QueryEngine;\n private readonly optimizedEngine: OptimizedQuadstoreEngine;\n private readonly logger = getLoggerFor(this);\n private readonly ready: Promise<void>;\n\n public constructor(endpoint: string) {\n const backend = getBackend(endpoint, { tableName: 'quadstore' });\n this.store = new Quadstore({\n backend: backend as any,\n dataFactory: DataFactory as any,\n });\n this.engine = new QueryEngine();\n this.optimizedEngine = new OptimizedQuadstoreEngine(this.store);\n this.ready = this.store.open();\n }\n\n public async queryBindings(query: string, basePath: string): Promise<any> {\n await this.ready;\n return this.engine.queryBindings(query, this.createContext(basePath) as unknown as any);\n }\n\n public async queryQuads(query: string, basePath: string): Promise<any> {\n await this.ready;\n return this.engine.queryQuads(query, this.createContext(basePath) as unknown as any);\n }\n\n public async queryBoolean(query: string, basePath: string): Promise<boolean> {\n await this.ready;\n return this.engine.queryBoolean(query, this.createContext(basePath) as unknown as any);\n }\n\n public async queryVoid(query: string, basePath: string): Promise<void> {\n await this.ready;\n await this.optimizedEngine.queryVoid(query, { baseIRI: basePath });\n }\n\n public async constructGraph(graph: string, basePath: string): Promise<AsyncIterator<Quad>> {\n await this.ready;\n const constructQuery = `CONSTRUCT { ?s ?p ?o } WHERE { GRAPH <${graph}> { ?s ?p ?o } }`;\n return this.engine.queryQuads(constructQuery, this.createContext(basePath) as unknown as any) as unknown as AsyncIterator<Quad>;\n }\n\n public async listGraphs(basePath: string): Promise<Set<string>> {\n await this.ready;\n const graphs = new Set<string>();\n \n const query = `\n SELECT DISTINCT ?g WHERE {\n GRAPH ?g { ?s ?p ?o }\n FILTER(STRSTARTS(STR(?g), \"${basePath}\"))\n }\n `;\n \n const stream = await this.optimizedEngine.queryBindings(query);\n try {\n for await (const binding of stream as AsyncIterator<Bindings>) {\n const value = binding.get('g');\n if (value && typeof value === 'object' && 'termType' in value && value.termType === 'NamedNode') {\n graphs.add(value.value);\n }\n }\n } finally {\n const close = (stream as unknown as { close?: () => void }).close;\n if (typeof close === 'function') {\n close();\n }\n }\n return graphs;\n }\n\n public async close(): Promise<void> {\n await this.store.close();\n }\n\n private createContext(basePath: string): QueryContext {\n const logger = this.logger;\n const self = this;\n return {\n unionDefaultGraph: true,\n baseIRI: basePath,\n sources: [\n {\n type: 'rdfjsSource',\n value: {\n match: (subject?: Quad_Subject | null, predicate?: Quad_Predicate | null, object?: Quad_Object | null, graph?: Quad_Graph | null): AsyncIterator<Quad> => {\n logger.debug(`[match] s=${subject?.value ?? '*'} p=${predicate?.value ?? '*'} o=${object?.value ?? '*'} g=${graph?.value ?? '*'} gType=${graph?.termType ?? 'null'}`);\n const iterator = self.store.match(\n subject ?? undefined,\n predicate ?? undefined,\n object ?? undefined,\n graph ?? undefined,\n );\n const filtered = (iterator as unknown as AsyncIterator<Quad>).filter((quad): boolean =>\n self.isInScope(basePath, quad.graph)\n );\n return filtered;\n },\n },\n },\n ],\n };\n }\n\n private isInScope(basePath: string, graph: Quad_Graph): boolean {\n if (!graph || graph.termType !== 'NamedNode') {\n return false;\n }\n\n let graphValue = graph.value;\n\n if (graphValue.startsWith('meta:')) {\n graphValue = graphValue.slice(5);\n }\n\n if (graphValue === basePath) {\n return true;\n }\n\n const childPrefix = basePath.endsWith('/') ? basePath : `${basePath}/`;\n const fragmentPrefix = `${basePath}#`;\n\n if (graphValue.startsWith(childPrefix) || graphValue.startsWith(fragmentPrefix)) {\n return true;\n }\n\n let pathOnly = basePath;\n try {\n const url = new URL(basePath);\n pathOnly = url.pathname;\n } catch {\n // basePath is already a path\n }\n\n if (pathOnly === basePath) {\n return false;\n }\n\n if (graphValue.startsWith('meta:')) {\n graphValue = graphValue.slice(5);\n }\n\n if (graphValue === pathOnly) {\n return true;\n }\n\n const pathChildPrefix = pathOnly.endsWith('/') ? pathOnly : `${pathOnly}/`;\n const pathFragmentPrefix = `${pathOnly}#`;\n\n return graphValue.startsWith(pathChildPrefix) || graphValue.startsWith(pathFragmentPrefix);\n }\n}\n\n/**\n * QuintStore-based SPARQL engine implementation\n * \n * Uses security filters to enforce access boundaries,\n * which are pushed down to the storage layer.\n */\nexport class QuintstoreSparqlEngine implements SparqlEngine {\n private readonly store: QuintStore;\n private readonly engine: ComunicaQuintEngine;\n private readonly ready: Promise<void>;\n\n public constructor(store: QuintStore) {\n this.store = store;\n this.engine = new ComunicaQuintEngine(this.store);\n this.ready = this.store.open();\n }\n\n public async queryBindings(query: string, basePath: string): Promise<any> {\n await this.ready;\n return this.engine.queryBindings(query, {\n baseIRI: basePath,\n filters: { graph: { $startsWith: basePath } },\n });\n }\n\n public async queryQuads(query: string, basePath: string): Promise<any> {\n await this.ready;\n return this.engine.queryQuads(query, {\n baseIRI: basePath,\n filters: { graph: { $startsWith: basePath } },\n });\n }\n\n public async queryBoolean(query: string, basePath: string): Promise<boolean> {\n await this.ready;\n return this.engine.queryBoolean(query, {\n baseIRI: basePath,\n filters: { graph: { $startsWith: basePath } },\n });\n }\n\n public async queryVoid(query: string, basePath: string): Promise<void> {\n await this.ready;\n // UPDATE queries have their own graph validation in SubgraphSparqlHttpHandler\n return this.engine.queryVoid(query, {\n baseIRI: basePath,\n filters: { graph: { $startsWith: basePath } },\n });\n }\n\n public async constructGraph(graph: string, basePath: string): Promise<AsyncIterator<Quad>> {\n await this.ready;\n // CONSTRUCT with explicit graph IRI - security filter still applies\n const constructQuery = `CONSTRUCT { ?s ?p ?o } WHERE { GRAPH <${graph}> { ?s ?p ?o } }`;\n return this.engine.queryQuads(constructQuery, {\n baseIRI: basePath,\n filters: { graph: { $startsWith: basePath } },\n }) as unknown as AsyncIterator<Quad>;\n }\n\n public async listGraphs(basePath: string): Promise<Set<string>> {\n await this.ready;\n const graphs = new Set<string>();\n \n const query = `SELECT DISTINCT ?g WHERE { GRAPH ?g { ?s ?p ?o } }`;\n \n const stream = await this.engine.queryBindings(query, {\n baseIRI: basePath,\n filters: { graph: { $startsWith: basePath } },\n });\n \n try {\n for await (const binding of stream as unknown as AsyncIterator<Bindings>) {\n const value = binding.get('g');\n if (value && typeof value === 'object' && 'termType' in value && value.termType === 'NamedNode') {\n graphs.add(value.value);\n }\n }\n } finally {\n const close = (stream as unknown as { close?: () => void }).close;\n if (typeof close === 'function') {\n close();\n }\n }\n \n return graphs;\n }\n\n public async close(): Promise<void> {\n await this.store.close();\n }\n}\n\n/**\n * SubgraphQueryEngine - SPARQL engine with subgraph (tenant) isolation\n * \n * Wraps a SparqlEngine implementation for use in the system.\n */\nexport class SubgraphQueryEngine {\n private readonly logger = getLoggerFor(this);\n private readonly impl: SparqlEngine;\n\n /**\n * Create a SubgraphQueryEngine\n * @param engine - A SparqlEngine implementation (QuadstoreSparqlEngine or QuintstoreSparqlEngine)\n */\n public constructor(engine: SparqlEngine) {\n this.impl = engine;\n }\n\n public async queryBindings(query: string, basePath: string): Promise<any> {\n return this.impl.queryBindings(query, basePath);\n }\n\n public async queryQuads(query: string, basePath: string): Promise<any> {\n return this.impl.queryQuads(query, basePath);\n }\n\n public async queryBoolean(query: string, basePath: string): Promise<boolean> {\n return this.impl.queryBoolean(query, basePath);\n }\n\n public async queryVoid(query: string, basePath: string): Promise<void> {\n return this.impl.queryVoid(query, basePath);\n }\n\n public async constructGraph(graph: string, basePath: string): Promise<AsyncIterator<Quad>> {\n return this.impl.constructGraph(graph, basePath);\n }\n\n public async listGraphs(basePath: string): Promise<Set<string>> {\n return this.impl.listGraphs(basePath);\n }\n\n public async close(): Promise<void> {\n return this.impl.close();\n }\n}\n"]}
@@ -129,6 +129,10 @@
129
129
  "@id": "undefineds:dist/storage/sparql/SubgraphQueryEngine.jsonld#QuadstoreSparqlEngine__member_optimizedEngine",
130
130
  "memberFieldName": "optimizedEngine"
131
131
  },
132
+ {
133
+ "@id": "undefineds:dist/storage/sparql/SubgraphQueryEngine.jsonld#QuadstoreSparqlEngine__member_logger",
134
+ "memberFieldName": "logger"
135
+ },
132
136
  {
133
137
  "@id": "undefineds:dist/storage/sparql/SubgraphQueryEngine.jsonld#QuadstoreSparqlEngine__member_ready",
134
138
  "memberFieldName": "ready"
@@ -24,7 +24,7 @@ export interface SubdomainRegistrationResult {
24
24
  subdomain: string;
25
25
  fullDomain: string;
26
26
  mode: 'direct' | 'tunnel';
27
- publicIp?: string;
27
+ ipv4?: string;
28
28
  tunnelProvider?: string;
29
29
  tunnelEndpoint?: string;
30
30
  registeredAt: string;
@@ -34,7 +34,7 @@ export interface SubdomainInfo {
34
34
  subdomain: string;
35
35
  fullDomain: string;
36
36
  mode: 'direct' | 'tunnel';
37
- publicIp?: string;
37
+ ipv4?: string;
38
38
  tunnelProvider?: string;
39
39
  tunnelEndpoint?: string;
40
40
  registeredAt: string;
@@ -92,7 +92,7 @@ export declare class SubdomainClient {
92
92
  register(options: {
93
93
  subdomain: string;
94
94
  localPort: number;
95
- publicIp?: string;
95
+ ipv4?: string;
96
96
  }): Promise<SubdomainRegistrationResult>;
97
97
  /**
98
98
  * 获取子域名信息
@@ -62,7 +62,7 @@ class SubdomainClient {
62
62
  body: JSON.stringify({
63
63
  subdomain: options.subdomain,
64
64
  localPort: options.localPort,
65
- publicIp: options.publicIp,
65
+ ipv4: options.ipv4,
66
66
  nodeId: this.nodeId,
67
67
  }),
68
68
  });