ts-prorm-orm 1.1.0 → 1.2.1
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/CHANGELOG.md +95 -0
- package/README.md +194 -72
- package/dist/audit/history-query.d.ts +35 -0
- package/dist/audit/index.d.ts +16 -0
- package/dist/audit/logger.d.ts +126 -0
- package/dist/cache/cache-manager.d.ts +341 -0
- package/dist/cache/index.d.ts +8 -0
- package/dist/cache/redis-cluster-cache.d.ts +164 -0
- package/dist/cache/redis-cluster-cache.js +19 -36
- package/dist/cli/cloud.d.ts +55 -0
- package/dist/cli/cloud.js +318 -0
- package/dist/cli/commands/auth.d.ts +2 -0
- package/dist/cli/commands/auth.js +345 -0
- package/dist/cli/commands/billing.d.ts +2 -0
- package/dist/cli/commands/billing.js +135 -0
- package/dist/cli/commands/code.d.ts +2 -0
- package/dist/cli/commands/code.js +168 -0
- package/dist/cli/commands/config.d.ts +2 -0
- package/dist/cli/commands/config.js +154 -0
- package/dist/cli/commands/db.d.ts +2 -0
- package/dist/cli/commands/db.js +189 -0
- package/dist/cli/commands/index.d.ts +1 -0
- package/dist/cli/commands/index.js +22 -0
- package/dist/cli/commands/keys.d.ts +2 -0
- package/dist/cli/commands/keys.js +100 -0
- package/dist/cli/commands/misc.d.ts +2 -0
- package/dist/cli/commands/misc.js +282 -0
- package/dist/cli/commands/pull.d.ts +2 -0
- package/dist/cli/commands/pull.js +306 -0
- package/dist/cli/commands/runners.d.ts +2 -0
- package/dist/cli/commands/runners.js +218 -0
- package/dist/cli/commands/scaffold.d.ts +2 -0
- package/dist/cli/commands/scaffold.js +383 -0
- package/dist/cli/commands/secrets.d.ts +2 -0
- package/dist/cli/commands/secrets.js +162 -0
- package/dist/cli/commands/store.d.ts +2 -0
- package/dist/cli/commands/store.js +274 -0
- package/dist/cli/commands/system.d.ts +10 -0
- package/dist/cli/commands/system.js +169 -0
- package/dist/cli/commands/teams.d.ts +2 -0
- package/dist/cli/commands/teams.js +189 -0
- package/dist/cli/commands/user.d.ts +2 -0
- package/dist/cli/commands/user.js +171 -0
- package/dist/cli/framework.d.ts +103 -0
- package/dist/cli/framework.js +436 -0
- package/dist/cli/io.d.ts +26 -0
- package/dist/cli/io.js +181 -0
- package/dist/cli/keychain.d.ts +10 -0
- package/dist/cli/keychain.js +101 -0
- package/dist/cli/prompt.d.ts +20 -0
- package/dist/cli/prompt.js +111 -0
- package/dist/cli.d.ts +214 -0
- package/dist/cli.js +72 -5
- package/dist/compliance/audit-trail.d.ts +66 -0
- package/dist/compliance/backup-verification.d.ts +279 -0
- package/dist/compliance/breach-detector.d.ts +197 -0
- package/dist/compliance/consent-record.d.ts +107 -0
- package/dist/compliance/consent-versioning.d.ts +169 -0
- package/dist/compliance/cross-border-log.d.ts +254 -0
- package/dist/compliance/data-classifier.d.ts +127 -0
- package/dist/compliance/data-lineage.d.ts +268 -0
- package/dist/compliance/data-masker.d.ts +110 -0
- package/dist/compliance/data-portability.d.ts +98 -0
- package/dist/compliance/data-retention.d.ts +108 -0
- package/dist/compliance/dsar-workflow.d.ts +175 -0
- package/dist/compliance/field-encryption.d.ts +84 -0
- package/dist/compliance/immutable-record.d.ts +84 -0
- package/dist/compliance/index.d.ts +93 -0
- package/dist/compliance/privacy-impact-assessment.d.ts +196 -0
- package/dist/compliance/pseudonymization.d.ts +96 -0
- package/dist/compliance/query-firewall.d.ts +661 -0
- package/dist/compliance/rate-limiter.d.ts +203 -0
- package/dist/compliance/right-to-erasure.d.ts +96 -0
- package/dist/compliance/row-level-security.d.ts +152 -0
- package/dist/compliance/security-decorator.d.ts +388 -0
- package/dist/compliance/security-monitor.d.ts +170 -0
- package/dist/compliance/sensitive-data-discovery.d.ts +151 -0
- package/dist/compliance/session-isolation.d.ts +286 -0
- package/dist/compliance/tls-enforcer.d.ts +51 -0
- package/dist/compliance/worm-storage.d.ts +225 -0
- package/dist/connection-manager.d.ts +130 -0
- package/dist/connection-pool.d.ts +311 -0
- package/dist/decorators/audit.d.ts +49 -0
- package/dist/decorators/check.d.ts +218 -0
- package/dist/decorators/collate.d.ts +346 -0
- package/dist/decorators/comment.d.ts +51 -0
- package/dist/decorators/database-settings.d.ts +193 -0
- package/dist/decorators/default.d.ts +148 -0
- package/dist/decorators/encryption.d.ts +175 -0
- package/dist/decorators/engine.d.ts +97 -0
- package/dist/decorators/fk-constraints.d.ts +387 -0
- package/dist/decorators/foreign-table.d.ts +57 -0
- package/dist/decorators/generated.d.ts +232 -0
- package/dist/decorators/hstore.d.ts +96 -0
- package/dist/decorators/index.d.ts +57 -0
- package/dist/decorators/index.js +14 -30
- package/dist/decorators/json-column.d.ts +47 -0
- package/dist/decorators/jsonb.d.ts +83 -0
- package/dist/decorators/orm-decorators.d.ts +274 -0
- package/dist/decorators/permissions.d.ts +192 -0
- package/dist/decorators/procedure.d.ts +168 -0
- package/dist/decorators/procedure.js +31 -7
- package/dist/decorators/query-options.d.ts +527 -0
- package/dist/decorators/range.d.ts +122 -0
- package/dist/decorators/set-column.d.ts +43 -0
- package/dist/decorators/spatial.d.ts +60 -0
- package/dist/decorators/storage.d.ts +561 -0
- package/dist/decorators/timezone.d.ts +319 -0
- package/dist/decorators/trigger.d.ts +50 -0
- package/dist/decorators/uuid.d.ts +102 -0
- package/dist/decorators/view.d.ts +213 -0
- package/dist/diagrams/chen-diagram.d.ts +70 -0
- package/dist/diagrams/chen-diagram.js +33 -31
- package/dist/diagrams/class-diagram.d.ts +78 -0
- package/dist/diagrams/class-diagram.js +23 -27
- package/dist/diagrams/dependency-diagram.d.ts +82 -0
- package/dist/diagrams/dependency-diagram.js +18 -9
- package/dist/diagrams/er-diagram.d.ts +82 -0
- package/dist/diagrams/er-diagram.js +174 -231
- package/dist/diagrams/flow-diagram.d.ts +70 -0
- package/dist/diagrams/flow-diagram.js +23 -18
- package/dist/diagrams/gantt-diagram.d.ts +67 -0
- package/dist/diagrams/gantt-diagram.js +20 -18
- package/dist/diagrams/index-diagram.d.ts +61 -0
- package/dist/diagrams/index-diagram.js +36 -31
- package/dist/diagrams/index.d.ts +155 -0
- package/dist/diagrams/index.js +7 -1
- package/dist/diagrams/migration-diagram.d.ts +67 -0
- package/dist/diagrams/migration-diagram.js +45 -57
- package/dist/diagrams/model-diagram.d.ts +85 -0
- package/dist/diagrams/model-diagram.js +225 -287
- package/dist/diagrams/package-diagram.d.ts +69 -0
- package/dist/diagrams/package-diagram.js +30 -32
- package/dist/diagrams/palette.d.ts +138 -0
- package/dist/diagrams/palette.js +134 -25
- package/dist/diagrams/relational-diagram.d.ts +82 -0
- package/dist/diagrams/relational-diagram.js +51 -59
- package/dist/diagrams/schemadoc-diagram.d.ts +57 -0
- package/dist/diagrams/schemadoc-diagram.js +36 -28
- package/dist/diagrams/sequence-diagram.d.ts +61 -0
- package/dist/diagrams/sequence-diagram.js +20 -11
- package/dist/diagrams/state-diagram.d.ts +85 -0
- package/dist/diagrams/state-diagram.js +21 -17
- package/dist/diagrams/svg-dom.d.ts +62 -0
- package/dist/diagrams/svg-dom.js +11 -0
- package/dist/diagrams/tree-diagram.d.ts +47 -0
- package/dist/diagrams/tree-diagram.js +19 -10
- package/dist/dialects/clickhouse/index.d.ts +660 -0
- package/dist/dialects/clickhouse/index.js +107 -2
- package/dist/dialects/cockroachdb/index.d.ts +1708 -0
- package/dist/dialects/cockroachdb/index.js +139 -10
- package/dist/dialects/cratedb/index.d.ts +262 -0
- package/dist/dialects/cratedb/index.js +148 -0
- package/dist/dialects/databricks/index.d.ts +397 -0
- package/dist/dialects/databricks/index.js +233 -11
- package/dist/dialects/db2/index.d.ts +729 -0
- package/dist/dialects/db2/index.js +152 -2
- package/dist/dialects/dialect.d.ts +1653 -0
- package/dist/dialects/duckdb/index.d.ts +440 -0
- package/dist/dialects/duckdb/index.js +21 -37
- package/dist/dialects/exasol/index.d.ts +197 -0
- package/dist/dialects/exasol/index.js +14 -0
- package/dist/dialects/firebird/index.d.ts +286 -0
- package/dist/dialects/firebird/index.js +135 -0
- package/dist/dialects/greenplum/index.d.ts +336 -0
- package/dist/dialects/greenplum/index.js +168 -0
- package/dist/dialects/hana/index.d.ts +512 -0
- package/dist/dialects/hana/index.js +17 -35
- package/dist/dialects/mariadb/index.d.ts +1241 -0
- package/dist/dialects/mariadb/index.js +181 -43
- package/dist/dialects/mssql/index.d.ts +729 -0
- package/dist/dialects/mssql/index.js +76 -7
- package/dist/dialects/mysql/index.d.ts +1233 -0
- package/dist/dialects/mysql/index.js +87 -19
- package/dist/dialects/oracle/index.d.ts +1222 -0
- package/dist/dialects/oracle/index.js +210 -9
- package/dist/dialects/postgres/index.d.ts +1598 -0
- package/dist/dialects/postgres/index.js +34 -13
- package/dist/dialects/query-stream-helper.d.ts +58 -0
- package/dist/dialects/questdb/index.d.ts +430 -0
- package/dist/dialects/questdb/index.js +292 -0
- package/dist/dialects/redshift/index.d.ts +933 -0
- package/dist/dialects/redshift/index.js +17 -5
- package/dist/dialects/singlestore/index.d.ts +233 -0
- package/dist/dialects/singlestore/index.js +53 -0
- package/dist/dialects/snowflake/index.d.ts +727 -0
- package/dist/dialects/snowflake/index.js +154 -5
- package/dist/dialects/spanner/index.d.ts +660 -0
- package/dist/dialects/spanner/index.js +43 -21
- package/dist/dialects/sqlite/index.d.ts +1133 -0
- package/dist/dialects/sqlite/index.js +168 -30
- package/dist/dialects/tidb/index.d.ts +226 -0
- package/dist/dialects/tidb/index.js +10 -0
- package/dist/dialects/timescaledb/index.d.ts +286 -0
- package/dist/dialects/timescaledb/index.js +179 -0
- package/dist/dialects/trino/index.d.ts +230 -0
- package/dist/dialects/trino/index.js +85 -10
- package/dist/dialects/turso/index.d.ts +98 -0
- package/dist/dialects/turso/index.js +10 -0
- package/dist/dialects/vertica/index.d.ts +321 -0
- package/dist/dialects/vertica/index.js +161 -0
- package/dist/dialects/yugabytedb/index.d.ts +276 -0
- package/dist/dialects/yugabytedb/index.js +121 -0
- package/dist/errors/index.d.ts +378 -0
- package/dist/errors/index.js +29 -1
- package/dist/errors/utils.d.ts +53 -0
- package/dist/errors.d.ts +5 -0
- package/dist/extensions/catalog/cloud-warehouse-features.d.ts +27 -0
- package/dist/extensions/catalog/mssql-features.d.ts +20 -0
- package/dist/extensions/catalog/mysql-mariadb-plugins.d.ts +18 -0
- package/dist/extensions/catalog/oracle-db2-features.d.ts +17 -0
- package/dist/extensions/catalog/postgres-extensions.d.ts +15 -0
- package/dist/extensions/index.d.ts +34 -0
- package/dist/extensions/types.d.ts +43 -0
- package/dist/external-fields/adapters.d.ts +50 -0
- package/dist/external-fields/adapters.js +227 -0
- package/dist/external-fields/decorator.d.ts +77 -0
- package/dist/external-fields/decorator.js +80 -0
- package/dist/external-fields/index.d.ts +10 -0
- package/dist/external-fields/index.js +19 -0
- package/dist/external-fields/runtime.d.ts +39 -0
- package/dist/external-fields/runtime.js +221 -0
- package/dist/foreign-data.d.ts +168 -0
- package/dist/graph/base-graph-dialect.d.ts +250 -0
- package/dist/graph/base-graph-dialect.js +539 -0
- package/dist/graph/dgraph/index.d.ts +65 -0
- package/dist/graph/dgraph/index.js +559 -0
- package/dist/graph/gremlin/index.d.ts +59 -0
- package/dist/graph/gremlin/index.js +378 -0
- package/dist/graph/index.d.ts +60 -0
- package/dist/graph/index.js +67 -0
- package/dist/graph/neo4j/index.d.ts +50 -0
- package/dist/graph/neo4j/index.js +462 -0
- package/dist/graph/types.d.ts +213 -0
- package/dist/graph/types.js +234 -0
- package/dist/hooks/hooks-manager.d.ts +189 -0
- package/dist/hooks/index.d.ts +8 -0
- package/dist/index.d.ts +713 -0
- package/dist/index.js +36 -4
- package/dist/logging.d.ts +183 -0
- package/dist/migrations/index.d.ts +9 -0
- package/dist/migrations/migration.d.ts +143 -0
- package/dist/migrations/migrator.d.ts +199 -0
- package/dist/migrations/prormmigration.d.ts +131 -0
- package/dist/migrations/query-interface.d.ts +335 -0
- package/dist/migrations/seeder.d.ts +167 -0
- package/dist/models/associations.d.ts +131 -0
- package/dist/models/associations.js +7 -2
- package/dist/models/constraints.d.ts +175 -0
- package/dist/models/data-types.d.ts +1656 -0
- package/dist/models/decorators.d.ts +328 -0
- package/dist/models/decorators.js +61 -82
- package/dist/models/eager-load.d.ts +86 -0
- package/dist/models/eager-load.js +369 -0
- package/dist/models/index.d.ts +13 -0
- package/dist/models/indexes.d.ts +325 -0
- package/dist/models/methods.d.ts +419 -0
- package/dist/models/model-manager.d.ts +76 -0
- package/dist/models/model.d.ts +820 -0
- package/dist/models/model.js +15 -101
- package/dist/models/operators.d.ts +29 -0
- package/dist/models/scopes.d.ts +71 -0
- package/dist/models/typescript-types.d.ts +177 -0
- package/dist/nosql/aerospike/index.d.ts +126 -0
- package/dist/nosql/allegrograph/index.d.ts +86 -0
- package/dist/nosql/arangodb/index.d.ts +285 -0
- package/dist/nosql/arangodb/index.js +274 -2
- package/dist/nosql/arangodb/where.d.ts +38 -0
- package/dist/nosql/arangodb/where.js +94 -0
- package/dist/nosql/azure-blob/index.d.ts +104 -0
- package/dist/nosql/beanstalkd/index.d.ts +88 -0
- package/dist/nosql/beequeue/index.d.ts +99 -0
- package/dist/nosql/bigchaindb/index.d.ts +113 -0
- package/dist/nosql/bigtable/index.d.ts +144 -0
- package/dist/nosql/blazegraph/index.d.ts +88 -0
- package/dist/nosql/bullmq/index.d.ts +83 -0
- package/dist/nosql/cassandra/index.d.ts +119 -0
- package/dist/nosql/chroma/index.d.ts +151 -0
- package/dist/nosql/cloudflare-kv/index.d.ts +120 -0
- package/dist/nosql/coherence/index.d.ts +91 -0
- package/dist/nosql/cosmosdb/index.d.ts +78 -0
- package/dist/nosql/couchbase/index.d.ts +103 -0
- package/dist/nosql/dax/index.d.ts +118 -0
- package/dist/nosql/deno-kv/index.d.ts +109 -0
- package/dist/nosql/dgraph/index.d.ts +80 -0
- package/dist/nosql/doris/index.d.ts +88 -0
- package/dist/nosql/druid/index.d.ts +95 -0
- package/dist/nosql/dynamodb/index.d.ts +643 -0
- package/dist/nosql/dynamodb/index.js +423 -0
- package/dist/nosql/elasticsearch/index.d.ts +239 -0
- package/dist/nosql/etcd/index.d.ts +243 -0
- package/dist/nosql/eventhubs/index.d.ts +89 -0
- package/dist/nosql/eventstore/index.d.ts +102 -0
- package/dist/nosql/faunadb/index.d.ts +141 -0
- package/dist/nosql/faunadb/index.js +329 -0
- package/dist/nosql/firestore/index.d.ts +67 -0
- package/dist/nosql/fluree/index.d.ts +88 -0
- package/dist/nosql/fuseki/index.d.ts +94 -0
- package/dist/nosql/gcs/index.d.ts +62 -0
- package/dist/nosql/gearman/index.d.ts +77 -0
- package/dist/nosql/geode/index.d.ts +93 -0
- package/dist/nosql/graphdb/index.d.ts +86 -0
- package/dist/nosql/graylog/index.d.ts +118 -0
- package/dist/nosql/gridgain/index.d.ts +78 -0
- package/dist/nosql/hazelcast/index.d.ts +73 -0
- package/dist/nosql/hbase/index.d.ts +123 -0
- package/dist/nosql/ignite/index.d.ts +80 -0
- package/dist/nosql/immudb/index.d.ts +131 -0
- package/dist/nosql/index.d.ts +215 -0
- package/dist/nosql/infinispan/index.d.ts +95 -0
- package/dist/nosql/influxdb/flux-compiler.d.ts +23 -0
- package/dist/nosql/influxdb/flux-compiler.js +170 -0
- package/dist/nosql/influxdb/index.d.ts +300 -0
- package/dist/nosql/influxdb/index.js +0 -0
- package/dist/nosql/kafka/index.d.ts +113 -0
- package/dist/nosql/keyspaces/index.d.ts +122 -0
- package/dist/nosql/kinesis/index.d.ts +121 -0
- package/dist/nosql/leveldb/index.d.ts +112 -0
- package/dist/nosql/leveldb/index.js +103 -1
- package/dist/nosql/lmdb/index.d.ts +76 -0
- package/dist/nosql/loki/index.d.ts +126 -0
- package/dist/nosql/marklogic/index.d.ts +76 -0
- package/dist/nosql/materialize/index.d.ts +91 -0
- package/dist/nosql/meilisearch/index.d.ts +76 -0
- package/dist/nosql/memcached/index.d.ts +138 -0
- package/dist/nosql/milvus/index.d.ts +167 -0
- package/dist/nosql/minio/index.d.ts +122 -0
- package/dist/nosql/momento/index.d.ts +99 -0
- package/dist/nosql/mongodb/index.d.ts +265 -0
- package/dist/nosql/mongodb/index.js +139 -0
- package/dist/nosql/mongodb/where.d.ts +8 -0
- package/dist/nosql/mongodb/where.js +181 -0
- package/dist/nosql/nats/index.d.ts +139 -0
- package/dist/nosql/nedb/index.d.ts +79 -0
- package/dist/nosql/neo4j/index.d.ts +217 -0
- package/dist/nosql/neo4j/index.js +26 -14
- package/dist/nosql/neptune/index.d.ts +234 -0
- package/dist/nosql/neptune/index.js +23 -9
- package/dist/nosql/nsq/index.d.ts +93 -0
- package/dist/nosql/opensearch/index.d.ts +97 -0
- package/dist/nosql/orientdb/index.d.ts +72 -0
- package/dist/nosql/papertrail/index.d.ts +120 -0
- package/dist/nosql/pinecone/index.d.ts +148 -0
- package/dist/nosql/pinot/index.d.ts +90 -0
- package/dist/nosql/pouchdb/index.d.ts +95 -0
- package/dist/nosql/prometheus/index.d.ts +112 -0
- package/dist/nosql/provendb/index.d.ts +143 -0
- package/dist/nosql/provendb/index.js +262 -0
- package/dist/nosql/pubsub/index.d.ts +83 -0
- package/dist/nosql/pulsar/index.d.ts +105 -0
- package/dist/nosql/qdrant/index.d.ts +231 -0
- package/dist/nosql/qldb/index.d.ts +182 -0
- package/dist/nosql/qldb/index.js +302 -1
- package/dist/nosql/r2/index.d.ts +160 -0
- package/dist/nosql/rabbitmq/index.d.ts +131 -0
- package/dist/nosql/ravendb/index.d.ts +138 -0
- package/dist/nosql/ravendb/index.js +323 -9
- package/dist/nosql/ravendb/where.d.ts +38 -0
- package/dist/nosql/ravendb/where.js +94 -0
- package/dist/nosql/redis/index.d.ts +267 -0
- package/dist/nosql/redis/index.js +19 -5
- package/dist/nosql/redpanda/index.d.ts +117 -0
- package/dist/nosql/resque/index.d.ts +91 -0
- package/dist/nosql/rethinkdb/index.d.ts +194 -0
- package/dist/nosql/rethinkdb/index.js +290 -0
- package/dist/nosql/rethinkdb/where.d.ts +38 -0
- package/dist/nosql/rethinkdb/where.js +94 -0
- package/dist/nosql/rocksdb/document-layer.d.ts +162 -0
- package/dist/nosql/rocksdb/document-layer.js +338 -0
- package/dist/nosql/rocksdb/index.d.ts +112 -0
- package/dist/nosql/rocksdb/index.js +103 -1
- package/dist/nosql/rocksdb/where-match.d.ts +21 -0
- package/dist/nosql/rocksdb/where-match.js +238 -0
- package/dist/nosql/rockset/index.d.ts +84 -0
- package/dist/nosql/s3/index.d.ts +170 -0
- package/dist/nosql/scylladb/index.d.ts +117 -0
- package/dist/nosql/signoz/index.d.ts +116 -0
- package/dist/nosql/sns/index.d.ts +99 -0
- package/dist/nosql/solr/index.d.ts +129 -0
- package/dist/nosql/splunk/index.d.ts +125 -0
- package/dist/nosql/sqs/index.d.ts +116 -0
- package/dist/nosql/stardog/index.d.ts +86 -0
- package/dist/nosql/starrocks/index.d.ts +89 -0
- package/dist/nosql/store.d.ts +23 -0
- package/dist/nosql/sumologic/index.d.ts +119 -0
- package/dist/nosql/surrealdb/index.d.ts +156 -0
- package/dist/nosql/surrealdb/index.js +174 -1
- package/dist/nosql/surrealdb/query-compiler.d.ts +26 -0
- package/dist/nosql/surrealdb/query-compiler.js +193 -0
- package/dist/nosql/terminusdb/index.d.ts +95 -0
- package/dist/nosql/tigergraph/index.d.ts +314 -0
- package/dist/nosql/typesense/index.d.ts +82 -0
- package/dist/nosql/unqlite/index.d.ts +68 -0
- package/dist/nosql/upstash/index.d.ts +80 -0
- package/dist/nosql/vercel-kv/index.d.ts +82 -0
- package/dist/nosql/victoriametrics/index.d.ts +129 -0
- package/dist/nosql/virtuoso/index.d.ts +87 -0
- package/dist/nosql/weaviate/index.d.ts +196 -0
- package/dist/operators/index.d.ts +7 -0
- package/dist/operators.d.ts +2947 -0
- package/dist/operators.js +46 -1
- package/dist/prisma-migrate/index.d.ts +28 -0
- package/dist/prisma-migrate/migration-generator.d.ts +21 -0
- package/dist/prisma-migrate/model-generator.d.ts +12 -0
- package/dist/prisma-migrate/relations.d.ts +28 -0
- package/dist/prisma-migrate/schema-parser.d.ts +42 -0
- package/dist/prisma-migrate/type-mapper.d.ts +20 -0
- package/dist/prorm.d.ts +2093 -0
- package/dist/prorm.js +721 -302
- package/dist/query-builders/cte-builder.d.ts +104 -0
- package/dist/query-builders/functions/aggregate.d.ts +199 -0
- package/dist/query-builders/functions/conditional.d.ts +195 -0
- package/dist/query-builders/functions/datetime.d.ts +202 -0
- package/dist/query-builders/functions/fulltext.d.ts +220 -0
- package/dist/query-builders/functions/index.d.ts +17 -0
- package/dist/query-builders/functions/json.d.ts +157 -0
- package/dist/query-builders/functions/math.d.ts +215 -0
- package/dist/query-builders/functions/string.d.ts +233 -0
- package/dist/query-builders/functions/window.d.ts +209 -0
- package/dist/query-builders/include-builder.d.ts +85 -0
- package/dist/query-builders/index-expression-builder.d.ts +153 -0
- package/dist/query-builders/index.d.ts +121 -0
- package/dist/query-builders/index.js +10 -0
- package/dist/query-builders/insert-builder.d.ts +62 -0
- package/dist/query-builders/model-helpers.d.ts +28 -0
- package/dist/query-builders/order-limit-builder.d.ts +84 -0
- package/dist/query-builders/sql-compiler.d.ts +562 -0
- package/dist/query-builders/subquery-builder.d.ts +133 -0
- package/dist/query-builders/update-builder.d.ts +71 -0
- package/dist/query-builders/view-builder.d.ts +189 -0
- package/dist/query-builders/where-builder.d.ts +124 -0
- package/dist/query-interface.d.ts +407 -0
- package/dist/query-interface.js +84 -0
- package/dist/query-optimizers/batch-optimizer.d.ts +175 -0
- package/dist/query-optimizers/explain-plans.d.ts +187 -0
- package/dist/query-optimizers/index.d.ts +27 -0
- package/dist/query-optimizers/prepared-statement-cache.d.ts +252 -0
- package/dist/query-optimizers/query-hints.d.ts +201 -0
- package/dist/query-optimizers/query-optimizer.d.ts +162 -0
- package/dist/query-optimizers/slow-query-logger.d.ts +186 -0
- package/dist/replica-manager.d.ts +235 -0
- package/dist/schema/index.d.ts +7 -0
- package/dist/schema/migration-generator.d.ts +74 -0
- package/dist/schema/schema-differ.d.ts +114 -0
- package/dist/schema/types.d.ts +246 -0
- package/dist/schema-objects.d.ts +78 -0
- package/dist/schema-objects.js +203 -0
- package/dist/sql-constants.d.ts +240 -0
- package/dist/sqlite-advanced.d.ts +572 -0
- package/dist/streams/index.d.ts +5 -0
- package/dist/streams/transforms.d.ts +120 -0
- package/dist/transaction.d.ts +221 -0
- package/dist/types/index.d.ts +3123 -0
- package/dist/user-management.d.ts +141 -0
- package/dist/utils/date.d.ts +149 -0
- package/dist/utils/index.d.ts +359 -0
- package/dist/utils/string.d.ts +88 -0
- package/dist/validators/index.d.ts +7 -0
- package/dist/validators/validator.d.ts +306 -0
- package/package.json +20 -5
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* YugabyteDB dialect implementation for the TypeScript ORM
|
|
3
|
+
*
|
|
4
|
+
* YugabyteDB's YSQL API reuses the PostgreSQL query layer (it is literally
|
|
5
|
+
* forked from the PostgreSQL source), so it speaks the PostgreSQL wire
|
|
6
|
+
* protocol and is largely SQL-compatible with PostgreSQL. This dialect
|
|
7
|
+
* therefore `extends PostgresDialect` and reuses the same `pg` driver
|
|
8
|
+
* (`library === 'pg'`). Notable differences from the Postgres dialect that
|
|
9
|
+
* this class layers on top:
|
|
10
|
+
*
|
|
11
|
+
* - Default port is 5433 (not Postgres's 5432). YugabyteDB's YSQL server
|
|
12
|
+
* listens on 5433 by default; 5432 is used by other services in some
|
|
13
|
+
* deployments.
|
|
14
|
+
* - `SPLIT INTO n TABLETS` / `SPLIT AT VALUES (...)`: because YugabyteDB
|
|
15
|
+
* shards ("tablets") tables across nodes, `CREATE TABLE`/`CREATE INDEX`
|
|
16
|
+
* accepts pre-splitting clauses to control the initial tablet layout.
|
|
17
|
+
* `SPLIT INTO n TABLETS` presplits a hash-sharded table/index into `n`
|
|
18
|
+
* tablets; `SPLIT AT VALUES ((a), (b), ...)` presplits a range-sharded
|
|
19
|
+
* table/index at the given range boundaries. See
|
|
20
|
+
* https://docs.yugabyte.com/preview/api/ysql/the-sql-language/statements/ddl_create_table/#split-into
|
|
21
|
+
* - Colocated tables: small tables can be co-located onto a single tablet
|
|
22
|
+
* with `WITH (colocated = true)` (older syntax) / `WITH (colocation = true)`
|
|
23
|
+
* to avoid the overhead of a tablet-per-table. See
|
|
24
|
+
* https://docs.yugabyte.com/preview/architecture/docdb-sharding/colocated-tables/
|
|
25
|
+
* - Primary-key column ordering: unlike Postgres, a YugabyteDB primary key
|
|
26
|
+
* column carries a sharding/sort directive — `HASH` (hash-sharded, the
|
|
27
|
+
* default for the first PK column) or `ASC`/`DESC` (range-sharded). This is
|
|
28
|
+
* emitted as `PRIMARY KEY (id HASH, created_at DESC)`. See
|
|
29
|
+
* https://docs.yugabyte.com/preview/architecture/docdb-sharding/sharding/
|
|
30
|
+
* - `CREATE TABLEGROUP`: YugabyteDB groups tables that should share tablets
|
|
31
|
+
* into a tablegroup; `createTableGroup()` is a small helper that emits the
|
|
32
|
+
* DDL and `buildCreateTableGroupSQL()` builds it synchronously.
|
|
33
|
+
*
|
|
34
|
+
* Behavioral notes shared with PostgreSQL (inherited, called out here so
|
|
35
|
+
* callers know the caveats):
|
|
36
|
+
* - Because YSQL is the PostgreSQL wire protocol, connection handling,
|
|
37
|
+
* parameter binding, transactions, and most query building are inherited
|
|
38
|
+
* unchanged from {@link PostgresDialect}.
|
|
39
|
+
* - `CREATE INDEX ... CONCURRENTLY` behaves differently: in YugabyteDB online
|
|
40
|
+
* index backfill is the default mechanism and `CONCURRENTLY` has its own
|
|
41
|
+
* semantics/restrictions (and cannot run inside a transaction block), so it
|
|
42
|
+
* should not be assumed to behave identically to vanilla PostgreSQL.
|
|
43
|
+
* - Some PostgreSQL system-catalog (`pg_catalog`) internals differ: YugabyteDB
|
|
44
|
+
* emulates the catalogs for compatibility but a handful of columns/values
|
|
45
|
+
* reflect its distributed storage rather than a single-node heap.
|
|
46
|
+
*/
|
|
47
|
+
import { PostgresDialect, PostgresDialectOptions, PostgresTransaction } from '../postgres/index';
|
|
48
|
+
import { ColumnDefinition, TableOptions, IndexOptions } from '../dialect';
|
|
49
|
+
import { QueryOptions, QueryResult, TransactionOptions } from '../../types';
|
|
50
|
+
/**
|
|
51
|
+
* Sharding/sort directive for a single YugabyteDB primary-key column.
|
|
52
|
+
*
|
|
53
|
+
* - `HASH` — hash-shard on this column (the storage is distributed by a hash
|
|
54
|
+
* of the column; only meaningful on leading PK columns).
|
|
55
|
+
* - `ASC` / `DESC` — range-shard, storing rows in ascending/descending order
|
|
56
|
+
* of this column.
|
|
57
|
+
*/
|
|
58
|
+
export type YugabytePrimaryKeyOrder = 'HASH' | 'ASC' | 'DESC';
|
|
59
|
+
/** A single primary-key column together with its sharding/sort directive. */
|
|
60
|
+
export interface YugabytePrimaryKeyColumn {
|
|
61
|
+
/** Column name */
|
|
62
|
+
name: string;
|
|
63
|
+
/** Sharding/sort order for this PK column (`HASH` / `ASC` / `DESC`). */
|
|
64
|
+
order?: YugabytePrimaryKeyOrder;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* YugabyteDB-specific `CREATE TABLE` options. These extend the shared
|
|
68
|
+
* {@link TableOptions} with YugabyteDB's distributed-storage knobs. Passed
|
|
69
|
+
* alongside the common options to {@link YugabyteDBDialect.buildCreateTableSQL}
|
|
70
|
+
* / {@link YugabyteDBDialect.createTable}.
|
|
71
|
+
*/
|
|
72
|
+
export interface YugabyteTableOptions extends TableOptions {
|
|
73
|
+
/**
|
|
74
|
+
* Table-level primary key with per-column sharding/sort directives, emitted
|
|
75
|
+
* as `PRIMARY KEY (col HASH, col2 ASC, ...)`. Use this (instead of the
|
|
76
|
+
* column-level `primaryKey: true`) when the PK needs an explicit `HASH` /
|
|
77
|
+
* `ASC` / `DESC` layout.
|
|
78
|
+
*/
|
|
79
|
+
primaryKey?: YugabytePrimaryKeyColumn[];
|
|
80
|
+
/**
|
|
81
|
+
* Presplit a hash-sharded table into this many tablets:
|
|
82
|
+
* `SPLIT INTO n TABLETS`.
|
|
83
|
+
*/
|
|
84
|
+
splitIntoTablets?: number;
|
|
85
|
+
/**
|
|
86
|
+
* Presplit a range-sharded table at the given boundaries:
|
|
87
|
+
* `SPLIT AT VALUES ((a), (b), ...)`. Each inner array is one split point's
|
|
88
|
+
* column value(s).
|
|
89
|
+
*/
|
|
90
|
+
splitAtValues?: Array<Array<string | number>>;
|
|
91
|
+
/**
|
|
92
|
+
* Co-locate this table onto the database's colocation tablet:
|
|
93
|
+
* `WITH (colocated = true)`.
|
|
94
|
+
*/
|
|
95
|
+
colocated?: boolean;
|
|
96
|
+
/** Alias for {@link YugabyteTableOptions.colocated} using the newer keyword `colocation`. */
|
|
97
|
+
colocation?: boolean;
|
|
98
|
+
/** Place the table in a tablegroup: `TABLEGROUP name`. */
|
|
99
|
+
tablegroup?: string;
|
|
100
|
+
}
|
|
101
|
+
/** Options for {@link YugabyteDBDialect.createTableGroup}. */
|
|
102
|
+
export interface YugabyteCreateTableGroupOptions {
|
|
103
|
+
/** Emit `IF NOT EXISTS`. */
|
|
104
|
+
ifNotExists?: boolean;
|
|
105
|
+
/** Owner role for the tablegroup (`OWNER role`). */
|
|
106
|
+
owner?: string;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* YugabyteDB connection options — identical to {@link PostgresDialectOptions}
|
|
110
|
+
* (same `pg` driver), just defaulting to port 5433.
|
|
111
|
+
*/
|
|
112
|
+
export interface YugabyteDBDialectOptions extends PostgresDialectOptions {
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Options for {@link YugabyteDBDialect.runTransaction}: the standard
|
|
116
|
+
* {@link TransactionOptions} plus a `maxRetries` cap on how many times the
|
|
117
|
+
* transaction body is re-run after a retryable (serialization/conflict) error.
|
|
118
|
+
*/
|
|
119
|
+
export interface YugabyteRunTransactionOptions extends TransactionOptions {
|
|
120
|
+
/**
|
|
121
|
+
* Maximum number of times the transaction body is retried after a retryable
|
|
122
|
+
* error (SQLSTATE 40001 serialization failure, 40P01 deadlock, or a
|
|
123
|
+
* YugabyteDB "Restart read required"/conflict abort) before the error is
|
|
124
|
+
* rethrown. Defaults to 5.
|
|
125
|
+
*/
|
|
126
|
+
maxRetries?: number;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* YugabyteDB dialect. Postgres-wire-compatible: reuses the `pg` driver and the
|
|
130
|
+
* PostgreSQL query-building layer, layering on YugabyteDB's distributed-table
|
|
131
|
+
* DDL (tablet splitting, colocation, hash/range primary keys, tablegroups).
|
|
132
|
+
*/
|
|
133
|
+
export declare class YugabyteDBDialect extends PostgresDialect {
|
|
134
|
+
readonly name: YugabyteDBDialect["name"];
|
|
135
|
+
constructor(config: YugabyteDBDialectOptions);
|
|
136
|
+
/** Default cap on transaction/statement retries after a retryable error. */
|
|
137
|
+
private static readonly DEFAULT_MAX_RETRIES;
|
|
138
|
+
/**
|
|
139
|
+
* Determine whether an error signals that the client should retry the
|
|
140
|
+
* transaction (or statement) that produced it. Detects the SQLSTATE codes
|
|
141
|
+
* (`40001`, `40P01`) as well as YugabyteDB's textual conflict/read-restart
|
|
142
|
+
* signals, which some driver/wrapper paths surface without a `.code`.
|
|
143
|
+
*/
|
|
144
|
+
isRetryableError(error: unknown): boolean;
|
|
145
|
+
/** Sleep with capped exponential backoff + jitter for retry attempt `n` (1-based). */
|
|
146
|
+
private backoffDelay;
|
|
147
|
+
/**
|
|
148
|
+
* Execute a single SQL statement, automatically retrying it on a retryable
|
|
149
|
+
* serialization/conflict error. Statements run through {@link query} are
|
|
150
|
+
* auto-committed by the server, so retrying the whole statement is safe and
|
|
151
|
+
* correct. Statements executed inside an explicit transaction go through the
|
|
152
|
+
* transaction's own client (not this method), so they are unaffected — use
|
|
153
|
+
* {@link runTransaction} to retry a multi-statement unit of work atomically.
|
|
154
|
+
*/
|
|
155
|
+
query(sql: string, options?: QueryOptions): Promise<QueryResult>;
|
|
156
|
+
/**
|
|
157
|
+
* Run a function inside a YugabyteDB transaction, retrying the *entire
|
|
158
|
+
* transaction body* on a retryable serialization/conflict error (SQLSTATE
|
|
159
|
+
* `40001`/`40P01`, or a "Restart read required"/conflict abort). This
|
|
160
|
+
* implements YugabyteDB's documented client-side retry contract: on a
|
|
161
|
+
* retryable failure the transaction is rolled back and re-run from the
|
|
162
|
+
* beginning on a fresh connection.
|
|
163
|
+
*
|
|
164
|
+
* @param fn - Callback that receives the transaction and performs the work to
|
|
165
|
+
* (re)try. It may be invoked more than once, so it must be idempotent apart
|
|
166
|
+
* from its database effects (which are rolled back between attempts).
|
|
167
|
+
* @param options - Transaction options plus an optional `maxRetries` (default
|
|
168
|
+
* 5) capping how many times `fn` is retried before the error is rethrown.
|
|
169
|
+
*/
|
|
170
|
+
runTransaction<T>(fn: (tx: PostgresTransaction) => Promise<T>, options?: YugabyteRunTransactionOptions): Promise<T>;
|
|
171
|
+
/**
|
|
172
|
+
* Quote a `SPLIT AT VALUES` / `PRIMARY KEY` scalar for inlining into DDL:
|
|
173
|
+
* numbers pass through, everything else is single-quoted and escaped.
|
|
174
|
+
*/
|
|
175
|
+
private quoteSplitValue;
|
|
176
|
+
/**
|
|
177
|
+
* Build the trailing YugabyteDB-specific clauses for a `CREATE TABLE`
|
|
178
|
+
* statement (colocation, tablegroup, tablet splitting), in the order
|
|
179
|
+
* YugabyteDB expects them. Returns an empty string when none apply.
|
|
180
|
+
*/
|
|
181
|
+
private buildYugabyteTableClauses;
|
|
182
|
+
/**
|
|
183
|
+
* Format a column `DEFAULT` value for inlining into DDL. Mirrors the base
|
|
184
|
+
* PostgreSQL dialect's behavior (which lives in a private helper we cannot
|
|
185
|
+
* call from here): numbers/booleans pass through; strings that look like a
|
|
186
|
+
* SQL function call (`gen_random_uuid()`), a `CURRENT_*` keyword, or `NULL`
|
|
187
|
+
* are emitted raw rather than quoted; `DataType` instances that expose
|
|
188
|
+
* `toDefaultValue()` (e.g. `DataTypes.NOW`) delegate to it; everything else
|
|
189
|
+
* is single-quoted and escaped.
|
|
190
|
+
*/
|
|
191
|
+
private formatDefaultValue;
|
|
192
|
+
/**
|
|
193
|
+
* Emit a column-level `REFERENCES` (foreign key) clause, if the column
|
|
194
|
+
* carries one. Handles composite reference targets.
|
|
195
|
+
*/
|
|
196
|
+
private buildColumnReferencesSql;
|
|
197
|
+
/**
|
|
198
|
+
* Build a single column definition for a `CREATE TABLE` statement. Kept
|
|
199
|
+
* self-contained (rather than reusing the base class's private helper) so
|
|
200
|
+
* this dialect can synchronously assemble DDL. Column-level `primaryKey` is
|
|
201
|
+
* intentionally NOT emitted here — YugabyteDB primary keys are emitted as a
|
|
202
|
+
* table-level `PRIMARY KEY (...)` (see {@link buildPrimaryKeyClause}) so the
|
|
203
|
+
* per-column `HASH`/`ASC`/`DESC` directive can be attached.
|
|
204
|
+
*/
|
|
205
|
+
private buildColumnDefinitionSql;
|
|
206
|
+
/**
|
|
207
|
+
* Build a table-level constraint clause (`PRIMARY KEY`/`UNIQUE`/
|
|
208
|
+
* `FOREIGN KEY`/`CHECK`) for inlining into a `CREATE TABLE` statement.
|
|
209
|
+
* Mirrors the base PostgreSQL dialect's private helper (which we cannot call
|
|
210
|
+
* from here). Returns null for an unrecognized/empty constraint.
|
|
211
|
+
*/
|
|
212
|
+
private buildYbConstraintSql;
|
|
213
|
+
/**
|
|
214
|
+
* Build the table-level `PRIMARY KEY (col HASH, col2 ASC, ...)` clause from
|
|
215
|
+
* either the explicit {@link YugabyteTableOptions.primaryKey} directive list
|
|
216
|
+
* or, failing that, any columns flagged with column-level `primaryKey: true`
|
|
217
|
+
* (which get no explicit sharding directive). Returns null when there is no
|
|
218
|
+
* primary key to emit.
|
|
219
|
+
*/
|
|
220
|
+
private buildPrimaryKeyClause;
|
|
221
|
+
/**
|
|
222
|
+
* Synchronously build a YugabyteDB `CREATE TABLE` statement, including the
|
|
223
|
+
* distributed-table clauses (hash/range primary key, colocation,
|
|
224
|
+
* tablegroup, tablet splitting). Used by {@link createTable} and directly
|
|
225
|
+
* testable without a live connection.
|
|
226
|
+
*/
|
|
227
|
+
buildCreateTableSQL(tableName: string, columns: Record<string, ColumnDefinition>, options?: YugabyteTableOptions): string;
|
|
228
|
+
/**
|
|
229
|
+
* Create a new table. Overrides {@link PostgresDialect.createTable} so the
|
|
230
|
+
* YugabyteDB-specific clauses (tablet splitting, colocation, hash/range
|
|
231
|
+
* primary keys, tablegroup) are emitted. Falls back to the inherited
|
|
232
|
+
* Postgres implementation when no YugabyteDB-specific option is present, so
|
|
233
|
+
* indexes/comments/uniqueKeys handling is preserved for the common case.
|
|
234
|
+
*/
|
|
235
|
+
createTable(tableName: string, columns: Record<string, ColumnDefinition>, options?: YugabyteTableOptions): Promise<void>;
|
|
236
|
+
/**
|
|
237
|
+
* Emit the follow-up statements PostgresDialect runs after `CREATE TABLE`
|
|
238
|
+
* (unique keys, table comment, sequence start value, secondary indexes).
|
|
239
|
+
* Kept here because the base dialect performs them inline in its own
|
|
240
|
+
* `createTable`, which the YugabyteDB custom-DDL path bypasses.
|
|
241
|
+
*/
|
|
242
|
+
private applyPostCreateTableSteps;
|
|
243
|
+
/**
|
|
244
|
+
* Add an index to a table.
|
|
245
|
+
*
|
|
246
|
+
* Overrides {@link PostgresDialect.addIndex} only to account for
|
|
247
|
+
* YugabyteDB's `CREATE INDEX ... CONCURRENTLY` divergence: in YugabyteDB
|
|
248
|
+
* index backfill is already online by default, and `CONCURRENTLY` carries
|
|
249
|
+
* different semantics/restrictions (notably it cannot run inside a
|
|
250
|
+
* transaction block). Like the CockroachDB dialect, a requested
|
|
251
|
+
* `concurrently` flag is ignored (with a warning) rather than emitted, so
|
|
252
|
+
* the generated SQL stays safe to run in the common (transactional) case.
|
|
253
|
+
* All other index-building behavior is inherited unchanged.
|
|
254
|
+
*/
|
|
255
|
+
addIndex(tableName: string, indexName: string, fields?: string[], options?: IndexOptions): Promise<void>;
|
|
256
|
+
/**
|
|
257
|
+
* Build a `CREATE TABLEGROUP` statement synchronously.
|
|
258
|
+
*/
|
|
259
|
+
buildCreateTableGroupSQL(name: string, options?: YugabyteCreateTableGroupOptions): string;
|
|
260
|
+
/**
|
|
261
|
+
* Create a tablegroup (`CREATE TABLEGROUP name`). Tables created with the
|
|
262
|
+
* `tablegroup` option share the tablegroup's tablets.
|
|
263
|
+
*/
|
|
264
|
+
createTableGroup(name: string, options?: YugabyteCreateTableGroupOptions): Promise<void>;
|
|
265
|
+
/**
|
|
266
|
+
* Drop a tablegroup (`DROP TABLEGROUP [IF EXISTS] name`).
|
|
267
|
+
*/
|
|
268
|
+
dropTableGroup(name: string, options?: {
|
|
269
|
+
ifExists?: boolean;
|
|
270
|
+
}): Promise<void>;
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Create a new YugabyteDB dialect instance.
|
|
274
|
+
*/
|
|
275
|
+
export declare function createYugabyteDBDialect(options?: YugabyteDBDialectOptions): YugabyteDBDialect;
|
|
276
|
+
export default YugabyteDBDialect;
|
|
@@ -63,6 +63,108 @@ class YugabyteDBDialect extends index_1.PostgresDialect {
|
|
|
63
63
|
// pg driver, so `library` ('pg') is inherited unchanged.
|
|
64
64
|
this.name = 'yugabytedb';
|
|
65
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* Determine whether an error signals that the client should retry the
|
|
68
|
+
* transaction (or statement) that produced it. Detects the SQLSTATE codes
|
|
69
|
+
* (`40001`, `40P01`) as well as YugabyteDB's textual conflict/read-restart
|
|
70
|
+
* signals, which some driver/wrapper paths surface without a `.code`.
|
|
71
|
+
*/
|
|
72
|
+
isRetryableError(error) {
|
|
73
|
+
if (!error) {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
const err = error;
|
|
77
|
+
if (err.code === '40001' || err.code === '40P01') {
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
80
|
+
if (err.cause && err.cause !== error && this.isRetryableError(err.cause)) {
|
|
81
|
+
return true;
|
|
82
|
+
}
|
|
83
|
+
const message = typeof err.message === 'string' ? err.message : String(error);
|
|
84
|
+
const normalized = message.toLowerCase();
|
|
85
|
+
return (message.includes('40001') ||
|
|
86
|
+
message.includes('40P01') ||
|
|
87
|
+
normalized.includes('serialization_failure') ||
|
|
88
|
+
normalized.includes('could not serialize') ||
|
|
89
|
+
normalized.includes('restart read required') ||
|
|
90
|
+
normalized.includes('read restart') ||
|
|
91
|
+
normalized.includes('restart transaction') ||
|
|
92
|
+
normalized.includes('conflicts with higher priority transaction') ||
|
|
93
|
+
normalized.includes('conflicts with committed transaction') ||
|
|
94
|
+
normalized.includes('transaction aborted') ||
|
|
95
|
+
normalized.includes('all transparent retries exhausted') ||
|
|
96
|
+
normalized.includes('operation expired'));
|
|
97
|
+
}
|
|
98
|
+
/** Sleep with capped exponential backoff + jitter for retry attempt `n` (1-based). */
|
|
99
|
+
async backoffDelay(attempt) {
|
|
100
|
+
const base = 50;
|
|
101
|
+
const max = 2000;
|
|
102
|
+
const delay = Math.min(max, base * 2 ** (attempt - 1));
|
|
103
|
+
const jittered = delay / 2 + Math.random() * (delay / 2);
|
|
104
|
+
await new Promise((resolve) => setTimeout(resolve, jittered));
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Execute a single SQL statement, automatically retrying it on a retryable
|
|
108
|
+
* serialization/conflict error. Statements run through {@link query} are
|
|
109
|
+
* auto-committed by the server, so retrying the whole statement is safe and
|
|
110
|
+
* correct. Statements executed inside an explicit transaction go through the
|
|
111
|
+
* transaction's own client (not this method), so they are unaffected — use
|
|
112
|
+
* {@link runTransaction} to retry a multi-statement unit of work atomically.
|
|
113
|
+
*/
|
|
114
|
+
async query(sql, options) {
|
|
115
|
+
const maxRetries = YugabyteDBDialect.DEFAULT_MAX_RETRIES;
|
|
116
|
+
for (let attempt = 0;; attempt++) {
|
|
117
|
+
try {
|
|
118
|
+
return await super.query(sql, options);
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
if (attempt < maxRetries && this.isRetryableError(error)) {
|
|
122
|
+
await this.backoffDelay(attempt + 1);
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
throw error;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Run a function inside a YugabyteDB transaction, retrying the *entire
|
|
131
|
+
* transaction body* on a retryable serialization/conflict error (SQLSTATE
|
|
132
|
+
* `40001`/`40P01`, or a "Restart read required"/conflict abort). This
|
|
133
|
+
* implements YugabyteDB's documented client-side retry contract: on a
|
|
134
|
+
* retryable failure the transaction is rolled back and re-run from the
|
|
135
|
+
* beginning on a fresh connection.
|
|
136
|
+
*
|
|
137
|
+
* @param fn - Callback that receives the transaction and performs the work to
|
|
138
|
+
* (re)try. It may be invoked more than once, so it must be idempotent apart
|
|
139
|
+
* from its database effects (which are rolled back between attempts).
|
|
140
|
+
* @param options - Transaction options plus an optional `maxRetries` (default
|
|
141
|
+
* 5) capping how many times `fn` is retried before the error is rethrown.
|
|
142
|
+
*/
|
|
143
|
+
async runTransaction(fn, options) {
|
|
144
|
+
const maxRetries = options?.maxRetries ?? YugabyteDBDialect.DEFAULT_MAX_RETRIES;
|
|
145
|
+
for (let attempt = 0;; attempt++) {
|
|
146
|
+
const transaction = (await this.startTransaction(options));
|
|
147
|
+
try {
|
|
148
|
+
const result = await fn(transaction);
|
|
149
|
+
await this.commitTransaction(transaction);
|
|
150
|
+
return result;
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
try {
|
|
154
|
+
await this.rollbackTransaction(transaction);
|
|
155
|
+
}
|
|
156
|
+
catch {
|
|
157
|
+
// The connection/transaction may already be unusable after the abort;
|
|
158
|
+
// ignore the rollback failure and act on the original error.
|
|
159
|
+
}
|
|
160
|
+
if (attempt < maxRetries && this.isRetryableError(error)) {
|
|
161
|
+
await this.backoffDelay(attempt + 1);
|
|
162
|
+
continue;
|
|
163
|
+
}
|
|
164
|
+
throw error;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
66
168
|
/**
|
|
67
169
|
* Quote a `SPLIT AT VALUES` / `PRIMARY KEY` scalar for inlining into DDL:
|
|
68
170
|
* numbers pass through, everything else is single-quoted and escaped.
|
|
@@ -415,6 +517,25 @@ class YugabyteDBDialect extends index_1.PostgresDialect {
|
|
|
415
517
|
}
|
|
416
518
|
}
|
|
417
519
|
exports.YugabyteDBDialect = YugabyteDBDialect;
|
|
520
|
+
// ---------------------------------------------------------------------------
|
|
521
|
+
// Distributed transaction retry.
|
|
522
|
+
//
|
|
523
|
+
// YugabyteDB is a distributed, strongly-consistent SQL database. Like
|
|
524
|
+
// CockroachDB (and unlike single-node Postgres), concurrent transactions can
|
|
525
|
+
// abort mid-flight with a serialization/conflict error that the client is
|
|
526
|
+
// expected to retry — SQLSTATE 40001 ("could not serialize"), 40P01
|
|
527
|
+
// (deadlock), or a YugabyteDB-specific "Restart read required"/"conflicts
|
|
528
|
+
// with ... transaction" abort. The inherited Postgres dialect performs no
|
|
529
|
+
// such retry (its query() only retries connection-level errors, and only when
|
|
530
|
+
// an explicit `retry` option is passed), so YugabyteDB layers automatic retry
|
|
531
|
+
// on top: single statements retry in `query()`, and multi-statement units of
|
|
532
|
+
// work retry as a whole via `runTransaction()`.
|
|
533
|
+
//
|
|
534
|
+
// @see https://docs.yugabyte.com/preview/architecture/transactions/read-restart-error/
|
|
535
|
+
// @see https://docs.yugabyte.com/preview/develop/learn/transactions/transactions-retries-ysql/
|
|
536
|
+
// ---------------------------------------------------------------------------
|
|
537
|
+
/** Default cap on transaction/statement retries after a retryable error. */
|
|
538
|
+
YugabyteDBDialect.DEFAULT_MAX_RETRIES = 5;
|
|
418
539
|
/**
|
|
419
540
|
* Create a new YugabyteDB dialect instance.
|
|
420
541
|
*/
|