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,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CTE (Common Table Expression) Builder
|
|
3
|
+
* Provides an ORM-like way to build CTEs without raw SQL
|
|
4
|
+
*/
|
|
5
|
+
import { FindOptions } from '../types';
|
|
6
|
+
export interface CTEColumn {
|
|
7
|
+
name: string;
|
|
8
|
+
type?: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Base CTE definition without raw SQL
|
|
12
|
+
*/
|
|
13
|
+
export interface CTEDefinition {
|
|
14
|
+
/** Name of the CTE */
|
|
15
|
+
name: string;
|
|
16
|
+
/** Column definitions */
|
|
17
|
+
columns?: CTEColumn[];
|
|
18
|
+
/** Base case for recursive CTE - can be FindOptions or values */
|
|
19
|
+
baseCase?: FindOptions | Record<string, any>[];
|
|
20
|
+
/** Recursive case for recursive CTE */
|
|
21
|
+
recursiveCase?: FindOptions;
|
|
22
|
+
/** Non-recursive UNION part */
|
|
23
|
+
unionWith?: FindOptions;
|
|
24
|
+
/** Model class or table name */
|
|
25
|
+
model?: string | {
|
|
26
|
+
tableName?: string;
|
|
27
|
+
name?: string;
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Recursive CTE options for hierarchical data
|
|
32
|
+
*/
|
|
33
|
+
export interface RecursiveCTEOptions {
|
|
34
|
+
/** CTE name */
|
|
35
|
+
name: string;
|
|
36
|
+
/** Columns */
|
|
37
|
+
columns?: CTEColumn[];
|
|
38
|
+
/** Anchor/member - starting point */
|
|
39
|
+
anchor: FindOptions;
|
|
40
|
+
/** Recursive member - how to get children */
|
|
41
|
+
recursive: FindOptions;
|
|
42
|
+
/** Model class or table name for reference */
|
|
43
|
+
model?: string | {
|
|
44
|
+
tableName?: string;
|
|
45
|
+
name?: string;
|
|
46
|
+
};
|
|
47
|
+
/** Maximum recursion depth */
|
|
48
|
+
maxDepth?: number;
|
|
49
|
+
/** Sort order for results */
|
|
50
|
+
order?: any[];
|
|
51
|
+
}
|
|
52
|
+
export declare class CTEBuilder {
|
|
53
|
+
private ctes;
|
|
54
|
+
/**
|
|
55
|
+
* Add a simple CTE with a base query
|
|
56
|
+
* @example
|
|
57
|
+
* cte.add('active_users', { model: User, baseCase: { where: { active: true } } })
|
|
58
|
+
* cte.add('active_users', { model: 'users', baseCase: { where: { active: true } } })
|
|
59
|
+
*/
|
|
60
|
+
add(name: string, options?: {
|
|
61
|
+
model?: string | {
|
|
62
|
+
tableName?: string;
|
|
63
|
+
name?: string;
|
|
64
|
+
};
|
|
65
|
+
columns?: CTEColumn[];
|
|
66
|
+
baseCase?: FindOptions;
|
|
67
|
+
}): CTEBuilder;
|
|
68
|
+
/**
|
|
69
|
+
* Add a recursive CTE for hierarchical data
|
|
70
|
+
* @example
|
|
71
|
+
* cte.addRecursive({
|
|
72
|
+
* name: 'org_chart',
|
|
73
|
+
* model: Employee,
|
|
74
|
+
* anchor: { where: { managerId: null } },
|
|
75
|
+
* recursive: { where: { '$org_chart.id$': { [Op.eq]: { [Op.col]: 'Employee.managerId' } } } }
|
|
76
|
+
* })
|
|
77
|
+
*/
|
|
78
|
+
addRecursive(options: RecursiveCTEOptions): CTEBuilder;
|
|
79
|
+
/**
|
|
80
|
+
* Get all CTEs
|
|
81
|
+
*/
|
|
82
|
+
getCTEs(): CTEDefinition[];
|
|
83
|
+
/**
|
|
84
|
+
* Get CTE names
|
|
85
|
+
*/
|
|
86
|
+
getCTENames(): string[];
|
|
87
|
+
/**
|
|
88
|
+
* Build the WITH clause SQL
|
|
89
|
+
*/
|
|
90
|
+
toSQL(dialect: any): string;
|
|
91
|
+
/**
|
|
92
|
+
* Clear all CTEs
|
|
93
|
+
*/
|
|
94
|
+
clear(): void;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Create a new CTE builder
|
|
98
|
+
*/
|
|
99
|
+
export declare function createCTEBuilder(): CTEBuilder;
|
|
100
|
+
declare const _default: {
|
|
101
|
+
CTEBuilder: typeof CTEBuilder;
|
|
102
|
+
createCTEBuilder: typeof createCTEBuilder;
|
|
103
|
+
};
|
|
104
|
+
export default _default;
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed aggregate-function builder API.
|
|
3
|
+
*
|
|
4
|
+
* `COUNT`/`SUM`/`AVG`/`MIN`/`MAX` are already reachable through the generic
|
|
5
|
+
* `fn('SUM', col('amount'))` pattern in `src/operators.ts` because those
|
|
6
|
+
* names are ANSI-identical across every dialect this ORM supports. This
|
|
7
|
+
* module fills the real gap: aggregate functions whose *name* (and in some
|
|
8
|
+
* cases clause placement) differs per dialect, most notably string
|
|
9
|
+
* aggregation (`GROUP_CONCAT` / `STRING_AGG` / `LISTAGG` / ClickHouse's
|
|
10
|
+
* array-based approach) and array aggregation (`ARRAY_AGG` / `JSON_ARRAYAGG`
|
|
11
|
+
* / `groupArray`).
|
|
12
|
+
*
|
|
13
|
+
* This module is intentionally self-contained: it does not add any new
|
|
14
|
+
* dispatch branches to the shared SQL compiler (`src/query-builders/sql-compiler.ts`)
|
|
15
|
+
* or touch `src/operators.ts`. Every builder function computes a final,
|
|
16
|
+
* dialect-correct SQL fragment string directly and wraps it with the
|
|
17
|
+
* existing `literalExpr()` helper from `src/operators.ts` so it slots into
|
|
18
|
+
* `attributes: [...]` arrays exactly the way `fn()`/`col()`/`cast()` do
|
|
19
|
+
* today (see `attributeToSql()` in `sql-compiler.ts`, which already knows
|
|
20
|
+
* how to render `{ __type: 'literal', sql }` and `[expr, alias]` tuples).
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```typescript
|
|
24
|
+
* import { count, countDistinct, sum, stringAgg, arrayAgg } from './query-builders/functions/aggregate';
|
|
25
|
+
* import { col } from '../../operators';
|
|
26
|
+
*
|
|
27
|
+
* User.findAll({
|
|
28
|
+
* attributes: [
|
|
29
|
+
* 'department',
|
|
30
|
+
* [count('postgres'), 'total'],
|
|
31
|
+
* [countDistinct('postgres', col('email')), 'uniqueEmails'],
|
|
32
|
+
* [stringAgg('postgres', col('name'), ', ', { orderBy: 'name' }), 'names'],
|
|
33
|
+
* [arrayAgg('postgres', col('id')), 'ids'],
|
|
34
|
+
* ],
|
|
35
|
+
* group: ['department'],
|
|
36
|
+
* });
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
import { type FnExpression, type ColExpression, type LiteralExpression } from '../../operators';
|
|
40
|
+
import type { Dialect } from '../../types/index';
|
|
41
|
+
/**
|
|
42
|
+
* Acceptable argument types for aggregate function calls: plain column
|
|
43
|
+
* names (strings), other typed expressions (`col()`, `fn()`, `literal()`),
|
|
44
|
+
* or `undefined`/omitted (used for bare `COUNT()`/`COUNT(*)`).
|
|
45
|
+
*/
|
|
46
|
+
export type SqlExpr = string | ColExpression | FnExpression | LiteralExpression;
|
|
47
|
+
/** A single ORDER BY entry, either a bare column name or `{ column, direction }`. */
|
|
48
|
+
export type AggOrderBy = string | {
|
|
49
|
+
column: string;
|
|
50
|
+
direction?: 'ASC' | 'DESC';
|
|
51
|
+
} | Array<string | {
|
|
52
|
+
column: string;
|
|
53
|
+
direction?: 'ASC' | 'DESC';
|
|
54
|
+
}>;
|
|
55
|
+
export interface StringAggOptions {
|
|
56
|
+
/** ORDER BY clause applied to the concatenation (single column, or array of columns). */
|
|
57
|
+
orderBy?: AggOrderBy;
|
|
58
|
+
/** Whether to deduplicate values before concatenating. */
|
|
59
|
+
distinct?: boolean;
|
|
60
|
+
}
|
|
61
|
+
export interface ArrayAggOptions {
|
|
62
|
+
/** ORDER BY clause applied to the aggregation (single column, or array of columns). */
|
|
63
|
+
orderBy?: AggOrderBy;
|
|
64
|
+
/** Whether to deduplicate values before aggregating. */
|
|
65
|
+
distinct?: boolean;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* `COUNT(*)` / `COUNT(expr)` — identical ANSI syntax across all 11 dialects.
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```typescript
|
|
72
|
+
* count('postgres') // -> COUNT(*)
|
|
73
|
+
* count('postgres', col('id')) // -> COUNT("id")
|
|
74
|
+
* ```
|
|
75
|
+
*/
|
|
76
|
+
export declare function count(_dialect: Dialect, expr?: SqlExpr): LiteralExpression;
|
|
77
|
+
/**
|
|
78
|
+
* `COUNT(DISTINCT expr)`.
|
|
79
|
+
*
|
|
80
|
+
* Verified across all 11 dialects: MySQL, MariaDB, PostgreSQL, MSSQL,
|
|
81
|
+
* Oracle, SQLite, CockroachDB, Redshift, Db2, and Snowflake all support the
|
|
82
|
+
* exact ANSI `COUNT(DISTINCT expr)` syntax. ClickHouse also parses
|
|
83
|
+
* `COUNT(DISTINCT expr)` (it desugars to an internal uniq-exact
|
|
84
|
+
* implementation), though ClickHouse users may prefer the native
|
|
85
|
+
* `uniqExact(expr)` function for clarity/performance on very large
|
|
86
|
+
* cardinalities — that's a deliberate escape hatch, not a requirement, so
|
|
87
|
+
* `COUNT(DISTINCT expr)` is used here for consistency with the other
|
|
88
|
+
* dialects.
|
|
89
|
+
*/
|
|
90
|
+
export declare function countDistinct(_dialect: Dialect, expr: SqlExpr): LiteralExpression;
|
|
91
|
+
/**
|
|
92
|
+
* `SUM(expr)` — identical everywhere. Note: SUM of an all-NULL group (or
|
|
93
|
+
* zero input rows) returns SQL NULL (not 0) in every one of these dialects,
|
|
94
|
+
* so callers should COALESCE(...) explicitly if a numeric default is
|
|
95
|
+
* required.
|
|
96
|
+
*/
|
|
97
|
+
export declare function sum(_dialect: Dialect, expr: SqlExpr): LiteralExpression;
|
|
98
|
+
/**
|
|
99
|
+
* `AVG(expr)` — identical everywhere. Note: integer-typed columns are
|
|
100
|
+
* averaged as an exact/decimal type in PostgreSQL, MSSQL, Oracle, Db2, and
|
|
101
|
+
* Snowflake, but MySQL/MariaDB/SQLite/ClickHouse promote to floating point;
|
|
102
|
+
* cast explicitly (e.g. `cast(col('x'), 'DECIMAL(10,2)')`) if exact decimal
|
|
103
|
+
* averaging is required across dialects.
|
|
104
|
+
*/
|
|
105
|
+
export declare function avg(_dialect: Dialect, expr: SqlExpr): LiteralExpression;
|
|
106
|
+
/** `MIN(expr)` — identical everywhere. */
|
|
107
|
+
export declare function min(_dialect: Dialect, expr: SqlExpr): LiteralExpression;
|
|
108
|
+
/** `MAX(expr)` — identical everywhere. */
|
|
109
|
+
export declare function max(_dialect: Dialect, expr: SqlExpr): LiteralExpression;
|
|
110
|
+
/**
|
|
111
|
+
* String aggregation (`GROUP_CONCAT` / `STRING_AGG` / `LISTAGG` / ClickHouse
|
|
112
|
+
* array-concat), dispatched per-dialect. This is the single most
|
|
113
|
+
* error-prone aggregate across dialects, so each branch below documents the
|
|
114
|
+
* exact verified syntax.
|
|
115
|
+
*
|
|
116
|
+
* - **MySQL / MariaDB**:
|
|
117
|
+
* `GROUP_CONCAT([DISTINCT] expr [ORDER BY col [ASC|DESC]] SEPARATOR 'delim')`
|
|
118
|
+
* Clause order is fixed: DISTINCT, then the expression, then ORDER BY,
|
|
119
|
+
* then SEPARATOR — SEPARATOR must come last and is a keyword, not a comma
|
|
120
|
+
* argument.
|
|
121
|
+
*
|
|
122
|
+
* - **SQLite**: `GROUP_CONCAT(expr, 'delim')` (2-argument form; the
|
|
123
|
+
* separator defaults to `,` if omitted). SQLite's GROUP_CONCAT does
|
|
124
|
+
* **not** support an `ORDER BY` clause inside the function call at all —
|
|
125
|
+
* if `options.orderBy` is passed for SQLite this throws, since silently
|
|
126
|
+
* ignoring it would produce non-deterministic ordering that looks
|
|
127
|
+
* intentional. Pre-sort via a subquery/CTE if ordering is required.
|
|
128
|
+
* SQLite's DISTINCT variant (`GROUP_CONCAT(DISTINCT expr)`) is supported
|
|
129
|
+
* but forces the default comma separator (a custom separator combined
|
|
130
|
+
* with DISTINCT is not supported by SQLite) — this also throws if both
|
|
131
|
+
* `distinct` and a non-default delimiter are requested together.
|
|
132
|
+
*
|
|
133
|
+
* - **PostgreSQL / CockroachDB**: `STRING_AGG([DISTINCT] expr, 'delim' [ORDER BY col [ASC|DESC]])`
|
|
134
|
+
* — the ORDER BY clause sits *inside* the same parentheses as the
|
|
135
|
+
* delimiter argument (no WITHIN GROUP).
|
|
136
|
+
*
|
|
137
|
+
* - **MSSQL**: `STRING_AGG(expr, 'delim') WITHIN GROUP (ORDER BY col [ASC|DESC])`
|
|
138
|
+
* — note this is a genuinely different clause *placement* than Postgres:
|
|
139
|
+
* the ORDER BY is a separate `WITHIN GROUP (...)` clause appended after
|
|
140
|
+
* the function call, not inline inside the argument list. MSSQL's
|
|
141
|
+
* `STRING_AGG` also does **not** support a `DISTINCT` argument at all
|
|
142
|
+
* (unlike Postgres) — this throws if `distinct: true` is requested.
|
|
143
|
+
*
|
|
144
|
+
* - **Oracle / Db2**: `LISTAGG([DISTINCT] expr, 'delim') WITHIN GROUP (ORDER BY col [ASC|DESC])`
|
|
145
|
+
* — same WITHIN GROUP placement as MSSQL. Oracle supports `DISTINCT`
|
|
146
|
+
* inside LISTAGG since 19c; Db2 LUW's LISTAGG also supports `DISTINCT`.
|
|
147
|
+
*
|
|
148
|
+
* - **Redshift**: `LISTAGG([DISTINCT] expr, 'delim') WITHIN GROUP (ORDER BY col [ASC|DESC])`
|
|
149
|
+
* — Redshift's aggregate string function has always been `LISTAGG`
|
|
150
|
+
* (matching Oracle/Db2 syntax), not `STRING_AGG`. AWS did add a
|
|
151
|
+
* Postgres-compatible `STRING_AGG` alias to Redshift more recently, but
|
|
152
|
+
* `LISTAGG` is the long-standing, universally-available, and
|
|
153
|
+
* ORDER-BY-capable form, so it's used here for correctness.
|
|
154
|
+
*
|
|
155
|
+
* - **Snowflake**: `LISTAGG([DISTINCT] expr, 'delim') WITHIN GROUP (ORDER BY col [ASC|DESC])`
|
|
156
|
+
* — Snowflake's string aggregation function is `LISTAGG` (Oracle-style),
|
|
157
|
+
* *not* `STRING_AGG` — Snowflake has no `STRING_AGG` function.
|
|
158
|
+
*
|
|
159
|
+
* - **ClickHouse**: no native `GROUP_CONCAT`/`STRING_AGG`/`LISTAGG`. The
|
|
160
|
+
* verified, version-portable idiom is
|
|
161
|
+
* `arrayStringConcat(groupArray(expr), 'delim')` (distinct:
|
|
162
|
+
* `arrayStringConcat(groupUniqArray(expr), 'delim')`). Newer ClickHouse
|
|
163
|
+
* releases (24.x+) also ship a MySQL-compatible `groupConcat(expr)`
|
|
164
|
+
* function, but `arrayStringConcat(groupArray(...), ...)` works on every
|
|
165
|
+
* supported version so it's used as the default here. ClickHouse's
|
|
166
|
+
* `groupArray` has no inline `ORDER BY` sub-clause (it preserves block
|
|
167
|
+
* processing order, not a guaranteed sort) — `options.orderBy` therefore
|
|
168
|
+
* throws for ClickHouse; pre-sort via a subquery if ordering matters.
|
|
169
|
+
*/
|
|
170
|
+
export declare function stringAgg(dialect: Dialect, expr: SqlExpr, delimiter: string, options?: StringAggOptions): LiteralExpression;
|
|
171
|
+
/**
|
|
172
|
+
* Aggregate values into an array/JSON-array, dispatched per-dialect.
|
|
173
|
+
*
|
|
174
|
+
* - **PostgreSQL / CockroachDB**: native `ARRAY_AGG([DISTINCT] expr [ORDER BY col [ASC|DESC]])`.
|
|
175
|
+
* - **Snowflake**: native `ARRAY_AGG([DISTINCT] expr) [WITHIN GROUP (ORDER BY col [ASC|DESC])]`
|
|
176
|
+
* — Snowflake's ARRAY_AGG uses the same WITHIN GROUP placement as LISTAGG,
|
|
177
|
+
* not Postgres's inline ORDER BY.
|
|
178
|
+
* - **ClickHouse**: native `groupArray(expr)` (distinct: `groupUniqArray(expr)`);
|
|
179
|
+
* returns ClickHouse's native Array(T) type. No inline ORDER BY support
|
|
180
|
+
* (same limitation as `stringAgg`) — throws if `orderBy` is requested.
|
|
181
|
+
* - **MySQL (5.7.22+) / MariaDB (10.5+)**: no `ARRAY_AGG`, but both support
|
|
182
|
+
* the real `JSON_ARRAYAGG(expr)` function, used here as a JSON-array
|
|
183
|
+
* fallback. Neither dialect's `JSON_ARRAYAGG` supports `DISTINCT` or
|
|
184
|
+
* `ORDER BY` — both throw if requested.
|
|
185
|
+
* - **Oracle (12.2+) / Db2 (11.5+)**: no `ARRAY_AGG`, but both support the
|
|
186
|
+
* real SQL:2016 `JSON_ARRAYAGG(expr)` function, used as a JSON-array
|
|
187
|
+
* fallback here too. `DISTINCT`/`ORDER BY` throw (not supported by either
|
|
188
|
+
* engine's JSON_ARRAYAGG).
|
|
189
|
+
* - **SQLite**: no `ARRAY_AGG`, but has the real native `json_group_array(expr)`
|
|
190
|
+
* aggregate, used as the fallback. `DISTINCT`/`ORDER BY` throw (not
|
|
191
|
+
* supported by SQLite's json_group_array).
|
|
192
|
+
* - **MSSQL / Redshift**: no real array-aggregation concept and no reliable
|
|
193
|
+
* scalar-aggregate JSON-array equivalent (MSSQL's JSON array construction
|
|
194
|
+
* is via `FOR JSON PATH` on a full query shape, not an aggregate function
|
|
195
|
+
* usable inline in a SELECT list; Redshift has no JSON_ARRAYAGG). Both
|
|
196
|
+
* throw a clear "not supported" error rather than faking an unreliable
|
|
197
|
+
* workaround.
|
|
198
|
+
*/
|
|
199
|
+
export declare function arrayAgg(dialect: Dialect, expr: SqlExpr, options?: ArrayAggOptions): LiteralExpression;
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed CASE WHEN ... THEN ... ELSE ... END expression builder.
|
|
3
|
+
*
|
|
4
|
+
* `CASE WHEN` is ANSI-standard SQL (SQL-92) and is supported identically,
|
|
5
|
+
* with no syntax variation, across every dialect this ORM targets:
|
|
6
|
+
* - mysql, mariadb: full support (searched + simple CASE)
|
|
7
|
+
* - postgres, cockroachdb, redshift: full support (Postgres-derived)
|
|
8
|
+
* - mssql: full support (T-SQL CASE is ANSI-compliant)
|
|
9
|
+
* - oracle: full support (in addition to the older DECODE() function,
|
|
10
|
+
* Oracle has supported standard CASE since 9i)
|
|
11
|
+
* - sqlite: full support
|
|
12
|
+
* - db2: full support
|
|
13
|
+
* - snowflake: full support
|
|
14
|
+
* - clickhouse: full support, including both the "searched" form
|
|
15
|
+
* (`CASE WHEN cond THEN a END`) and the "simple" form
|
|
16
|
+
* (`CASE expr WHEN val THEN a END`). ClickHouse also offers the
|
|
17
|
+
* `multiIf()`/`if()` functions as engine-native alternatives, but plain
|
|
18
|
+
* `CASE` works exactly as ANSI SQL specifies, so no dialect branching is
|
|
19
|
+
* required here (unlike window frame extensions or JSON path functions).
|
|
20
|
+
*
|
|
21
|
+
* This module is intentionally self-contained: it does not add any new
|
|
22
|
+
* dispatch branches to the shared SQL compiler (`src/query-builders/sql-compiler.ts`)
|
|
23
|
+
* or to `src/operators.ts`. Every builder resolves directly to a final SQL
|
|
24
|
+
* fragment string, which is then wrapped with the existing `literalExpr()`
|
|
25
|
+
* helper from `src/operators.ts` so it slots into `attributes: [...]` arrays
|
|
26
|
+
* exactly the way `fn()`/`col()`/`cast()`/the window-function builder do
|
|
27
|
+
* today (see `attributeToSql()` in `sql-compiler.ts`, which already knows
|
|
28
|
+
* how to render `{ __type: 'literal', sql }` and `[expr, alias]` tuples).
|
|
29
|
+
*
|
|
30
|
+
* Condition syntax: `.when()` on the searched-CASE builder (`caseWhen()`)
|
|
31
|
+
* accepts the SAME condition-object shape already used by `where:` clauses
|
|
32
|
+
* throughout this ORM (see `src/operators.ts`'s `Op` symbols and
|
|
33
|
+
* `src/query-builders/where-builder.ts`), e.g.:
|
|
34
|
+
*
|
|
35
|
+
* { age: { [Op.gte]: 18 } }
|
|
36
|
+
* { [Op.and]: [{ age: { [Op.gte]: 18 } }, { status: 'active' }] }
|
|
37
|
+
* { [Op.between]: [...] } // via a field key, see below
|
|
38
|
+
*
|
|
39
|
+
* rather than inventing a new mini-language. This keeps `caseWhen().when(...)`
|
|
40
|
+
* consistent with `Model.findAll({ where: ... })` conditions. A shorthand
|
|
41
|
+
* 3-arg form, `.when(column, operator, value, thenValue)`, is also supported
|
|
42
|
+
* for ergonomic simple comparisons (mirroring `Op.where(col, op, value)`).
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```typescript
|
|
46
|
+
* import { caseWhen, caseOf } from './query-builders/functions/conditional';
|
|
47
|
+
* import { Op, col } from '../../operators';
|
|
48
|
+
*
|
|
49
|
+
* // Searched CASE (condition-object form, same shape as `where:`)
|
|
50
|
+
* User.findAll({
|
|
51
|
+
* attributes: [
|
|
52
|
+
* 'name',
|
|
53
|
+
* caseWhen()
|
|
54
|
+
* .when({ age: { [Op.gte]: 18 } }, 'adult')
|
|
55
|
+
* .when({ age: { [Op.gte]: 13 } }, 'teen')
|
|
56
|
+
* .else('child')
|
|
57
|
+
* .as('ageGroup'),
|
|
58
|
+
* ],
|
|
59
|
+
* });
|
|
60
|
+
*
|
|
61
|
+
* // Searched CASE (3-arg shorthand form)
|
|
62
|
+
* caseWhen().when('age', '>=', 18, 'adult').else('minor').as('ageGroup');
|
|
63
|
+
*
|
|
64
|
+
* // Simple CASE (CASE expr WHEN val THEN result ... END)
|
|
65
|
+
* caseOf(col('status'))
|
|
66
|
+
* .when('active', 1)
|
|
67
|
+
* .when('inactive', 0)
|
|
68
|
+
* .else(null)
|
|
69
|
+
* .as('statusFlag');
|
|
70
|
+
*
|
|
71
|
+
* // Nested CASE
|
|
72
|
+
* caseWhen()
|
|
73
|
+
* .when({ age: { [Op.gte]: 65 } }, 'senior')
|
|
74
|
+
* .else(caseWhen().when({ age: { [Op.gte]: 18 } }, 'adult').else('minor'))
|
|
75
|
+
* .as('category');
|
|
76
|
+
* ```
|
|
77
|
+
*/
|
|
78
|
+
import { type FnExpression, type ColExpression, type LiteralExpression, type OperatorSymbol } from '../../operators';
|
|
79
|
+
/**
|
|
80
|
+
* Acceptable "value" arguments for THEN/ELSE results and simple-CASE
|
|
81
|
+
* WHEN-values: plain strings/numbers (escaped as SQL literals), `null`
|
|
82
|
+
* (rendered as SQL NULL), typed expressions (`col()`, `fn()`, `literal()`),
|
|
83
|
+
* or a nested CASE builder (`CaseBuilder`/`SimpleCaseBuilder`) so CASE
|
|
84
|
+
* expressions can be composed inside one another.
|
|
85
|
+
*/
|
|
86
|
+
export type CaseValue = string | number | boolean | ColExpression | FnExpression | LiteralExpression | {
|
|
87
|
+
$literal: string;
|
|
88
|
+
} | CaseBuilder | SimpleCaseBuilder | null;
|
|
89
|
+
/**
|
|
90
|
+
* A condition accepted by `CaseBuilder.when()`. Uses the same shape as
|
|
91
|
+
* `where:` clause condition objects elsewhere in this ORM, e.g.:
|
|
92
|
+
* { age: { [Op.gte]: 18 } }
|
|
93
|
+
* { [Op.and]: [...] } / { $and: [...] }
|
|
94
|
+
* { status: 'active' } (implicit equality)
|
|
95
|
+
*/
|
|
96
|
+
export type CaseCondition = Record<string | symbol, any>;
|
|
97
|
+
/**
|
|
98
|
+
* Fluent builder for a "searched" CASE expression:
|
|
99
|
+
* CASE WHEN cond1 THEN result1 WHEN cond2 THEN result2 ... ELSE else END
|
|
100
|
+
*
|
|
101
|
+
* Build with `caseWhen()`. Terminate with `.as(alias)` (for use directly in
|
|
102
|
+
* an `attributes: [...]` array) or `.toSQL()` / `.toLiteral()`.
|
|
103
|
+
*/
|
|
104
|
+
export declare class CaseBuilder {
|
|
105
|
+
private clauses;
|
|
106
|
+
private elseSql;
|
|
107
|
+
private hasElse;
|
|
108
|
+
/**
|
|
109
|
+
* Add a `WHEN <condition> THEN <thenValue>` branch. Repeatable — call
|
|
110
|
+
* multiple times to add multiple branches, evaluated in order.
|
|
111
|
+
*
|
|
112
|
+
* Two call forms are supported:
|
|
113
|
+
* - `.when(conditionObject, thenValue)` — condition object using the
|
|
114
|
+
* same shape as `where:` clauses (`{ age: { [Op.gte]: 18 } }`, nested
|
|
115
|
+
* `Op.and`/`Op.or`, etc.)
|
|
116
|
+
* - `.when(column, operator, value, thenValue)` — ergonomic shorthand
|
|
117
|
+
* for a single comparison (mirrors `Op.where(col, op, value)`).
|
|
118
|
+
*/
|
|
119
|
+
when(condition: CaseCondition, thenValue: CaseValue): this;
|
|
120
|
+
when(column: string, operator: string | OperatorSymbol, value: unknown, thenValue: CaseValue): this;
|
|
121
|
+
/** Set the `ELSE <value>` branch. Optional — omitting it yields an implicit SQL NULL. */
|
|
122
|
+
else(value: CaseValue): this;
|
|
123
|
+
/** Render the `CASE WHEN ... END` SQL fragment (no alias). */
|
|
124
|
+
toSQL(): string;
|
|
125
|
+
/**
|
|
126
|
+
* Terminal call: returns an `[expr, alias]` tuple compatible with the
|
|
127
|
+
* existing `attributes: [...]` pattern (see `attributeToSql()` in
|
|
128
|
+
* `sql-compiler.ts`, which already knows how to render
|
|
129
|
+
* `[LiteralExpression, alias]` tuples without any core changes).
|
|
130
|
+
*/
|
|
131
|
+
as(alias: string): [LiteralExpression, string];
|
|
132
|
+
/** Use the builder directly wherever a raw SQL literal expression is expected. */
|
|
133
|
+
toLiteral(): LiteralExpression;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Fluent builder for a "simple" CASE expression:
|
|
137
|
+
* CASE expr WHEN val1 THEN result1 WHEN val2 THEN result2 ... ELSE else END
|
|
138
|
+
*
|
|
139
|
+
* Build with `caseOf(expr)`. Terminate with `.as(alias)` or `.toSQL()` /
|
|
140
|
+
* `.toLiteral()`.
|
|
141
|
+
*/
|
|
142
|
+
export declare class SimpleCaseBuilder {
|
|
143
|
+
private readonly exprSql;
|
|
144
|
+
private clauses;
|
|
145
|
+
private elseSql;
|
|
146
|
+
private hasElse;
|
|
147
|
+
constructor(expr: CaseValue | string);
|
|
148
|
+
/**
|
|
149
|
+
* Add a `WHEN <value> THEN <result>` branch. Repeatable — call multiple
|
|
150
|
+
* times to add multiple branches, evaluated in order.
|
|
151
|
+
*/
|
|
152
|
+
when(value: CaseValue, result: CaseValue): this;
|
|
153
|
+
/** Set the `ELSE <value>` branch. Optional — omitting it yields an implicit SQL NULL. */
|
|
154
|
+
else(value: CaseValue): this;
|
|
155
|
+
/** Render the `CASE expr WHEN ... END` SQL fragment (no alias). */
|
|
156
|
+
toSQL(): string;
|
|
157
|
+
/**
|
|
158
|
+
* Terminal call: returns an `[expr, alias]` tuple compatible with the
|
|
159
|
+
* existing `attributes: [...]` pattern.
|
|
160
|
+
*/
|
|
161
|
+
as(alias: string): [LiteralExpression, string];
|
|
162
|
+
/** Use the builder directly wherever a raw SQL literal expression is expected. */
|
|
163
|
+
toLiteral(): LiteralExpression;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Start a "searched" CASE expression:
|
|
167
|
+
* CASE WHEN cond1 THEN result1 [WHEN cond2 THEN result2 ...] [ELSE else] END
|
|
168
|
+
*
|
|
169
|
+
* @example
|
|
170
|
+
* ```typescript
|
|
171
|
+
* caseWhen()
|
|
172
|
+
* .when({ age: { [Op.gte]: 18 } }, 'adult')
|
|
173
|
+
* .else('minor')
|
|
174
|
+
* .as('ageGroup')
|
|
175
|
+
* ```
|
|
176
|
+
*/
|
|
177
|
+
export declare function caseWhen(): CaseBuilder;
|
|
178
|
+
/**
|
|
179
|
+
* Start a "simple" CASE expression:
|
|
180
|
+
* CASE expr WHEN val1 THEN result1 [WHEN val2 THEN result2 ...] [ELSE else] END
|
|
181
|
+
*
|
|
182
|
+
* @param expr - The expression being compared. A plain string is treated as
|
|
183
|
+
* a column name (identifier-escaped); pass `col('name')`, `fn(...)`, or
|
|
184
|
+
* `literal(...)` for other expression types.
|
|
185
|
+
*
|
|
186
|
+
* @example
|
|
187
|
+
* ```typescript
|
|
188
|
+
* caseOf('status')
|
|
189
|
+
* .when('active', 1)
|
|
190
|
+
* .when('inactive', 0)
|
|
191
|
+
* .else(null)
|
|
192
|
+
* .as('statusFlag')
|
|
193
|
+
* ```
|
|
194
|
+
*/
|
|
195
|
+
export declare function caseOf(expr: CaseValue | string): SimpleCaseBuilder;
|