@undefineds.co/xpod 0.3.6 → 0.3.15

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 (249) hide show
  1. package/config/cli.json +1 -1
  2. package/config/cloud.json +54 -22
  3. package/config/local.json +56 -12
  4. package/config/resolver.json +10 -2
  5. package/config/xpod.base.json +50 -0
  6. package/config/xpod.json +8 -8
  7. package/dist/agents/config/resolve.js +10 -10
  8. package/dist/agents/config/resolve.js.map +1 -1
  9. package/dist/api/chatkit/index.d.ts +1 -1
  10. package/dist/api/chatkit/index.js.map +1 -1
  11. package/dist/api/chatkit/pod-store.d.ts +14 -11
  12. package/dist/api/chatkit/pod-store.js +114 -78
  13. package/dist/api/chatkit/pod-store.js.map +1 -1
  14. package/dist/api/chatkit/runtime/AcpAgentRuntime.js +1 -1
  15. package/dist/api/chatkit/runtime/AcpAgentRuntime.js.map +1 -1
  16. package/dist/api/chatkit/service.js +1 -1
  17. package/dist/api/chatkit/service.js.map +1 -1
  18. package/dist/api/chatkit/types.d.ts +11 -11
  19. package/dist/api/chatkit/types.js +3 -3
  20. package/dist/api/chatkit/types.js.map +1 -1
  21. package/dist/api/container/cloud.js +0 -8
  22. package/dist/api/container/cloud.js.map +1 -1
  23. package/dist/api/container/index.js +2 -1
  24. package/dist/api/container/index.js.map +1 -1
  25. package/dist/api/container/local.js +0 -7
  26. package/dist/api/container/local.js.map +1 -1
  27. package/dist/api/container/routes.js +3 -17
  28. package/dist/api/container/routes.js.map +1 -1
  29. package/dist/api/container/types.d.ts +0 -2
  30. package/dist/api/container/types.js.map +1 -1
  31. package/dist/api/handlers/PodManagementHandler.d.ts +3 -0
  32. package/dist/api/handlers/PodManagementHandler.js +71 -1
  33. package/dist/api/handlers/PodManagementHandler.js.map +1 -1
  34. package/dist/api/handlers/RunHandler.js +5 -5
  35. package/dist/api/handlers/RunHandler.js.map +1 -1
  36. package/dist/api/runs/AgentRuntimeTypes.d.ts +7 -8
  37. package/dist/api/runs/AgentRuntimeTypes.js.map +1 -1
  38. package/dist/api/runs/InngestRunExecutionBackend.d.ts +2 -2
  39. package/dist/api/runs/ManagedRunWorker.d.ts +1 -1
  40. package/dist/api/runs/ManagedRunWorker.js +6 -6
  41. package/dist/api/runs/ManagedRunWorker.js.map +1 -1
  42. package/dist/api/runs/PiAgentRuntimeDriver.d.ts +16 -1
  43. package/dist/api/runs/PiAgentRuntimeDriver.js +182 -23
  44. package/dist/api/runs/PiAgentRuntimeDriver.js.map +1 -1
  45. package/dist/api/runs/RunStateCenter.d.ts +3 -3
  46. package/dist/api/runs/RunStateCenter.js +13 -13
  47. package/dist/api/runs/RunStateCenter.js.map +1 -1
  48. package/dist/api/runs/store.d.ts +4 -4
  49. package/dist/api/runs/store.js +2 -2
  50. package/dist/api/runs/store.js.map +1 -1
  51. package/dist/api/service/VectorStoreService.d.ts +1 -1
  52. package/dist/api/service/VectorStoreService.js +16 -16
  53. package/dist/api/service/VectorStoreService.js.map +1 -1
  54. package/dist/api/tasks/InngestTaskScheduler.d.ts +4 -4
  55. package/dist/api/tasks/TaskMaterializer.d.ts +3 -3
  56. package/dist/api/tasks/TaskMaterializer.js +11 -11
  57. package/dist/api/tasks/TaskMaterializer.js.map +1 -1
  58. package/dist/api/tasks/TaskService.d.ts +3 -3
  59. package/dist/api/tasks/TaskService.js +11 -7
  60. package/dist/api/tasks/TaskService.js.map +1 -1
  61. package/dist/api/tasks/store.d.ts +10 -4
  62. package/dist/api/tasks/store.js +14 -4
  63. package/dist/api/tasks/store.js.map +1 -1
  64. package/dist/api/workspace/types.d.ts +3 -3
  65. package/dist/api/workspace/types.js +6 -6
  66. package/dist/api/workspace/types.js.map +1 -1
  67. package/dist/cli/commands/config.js +2 -2
  68. package/dist/cli/commands/config.js.map +1 -1
  69. package/dist/cli/commands/start.js +9 -3
  70. package/dist/cli/commands/start.js.map +1 -1
  71. package/dist/components/components.jsonld +8 -2
  72. package/dist/components/context.jsonld +308 -51
  73. package/dist/http/search/SearchHttpHandler.js +8 -8
  74. package/dist/http/search/SearchHttpHandler.js.map +1 -1
  75. package/dist/identity/drizzle/PodLookupRepository.d.ts +11 -1
  76. package/dist/identity/drizzle/PodLookupRepository.js +95 -4
  77. package/dist/identity/drizzle/PodLookupRepository.js.map +1 -1
  78. package/dist/identity/drizzle/db.js +4 -43
  79. package/dist/identity/drizzle/db.js.map +1 -1
  80. package/dist/identity/drizzle/schema.pg.d.ts +0 -5
  81. package/dist/identity/drizzle/schema.pg.js +2 -16
  82. package/dist/identity/drizzle/schema.pg.js.map +1 -1
  83. package/dist/identity/drizzle/schema.sqlite.d.ts +19 -176
  84. package/dist/identity/drizzle/schema.sqlite.js +2 -16
  85. package/dist/identity/drizzle/schema.sqlite.js.map +1 -1
  86. package/dist/identity/oidc/AutoDetectIdentityProviderHandler.d.ts +4 -4
  87. package/dist/identity/oidc/AutoDetectIdentityProviderHandler.js +7 -7
  88. package/dist/identity/oidc/AutoDetectIdentityProviderHandler.js.map +1 -1
  89. package/dist/identity/oidc/AutoDetectIdentityProviderHandler.jsonld +6 -6
  90. package/dist/identity/oidc/AutoDetectOidcHandler.d.ts +4 -4
  91. package/dist/identity/oidc/AutoDetectOidcHandler.js +6 -6
  92. package/dist/identity/oidc/AutoDetectOidcHandler.js.map +1 -1
  93. package/dist/identity/oidc/AutoDetectOidcHandler.jsonld +6 -6
  94. package/dist/identity/oidc/ScopedPickWebIdHandler.d.ts +37 -0
  95. package/dist/identity/oidc/ScopedPickWebIdHandler.js +211 -0
  96. package/dist/identity/oidc/ScopedPickWebIdHandler.js.map +1 -0
  97. package/dist/identity/oidc/ScopedPickWebIdHandler.jsonld +158 -0
  98. package/dist/index.d.ts +12 -2
  99. package/dist/index.js +16 -4
  100. package/dist/index.js.map +1 -1
  101. package/dist/main.js +8 -2
  102. package/dist/main.js.map +1 -1
  103. package/dist/provision/ProvisionPodCreator.d.ts +3 -4
  104. package/dist/provision/ProvisionPodCreator.js +8 -13
  105. package/dist/provision/ProvisionPodCreator.js.map +1 -1
  106. package/dist/provision/ProvisionPodCreator.jsonld +7 -7
  107. package/dist/runtime/Proxy.d.ts +0 -1
  108. package/dist/runtime/Proxy.js +0 -9
  109. package/dist/runtime/Proxy.js.map +1 -1
  110. package/dist/runtime/bootstrap.d.ts +1 -0
  111. package/dist/runtime/bootstrap.js +5 -2
  112. package/dist/runtime/bootstrap.js.map +1 -1
  113. package/dist/runtime/css-process.d.ts +12 -4
  114. package/dist/runtime/css-process.js +61 -14
  115. package/dist/runtime/css-process.js.map +1 -1
  116. package/dist/runtime/oidc-issuer.d.ts +3 -2
  117. package/dist/runtime/oidc-issuer.js +3 -2
  118. package/dist/runtime/oidc-issuer.js.map +1 -1
  119. package/dist/runtime/runtime-types.d.ts +1 -0
  120. package/dist/runtime/runtime-types.js.map +1 -1
  121. package/dist/solidfs/LocalFirstRdfRepresentationResolver.d.ts +21 -0
  122. package/dist/solidfs/LocalFirstRdfRepresentationResolver.js +38 -0
  123. package/dist/solidfs/LocalFirstRdfRepresentationResolver.js.map +1 -0
  124. package/dist/solidfs/LocalSolidFS.d.ts +18 -0
  125. package/dist/solidfs/LocalSolidFS.js +539 -0
  126. package/dist/solidfs/LocalSolidFS.js.map +1 -0
  127. package/dist/solidfs/PodSolidFsHttpClient.d.ts +16 -0
  128. package/dist/solidfs/PodSolidFsHttpClient.js +93 -0
  129. package/dist/solidfs/PodSolidFsHttpClient.js.map +1 -0
  130. package/dist/solidfs/PodSolidFsHydrator.d.ts +27 -0
  131. package/dist/solidfs/PodSolidFsHydrator.js +127 -0
  132. package/dist/solidfs/PodSolidFsHydrator.js.map +1 -0
  133. package/dist/solidfs/PodSolidFsSyncer.d.ts +21 -0
  134. package/dist/solidfs/PodSolidFsSyncer.js +78 -0
  135. package/dist/solidfs/PodSolidFsSyncer.js.map +1 -0
  136. package/dist/solidfs/RdfIndexSolidFsSyncer.d.ts +22 -0
  137. package/dist/solidfs/RdfIndexSolidFsSyncer.js +131 -0
  138. package/dist/solidfs/RdfIndexSolidFsSyncer.js.map +1 -0
  139. package/dist/solidfs/index.d.ts +7 -0
  140. package/dist/solidfs/index.js +24 -0
  141. package/dist/solidfs/index.js.map +1 -0
  142. package/dist/solidfs/types.d.ts +131 -0
  143. package/dist/solidfs/types.js +19 -0
  144. package/dist/solidfs/types.js.map +1 -0
  145. package/dist/storage/RepresentationPartialConvertingStore.js +6 -13
  146. package/dist/storage/RepresentationPartialConvertingStore.js.map +1 -1
  147. package/dist/storage/SparqlUpdateResourceStore.d.ts +4 -0
  148. package/dist/storage/SparqlUpdateResourceStore.js +13 -0
  149. package/dist/storage/SparqlUpdateResourceStore.js.map +1 -1
  150. package/dist/storage/SparqlUpdateResourceStore.jsonld +26 -0
  151. package/dist/storage/accessors/MixDataAccessor.d.ts +85 -4
  152. package/dist/storage/accessors/MixDataAccessor.js +511 -16
  153. package/dist/storage/accessors/MixDataAccessor.js.map +1 -1
  154. package/dist/storage/accessors/MixDataAccessor.jsonld +176 -1
  155. package/dist/storage/accessors/QuintStoreSparqlDataAccessor.d.ts +7 -0
  156. package/dist/storage/accessors/QuintStoreSparqlDataAccessor.js +72 -4
  157. package/dist/storage/accessors/QuintStoreSparqlDataAccessor.js.map +1 -1
  158. package/dist/storage/accessors/QuintStoreSparqlDataAccessor.jsonld +24 -0
  159. package/dist/storage/quint/BaseQuintStore.d.ts +3 -0
  160. package/dist/storage/quint/BaseQuintStore.js +51 -27
  161. package/dist/storage/quint/BaseQuintStore.js.map +1 -1
  162. package/dist/storage/quint/PgQuintStore.d.ts +1 -0
  163. package/dist/storage/quint/PgQuintStore.js +50 -32
  164. package/dist/storage/quint/PgQuintStore.js.map +1 -1
  165. package/dist/storage/quint/PgQuintStore.jsonld +4 -3
  166. package/dist/storage/quint/SqliteQuintStore.d.ts +5 -0
  167. package/dist/storage/quint/SqliteQuintStore.js +100 -0
  168. package/dist/storage/quint/SqliteQuintStore.js.map +1 -1
  169. package/dist/storage/quint/SqliteQuintStore.jsonld +20 -0
  170. package/dist/storage/quint/types.d.ts +16 -0
  171. package/dist/storage/quint/types.js.map +1 -1
  172. package/dist/storage/rdf/Rdf3xTripleIndex.d.ts +55 -0
  173. package/dist/storage/rdf/Rdf3xTripleIndex.js +1235 -0
  174. package/dist/storage/rdf/Rdf3xTripleIndex.js.map +1 -0
  175. package/dist/storage/rdf/RdfContentTypes.d.ts +9 -0
  176. package/dist/storage/rdf/RdfContentTypes.js +79 -0
  177. package/dist/storage/rdf/RdfContentTypes.js.map +1 -0
  178. package/dist/storage/rdf/RdfLocalQueryEngine.d.ts +79 -0
  179. package/dist/storage/rdf/RdfLocalQueryEngine.js +2705 -0
  180. package/dist/storage/rdf/RdfLocalQueryEngine.js.map +1 -0
  181. package/dist/storage/rdf/RdfQuadIndex.d.ts +98 -0
  182. package/dist/storage/rdf/RdfQuadIndex.js +1840 -0
  183. package/dist/storage/rdf/RdfQuadIndex.js.map +1 -0
  184. package/dist/storage/rdf/RdfQuadIndex.jsonld +416 -0
  185. package/dist/storage/rdf/RdfShadowComparator.d.ts +12 -0
  186. package/dist/storage/rdf/RdfShadowComparator.js +47 -0
  187. package/dist/storage/rdf/RdfShadowComparator.js.map +1 -0
  188. package/dist/storage/rdf/RdfSparqlAdapter.d.ts +147 -0
  189. package/dist/storage/rdf/RdfSparqlAdapter.js +2420 -0
  190. package/dist/storage/rdf/RdfSparqlAdapter.js.map +1 -0
  191. package/dist/storage/rdf/RdfSparqlAdapter.jsonld +414 -0
  192. package/dist/storage/rdf/RdfTermDictionary.d.ts +27 -0
  193. package/dist/storage/rdf/RdfTermDictionary.js +352 -0
  194. package/dist/storage/rdf/RdfTermDictionary.js.map +1 -0
  195. package/dist/storage/rdf/RdfTermDictionary.jsonld +114 -0
  196. package/dist/storage/rdf/RdfTermSemantics.d.ts +6 -0
  197. package/dist/storage/rdf/RdfTermSemantics.js +40 -0
  198. package/dist/storage/rdf/RdfTermSemantics.js.map +1 -0
  199. package/dist/storage/rdf/RdfTextIndex.d.ts +23 -0
  200. package/dist/storage/rdf/RdfTextIndex.js +569 -0
  201. package/dist/storage/rdf/RdfTextIndex.js.map +1 -0
  202. package/dist/storage/rdf/RdfVectorIndex.d.ts +22 -0
  203. package/dist/storage/rdf/RdfVectorIndex.js +631 -0
  204. package/dist/storage/rdf/RdfVectorIndex.js.map +1 -0
  205. package/dist/storage/rdf/RdfXmlSerializer.d.ts +2 -0
  206. package/dist/storage/rdf/RdfXmlSerializer.js +123 -0
  207. package/dist/storage/rdf/RdfXmlSerializer.js.map +1 -0
  208. package/dist/storage/rdf/ShadowRdfQuintStore.d.ts +58 -0
  209. package/dist/storage/rdf/ShadowRdfQuintStore.js +202 -0
  210. package/dist/storage/rdf/ShadowRdfQuintStore.js.map +1 -0
  211. package/dist/storage/rdf/ShadowRdfQuintStore.jsonld +308 -0
  212. package/dist/storage/rdf/SolidRdfEngine.d.ts +56 -0
  213. package/dist/storage/rdf/SolidRdfEngine.js +292 -0
  214. package/dist/storage/rdf/SolidRdfEngine.js.map +1 -0
  215. package/dist/storage/rdf/SolidRdfEngine.jsonld +372 -0
  216. package/dist/storage/rdf/SolidRdfSparqlEngine.d.ts +92 -0
  217. package/dist/storage/rdf/SolidRdfSparqlEngine.js +477 -0
  218. package/dist/storage/rdf/SolidRdfSparqlEngine.js.map +1 -0
  219. package/dist/storage/rdf/SolidRdfSparqlEngine.jsonld +257 -0
  220. package/dist/storage/rdf/index.d.ts +15 -0
  221. package/dist/storage/rdf/index.js +61 -0
  222. package/dist/storage/rdf/index.js.map +1 -0
  223. package/dist/storage/rdf/models-benchmark.d.ts +260 -0
  224. package/dist/storage/rdf/models-benchmark.js +1405 -0
  225. package/dist/storage/rdf/models-benchmark.js.map +1 -0
  226. package/dist/storage/rdf/types.d.ts +726 -0
  227. package/dist/storage/rdf/types.js +3 -0
  228. package/dist/storage/rdf/types.js.map +1 -0
  229. package/dist/storage/rdf/types.jsonld +316 -0
  230. package/dist/storage/vector/VectorIndexingListener.d.ts +5 -5
  231. package/dist/storage/vector/VectorIndexingListener.js +19 -19
  232. package/dist/storage/vector/VectorIndexingListener.js.map +1 -1
  233. package/package.json +3 -2
  234. package/templates/pod/acp/.acr.hbs +39 -0
  235. package/templates/pod/acp/README.acr +18 -0
  236. package/templates/pod/acp/profile/card.acr +22 -0
  237. package/templates/pod/base/README$.md.hbs +27 -0
  238. package/templates/pod/base/profile/card$.ttl.hbs +13 -0
  239. package/templates/pod/wac/.acl.hbs +26 -0
  240. package/templates/pod/wac/README.acl.hbs +14 -0
  241. package/templates/pod/wac/profile/card.acl.hbs +19 -0
  242. package/dist/api/handlers/WebIdProfileHandler.d.ts +0 -16
  243. package/dist/api/handlers/WebIdProfileHandler.js +0 -423
  244. package/dist/api/handlers/WebIdProfileHandler.js.map +0 -1
  245. package/dist/identity/drizzle/WebIdProfileRepository.d.ts +0 -63
  246. package/dist/identity/drizzle/WebIdProfileRepository.js +0 -168
  247. package/dist/identity/drizzle/WebIdProfileRepository.js.map +0 -1
  248. package/dist/identity/drizzle/WebIdProfileRepository.jsonld +0 -112
  249. package/dist/storage/quint/BaseQuintStore.jsonld +0 -257
@@ -1 +1 @@
1
- {"version":3,"file":"QuintStoreSparqlDataAccessor.js","sourceRoot":"","sources":["../../../src/storage/accessors/QuintStoreSparqlDataAccessor.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * QuintStoreSparqlDataAccessor - Data accessor using QuintStore\n * \n * Key features:\n * 1. Graph prefix filtering for efficient subgraph queries\n * 2. Backend-agnostic storage (SQLite, PostgreSQL, etc.)\n * 3. Future: vector similarity search\n */\n\nimport { getLoggerFor } from 'global-logger-factory';\nimport { Readable } from 'node:stream';\nimport arrayifyStream from 'arrayify-stream';\n\nimport { DataFactory } from 'n3';\nimport type { NamedNode, Quad, Term } from '@rdfjs/types';\nimport type {\n ConstructQuery,\n GraphPattern,\n GraphQuads,\n InsertDeleteOperation,\n SparqlGenerator,\n Update,\n UpdateOperation,\n} from 'sparqljs';\nimport { Generator } from 'sparqljs';\nimport {\n DataAccessor,\n RepresentationMetadata,\n IdentifierStrategy,\n addResourceMetadata,\n updateModifiedDate,\n \n type Representation,\n type ResourceIdentifier,\n INTERNAL_QUADS,\n ConflictHttpError,\n NotFoundHttpError,\n NotImplementedHttpError,\n UnsupportedMediaTypeHttpError,\n guardStream,\n type Guarded,\n isContainerIdentifier,\n CONTENT_TYPE_TERM,\n LDP,\n createErrorMessage,\n} from '@solid/community-server';\n\nimport type { QuintStore, Quint } from '../quint/types';\nimport { ComunicaQuintEngine } from '../sparql/ComunicaQuintEngine';\n\nconst { defaultGraph, namedNode, quad, variable } = DataFactory;\n\nexport class QuintStoreSparqlDataAccessor implements DataAccessor {\n protected readonly logger = getLoggerFor(this);\n private readonly identifierStrategy: IdentifierStrategy;\n private readonly store: QuintStore;\n private readonly engine: ComunicaQuintEngine;\n private readonly generator: SparqlGenerator;\n private readonly baseUrl: string;\n private initialized = false;\n\n public constructor(\n store: QuintStore,\n identifierStrategy: IdentifierStrategy,\n ) {\n this.store = store;\n this.identifierStrategy = identifierStrategy;\n this.generator = new Generator();\n this.engine = new ComunicaQuintEngine(this.store);\n // Get baseUrl from identifierStrategy\n const strategy = identifierStrategy as unknown as { baseUrl?: string };\n this.baseUrl = strategy.baseUrl ?? '';\n this.logger.info(`QuintStoreSparqlDataAccessor initialized with identifierStrategy: ${identifierStrategy.constructor.name}, baseUrl: ${this.baseUrl || 'N/A'}`);\n }\n\n /**\n * Initialize the store (open database connection)\n */\n public async initialize(): Promise<void> {\n if (!this.initialized) {\n await this.store.open();\n this.initialized = true;\n this.logger.info('QuintStore initialized');\n }\n }\n\n /**\n * Close the store\n */\n public async finalize(): Promise<void> {\n if (this.initialized) {\n await this.store.close();\n this.initialized = false;\n this.logger.info('QuintStore closed');\n }\n }\n\n /**\n * Only Quad data streams are supported.\n */\n public async canHandle(representation: Representation): Promise<void> {\n if (representation.binary || representation.metadata.contentType !== INTERNAL_QUADS) {\n throw new UnsupportedMediaTypeHttpError('Only Quad data is supported.');\n }\n }\n\n /**\n * Returns all triples stored for the corresponding identifier.\n */\n public async getData(identifier: ResourceIdentifier): Promise<Guarded<Readable>> {\n await this.initialize();\n const name = namedNode(identifier.path);\n return this.sendSparqlConstruct(this.sparqlConstruct(name));\n }\n\n /**\n * Returns the metadata for the corresponding identifier.\n */\n public async getMetadata(identifier: ResourceIdentifier): Promise<RepresentationMetadata> {\n console.log(`[getMetadata] Starting for ${identifier.path}`);\n await this.initialize();\n const name = namedNode(identifier.path);\n const query = this.sparqlConstruct(this.getMetadataNode(name));\n console.log(`[getMetadata] Sending CONSTRUCT for ${identifier.path}`);\n const stream = await this.sendSparqlConstruct(query);\n console.log(`[getMetadata] Got stream for ${identifier.path}, reading...`);\n const quads: Quad[] = await arrayifyStream(stream);\n console.log(`[getMetadata] Read ${quads.length} quads for ${identifier.path}`);\n\n if (quads.length === 0) {\n throw new NotFoundHttpError();\n }\n\n const metadata = new RepresentationMetadata(identifier).addQuads(quads);\n // Only set default contentType if not already present in metadata\n if (!isContainerIdentifier(identifier) && !metadata.contentType) {\n metadata.contentType = INTERNAL_QUADS;\n }\n\n return metadata;\n }\n\n public async* getChildren(identifier: ResourceIdentifier): AsyncIterableIterator<RepresentationMetadata> {\n await this.initialize();\n const name = namedNode(identifier.path);\n const stream = await this.sendSparqlConstruct(this.sparqlConstruct(name));\n for await (const entry of stream) {\n yield new RepresentationMetadata((entry as Quad).object as NamedNode);\n }\n }\n\n /**\n * Writes the given metadata for the container.\n */\n public async writeContainer(identifier: ResourceIdentifier, metadata: RepresentationMetadata): Promise<void> {\n console.log(`[writeContainer] Starting for ${identifier.path}`);\n await this.initialize();\n addResourceMetadata(metadata, true);\n updateModifiedDate(metadata);\n const { name, parent } = this.getRelatedNames(identifier);\n console.log(`[writeContainer] Sending SPARQL update for ${identifier.path}, parent: ${parent?.value || 'none'}`);\n console.log(`[writeContainer] Metadata quads: ${metadata.quads().length}`);\n const result = await this.sendSparqlUpdate(this.sparqlInsert(name, metadata, parent));\n console.log(`[writeContainer] Completed for ${identifier.path}`);\n return result;\n }\n\n /**\n * Reads the given data stream and stores it together with the metadata.\n */\n public async writeDocument(\n identifier: ResourceIdentifier,\n data: Guarded<Readable>,\n metadata: RepresentationMetadata,\n ): Promise<void> {\n console.log(`[writeDocument] Starting for ${identifier.path}`);\n await this.initialize();\n if (this.isMetadataIdentifier(identifier)) {\n throw new ConflictHttpError('Not allowed to create NamedNodes with the metadata extension.');\n }\n const { name, parent } = this.getRelatedNames(identifier);\n console.log(`[writeDocument] Reading stream for ${identifier.path}`);\n\n // 添加超时处理\n const timeoutMs = 5000;\n const triplesPromise = arrayifyStream<Quad>(data);\n const timeoutPromise = new Promise<never>((_, reject) => {\n setTimeout(() => reject(new Error(`arrayifyStream timed out after ${timeoutMs}ms`)), timeoutMs);\n });\n \n let triples: Quad[];\n try {\n triples = await Promise.race([triplesPromise, timeoutPromise]);\n console.log(`[writeDocument] Read ${triples.length} triples for ${identifier.path}`);\n } catch (e: any) {\n console.error(`[writeDocument] Failed to read stream for ${identifier.path}:`, e?.message || e);\n throw e;\n }\n \n const def = defaultGraph();\n if (triples.some((triple): boolean => !def.equals(triple.graph))) {\n throw new NotImplementedHttpError('Only triples in the default graph are supported.');\n }\n\n metadata.removeAll(CONTENT_TYPE_TERM);\n console.log(`[writeDocument] Sending SPARQL update for ${identifier.path}`);\n const result = await this.sendSparqlUpdate(this.sparqlInsert(name, metadata, parent, triples));\n console.log(`[writeDocument] Completed for ${identifier.path}`);\n return result;\n }\n\n /**\n * Reads the metadata and stores it.\n */\n public async writeMetadata(identifier: ResourceIdentifier, metadata: RepresentationMetadata): Promise<void> {\n await this.initialize();\n const { name } = this.getRelatedNames(identifier);\n const metaName = this.getMetadataNode(name);\n return this.sendSparqlUpdate(this.sparqlInsertMetadata(metaName, metadata));\n }\n\n /**\n * Removes all graph data relevant to the given identifier.\n */\n public async deleteResource(identifier: ResourceIdentifier): Promise<void> {\n await this.initialize();\n const { name, parent } = this.getRelatedNames(identifier);\n return this.sendSparqlUpdate(this.sparqlDelete(name, parent));\n }\n\n // ============================================\n // QuintStore specific methods\n // ============================================\n\n /**\n * Get data with graph prefix filtering (key feature!)\n * This is much more efficient than full SPARQL for subgraph queries.\n */\n public async getDataByGraphPrefix(prefix: string): Promise<Quint[]> {\n await this.initialize();\n return this.store.getByGraphPrefix(prefix);\n }\n\n /**\n * Execute SPARQL query with graph prefix filtering\n */\n public async queryWithGraphPrefix(\n query: string,\n graphPrefix: string,\n ): Promise<Quad[]> {\n await this.initialize();\n const stream = await this.engine.queryBindings(query, { graphPrefix });\n return arrayifyStream(stream);\n }\n\n // ============================================\n // Private helpers\n // ============================================\n\n private getRelatedNames(identifier: ResourceIdentifier): { name: NamedNode; parent?: NamedNode } {\n const name = namedNode(identifier.path);\n\n if (this.identifierStrategy.isRootContainer(identifier)) {\n return { name };\n }\n\n const parentIdentifier = this.identifierStrategy.getParentContainer(identifier);\n const parent = namedNode(parentIdentifier.path);\n return { name, parent };\n }\n\n protected getMetadataNode(name: NamedNode): NamedNode {\n return namedNode(`meta:${name.value}`);\n }\n\n private isMetadataIdentifier(identifier: ResourceIdentifier): boolean {\n return identifier.path.startsWith('meta:');\n }\n\n protected sparqlConstruct(name: NamedNode): ConstructQuery {\n const pattern = quad(variable('s'), variable('p'), variable('o'));\n return {\n queryType: 'CONSTRUCT',\n template: [pattern],\n where: [this.sparqlSelectGraph(name, [pattern])],\n type: 'query',\n prefixes: {},\n };\n }\n\n private sparqlSelectGraph(name: NamedNode, triples: Quad[]): GraphPattern {\n return {\n type: 'graph',\n name,\n patterns: [{ type: 'bgp', triples }],\n } as GraphPattern;\n }\n\n private sparqlSelectGraphAsQuads(name: NamedNode, triples: Quad[]): any {\n return this.sparqlSelectGraph(name, triples);\n }\n\n /**\n * Creates an update query that overwrites the data and metadata of a resource.\n * If triples is undefined, we assume it's a container (so don't overwrite the main graph with containment triples).\n * This follows the same pattern as CSS's SparqlDataAccessor.\n *\n * @param name - Name of the resource to update.\n * @param metadata - New metadata of the resource.\n * @param parent - Name of the parent to update the containment triples.\n * @param triples - New data of the resource (undefined for containers).\n */\n private sparqlInsert(\n name: NamedNode,\n metadata: RepresentationMetadata,\n parent?: NamedNode,\n triples?: Quad[],\n ): Update {\n const metaName = this.getMetadataNode(name);\n\n // Insert new metadata and containment triple\n const insert: GraphQuads[] = [\n {\n type: 'graph',\n name: metaName,\n triples: metadata.quads() as Quad[],\n },\n ];\n\n if (parent) {\n insert.push({\n type: 'graph',\n name: parent,\n triples: [quad(parent, LDP.terms.contains, name)],\n });\n }\n\n // Necessary updates: delete metadata and insert new data\n const updates: InsertDeleteOperation[] = [\n // Always delete and reinsert metadata\n {\n updateType: 'deletewhere',\n delete: [this.sparqlSelectGraphAsQuads(metaName, [quad(variable('s'), variable('p'), variable('o'))])],\n },\n {\n updateType: 'insert',\n insert,\n },\n ];\n\n // Only overwrite data triples for documents (when triples is defined)\n // For containers, we don't touch the data graph to preserve ldp:contains triples\n if (triples !== undefined) {\n // This needs to be first so it happens before the insert\n updates.unshift({\n updateType: 'deletewhere',\n delete: [this.sparqlSelectGraphAsQuads(name, [quad(variable('s'), variable('p'), variable('o'))])],\n });\n\n if (triples.length > 0) {\n insert.push({\n type: 'graph',\n name,\n triples,\n });\n }\n }\n\n return {\n type: 'update',\n updates,\n prefixes: {},\n };\n }\n\n private sparqlInsertMetadata(metaName: NamedNode, metadata: RepresentationMetadata): Update {\n const metaGraphs: GraphQuads = {\n type: 'graph',\n name: metaName,\n triples: metadata.quads() as Quad[],\n };\n\n const deleteOp: InsertDeleteOperation = {\n updateType: 'deletewhere',\n delete: [this.sparqlSelectGraphAsQuads(metaName, [quad(variable('s'), variable('p'), variable('o'))])],\n };\n\n const insertOp: InsertDeleteOperation = {\n updateType: 'insert',\n insert: [metaGraphs],\n };\n\n return {\n type: 'update',\n updates: [deleteOp, insertOp],\n prefixes: {},\n };\n }\n\n private sparqlDelete(name: NamedNode, parent?: NamedNode): Update {\n const metaName = this.getMetadataNode(name);\n\n const updates: UpdateOperation[] = [\n {\n updateType: 'deletewhere',\n delete: [this.sparqlSelectGraphAsQuads(name, [quad(variable('s'), variable('p'), variable('o'))])],\n },\n {\n updateType: 'deletewhere',\n delete: [this.sparqlSelectGraphAsQuads(metaName, [quad(variable('s'), variable('p'), variable('o'))])],\n },\n ];\n\n if (parent) {\n updates.push({\n updateType: 'deletewhere',\n delete: [{\n type: 'graph',\n name: parent,\n triples: [quad(parent, LDP.terms.contains, name)],\n }],\n });\n }\n\n return {\n type: 'update',\n updates,\n prefixes: {},\n };\n }\n\n private async sendSparqlConstruct(query: ConstructQuery): Promise<Guarded<Readable>> {\n const queryString = this.generator.stringify(query);\n this.logger.verbose(`SPARQL CONSTRUCT: ${queryString}`);\n\n try {\n const quadStream = await this.engine.queryQuads(queryString);\n return guardStream(Readable.from(quadStream as unknown as AsyncIterable<any>));\n } catch (error: unknown) {\n this.logger.error(`SPARQL query failed: ${createErrorMessage(error)}`);\n throw error;\n }\n }\n\n private async sendSparqlUpdate(query: Update): Promise<void> {\n const queryString = this.generator.stringify(query);\n this.logger.verbose(`SPARQL UPDATE: ${queryString}`);\n\n try {\n await this.engine.queryVoid(queryString);\n } catch (error: unknown) {\n this.logger.error(`SPARQL update failed: ${createErrorMessage(error)}`);\n throw error;\n }\n }\n\n /**\n * Execute a SPARQL UPDATE query string directly.\n * Used by SparqlUpdateResourceStore for LDP PATCH operations.\n */\n public async executeSparqlUpdate(query: string, baseIri?: string): Promise<void> {\n this.logger.verbose(`executeSparqlUpdate: ${query}`);\n try {\n await this.engine.queryVoid(query);\n } catch (error: unknown) {\n this.logger.error(`SPARQL update failed: ${createErrorMessage(error)}`);\n throw error;\n }\n }\n}\n"]}
1
+ {"version":3,"file":"QuintStoreSparqlDataAccessor.js","sourceRoot":"","sources":["../../../src/storage/accessors/QuintStoreSparqlDataAccessor.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * QuintStoreSparqlDataAccessor - Data accessor using QuintStore\n * \n * Key features:\n * 1. Graph prefix filtering for efficient subgraph queries\n * 2. Backend-agnostic storage (SQLite, PostgreSQL, etc.)\n * 3. Future: vector similarity search\n */\n\nimport { getLoggerFor } from 'global-logger-factory';\nimport { Readable } from 'node:stream';\nimport arrayifyStream from 'arrayify-stream';\n\nimport { DataFactory } from 'n3';\nimport type { NamedNode, Quad, Term } from '@rdfjs/types';\nimport type {\n ConstructQuery,\n GraphPattern,\n GraphQuads,\n InsertDeleteOperation,\n SparqlGenerator,\n Update,\n UpdateOperation,\n} from 'sparqljs';\nimport { Generator } from 'sparqljs';\nimport {\n DataAccessor,\n RepresentationMetadata,\n IdentifierStrategy,\n addResourceMetadata,\n updateModifiedDate,\n \n type Representation,\n type ResourceIdentifier,\n INTERNAL_QUADS,\n ConflictHttpError,\n NotFoundHttpError,\n NotImplementedHttpError,\n UnsupportedMediaTypeHttpError,\n guardStream,\n type Guarded,\n isContainerIdentifier,\n CONTENT_TYPE_TERM,\n LDP,\n createErrorMessage,\n} from '@solid/community-server';\n\nimport type { QuintStore, Quint } from '../quint/types';\nimport { ComunicaQuintEngine } from '../sparql/ComunicaQuintEngine';\nimport type { RdfSourceInput } from '../rdf/types';\n\nconst { defaultGraph, namedNode, quad, variable } = DataFactory;\n\nexport class QuintStoreSparqlDataAccessor implements DataAccessor {\n protected readonly logger = getLoggerFor(this);\n private readonly identifierStrategy: IdentifierStrategy;\n private readonly store: QuintStore;\n private readonly engine: ComunicaQuintEngine;\n private readonly generator: SparqlGenerator;\n private readonly baseUrl: string;\n private initialized = false;\n private initializing: Promise<void> | null = null;\n\n public constructor(\n store: QuintStore,\n identifierStrategy: IdentifierStrategy,\n ) {\n this.store = store;\n this.identifierStrategy = identifierStrategy;\n this.generator = new Generator();\n this.engine = new ComunicaQuintEngine(this.store);\n // Get baseUrl from identifierStrategy\n const strategy = identifierStrategy as unknown as { baseUrl?: string };\n this.baseUrl = strategy.baseUrl ?? '';\n this.logger.info(`QuintStoreSparqlDataAccessor initialized with identifierStrategy: ${identifierStrategy.constructor.name}, baseUrl: ${this.baseUrl || 'N/A'}`);\n }\n\n /**\n * Initialize the store (open database connection)\n */\n public async initialize(): Promise<void> {\n if (this.initialized) {\n return;\n }\n\n this.initializing ??= this.initializeStore().finally(() => {\n this.initializing = null;\n });\n\n await this.initializing;\n }\n\n private async initializeStore(): Promise<void> {\n await this.store.open();\n this.initialized = true;\n this.logger.info('QuintStore initialized');\n }\n\n /**\n * Close the store\n */\n public async finalize(): Promise<void> {\n if (this.initializing) {\n await this.initializing.catch(() => {});\n }\n if (this.initialized) {\n await this.store.close();\n this.initialized = false;\n this.logger.info('QuintStore closed');\n }\n }\n\n /**\n * Only Quad data streams are supported.\n */\n public async canHandle(representation: Representation): Promise<void> {\n if (representation.binary || representation.metadata.contentType !== INTERNAL_QUADS) {\n throw new UnsupportedMediaTypeHttpError('Only Quad data is supported.');\n }\n }\n\n /**\n * Returns all triples stored for the corresponding identifier.\n */\n public async getData(identifier: ResourceIdentifier): Promise<Guarded<Readable>> {\n await this.initialize();\n const name = namedNode(identifier.path);\n return this.sendSparqlConstruct(this.sparqlConstruct(name));\n }\n\n /**\n * Returns the metadata for the corresponding identifier.\n */\n public async getMetadata(identifier: ResourceIdentifier): Promise<RepresentationMetadata> {\n console.log(`[getMetadata] Starting for ${identifier.path}`);\n await this.initialize();\n const name = namedNode(identifier.path);\n const query = this.sparqlConstruct(this.getMetadataNode(name));\n console.log(`[getMetadata] Sending CONSTRUCT for ${identifier.path}`);\n const stream = await this.sendSparqlConstruct(query);\n console.log(`[getMetadata] Got stream for ${identifier.path}, reading...`);\n const quads: Quad[] = await arrayifyStream(stream);\n console.log(`[getMetadata] Read ${quads.length} quads for ${identifier.path}`);\n\n if (quads.length === 0) {\n throw new NotFoundHttpError();\n }\n\n const metadata = new RepresentationMetadata(identifier).addQuads(quads);\n // Only set default contentType if not already present in metadata\n if (!isContainerIdentifier(identifier) && !metadata.contentType) {\n metadata.contentType = INTERNAL_QUADS;\n }\n\n return metadata;\n }\n\n public async* getChildren(identifier: ResourceIdentifier): AsyncIterableIterator<RepresentationMetadata> {\n await this.initialize();\n const name = namedNode(identifier.path);\n const stream = await this.sendSparqlConstruct(this.sparqlConstruct(name));\n for await (const entry of stream) {\n yield new RepresentationMetadata((entry as Quad).object as NamedNode);\n }\n }\n\n /**\n * Writes the given metadata for the container.\n */\n public async writeContainer(identifier: ResourceIdentifier, metadata: RepresentationMetadata): Promise<void> {\n console.log(`[writeContainer] Starting for ${identifier.path}`);\n await this.initialize();\n addResourceMetadata(metadata, true);\n updateModifiedDate(metadata);\n const { name, parent } = this.getRelatedNames(identifier);\n console.log(`[writeContainer] Sending SPARQL update for ${identifier.path}, parent: ${parent?.value || 'none'}`);\n console.log(`[writeContainer] Metadata quads: ${metadata.quads().length}`);\n const result = await this.sendSparqlUpdate(this.sparqlInsert(name, metadata, parent));\n console.log(`[writeContainer] Completed for ${identifier.path}`);\n return result;\n }\n\n /**\n * Reads the given data stream and stores it together with the metadata.\n */\n public async writeDocument(\n identifier: ResourceIdentifier,\n data: Guarded<Readable>,\n metadata: RepresentationMetadata,\n ): Promise<void> {\n console.log(`[writeDocument] Starting for ${identifier.path}`);\n await this.initialize();\n if (this.isMetadataIdentifier(identifier)) {\n throw new ConflictHttpError('Not allowed to create NamedNodes with the metadata extension.');\n }\n const { name, parent } = this.getRelatedNames(identifier);\n console.log(`[writeDocument] Reading stream for ${identifier.path}`);\n\n // 添加超时处理\n const timeoutMs = 5000;\n const triplesPromise = arrayifyStream<Quad>(data);\n const timeoutPromise = new Promise<never>((_, reject) => {\n setTimeout(() => reject(new Error(`arrayifyStream timed out after ${timeoutMs}ms`)), timeoutMs);\n });\n \n let triples: Quad[];\n try {\n triples = await Promise.race([triplesPromise, timeoutPromise]);\n console.log(`[writeDocument] Read ${triples.length} triples for ${identifier.path}`);\n } catch (e: any) {\n console.error(`[writeDocument] Failed to read stream for ${identifier.path}:`, e?.message || e);\n throw e;\n }\n \n const def = defaultGraph();\n if (triples.some((triple): boolean => !def.equals(triple.graph))) {\n throw new NotImplementedHttpError('Only triples in the default graph are supported.');\n }\n\n metadata.removeAll(CONTENT_TYPE_TERM);\n console.log(`[writeDocument] Sending SPARQL update for ${identifier.path}`);\n const result = await this.sendSparqlUpdate(this.sparqlInsert(name, metadata, parent, triples));\n console.log(`[writeDocument] Completed for ${identifier.path}`);\n return result;\n }\n\n public async writeRdfSourceDocument(\n identifier: ResourceIdentifier,\n quads: Quad[],\n metadata: RepresentationMetadata,\n source: RdfSourceInput,\n ): Promise<void> {\n await this.initialize();\n\n const sourceScopedStore = this.sourceScopedStore();\n if (!sourceScopedStore) {\n await this.writeDocument(identifier, guardStream(Readable.from(quads)), metadata);\n return;\n }\n\n if (this.isMetadataIdentifier(identifier)) {\n throw new ConflictHttpError('Not allowed to create NamedNodes with the metadata extension.');\n }\n\n const def = defaultGraph();\n if (quads.some((triple): boolean => !def.equals(triple.graph))) {\n throw new NotImplementedHttpError('Only triples in the default graph are supported.');\n }\n\n metadata.removeAll(CONTENT_TYPE_TERM);\n const { name, parent } = this.getRelatedNames(identifier);\n await this.replaceCompatibilityMetadata(name, metadata, parent);\n await sourceScopedStore.replaceSource(\n quads.map((value) => quad(value.subject, value.predicate, value.object, name)),\n source,\n );\n }\n\n public async deleteRdfSourceDocument(identifier: ResourceIdentifier): Promise<void> {\n await this.initialize();\n\n const sourceScopedStore = this.sourceScopedStore();\n if (!sourceScopedStore) {\n await this.deleteResource(identifier);\n return;\n }\n\n const { name, parent } = this.getRelatedNames(identifier);\n const metaName = this.getMetadataNode(name);\n await sourceScopedStore.deleteSource(identifier.path);\n await this.store.del({ graph: metaName });\n if (parent) {\n await this.store.del({\n graph: parent,\n subject: parent,\n predicate: LDP.terms.contains,\n object: name,\n });\n }\n }\n\n /**\n * Reads the metadata and stores it.\n */\n public async writeMetadata(identifier: ResourceIdentifier, metadata: RepresentationMetadata): Promise<void> {\n await this.initialize();\n const { name } = this.getRelatedNames(identifier);\n const metaName = this.getMetadataNode(name);\n return this.sendSparqlUpdate(this.sparqlInsertMetadata(metaName, metadata));\n }\n\n /**\n * Removes all graph data relevant to the given identifier.\n */\n public async deleteResource(identifier: ResourceIdentifier): Promise<void> {\n await this.initialize();\n const { name, parent } = this.getRelatedNames(identifier);\n return this.sendSparqlUpdate(this.sparqlDelete(name, parent));\n }\n\n // ============================================\n // QuintStore specific methods\n // ============================================\n\n /**\n * Get data with graph prefix filtering (key feature!)\n * This is much more efficient than full SPARQL for subgraph queries.\n */\n public async getDataByGraphPrefix(prefix: string): Promise<Quint[]> {\n await this.initialize();\n return this.store.getByGraphPrefix(prefix);\n }\n\n /**\n * Execute SPARQL query with graph prefix filtering\n */\n public async queryWithGraphPrefix(\n query: string,\n graphPrefix: string,\n ): Promise<Quad[]> {\n await this.initialize();\n const stream = await this.engine.queryBindings(query, { graphPrefix });\n return arrayifyStream(stream);\n }\n\n // ============================================\n // Private helpers\n // ============================================\n\n private getRelatedNames(identifier: ResourceIdentifier): { name: NamedNode; parent?: NamedNode } {\n const name = namedNode(identifier.path);\n\n if (this.identifierStrategy.isRootContainer(identifier)) {\n return { name };\n }\n\n const parentIdentifier = this.identifierStrategy.getParentContainer(identifier);\n const parent = namedNode(parentIdentifier.path);\n return { name, parent };\n }\n\n protected getMetadataNode(name: NamedNode): NamedNode {\n return namedNode(`meta:${name.value}`);\n }\n\n private isMetadataIdentifier(identifier: ResourceIdentifier): boolean {\n return identifier.path.startsWith('meta:');\n }\n\n protected sparqlConstruct(name: NamedNode): ConstructQuery {\n const pattern = quad(variable('s'), variable('p'), variable('o'));\n return {\n queryType: 'CONSTRUCT',\n template: [pattern],\n where: [this.sparqlSelectGraph(name, [pattern])],\n type: 'query',\n prefixes: {},\n };\n }\n\n private sparqlSelectGraph(name: NamedNode, triples: Quad[]): GraphPattern {\n return {\n type: 'graph',\n name,\n patterns: [{ type: 'bgp', triples }],\n } as GraphPattern;\n }\n\n private sparqlSelectGraphAsQuads(name: NamedNode, triples: Quad[]): any {\n return this.sparqlSelectGraph(name, triples);\n }\n\n /**\n * Creates an update query that overwrites the data and metadata of a resource.\n * If triples is undefined, we assume it's a container (so don't overwrite the main graph with containment triples).\n * This follows the same pattern as CSS's SparqlDataAccessor.\n *\n * @param name - Name of the resource to update.\n * @param metadata - New metadata of the resource.\n * @param parent - Name of the parent to update the containment triples.\n * @param triples - New data of the resource (undefined for containers).\n */\n private sparqlInsert(\n name: NamedNode,\n metadata: RepresentationMetadata,\n parent?: NamedNode,\n triples?: Quad[],\n ): Update {\n const metaName = this.getMetadataNode(name);\n\n // Insert new metadata and containment triple\n const insert: GraphQuads[] = [\n {\n type: 'graph',\n name: metaName,\n triples: metadata.quads() as Quad[],\n },\n ];\n\n if (parent) {\n insert.push({\n type: 'graph',\n name: parent,\n triples: [quad(parent, LDP.terms.contains, name)],\n });\n }\n\n // Necessary updates: delete metadata and insert new data\n const updates: InsertDeleteOperation[] = [\n // Always delete and reinsert metadata\n {\n updateType: 'deletewhere',\n delete: [this.sparqlSelectGraphAsQuads(metaName, [quad(variable('s'), variable('p'), variable('o'))])],\n },\n {\n updateType: 'insert',\n insert,\n },\n ];\n\n // Only overwrite data triples for documents (when triples is defined)\n // For containers, we don't touch the data graph to preserve ldp:contains triples\n if (triples !== undefined) {\n // This needs to be first so it happens before the insert\n updates.unshift({\n updateType: 'deletewhere',\n delete: [this.sparqlSelectGraphAsQuads(name, [quad(variable('s'), variable('p'), variable('o'))])],\n });\n\n if (triples.length > 0) {\n insert.push({\n type: 'graph',\n name,\n triples,\n });\n }\n }\n\n return {\n type: 'update',\n updates,\n prefixes: {},\n };\n }\n\n private sparqlInsertMetadata(metaName: NamedNode, metadata: RepresentationMetadata): Update {\n const metaGraphs: GraphQuads = {\n type: 'graph',\n name: metaName,\n triples: metadata.quads() as Quad[],\n };\n\n const deleteOp: InsertDeleteOperation = {\n updateType: 'deletewhere',\n delete: [this.sparqlSelectGraphAsQuads(metaName, [quad(variable('s'), variable('p'), variable('o'))])],\n };\n\n const insertOp: InsertDeleteOperation = {\n updateType: 'insert',\n insert: [metaGraphs],\n };\n\n return {\n type: 'update',\n updates: [deleteOp, insertOp],\n prefixes: {},\n };\n }\n\n private sparqlDelete(name: NamedNode, parent?: NamedNode): Update {\n const metaName = this.getMetadataNode(name);\n\n const updates: UpdateOperation[] = [\n {\n updateType: 'deletewhere',\n delete: [this.sparqlSelectGraphAsQuads(name, [quad(variable('s'), variable('p'), variable('o'))])],\n },\n {\n updateType: 'deletewhere',\n delete: [this.sparqlSelectGraphAsQuads(metaName, [quad(variable('s'), variable('p'), variable('o'))])],\n },\n ];\n\n if (parent) {\n updates.push({\n updateType: 'deletewhere',\n delete: [{\n type: 'graph',\n name: parent,\n triples: [quad(parent, LDP.terms.contains, name)],\n }],\n });\n }\n\n return {\n type: 'update',\n updates,\n prefixes: {},\n };\n }\n\n private async sendSparqlConstruct(query: ConstructQuery): Promise<Guarded<Readable>> {\n const queryString = this.generator.stringify(query);\n this.logger.verbose(`SPARQL CONSTRUCT: ${queryString}`);\n\n try {\n const quadStream = await this.engine.queryQuads(queryString);\n return guardStream(Readable.from(quadStream as unknown as AsyncIterable<any>));\n } catch (error: unknown) {\n this.logger.error(`SPARQL query failed: ${createErrorMessage(error)}`);\n throw error;\n }\n }\n\n private async sendSparqlUpdate(query: Update): Promise<void> {\n const queryString = this.generator.stringify(query);\n this.logger.verbose(`SPARQL UPDATE: ${queryString}`);\n\n try {\n await this.engine.queryVoid(queryString);\n } catch (error: unknown) {\n this.logger.error(`SPARQL update failed: ${createErrorMessage(error)}`);\n throw error;\n }\n }\n\n private sourceScopedStore(): {\n replaceSource(quints: Quint[], source: RdfSourceInput): Promise<void>;\n deleteSource(source: string): Promise<number>;\n } | undefined {\n const store = this.store as Partial<{\n replaceSource(quints: Quint[], source: RdfSourceInput): Promise<void>;\n deleteSource(source: string): Promise<number>;\n }>;\n if (typeof store.replaceSource === 'function' && typeof store.deleteSource === 'function') {\n return store as {\n replaceSource(quints: Quint[], source: RdfSourceInput): Promise<void>;\n deleteSource(source: string): Promise<number>;\n };\n }\n return undefined;\n }\n\n private async replaceCompatibilityMetadata(\n name: NamedNode,\n metadata: RepresentationMetadata,\n parent?: NamedNode,\n ): Promise<void> {\n const metaName = this.getMetadataNode(name);\n await this.store.del({ graph: metaName });\n const inserts: Quint[] = metadata.quads().map((value) => quad(\n value.subject,\n value.predicate,\n value.object,\n metaName,\n ) as Quint);\n if (parent) {\n inserts.push(quad(parent, LDP.terms.contains, name, parent) as Quint);\n }\n if (inserts.length > 0) {\n await this.store.multiPut(inserts);\n }\n }\n\n /**\n * Execute a SPARQL UPDATE query string directly.\n * Used by SparqlUpdateResourceStore for LDP PATCH operations.\n */\n public async executeSparqlUpdate(query: string, baseIri?: string): Promise<void> {\n this.logger.verbose(`executeSparqlUpdate: ${query}`);\n try {\n await this.engine.queryVoid(query);\n } catch (error: unknown) {\n this.logger.error(`SPARQL update failed: ${createErrorMessage(error)}`);\n throw error;\n }\n }\n}\n"]}
@@ -54,6 +54,10 @@
54
54
  "@id": "undefineds:dist/storage/accessors/QuintStoreSparqlDataAccessor.jsonld#QuintStoreSparqlDataAccessor__member_initialized",
55
55
  "memberFieldName": "initialized"
56
56
  },
57
+ {
58
+ "@id": "undefineds:dist/storage/accessors/QuintStoreSparqlDataAccessor.jsonld#QuintStoreSparqlDataAccessor__member_initializing",
59
+ "memberFieldName": "initializing"
60
+ },
57
61
  {
58
62
  "@id": "undefineds:dist/storage/accessors/QuintStoreSparqlDataAccessor.jsonld#QuintStoreSparqlDataAccessor__member_constructor",
59
63
  "memberFieldName": "constructor"
@@ -62,6 +66,10 @@
62
66
  "@id": "undefineds:dist/storage/accessors/QuintStoreSparqlDataAccessor.jsonld#QuintStoreSparqlDataAccessor__member_initialize",
63
67
  "memberFieldName": "initialize"
64
68
  },
69
+ {
70
+ "@id": "undefineds:dist/storage/accessors/QuintStoreSparqlDataAccessor.jsonld#QuintStoreSparqlDataAccessor__member_initializeStore",
71
+ "memberFieldName": "initializeStore"
72
+ },
65
73
  {
66
74
  "@id": "undefineds:dist/storage/accessors/QuintStoreSparqlDataAccessor.jsonld#QuintStoreSparqlDataAccessor__member_finalize",
67
75
  "memberFieldName": "finalize"
@@ -90,6 +98,14 @@
90
98
  "@id": "undefineds:dist/storage/accessors/QuintStoreSparqlDataAccessor.jsonld#QuintStoreSparqlDataAccessor__member_writeDocument",
91
99
  "memberFieldName": "writeDocument"
92
100
  },
101
+ {
102
+ "@id": "undefineds:dist/storage/accessors/QuintStoreSparqlDataAccessor.jsonld#QuintStoreSparqlDataAccessor__member_writeRdfSourceDocument",
103
+ "memberFieldName": "writeRdfSourceDocument"
104
+ },
105
+ {
106
+ "@id": "undefineds:dist/storage/accessors/QuintStoreSparqlDataAccessor.jsonld#QuintStoreSparqlDataAccessor__member_deleteRdfSourceDocument",
107
+ "memberFieldName": "deleteRdfSourceDocument"
108
+ },
93
109
  {
94
110
  "@id": "undefineds:dist/storage/accessors/QuintStoreSparqlDataAccessor.jsonld#QuintStoreSparqlDataAccessor__member_writeMetadata",
95
111
  "memberFieldName": "writeMetadata"
@@ -150,6 +166,14 @@
150
166
  "@id": "undefineds:dist/storage/accessors/QuintStoreSparqlDataAccessor.jsonld#QuintStoreSparqlDataAccessor__member_sendSparqlUpdate",
151
167
  "memberFieldName": "sendSparqlUpdate"
152
168
  },
169
+ {
170
+ "@id": "undefineds:dist/storage/accessors/QuintStoreSparqlDataAccessor.jsonld#QuintStoreSparqlDataAccessor__member_sourceScopedStore",
171
+ "memberFieldName": "sourceScopedStore"
172
+ },
173
+ {
174
+ "@id": "undefineds:dist/storage/accessors/QuintStoreSparqlDataAccessor.jsonld#QuintStoreSparqlDataAccessor__member_replaceCompatibilityMetadata",
175
+ "memberFieldName": "replaceCompatibilityMetadata"
176
+ },
153
177
  {
154
178
  "@id": "undefineds:dist/storage/accessors/QuintStoreSparqlDataAccessor.jsonld#QuintStoreSparqlDataAccessor__member_executeSparqlUpdate",
155
179
  "memberFieldName": "executeSparqlUpdate"
@@ -40,10 +40,13 @@ export interface SqlExecutor {
40
40
  export declare abstract class BaseQuintStore extends QuintStore {
41
41
  protected options: QuintStoreOptions;
42
42
  protected executor: SqlExecutor | null;
43
+ protected opened: boolean;
44
+ protected opening: Promise<void> | null;
43
45
  constructor(options: QuintStoreOptions);
44
46
  protected abstract createExecutor(): Promise<SqlExecutor>;
45
47
  protected abstract closeExecutor(): Promise<void>;
46
48
  open(): Promise<void>;
49
+ protected openOnce(): Promise<void>;
47
50
  close(): Promise<void>;
48
51
  protected ensureOpen(): void;
49
52
  get(pattern: QuintPattern, options?: QueryOptions): Promise<Quint[]>;
@@ -21,48 +21,72 @@ class BaseQuintStore extends types_1.QuintStore {
21
21
  constructor(options) {
22
22
  super();
23
23
  this.executor = null;
24
+ this.opened = false;
25
+ this.opening = null;
24
26
  this.options = options;
25
27
  }
26
28
  // ============================================
27
29
  // Lifecycle
28
30
  // ============================================
29
31
  async open() {
30
- if (this.executor) {
31
- return; // 幂等
32
- }
33
- this.executor = await this.createExecutor();
34
- // 创建表和索引
35
- await this.executor.exec(`
36
- CREATE TABLE IF NOT EXISTS quints (
37
- graph TEXT NOT NULL,
38
- subject TEXT NOT NULL,
39
- predicate TEXT NOT NULL,
40
- object TEXT NOT NULL,
41
- vector TEXT,
42
- PRIMARY KEY (graph, subject, predicate, object)
43
- )
44
- `);
45
- // 创建索引(分开执行,避免某些数据库不支持多语句)
46
- const indexes = [
47
- 'CREATE INDEX IF NOT EXISTS idx_spog ON quints (subject, predicate, object, graph)',
48
- 'CREATE INDEX IF NOT EXISTS idx_ogsp ON quints (object, graph, subject, predicate)',
49
- 'CREATE INDEX IF NOT EXISTS idx_gspo ON quints (graph, subject, predicate, object)',
50
- 'CREATE INDEX IF NOT EXISTS idx_sopg ON quints (subject, object, predicate, graph)',
51
- 'CREATE INDEX IF NOT EXISTS idx_pogs ON quints (predicate, object, graph, subject)',
52
- 'CREATE INDEX IF NOT EXISTS idx_gpos ON quints (graph, predicate, object, subject)',
53
- ];
54
- for (const indexSql of indexes) {
55
- await this.executor.exec(indexSql);
32
+ if (this.opened) {
33
+ return;
34
+ }
35
+ this.opening ??= this.openOnce().finally(() => {
36
+ this.opening = null;
37
+ });
38
+ await this.opening;
39
+ }
40
+ async openOnce() {
41
+ const executor = await this.createExecutor();
42
+ this.executor = executor;
43
+ try {
44
+ // 创建表和索引
45
+ await executor.exec(`
46
+ CREATE TABLE IF NOT EXISTS quints (
47
+ graph TEXT NOT NULL,
48
+ subject TEXT NOT NULL,
49
+ predicate TEXT NOT NULL,
50
+ object TEXT NOT NULL,
51
+ vector TEXT,
52
+ PRIMARY KEY (graph, subject, predicate, object)
53
+ )
54
+ `);
55
+ // 创建索引(分开执行,避免某些数据库不支持多语句)
56
+ const indexes = [
57
+ 'CREATE INDEX IF NOT EXISTS idx_spog ON quints (subject, predicate, object, graph)',
58
+ 'CREATE INDEX IF NOT EXISTS idx_ogsp ON quints (object, graph, subject, predicate)',
59
+ 'CREATE INDEX IF NOT EXISTS idx_gspo ON quints (graph, subject, predicate, object)',
60
+ 'CREATE INDEX IF NOT EXISTS idx_sopg ON quints (subject, object, predicate, graph)',
61
+ 'CREATE INDEX IF NOT EXISTS idx_pogs ON quints (predicate, object, graph, subject)',
62
+ 'CREATE INDEX IF NOT EXISTS idx_gpos ON quints (graph, predicate, object, subject)',
63
+ ];
64
+ for (const indexSql of indexes) {
65
+ await executor.exec(indexSql);
66
+ }
67
+ this.opened = true;
68
+ }
69
+ catch (error) {
70
+ await this.closeExecutor().catch(() => { });
71
+ if (this.executor === executor) {
72
+ this.executor = null;
73
+ }
74
+ this.opened = false;
75
+ throw error;
56
76
  }
57
77
  }
58
78
  async close() {
79
+ if (this.opening) {
80
+ await this.opening.catch(() => { });
81
+ }
59
82
  if (this.executor) {
60
83
  await this.closeExecutor();
61
84
  this.executor = null;
62
85
  }
86
+ this.opened = false;
63
87
  }
64
88
  ensureOpen() {
65
- if (!this.executor) {
89
+ if (!this.opened || !this.executor) {
66
90
  throw new Error('Store not open. Call open() first.');
67
91
  }
68
92
  }
@@ -1 +1 @@
1
- {"version":3,"file":"BaseQuintStore.js","sourceRoot":"","sources":["../../../src/storage/quint/BaseQuintStore.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * BaseQuintStore - 统一的 QuintStore 抽象基类\n * \n * 支持:\n * - SQLite (via pluggable SQLite runtime + drizzle-orm)\n * - PGLite (via @electric-sql/pglite + drizzle-orm)\n * - PostgreSQL (via pg + drizzle-orm) - 未来\n * \n * 设计:\n * - 所有 SQL 逻辑在基类中实现\n * - 子类只负责创建数据库连接和执行原生 SQL\n */\n\nimport { wrap, AsyncIterator } from 'asynciterator';\nimport { DataFactory } from 'n3';\nimport type { Term, Quad } from '@rdfjs/types';\n\nimport { \n rowToQuad, \n parseVector,\n termToId,\n serializeObject,\n fpEncode,\n SEP,\n isSerializedObjectValue,\n} from './serialization';\nimport type {\n Quint,\n QuintPattern,\n QuintStoreOptions,\n QueryOptions,\n StoreStats,\n TermMatch,\n TermOperators,\n CompoundPattern,\n CompoundResult,\n OperatorValue,\n AttributeMap,\n} from './types';\nimport { isTerm, QuintStore } from './types';\n\nexport interface QuintRow {\n graph: string;\n subject: string;\n predicate: string;\n object: string;\n vector: string | null;\n}\n\n/**\n * SQL 执行器接口 - 子类实现\n */\nexport interface SqlExecutor {\n /** 执行查询,返回行数组 */\n query<T = any>(sql: string, params?: any[]): Promise<T[]>;\n /** 执行更新,返回影响行数 */\n execute(sql: string, params?: any[]): Promise<number>;\n /** 执行多条语句(事务内) */\n executeInTransaction(statements: { sql: string; params?: any[] }[]): Promise<void>;\n /** 执行原生 SQL(建表等) */\n exec(sql: string): Promise<void>;\n}\n\nexport abstract class BaseQuintStore extends QuintStore {\n protected options: QuintStoreOptions;\n protected executor: SqlExecutor | null = null;\n\n constructor(options: QuintStoreOptions) {\n super();\n this.options = options;\n }\n\n // ============================================\n // 抽象方法 - 子类实现\n // ============================================\n\n protected abstract createExecutor(): Promise<SqlExecutor>;\n protected abstract closeExecutor(): Promise<void>;\n\n // ============================================\n // Lifecycle\n // ============================================\n\n async open(): Promise<void> {\n if (this.executor) {\n return; // 幂等\n }\n\n this.executor = await this.createExecutor();\n\n // 创建表和索引\n await this.executor.exec(`\n CREATE TABLE IF NOT EXISTS quints (\n graph TEXT NOT NULL,\n subject TEXT NOT NULL,\n predicate TEXT NOT NULL,\n object TEXT NOT NULL,\n vector TEXT,\n PRIMARY KEY (graph, subject, predicate, object)\n )\n `);\n\n // 创建索引(分开执行,避免某些数据库不支持多语句)\n const indexes = [\n 'CREATE INDEX IF NOT EXISTS idx_spog ON quints (subject, predicate, object, graph)',\n 'CREATE INDEX IF NOT EXISTS idx_ogsp ON quints (object, graph, subject, predicate)',\n 'CREATE INDEX IF NOT EXISTS idx_gspo ON quints (graph, subject, predicate, object)',\n 'CREATE INDEX IF NOT EXISTS idx_sopg ON quints (subject, object, predicate, graph)',\n 'CREATE INDEX IF NOT EXISTS idx_pogs ON quints (predicate, object, graph, subject)',\n 'CREATE INDEX IF NOT EXISTS idx_gpos ON quints (graph, predicate, object, subject)',\n ];\n\n for (const indexSql of indexes) {\n await this.executor.exec(indexSql);\n }\n }\n\n async close(): Promise<void> {\n if (this.executor) {\n await this.closeExecutor();\n this.executor = null;\n }\n }\n\n protected ensureOpen(): void {\n if (!this.executor) {\n throw new Error('Store not open. Call open() first.');\n }\n }\n\n // ============================================\n // Query Operations\n // ============================================\n\n async get(pattern: QuintPattern, options?: QueryOptions): Promise<Quint[]> {\n const patternDesc = Object.entries(pattern).map(([k, v]) => `${k}=${v ? 'set' : 'any'}`).join(',');\n console.log(`[BaseQuintStore.get] Starting: ${patternDesc}`);\n this.ensureOpen();\n\n const { sql, params } = this.buildSelectQuery(pattern, options);\n console.log(`[BaseQuintStore.get] SQL: ${sql.slice(0, 80)}...`);\n const start = Date.now();\n const rows = await this.executor!.query<QuintRow>(sql, params);\n console.log(`[BaseQuintStore.get] Completed in ${Date.now() - start}ms, got ${rows.length} rows`);\n \n return rows.map(row => this.rowToQuint(row));\n }\n\n match(\n subject?: Term | null,\n predicate?: Term | null,\n object?: Term | null,\n graph?: Term | null\n ): AsyncIterator<Quint> {\n const pattern: QuintPattern = {};\n if (subject && subject.termType !== 'Variable') pattern.subject = subject;\n if (predicate && predicate.termType !== 'Variable') pattern.predicate = predicate;\n if (object && object.termType !== 'Variable') pattern.object = object;\n if (graph && graph.termType !== 'Variable' && graph.termType !== 'DefaultGraph') {\n pattern.graph = graph;\n }\n\n return wrap(this.get(pattern));\n }\n\n async getByGraphPrefix(prefix: string, options?: QueryOptions): Promise<Quint[]> {\n this.ensureOpen();\n\n let sql = `SELECT * FROM quints WHERE graph >= ? AND graph < ?`;\n const params: any[] = [prefix, prefix + '\\uffff'];\n\n if (options?.limit) {\n sql += ` LIMIT ?`;\n params.push(options.limit);\n }\n if (options?.offset) {\n sql += ` OFFSET ?`;\n params.push(options.offset);\n }\n\n const rows = await this.executor!.query<QuintRow>(sql, params);\n return rows.map(row => this.rowToQuint(row));\n }\n\n async count(pattern: QuintPattern): Promise<number> {\n this.ensureOpen();\n\n const { whereClause, params } = this.buildWhereClause(pattern);\n const sql = `SELECT COUNT(*) as count FROM quints${whereClause}`;\n \n const rows = await this.executor!.query<{ count: number }>(sql, params);\n return rows[0]?.count ?? 0;\n }\n\n // ============================================\n // Compound Query (SQL JOIN)\n // ============================================\n\n override async getCompound(compound: CompoundPattern, options?: QueryOptions): Promise<CompoundResult[]> {\n this.ensureOpen();\n\n const { patterns, joinOn, select } = compound;\n \n if (patterns.length === 0) {\n return [];\n }\n\n if (patterns.length === 1) {\n const quads = await this.get(patterns[0], options);\n return quads.map(q => ({\n joinValue: termToId((q as any)[joinOn]),\n bindings: {},\n quads: [q],\n }));\n }\n\n const { sql, params } = this.buildCompoundQuery(compound, options);\n \n if (this.options.debug) {\n console.log('[BaseQuintStore] Compound SQL:', sql);\n console.log('[BaseQuintStore] Params:', params);\n }\n\n const rows = await this.executor!.query<Record<string, string>>(sql, params);\n\n return rows.map(row => {\n const bindings: Record<string, string> = {};\n \n if (select) {\n for (const s of select) {\n bindings[s.alias] = row[s.alias];\n }\n } else {\n for (const key of Object.keys(row)) {\n if (key !== 'join_value') {\n bindings[key] = row[key];\n }\n }\n }\n\n return {\n joinValue: row.join_value,\n bindings,\n };\n });\n }\n\n // ============================================\n // Batch Attributes Query (for OPTIONAL optimization)\n // ============================================\n\n override async getAttributes(\n subjects: string[],\n predicates: string[],\n graph?: Term\n ): Promise<AttributeMap> {\n this.ensureOpen();\n\n if (subjects.length === 0 || predicates.length === 0) {\n return new Map();\n }\n\n // 构建 IN 子句的占位符\n const subjectPlaceholders = subjects.map(() => '?').join(', ');\n const predicatePlaceholders = predicates.map(() => '?').join(', ');\n \n let sql = `SELECT subject, predicate, object FROM quints WHERE subject IN (${subjectPlaceholders}) AND predicate IN (${predicatePlaceholders})`;\n const params: any[] = [...subjects, ...predicates];\n\n if (graph && graph.termType !== 'DefaultGraph') {\n sql += ` AND graph = ?`;\n params.push(termToId(graph as any));\n }\n\n if (this.options.debug) {\n console.log('[BaseQuintStore] getAttributes SQL:', sql);\n console.log('[BaseQuintStore] Params:', params.length, 'subjects:', subjects.length, 'predicates:', predicates.length);\n }\n\n const rows = await this.executor!.query<{ subject: string; predicate: string; object: string }>(sql, params);\n\n // 构建结果 Map\n const result: AttributeMap = new Map();\n\n for (const row of rows) {\n if (!result.has(row.subject)) {\n result.set(row.subject, new Map());\n }\n const predicateMap = result.get(row.subject)!;\n \n if (!predicateMap.has(row.predicate)) {\n predicateMap.set(row.predicate, []);\n }\n \n const objectTerm = this.deserializeObject(row.object);\n predicateMap.get(row.predicate)!.push(objectTerm);\n }\n\n if (this.options.debug) {\n console.log('[BaseQuintStore] getAttributes returned', result.size, 'subjects');\n }\n\n return result;\n }\n\n // ============================================\n // Write Operations\n // ============================================\n\n async put(quint: Quint): Promise<void> {\n this.ensureOpen();\n\n const row = this.quintToRow(quint);\n \n // UPSERT: INSERT OR REPLACE (SQLite) / ON CONFLICT DO UPDATE (PostgreSQL)\n // 使用通用的 INSERT OR REPLACE 语法,PGLite 和 SQLite 都支持\n const sql = `INSERT OR REPLACE INTO quints (graph, subject, predicate, object, vector) VALUES (?, ?, ?, ?, ?)`;\n await this.executor!.execute(sql, [row.graph, row.subject, row.predicate, row.object, row.vector]);\n }\n\n async multiPut(quintList: Quint[]): Promise<void> {\n this.ensureOpen();\n\n if (quintList.length === 0) return;\n\n const statements = quintList.map(quint => {\n const row = this.quintToRow(quint);\n return {\n sql: `INSERT OR REPLACE INTO quints (graph, subject, predicate, object, vector) VALUES (?, ?, ?, ?, ?)`,\n params: [row.graph, row.subject, row.predicate, row.object, row.vector],\n };\n });\n\n await this.executor!.executeInTransaction(statements);\n }\n\n async updateEmbedding(pattern: QuintPattern, embedding: number[]): Promise<number> {\n this.ensureOpen();\n\n const { whereClause, params } = this.buildWhereClause(pattern);\n const vectorJson = JSON.stringify(embedding);\n \n const sql = `UPDATE quints SET vector = ?${whereClause}`;\n return await this.executor!.execute(sql, [vectorJson, ...params]);\n }\n\n // ============================================\n // Delete Operations\n // ============================================\n\n async del(pattern: QuintPattern): Promise<number> {\n this.ensureOpen();\n\n const { whereClause, params } = this.buildWhereClause(pattern);\n const sql = `DELETE FROM quints${whereClause}`;\n \n return await this.executor!.execute(sql, params);\n }\n\n async multiDel(quintList: Quint[]): Promise<void> {\n this.ensureOpen();\n\n if (quintList.length === 0) return;\n\n const statements = quintList.map(quint => {\n const g = termToId(quint.graph as any);\n const s = termToId(quint.subject as any);\n const p = termToId(quint.predicate as any);\n const o = serializeObject(quint.object as any);\n \n return {\n sql: `DELETE FROM quints WHERE graph = ? AND subject = ? AND predicate = ? AND object = ?`,\n params: [g, s, p, o],\n };\n });\n\n await this.executor!.executeInTransaction(statements);\n }\n\n // ============================================\n // Stats\n // ============================================\n\n async stats(): Promise<StoreStats> {\n this.ensureOpen();\n\n const [totalResult, vectorResult, graphResult] = await Promise.all([\n this.executor!.query<{ count: number }>('SELECT COUNT(*) as count FROM quints'),\n this.executor!.query<{ count: number }>('SELECT COUNT(*) as count FROM quints WHERE vector IS NOT NULL'),\n this.executor!.query<{ count: number }>('SELECT COUNT(DISTINCT graph) as count FROM quints'),\n ]);\n\n return {\n totalCount: totalResult[0]?.count ?? 0,\n vectorCount: vectorResult[0]?.count ?? 0,\n graphCount: graphResult[0]?.count ?? 0,\n };\n }\n\n async clear(): Promise<void> {\n this.ensureOpen();\n await this.executor!.execute('DELETE FROM quints');\n }\n\n // ============================================\n // SQL Building Helpers\n // ============================================\n\n protected buildSelectQuery(pattern: QuintPattern, options?: QueryOptions): { sql: string; params: any[] } {\n const { whereClause, params } = this.buildWhereClause(pattern);\n \n let sql = `SELECT * FROM quints${whereClause}`;\n\n if (options?.order && options.order.length > 0) {\n const orderCols = options.order.join(', ');\n sql += ` ORDER BY ${orderCols}`;\n if (options.reverse) {\n sql += ' DESC';\n }\n }\n\n if (options?.limit) {\n sql += ` LIMIT ?`;\n params.push(options.limit);\n }\n\n if (options?.offset) {\n sql += ` OFFSET ?`;\n params.push(options.offset);\n }\n\n return { sql, params };\n }\n\n protected buildWhereClause(pattern: QuintPattern): { whereClause: string; params: any[] } {\n const conditions: string[] = [];\n const params: any[] = [];\n\n this.addConditions(conditions, params, 'graph', pattern.graph, false);\n this.addConditions(conditions, params, 'subject', pattern.subject, false);\n this.addConditions(conditions, params, 'predicate', pattern.predicate, false);\n this.addConditions(conditions, params, 'object', pattern.object, true);\n\n const whereClause = conditions.length > 0 ? ` WHERE ${conditions.join(' AND ')}` : '';\n return { whereClause, params };\n }\n\n protected addConditions(\n conditions: string[],\n params: any[],\n column: string,\n match: TermMatch | undefined,\n isObject: boolean\n ): void {\n if (!match) return;\n\n if (isTerm(match)) {\n conditions.push(`${column} = ?`);\n params.push(isObject ? serializeObject(match as any) : termToId(match as any));\n return;\n }\n\n const ops = match as TermOperators;\n\n if (ops.$eq !== undefined) {\n conditions.push(`${column} = ?`);\n params.push(this.serializeOpValue(ops.$eq, isObject, '$eq'));\n }\n if (ops.$ne !== undefined) {\n conditions.push(`${column} != ?`);\n params.push(this.serializeOpValue(ops.$ne, isObject, '$ne'));\n }\n if (ops.$gt !== undefined) {\n conditions.push(`${column} > ?`);\n params.push(this.serializeOpValue(ops.$gt, isObject, '$gt'));\n }\n if (ops.$gte !== undefined) {\n conditions.push(`${column} >= ?`);\n params.push(this.serializeOpValue(ops.$gte, isObject, '$gte'));\n }\n if (ops.$lt !== undefined) {\n conditions.push(`${column} < ?`);\n params.push(this.serializeOpValue(ops.$lt, isObject, '$lt'));\n }\n if (ops.$lte !== undefined) {\n conditions.push(`${column} <= ?`);\n params.push(this.serializeOpValue(ops.$lte, isObject, '$lte'));\n }\n if (ops.$in !== undefined && ops.$in.length > 0) {\n const placeholders = ops.$in.map(() => '?').join(', ');\n conditions.push(`${column} IN (${placeholders})`);\n params.push(...ops.$in.map(v => this.serializeOpValue(v, isObject, '$in')));\n }\n if (ops.$notIn !== undefined && ops.$notIn.length > 0) {\n const placeholders = ops.$notIn.map(() => '?').join(', ');\n conditions.push(`${column} NOT IN (${placeholders})`);\n params.push(...ops.$notIn.map(v => this.serializeOpValue(v, isObject, '$notIn')));\n }\n if (ops.$startsWith !== undefined) {\n conditions.push(`${column} >= ? AND ${column} < ?`);\n params.push(ops.$startsWith, ops.$startsWith + '\\uffff');\n }\n if (ops.$endsWith !== undefined) {\n conditions.push(`${column} LIKE ?`);\n params.push(`%${ops.$endsWith}`);\n }\n if (ops.$contains !== undefined) {\n conditions.push(`${column} LIKE ?`);\n params.push(`%${ops.$contains}%`);\n }\n if (ops.$regex !== undefined) {\n // 使用 GLOB (SQLite) 或 ~ (PostgreSQL)\n // 这里用 LIKE 作为简单实现\n const pattern = ops.$regex.replace(/\\.\\*/g, '%').replace(/\\./g, '_');\n conditions.push(`${column} LIKE ?`);\n params.push(pattern);\n }\n if (ops.$isNull === true) {\n conditions.push(`${column} IS NULL`);\n }\n if (ops.$isNull === false) {\n conditions.push(`${column} IS NOT NULL`);\n }\n }\n\n protected serializeOpValue(value: OperatorValue, isObject: boolean, filterOp: string): any {\n if (typeof value === 'object' && 'termType' in value) {\n return isObject ? serializeObject(value as any) : termToId(value as any);\n }\n \n if (typeof value === 'number') {\n if (isObject) {\n if (filterOp === '$eq' || filterOp === '$ne' || filterOp === '$in' || filterOp === '$notIn') {\n const lit = DataFactory.literal(String(value), DataFactory.namedNode('http://www.w3.org/2001/XMLSchema#integer'));\n return serializeObject(lit);\n }\n const fpValue = `N${SEP}${fpEncode(value)}`;\n if (filterOp === '$gt' || filterOp === '$lte') {\n return fpValue + SEP + '\\uffff';\n }\n return fpValue;\n }\n return value;\n }\n \n if (isObject && !isSerializedObjectValue(value)) {\n return `\"${value}\"`;\n }\n return value;\n }\n\n protected buildCompoundQuery(compound: CompoundPattern, options?: QueryOptions): { sql: string; params: any[] } {\n const { patterns, joinOn, select } = compound;\n const params: any[] = [];\n \n // SELECT 子句\n let selectClause = `q0.${joinOn} as join_value`;\n \n if (select) {\n for (const s of select) {\n selectClause += `, q${s.pattern}.${s.field} as ${s.alias}`;\n }\n } else {\n for (let i = 0; i < patterns.length; i++) {\n selectClause += `, q${i}.object as p${i}_object`;\n selectClause += `, q${i}.predicate as p${i}_predicate`;\n }\n }\n\n // FROM 子句(JOIN)\n let fromClause = 'quints q0';\n for (let i = 1; i < patterns.length; i++) {\n fromClause += ` JOIN quints q${i} ON q0.${joinOn} = q${i}.${joinOn}`;\n fromClause += ` AND q0.graph = q${i}.graph`;\n }\n\n // WHERE 子句\n const whereParts: string[] = [];\n \n for (let i = 0; i < patterns.length; i++) {\n const pattern = patterns[i];\n const alias = `q${i}`;\n \n this.addAliasedConditions(whereParts, params, alias, pattern);\n }\n\n let sql = `SELECT ${selectClause} FROM ${fromClause}`;\n \n if (whereParts.length > 0) {\n sql += ` WHERE ${whereParts.join(' AND ')}`;\n }\n\n if (options?.limit) {\n sql += ` LIMIT ?`;\n params.push(options.limit);\n }\n if (options?.offset) {\n sql += ` OFFSET ?`;\n params.push(options.offset);\n }\n\n return { sql, params };\n }\n\n protected addAliasedConditions(\n conditions: string[],\n params: any[],\n alias: string,\n pattern: QuintPattern\n ): void {\n const addCond = (col: string, match: TermMatch | undefined, isObject: boolean) => {\n if (!match) return;\n\n if (isTerm(match)) {\n conditions.push(`${alias}.${col} = ?`);\n params.push(isObject ? serializeObject(match as any) : termToId(match as any));\n return;\n }\n\n const ops = match as TermOperators;\n \n if (ops.$eq !== undefined) {\n conditions.push(`${alias}.${col} = ?`);\n params.push(this.serializeOpValue(ops.$eq, isObject, '$eq'));\n }\n if (ops.$gt !== undefined) {\n conditions.push(`${alias}.${col} > ?`);\n params.push(this.serializeOpValue(ops.$gt, isObject, '$gt'));\n }\n if (ops.$gte !== undefined) {\n conditions.push(`${alias}.${col} >= ?`);\n params.push(this.serializeOpValue(ops.$gte, isObject, '$gte'));\n }\n if (ops.$lt !== undefined) {\n conditions.push(`${alias}.${col} < ?`);\n params.push(this.serializeOpValue(ops.$lt, isObject, '$lt'));\n }\n if (ops.$lte !== undefined) {\n conditions.push(`${alias}.${col} <= ?`);\n params.push(this.serializeOpValue(ops.$lte, isObject, '$lte'));\n }\n if (ops.$in !== undefined && ops.$in.length > 0) {\n const placeholders = ops.$in.map(() => '?').join(', ');\n conditions.push(`${alias}.${col} IN (${placeholders})`);\n params.push(...ops.$in.map(v => this.serializeOpValue(v, isObject, '$in')));\n }\n };\n\n addCond('graph', pattern.graph, false);\n addCond('subject', pattern.subject, false);\n addCond('predicate', pattern.predicate, false);\n addCond('object', pattern.object, true);\n }\n\n // ============================================\n // Serialization Helpers\n // ============================================\n\n protected quintToRow(quint: Quint): QuintRow {\n return {\n graph: termToId(quint.graph as any),\n subject: termToId(quint.subject as any),\n predicate: termToId(quint.predicate as any),\n object: serializeObject(quint.object as any),\n vector: quint.vector ? JSON.stringify(quint.vector) : null,\n };\n }\n\n protected rowToQuint(row: QuintRow): Quint {\n const quad = rowToQuad(row);\n const quint: Quint = quad as Quint;\n if (row.vector) {\n quint.vector = parseVector(row.vector);\n }\n return quint;\n }\n\n protected deserializeObject(value: string): Term {\n if (value.startsWith('\"')) {\n const match = value.match(/^\"([^\"]*)\"(?:@([a-zA-Z-]+)|\\^\\^<([^>]+)>)?$/);\n if (match) {\n const [, lexical, lang, datatype] = match;\n if (lang) {\n return DataFactory.literal(lexical, lang);\n }\n if (datatype) {\n return DataFactory.literal(lexical, DataFactory.namedNode(datatype));\n }\n return DataFactory.literal(lexical);\n }\n }\n \n if (value.startsWith('N\\u0000')) {\n const parts = value.split('\\u0000');\n const datatype = parts[2];\n const originalValue = parts[3];\n return DataFactory.literal(originalValue, DataFactory.namedNode(datatype));\n }\n \n if (value.startsWith('D\\u0000')) {\n const parts = value.split('\\u0000');\n const originalValue = parts[2];\n return DataFactory.literal(originalValue, DataFactory.namedNode('http://www.w3.org/2001/XMLSchema#dateTime'));\n }\n \n return DataFactory.namedNode(value);\n }\n}\n"]}
1
+ {"version":3,"file":"BaseQuintStore.js","sourceRoot":"","sources":["../../../src/storage/quint/BaseQuintStore.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * BaseQuintStore - 统一的 QuintStore 抽象基类\n * \n * 支持:\n * - SQLite (via pluggable SQLite runtime + drizzle-orm)\n * - PGLite (via @electric-sql/pglite + drizzle-orm)\n * - PostgreSQL (via pg + drizzle-orm) - 未来\n * \n * 设计:\n * - 所有 SQL 逻辑在基类中实现\n * - 子类只负责创建数据库连接和执行原生 SQL\n */\n\nimport { wrap, AsyncIterator } from 'asynciterator';\nimport { DataFactory } from 'n3';\nimport type { Term, Quad } from '@rdfjs/types';\n\nimport { \n rowToQuad, \n parseVector,\n termToId,\n serializeObject,\n fpEncode,\n SEP,\n isSerializedObjectValue,\n} from './serialization';\nimport type {\n Quint,\n QuintPattern,\n QuintStoreOptions,\n QueryOptions,\n StoreStats,\n TermMatch,\n TermOperators,\n CompoundPattern,\n CompoundResult,\n OperatorValue,\n AttributeMap,\n} from './types';\nimport { isTerm, QuintStore } from './types';\n\nexport interface QuintRow {\n graph: string;\n subject: string;\n predicate: string;\n object: string;\n vector: string | null;\n}\n\n/**\n * SQL 执行器接口 - 子类实现\n */\nexport interface SqlExecutor {\n /** 执行查询,返回行数组 */\n query<T = any>(sql: string, params?: any[]): Promise<T[]>;\n /** 执行更新,返回影响行数 */\n execute(sql: string, params?: any[]): Promise<number>;\n /** 执行多条语句(事务内) */\n executeInTransaction(statements: { sql: string; params?: any[] }[]): Promise<void>;\n /** 执行原生 SQL(建表等) */\n exec(sql: string): Promise<void>;\n}\n\nexport abstract class BaseQuintStore extends QuintStore {\n protected options: QuintStoreOptions;\n protected executor: SqlExecutor | null = null;\n protected opened = false;\n protected opening: Promise<void> | null = null;\n\n constructor(options: QuintStoreOptions) {\n super();\n this.options = options;\n }\n\n // ============================================\n // 抽象方法 - 子类实现\n // ============================================\n\n protected abstract createExecutor(): Promise<SqlExecutor>;\n protected abstract closeExecutor(): Promise<void>;\n\n // ============================================\n // Lifecycle\n // ============================================\n\n async open(): Promise<void> {\n if (this.opened) {\n return;\n }\n\n this.opening ??= this.openOnce().finally(() => {\n this.opening = null;\n });\n\n await this.opening;\n }\n\n protected async openOnce(): Promise<void> {\n const executor = await this.createExecutor();\n this.executor = executor;\n\n try {\n // 创建表和索引\n await executor.exec(`\n CREATE TABLE IF NOT EXISTS quints (\n graph TEXT NOT NULL,\n subject TEXT NOT NULL,\n predicate TEXT NOT NULL,\n object TEXT NOT NULL,\n vector TEXT,\n PRIMARY KEY (graph, subject, predicate, object)\n )\n `);\n\n // 创建索引(分开执行,避免某些数据库不支持多语句)\n const indexes = [\n 'CREATE INDEX IF NOT EXISTS idx_spog ON quints (subject, predicate, object, graph)',\n 'CREATE INDEX IF NOT EXISTS idx_ogsp ON quints (object, graph, subject, predicate)',\n 'CREATE INDEX IF NOT EXISTS idx_gspo ON quints (graph, subject, predicate, object)',\n 'CREATE INDEX IF NOT EXISTS idx_sopg ON quints (subject, object, predicate, graph)',\n 'CREATE INDEX IF NOT EXISTS idx_pogs ON quints (predicate, object, graph, subject)',\n 'CREATE INDEX IF NOT EXISTS idx_gpos ON quints (graph, predicate, object, subject)',\n ];\n\n for (const indexSql of indexes) {\n await executor.exec(indexSql);\n }\n this.opened = true;\n } catch (error) {\n await this.closeExecutor().catch(() => {});\n if (this.executor === executor) {\n this.executor = null;\n }\n this.opened = false;\n throw error;\n }\n }\n\n async close(): Promise<void> {\n if (this.opening) {\n await this.opening.catch(() => {});\n }\n if (this.executor) {\n await this.closeExecutor();\n this.executor = null;\n }\n this.opened = false;\n }\n\n protected ensureOpen(): void {\n if (!this.opened || !this.executor) {\n throw new Error('Store not open. Call open() first.');\n }\n }\n\n // ============================================\n // Query Operations\n // ============================================\n\n async get(pattern: QuintPattern, options?: QueryOptions): Promise<Quint[]> {\n const patternDesc = Object.entries(pattern).map(([k, v]) => `${k}=${v ? 'set' : 'any'}`).join(',');\n console.log(`[BaseQuintStore.get] Starting: ${patternDesc}`);\n this.ensureOpen();\n\n const { sql, params } = this.buildSelectQuery(pattern, options);\n console.log(`[BaseQuintStore.get] SQL: ${sql.slice(0, 80)}...`);\n const start = Date.now();\n const rows = await this.executor!.query<QuintRow>(sql, params);\n console.log(`[BaseQuintStore.get] Completed in ${Date.now() - start}ms, got ${rows.length} rows`);\n \n return rows.map(row => this.rowToQuint(row));\n }\n\n match(\n subject?: Term | null,\n predicate?: Term | null,\n object?: Term | null,\n graph?: Term | null\n ): AsyncIterator<Quint> {\n const pattern: QuintPattern = {};\n if (subject && subject.termType !== 'Variable') pattern.subject = subject;\n if (predicate && predicate.termType !== 'Variable') pattern.predicate = predicate;\n if (object && object.termType !== 'Variable') pattern.object = object;\n if (graph && graph.termType !== 'Variable' && graph.termType !== 'DefaultGraph') {\n pattern.graph = graph;\n }\n\n return wrap(this.get(pattern));\n }\n\n async getByGraphPrefix(prefix: string, options?: QueryOptions): Promise<Quint[]> {\n this.ensureOpen();\n\n let sql = `SELECT * FROM quints WHERE graph >= ? AND graph < ?`;\n const params: any[] = [prefix, prefix + '\\uffff'];\n\n if (options?.limit) {\n sql += ` LIMIT ?`;\n params.push(options.limit);\n }\n if (options?.offset) {\n sql += ` OFFSET ?`;\n params.push(options.offset);\n }\n\n const rows = await this.executor!.query<QuintRow>(sql, params);\n return rows.map(row => this.rowToQuint(row));\n }\n\n async count(pattern: QuintPattern): Promise<number> {\n this.ensureOpen();\n\n const { whereClause, params } = this.buildWhereClause(pattern);\n const sql = `SELECT COUNT(*) as count FROM quints${whereClause}`;\n \n const rows = await this.executor!.query<{ count: number }>(sql, params);\n return rows[0]?.count ?? 0;\n }\n\n // ============================================\n // Compound Query (SQL JOIN)\n // ============================================\n\n override async getCompound(compound: CompoundPattern, options?: QueryOptions): Promise<CompoundResult[]> {\n this.ensureOpen();\n\n const { patterns, joinOn, select } = compound;\n \n if (patterns.length === 0) {\n return [];\n }\n\n if (patterns.length === 1) {\n const quads = await this.get(patterns[0], options);\n return quads.map(q => ({\n joinValue: termToId((q as any)[joinOn]),\n bindings: {},\n quads: [q],\n }));\n }\n\n const { sql, params } = this.buildCompoundQuery(compound, options);\n \n if (this.options.debug) {\n console.log('[BaseQuintStore] Compound SQL:', sql);\n console.log('[BaseQuintStore] Params:', params);\n }\n\n const rows = await this.executor!.query<Record<string, string>>(sql, params);\n\n return rows.map(row => {\n const bindings: Record<string, string> = {};\n \n if (select) {\n for (const s of select) {\n bindings[s.alias] = row[s.alias];\n }\n } else {\n for (const key of Object.keys(row)) {\n if (key !== 'join_value') {\n bindings[key] = row[key];\n }\n }\n }\n\n return {\n joinValue: row.join_value,\n bindings,\n };\n });\n }\n\n // ============================================\n // Batch Attributes Query (for OPTIONAL optimization)\n // ============================================\n\n override async getAttributes(\n subjects: string[],\n predicates: string[],\n graph?: Term\n ): Promise<AttributeMap> {\n this.ensureOpen();\n\n if (subjects.length === 0 || predicates.length === 0) {\n return new Map();\n }\n\n // 构建 IN 子句的占位符\n const subjectPlaceholders = subjects.map(() => '?').join(', ');\n const predicatePlaceholders = predicates.map(() => '?').join(', ');\n \n let sql = `SELECT subject, predicate, object FROM quints WHERE subject IN (${subjectPlaceholders}) AND predicate IN (${predicatePlaceholders})`;\n const params: any[] = [...subjects, ...predicates];\n\n if (graph && graph.termType !== 'DefaultGraph') {\n sql += ` AND graph = ?`;\n params.push(termToId(graph as any));\n }\n\n if (this.options.debug) {\n console.log('[BaseQuintStore] getAttributes SQL:', sql);\n console.log('[BaseQuintStore] Params:', params.length, 'subjects:', subjects.length, 'predicates:', predicates.length);\n }\n\n const rows = await this.executor!.query<{ subject: string; predicate: string; object: string }>(sql, params);\n\n // 构建结果 Map\n const result: AttributeMap = new Map();\n\n for (const row of rows) {\n if (!result.has(row.subject)) {\n result.set(row.subject, new Map());\n }\n const predicateMap = result.get(row.subject)!;\n \n if (!predicateMap.has(row.predicate)) {\n predicateMap.set(row.predicate, []);\n }\n \n const objectTerm = this.deserializeObject(row.object);\n predicateMap.get(row.predicate)!.push(objectTerm);\n }\n\n if (this.options.debug) {\n console.log('[BaseQuintStore] getAttributes returned', result.size, 'subjects');\n }\n\n return result;\n }\n\n // ============================================\n // Write Operations\n // ============================================\n\n async put(quint: Quint): Promise<void> {\n this.ensureOpen();\n\n const row = this.quintToRow(quint);\n \n // UPSERT: INSERT OR REPLACE (SQLite) / ON CONFLICT DO UPDATE (PostgreSQL)\n // 使用通用的 INSERT OR REPLACE 语法,PGLite 和 SQLite 都支持\n const sql = `INSERT OR REPLACE INTO quints (graph, subject, predicate, object, vector) VALUES (?, ?, ?, ?, ?)`;\n await this.executor!.execute(sql, [row.graph, row.subject, row.predicate, row.object, row.vector]);\n }\n\n async multiPut(quintList: Quint[]): Promise<void> {\n this.ensureOpen();\n\n if (quintList.length === 0) return;\n\n const statements = quintList.map(quint => {\n const row = this.quintToRow(quint);\n return {\n sql: `INSERT OR REPLACE INTO quints (graph, subject, predicate, object, vector) VALUES (?, ?, ?, ?, ?)`,\n params: [row.graph, row.subject, row.predicate, row.object, row.vector],\n };\n });\n\n await this.executor!.executeInTransaction(statements);\n }\n\n async updateEmbedding(pattern: QuintPattern, embedding: number[]): Promise<number> {\n this.ensureOpen();\n\n const { whereClause, params } = this.buildWhereClause(pattern);\n const vectorJson = JSON.stringify(embedding);\n \n const sql = `UPDATE quints SET vector = ?${whereClause}`;\n return await this.executor!.execute(sql, [vectorJson, ...params]);\n }\n\n // ============================================\n // Delete Operations\n // ============================================\n\n async del(pattern: QuintPattern): Promise<number> {\n this.ensureOpen();\n\n const { whereClause, params } = this.buildWhereClause(pattern);\n const sql = `DELETE FROM quints${whereClause}`;\n \n return await this.executor!.execute(sql, params);\n }\n\n async multiDel(quintList: Quint[]): Promise<void> {\n this.ensureOpen();\n\n if (quintList.length === 0) return;\n\n const statements = quintList.map(quint => {\n const g = termToId(quint.graph as any);\n const s = termToId(quint.subject as any);\n const p = termToId(quint.predicate as any);\n const o = serializeObject(quint.object as any);\n \n return {\n sql: `DELETE FROM quints WHERE graph = ? AND subject = ? AND predicate = ? AND object = ?`,\n params: [g, s, p, o],\n };\n });\n\n await this.executor!.executeInTransaction(statements);\n }\n\n // ============================================\n // Stats\n // ============================================\n\n async stats(): Promise<StoreStats> {\n this.ensureOpen();\n\n const [totalResult, vectorResult, graphResult] = await Promise.all([\n this.executor!.query<{ count: number }>('SELECT COUNT(*) as count FROM quints'),\n this.executor!.query<{ count: number }>('SELECT COUNT(*) as count FROM quints WHERE vector IS NOT NULL'),\n this.executor!.query<{ count: number }>('SELECT COUNT(DISTINCT graph) as count FROM quints'),\n ]);\n\n return {\n totalCount: totalResult[0]?.count ?? 0,\n vectorCount: vectorResult[0]?.count ?? 0,\n graphCount: graphResult[0]?.count ?? 0,\n };\n }\n\n async clear(): Promise<void> {\n this.ensureOpen();\n await this.executor!.execute('DELETE FROM quints');\n }\n\n // ============================================\n // SQL Building Helpers\n // ============================================\n\n protected buildSelectQuery(pattern: QuintPattern, options?: QueryOptions): { sql: string; params: any[] } {\n const { whereClause, params } = this.buildWhereClause(pattern);\n \n let sql = `SELECT * FROM quints${whereClause}`;\n\n if (options?.order && options.order.length > 0) {\n const orderCols = options.order.join(', ');\n sql += ` ORDER BY ${orderCols}`;\n if (options.reverse) {\n sql += ' DESC';\n }\n }\n\n if (options?.limit) {\n sql += ` LIMIT ?`;\n params.push(options.limit);\n }\n\n if (options?.offset) {\n sql += ` OFFSET ?`;\n params.push(options.offset);\n }\n\n return { sql, params };\n }\n\n protected buildWhereClause(pattern: QuintPattern): { whereClause: string; params: any[] } {\n const conditions: string[] = [];\n const params: any[] = [];\n\n this.addConditions(conditions, params, 'graph', pattern.graph, false);\n this.addConditions(conditions, params, 'subject', pattern.subject, false);\n this.addConditions(conditions, params, 'predicate', pattern.predicate, false);\n this.addConditions(conditions, params, 'object', pattern.object, true);\n\n const whereClause = conditions.length > 0 ? ` WHERE ${conditions.join(' AND ')}` : '';\n return { whereClause, params };\n }\n\n protected addConditions(\n conditions: string[],\n params: any[],\n column: string,\n match: TermMatch | undefined,\n isObject: boolean\n ): void {\n if (!match) return;\n\n if (isTerm(match)) {\n conditions.push(`${column} = ?`);\n params.push(isObject ? serializeObject(match as any) : termToId(match as any));\n return;\n }\n\n const ops = match as TermOperators;\n\n if (ops.$eq !== undefined) {\n conditions.push(`${column} = ?`);\n params.push(this.serializeOpValue(ops.$eq, isObject, '$eq'));\n }\n if (ops.$ne !== undefined) {\n conditions.push(`${column} != ?`);\n params.push(this.serializeOpValue(ops.$ne, isObject, '$ne'));\n }\n if (ops.$gt !== undefined) {\n conditions.push(`${column} > ?`);\n params.push(this.serializeOpValue(ops.$gt, isObject, '$gt'));\n }\n if (ops.$gte !== undefined) {\n conditions.push(`${column} >= ?`);\n params.push(this.serializeOpValue(ops.$gte, isObject, '$gte'));\n }\n if (ops.$lt !== undefined) {\n conditions.push(`${column} < ?`);\n params.push(this.serializeOpValue(ops.$lt, isObject, '$lt'));\n }\n if (ops.$lte !== undefined) {\n conditions.push(`${column} <= ?`);\n params.push(this.serializeOpValue(ops.$lte, isObject, '$lte'));\n }\n if (ops.$in !== undefined && ops.$in.length > 0) {\n const placeholders = ops.$in.map(() => '?').join(', ');\n conditions.push(`${column} IN (${placeholders})`);\n params.push(...ops.$in.map(v => this.serializeOpValue(v, isObject, '$in')));\n }\n if (ops.$notIn !== undefined && ops.$notIn.length > 0) {\n const placeholders = ops.$notIn.map(() => '?').join(', ');\n conditions.push(`${column} NOT IN (${placeholders})`);\n params.push(...ops.$notIn.map(v => this.serializeOpValue(v, isObject, '$notIn')));\n }\n if (ops.$startsWith !== undefined) {\n conditions.push(`${column} >= ? AND ${column} < ?`);\n params.push(ops.$startsWith, ops.$startsWith + '\\uffff');\n }\n if (ops.$endsWith !== undefined) {\n conditions.push(`${column} LIKE ?`);\n params.push(`%${ops.$endsWith}`);\n }\n if (ops.$contains !== undefined) {\n conditions.push(`${column} LIKE ?`);\n params.push(`%${ops.$contains}%`);\n }\n if (ops.$regex !== undefined) {\n // 使用 GLOB (SQLite) 或 ~ (PostgreSQL)\n // 这里用 LIKE 作为简单实现\n const pattern = ops.$regex.replace(/\\.\\*/g, '%').replace(/\\./g, '_');\n conditions.push(`${column} LIKE ?`);\n params.push(pattern);\n }\n if (ops.$isNull === true) {\n conditions.push(`${column} IS NULL`);\n }\n if (ops.$isNull === false) {\n conditions.push(`${column} IS NOT NULL`);\n }\n }\n\n protected serializeOpValue(value: OperatorValue, isObject: boolean, filterOp: string): any {\n if (typeof value === 'object' && 'termType' in value) {\n return isObject ? serializeObject(value as any) : termToId(value as any);\n }\n \n if (typeof value === 'number') {\n if (isObject) {\n if (filterOp === '$eq' || filterOp === '$ne' || filterOp === '$in' || filterOp === '$notIn') {\n const lit = DataFactory.literal(String(value), DataFactory.namedNode('http://www.w3.org/2001/XMLSchema#integer'));\n return serializeObject(lit);\n }\n const fpValue = `N${SEP}${fpEncode(value)}`;\n if (filterOp === '$gt' || filterOp === '$lte') {\n return fpValue + SEP + '\\uffff';\n }\n return fpValue;\n }\n return value;\n }\n \n if (isObject && !isSerializedObjectValue(value)) {\n return `\"${value}\"`;\n }\n return value;\n }\n\n protected buildCompoundQuery(compound: CompoundPattern, options?: QueryOptions): { sql: string; params: any[] } {\n const { patterns, joinOn, select } = compound;\n const params: any[] = [];\n \n // SELECT 子句\n let selectClause = `q0.${joinOn} as join_value`;\n \n if (select) {\n for (const s of select) {\n selectClause += `, q${s.pattern}.${s.field} as ${s.alias}`;\n }\n } else {\n for (let i = 0; i < patterns.length; i++) {\n selectClause += `, q${i}.object as p${i}_object`;\n selectClause += `, q${i}.predicate as p${i}_predicate`;\n }\n }\n\n // FROM 子句(JOIN)\n let fromClause = 'quints q0';\n for (let i = 1; i < patterns.length; i++) {\n fromClause += ` JOIN quints q${i} ON q0.${joinOn} = q${i}.${joinOn}`;\n fromClause += ` AND q0.graph = q${i}.graph`;\n }\n\n // WHERE 子句\n const whereParts: string[] = [];\n \n for (let i = 0; i < patterns.length; i++) {\n const pattern = patterns[i];\n const alias = `q${i}`;\n \n this.addAliasedConditions(whereParts, params, alias, pattern);\n }\n\n let sql = `SELECT ${selectClause} FROM ${fromClause}`;\n \n if (whereParts.length > 0) {\n sql += ` WHERE ${whereParts.join(' AND ')}`;\n }\n\n if (options?.limit) {\n sql += ` LIMIT ?`;\n params.push(options.limit);\n }\n if (options?.offset) {\n sql += ` OFFSET ?`;\n params.push(options.offset);\n }\n\n return { sql, params };\n }\n\n protected addAliasedConditions(\n conditions: string[],\n params: any[],\n alias: string,\n pattern: QuintPattern\n ): void {\n const addCond = (col: string, match: TermMatch | undefined, isObject: boolean) => {\n if (!match) return;\n\n if (isTerm(match)) {\n conditions.push(`${alias}.${col} = ?`);\n params.push(isObject ? serializeObject(match as any) : termToId(match as any));\n return;\n }\n\n const ops = match as TermOperators;\n \n if (ops.$eq !== undefined) {\n conditions.push(`${alias}.${col} = ?`);\n params.push(this.serializeOpValue(ops.$eq, isObject, '$eq'));\n }\n if (ops.$gt !== undefined) {\n conditions.push(`${alias}.${col} > ?`);\n params.push(this.serializeOpValue(ops.$gt, isObject, '$gt'));\n }\n if (ops.$gte !== undefined) {\n conditions.push(`${alias}.${col} >= ?`);\n params.push(this.serializeOpValue(ops.$gte, isObject, '$gte'));\n }\n if (ops.$lt !== undefined) {\n conditions.push(`${alias}.${col} < ?`);\n params.push(this.serializeOpValue(ops.$lt, isObject, '$lt'));\n }\n if (ops.$lte !== undefined) {\n conditions.push(`${alias}.${col} <= ?`);\n params.push(this.serializeOpValue(ops.$lte, isObject, '$lte'));\n }\n if (ops.$in !== undefined && ops.$in.length > 0) {\n const placeholders = ops.$in.map(() => '?').join(', ');\n conditions.push(`${alias}.${col} IN (${placeholders})`);\n params.push(...ops.$in.map(v => this.serializeOpValue(v, isObject, '$in')));\n }\n };\n\n addCond('graph', pattern.graph, false);\n addCond('subject', pattern.subject, false);\n addCond('predicate', pattern.predicate, false);\n addCond('object', pattern.object, true);\n }\n\n // ============================================\n // Serialization Helpers\n // ============================================\n\n protected quintToRow(quint: Quint): QuintRow {\n return {\n graph: termToId(quint.graph as any),\n subject: termToId(quint.subject as any),\n predicate: termToId(quint.predicate as any),\n object: serializeObject(quint.object as any),\n vector: quint.vector ? JSON.stringify(quint.vector) : null,\n };\n }\n\n protected rowToQuint(row: QuintRow): Quint {\n const quad = rowToQuad(row);\n const quint: Quint = quad as Quint;\n if (row.vector) {\n quint.vector = parseVector(row.vector);\n }\n return quint;\n }\n\n protected deserializeObject(value: string): Term {\n if (value.startsWith('\"')) {\n const match = value.match(/^\"([^\"]*)\"(?:@([a-zA-Z-]+)|\\^\\^<([^>]+)>)?$/);\n if (match) {\n const [, lexical, lang, datatype] = match;\n if (lang) {\n return DataFactory.literal(lexical, lang);\n }\n if (datatype) {\n return DataFactory.literal(lexical, DataFactory.namedNode(datatype));\n }\n return DataFactory.literal(lexical);\n }\n }\n \n if (value.startsWith('N\\u0000')) {\n const parts = value.split('\\u0000');\n const datatype = parts[2];\n const originalValue = parts[3];\n return DataFactory.literal(originalValue, DataFactory.namedNode(datatype));\n }\n \n if (value.startsWith('D\\u0000')) {\n const parts = value.split('\\u0000');\n const originalValue = parts[2];\n return DataFactory.literal(originalValue, DataFactory.namedNode('http://www.w3.org/2001/XMLSchema#dateTime'));\n }\n \n return DataFactory.namedNode(value);\n }\n}\n"]}
@@ -52,6 +52,7 @@ export declare class PgQuintStore extends BaseQuintStore {
52
52
  * 重写 open 方法,处理 PostgreSQL 特定的语法
53
53
  */
54
54
  open(): Promise<void>;
55
+ protected openOnce(): Promise<void>;
55
56
  /**
56
57
  * 重写 put 方法,避免长文本对象进入 PostgreSQL btree 唯一键
57
58
  */