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.
- package/LICENSE +21 -0
- package/README.md +747 -3
- package/bindings/java/pom.xml +18 -0
- package/bindings/java/src/main/java/purejsdb/PureJsDBClient.java +146 -0
- package/bindings/java/src/main/java/purejsdb/TransactionClient.java +65 -0
- package/bindings/java/src/test/java/TestClient.java +68 -0
- package/bindings/orm/sequelize-adapter.js +1236 -0
- package/bindings/python/purejsdb/client.py +81 -0
- package/bindings/python/setup.py +9 -0
- package/bindings/python/test_client.py +63 -0
- package/config/datagrip-config.md +206 -0
- package/config/grafana-dashboard.json +1510 -0
- package/config/production.config.js +126 -0
- package/config/prometheus-scrape.yml +39 -0
- package/native/index.node +0 -0
- package/package.json +205 -6
- package/scripts/mcp-server.mjs +208 -0
- package/src/adapter/dialect-adapter.js +179 -0
- package/src/adapter/oracle-adapter.js +191 -0
- package/src/ai/ai-service.js +713 -0
- package/src/ai/rag-pipeline.js +160 -0
- package/src/alerting/alert-manager.js +622 -0
- package/src/alerting/index.js +10 -0
- package/src/arrow/arrow-ipc.js +973 -0
- package/src/arrow/flatbuffer.js +521 -0
- package/src/arrow/index.js +261 -0
- package/src/arrow/parquet.js +1525 -0
- package/src/audit/audit-log.js +1345 -0
- package/src/audit/audit-report.js +571 -0
- package/src/audit/index.js +6 -0
- package/src/backpressure/backpressure-controller.js +262 -0
- package/src/backpressure/index.js +6 -0
- package/src/backpressure/write-rate-limiter.js +243 -0
- package/src/backup/backup-manager.js +416 -0
- package/src/backup/index.js +8 -0
- package/src/backup/logical-backup.js +228 -0
- package/src/backup/snapshot.js +111 -0
- package/src/backup/toolkit.js +410 -0
- package/src/bindings/orm/prisma-adapter.js +571 -0
- package/src/bindings/orm/typeorm-adapter.js +477 -0
- package/src/cache/adaptive-cache-size.js +288 -0
- package/src/cache/adaptive-ttl.js +139 -0
- package/src/cache/cache-adapter.js +304 -0
- package/src/cache/circuit-breaker.js +294 -0
- package/src/cache/index.js +31 -0
- package/src/cache/lru-cache.js +353 -0
- package/src/cache/redis-adapter.js +391 -0
- package/src/cache/resilient-adapter.js +391 -0
- package/src/cache/result-cache.js +493 -0
- package/src/cache/semantic-cache.js +339 -0
- package/src/cdc/cdc-engine.js +1061 -0
- package/src/cdc/cdc-handlers.js +289 -0
- package/src/cdc/ddl-capture.js +330 -0
- package/src/cdc/debezium-adapter.js +366 -0
- package/src/cdc/schema-history.js +414 -0
- package/src/changelog/changelog-buffer.js +881 -0
- package/src/changelog/changelog-wal.js +299 -0
- package/src/changelog/linear-regression-predictor.js +186 -0
- package/src/changelog/predictive-growth.js +348 -0
- package/src/changelog/seasonal-predictor.js +450 -0
- package/src/changelog/write-rate-sampler.js +141 -0
- package/src/cli/dump-command.js +944 -0
- package/src/cli/interactive.js +188 -0
- package/src/cli/migrate-command.js +252 -0
- package/src/cli.js +533 -0
- package/src/cluster/failover.js +477 -0
- package/src/cluster/index.js +19 -0
- package/src/cluster/persistent-state.js +203 -0
- package/src/cluster/public-api.js +58 -0
- package/src/cluster/raft-http-transport.js +280 -0
- package/src/cluster/raft-log.js +313 -0
- package/src/cluster/raft.js +912 -0
- package/src/cluster/snapshot-persistence.js +131 -0
- package/src/concurrency/async-mutex.js +365 -0
- package/src/concurrency/circuit-breaker.js +326 -0
- package/src/concurrency/connection-pool.js +409 -0
- package/src/concurrency/connection-session.js +498 -0
- package/src/concurrency/index.js +29 -0
- package/src/concurrency/lock-manager.js +363 -0
- package/src/concurrency/lockfree-executor.js +322 -0
- package/src/concurrency/lockfree-manager.js +570 -0
- package/src/concurrency/mvcc.js +499 -0
- package/src/concurrency/occ-hot-row.js +726 -0
- package/src/concurrency/query-degradation.js +380 -0
- package/src/concurrency/query-isolation.js +374 -0
- package/src/concurrency/shared-memory-pool.js +459 -0
- package/src/concurrency/snapshot-buffer.js +461 -0
- package/src/concurrency/transaction-context.js +193 -0
- package/src/copy/copy-stream.js +643 -0
- package/src/copy/index.js +5 -0
- package/src/core/database.js +1947 -0
- package/src/core/index.js +13 -0
- package/src/daemon/compact-daemon.js +535 -0
- package/src/daemon/index.js +14 -0
- package/src/daemon/soa-daemon-integration.js +333 -0
- package/src/ddl/online-ddl.js +348 -0
- package/src/disruptor/disruptor.js +348 -0
- package/src/disruptor/event-bus.js +238 -0
- package/src/disruptor/event-pool.js +62 -0
- package/src/disruptor/index.js +31 -0
- package/src/disruptor/ring-buffer.js +150 -0
- package/src/disruptor/sequence.js +88 -0
- package/src/disruptor/wait-strategy.js +160 -0
- package/src/engine/public-api.js +210 -0
- package/src/executor/asof-join-executor.js +265 -0
- package/src/executor/bitmap-filter.js +1382 -0
- package/src/executor/compiled-expression.js +472 -0
- package/src/executor/compiled-predicate.js +458 -0
- package/src/executor/constraint-executor.js +577 -0
- package/src/executor/copy-executor.js +210 -0
- package/src/executor/cte/recursive-cte.js +89 -0
- package/src/executor/cte-executor.js +501 -0
- package/src/executor/cursor-executor.js +216 -0
- package/src/executor/database.js +41 -0
- package/src/executor/ddl-executor.js +3531 -0
- package/src/executor/dml-executor.js +3557 -0
- package/src/executor/executor-worker.js +331 -0
- package/src/executor/executor.js +10889 -0
- package/src/executor/explain-analyzer.js +422 -0
- package/src/executor/explain-executor.js +324 -0
- package/src/executor/expression.js +4972 -0
- package/src/executor/foreign-key-executor.js +691 -0
- package/src/executor/graph-table-executor.js +451 -0
- package/src/executor/grouping-executor.js +251 -0
- package/src/executor/hotpath.js +232 -0
- package/src/executor/hybrid-search-executor.js +326 -0
- package/src/executor/incremental-live-query.js +866 -0
- package/src/executor/index-maintenance-executor.js +731 -0
- package/src/executor/index.js +16 -0
- package/src/executor/info-schema-executor.js +123 -0
- package/src/executor/join/lateral-join.js +64 -0
- package/src/executor/join-executor.js +530 -0
- package/src/executor/lineage-executor.js +85 -0
- package/src/executor/live-query-manager.js +350 -0
- package/src/executor/loop-unroll.js +539 -0
- package/src/executor/match-recognize-executor.js +918 -0
- package/src/executor/multi-stream-wal.js +140 -0
- package/src/executor/nl2sql-executor.js +309 -0
- package/src/executor/parallel-dml.js +258 -0
- package/src/executor/pivot-executor.js +458 -0
- package/src/executor/pragma-executor.js +661 -0
- package/src/executor/select-executor.js +857 -0
- package/src/executor/sequence.js +139 -0
- package/src/executor/sql-reconstructor.js +296 -0
- package/src/executor/subquery-cache.js +186 -0
- package/src/executor/subquery-executor.js +1390 -0
- package/src/executor/system-catalog.js +731 -0
- package/src/executor/table-function-executor.js +656 -0
- package/src/executor/topn.js +103 -0
- package/src/executor/transaction-executor.js +926 -0
- package/src/executor/trigger-executor.js +441 -0
- package/src/executor/v8-turbofan-optimizer.js +363 -0
- package/src/executor/vector-acceleration.js +456 -0
- package/src/executor/vector-executor.js +847 -0
- package/src/executor/vectorized-columnar-engine.js +1130 -0
- package/src/executor/vectorized-executor-v2.js +993 -0
- package/src/executor/view-executor.js +149 -0
- package/src/executor/wal.js +1945 -0
- package/src/executor/wasm-simd-engine.js +929 -0
- package/src/executor/window-functions.js +894 -0
- package/src/fdw/fdw-manager.js +642 -0
- package/src/fdw/index.js +5 -0
- package/src/geo/geometry.js +447 -0
- package/src/geo/index.js +16 -0
- package/src/geo/spatial-functions.js +1241 -0
- package/src/graph/graph-helper.js +243 -0
- package/src/graph/pgq-matcher.js +2545 -0
- package/src/graph/property-graph.js +123 -0
- package/src/graphql-bridge.js +881 -0
- package/src/hotspot/access-tracker.js +188 -0
- package/src/hotspot/hotspot-detector.js +140 -0
- package/src/hotspot/hotspot-prefetcher.js +210 -0
- package/src/hotspot/index.js +7 -0
- package/src/http-api.js +1182 -0
- package/src/http-server/handlers/audit.js +224 -0
- package/src/http-server/handlers/changes-feed.js +261 -0
- package/src/http-server/handlers/management.js +464 -0
- package/src/http-server/handlers/query.js +573 -0
- package/src/http-server/handlers/transaction.js +251 -0
- package/src/http-server/index.js +89 -0
- package/src/http-server/openapi.js +656 -0
- package/src/http-server/router.js +120 -0
- package/src/http-server/server.js +1915 -0
- package/src/http-server/tls.js +126 -0
- package/src/http-server/ws-server.js +873 -0
- package/src/index/adaptive-hash-index.js +176 -0
- package/src/index/bitmap-index.js +429 -0
- package/src/index/brin-index.js +246 -0
- package/src/index/btree-index.js +428 -0
- package/src/index/btree.js +690 -0
- package/src/index/diskann-index.js +1903 -0
- package/src/index/fulltext/fulltext-index.js +66 -0
- package/src/index/fulltext/index.js +3 -0
- package/src/index/fulltext/inverted-index.js +197 -0
- package/src/index/fulltext/tokenizer.js +154 -0
- package/src/index/fulltext.js +287 -0
- package/src/index/gin-index.js +316 -0
- package/src/index/gist-index.js +463 -0
- package/src/index/gist-ops.js +325 -0
- package/src/index/graph-compressor.js +505 -0
- package/src/index/hash-index.js +180 -0
- package/src/index/hnsw-index.js +1232 -0
- package/src/index/hnsw-pq-index.js +1147 -0
- package/src/index/index-auto-tuner.js +1341 -0
- package/src/index/index-interface.js +364 -0
- package/src/index/index-selector.js +523 -0
- package/src/index/index.js +28 -0
- package/src/index/ivfpqsq-index.js +1163 -0
- package/src/index/offheap-btree-index.js +395 -0
- package/src/index/offheap-btree.js +748 -0
- package/src/index/product-quantizer.js +1447 -0
- package/src/index/robin-hood-hash-index.js +384 -0
- package/src/index/rtree-index.js +982 -0
- package/src/index/scalar-quantizer.js +411 -0
- package/src/index/semantic-index.js +283 -0
- package/src/index/string-interner.js +238 -0
- package/src/index/timestamp-index-advisor.js +491 -0
- package/src/index/timestamp-index-compressed.js +800 -0
- package/src/index/timestamp-index-compressor.js +547 -0
- package/src/index/timestamp-index.js +579 -0
- package/src/index/vector-index-serializer.js +499 -0
- package/src/index/vector-index-stats.js +450 -0
- package/src/index/vector-index.js +615 -0
- package/src/index-v3.js +27 -0
- package/src/index.js +33 -0
- package/src/internal/public-api.js +198 -0
- package/src/lineage/column-lineage.js +393 -0
- package/src/lineage/index.js +11 -0
- package/src/lineage/lineage-store.js +701 -0
- package/src/lineage/table-lineage.js +68 -0
- package/src/mcp/index.js +176 -0
- package/src/mcp/mcp-server.js +334 -0
- package/src/mcp/protocol.js +195 -0
- package/src/mcp/tools/backup-restore.js +131 -0
- package/src/mcp/tools/cdc-tools.js +201 -0
- package/src/mcp/tools/describe-table.js +100 -0
- package/src/mcp/tools/execute-sql.js +210 -0
- package/src/mcp/tools/explain-query.js +75 -0
- package/src/mcp/tools/index-management.js +191 -0
- package/src/mcp/tools/lineage.js +64 -0
- package/src/mcp/tools/list-tables.js +46 -0
- package/src/mcp/tools/monitoring.js +195 -0
- package/src/mcp/tools/schema-management.js +229 -0
- package/src/mcp/tools/text-to-sql.js +84 -0
- package/src/mcp/tools/transaction-management.js +191 -0
- package/src/mcp/tools/vector-search.js +101 -0
- package/src/mcp/transport/http.js +352 -0
- package/src/mcp/transport/stdio.js +117 -0
- package/src/memory/memory-manager.js +437 -0
- package/src/migration/migrator.js +389 -0
- package/src/monitor/index.js +36 -0
- package/src/monitor/metrics-exporter.js +517 -0
- package/src/monitor/monitor.js +385 -0
- package/src/monitor/performance-monitor.js +204 -0
- package/src/monitor/soa-monitor.js +628 -0
- package/src/multitenant/index.js +1 -0
- package/src/multitenant/tenant-manager.js +238 -0
- package/src/native/native-acceleration.js +3493 -0
- package/src/optimizer/adaptive-optimizer.js +666 -0
- package/src/optimizer/cse.js +383 -0
- package/src/optimizer/decorrelator.js +958 -0
- package/src/optimizer/derived-table-eliminator.js +367 -0
- package/src/optimizer/explain-visualizer.js +266 -0
- package/src/optimizer/histogram.js +290 -0
- package/src/optimizer/index.js +78 -0
- package/src/optimizer/jit-compiler.js +1200 -0
- package/src/optimizer/join-order-optimizer.js +717 -0
- package/src/optimizer/limit-pushdown.js +70 -0
- package/src/optimizer/optimized-plan.js +54 -0
- package/src/optimizer/optimizer-rule.js +295 -0
- package/src/optimizer/optimizer.js +1515 -0
- package/src/optimizer/pipeline.js +263 -0
- package/src/optimizer/predicate-pushdown.js +599 -0
- package/src/optimizer/query-plan-cache.js +275 -0
- package/src/optimizer/rule-adapters.js +343 -0
- package/src/optimizer/subquery-flattener.js +689 -0
- package/src/optimizer/timestamp-query-rewriter.js +498 -0
- package/src/orm/collection.js +160 -0
- package/src/orm/errors.js +76 -0
- package/src/orm/hooks.js +184 -0
- package/src/orm/index.js +93 -0
- package/src/orm/mixins/soft-delete.js +271 -0
- package/src/orm/model.js +951 -0
- package/src/orm/query-builder.js +681 -0
- package/src/orm/relations.js +303 -0
- package/src/orm/schema.js +443 -0
- package/src/orm/seeder.js +350 -0
- package/src/parallel/dml-pushdown-executor.js +430 -0
- package/src/parallel/dml-worker.js +151 -0
- package/src/parallel/morsel-queue.js +358 -0
- package/src/parallel/parallel-executor.js +277 -0
- package/src/parallel/pipeline-executor.js +423 -0
- package/src/parallel/shared-cache.js +206 -0
- package/src/parser/ast.js +3853 -0
- package/src/parser/parser.js +7909 -0
- package/src/parser/tokenizer.js +542 -0
- package/src/query/relation-preloader.js +327 -0
- package/src/replication/index.js +15 -0
- package/src/replication/lag-monitor.js +163 -0
- package/src/replication/master.js +117 -0
- package/src/replication/multi-master.js +495 -0
- package/src/replication/read-replica.js +490 -0
- package/src/replication/replica.js +395 -0
- package/src/replication/replication-http-transport.js +421 -0
- package/src/replication/wal-standby.js +334 -0
- package/src/runtime/index.js +4 -0
- package/src/runtime/plpgsql-interpreter.js +766 -0
- package/src/runtime/plpgsql-parser.js +852 -0
- package/src/runtime/stored-procedure.js +149 -0
- package/src/runtime/udf.js +194 -0
- package/src/schema/dsl-parser.js +896 -0
- package/src/schema/index.js +113 -0
- package/src/schema/introspector.js +246 -0
- package/src/schema/pg-migrator.js +599 -0
- package/src/schema/schema-differ.js +504 -0
- package/src/schema/schema-versioning.js +426 -0
- package/src/schema/type-generator.js +537 -0
- package/src/sdk/README.md +277 -0
- package/src/sdk/go/README.md +19 -0
- package/src/sdk/go/go.mod +3 -0
- package/src/sdk/go/pureclient/client.go +663 -0
- package/src/sdk/go/pureclient/client_test.go +413 -0
- package/src/sdk/java/README.md +19 -0
- package/src/sdk/java/pom.xml +87 -0
- package/src/sdk/java/pureclient/JsonUtil.java +366 -0
- package/src/sdk/java/pureclient/PureClient.java +835 -0
- package/src/sdk/java/pureclient/PureClientTest.java +570 -0
- package/src/sdk/java/pureclient/PureError.java +158 -0
- package/src/sdk/java/pureclient/Transaction.java +242 -0
- package/src/sdk/javascript/README.md +19 -0
- package/src/sdk/javascript/cdc.js +230 -0
- package/src/sdk/javascript/client.js +420 -0
- package/src/sdk/javascript/errors.js +66 -0
- package/src/sdk/javascript/index.js +35 -0
- package/src/sdk/javascript/pool.js +199 -0
- package/src/sdk/javascript/transaction.js +114 -0
- package/src/sdk/php/README.md +19 -0
- package/src/sdk/php/composer.json +30 -0
- package/src/sdk/php/src/PureClient.php +550 -0
- package/src/sdk/php/src/PureError.php +130 -0
- package/src/sdk/php/src/Transaction.php +172 -0
- package/src/sdk/public-api.js +16 -0
- package/src/sdk/python/README.md +19 -0
- package/src/sdk/python/pure_client.py +388 -0
- package/src/sdk/react-native/README.md +161 -0
- package/src/sdk/react-native/async-storage-adapter.js +147 -0
- package/src/sdk/react-native/embedded/embedded-client.js +266 -0
- package/src/sdk/react-native/embedded/hermes-jsi-bridge.js +207 -0
- package/src/sdk/react-native/embedded/sqlite-kv-adapter.js +345 -0
- package/src/sdk/react-native/expo-file-adapter.js +315 -0
- package/src/sdk/react-native/index.js +52 -0
- package/src/sdk/react-native/mobile-client.js +759 -0
- package/src/sdk/react-native/sync-manager.js +455 -0
- package/src/sdk/react-native/vector-search.js +322 -0
- package/src/sdk/rust/CHANGELOG.md +104 -0
- package/src/sdk/rust/Cargo.toml +35 -0
- package/src/sdk/rust/LICENSE +21 -0
- package/src/sdk/rust/PUBLISHING.md +202 -0
- package/src/sdk/rust/README.md +471 -0
- package/src/sdk/rust/RELEASE-CHECKLIST.md +340 -0
- package/src/sdk/rust/examples/basic_usage.rs +181 -0
- package/src/sdk/rust/scripts/publish.sh +233 -0
- package/src/sdk/rust/src/client.rs +481 -0
- package/src/sdk/rust/src/error.rs +95 -0
- package/src/sdk/rust/src/index/hnswpq.rs +626 -0
- package/src/sdk/rust/src/index/mod.rs +7 -0
- package/src/sdk/rust/src/lib.rs +66 -0
- package/src/sdk/rust/src/models.rs +198 -0
- package/src/sdk/rust/src/transaction.rs +123 -0
- package/src/sdk/rust/tests/concurrent_vector_search.rs +534 -0
- package/src/sdk/wechat/README.md +19 -0
- package/src/sdk/wechat/index.js +42 -0
- package/src/sdk/wechat/pure-js-db.js +105 -0
- package/src/sdk/wechat/stubs/empty.js +85 -0
- package/src/sdk/wechat/wx-database.js +225 -0
- package/src/sdk/wechat/wx-lite.js +191 -0
- package/src/sdk/wechat/wx-sqlite-adapter.js +655 -0
- package/src/sdk/wechat/wx-sqlite-database.js +146 -0
- package/src/sdk/wechat/wx-storage-adapter.js +609 -0
- package/src/security/api-key.js +215 -0
- package/src/security/auth.js +179 -0
- package/src/security/column-encryption-optimized.js +352 -0
- package/src/security/column-encryption.js +330 -0
- package/src/security/crypto-provider.js +345 -0
- package/src/security/data-masking.js +370 -0
- package/src/security/field-encryption.js +238 -0
- package/src/security/index.js +41 -0
- package/src/security/jwt.js +202 -0
- package/src/security/rbac.js +702 -0
- package/src/security/regex-guard.js +277 -0
- package/src/security/row-level-security.js +192 -0
- package/src/security/secure-erase.js +258 -0
- package/src/security/sql-firewall.js +185 -0
- package/src/security/sql-injection-detector.js +647 -0
- package/src/security/sql-rate-limiter.js +168 -0
- package/src/security/ssrf-guard.js +790 -0
- package/src/security/timing-safe.js +203 -0
- package/src/serializer/codecs.js +1155 -0
- package/src/serializer/index.js +13 -0
- package/src/serializer/serializer.js +468 -0
- package/src/server/public-api.js +14 -0
- package/src/server.js +31 -0
- package/src/service/log-service.js +593 -0
- package/src/sharding/cluster-manager.js +161 -0
- package/src/sharding/consistent-hash-ring-optimized.js +421 -0
- package/src/sharding/consistent-hash-ring.js +252 -0
- package/src/sharding/consistent-hash.js +175 -0
- package/src/sharding/distributed-executor.js +120 -0
- package/src/sharding/distributed-lock.js +256 -0
- package/src/sharding/distributed-transaction.js +262 -0
- package/src/sharding/failure-recovery.js +267 -0
- package/src/sharding/global-tx-coordinator.js +1299 -0
- package/src/sharding/index.js +16 -0
- package/src/sharding/parallel-write-coordinator.js +370 -0
- package/src/sharding/partition-manager.js +382 -0
- package/src/sharding/pushdown-executor.js +1101 -0
- package/src/sharding/scatter-gather-executor.js +460 -0
- package/src/sharding/shard-executor.js +624 -0
- package/src/sharding/shard-manager.js +717 -0
- package/src/sharding/three-phase-commit.js +699 -0
- package/src/sharding/two-phase-commit.js +1243 -0
- package/src/snapshot/historical-reader.js +257 -0
- package/src/snapshot/index.js +7 -0
- package/src/storage/batch-writer.js +110 -0
- package/src/storage/binary-storage-adapter.js +738 -0
- package/src/storage/blob-kv-adapter.js +253 -0
- package/src/storage/buffer-pool.js +458 -0
- package/src/storage/buffered-kv-adapter.js +325 -0
- package/src/storage/cold-data-migrator.js +519 -0
- package/src/storage/column-compression.js +878 -0
- package/src/storage/column-store-table.js +627 -0
- package/src/storage/column-store.js +1094 -0
- package/src/storage/columnar-file.js +489 -0
- package/src/storage/columnar-storage.js +485 -0
- package/src/storage/compact-recovery.js +394 -0
- package/src/storage/encrypted-kv-adapter.js +271 -0
- package/src/storage/file-kv-adapter.js +468 -0
- package/src/storage/hybrid-engine.js +1480 -0
- package/src/storage/importer.js +125 -0
- package/src/storage/in-memory-table-storage.js +291 -0
- package/src/storage/index.js +78 -0
- package/src/storage/io-thread-pool.js +240 -0
- package/src/storage/io-worker.js +42 -0
- package/src/storage/kv-adapter.js +322 -0
- package/src/storage/lsm/active-table.js +240 -0
- package/src/storage/lsm/block-cache.js +64 -0
- package/src/storage/lsm/bloom-filter.js +174 -0
- package/src/storage/lsm/compactor.js +460 -0
- package/src/storage/lsm/database-manager.js +177 -0
- package/src/storage/lsm/full-text-search.js +385 -0
- package/src/storage/lsm/index.js +14 -0
- package/src/storage/lsm/internal-key.js +140 -0
- package/src/storage/lsm/lsm-engine.js +798 -0
- package/src/storage/lsm/lsm-kv-adapter.js +137 -0
- package/src/storage/lsm/memtable.js +628 -0
- package/src/storage/lsm/mmap-region.js +289 -0
- package/src/storage/lsm/sstable-reader.js +403 -0
- package/src/storage/lsm/sstable-repair.js +437 -0
- package/src/storage/lsm/sstable-writer.js +202 -0
- package/src/storage/lsm/wal.js +800 -0
- package/src/storage/offheap-allocator.js +298 -0
- package/src/storage/page-checksum.js +221 -0
- package/src/storage/page-compression.js +95 -0
- package/src/storage/page-store.js +418 -0
- package/src/storage/page.js +261 -0
- package/src/storage/persisted-db.js +1885 -0
- package/src/storage/persisted-table-storage.js +280 -0
- package/src/storage/read-ahead.js +95 -0
- package/src/storage/shared-storage.js +688 -0
- package/src/storage/soa-table-storage.js +418 -0
- package/src/storage/storage-engine.js +187 -0
- package/src/storage/table-storage.js +215 -0
- package/src/storage/tiered-kv-adapter.js +381 -0
- package/src/storage/version-history-cleaner.js +888 -0
- package/src/studio/index.html +1503 -0
- package/src/studio/server.js +204 -0
- package/src/sync/change-log.js +144 -0
- package/src/sync/index.js +2 -0
- package/src/sync/sync-engine.js +428 -0
- package/src/sync/sync-handlers.js +196 -0
- package/src/test-utils.js +11 -0
- package/src/transaction/index.js +8 -0
- package/src/transaction/read-uncommitted.js +37 -0
- package/src/transaction/repeatable-read.js +380 -0
- package/src/transaction/rr-transaction-manager.js +262 -0
- package/src/transaction/ru-transaction-manager.js +76 -0
- package/src/transaction/serializable.js +205 -0
- package/src/transaction/transaction-manager.js +259 -0
- package/src/transaction/tx-manager.js +490 -0
- package/src/transaction/tx-state.js +43 -0
- package/src/tx/bfmark-snapshot.js +193 -0
- package/src/tx/row-lock.js +246 -0
- package/src/tx/ssi.js +229 -0
- package/src/types/datetime.js +621 -0
- package/src/types/decimal.js +220 -0
- package/src/types/enum-type.js +131 -0
- package/src/types/interval.js +565 -0
- package/src/types/json-type.js +376 -0
- package/src/types/jsonb.js +227 -0
- package/src/types/udt.js +180 -0
- package/src/utils/batch-processor.js +46 -0
- package/src/utils/debug-logger.js +116 -0
- package/src/utils/index-helper.js +74 -0
- package/src/utils/index.js +9 -0
- package/src/utils/join-engine.js +1713 -0
- package/src/utils/object-pool.js +610 -0
- package/src/utils/query-tracer.js +489 -0
- package/src/utils/timeout-util.js +92 -0
- package/src/utils/tx-log-persist.js +197 -0
- package/src/utils/undo-compress.js +93 -0
- package/src/utils/undo-log.js +196 -0
- package/src/utils/wal-common.js +138 -0
- package/src/vector/adaptive-ef.js +213 -0
- package/src/vector/distributed-vector-search.js +542 -0
- package/src/vector/federated-vector-search.js +707 -0
- package/src/vector/gpu-distance.js +647 -0
- package/src/vector/gpu-sq-distance.js +444 -0
- package/src/vector/hnsw-acceleration.js +298 -0
- package/src/vector/hnsw-profiler.js +341 -0
- package/src/vector/index.js +90 -0
- package/src/vector/public-api.js +29 -0
- package/src/vector/recall-benchmark.js +333 -0
- package/src/vector/simd-distance.js +511 -0
- package/src/vector/vector-scan.js +646 -0
- package/src/vector/wasm-hnsw.js +714 -0
- package/src/version/version-chain-manager.js +1277 -0
- package/src/version/version-delta-encoder.js +819 -0
- package/src/version.js +19 -0
- package/src/view/incremental-refresher.js +1015 -0
- package/src/view/index.js +12 -0
- package/src/view/materialized-view.js +204 -0
- package/src/view/view-manager.js +1368 -0
- package/src/wasm/bridge.js +79 -0
- package/src/worker/query-dispatcher.js +277 -0
- package/src/worker/session-worker-pool.js +355 -0
- package/src/worker/task-defs.js +330 -0
- package/src/worker/task-worker.js +406 -0
- package/src/worker/worker-pool.js +651 -0
- package/src/xml/xml-support.js +647 -0
- package/types/pure-js-db.d.ts +1988 -0
- 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;
|