ts-prorm-orm 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +83 -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 +711 -0
- package/dist/index.js +19 -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,202 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed date/time function builder API.
|
|
3
|
+
*
|
|
4
|
+
* Date truncation, date arithmetic (add/subtract), date-difference, "current
|
|
5
|
+
* date/time" helpers, and best-effort date formatting differ WILDLY across
|
|
6
|
+
* the 11 SQL dialects this ORM supports (Postgres `DATE_TRUNC`, MySQL
|
|
7
|
+
* `DATE_ADD`/`DATEDIFF`, MSSQL `DATEADD`/`DATEDIFF`, Oracle `TRUNC`/
|
|
8
|
+
* `ADD_MONTHS`, SQLite `strftime`/`julianday`, etc). This module gives callers
|
|
9
|
+
* a single typed entry point per capability so they never have to hand-write
|
|
10
|
+
* dialect-specific SQL strings themselves.
|
|
11
|
+
*
|
|
12
|
+
* This module is intentionally self-contained, mirroring the approach taken
|
|
13
|
+
* in `src/query-builders/functions/window.ts`: it does NOT add any new
|
|
14
|
+
* dispatch branches to the shared SQL compiler (`src/query-builders/
|
|
15
|
+
* sql-compiler.ts`) or to `src/operators.ts`. Every function below computes
|
|
16
|
+
* a final, dialect-correct SQL fragment string directly and wraps it with the
|
|
17
|
+
* existing `literal()` helper from `src/operators.ts` so it slots into
|
|
18
|
+
* `attributes: [...]` / `where` clauses exactly the way `fn()`/`col()`/
|
|
19
|
+
* `cast()`/`extract()` do today.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```typescript
|
|
23
|
+
* import { dateTrunc, dateAdd, dateDiff, now, formatDate } from './query-builders/functions/datetime';
|
|
24
|
+
* import { col } from '../../operators';
|
|
25
|
+
*
|
|
26
|
+
* User.findAll({
|
|
27
|
+
* attributes: [
|
|
28
|
+
* 'id',
|
|
29
|
+
* dateTrunc('postgres', 'month', col('createdAt')).as('signupMonth'),
|
|
30
|
+
* dateAdd('postgres', col('createdAt'), 30, 'day').as('trialEnds'),
|
|
31
|
+
* dateDiff('mysql', 'day', col('startDate'), col('endDate')).as('durationDays'),
|
|
32
|
+
* now('sqlite').as('rightNow'),
|
|
33
|
+
* formatDate('postgres', col('createdAt'), 'YYYY-MM-DD').as('createdAtStr'),
|
|
34
|
+
* ],
|
|
35
|
+
* });
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
import { type FnExpression, type ColExpression, type LiteralExpression } from '../../operators';
|
|
39
|
+
import type { Dialect } from '../../types/index';
|
|
40
|
+
/** Any value accepted where a date/time expression or column is expected. */
|
|
41
|
+
export type DateTimeArg = string | number | Date | ColExpression | FnExpression | LiteralExpression | {
|
|
42
|
+
$literal: string;
|
|
43
|
+
} | DateTimeExpression | null | undefined;
|
|
44
|
+
/**
|
|
45
|
+
* A wrapped, dialect-resolved SQL expression produced by the functions below.
|
|
46
|
+
* Renders through the same `{ $literal }` channel that `Op.literal()` /
|
|
47
|
+
* `literal()` already produce, so it can be used anywhere an attribute
|
|
48
|
+
* expression, WHERE value, or ORDER BY expression is accepted.
|
|
49
|
+
*/
|
|
50
|
+
export interface DateTimeExpression {
|
|
51
|
+
__type: 'literal';
|
|
52
|
+
sql: string;
|
|
53
|
+
$literal: string;
|
|
54
|
+
/** Wrap this expression with an alias, returning an `[expr, alias]` tuple. */
|
|
55
|
+
as(alias: string): [DateTimeExpression, string];
|
|
56
|
+
}
|
|
57
|
+
export type DateTruncUnit = 'year' | 'quarter' | 'month' | 'week' | 'day' | 'hour' | 'minute' | 'second';
|
|
58
|
+
export type DateAddUnit = 'year' | 'month' | 'day' | 'hour' | 'minute' | 'second';
|
|
59
|
+
export type DateDiffUnit = 'year' | 'quarter' | 'month' | 'week' | 'day' | 'hour' | 'minute' | 'second';
|
|
60
|
+
/**
|
|
61
|
+
* Truncate a date/timestamp expression down to the start of the given unit
|
|
62
|
+
* boundary (year/quarter/month/week/day/hour/minute/second).
|
|
63
|
+
*
|
|
64
|
+
* Dialect notes:
|
|
65
|
+
* - postgres / cockroachdb / redshift: native `DATE_TRUNC('unit', expr)`.
|
|
66
|
+
* - mysql / mariadb: NO native DATE_TRUNC exists (verified) — built via
|
|
67
|
+
* `DATE_FORMAT`/string-concat + `STR_TO_DATE` workarounds.
|
|
68
|
+
* - mssql: uses `DATETRUNC(datepart, expr)`, added in SQL Server 2022. For
|
|
69
|
+
* older MSSQL versions there is no native equivalent; this targets modern
|
|
70
|
+
* SQL Server.
|
|
71
|
+
* - oracle: `TRUNC(expr, fmt)`. Oracle's TRUNC only truncates down to
|
|
72
|
+
* hour/minute ('HH24'/'MI'); truncating to 'second' is a no-op since DATE
|
|
73
|
+
* values already carry second precision, so `expr` is returned unchanged.
|
|
74
|
+
* - sqlite: no native function — built via `strftime()`/string-concat.
|
|
75
|
+
* - db2: no native DATE_TRUNC — built via `VARCHAR_FORMAT`/`TIMESTAMP_FORMAT`
|
|
76
|
+
* round-tripping (Db2's TO_CHAR/TO_DATE equivalents) plus `DAYOFWEEK()`
|
|
77
|
+
* for week truncation.
|
|
78
|
+
* - snowflake: native `DATE_TRUNC('unit', expr)`.
|
|
79
|
+
* - clickhouse: dedicated `toStartOfYear`/`toStartOfQuarter`/`toStartOfMonth`/
|
|
80
|
+
* `toStartOfWeek`/`toStartOfDay`/`toStartOfHour`/`toStartOfMinute`/
|
|
81
|
+
* `toStartOfSecond` functions (genuinely different function-per-unit API,
|
|
82
|
+
* not a single parameterized function).
|
|
83
|
+
*/
|
|
84
|
+
export declare function dateTrunc(dialect: Dialect, unit: DateTruncUnit, expr: DateTimeArg): DateTimeExpression;
|
|
85
|
+
/**
|
|
86
|
+
* Add `amount` units of time to a date/timestamp expression.
|
|
87
|
+
* See dialect notes on {@link dateTrunc} / module doc for the general
|
|
88
|
+
* per-dialect divergence rationale; per-function notes:
|
|
89
|
+
* - postgres/cockroachdb: `expr + INTERVAL 'n unit'`.
|
|
90
|
+
* - redshift: `DATEADD(unit, n, expr)` (SQL-Server-style function, NOT interval
|
|
91
|
+
* arithmetic, despite being Postgres-derived).
|
|
92
|
+
* - mysql/mariadb: `DATE_ADD(expr, INTERVAL n UNIT)`.
|
|
93
|
+
* - mssql/snowflake: `DATEADD(unit, n, expr)`.
|
|
94
|
+
* - oracle: day-level uses plain `+`/`-` arithmetic (Oracle DATE math is in
|
|
95
|
+
* days); month/year use `ADD_MONTHS`; hour/minute/second are expressed as
|
|
96
|
+
* fractional-day arithmetic.
|
|
97
|
+
* - sqlite: `datetime(expr, '+n units')`.
|
|
98
|
+
* - db2: labeled-duration arithmetic, e.g. `expr + n DAYS`.
|
|
99
|
+
* - clickhouse: ANSI `expr + INTERVAL n UNIT`.
|
|
100
|
+
*/
|
|
101
|
+
export declare function dateAdd(dialect: Dialect, expr: DateTimeArg, amount: number, unit: DateAddUnit): DateTimeExpression;
|
|
102
|
+
/**
|
|
103
|
+
* Subtract `amount` units of time from a date/timestamp expression.
|
|
104
|
+
* Equivalent to `dateAdd(dialect, expr, -amount, unit)` — see {@link dateAdd}
|
|
105
|
+
* for per-dialect SQL notes.
|
|
106
|
+
*/
|
|
107
|
+
export declare function dateSub(dialect: Dialect, expr: DateTimeArg, amount: number, unit: DateAddUnit): DateTimeExpression;
|
|
108
|
+
/**
|
|
109
|
+
* Compute the difference between two date/timestamp expressions
|
|
110
|
+
* (`end - start`) expressed in the given unit.
|
|
111
|
+
*
|
|
112
|
+
* Dialect notes (this is the function with the widest genuine divergence):
|
|
113
|
+
* - mysql/mariadb: `TIMESTAMPDIFF(UNIT, start, end)` (native, all units).
|
|
114
|
+
* - mssql/snowflake: `DATEDIFF(unit, start, end)` (native, all units).
|
|
115
|
+
* - redshift: also has a genuine native `DATEDIFF(datepart, start, end)`
|
|
116
|
+
* function (SQL-Server-style), unlike Postgres which has no such function.
|
|
117
|
+
* - clickhouse: native `dateDiff('unit', start, end)`.
|
|
118
|
+
* - postgres/cockroachdb: NO native DATEDIFF — day uses date subtraction
|
|
119
|
+
* (`end::date - start::date`), sub-day units use
|
|
120
|
+
* `EXTRACT(EPOCH FROM (end - start))` scaled, and year/month are computed
|
|
121
|
+
* from `EXTRACT(YEAR/MONTH FROM ...)` components.
|
|
122
|
+
* - oracle: NO native DATEDIFF — DATE subtraction yields a day count
|
|
123
|
+
* (`TRUNC(end) - TRUNC(start)` for whole days, scaled for other sub-day
|
|
124
|
+
* units); month/year use `MONTHS_BETWEEN`.
|
|
125
|
+
* - sqlite: NO native DATEDIFF — built on `julianday()` differences (day and
|
|
126
|
+
* sub-day units) and `strftime('%Y'/'%m', ...)` component differences
|
|
127
|
+
* (month/year, since julianday-based month math is not calendar-exact).
|
|
128
|
+
* - db2: NO native DATEDIFF — built from `DAYS()` (whole-day difference) and
|
|
129
|
+
* `MIDNIGHT_SECONDS()` (intra-day seconds) for day/sub-day units, and
|
|
130
|
+
* `YEAR()`/`MONTH()` component differences for month/year.
|
|
131
|
+
*/
|
|
132
|
+
export declare function dateDiff(dialect: Dialect, unit: DateDiffUnit, start: DateTimeArg, end: DateTimeArg): DateTimeExpression;
|
|
133
|
+
/**
|
|
134
|
+
* Current date-and-time (instant), dialect-appropriate.
|
|
135
|
+
* - mysql/mariadb: `NOW()`
|
|
136
|
+
* - postgres/cockroachdb/redshift: `NOW()`
|
|
137
|
+
* - mssql: `GETDATE()`
|
|
138
|
+
* - oracle: `SYSTIMESTAMP`
|
|
139
|
+
* - sqlite: `datetime('now')`
|
|
140
|
+
* - db2: `CURRENT TIMESTAMP` (special register, no parentheses)
|
|
141
|
+
* - snowflake: `CURRENT_TIMESTAMP()`
|
|
142
|
+
* - clickhouse: `now()`
|
|
143
|
+
*/
|
|
144
|
+
export declare function now(dialect: Dialect): DateTimeExpression;
|
|
145
|
+
/**
|
|
146
|
+
* Current date (no time component), dialect-appropriate.
|
|
147
|
+
* - mysql/mariadb: `CURDATE()`
|
|
148
|
+
* - postgres/cockroachdb/redshift: `CURRENT_DATE`
|
|
149
|
+
* - mssql: `CAST(GETDATE() AS DATE)`
|
|
150
|
+
* - oracle: `TRUNC(SYSDATE)`
|
|
151
|
+
* - sqlite: `date('now')`
|
|
152
|
+
* - db2: `CURRENT DATE` (special register)
|
|
153
|
+
* - snowflake: `CURRENT_DATE()`
|
|
154
|
+
* - clickhouse: `today()`
|
|
155
|
+
*/
|
|
156
|
+
export declare function currentDate(dialect: Dialect): DateTimeExpression;
|
|
157
|
+
/**
|
|
158
|
+
* Current timestamp (ANSI-standard spelling where available), dialect-appropriate.
|
|
159
|
+
* - mysql/mariadb/postgres/cockroachdb/redshift/db2: `CURRENT_TIMESTAMP`
|
|
160
|
+
* - mssql: `CURRENT_TIMESTAMP` (ANSI synonym for `GETDATE()`)
|
|
161
|
+
* - oracle: `CURRENT_TIMESTAMP` (session-timezone-aware; distinct from `SYSTIMESTAMP`)
|
|
162
|
+
* - sqlite: `CURRENT_TIMESTAMP` (SQLite keyword, UTC)
|
|
163
|
+
* - snowflake: `CURRENT_TIMESTAMP()`
|
|
164
|
+
* - clickhouse: `now()` (no distinct `CURRENT_TIMESTAMP`; `now()` is the canonical form)
|
|
165
|
+
*/
|
|
166
|
+
export declare function currentTimestamp(dialect: Dialect): DateTimeExpression;
|
|
167
|
+
/**
|
|
168
|
+
* Format a date/timestamp expression as a string.
|
|
169
|
+
*
|
|
170
|
+
* IMPORTANT: format-token translation here is BEST-EFFORT for a common
|
|
171
|
+
* subset of tokens, NOT a full strftime-compatible formatting engine. Only
|
|
172
|
+
* the following tokens are recognized in the input `format` string (case
|
|
173
|
+
* sensitive, matched longest-first so e.g. `HH24` is not partially consumed
|
|
174
|
+
* by `HH`):
|
|
175
|
+
* - `YYYY` - 4-digit year
|
|
176
|
+
* - `MM` - 2-digit month (01-12)
|
|
177
|
+
* - `DD` - 2-digit day of month (01-31)
|
|
178
|
+
* - `HH24` - 2-digit hour, 24-hour clock (00-23)
|
|
179
|
+
* - `HH` - 2-digit hour, 12-hour clock (01-12)
|
|
180
|
+
* - `MI` - 2-digit minute (00-59)
|
|
181
|
+
* - `SS` - 2-digit second (00-59)
|
|
182
|
+
* Any other characters in `format` (literal separators like `-`, `/`, `:`,
|
|
183
|
+
* spaces, etc) are passed through unchanged, best-effort, per dialect.
|
|
184
|
+
*
|
|
185
|
+
* Dialect notes:
|
|
186
|
+
* - postgres/cockroachdb/redshift/oracle: `TO_CHAR(expr, format)` — these
|
|
187
|
+
* tokens map onto TO_CHAR's native template natively, so the format string
|
|
188
|
+
* passes through unchanged.
|
|
189
|
+
* - mysql/mariadb: `DATE_FORMAT(expr, format)`, tokens translated to `%Y`,
|
|
190
|
+
* `%m`, `%d`, `%H`, `%h`, `%i`, `%s`.
|
|
191
|
+
* - mssql: `FORMAT(expr, format)`, tokens translated to .NET-style `yyyy`,
|
|
192
|
+
* `MM`, `dd`, `HH`, `hh`, `mm`, `ss`.
|
|
193
|
+
* - sqlite: `strftime(format, expr)`, tokens translated to `%Y`, `%m`, `%d`,
|
|
194
|
+
* `%H`, `%I`, `%M`, `%S`.
|
|
195
|
+
* - db2: `VARCHAR_FORMAT(expr, format)` (Db2's TO_CHAR-equivalent); tokens
|
|
196
|
+
* pass through unchanged like Oracle/Postgres.
|
|
197
|
+
* - snowflake: `TO_VARCHAR(expr, format)`; tokens pass through unchanged.
|
|
198
|
+
* - clickhouse: `formatDateTime(expr, format)`, tokens translated to `%Y`,
|
|
199
|
+
* `%m`, `%d`, `%H`, `%I`, `%i`, `%S` (ClickHouse's directives are
|
|
200
|
+
* MySQL-`strftime`-like, notably using `%i` for minutes like MySQL).
|
|
201
|
+
*/
|
|
202
|
+
export declare function formatDate(dialect: Dialect, expr: DateTimeArg, format: string): DateTimeExpression;
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed, cross-dialect full-text-SEARCH-QUERY API.
|
|
3
|
+
*
|
|
4
|
+
* Several dialect drivers in this ORM already expose native FULLTEXT
|
|
5
|
+
* *index creation* helpers (grep `createFulltextIndex` in
|
|
6
|
+
* `src/dialects/*/index.ts`: mysql, mariadb, postgres, cockroachdb, mssql,
|
|
7
|
+
* oracle, sqlite, clickhouse all have one; db2/redshift throw a documented
|
|
8
|
+
* "not supported" error; snowflake is a documented no-op). What has been
|
|
9
|
+
* missing is a typed helper for the *query* side — the actual
|
|
10
|
+
* `MATCH() AGAINST()` / `@@ plainto_tsquery()` / `CONTAINS()` / `MATCH`
|
|
11
|
+
* predicate that goes in a `WHERE` (or `ORDER BY`, for relevance ranking).
|
|
12
|
+
* This module fills that gap.
|
|
13
|
+
*
|
|
14
|
+
* This module is intentionally self-contained: it does not add any new
|
|
15
|
+
* dispatch branches to `src/operators.ts`, `src/query-builders/sql-compiler.ts`,
|
|
16
|
+
* or any `src/dialects/**` file. Every function resolves directly to a final,
|
|
17
|
+
* dialect-correct SQL fragment string, which is then wrapped with the
|
|
18
|
+
* existing `literal()` helper from `src/operators.ts` (returns `{ $literal: sql }`,
|
|
19
|
+
* the same shape produced by `Op.literal(...)` and consumed throughout the
|
|
20
|
+
* where-builder/sql-compiler for raw-SQL escape hatches).
|
|
21
|
+
*
|
|
22
|
+
* IMPORTANT — verified limitation of the current WHERE-clause builder
|
|
23
|
+
* ---------------------------------------------------------------------
|
|
24
|
+
* `literal()`/`{ $literal }` is fully supported (and the recommended,
|
|
25
|
+
* documented way to inject raw SQL) when it is used as the *value* of a
|
|
26
|
+
* field/operator, e.g.:
|
|
27
|
+
* `where: { createdAt: { [Op.lt]: literal('NOW()') } }`
|
|
28
|
+
* However, at the time this module was written, `WhereBuilder`
|
|
29
|
+
* (`src/query-builders/where-builder.ts`) and the per-dialect
|
|
30
|
+
* `buildWhereClause()` implementations only support `{ $literal }` as an
|
|
31
|
+
* *operator value*; they do not currently accept a bare `{ $literal }` (or a
|
|
32
|
+
* plain raw-SQL string) as an entire standalone condition — whether at the
|
|
33
|
+
* top level of `where`, or nested inside `$and`/`Op.and`/`$or`/`Op.or`
|
|
34
|
+
* arrays. This was verified empirically: such conditions are silently
|
|
35
|
+
* dropped rather than raising an error (a pre-existing gap in the shared
|
|
36
|
+
* where-builder, not something this module can fix without editing that
|
|
37
|
+
* file, which is out of scope here).
|
|
38
|
+
*
|
|
39
|
+
* Because of that, the SQL fragments produced by `fullTextMatch()` /
|
|
40
|
+
* `fullTextRank()` are safe and correct to use:
|
|
41
|
+
* - directly in hand-built / raw SQL (`prorm.query(...)`), by reading
|
|
42
|
+
* `.$literal` off the returned value,
|
|
43
|
+
* - in `attributes: [...]` (SELECT) and `order: [...]` (ORDER BY) arrays,
|
|
44
|
+
* both of which DO correctly render raw literal SQL fragments today
|
|
45
|
+
* (verified against `sql-compiler.ts`'s `processAttributeValue()` and
|
|
46
|
+
* `order-limit-builder.ts`'s `buildOrderItem()`, which passes through
|
|
47
|
+
* plain strings/literal SQL unchanged).
|
|
48
|
+
* They are returned in the canonical `{ $literal: sql }` shape (rather than
|
|
49
|
+
* a bare string) so that call sites which build `where` conditions through
|
|
50
|
+
* `Op`-based helpers remain forward-compatible: if/when the WHERE-clause gap
|
|
51
|
+
* above is fixed, code using this module keeps working with no changes.
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```typescript
|
|
55
|
+
* import { fullTextMatch, fullTextRank } from './query-builders/functions/fulltext';
|
|
56
|
+
*
|
|
57
|
+
* const match = fullTextMatch('mysql', ['title', 'body'], 'red widgets');
|
|
58
|
+
* // match.$literal === "MATCH(`title`, `body`) AGAINST('red widgets' IN NATURAL LANGUAGE MODE)"
|
|
59
|
+
*
|
|
60
|
+
* // Use for scoring/ordering (works today via ORDER BY / attributes):
|
|
61
|
+
* const rank = fullTextRank('postgres', 'body', 'red widgets');
|
|
62
|
+
* Article.findAll({
|
|
63
|
+
* attributes: ['id', 'title', [rank, 'relevance']],
|
|
64
|
+
* order: [[rank.$literal, 'DESC']],
|
|
65
|
+
* });
|
|
66
|
+
*
|
|
67
|
+
* // Use directly in a raw query for WHERE (recommended today):
|
|
68
|
+
* await prorm.query(
|
|
69
|
+
* `SELECT * FROM articles WHERE ${match.$literal}`
|
|
70
|
+
* );
|
|
71
|
+
* ```
|
|
72
|
+
*/
|
|
73
|
+
import { type LiteralValue } from '../../operators';
|
|
74
|
+
import type { Dialect } from '../../types/index';
|
|
75
|
+
/**
|
|
76
|
+
* Search mode for `fullTextMatch()`.
|
|
77
|
+
* - 'natural' (default): natural-language / "find documents about this text" search.
|
|
78
|
+
* - 'boolean': operator-aware search (dialect-specific boolean/text-search
|
|
79
|
+
* operator syntax, e.g. MySQL boolean-mode `+word -word "phrase"`, MSSQL
|
|
80
|
+
* `CONTAINS`, Oracle Text `CONTAINS` operators).
|
|
81
|
+
* - 'phrase': exact-phrase search where the dialect has a distinct,
|
|
82
|
+
* better-suited construct for it (e.g. Postgres `websearch_to_tsquery`,
|
|
83
|
+
* MySQL boolean-mode quoted phrase, MSSQL/SQLite quoted phrase).
|
|
84
|
+
*/
|
|
85
|
+
export type FullTextMatchMode = 'natural' | 'boolean' | 'phrase';
|
|
86
|
+
/**
|
|
87
|
+
* Companion enum for `FullTextMatchMode`. Provided for callers who prefer a
|
|
88
|
+
* typed enum over hand-written string literals (e.g. `FullTextSearchMode.Boolean`
|
|
89
|
+
* instead of `'boolean'`). The two are interchangeable: `FullTextSearchMode`'s
|
|
90
|
+
* members are assignable to `FullTextMatchMode` (and vice versa, since the
|
|
91
|
+
* enum is string-valued), and `FullTextMatchOptions.mode` accepts either.
|
|
92
|
+
* This is purely additive — no existing string-literal call sites need to
|
|
93
|
+
* change.
|
|
94
|
+
*/
|
|
95
|
+
export declare enum FullTextSearchMode {
|
|
96
|
+
Natural = "natural",
|
|
97
|
+
Boolean = "boolean",
|
|
98
|
+
Phrase = "phrase"
|
|
99
|
+
}
|
|
100
|
+
export interface FullTextMatchOptions {
|
|
101
|
+
/** Search mode. Defaults to 'natural'. Accepts either the string-literal
|
|
102
|
+
* union (`'natural' | 'boolean' | 'phrase'`) or the companion
|
|
103
|
+
* `FullTextSearchMode` enum. */
|
|
104
|
+
mode?: FullTextMatchMode | FullTextSearchMode;
|
|
105
|
+
/**
|
|
106
|
+
* Text search configuration/language for dialects that use one
|
|
107
|
+
* (currently Postgres/CockroachDB `to_tsvector`/`plainto_tsquery`/
|
|
108
|
+
* `websearch_to_tsquery`). Defaults to `'english'`.
|
|
109
|
+
*/
|
|
110
|
+
config?: string;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Columns argument accepted by every function in this module: a single
|
|
114
|
+
* column name, or an array of column names. Dotted `table.column` names are
|
|
115
|
+
* passed through as-is (quoted as a whole), matching the convention used by
|
|
116
|
+
* `col()` in `src/operators.ts`.
|
|
117
|
+
*/
|
|
118
|
+
export type FullTextColumns = string | string[];
|
|
119
|
+
/**
|
|
120
|
+
* Build a dialect-correct full-text-search WHERE-predicate SQL fragment.
|
|
121
|
+
*
|
|
122
|
+
* Returns `{ $literal: sql }` (see module header for the supported/verified
|
|
123
|
+
* usage patterns for this shape).
|
|
124
|
+
*
|
|
125
|
+
* Per-dialect behavior:
|
|
126
|
+
* - mysql/mariadb: `MATCH(col1, col2) AGAINST('term' IN NATURAL LANGUAGE MODE | IN BOOLEAN MODE)`.
|
|
127
|
+
* `mode: 'phrase'` uses boolean mode with the term wrapped in `"..."` for
|
|
128
|
+
* an exact-phrase match (MySQL boolean-mode phrase syntax).
|
|
129
|
+
* NOTE: requires a `FULLTEXT` index on the given column(s) — see
|
|
130
|
+
* `createFulltextIndex()` in `src/dialects/mysql/index.ts` / `mariadb/index.ts`.
|
|
131
|
+
* - postgres/cockroachdb: `to_tsvector('english', col1 || ' ' || col2) @@ plainto_tsquery('english', 'term')`.
|
|
132
|
+
* `mode: 'phrase'` uses `websearch_to_tsquery` instead of `plainto_tsquery`
|
|
133
|
+
* for more natural, phrase-aware parsing (supports quoted phrases, `-`,
|
|
134
|
+
* `OR`). NOTE: works on any text column; a GIN index
|
|
135
|
+
* (`createFulltextIndex()`) is only needed for performance, not correctness.
|
|
136
|
+
* - mssql: `mode: 'natural'` (default) uses `FREETEXT(col, 'term')`;
|
|
137
|
+
* `mode: 'boolean'` / `mode: 'phrase'` uses `CONTAINS(col, 'term')`
|
|
138
|
+
* (phrase mode wraps the term in `"..."`, which is exact-phrase syntax
|
|
139
|
+
* for `CONTAINS`). NOTE: requires a full-text index/catalog — see
|
|
140
|
+
* `createFulltextIndex()` in `src/dialects/mssql/index.ts`.
|
|
141
|
+
* - oracle: `CONTAINS(col, 'term', 1) > 0` (Oracle Text). Multiple columns
|
|
142
|
+
* are OR-ed together, since Oracle Text indexes and scores one column at
|
|
143
|
+
* a time. NOTE: requires an Oracle Text index — see `createFulltextIndex()`
|
|
144
|
+
* in `src/dialects/oracle/index.ts`.
|
|
145
|
+
* - sqlite: `col MATCH 'term'`. STRUCTURAL REQUIREMENT (unlike every other
|
|
146
|
+
* dialect above): this only works against an FTS5 virtual table/column
|
|
147
|
+
* (see `createFulltextIndex()` / `createFTS5Table()` in
|
|
148
|
+
* `src/dialects/sqlite/index.ts`) — SQLite has no secondary full-text
|
|
149
|
+
* index you can bolt onto an ordinary table the way MySQL/Postgres/MSSQL
|
|
150
|
+
* do; the table itself must be an `fts5` virtual table.
|
|
151
|
+
* - clickhouse: uses `hasToken(col, 'term')` for a single-token exact
|
|
152
|
+
* match, or `multiSearchAny(col, ['term1', 'term2', ...])` when
|
|
153
|
+
* `searchTerm` contains multiple whitespace-separated words. Multiple
|
|
154
|
+
* columns are OR-ed together. See `createFulltextIndex()` (ClickHouse
|
|
155
|
+
* `ngrambf_v1`/`tokenbf_v1` index) in `src/dialects/clickhouse/index.ts`.
|
|
156
|
+
* - db2: THROWS. Db2's optional Text Search feature (Net Search Extender)
|
|
157
|
+
* has its own `CONTAINS`-like predicate syntax, but it could not be
|
|
158
|
+
* verified with confidence here, and `createFulltextIndex()` in
|
|
159
|
+
* `src/dialects/db2/index.ts` itself throws
|
|
160
|
+
* "Fulltext indexes are not supported in Db2 LUW (requires Net Search
|
|
161
|
+
* Extender)" — so there is no verified index-creation path to pair a
|
|
162
|
+
* query against either. Throwing here rather than guessing avoids
|
|
163
|
+
* shipping silently-wrong SQL.
|
|
164
|
+
* - snowflake: FALLBACK, not true full-text search. Snowflake has no
|
|
165
|
+
* Postgres-style `tsvector`/`tsquery` full-text search primitive (its
|
|
166
|
+
* closest offerings are Cortex Search / Search Optimization Service,
|
|
167
|
+
* which are not plain-SQL predicates); `createFulltextIndex()` in
|
|
168
|
+
* `src/dialects/snowflake/index.ts` is a documented no-op for the same
|
|
169
|
+
* reason. Falls back to `ILIKE '%term%'` (case-insensitive substring
|
|
170
|
+
* match — no tokenization, stemming, or relevance ranking).
|
|
171
|
+
* - redshift: FALLBACK, not true full-text search. Redshift (unlike
|
|
172
|
+
* Postgres, which it forked from) does not implement `tsvector`/`tsquery`;
|
|
173
|
+
* `createFulltextIndex()` in `src/dialects/redshift/index.ts` throws
|
|
174
|
+
* accordingly. Falls back to `ILIKE '%term%'`, same caveat as Snowflake.
|
|
175
|
+
*
|
|
176
|
+
* @param dialect - Target SQL dialect.
|
|
177
|
+
* @param columns - Column name, or array of column names, to search.
|
|
178
|
+
* @param searchTerm - The user's search text.
|
|
179
|
+
* @param options - `{ mode, config }`, see `FullTextMatchOptions`.
|
|
180
|
+
*/
|
|
181
|
+
export declare function fullTextMatch(dialect: Dialect, columns: FullTextColumns, searchTerm: string, options?: FullTextMatchOptions): LiteralValue;
|
|
182
|
+
/**
|
|
183
|
+
* Build a dialect-correct full-text relevance-SCORE SQL expression, for use
|
|
184
|
+
* in `SELECT`/`attributes` or `ORDER BY`/`order` — NOT a boolean WHERE
|
|
185
|
+
* predicate (use `fullTextMatch()` for that).
|
|
186
|
+
*
|
|
187
|
+
* Returns `{ $literal: sql }`. This shape is safe to use directly in
|
|
188
|
+
* `attributes: [...]` and `order: [...]` today (see module header) —
|
|
189
|
+
* both channels render raw literal SQL fragments correctly, unlike
|
|
190
|
+
* the WHERE-clause builder.
|
|
191
|
+
*
|
|
192
|
+
* Support by dialect:
|
|
193
|
+
* - postgres/cockroachdb: `ts_rank(to_tsvector('english', col), plainto_tsquery('english', 'term'))`.
|
|
194
|
+
* - mysql/mariadb: `MATCH(col1, col2) AGAINST('term')` — in MySQL/MariaDB,
|
|
195
|
+
* using `MATCH() AGAINST()` outside of a boolean context (e.g. in
|
|
196
|
+
* `SELECT`/`ORDER BY`) naturally evaluates to the relevance score
|
|
197
|
+
* (a floating point number), so the same construct doubles as both a
|
|
198
|
+
* predicate (via `fullTextMatch`) and a score.
|
|
199
|
+
* - oracle: `SCORE(1)` (Oracle Text). REQUIRES a `CONTAINS(col, 'term', 1) > 0`
|
|
200
|
+
* predicate using the *same* label (`1`) to appear in the query's WHERE
|
|
201
|
+
* clause (e.g. from `fullTextMatch(dialect, col, term)`), per Oracle Text
|
|
202
|
+
* rules — `SCORE(n)` reads the score computed by the `CONTAINS` call
|
|
203
|
+
* labeled `n` elsewhere in the same query.
|
|
204
|
+
* - mssql, sqlite, clickhouse, db2, redshift, snowflake: THROWS. None of
|
|
205
|
+
* these has a genuine, verifiable relevance-scoring mechanism usable as
|
|
206
|
+
* a plain SQL expression:
|
|
207
|
+
* - mssql: `CONTAINS`/`FREETEXT` are boolean predicates only; ranked
|
|
208
|
+
* results require `CONTAINSTABLE`/`FREETEXTTABLE` (table-valued
|
|
209
|
+
* functions joined in, not an expression usable inline).
|
|
210
|
+
* - sqlite FTS5: ranking requires the `bm25()` auxiliary function,
|
|
211
|
+
* which (like MSSQL's *TABLE functions) can only be selected from
|
|
212
|
+
* the FTS5 virtual table itself, not expressed against an arbitrary
|
|
213
|
+
* base-table column the way `fullTextMatch()`'s column argument
|
|
214
|
+
* implies — so it does not fit this API's per-column shape.
|
|
215
|
+
* - clickhouse: `hasToken`/`multiSearchAny` return booleans; there is
|
|
216
|
+
* no built-in relevance score function.
|
|
217
|
+
* - db2/redshift/snowflake: no native full-text search at all (see
|
|
218
|
+
* `fullTextMatch()` docs above), so there is nothing to rank.
|
|
219
|
+
*/
|
|
220
|
+
export declare function fullTextRank(dialect: Dialect, columns: FullTextColumns, searchTerm: string, options?: Pick<FullTextMatchOptions, 'config'>): LiteralValue;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Barrel export for the typed SQL function-builder library.
|
|
3
|
+
* Lets callers do `import { rowNumber, jsonExtract, fullTextMatch } from 'prorm'`
|
|
4
|
+
* instead of hand-writing raw SQL fragments.
|
|
5
|
+
*
|
|
6
|
+
* Explicit (not `export *`) because several of these modules independently
|
|
7
|
+
* declare their own local `SqlExpr` type alias (same shape, different
|
|
8
|
+
* files) - re-exporting all three under one name is ambiguous.
|
|
9
|
+
*/
|
|
10
|
+
export { count, countDistinct, sum, avg, min, max, stringAgg, arrayAgg, type SqlExpr, type AggOrderBy, type StringAggOptions, type ArrayAggOptions, } from './aggregate';
|
|
11
|
+
export { CaseBuilder, SimpleCaseBuilder, caseWhen, caseOf, type CaseValue, type CaseCondition, } from './conditional';
|
|
12
|
+
export { dateTrunc, dateAdd, dateSub, dateDiff, now, currentDate, currentTimestamp, formatDate, type DateTimeArg, type DateTimeExpression, type DateTruncUnit, type DateAddUnit, type DateDiffUnit, } from './datetime';
|
|
13
|
+
export { fullTextMatch, fullTextRank, type FullTextMatchMode, type FullTextMatchOptions, type FullTextColumns, } from './fulltext';
|
|
14
|
+
export { jsonExtract, jsonContains, jsonHasKey, jsonKeys, jsonTypeOf, type JsonExprArg, type JsonExtractOptions, } from './json';
|
|
15
|
+
export { round, ceil, floor, power, sqrt, abs, sign, mod, random, greatest, least, truncate, type SqlExpr as MathSqlExpr, } from './math';
|
|
16
|
+
export { concat, substring, trim, ltrim, rtrim, upper, lower, length, replace, lpad, rpad, split, repeat, reverse, type TrimOptions, type SqlExpr as StringSqlExpr, } from './string';
|
|
17
|
+
export { WindowFunctionBuilder, rowNumber, rank, denseRank, percentRank, cumeDist, ntile, lag, lead, firstValue, lastValue, nthValue, sumOver, avgOver, countOver, minOver, maxOver, windowFn, NullsOrder, type WindowDialect, type WindowOrderDirection, type WindowNulls, type WindowFrameBoundary, type WindowFrame, type WindowArg, } from './window';
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-dialect, typed JSON-path function API.
|
|
3
|
+
*
|
|
4
|
+
* This module lets callers pull a JSON field/path out of a JSON/JSONB column
|
|
5
|
+
* (or any expression producing one) as a first-class, typed SQL expression
|
|
6
|
+
* usable in `attributes` / `SELECT`, without ever having to hand-write raw
|
|
7
|
+
* SQL strings for it.
|
|
8
|
+
*
|
|
9
|
+
* It is intentionally self-contained: it does not rely on (or modify) the
|
|
10
|
+
* dialect classes in `src/dialects/**` or the compiler in
|
|
11
|
+
* `src/query-builders/sql-compiler.ts`. Instead it re-derives, per dialect,
|
|
12
|
+
* the exact SQL fragments that this codebase's own dialect-internal
|
|
13
|
+
* WHERE-clause JSON helpers already produce (see the JSDoc on each function
|
|
14
|
+
* below for the specific dialect file/method that was used as the source of
|
|
15
|
+
* truth), so behavior stays consistent with the rest of the ORM.
|
|
16
|
+
*
|
|
17
|
+
* All functions return a `{ $literal: string }` value (the same shape
|
|
18
|
+
* produced by `literal()` in `src/operators.ts`), so the result can be
|
|
19
|
+
* dropped directly into `attributes`, e.g.:
|
|
20
|
+
*
|
|
21
|
+
* ```ts
|
|
22
|
+
* User.findAll({
|
|
23
|
+
* attributes: ['id', [jsonExtract('postgres', 'data', 'address.city'), 'city']],
|
|
24
|
+
* });
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
import type { Dialect } from '../../types/index';
|
|
28
|
+
/** Anything that can be used as the "expression" argument to a json function. */
|
|
29
|
+
export type JsonExprArg = string | {
|
|
30
|
+
__type: 'col';
|
|
31
|
+
col: string;
|
|
32
|
+
} | {
|
|
33
|
+
__type: 'fn';
|
|
34
|
+
fn: string;
|
|
35
|
+
args: any[];
|
|
36
|
+
} | {
|
|
37
|
+
__type: 'literal';
|
|
38
|
+
sql: string;
|
|
39
|
+
} | {
|
|
40
|
+
$literal: string;
|
|
41
|
+
};
|
|
42
|
+
export interface JsonExtractOptions {
|
|
43
|
+
/**
|
|
44
|
+
* When true (the default), extract the value as text/scalar (the
|
|
45
|
+
* `->>`-equivalent). When false, extract as a JSON-typed sub-value (the
|
|
46
|
+
* `->`-equivalent), where the dialect distinguishes the two.
|
|
47
|
+
*/
|
|
48
|
+
asText?: boolean;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Extract a value at a JSON path from `expr` as a typed, cross-dialect SQL
|
|
52
|
+
* expression usable in `attributes` / `SELECT`.
|
|
53
|
+
*
|
|
54
|
+
* Dialect syntax sources (matched against this codebase's existing internal
|
|
55
|
+
* dialect helpers where they exist):
|
|
56
|
+
* - mysql/mariadb: `src/dialects/{mysql,mariadb}/index.ts` `buildJsonExtract` ->
|
|
57
|
+
* `JSON_UNQUOTE(JSON_EXTRACT(col, '$.path'))` (asText) / `JSON_EXTRACT(col, '$.path')`.
|
|
58
|
+
* - mssql: `src/dialects/mssql/index.ts` `buildJsonExtract` ->
|
|
59
|
+
* `JSON_VALUE(col, '$.path')` (asText) / `JSON_QUERY(col, '$.path')`.
|
|
60
|
+
* - sqlite: `src/dialects/sqlite/index.ts` `buildJsonExtract` ->
|
|
61
|
+
* `CAST(json_extract(col, '$.path') AS TEXT)` (asText) / `json_extract(col, '$.path')`.
|
|
62
|
+
* - postgres/cockroachdb: `src/query-builders/where-builder.ts` `#>>`/`#>` handling ->
|
|
63
|
+
* `col #>> '{a,b}'` (asText) / `col #> '{a,b}'`.
|
|
64
|
+
* - oracle: Oracle SQL/JSON functions -> `JSON_VALUE(col, '$.path')` (asText) /
|
|
65
|
+
* `JSON_QUERY(col, '$.path')`.
|
|
66
|
+
* - snowflake: `src/dialects/snowflake/index.ts` `buildJsonQuery` -> `col:a.b::STRING`
|
|
67
|
+
* (asText) / `col:a.b` (VARIANT, non-text).
|
|
68
|
+
* - redshift: SUPER-type dot navigation (see `getDataTypeSql` mapping JSON/JSONB -> SUPER
|
|
69
|
+
* in `src/dialects/redshift/index.ts`) -> `CAST(col.a.b AS VARCHAR)` (asText) / `col.a.b`.
|
|
70
|
+
* - db2: Db2 JSON_VAL/JSON_QUERY path functions -> `JSON_VAL(col, 'a.b')` (asText) /
|
|
71
|
+
* `JSON_QUERY(col, '$.a.b')`.
|
|
72
|
+
* - clickhouse: `JSONExtractString(col, 'a', 'b')` (asText) / `JSONExtractRaw(col, 'a', 'b')`.
|
|
73
|
+
*/
|
|
74
|
+
export declare function jsonExtract(dialect: Dialect, expr: JsonExprArg, path: string | string[], options?: JsonExtractOptions): {
|
|
75
|
+
$literal: string;
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* Does the JSON value in `expr` contain `value` (as a fragment/sub-document,
|
|
79
|
+
* or, where the dialect has no native containment predicate, as an exact
|
|
80
|
+
* equality check)?
|
|
81
|
+
*
|
|
82
|
+
* - mysql/mariadb: `JSON_CONTAINS(col, '<value-json>')` (matches
|
|
83
|
+
* `buildJsonContains` in `src/dialects/{mysql,mariadb}/index.ts`).
|
|
84
|
+
* - postgres/cockroachdb: native jsonb containment operator -> `col @> '<value-json>'::jsonb`.
|
|
85
|
+
* - sqlite: SQLite has no containment operator; mirrors the whole-document
|
|
86
|
+
* equality fallback used by `buildJsonContains` in
|
|
87
|
+
* `src/dialects/sqlite/index.ts` -> `col = '<value-json>'`.
|
|
88
|
+
* - mssql, oracle, snowflake, redshift, db2, clickhouse: none of these expose
|
|
89
|
+
* a native "does this JSON document contain this sub-fragment" predicate
|
|
90
|
+
* (as opposed to key existence or exact-path equality), so this throws a
|
|
91
|
+
* clear "not supported" error rather than emitting a plausible-looking but
|
|
92
|
+
* semantically wrong query.
|
|
93
|
+
*/
|
|
94
|
+
export declare function jsonContains(dialect: Dialect, expr: JsonExprArg, value: unknown): {
|
|
95
|
+
$literal: string;
|
|
96
|
+
};
|
|
97
|
+
/**
|
|
98
|
+
* Does the JSON object in `expr` have the given top-level (or path-qualified,
|
|
99
|
+
* dotted) key?
|
|
100
|
+
*
|
|
101
|
+
* - mysql/mariadb: `JSON_CONTAINS_PATH(col, 'one', '$.key')` (matches
|
|
102
|
+
* `buildJsonHasKey` in `src/dialects/{mysql,mariadb}/index.ts`).
|
|
103
|
+
* - postgres/cockroachdb: native `?` key-existence operator -> `col ? 'key'`
|
|
104
|
+
* (top-level keys only, matching jsonb semantics).
|
|
105
|
+
* - sqlite: `json_extract(col, '$.key') IS NOT NULL` (matches
|
|
106
|
+
* `buildJsonHasKey` in `src/dialects/sqlite/index.ts`).
|
|
107
|
+
* - mssql: `JSON_VALUE(col, '$.key') IS NOT NULL` (standard SQL Server
|
|
108
|
+
* workaround pattern; note this cannot distinguish "key present with a
|
|
109
|
+
* JSON null value" from "key absent").
|
|
110
|
+
* - oracle: `JSON_EXISTS(col, '$.key')`.
|
|
111
|
+
* - snowflake: `ARRAY_CONTAINS('key'::VARIANT, OBJECT_KEYS(col))`.
|
|
112
|
+
* - redshift: SUPER dot-navigation returns SQL NULL for missing attributes,
|
|
113
|
+
* so `col.key IS NOT NULL` reliably detects key presence.
|
|
114
|
+
* - db2: `JSON_EXISTS(col, '$.key')` (Db2 11.5+ JSON path predicates).
|
|
115
|
+
* - clickhouse: `JSONHas(col, 'key')`.
|
|
116
|
+
*/
|
|
117
|
+
export declare function jsonHasKey(dialect: Dialect, expr: JsonExprArg, key: string): {
|
|
118
|
+
$literal: string;
|
|
119
|
+
};
|
|
120
|
+
/**
|
|
121
|
+
* Get the list of top-level keys of a JSON object.
|
|
122
|
+
*
|
|
123
|
+
* - mysql/mariadb: `JSON_KEYS(col)` -> native, returns a JSON array of keys.
|
|
124
|
+
* - postgres/cockroachdb: `ARRAY(SELECT jsonb_object_keys(col))` -> a SQL
|
|
125
|
+
* text array of keys.
|
|
126
|
+
* - sqlite: `(SELECT json_group_array(key) FROM json_each(col))` -> a JSON
|
|
127
|
+
* array of keys, built from SQLite's own `json_each` table-valued function.
|
|
128
|
+
* - snowflake: `OBJECT_KEYS(col)` -> native, returns an ARRAY of keys.
|
|
129
|
+
* - clickhouse: `JSONExtractKeys(col)` -> native, returns an Array(String).
|
|
130
|
+
* - mssql: no native function returns a JSON/array value of keys inline;
|
|
131
|
+
* `OPENJSON` requires a derived table, so the closest inline expression is
|
|
132
|
+
* a scalar subquery producing a comma-separated string (NOT a JSON array):
|
|
133
|
+
* `(SELECT STRING_AGG([key], ',') FROM OPENJSON(col))`.
|
|
134
|
+
* - oracle, redshift, db2: throw "not supported" - none of these dialects
|
|
135
|
+
* expose a documented function/operator that enumerates JSON object keys
|
|
136
|
+
* as a value usable inline in a SELECT list, so faking one with a fragile
|
|
137
|
+
* workaround would be worse than a clear error.
|
|
138
|
+
*/
|
|
139
|
+
export declare function jsonKeys(dialect: Dialect, expr: JsonExprArg): {
|
|
140
|
+
$literal: string;
|
|
141
|
+
};
|
|
142
|
+
/**
|
|
143
|
+
* Get the JSON value's type (object/array/string/number/boolean/null/...).
|
|
144
|
+
*
|
|
145
|
+
* - mysql/mariadb: `JSON_TYPE(col)` -> native.
|
|
146
|
+
* - postgres/cockroachdb: `jsonb_typeof(col)` -> native.
|
|
147
|
+
* - sqlite: `json_type(col)` -> native.
|
|
148
|
+
* - snowflake: `TYPEOF(col)` -> native (works on VARIANT).
|
|
149
|
+
* - clickhouse: `JSONType(col)` -> native.
|
|
150
|
+
* - mssql, oracle, redshift, db2: throw "not supported" - none of these
|
|
151
|
+
* expose a documented function that returns the JSON value's type as a
|
|
152
|
+
* string (SQL Server's `ISJSON(col, 'object'|'array')` only returns a
|
|
153
|
+
* boolean for two of the possible types, not a general type name).
|
|
154
|
+
*/
|
|
155
|
+
export declare function jsonTypeOf(dialect: Dialect, expr: JsonExprArg): {
|
|
156
|
+
$literal: string;
|
|
157
|
+
};
|