pure-js-db 0.0.0-stage → 2.53.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (541) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +747 -3
  3. package/bindings/java/pom.xml +18 -0
  4. package/bindings/java/src/main/java/purejsdb/PureJsDBClient.java +146 -0
  5. package/bindings/java/src/main/java/purejsdb/TransactionClient.java +65 -0
  6. package/bindings/java/src/test/java/TestClient.java +68 -0
  7. package/bindings/orm/sequelize-adapter.js +1236 -0
  8. package/bindings/python/purejsdb/client.py +81 -0
  9. package/bindings/python/setup.py +9 -0
  10. package/bindings/python/test_client.py +63 -0
  11. package/config/datagrip-config.md +206 -0
  12. package/config/grafana-dashboard.json +1510 -0
  13. package/config/production.config.js +126 -0
  14. package/config/prometheus-scrape.yml +39 -0
  15. package/native/index.node +0 -0
  16. package/package.json +205 -6
  17. package/scripts/mcp-server.mjs +208 -0
  18. package/src/adapter/dialect-adapter.js +179 -0
  19. package/src/adapter/oracle-adapter.js +191 -0
  20. package/src/ai/ai-service.js +713 -0
  21. package/src/ai/rag-pipeline.js +160 -0
  22. package/src/alerting/alert-manager.js +622 -0
  23. package/src/alerting/index.js +10 -0
  24. package/src/arrow/arrow-ipc.js +973 -0
  25. package/src/arrow/flatbuffer.js +521 -0
  26. package/src/arrow/index.js +261 -0
  27. package/src/arrow/parquet.js +1525 -0
  28. package/src/audit/audit-log.js +1345 -0
  29. package/src/audit/audit-report.js +571 -0
  30. package/src/audit/index.js +6 -0
  31. package/src/backpressure/backpressure-controller.js +262 -0
  32. package/src/backpressure/index.js +6 -0
  33. package/src/backpressure/write-rate-limiter.js +243 -0
  34. package/src/backup/backup-manager.js +416 -0
  35. package/src/backup/index.js +8 -0
  36. package/src/backup/logical-backup.js +228 -0
  37. package/src/backup/snapshot.js +111 -0
  38. package/src/backup/toolkit.js +410 -0
  39. package/src/bindings/orm/prisma-adapter.js +571 -0
  40. package/src/bindings/orm/typeorm-adapter.js +477 -0
  41. package/src/cache/adaptive-cache-size.js +288 -0
  42. package/src/cache/adaptive-ttl.js +139 -0
  43. package/src/cache/cache-adapter.js +304 -0
  44. package/src/cache/circuit-breaker.js +294 -0
  45. package/src/cache/index.js +31 -0
  46. package/src/cache/lru-cache.js +353 -0
  47. package/src/cache/redis-adapter.js +391 -0
  48. package/src/cache/resilient-adapter.js +391 -0
  49. package/src/cache/result-cache.js +493 -0
  50. package/src/cache/semantic-cache.js +339 -0
  51. package/src/cdc/cdc-engine.js +1061 -0
  52. package/src/cdc/cdc-handlers.js +289 -0
  53. package/src/cdc/ddl-capture.js +330 -0
  54. package/src/cdc/debezium-adapter.js +366 -0
  55. package/src/cdc/schema-history.js +414 -0
  56. package/src/changelog/changelog-buffer.js +881 -0
  57. package/src/changelog/changelog-wal.js +299 -0
  58. package/src/changelog/linear-regression-predictor.js +186 -0
  59. package/src/changelog/predictive-growth.js +348 -0
  60. package/src/changelog/seasonal-predictor.js +450 -0
  61. package/src/changelog/write-rate-sampler.js +141 -0
  62. package/src/cli/dump-command.js +944 -0
  63. package/src/cli/interactive.js +188 -0
  64. package/src/cli/migrate-command.js +252 -0
  65. package/src/cli.js +533 -0
  66. package/src/cluster/failover.js +477 -0
  67. package/src/cluster/index.js +19 -0
  68. package/src/cluster/persistent-state.js +203 -0
  69. package/src/cluster/public-api.js +58 -0
  70. package/src/cluster/raft-http-transport.js +280 -0
  71. package/src/cluster/raft-log.js +313 -0
  72. package/src/cluster/raft.js +912 -0
  73. package/src/cluster/snapshot-persistence.js +131 -0
  74. package/src/concurrency/async-mutex.js +365 -0
  75. package/src/concurrency/circuit-breaker.js +326 -0
  76. package/src/concurrency/connection-pool.js +409 -0
  77. package/src/concurrency/connection-session.js +498 -0
  78. package/src/concurrency/index.js +29 -0
  79. package/src/concurrency/lock-manager.js +363 -0
  80. package/src/concurrency/lockfree-executor.js +322 -0
  81. package/src/concurrency/lockfree-manager.js +570 -0
  82. package/src/concurrency/mvcc.js +499 -0
  83. package/src/concurrency/occ-hot-row.js +726 -0
  84. package/src/concurrency/query-degradation.js +380 -0
  85. package/src/concurrency/query-isolation.js +374 -0
  86. package/src/concurrency/shared-memory-pool.js +459 -0
  87. package/src/concurrency/snapshot-buffer.js +461 -0
  88. package/src/concurrency/transaction-context.js +193 -0
  89. package/src/copy/copy-stream.js +643 -0
  90. package/src/copy/index.js +5 -0
  91. package/src/core/database.js +1947 -0
  92. package/src/core/index.js +13 -0
  93. package/src/daemon/compact-daemon.js +535 -0
  94. package/src/daemon/index.js +14 -0
  95. package/src/daemon/soa-daemon-integration.js +333 -0
  96. package/src/ddl/online-ddl.js +348 -0
  97. package/src/disruptor/disruptor.js +348 -0
  98. package/src/disruptor/event-bus.js +238 -0
  99. package/src/disruptor/event-pool.js +62 -0
  100. package/src/disruptor/index.js +31 -0
  101. package/src/disruptor/ring-buffer.js +150 -0
  102. package/src/disruptor/sequence.js +88 -0
  103. package/src/disruptor/wait-strategy.js +160 -0
  104. package/src/engine/public-api.js +210 -0
  105. package/src/executor/asof-join-executor.js +265 -0
  106. package/src/executor/bitmap-filter.js +1382 -0
  107. package/src/executor/compiled-expression.js +472 -0
  108. package/src/executor/compiled-predicate.js +458 -0
  109. package/src/executor/constraint-executor.js +577 -0
  110. package/src/executor/copy-executor.js +210 -0
  111. package/src/executor/cte/recursive-cte.js +89 -0
  112. package/src/executor/cte-executor.js +501 -0
  113. package/src/executor/cursor-executor.js +216 -0
  114. package/src/executor/database.js +41 -0
  115. package/src/executor/ddl-executor.js +3531 -0
  116. package/src/executor/dml-executor.js +3557 -0
  117. package/src/executor/executor-worker.js +331 -0
  118. package/src/executor/executor.js +10889 -0
  119. package/src/executor/explain-analyzer.js +422 -0
  120. package/src/executor/explain-executor.js +324 -0
  121. package/src/executor/expression.js +4972 -0
  122. package/src/executor/foreign-key-executor.js +691 -0
  123. package/src/executor/graph-table-executor.js +451 -0
  124. package/src/executor/grouping-executor.js +251 -0
  125. package/src/executor/hotpath.js +232 -0
  126. package/src/executor/hybrid-search-executor.js +326 -0
  127. package/src/executor/incremental-live-query.js +866 -0
  128. package/src/executor/index-maintenance-executor.js +731 -0
  129. package/src/executor/index.js +16 -0
  130. package/src/executor/info-schema-executor.js +123 -0
  131. package/src/executor/join/lateral-join.js +64 -0
  132. package/src/executor/join-executor.js +530 -0
  133. package/src/executor/lineage-executor.js +85 -0
  134. package/src/executor/live-query-manager.js +350 -0
  135. package/src/executor/loop-unroll.js +539 -0
  136. package/src/executor/match-recognize-executor.js +918 -0
  137. package/src/executor/multi-stream-wal.js +140 -0
  138. package/src/executor/nl2sql-executor.js +309 -0
  139. package/src/executor/parallel-dml.js +258 -0
  140. package/src/executor/pivot-executor.js +458 -0
  141. package/src/executor/pragma-executor.js +661 -0
  142. package/src/executor/select-executor.js +857 -0
  143. package/src/executor/sequence.js +139 -0
  144. package/src/executor/sql-reconstructor.js +296 -0
  145. package/src/executor/subquery-cache.js +186 -0
  146. package/src/executor/subquery-executor.js +1390 -0
  147. package/src/executor/system-catalog.js +731 -0
  148. package/src/executor/table-function-executor.js +656 -0
  149. package/src/executor/topn.js +103 -0
  150. package/src/executor/transaction-executor.js +926 -0
  151. package/src/executor/trigger-executor.js +441 -0
  152. package/src/executor/v8-turbofan-optimizer.js +363 -0
  153. package/src/executor/vector-acceleration.js +456 -0
  154. package/src/executor/vector-executor.js +847 -0
  155. package/src/executor/vectorized-columnar-engine.js +1130 -0
  156. package/src/executor/vectorized-executor-v2.js +993 -0
  157. package/src/executor/view-executor.js +149 -0
  158. package/src/executor/wal.js +1945 -0
  159. package/src/executor/wasm-simd-engine.js +929 -0
  160. package/src/executor/window-functions.js +894 -0
  161. package/src/fdw/fdw-manager.js +642 -0
  162. package/src/fdw/index.js +5 -0
  163. package/src/geo/geometry.js +447 -0
  164. package/src/geo/index.js +16 -0
  165. package/src/geo/spatial-functions.js +1241 -0
  166. package/src/graph/graph-helper.js +243 -0
  167. package/src/graph/pgq-matcher.js +2545 -0
  168. package/src/graph/property-graph.js +123 -0
  169. package/src/graphql-bridge.js +881 -0
  170. package/src/hotspot/access-tracker.js +188 -0
  171. package/src/hotspot/hotspot-detector.js +140 -0
  172. package/src/hotspot/hotspot-prefetcher.js +210 -0
  173. package/src/hotspot/index.js +7 -0
  174. package/src/http-api.js +1182 -0
  175. package/src/http-server/handlers/audit.js +224 -0
  176. package/src/http-server/handlers/changes-feed.js +261 -0
  177. package/src/http-server/handlers/management.js +464 -0
  178. package/src/http-server/handlers/query.js +573 -0
  179. package/src/http-server/handlers/transaction.js +251 -0
  180. package/src/http-server/index.js +89 -0
  181. package/src/http-server/openapi.js +656 -0
  182. package/src/http-server/router.js +120 -0
  183. package/src/http-server/server.js +1915 -0
  184. package/src/http-server/tls.js +126 -0
  185. package/src/http-server/ws-server.js +873 -0
  186. package/src/index/adaptive-hash-index.js +176 -0
  187. package/src/index/bitmap-index.js +429 -0
  188. package/src/index/brin-index.js +246 -0
  189. package/src/index/btree-index.js +428 -0
  190. package/src/index/btree.js +690 -0
  191. package/src/index/diskann-index.js +1903 -0
  192. package/src/index/fulltext/fulltext-index.js +66 -0
  193. package/src/index/fulltext/index.js +3 -0
  194. package/src/index/fulltext/inverted-index.js +197 -0
  195. package/src/index/fulltext/tokenizer.js +154 -0
  196. package/src/index/fulltext.js +287 -0
  197. package/src/index/gin-index.js +316 -0
  198. package/src/index/gist-index.js +463 -0
  199. package/src/index/gist-ops.js +325 -0
  200. package/src/index/graph-compressor.js +505 -0
  201. package/src/index/hash-index.js +180 -0
  202. package/src/index/hnsw-index.js +1232 -0
  203. package/src/index/hnsw-pq-index.js +1147 -0
  204. package/src/index/index-auto-tuner.js +1341 -0
  205. package/src/index/index-interface.js +364 -0
  206. package/src/index/index-selector.js +523 -0
  207. package/src/index/index.js +28 -0
  208. package/src/index/ivfpqsq-index.js +1163 -0
  209. package/src/index/offheap-btree-index.js +395 -0
  210. package/src/index/offheap-btree.js +748 -0
  211. package/src/index/product-quantizer.js +1447 -0
  212. package/src/index/robin-hood-hash-index.js +384 -0
  213. package/src/index/rtree-index.js +982 -0
  214. package/src/index/scalar-quantizer.js +411 -0
  215. package/src/index/semantic-index.js +283 -0
  216. package/src/index/string-interner.js +238 -0
  217. package/src/index/timestamp-index-advisor.js +491 -0
  218. package/src/index/timestamp-index-compressed.js +800 -0
  219. package/src/index/timestamp-index-compressor.js +547 -0
  220. package/src/index/timestamp-index.js +579 -0
  221. package/src/index/vector-index-serializer.js +499 -0
  222. package/src/index/vector-index-stats.js +450 -0
  223. package/src/index/vector-index.js +615 -0
  224. package/src/index-v3.js +27 -0
  225. package/src/index.js +33 -0
  226. package/src/internal/public-api.js +198 -0
  227. package/src/lineage/column-lineage.js +393 -0
  228. package/src/lineage/index.js +11 -0
  229. package/src/lineage/lineage-store.js +701 -0
  230. package/src/lineage/table-lineage.js +68 -0
  231. package/src/mcp/index.js +176 -0
  232. package/src/mcp/mcp-server.js +334 -0
  233. package/src/mcp/protocol.js +195 -0
  234. package/src/mcp/tools/backup-restore.js +131 -0
  235. package/src/mcp/tools/cdc-tools.js +201 -0
  236. package/src/mcp/tools/describe-table.js +100 -0
  237. package/src/mcp/tools/execute-sql.js +210 -0
  238. package/src/mcp/tools/explain-query.js +75 -0
  239. package/src/mcp/tools/index-management.js +191 -0
  240. package/src/mcp/tools/lineage.js +64 -0
  241. package/src/mcp/tools/list-tables.js +46 -0
  242. package/src/mcp/tools/monitoring.js +195 -0
  243. package/src/mcp/tools/schema-management.js +229 -0
  244. package/src/mcp/tools/text-to-sql.js +84 -0
  245. package/src/mcp/tools/transaction-management.js +191 -0
  246. package/src/mcp/tools/vector-search.js +101 -0
  247. package/src/mcp/transport/http.js +352 -0
  248. package/src/mcp/transport/stdio.js +117 -0
  249. package/src/memory/memory-manager.js +437 -0
  250. package/src/migration/migrator.js +389 -0
  251. package/src/monitor/index.js +36 -0
  252. package/src/monitor/metrics-exporter.js +517 -0
  253. package/src/monitor/monitor.js +385 -0
  254. package/src/monitor/performance-monitor.js +204 -0
  255. package/src/monitor/soa-monitor.js +628 -0
  256. package/src/multitenant/index.js +1 -0
  257. package/src/multitenant/tenant-manager.js +238 -0
  258. package/src/native/native-acceleration.js +3493 -0
  259. package/src/optimizer/adaptive-optimizer.js +666 -0
  260. package/src/optimizer/cse.js +383 -0
  261. package/src/optimizer/decorrelator.js +958 -0
  262. package/src/optimizer/derived-table-eliminator.js +367 -0
  263. package/src/optimizer/explain-visualizer.js +266 -0
  264. package/src/optimizer/histogram.js +290 -0
  265. package/src/optimizer/index.js +78 -0
  266. package/src/optimizer/jit-compiler.js +1200 -0
  267. package/src/optimizer/join-order-optimizer.js +717 -0
  268. package/src/optimizer/limit-pushdown.js +70 -0
  269. package/src/optimizer/optimized-plan.js +54 -0
  270. package/src/optimizer/optimizer-rule.js +295 -0
  271. package/src/optimizer/optimizer.js +1515 -0
  272. package/src/optimizer/pipeline.js +263 -0
  273. package/src/optimizer/predicate-pushdown.js +599 -0
  274. package/src/optimizer/query-plan-cache.js +275 -0
  275. package/src/optimizer/rule-adapters.js +343 -0
  276. package/src/optimizer/subquery-flattener.js +689 -0
  277. package/src/optimizer/timestamp-query-rewriter.js +498 -0
  278. package/src/orm/collection.js +160 -0
  279. package/src/orm/errors.js +76 -0
  280. package/src/orm/hooks.js +184 -0
  281. package/src/orm/index.js +93 -0
  282. package/src/orm/mixins/soft-delete.js +271 -0
  283. package/src/orm/model.js +951 -0
  284. package/src/orm/query-builder.js +681 -0
  285. package/src/orm/relations.js +303 -0
  286. package/src/orm/schema.js +443 -0
  287. package/src/orm/seeder.js +350 -0
  288. package/src/parallel/dml-pushdown-executor.js +430 -0
  289. package/src/parallel/dml-worker.js +151 -0
  290. package/src/parallel/morsel-queue.js +358 -0
  291. package/src/parallel/parallel-executor.js +277 -0
  292. package/src/parallel/pipeline-executor.js +423 -0
  293. package/src/parallel/shared-cache.js +206 -0
  294. package/src/parser/ast.js +3853 -0
  295. package/src/parser/parser.js +7909 -0
  296. package/src/parser/tokenizer.js +542 -0
  297. package/src/query/relation-preloader.js +327 -0
  298. package/src/replication/index.js +15 -0
  299. package/src/replication/lag-monitor.js +163 -0
  300. package/src/replication/master.js +117 -0
  301. package/src/replication/multi-master.js +495 -0
  302. package/src/replication/read-replica.js +490 -0
  303. package/src/replication/replica.js +395 -0
  304. package/src/replication/replication-http-transport.js +421 -0
  305. package/src/replication/wal-standby.js +334 -0
  306. package/src/runtime/index.js +4 -0
  307. package/src/runtime/plpgsql-interpreter.js +766 -0
  308. package/src/runtime/plpgsql-parser.js +852 -0
  309. package/src/runtime/stored-procedure.js +149 -0
  310. package/src/runtime/udf.js +194 -0
  311. package/src/schema/dsl-parser.js +896 -0
  312. package/src/schema/index.js +113 -0
  313. package/src/schema/introspector.js +246 -0
  314. package/src/schema/pg-migrator.js +599 -0
  315. package/src/schema/schema-differ.js +504 -0
  316. package/src/schema/schema-versioning.js +426 -0
  317. package/src/schema/type-generator.js +537 -0
  318. package/src/sdk/README.md +277 -0
  319. package/src/sdk/go/README.md +19 -0
  320. package/src/sdk/go/go.mod +3 -0
  321. package/src/sdk/go/pureclient/client.go +663 -0
  322. package/src/sdk/go/pureclient/client_test.go +413 -0
  323. package/src/sdk/java/README.md +19 -0
  324. package/src/sdk/java/pom.xml +87 -0
  325. package/src/sdk/java/pureclient/JsonUtil.java +366 -0
  326. package/src/sdk/java/pureclient/PureClient.java +835 -0
  327. package/src/sdk/java/pureclient/PureClientTest.java +570 -0
  328. package/src/sdk/java/pureclient/PureError.java +158 -0
  329. package/src/sdk/java/pureclient/Transaction.java +242 -0
  330. package/src/sdk/javascript/README.md +19 -0
  331. package/src/sdk/javascript/cdc.js +230 -0
  332. package/src/sdk/javascript/client.js +420 -0
  333. package/src/sdk/javascript/errors.js +66 -0
  334. package/src/sdk/javascript/index.js +35 -0
  335. package/src/sdk/javascript/pool.js +199 -0
  336. package/src/sdk/javascript/transaction.js +114 -0
  337. package/src/sdk/php/README.md +19 -0
  338. package/src/sdk/php/composer.json +30 -0
  339. package/src/sdk/php/src/PureClient.php +550 -0
  340. package/src/sdk/php/src/PureError.php +130 -0
  341. package/src/sdk/php/src/Transaction.php +172 -0
  342. package/src/sdk/public-api.js +16 -0
  343. package/src/sdk/python/README.md +19 -0
  344. package/src/sdk/python/pure_client.py +388 -0
  345. package/src/sdk/react-native/README.md +161 -0
  346. package/src/sdk/react-native/async-storage-adapter.js +147 -0
  347. package/src/sdk/react-native/embedded/embedded-client.js +266 -0
  348. package/src/sdk/react-native/embedded/hermes-jsi-bridge.js +207 -0
  349. package/src/sdk/react-native/embedded/sqlite-kv-adapter.js +345 -0
  350. package/src/sdk/react-native/expo-file-adapter.js +315 -0
  351. package/src/sdk/react-native/index.js +52 -0
  352. package/src/sdk/react-native/mobile-client.js +759 -0
  353. package/src/sdk/react-native/sync-manager.js +455 -0
  354. package/src/sdk/react-native/vector-search.js +322 -0
  355. package/src/sdk/rust/CHANGELOG.md +104 -0
  356. package/src/sdk/rust/Cargo.toml +35 -0
  357. package/src/sdk/rust/LICENSE +21 -0
  358. package/src/sdk/rust/PUBLISHING.md +202 -0
  359. package/src/sdk/rust/README.md +471 -0
  360. package/src/sdk/rust/RELEASE-CHECKLIST.md +340 -0
  361. package/src/sdk/rust/examples/basic_usage.rs +181 -0
  362. package/src/sdk/rust/scripts/publish.sh +233 -0
  363. package/src/sdk/rust/src/client.rs +481 -0
  364. package/src/sdk/rust/src/error.rs +95 -0
  365. package/src/sdk/rust/src/index/hnswpq.rs +626 -0
  366. package/src/sdk/rust/src/index/mod.rs +7 -0
  367. package/src/sdk/rust/src/lib.rs +66 -0
  368. package/src/sdk/rust/src/models.rs +198 -0
  369. package/src/sdk/rust/src/transaction.rs +123 -0
  370. package/src/sdk/rust/tests/concurrent_vector_search.rs +534 -0
  371. package/src/sdk/wechat/README.md +19 -0
  372. package/src/sdk/wechat/index.js +42 -0
  373. package/src/sdk/wechat/pure-js-db.js +105 -0
  374. package/src/sdk/wechat/stubs/empty.js +85 -0
  375. package/src/sdk/wechat/wx-database.js +225 -0
  376. package/src/sdk/wechat/wx-lite.js +191 -0
  377. package/src/sdk/wechat/wx-sqlite-adapter.js +655 -0
  378. package/src/sdk/wechat/wx-sqlite-database.js +146 -0
  379. package/src/sdk/wechat/wx-storage-adapter.js +609 -0
  380. package/src/security/api-key.js +215 -0
  381. package/src/security/auth.js +179 -0
  382. package/src/security/column-encryption-optimized.js +352 -0
  383. package/src/security/column-encryption.js +330 -0
  384. package/src/security/crypto-provider.js +345 -0
  385. package/src/security/data-masking.js +370 -0
  386. package/src/security/field-encryption.js +238 -0
  387. package/src/security/index.js +41 -0
  388. package/src/security/jwt.js +202 -0
  389. package/src/security/rbac.js +702 -0
  390. package/src/security/regex-guard.js +277 -0
  391. package/src/security/row-level-security.js +192 -0
  392. package/src/security/secure-erase.js +258 -0
  393. package/src/security/sql-firewall.js +185 -0
  394. package/src/security/sql-injection-detector.js +647 -0
  395. package/src/security/sql-rate-limiter.js +168 -0
  396. package/src/security/ssrf-guard.js +790 -0
  397. package/src/security/timing-safe.js +203 -0
  398. package/src/serializer/codecs.js +1155 -0
  399. package/src/serializer/index.js +13 -0
  400. package/src/serializer/serializer.js +468 -0
  401. package/src/server/public-api.js +14 -0
  402. package/src/server.js +31 -0
  403. package/src/service/log-service.js +593 -0
  404. package/src/sharding/cluster-manager.js +161 -0
  405. package/src/sharding/consistent-hash-ring-optimized.js +421 -0
  406. package/src/sharding/consistent-hash-ring.js +252 -0
  407. package/src/sharding/consistent-hash.js +175 -0
  408. package/src/sharding/distributed-executor.js +120 -0
  409. package/src/sharding/distributed-lock.js +256 -0
  410. package/src/sharding/distributed-transaction.js +262 -0
  411. package/src/sharding/failure-recovery.js +267 -0
  412. package/src/sharding/global-tx-coordinator.js +1299 -0
  413. package/src/sharding/index.js +16 -0
  414. package/src/sharding/parallel-write-coordinator.js +370 -0
  415. package/src/sharding/partition-manager.js +382 -0
  416. package/src/sharding/pushdown-executor.js +1101 -0
  417. package/src/sharding/scatter-gather-executor.js +460 -0
  418. package/src/sharding/shard-executor.js +624 -0
  419. package/src/sharding/shard-manager.js +717 -0
  420. package/src/sharding/three-phase-commit.js +699 -0
  421. package/src/sharding/two-phase-commit.js +1243 -0
  422. package/src/snapshot/historical-reader.js +257 -0
  423. package/src/snapshot/index.js +7 -0
  424. package/src/storage/batch-writer.js +110 -0
  425. package/src/storage/binary-storage-adapter.js +738 -0
  426. package/src/storage/blob-kv-adapter.js +253 -0
  427. package/src/storage/buffer-pool.js +458 -0
  428. package/src/storage/buffered-kv-adapter.js +325 -0
  429. package/src/storage/cold-data-migrator.js +519 -0
  430. package/src/storage/column-compression.js +878 -0
  431. package/src/storage/column-store-table.js +627 -0
  432. package/src/storage/column-store.js +1094 -0
  433. package/src/storage/columnar-file.js +489 -0
  434. package/src/storage/columnar-storage.js +485 -0
  435. package/src/storage/compact-recovery.js +394 -0
  436. package/src/storage/encrypted-kv-adapter.js +271 -0
  437. package/src/storage/file-kv-adapter.js +468 -0
  438. package/src/storage/hybrid-engine.js +1480 -0
  439. package/src/storage/importer.js +125 -0
  440. package/src/storage/in-memory-table-storage.js +291 -0
  441. package/src/storage/index.js +78 -0
  442. package/src/storage/io-thread-pool.js +240 -0
  443. package/src/storage/io-worker.js +42 -0
  444. package/src/storage/kv-adapter.js +322 -0
  445. package/src/storage/lsm/active-table.js +240 -0
  446. package/src/storage/lsm/block-cache.js +64 -0
  447. package/src/storage/lsm/bloom-filter.js +174 -0
  448. package/src/storage/lsm/compactor.js +460 -0
  449. package/src/storage/lsm/database-manager.js +177 -0
  450. package/src/storage/lsm/full-text-search.js +385 -0
  451. package/src/storage/lsm/index.js +14 -0
  452. package/src/storage/lsm/internal-key.js +140 -0
  453. package/src/storage/lsm/lsm-engine.js +798 -0
  454. package/src/storage/lsm/lsm-kv-adapter.js +137 -0
  455. package/src/storage/lsm/memtable.js +628 -0
  456. package/src/storage/lsm/mmap-region.js +289 -0
  457. package/src/storage/lsm/sstable-reader.js +403 -0
  458. package/src/storage/lsm/sstable-repair.js +437 -0
  459. package/src/storage/lsm/sstable-writer.js +202 -0
  460. package/src/storage/lsm/wal.js +800 -0
  461. package/src/storage/offheap-allocator.js +298 -0
  462. package/src/storage/page-checksum.js +221 -0
  463. package/src/storage/page-compression.js +95 -0
  464. package/src/storage/page-store.js +418 -0
  465. package/src/storage/page.js +261 -0
  466. package/src/storage/persisted-db.js +1885 -0
  467. package/src/storage/persisted-table-storage.js +280 -0
  468. package/src/storage/read-ahead.js +95 -0
  469. package/src/storage/shared-storage.js +688 -0
  470. package/src/storage/soa-table-storage.js +418 -0
  471. package/src/storage/storage-engine.js +187 -0
  472. package/src/storage/table-storage.js +215 -0
  473. package/src/storage/tiered-kv-adapter.js +381 -0
  474. package/src/storage/version-history-cleaner.js +888 -0
  475. package/src/studio/index.html +1503 -0
  476. package/src/studio/server.js +204 -0
  477. package/src/sync/change-log.js +144 -0
  478. package/src/sync/index.js +2 -0
  479. package/src/sync/sync-engine.js +428 -0
  480. package/src/sync/sync-handlers.js +196 -0
  481. package/src/test-utils.js +11 -0
  482. package/src/transaction/index.js +8 -0
  483. package/src/transaction/read-uncommitted.js +37 -0
  484. package/src/transaction/repeatable-read.js +380 -0
  485. package/src/transaction/rr-transaction-manager.js +262 -0
  486. package/src/transaction/ru-transaction-manager.js +76 -0
  487. package/src/transaction/serializable.js +205 -0
  488. package/src/transaction/transaction-manager.js +259 -0
  489. package/src/transaction/tx-manager.js +490 -0
  490. package/src/transaction/tx-state.js +43 -0
  491. package/src/tx/bfmark-snapshot.js +193 -0
  492. package/src/tx/row-lock.js +246 -0
  493. package/src/tx/ssi.js +229 -0
  494. package/src/types/datetime.js +621 -0
  495. package/src/types/decimal.js +220 -0
  496. package/src/types/enum-type.js +131 -0
  497. package/src/types/interval.js +565 -0
  498. package/src/types/json-type.js +376 -0
  499. package/src/types/jsonb.js +227 -0
  500. package/src/types/udt.js +180 -0
  501. package/src/utils/batch-processor.js +46 -0
  502. package/src/utils/debug-logger.js +116 -0
  503. package/src/utils/index-helper.js +74 -0
  504. package/src/utils/index.js +9 -0
  505. package/src/utils/join-engine.js +1713 -0
  506. package/src/utils/object-pool.js +610 -0
  507. package/src/utils/query-tracer.js +489 -0
  508. package/src/utils/timeout-util.js +92 -0
  509. package/src/utils/tx-log-persist.js +197 -0
  510. package/src/utils/undo-compress.js +93 -0
  511. package/src/utils/undo-log.js +196 -0
  512. package/src/utils/wal-common.js +138 -0
  513. package/src/vector/adaptive-ef.js +213 -0
  514. package/src/vector/distributed-vector-search.js +542 -0
  515. package/src/vector/federated-vector-search.js +707 -0
  516. package/src/vector/gpu-distance.js +647 -0
  517. package/src/vector/gpu-sq-distance.js +444 -0
  518. package/src/vector/hnsw-acceleration.js +298 -0
  519. package/src/vector/hnsw-profiler.js +341 -0
  520. package/src/vector/index.js +90 -0
  521. package/src/vector/public-api.js +29 -0
  522. package/src/vector/recall-benchmark.js +333 -0
  523. package/src/vector/simd-distance.js +511 -0
  524. package/src/vector/vector-scan.js +646 -0
  525. package/src/vector/wasm-hnsw.js +714 -0
  526. package/src/version/version-chain-manager.js +1277 -0
  527. package/src/version/version-delta-encoder.js +819 -0
  528. package/src/version.js +19 -0
  529. package/src/view/incremental-refresher.js +1015 -0
  530. package/src/view/index.js +12 -0
  531. package/src/view/materialized-view.js +204 -0
  532. package/src/view/view-manager.js +1368 -0
  533. package/src/wasm/bridge.js +79 -0
  534. package/src/worker/query-dispatcher.js +277 -0
  535. package/src/worker/session-worker-pool.js +355 -0
  536. package/src/worker/task-defs.js +330 -0
  537. package/src/worker/task-worker.js +406 -0
  538. package/src/worker/worker-pool.js +651 -0
  539. package/src/xml/xml-support.js +647 -0
  540. package/types/pure-js-db.d.ts +1988 -0
  541. package/types/schema.d.ts +65 -0
@@ -0,0 +1,70 @@
1
+ /**
2
+ * optimizer/limit-pushdown.js — LimitPushdownRule(post 阶段)
3
+ *
4
+ * 将 LIMIT 下推到子查询/派生表,减少中间结果集大小。
5
+ * 衔接 P-P0-2:LIMIT 下推进计划。
6
+ */
7
+
8
+ import { OptimizerRule } from './optimizer-rule.js';
9
+
10
+ export class LimitPushdownRule extends OptimizerRule {
11
+ name = 'limit-pushdown';
12
+ phase = 'post';
13
+ dependsOn = [];
14
+
15
+ /**
16
+ * 检测 stmt 含 LIMIT + 子查询/派生表
17
+ * @param {Object} stmt
18
+ * @param {Object} ctx
19
+ * @returns {boolean}
20
+ */
21
+ applies(stmt, _ctx) {
22
+ if (!stmt) {
23
+ return false;
24
+ }
25
+ if (stmt.limit === null || stmt.limit === undefined) {
26
+ return false;
27
+ }
28
+ if (!stmt.from) {
29
+ return false;
30
+ }
31
+ return stmt.from.some(item => item && (item.subquery || item.derived));
32
+ }
33
+
34
+ /**
35
+ * 将 LIMIT 下推到子查询/派生表
36
+ * @param {Object} stmt
37
+ * @param {Object} ctx
38
+ * @returns {{ changed: boolean, stats?: Object }}
39
+ */
40
+ rewrite(stmt, ctx) {
41
+ try {
42
+ if (!this.applies(stmt, ctx)) {
43
+ return { changed: false };
44
+ }
45
+
46
+ let pushedCount = 0;
47
+ const limitValue = stmt.limit;
48
+
49
+ for (const item of stmt.from) {
50
+ if (item && item.subquery && item.subquery.limit === undefined) {
51
+ item.subquery.limit = limitValue;
52
+ pushedCount++;
53
+ }
54
+ if (item && item.derived && item.derived.limit === undefined) {
55
+ item.derived.limit = limitValue;
56
+ pushedCount++;
57
+ }
58
+ }
59
+
60
+ if (pushedCount > 0) {
61
+ return { changed: true, stats: { pushedCount } };
62
+ }
63
+ return { changed: false };
64
+ } catch (e) {
65
+ return { changed: false, stats: { error: e.message } };
66
+ }
67
+ }
68
+ }
69
+
70
+ export default LimitPushdownRule;
@@ -0,0 +1,54 @@
1
+ /**
2
+ * optimizer/optimized-plan.js — OptimizedPlan 统一计划对象
3
+ *
4
+ * 扩展 QueryPlan,新增优化管线产出的计划字段。
5
+ * 增量兼容:新增字段默认 undefined,executor 消费时 undefined 走旧逻辑。
6
+ */
7
+
8
+ import { QueryPlan } from './optimizer.js';
9
+
10
+ export class OptimizedPlan extends QueryPlan {
11
+ /**
12
+ * @param {string} type - 访问路径类型('full_scan' | 'index_eq' | 'index_range' | 'index_in')
13
+ * @param {string} tableName - 表名
14
+ */
15
+ constructor(type, tableName) {
16
+ super(type, tableName);
17
+ /** @type {Object|null} 访问路径(full_scan/index_eq/index_range + 索引名) */
18
+ this.accessPath = undefined;
19
+ /** @type {Object[]|null} 连接顺序(JOIN 重排结果) */
20
+ this.joinOrder = undefined;
21
+ /** @type {Object[]|null} 谓词(下推后的剩余谓词) */
22
+ this.predicates = undefined;
23
+ /** @type {Object|null} LIMIT 下推信息 */
24
+ this.limitPushdown = undefined;
25
+ /** @type {Object|null} 并行度提示 */
26
+ this.parallelHint = undefined;
27
+ }
28
+
29
+ /**
30
+ * 序列化供 EXPLAIN 与计划缓存
31
+ * @returns {Object}
32
+ */
33
+ toJSON() {
34
+ return {
35
+ type: this.type,
36
+ tableName: this.tableName,
37
+ estimatedCost: this.estimatedCost,
38
+ estimatedRows: this.estimatedRows,
39
+ indexName: this.indexName,
40
+ columnName: this.columnName,
41
+ indexValue: this.indexValue,
42
+ rangeStart: this.rangeStart,
43
+ rangeEnd: this.rangeEnd,
44
+ inValues: this.inValues,
45
+ accessPath: this.accessPath,
46
+ joinOrder: this.joinOrder,
47
+ predicates: this.predicates,
48
+ limitPushdown: this.limitPushdown,
49
+ parallelHint: this.parallelHint,
50
+ };
51
+ }
52
+ }
53
+
54
+ export default OptimizedPlan;
@@ -0,0 +1,295 @@
1
+ /**
2
+ * optimizer/optimizer-rule.js — 优化器统一管线基础设施
3
+ *
4
+ * 包含:
5
+ * - OptimizerRule:规则统一接口(RBO 与 CBO 同构)
6
+ * - OptimizeContext:贯穿管线的上下文对象
7
+ * - OptimizationTrace / TraceEntry:trace 累积器
8
+ * - OptimizerRegistry:规则注册表(拓扑排序 + 循环检测)
9
+ * - OptimizerConfigError:循环依赖错误
10
+ *
11
+ * 设计原则:
12
+ * - 规则间依赖序通过 dependsOn 声明,拓扑排序后执行
13
+ * - 循环依赖 fail-closed(抛 OptimizerConfigError 禁止带环启动)
14
+ * - 跨 phase 依赖禁止(RBO 规则不能依赖 CBO 规则)
15
+ */
16
+
17
+ /**
18
+ * 循环依赖错误(fail-closed)
19
+ */
20
+ export class OptimizerConfigError extends Error {
21
+ /**
22
+ * @param {string} message
23
+ * @param {string[]} cycleRules - 参与环的规则名列表
24
+ */
25
+ constructor(message, cycleRules = []) {
26
+ super(message);
27
+ this.name = 'OptimizerConfigError';
28
+ this.cycleRules = cycleRules;
29
+ }
30
+ }
31
+
32
+ /**
33
+ * 规则统一接口(RBO 与 CBO 同构)
34
+ */
35
+ export class OptimizerRule {
36
+ /** @type {string} 规则名(如 'predicate-pushdown') */
37
+ name = '';
38
+
39
+ /** @type {'rbo'|'cbo'|'post'} 阶段 */
40
+ phase = 'rbo';
41
+
42
+ /** @type {string[]} 依赖规则名列表(只引用同 phase 内规则) */
43
+ dependsOn = [];
44
+
45
+ /**
46
+ * 快速判定是否命中
47
+ * @param {Object} stmt - SELECT AST
48
+ * @param {OptimizeContext} ctx
49
+ * @returns {boolean}
50
+ */
51
+ applies(_stmt, _ctx) {
52
+ throw new Error('OptimizerRule.applies: not implemented');
53
+ }
54
+
55
+ /**
56
+ * 原地改写 AST,返回 { changed, stats } 或新计划片段
57
+ * @param {Object} stmt - SELECT AST
58
+ * @param {OptimizeContext} ctx
59
+ * @returns {{ changed: boolean, stats?: Object }}
60
+ */
61
+ rewrite(_stmt, _ctx) {
62
+ throw new Error('OptimizerRule.rewrite: not implemented');
63
+ }
64
+ }
65
+
66
+ /**
67
+ * 贯穿管线的上下文对象
68
+ */
69
+ export class OptimizeContext {
70
+ /**
71
+ * @param {Object} opts
72
+ * @param {Object} opts.db - TableStorage 句柄
73
+ * @param {Object|null} [opts.stats] - 统计句柄(缺失时 CBO 降级为 RBO)
74
+ * @param {Object|null} [opts.snapshot] - MVCC 读快照句柄
75
+ * @param {OptimizationTrace} [opts.trace] - trace 累积器
76
+ */
77
+ constructor({ db, stats = null, snapshot = null, trace = null }) {
78
+ this.db = db;
79
+ this.stats = stats;
80
+ this.snapshot = snapshot;
81
+ this.trace = trace || new OptimizationTrace();
82
+ /** @type {Object|null} 输出计划(管线填充) */
83
+ this.optimizedPlan = null;
84
+ }
85
+ }
86
+
87
+ /**
88
+ * trace 条目(单规则执行记录)
89
+ */
90
+ export class TraceEntry {
91
+ /**
92
+ * @param {Object} opts
93
+ * @param {string} opts.ruleName
94
+ * @param {string} opts.phase
95
+ * @param {boolean} opts.hit - 是否命中
96
+ * @param {number} opts.durationMs - 耗时
97
+ * @param {boolean} [opts.changed] - 是否改写
98
+ * @param {boolean} [opts.degraded] - CBO 降级标注
99
+ * @param {boolean} [opts.stale] - 统计过期标注
100
+ * @param {string} [opts.error] - 异常信息
101
+ */
102
+ constructor({ ruleName, phase, hit, durationMs, changed = false, degraded = false, stale = false, error = null }) {
103
+ this.ruleName = ruleName;
104
+ this.phase = phase;
105
+ this.hit = hit;
106
+ this.durationMs = durationMs;
107
+ this.changed = changed;
108
+ this.degraded = degraded;
109
+ this.stale = stale;
110
+ this.error = error;
111
+ }
112
+ }
113
+
114
+ /**
115
+ * trace 累积器
116
+ */
117
+ export class OptimizationTrace {
118
+ constructor() {
119
+ /** @type {TraceEntry[]} */
120
+ this.entries = [];
121
+ this._enabled = false;
122
+ }
123
+
124
+ enable() {
125
+ this._enabled = true;
126
+ }
127
+
128
+ /**
129
+ * 累加一条 trace
130
+ * @param {TraceEntry} entry
131
+ */
132
+ add(entry) {
133
+ this.entries.push(entry);
134
+ }
135
+
136
+ /**
137
+ * 序列化供 EXPLAIN 消费
138
+ * @returns {Object}
139
+ */
140
+ toJSON() {
141
+ return {
142
+ entries: this.entries.map(e => ({
143
+ rule: e.ruleName,
144
+ phase: e.phase,
145
+ hit: e.hit,
146
+ durationMs: e.durationMs,
147
+ changed: e.changed,
148
+ degraded: e.degraded,
149
+ stale: e.stale,
150
+ error: e.error,
151
+ })),
152
+ };
153
+ }
154
+ }
155
+
156
+ /**
157
+ * 规则注册表(拓扑排序 + 循环检测)
158
+ */
159
+ export class OptimizerRegistry {
160
+ constructor() {
161
+ /** @type {Map<string, OptimizerRule>} 规则名 → 规则实例 */
162
+ this._rules = new Map();
163
+ /** @type {Map<string, string[]>} phase → 拓扑序规则名列表 */
164
+ this._topoCache = new Map();
165
+ }
166
+
167
+ /**
168
+ * 注册规则
169
+ * @param {OptimizerRule} rule
170
+ * @throws {OptimizerConfigError} 跨 phase 依赖
171
+ */
172
+ registerRule(rule) {
173
+ if (!(rule instanceof OptimizerRule)) {
174
+ throw new OptimizerConfigError(`注册的不是 OptimizerRule 实例: ${rule}`);
175
+ }
176
+ if (!rule.name) {
177
+ throw new OptimizerConfigError('规则名不能为空');
178
+ }
179
+ if (this._rules.has(rule.name)) {
180
+ throw new OptimizerConfigError(`规则已存在: ${rule.name}`);
181
+ }
182
+
183
+ // 检查 dependsOn 只引用同 phase 内规则
184
+ for (const dep of rule.dependsOn) {
185
+ const depRule = this._rules.get(dep);
186
+ if (depRule && depRule.phase !== rule.phase) {
187
+ throw new OptimizerConfigError(
188
+ `规则 "${rule.name}"(phase=${rule.phase})依赖 "${dep}"(phase=${depRule.phase}):跨 phase 依赖禁止`,
189
+ );
190
+ }
191
+ }
192
+
193
+ this._rules.set(rule.name, rule);
194
+ // 清空拓扑缓存(下次 getTopoOrder 重新计算)
195
+ this._topoCache.delete(rule.phase);
196
+ }
197
+
198
+ /**
199
+ * 获取某 phase 的规则列表
200
+ * @param {'rbo'|'cbo'|'post'} phase
201
+ * @returns {OptimizerRule[]}
202
+ */
203
+ getRulesByPhase(phase) {
204
+ const result = [];
205
+ for (const rule of this._rules.values()) {
206
+ if (rule.phase === phase) {
207
+ result.push(rule);
208
+ }
209
+ }
210
+ return result;
211
+ }
212
+
213
+ /**
214
+ * 获取某 phase 的拓扑序规则名列表(Kahn 算法)
215
+ * @param {'rbo'|'cbo'|'post'} phase
216
+ * @returns {string[]}
217
+ * @throws {OptimizerConfigError} 循环依赖
218
+ */
219
+ getTopoOrder(phase) {
220
+ if (this._topoCache.has(phase)) {
221
+ return this._topoCache.get(phase);
222
+ }
223
+
224
+ const rules = this.getRulesByPhase(phase);
225
+ const ruleNames = new Set(rules.map(r => r.name));
226
+
227
+ // 构建邻接表与入度表
228
+ const inDegree = new Map();
229
+ const adj = new Map();
230
+ for (const rule of rules) {
231
+ inDegree.set(rule.name, 0);
232
+ adj.set(rule.name, []);
233
+ }
234
+ for (const rule of rules) {
235
+ for (const dep of rule.dependsOn) {
236
+ if (ruleNames.has(dep)) {
237
+ adj.get(dep).push(rule.name);
238
+ inDegree.set(rule.name, inDegree.get(rule.name) + 1);
239
+ }
240
+ }
241
+ }
242
+
243
+ // Kahn 算法
244
+ const queue = [];
245
+ for (const [name, deg] of inDegree) {
246
+ if (deg === 0) {
247
+ queue.push(name);
248
+ }
249
+ }
250
+ const sorted = [];
251
+ while (queue.length > 0) {
252
+ const name = queue.shift();
253
+ sorted.push(name);
254
+ for (const next of adj.get(name)) {
255
+ inDegree.set(next, inDegree.get(next) - 1);
256
+ if (inDegree.get(next) === 0) {
257
+ queue.push(next);
258
+ }
259
+ }
260
+ }
261
+
262
+ // 检测循环依赖
263
+ if (sorted.length < rules.length) {
264
+ const cycleRules = rules.filter(r => !sorted.includes(r.name)).map(r => r.name);
265
+ throw new OptimizerConfigError(
266
+ `phase="${phase}" 存在循环依赖,参与环规则: ${cycleRules.join(', ')}`,
267
+ cycleRules,
268
+ );
269
+ }
270
+
271
+ this._topoCache.set(phase, sorted);
272
+ return sorted;
273
+ }
274
+
275
+ /**
276
+ * 检测全部 phase 的循环依赖
277
+ * @throws {OptimizerConfigError} 循环依赖
278
+ */
279
+ detectCycle() {
280
+ for (const phase of ['rbo', 'cbo', 'post']) {
281
+ this.getTopoOrder(phase);
282
+ }
283
+ }
284
+
285
+ /**
286
+ * 获取规则实例
287
+ * @param {string} name
288
+ * @returns {OptimizerRule|undefined}
289
+ */
290
+ getRule(name) {
291
+ return this._rules.get(name);
292
+ }
293
+ }
294
+
295
+ export default OptimizerRule;