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
|
@@ -2,16 +2,28 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* PostgreSQL dialect implementation for the TypeScript ORM
|
|
4
4
|
*/
|
|
5
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
6
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
7
|
-
};
|
|
8
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
6
|
exports.PostgresTransaction = exports.PostgresDialect = void 0;
|
|
10
7
|
exports.createPostgresDialect = createPostgresDialect;
|
|
11
|
-
const pg_1 = __importDefault(require("pg"));
|
|
12
8
|
const operators_1 = require("../../operators");
|
|
9
|
+
const operators_2 = require("../../operators");
|
|
13
10
|
const prorm_1 = require("../../prorm");
|
|
14
|
-
|
|
11
|
+
// Lazily-loaded `pg` driver. Required only when a connection is opened, so
|
|
12
|
+
// importing this ORM never loads the pg driver.
|
|
13
|
+
let pgModule = null;
|
|
14
|
+
function loadPg() {
|
|
15
|
+
if (!pgModule) {
|
|
16
|
+
try {
|
|
17
|
+
pgModule = require('pg');
|
|
18
|
+
}
|
|
19
|
+
catch (err) {
|
|
20
|
+
throw new Error("The 'pg' package is required to use the PostgreSQL dialect but could not be loaded. " +
|
|
21
|
+
'Install it with `npm install pg`. Original error: ' +
|
|
22
|
+
(err instanceof Error ? err.message : String(err)));
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return pgModule;
|
|
26
|
+
}
|
|
15
27
|
/**
|
|
16
28
|
* Build a PostgreSQL OPTIONS (...) clause from a plain object.
|
|
17
29
|
* Single-quotes each value and escapes existing single-quotes.
|
|
@@ -89,7 +101,7 @@ class PostgresDialect {
|
|
|
89
101
|
*/
|
|
90
102
|
async connect() {
|
|
91
103
|
try {
|
|
92
|
-
this.pool = new
|
|
104
|
+
this.pool = new (loadPg().Pool)({
|
|
93
105
|
host: this.config.host,
|
|
94
106
|
port: this.config.port,
|
|
95
107
|
user: this.config.username,
|
|
@@ -158,7 +170,7 @@ class PostgresDialect {
|
|
|
158
170
|
return this.notifyConnectPromise;
|
|
159
171
|
}
|
|
160
172
|
this.notifyConnectPromise = (async () => {
|
|
161
|
-
const client = new
|
|
173
|
+
const client = new (loadPg().Client)({
|
|
162
174
|
host: this.config.host,
|
|
163
175
|
port: this.config.port,
|
|
164
176
|
user: this.config.username,
|
|
@@ -3270,7 +3282,7 @@ class PostgresDialect {
|
|
|
3270
3282
|
const rawCond = condition;
|
|
3271
3283
|
const cond = { ...rawCond };
|
|
3272
3284
|
for (const sym of Object.getOwnPropertySymbols(rawCond)) {
|
|
3273
|
-
const strKey = (0,
|
|
3285
|
+
const strKey = (0, operators_2.operatorToWhereKey)(sym);
|
|
3274
3286
|
if (strKey)
|
|
3275
3287
|
cond[strKey] = rawCond[sym];
|
|
3276
3288
|
}
|
|
@@ -3308,7 +3320,7 @@ class PostgresDialect {
|
|
|
3308
3320
|
const rawValueObj = value;
|
|
3309
3321
|
const valueObj = { ...rawValueObj };
|
|
3310
3322
|
for (const sym of Object.getOwnPropertySymbols(rawValueObj)) {
|
|
3311
|
-
const strKey = (0,
|
|
3323
|
+
const strKey = (0, operators_2.operatorToWhereKey)(sym);
|
|
3312
3324
|
if (strKey)
|
|
3313
3325
|
valueObj[strKey] = rawValueObj[sym];
|
|
3314
3326
|
}
|
|
@@ -3842,6 +3854,15 @@ class PostgresDialect {
|
|
|
3842
3854
|
/**
|
|
3843
3855
|
* Check if a value is a literal expression (literal('sql'))
|
|
3844
3856
|
*/
|
|
3857
|
+
/**
|
|
3858
|
+
* Render a literal expression, substituting any `bindings` into its `?`
|
|
3859
|
+
* placeholders with dialect-correct escaping. `literalExpr(sql)` with no
|
|
3860
|
+
* bindings is unchanged; `literalExpr('x > ?', [v])` no longer requires the
|
|
3861
|
+
* caller to concatenate the value into the string themselves.
|
|
3862
|
+
*/
|
|
3863
|
+
literalSql(expr) {
|
|
3864
|
+
return (0, operators_1.expandLiteralBindings)(expr, (v) => this.escape(v));
|
|
3865
|
+
}
|
|
3845
3866
|
isLiteralExpression(value) {
|
|
3846
3867
|
return value !== null && typeof value === 'object' && value.__type === 'literal';
|
|
3847
3868
|
}
|
|
@@ -3885,7 +3906,7 @@ class PostgresDialect {
|
|
|
3885
3906
|
sql = this.escapeId(expr.col);
|
|
3886
3907
|
}
|
|
3887
3908
|
else if (this.isLiteralExpression(expr)) {
|
|
3888
|
-
sql = expr
|
|
3909
|
+
sql = this.literalSql(expr);
|
|
3889
3910
|
}
|
|
3890
3911
|
else if (typeof expr === 'string') {
|
|
3891
3912
|
// Check if it's a column reference or literal SQL
|
|
@@ -3909,7 +3930,7 @@ class PostgresDialect {
|
|
|
3909
3930
|
return this.escapeId(attr.col);
|
|
3910
3931
|
}
|
|
3911
3932
|
else if (this.isLiteralExpression(attr)) {
|
|
3912
|
-
return attr
|
|
3933
|
+
return this.literalSql(attr);
|
|
3913
3934
|
}
|
|
3914
3935
|
else if (typeof attr === 'string') {
|
|
3915
3936
|
// Plain column name
|
|
@@ -3950,7 +3971,7 @@ class PostgresDialect {
|
|
|
3950
3971
|
sql = this.escapeId(expr.col);
|
|
3951
3972
|
}
|
|
3952
3973
|
else if (this.isLiteralExpression(expr)) {
|
|
3953
|
-
sql = expr
|
|
3974
|
+
sql = this.literalSql(expr);
|
|
3954
3975
|
}
|
|
3955
3976
|
else if (typeof expr === 'string') {
|
|
3956
3977
|
sql = this.escapeId(expr);
|
|
@@ -3971,7 +3992,7 @@ class PostgresDialect {
|
|
|
3971
3992
|
return this.escapeId(field.col);
|
|
3972
3993
|
}
|
|
3973
3994
|
else if (this.isLiteralExpression(field)) {
|
|
3974
|
-
return field
|
|
3995
|
+
return this.literalSql(field);
|
|
3975
3996
|
}
|
|
3976
3997
|
else if (typeof field === 'string') {
|
|
3977
3998
|
if (field.includes('.')) {
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dialect-agnostic fallback implementation of `Dialect.queryStream()`.
|
|
3
|
+
*
|
|
4
|
+
* Dialects whose driver exposes a real server-side cursor (postgres, mysql,
|
|
5
|
+
* cockroachdb) implement `queryStream` natively for true constant-memory
|
|
6
|
+
* streaming. Every other dialect uses `createPaginatedQueryStream()` here:
|
|
7
|
+
* it pages through the query via repeated `LIMIT`/`OFFSET`-equivalent
|
|
8
|
+
* queries (one dialect-appropriate page-clause per round trip, built with
|
|
9
|
+
* the dialect's own `buildLimitOffset()` by default), instead of loading the
|
|
10
|
+
* whole result set into memory at once. It's not as fast as a native cursor
|
|
11
|
+
* for very large result sets — each page is a fresh query — but it's
|
|
12
|
+
* correct on every dialect that can run a `SELECT * FROM (<sql>) AS alias`
|
|
13
|
+
* wrapped subquery with a trailing pagination clause, which is effectively
|
|
14
|
+
* all of them.
|
|
15
|
+
*/
|
|
16
|
+
import { Readable } from 'stream';
|
|
17
|
+
import type { StreamOptions } from '../types';
|
|
18
|
+
/**
|
|
19
|
+
* Minimal shape this helper needs from a dialect — narrower than the full
|
|
20
|
+
* `Dialect` interface so it can be unit tested with a stub.
|
|
21
|
+
*/
|
|
22
|
+
export interface StreamableDialect {
|
|
23
|
+
query(sql: string, options?: any): Promise<{
|
|
24
|
+
rows: any[];
|
|
25
|
+
}>;
|
|
26
|
+
buildLimitOffset(limit?: number | string, offset?: number | string): string;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Build the SQL for one page of a paginated stream. Exposed separately from
|
|
30
|
+
* `createPaginatedQueryStream()` so dialects with an unusual pagination
|
|
31
|
+
* syntax (see `createOracleQueryStream()`) can supply their own page-builder
|
|
32
|
+
* while still reusing the shared stream/backpressure/model-mapping logic.
|
|
33
|
+
*/
|
|
34
|
+
export declare function buildPaginatedPageQuery(dialect: Pick<StreamableDialect, 'buildLimitOffset'>, sql: string, limit: number, offset: number): string;
|
|
35
|
+
/**
|
|
36
|
+
* Generic LIMIT/OFFSET-paginated `queryStream` fallback. Suitable for any
|
|
37
|
+
* dialect whose `buildLimitOffset()` returns a self-sufficient trailing
|
|
38
|
+
* clause (sqlite, mariadb, redshift, snowflake, clickhouse, duckdb, hana,
|
|
39
|
+
* spanner, mssql, db2 all qualify — mssql's own `buildLimitOffset` already
|
|
40
|
+
* injects a no-op `ORDER BY` when none is supplied, so it works unmodified
|
|
41
|
+
* here).
|
|
42
|
+
*/
|
|
43
|
+
export declare function createPaginatedQueryStream(dialect: StreamableDialect, sql: string, options?: StreamOptions): Readable;
|
|
44
|
+
/**
|
|
45
|
+
* Oracle-specific streaming. Oracle's `buildLimitOffset()` returns a bare
|
|
46
|
+
* `WHERE ROWNUM <= n` fragment that only limits the *first* n rows of the
|
|
47
|
+
* result set — it doesn't skip the first `offset` rows, so wrapping it the
|
|
48
|
+
* same way as `createPaginatedQueryStream()` would return the same leading
|
|
49
|
+
* rows on every page instead of paging forward. Rather than depend on that,
|
|
50
|
+
* this builds the standard "windowed ROWNUM" pagination idiom directly,
|
|
51
|
+
* which is correct for offset+limit on any Oracle version (no dependency on
|
|
52
|
+
* 12c's OFFSET/FETCH syntax):
|
|
53
|
+
*
|
|
54
|
+
* SELECT * FROM (
|
|
55
|
+
* SELECT a.*, ROWNUM rnum FROM (<sql>) a WHERE ROWNUM <= :offset + :limit
|
|
56
|
+
* ) WHERE rnum > :offset
|
|
57
|
+
*/
|
|
58
|
+
export declare function createOracleQueryStream(dialect: Pick<StreamableDialect, 'query'>, sql: string, options?: StreamOptions): Readable;
|
|
@@ -0,0 +1,430 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* QuestDB dialect implementation for the TypeScript ORM
|
|
3
|
+
*
|
|
4
|
+
* QuestDB is a high-performance, column-oriented time-series database that
|
|
5
|
+
* speaks the PostgreSQL wire protocol, so this dialect extends
|
|
6
|
+
* `PostgresDialect` and reuses the exact same `pg` driver. Everything is
|
|
7
|
+
* inherited from Postgres except the handful of areas where QuestDB's SQL
|
|
8
|
+
* dialect genuinely diverges. The notable differences this subclass models:
|
|
9
|
+
*
|
|
10
|
+
* - Default SQL port is 8812 (QuestDB's `pgwire` port), not Postgres's 5432.
|
|
11
|
+
*
|
|
12
|
+
* - Designated timestamp + partitioning. Time-series tables in QuestDB elect
|
|
13
|
+
* one `TIMESTAMP` column as the "designated timestamp" and are physically
|
|
14
|
+
* partitioned by a time unit:
|
|
15
|
+
* `CREATE TABLE t (...) TIMESTAMP(ts) PARTITION BY DAY`
|
|
16
|
+
* Supported partition units are `NONE | YEAR | MONTH | DAY | HOUR` (WEEK is
|
|
17
|
+
* also accepted by QuestDB but rarely used). These are supplied via the
|
|
18
|
+
* table options (`timestamp` + `partitionBy`).
|
|
19
|
+
*
|
|
20
|
+
* - `SYMBOL` type for low-cardinality repeated strings (e.g. ticker symbols,
|
|
21
|
+
* device ids). QuestDB stores SYMBOLs as an interned dictionary of ints,
|
|
22
|
+
* which is far more compact/faster than STRING for repeated values. Columns
|
|
23
|
+
* can opt into `SYMBOL CAPACITY n` (dictionary size hint) and `CACHE`
|
|
24
|
+
* (keep the dictionary in memory).
|
|
25
|
+
*
|
|
26
|
+
* - WAL tables. Partitioned tables can be created with a write-ahead log
|
|
27
|
+
* (`WAL`, the default in modern QuestDB) or without it (`BYPASS WAL`).
|
|
28
|
+
*
|
|
29
|
+
* - No traditional constraints. QuestDB has NO PRIMARY KEY, NO FOREIGN KEY,
|
|
30
|
+
* NO UNIQUE, NO NOT NULL and NO DEFAULT clauses in `CREATE TABLE` — those
|
|
31
|
+
* concepts don't exist in the engine, so they are deliberately omitted from
|
|
32
|
+
* the generated DDL. Row de-duplication is instead expressed with a
|
|
33
|
+
* `DEDUP UPSERT KEYS(...)` clause (WAL tables only), which upserts rows that
|
|
34
|
+
* share the given key columns (the designated timestamp must be one of
|
|
35
|
+
* them).
|
|
36
|
+
*
|
|
37
|
+
* - Type mapping. QuestDB's type names differ from Postgres's:
|
|
38
|
+
* INTEGER -> INT, BIGINT -> LONG, FLOAT -> FLOAT, DOUBLE -> DOUBLE,
|
|
39
|
+
* BOOLEAN -> BOOLEAN, STRING/TEXT/CHAR -> STRING, SYMBOL -> SYMBOL,
|
|
40
|
+
* DATE/DATETIME/TIME -> TIMESTAMP, BLOB -> BINARY, UUID -> UUID.
|
|
41
|
+
*
|
|
42
|
+
* The core DDL builder here (`buildCreateTableSQL`) is a pure, synchronous
|
|
43
|
+
* function that returns the SQL string, so it can be unit-tested without a
|
|
44
|
+
* live connection; `createTable()` simply runs it through the inherited
|
|
45
|
+
* `query()`.
|
|
46
|
+
*
|
|
47
|
+
* @see https://questdb.io/docs/
|
|
48
|
+
*/
|
|
49
|
+
import { PostgresDialect, PostgresDialectOptions } from '../postgres/index';
|
|
50
|
+
import { ColumnDefinition, TableOptions, InsertOptions, UpsertQueryOptions, UpdateOptions, DeleteOptions, IndexOptions, IndexDefinition, DropIndexOptions, ConstraintDefinition, TableDescription } from '../dialect';
|
|
51
|
+
import { DataType, WhereOptions, Order } from '../../types';
|
|
52
|
+
/**
|
|
53
|
+
* The time unit a QuestDB table is partitioned by. `NONE` produces an
|
|
54
|
+
* unpartitioned table (still allowed to have a designated timestamp).
|
|
55
|
+
* @see https://questdb.io/docs/concept/partitions/
|
|
56
|
+
*/
|
|
57
|
+
export type QuestDBPartitionUnit = 'NONE' | 'YEAR' | 'MONTH' | 'DAY' | 'HOUR' | 'WEEK';
|
|
58
|
+
/**
|
|
59
|
+
* QuestDB-specific per-column options layered on top of the shared
|
|
60
|
+
* {@link ColumnDefinition}. Not part of the cross-dialect column type, so
|
|
61
|
+
* callers targeting QuestDB pass these alongside the common column definition.
|
|
62
|
+
*/
|
|
63
|
+
export interface QuestDBColumnOptions {
|
|
64
|
+
/**
|
|
65
|
+
* Emit this column as a `SYMBOL` (QuestDB's interned low-cardinality string
|
|
66
|
+
* type) regardless of its declared `type`. Equivalent to using a data type
|
|
67
|
+
* whose `key` is `'SYMBOL'`.
|
|
68
|
+
*/
|
|
69
|
+
symbol?: boolean;
|
|
70
|
+
/** `SYMBOL CAPACITY n` — hint for the expected number of distinct values. */
|
|
71
|
+
symbolCapacity?: number;
|
|
72
|
+
/** `CACHE` — keep the symbol dictionary in memory for faster reads. */
|
|
73
|
+
symbolCache?: boolean;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* QuestDB-specific table options layered on top of the shared
|
|
77
|
+
* {@link TableOptions}. `partitionBy` is narrowed to QuestDB's time units.
|
|
78
|
+
*/
|
|
79
|
+
export interface QuestDBTableOptions {
|
|
80
|
+
/**
|
|
81
|
+
* Name of the column to elect as the table's designated timestamp. Required
|
|
82
|
+
* for time-partitioned tables and for `DEDUP`. Emits `TIMESTAMP(col)`.
|
|
83
|
+
*/
|
|
84
|
+
timestamp?: string;
|
|
85
|
+
/**
|
|
86
|
+
* Partition unit. Only emitted when a designated {@link timestamp} is set
|
|
87
|
+
* (QuestDB only partitions tables that have a designated timestamp).
|
|
88
|
+
* @default 'NONE'
|
|
89
|
+
*/
|
|
90
|
+
partitionBy?: QuestDBPartitionUnit;
|
|
91
|
+
/**
|
|
92
|
+
* Write-ahead-log setting for a partitioned table: `true` -> `WAL`,
|
|
93
|
+
* `false` -> `BYPASS WAL`. When omitted, QuestDB's server default applies
|
|
94
|
+
* and no WAL clause is emitted.
|
|
95
|
+
*/
|
|
96
|
+
wal?: boolean;
|
|
97
|
+
/**
|
|
98
|
+
* `DEDUP UPSERT KEYS(...)` columns. When present, QuestDB de-duplicates rows
|
|
99
|
+
* sharing these key values (WAL tables only). The designated timestamp must
|
|
100
|
+
* be included in the key set.
|
|
101
|
+
*/
|
|
102
|
+
dedupUpsertKeys?: string[];
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Options for a QuestDB `SAMPLE BY` time-bucketing clause — the headline
|
|
106
|
+
* QuestDB time-series aggregation that groups rows into fixed time intervals.
|
|
107
|
+
* @see https://questdb.io/docs/reference/sql/sample-by/
|
|
108
|
+
*/
|
|
109
|
+
export interface QuestDBSampleByOptions {
|
|
110
|
+
/** SAMPLE BY interval, e.g. `'5m'`, `'1h'`, `'1d'`, `'30s'`. */
|
|
111
|
+
interval: string;
|
|
112
|
+
/**
|
|
113
|
+
* `FILL(...)` strategy for gaps in the sampled series. Accepts a keyword
|
|
114
|
+
* (`'NONE' | 'NULL' | 'PREV' | 'LINEAR'`), a constant value, or a list of
|
|
115
|
+
* per-aggregate strategies/values (e.g. `['NULL', 21.5]`).
|
|
116
|
+
*/
|
|
117
|
+
fill?: 'NONE' | 'NULL' | 'PREV' | 'LINEAR' | number | Array<number | 'NULL' | 'PREV' | 'LINEAR'>;
|
|
118
|
+
/** `ALIGN TO CALENDAR` or `ALIGN TO FIRST OBSERVATION`. */
|
|
119
|
+
alignTo?: 'CALENDAR' | 'FIRST OBSERVATION';
|
|
120
|
+
/** Time zone for `ALIGN TO CALENDAR`, e.g. `'Europe/London'`. */
|
|
121
|
+
timeZone?: string;
|
|
122
|
+
/** Offset for `ALIGN TO CALENDAR`, e.g. `'00:30'`. */
|
|
123
|
+
offset?: string;
|
|
124
|
+
/** Lower time bound (`SAMPLE BY ... FROM ts`). */
|
|
125
|
+
from?: string;
|
|
126
|
+
/** Upper time bound (`SAMPLE BY ... TO ts`). */
|
|
127
|
+
to?: string;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* A QuestDB partition selector for partition-level DDL (drop/detach/attach).
|
|
131
|
+
* QuestDB removes/moves whole time partitions rather than individual rows.
|
|
132
|
+
* @see https://questdb.io/docs/reference/sql/alter-table-drop-partition/
|
|
133
|
+
*/
|
|
134
|
+
export interface QuestDBPartitionSpec {
|
|
135
|
+
/**
|
|
136
|
+
* Explicit partition boundary values, e.g. `['2023-01-01', '2023-01-02']`,
|
|
137
|
+
* emitting `... PARTITION LIST '2023-01-01', '2023-01-02'`.
|
|
138
|
+
*/
|
|
139
|
+
list?: string[];
|
|
140
|
+
/**
|
|
141
|
+
* A predicate over the designated timestamp, e.g.
|
|
142
|
+
* `"timestamp < '2023-01-01'"`, emitting `... PARTITION WHERE <predicate>`.
|
|
143
|
+
* Only valid for DROP (not ATTACH).
|
|
144
|
+
*/
|
|
145
|
+
where?: string;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* QuestDB dialect class. Extends the PostgreSQL dialect (QuestDB is
|
|
149
|
+
* PG-wire-compatible) and overrides only the CREATE TABLE DDL and the type
|
|
150
|
+
* mapping to reflect QuestDB's time-series-specific SQL.
|
|
151
|
+
*/
|
|
152
|
+
export declare class QuestDBDialect extends PostgresDialect {
|
|
153
|
+
readonly name = "questdb";
|
|
154
|
+
constructor(config?: PostgresDialectOptions);
|
|
155
|
+
/**
|
|
156
|
+
* Build the column fragment for a single column, honouring QuestDB's
|
|
157
|
+
* `SYMBOL [CAPACITY n] [CACHE]` syntax and deliberately omitting the
|
|
158
|
+
* PRIMARY KEY / UNIQUE / FOREIGN KEY / NOT NULL / DEFAULT clauses that
|
|
159
|
+
* QuestDB does not support in CREATE TABLE.
|
|
160
|
+
*/
|
|
161
|
+
private buildQuestColumnSql;
|
|
162
|
+
/**
|
|
163
|
+
* Pure, synchronous builder for a QuestDB `CREATE TABLE` statement. Returns
|
|
164
|
+
* the SQL string so it can be unit-tested without a database connection.
|
|
165
|
+
*
|
|
166
|
+
* Emits, in order:
|
|
167
|
+
* CREATE TABLE [IF NOT EXISTS] name (cols...)
|
|
168
|
+
* [TIMESTAMP(designated) PARTITION BY UNIT [WAL|BYPASS WAL]]
|
|
169
|
+
* [DEDUP UPSERT KEYS(...)]
|
|
170
|
+
*/
|
|
171
|
+
buildCreateTableSQL(tableName: string, columns: Record<string, ColumnDefinition & QuestDBColumnOptions>, options?: TableOptions & QuestDBTableOptions): string;
|
|
172
|
+
/**
|
|
173
|
+
* Create a new table using QuestDB's CREATE TABLE grammar. Delegates SQL
|
|
174
|
+
* construction to the synchronous {@link buildCreateTableSQL} and runs it
|
|
175
|
+
* through the inherited `query()`.
|
|
176
|
+
*/
|
|
177
|
+
createTable(tableName: string, columns: Record<string, ColumnDefinition & QuestDBColumnOptions>, options?: TableOptions & QuestDBTableOptions): Promise<void>;
|
|
178
|
+
/**
|
|
179
|
+
* Map an ORM data type to QuestDB's type name. QuestDB's type vocabulary
|
|
180
|
+
* differs from PostgreSQL's, so this overrides the inherited mapping.
|
|
181
|
+
* @see https://questdb.io/docs/reference/sql/datatypes/
|
|
182
|
+
*/
|
|
183
|
+
getDataTypeSql(dataType: DataType): string;
|
|
184
|
+
/**
|
|
185
|
+
* Build a QuestDB `LIMIT` clause. QuestDB does NOT support the SQL-standard
|
|
186
|
+
* `OFFSET` keyword; instead it uses:
|
|
187
|
+
* - `LIMIT n` — first `n` rows (or last `n` when negative).
|
|
188
|
+
* - `LIMIT lo, hi` — rows in the half-open range `(lo, hi]`, which is how
|
|
189
|
+
* an offset is expressed. To skip `offset` rows and
|
|
190
|
+
* return `limit` of them we emit `LIMIT offset, offset+limit`.
|
|
191
|
+
*
|
|
192
|
+
* @see https://questdb.io/docs/reference/sql/limit/
|
|
193
|
+
*/
|
|
194
|
+
buildLimitOffset(limit?: number | string, offset?: number | string): string;
|
|
195
|
+
/**
|
|
196
|
+
* Build a QuestDB `INSERT`. QuestDB has **no** `ON CONFLICT` clause (row
|
|
197
|
+
* de-duplication is configured on the table via `DEDUP UPSERT KEYS(...)` at
|
|
198
|
+
* `CREATE TABLE` time) and **no** `RETURNING` clause, so both are omitted —
|
|
199
|
+
* any `upsert`/`conflictFields`/`returning` options are ignored here.
|
|
200
|
+
*/
|
|
201
|
+
buildInsertQuery(tableName: string, values: Record<string, unknown>, _options?: InsertOptions): {
|
|
202
|
+
sql: string;
|
|
203
|
+
values: unknown[];
|
|
204
|
+
};
|
|
205
|
+
/**
|
|
206
|
+
* QuestDB has no `INSERT ... ON CONFLICT DO UPDATE`. The closest concept is a
|
|
207
|
+
* table-level `DEDUP UPSERT KEYS(...)` declaration, after which a plain
|
|
208
|
+
* `INSERT` transparently upserts rows sharing the dedup keys. This therefore
|
|
209
|
+
* emits a bare `INSERT` (no `ON CONFLICT`, no `RETURNING`); `conflictFields`
|
|
210
|
+
* and `updateOnDuplicate` are ignored because QuestDB resolves conflicts from
|
|
211
|
+
* the table's DEDUP configuration, not the statement.
|
|
212
|
+
*/
|
|
213
|
+
buildUpsertQuery(tableName: string, values: Record<string, unknown>, _options?: UpsertQueryOptions): {
|
|
214
|
+
sql: string;
|
|
215
|
+
values: unknown[];
|
|
216
|
+
};
|
|
217
|
+
/**
|
|
218
|
+
* Build a QuestDB `UPDATE`. QuestDB supports `UPDATE t SET ... WHERE ...` but
|
|
219
|
+
* does NOT support `LIMIT` on updates nor a `RETURNING` clause, so those
|
|
220
|
+
* options are omitted.
|
|
221
|
+
* @see https://questdb.io/docs/reference/sql/update/
|
|
222
|
+
*/
|
|
223
|
+
buildUpdateQuery(tableName: string, values: Record<string, unknown>, where: WhereOptions, _options?: UpdateOptions): {
|
|
224
|
+
sql: string;
|
|
225
|
+
values: unknown[];
|
|
226
|
+
};
|
|
227
|
+
/**
|
|
228
|
+
* Build a QuestDB "delete". IMPORTANT: QuestDB does **not** support
|
|
229
|
+
* row-level `DELETE`. Bulk removal is done by dropping whole time partitions
|
|
230
|
+
* (`ALTER TABLE t DROP PARTITION ...`) or emptying the table
|
|
231
|
+
* (`TRUNCATE TABLE t`). Accordingly:
|
|
232
|
+
* - `options.truncate` produces a valid `TRUNCATE TABLE t` statement.
|
|
233
|
+
* - Any other call throws, because emitting a `DELETE ... WHERE ...` that
|
|
234
|
+
* the server will reject would be misleading. Callers wanting to remove
|
|
235
|
+
* a time range should drop the relevant partition(s) via raw SQL / the
|
|
236
|
+
* partition APIs instead.
|
|
237
|
+
* @see https://questdb.io/docs/reference/sql/alter-table-drop-partition/
|
|
238
|
+
*/
|
|
239
|
+
buildDeleteQuery(tableName: string, _where: WhereOptions, options?: DeleteOptions): {
|
|
240
|
+
sql: string;
|
|
241
|
+
values: unknown[];
|
|
242
|
+
};
|
|
243
|
+
/**
|
|
244
|
+
* Pure builder for `ALTER TABLE t ADD COLUMN name type` (testable without a
|
|
245
|
+
* connection). QuestDB supports adding a column but NOT the per-column
|
|
246
|
+
* constraints (NOT NULL / DEFAULT / PRIMARY KEY / UNIQUE / REFERENCES) that
|
|
247
|
+
* the Postgres builder would emit, so this reuses the QuestDB column builder.
|
|
248
|
+
*/
|
|
249
|
+
buildAddColumnSQL(tableName: string, columnName: string, definition: ColumnDefinition & QuestDBColumnOptions): string;
|
|
250
|
+
/**
|
|
251
|
+
* Add a column. Overridden so QuestDB's constraint-free `ADD COLUMN` grammar
|
|
252
|
+
* (and SYMBOL support) is used rather than the inherited Postgres one.
|
|
253
|
+
*/
|
|
254
|
+
addColumn(tableName: string, columnName: string, definition: ColumnDefinition & QuestDBColumnOptions): Promise<void>;
|
|
255
|
+
/**
|
|
256
|
+
* Pure builder for a QuestDB SYMBOL-column index. QuestDB has no
|
|
257
|
+
* PostgreSQL-style `CREATE INDEX`; indexes exist only on `SYMBOL` columns and
|
|
258
|
+
* are added via `ALTER TABLE t ALTER COLUMN col ADD INDEX [CAPACITY n]`.
|
|
259
|
+
* @see https://questdb.io/docs/reference/sql/alter-table-alter-column-add-index/
|
|
260
|
+
*/
|
|
261
|
+
buildAddIndexSQL(tableName: string, column: string, capacity?: number): string;
|
|
262
|
+
/**
|
|
263
|
+
* Pure builder for dropping a QuestDB SYMBOL index:
|
|
264
|
+
* `ALTER TABLE t ALTER COLUMN col DROP INDEX`.
|
|
265
|
+
*/
|
|
266
|
+
buildDropIndexSQL(tableName: string, column: string): string;
|
|
267
|
+
/**
|
|
268
|
+
* Add an index. In QuestDB an "index" is a SYMBOL-column index, so each field
|
|
269
|
+
* is indexed with its own `ALTER COLUMN ... ADD INDEX`. The `indexName` and
|
|
270
|
+
* PG-only options (unique/using/expression/where/include) have no meaning and
|
|
271
|
+
* are ignored.
|
|
272
|
+
*/
|
|
273
|
+
addIndex(tableName: string, _indexName: string, fields?: string[], options?: IndexOptions & {
|
|
274
|
+
capacity?: number;
|
|
275
|
+
}): Promise<void>;
|
|
276
|
+
/**
|
|
277
|
+
* Create an index (SYMBOL-column index) from an {@link IndexDefinition}.
|
|
278
|
+
*/
|
|
279
|
+
createIndex(tableName: string, indexDef: IndexDefinition & {
|
|
280
|
+
capacity?: number;
|
|
281
|
+
}): Promise<void>;
|
|
282
|
+
/**
|
|
283
|
+
* Remove an index. QuestDB drops the index off the SYMBOL column, so the
|
|
284
|
+
* `indexName` argument is interpreted as the column name.
|
|
285
|
+
*/
|
|
286
|
+
removeIndex(tableName: string, columnName: string): Promise<void>;
|
|
287
|
+
dropIndex(tableName: string, columnName: string, _options?: DropIndexOptions): Promise<void>;
|
|
288
|
+
/**
|
|
289
|
+
* Pure builder for `RENAME TABLE old TO new`. QuestDB renames tables with a
|
|
290
|
+
* dedicated `RENAME TABLE` statement, NOT `ALTER TABLE ... RENAME TO`.
|
|
291
|
+
* @see https://questdb.io/docs/reference/sql/rename/
|
|
292
|
+
*/
|
|
293
|
+
buildRenameTableSQL(oldName: string, newName: string): string;
|
|
294
|
+
renameTable(oldName: string, newName: string): Promise<void>;
|
|
295
|
+
addForeignKey(): Promise<void>;
|
|
296
|
+
addConstraint(): Promise<void>;
|
|
297
|
+
createConstraint(_tableName: string, _constraintDef: ConstraintDefinition): Promise<void>;
|
|
298
|
+
/**
|
|
299
|
+
* Pure builder for QuestDB's narrow column-type alteration:
|
|
300
|
+
* `ALTER TABLE t ALTER COLUMN c TYPE <newType>`
|
|
301
|
+
* QuestDB supports changing a column's type (e.g. SYMBOL <-> VARCHAR/STRING,
|
|
302
|
+
* widening numerics) but has NO NOT NULL / DEFAULT concept, so any such flags
|
|
303
|
+
* on the definition are intentionally ignored.
|
|
304
|
+
* @see https://questdb.io/docs/reference/sql/alter-table-change-column-type/
|
|
305
|
+
*/
|
|
306
|
+
buildChangeColumnSQL(tableName: string, columnName: string, definition: ColumnDefinition & QuestDBColumnOptions): string;
|
|
307
|
+
/**
|
|
308
|
+
* Change a column's type. Overridden so QuestDB's `ALTER COLUMN ... TYPE`
|
|
309
|
+
* grammar (and SYMBOL support) is used, and so the inherited Postgres
|
|
310
|
+
* builder's NOT NULL / DEFAULT statements — which QuestDB rejects — are not
|
|
311
|
+
* emitted.
|
|
312
|
+
*/
|
|
313
|
+
changeColumn(tableName: string, columnName: string, definition: ColumnDefinition & QuestDBColumnOptions): Promise<void>;
|
|
314
|
+
/**
|
|
315
|
+
* Pure builder for `ALTER TABLE t DEDUP ENABLE UPSERT KEYS(...)`. Enables
|
|
316
|
+
* row de-duplication on an existing WAL table (the designated timestamp must
|
|
317
|
+
* be one of the keys). This is QuestDB's equivalent of an upsert conflict
|
|
318
|
+
* target, configured on the table rather than the INSERT statement.
|
|
319
|
+
* @see https://questdb.io/docs/reference/sql/alter-table-enable-deduplication/
|
|
320
|
+
*/
|
|
321
|
+
buildEnableDedupSQL(tableName: string, upsertKeys: string[]): string;
|
|
322
|
+
/** Enable DEDUP UPSERT KEYS on an existing table. */
|
|
323
|
+
enableDedup(tableName: string, upsertKeys: string[]): Promise<void>;
|
|
324
|
+
/** Pure builder for `ALTER TABLE t DEDUP DISABLE`. */
|
|
325
|
+
buildDisableDedupSQL(tableName: string): string;
|
|
326
|
+
/** Disable DEDUP on an existing table. */
|
|
327
|
+
disableDedup(tableName: string): Promise<void>;
|
|
328
|
+
/** Pure builder for `ALTER TABLE t SET TYPE WAL | BYPASS WAL`. */
|
|
329
|
+
buildSetWalSQL(tableName: string, enabled: boolean): string;
|
|
330
|
+
/** Convert a table between WAL and non-WAL storage. */
|
|
331
|
+
setWal(tableName: string, enabled: boolean): Promise<void>;
|
|
332
|
+
/** Pure builder for `ALTER TABLE t RESUME WAL` (resume a suspended WAL table). */
|
|
333
|
+
buildResumeWalSQL(tableName: string): string;
|
|
334
|
+
/** Resume a suspended WAL table. */
|
|
335
|
+
resumeWal(tableName: string): Promise<void>;
|
|
336
|
+
/**
|
|
337
|
+
* Pure builder for `ALTER TABLE t DROP PARTITION LIST ... | WHERE ...`.
|
|
338
|
+
* QuestDB deletes data by dropping whole time partitions.
|
|
339
|
+
* @see https://questdb.io/docs/reference/sql/alter-table-drop-partition/
|
|
340
|
+
*/
|
|
341
|
+
buildDropPartitionSQL(tableName: string, spec: QuestDBPartitionSpec): string;
|
|
342
|
+
/** Drop one or more time partitions. */
|
|
343
|
+
dropPartitions(tableName: string, spec: QuestDBPartitionSpec): Promise<void>;
|
|
344
|
+
/**
|
|
345
|
+
* Pure builder for `ALTER TABLE t DETACH PARTITION LIST ... | WHERE ...`.
|
|
346
|
+
* Detaches partitions so they can be archived/moved and later re-attached.
|
|
347
|
+
* @see https://questdb.io/docs/reference/sql/alter-table-detach-partition/
|
|
348
|
+
*/
|
|
349
|
+
buildDetachPartitionSQL(tableName: string, spec: QuestDBPartitionSpec): string;
|
|
350
|
+
/** Detach one or more time partitions. */
|
|
351
|
+
detachPartitions(tableName: string, spec: QuestDBPartitionSpec): Promise<void>;
|
|
352
|
+
/**
|
|
353
|
+
* Pure builder for `ALTER TABLE t ATTACH PARTITION LIST ...`. Re-attaches
|
|
354
|
+
* previously detached partitions (list form only — WHERE is not valid here).
|
|
355
|
+
* @see https://questdb.io/docs/reference/sql/alter-table-attach-partition/
|
|
356
|
+
*/
|
|
357
|
+
buildAttachPartitionSQL(tableName: string, list: string[]): string;
|
|
358
|
+
/** Attach one or more previously detached time partitions. */
|
|
359
|
+
attachPartitions(tableName: string, list: string[]): Promise<void>;
|
|
360
|
+
/**
|
|
361
|
+
* QuestDB partitions are NOT standalone tables (unlike PostgreSQL declarative
|
|
362
|
+
* partitions), so the inherited `dropPartition(name)` — which issues
|
|
363
|
+
* `DROP TABLE name` — does not apply. Fail loudly with guidance to the
|
|
364
|
+
* QuestDB-correct partition API rather than silently dropping a whole table.
|
|
365
|
+
*/
|
|
366
|
+
dropPartition(): Promise<void>;
|
|
367
|
+
/**
|
|
368
|
+
* Build a QuestDB `SAMPLE BY` clause (leading space included) with optional
|
|
369
|
+
* `FROM`/`TO` bounds, `FILL(...)`, and `ALIGN TO` handling.
|
|
370
|
+
*/
|
|
371
|
+
buildSampleByClause(opts: QuestDBSampleByOptions): string;
|
|
372
|
+
/**
|
|
373
|
+
* Build a QuestDB `LATEST ON ts PARTITION BY col[, ...]` clause (leading
|
|
374
|
+
* space included). Returns, per partition, the most recent row by the
|
|
375
|
+
* designated timestamp.
|
|
376
|
+
* @see https://questdb.io/docs/reference/sql/latest-on/
|
|
377
|
+
*/
|
|
378
|
+
buildLatestOnClause(tsColumn: string, partitionBy: string | string[]): string;
|
|
379
|
+
/**
|
|
380
|
+
* Build a full QuestDB time-series `SELECT` with `SAMPLE BY` and/or
|
|
381
|
+
* `LATEST ON` support, which the cross-dialect {@link buildSelectQuery} (and
|
|
382
|
+
* the shared {@link SelectOptions}) has no representation for. Clause order:
|
|
383
|
+
* SELECT ... FROM t [WHERE ...] [LATEST ON ...] [SAMPLE BY ... FILL ... ALIGN]
|
|
384
|
+
* [GROUP BY ...] [ORDER BY ...] [LIMIT ...]
|
|
385
|
+
*
|
|
386
|
+
* `attributes` are treated as raw column/aggregate expressions (e.g.
|
|
387
|
+
* `['ts', 'avg(price) AS avg_price']`) so callers can use QuestDB aggregate
|
|
388
|
+
* functions directly.
|
|
389
|
+
*/
|
|
390
|
+
buildSampleBySelect(options: {
|
|
391
|
+
tableName: string;
|
|
392
|
+
attributes?: string[];
|
|
393
|
+
where?: WhereOptions;
|
|
394
|
+
latestOn?: {
|
|
395
|
+
timestamp: string;
|
|
396
|
+
partitionBy: string | string[];
|
|
397
|
+
};
|
|
398
|
+
sampleBy?: QuestDBSampleByOptions;
|
|
399
|
+
group?: string | string[];
|
|
400
|
+
order?: Order;
|
|
401
|
+
limit?: number | string;
|
|
402
|
+
offset?: number | string;
|
|
403
|
+
}): {
|
|
404
|
+
sql: string;
|
|
405
|
+
values: unknown[];
|
|
406
|
+
};
|
|
407
|
+
/** List all tables via QuestDB's `SHOW TABLES`. */
|
|
408
|
+
showTables(): Promise<string[]>;
|
|
409
|
+
/**
|
|
410
|
+
* Describe a table via `SHOW COLUMNS FROM t`. QuestDB has no NOT NULL /
|
|
411
|
+
* DEFAULT / auto-increment concepts, so those fields are reported as
|
|
412
|
+
* permissive defaults.
|
|
413
|
+
*/
|
|
414
|
+
describeTable(tableName: string): Promise<TableDescription>;
|
|
415
|
+
/**
|
|
416
|
+
* Show indexes via `SHOW COLUMNS FROM t`. In QuestDB an "index" exists only
|
|
417
|
+
* on a SYMBOL column, surfaced by the `indexed` flag of each column.
|
|
418
|
+
*/
|
|
419
|
+
showIndexes(tableName: string): Promise<any[]>;
|
|
420
|
+
/**
|
|
421
|
+
* QuestDB has no relational constraints (PRIMARY KEY / FOREIGN KEY / UNIQUE /
|
|
422
|
+
* CHECK), so there are never any constraints to report.
|
|
423
|
+
*/
|
|
424
|
+
showConstraints(): Promise<any[]>;
|
|
425
|
+
}
|
|
426
|
+
/**
|
|
427
|
+
* Create a new QuestDB dialect instance.
|
|
428
|
+
*/
|
|
429
|
+
export declare function createQuestDBDialect(options?: PostgresDialectOptions): QuestDBDialect;
|
|
430
|
+
export default QuestDBDialect;
|