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,230 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trino (formerly PrestoSQL) dialect implementation for the TypeScript ORM.
|
|
3
|
+
*
|
|
4
|
+
* Trino is a distributed, federated SQL query engine. It is *not* a storage
|
|
5
|
+
* engine of its own: it runs ANSI SQL over pluggable connectors (Hive, Iceberg,
|
|
6
|
+
* MySQL, PostgreSQL, Kafka, ...). Because its SQL surface is ANSI-flavored and
|
|
7
|
+
* it quotes identifiers with double quotes (like PostgreSQL), this dialect
|
|
8
|
+
* extends {@link PostgresDialect} and overrides only where Trino differs.
|
|
9
|
+
*
|
|
10
|
+
* Key differences from PostgreSQL that this dialect implements:
|
|
11
|
+
*
|
|
12
|
+
* - **Default port 8080.** Trino's HTTP/query port is 8080, not 5432.
|
|
13
|
+
* The constructor injects it via `super({ port: 8080, ...config })`.
|
|
14
|
+
*
|
|
15
|
+
* - **Three-part table names: `catalog.schema.table`.** A Trino table lives in
|
|
16
|
+
* a connector *catalog* and a *schema*. When a `catalog` is configured (and,
|
|
17
|
+
* optionally, a default `schema`), {@link TrinoDialect.quoteTable} emits the
|
|
18
|
+
* fully-qualified `"catalog"."schema"."table"` form. Without a catalog it
|
|
19
|
+
* falls back to the PostgreSQL `schema.table` behavior.
|
|
20
|
+
*
|
|
21
|
+
* - **Connector table properties via `WITH (...)`.** `CREATE TABLE ... WITH
|
|
22
|
+
* (format = 'ORC', partitioning = ARRAY['col'])` configures the underlying
|
|
23
|
+
* connector (file format, partitioning, bucketing, ...). Exposed through
|
|
24
|
+
* {@link TrinoTableOptions} (`format`, `partitioning`, `tableProperties`).
|
|
25
|
+
*
|
|
26
|
+
* - **`CREATE TABLE AS SELECT` (CTAS).** Trino's primary way to materialize a
|
|
27
|
+
* table from a query. Exposed via {@link TrinoDialect.buildCreateTableAsSelectSQL}
|
|
28
|
+
* (sync SQL builder) and {@link TrinoDialect.createTableAsSelect} (executes it).
|
|
29
|
+
*
|
|
30
|
+
* - **No PRIMARY KEY / FOREIGN KEY / UNIQUE enforcement.** Trino does not
|
|
31
|
+
* support (or enforce) key constraints — `CREATE TABLE` here omits any
|
|
32
|
+
* `PRIMARY KEY`, `FOREIGN KEY`, or `UNIQUE` clause entirely. Constraint
|
|
33
|
+
* metadata on columns/tables is ignored for DDL purposes.
|
|
34
|
+
*
|
|
35
|
+
* - **No AUTO_INCREMENT / identity / sequences.** Trino has no
|
|
36
|
+
* SERIAL/BIGSERIAL/IDENTITY. Surrogate keys are *not* auto-generated;
|
|
37
|
+
* application code (or the source connector) must supply key values. The
|
|
38
|
+
* `autoIncrement` column flag is ignored.
|
|
39
|
+
*
|
|
40
|
+
* - **Type mapping.** Trino uses unbounded `VARCHAR` (no length required),
|
|
41
|
+
* `DOUBLE` (not `DOUBLE PRECISION`), `BOOLEAN`, and `TIMESTAMP`. See
|
|
42
|
+
* {@link TrinoDialect.getDataTypeSql}.
|
|
43
|
+
*/
|
|
44
|
+
import { PostgresDialect, PostgresDialectOptions } from '../postgres/index';
|
|
45
|
+
import { ColumnDefinition, TableOptions, DropTableOptions, InsertOptions, UpdateOptions, DeleteOptions, UpsertQueryOptions, IndexOptions, IndexDefinition, DropIndexOptions } from '../dialect';
|
|
46
|
+
import { DataType, WhereOptions } from '../../types';
|
|
47
|
+
/**
|
|
48
|
+
* Trino-specific connection options. Adds a connector `catalog` and default
|
|
49
|
+
* `schema` on top of the PostgreSQL options; both feed the three-part naming
|
|
50
|
+
* in {@link TrinoDialect.quoteTable}.
|
|
51
|
+
*/
|
|
52
|
+
export interface TrinoDialectOptions extends PostgresDialectOptions {
|
|
53
|
+
/** Connector catalog (e.g. `'hive'`, `'iceberg'`). Enables `catalog.schema.table` naming. */
|
|
54
|
+
catalog?: string;
|
|
55
|
+
/** Default schema used when a query/table doesn't specify one. */
|
|
56
|
+
schema?: string;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Trino connector table properties, emitted as `CREATE TABLE ... WITH (...)`.
|
|
60
|
+
*/
|
|
61
|
+
export interface TrinoTableOptions extends TableOptions {
|
|
62
|
+
/** Storage file format, e.g. `'ORC'`, `'PARQUET'`, `'AVRO'`. Emits `format = '...'`. */
|
|
63
|
+
format?: string;
|
|
64
|
+
/** Partitioning columns, emitted as `partitioning = ARRAY['col1', 'col2']`. */
|
|
65
|
+
partitioning?: string[];
|
|
66
|
+
/** Arbitrary additional connector properties, emitted as `key = value` (strings are quoted). */
|
|
67
|
+
tableProperties?: Record<string, string | number | boolean>;
|
|
68
|
+
/** Schema override for this specific table. */
|
|
69
|
+
schema?: string;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Options for {@link TrinoDialect.buildCreateTableAsSelectSQL} / createTableAsSelect.
|
|
73
|
+
*/
|
|
74
|
+
export interface TrinoCTASOptions extends TrinoTableOptions {
|
|
75
|
+
/** Emit `WITH NO DATA` to create the table structure without copying rows. */
|
|
76
|
+
withNoData?: boolean;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Trino / PrestoSQL federated query engine dialect. Extends {@link PostgresDialect}
|
|
80
|
+
* (ANSI SQL, double-quoted identifiers) and overrides Trino-specific behavior.
|
|
81
|
+
*/
|
|
82
|
+
export declare class TrinoDialect extends PostgresDialect {
|
|
83
|
+
readonly name = "trino";
|
|
84
|
+
/** Configured connector catalog (undefined => fall back to PG-style naming). */
|
|
85
|
+
protected readonly trinoCatalog?: string;
|
|
86
|
+
/** Configured default schema for three-part naming. */
|
|
87
|
+
protected readonly trinoSchema?: string;
|
|
88
|
+
constructor(config: TrinoDialectOptions);
|
|
89
|
+
/**
|
|
90
|
+
* Quote a table name. When a connector catalog is configured, emit the Trino
|
|
91
|
+
* three-part `"catalog"."schema"."table"` form; otherwise defer to the
|
|
92
|
+
* PostgreSQL `schema.table` behavior.
|
|
93
|
+
*/
|
|
94
|
+
quoteTable(tableName: string, schema?: string): string;
|
|
95
|
+
/**
|
|
96
|
+
* Map a data type to Trino SQL. Trino uses unbounded `VARCHAR`, `DOUBLE`,
|
|
97
|
+
* `BOOLEAN`, and `TIMESTAMP`, and has no SERIAL/identity types.
|
|
98
|
+
*/
|
|
99
|
+
getDataTypeSql(dataType: DataType): string;
|
|
100
|
+
/**
|
|
101
|
+
* Build a column definition fragment for Trino DDL. PRIMARY KEY, UNIQUE,
|
|
102
|
+
* FOREIGN KEY (references) and auto-increment are intentionally NOT emitted —
|
|
103
|
+
* Trino neither supports nor enforces them.
|
|
104
|
+
*/
|
|
105
|
+
protected getTrinoColumnDefinitionSql(columnName: string, definition: ColumnDefinition): string;
|
|
106
|
+
/**
|
|
107
|
+
* Build the `WITH (...)` connector-properties clause (or '' when there are
|
|
108
|
+
* no properties). Handles `format`, `partitioning`, and `tableProperties`.
|
|
109
|
+
*/
|
|
110
|
+
protected buildTablePropertiesClause(options?: TrinoTableOptions): string;
|
|
111
|
+
/**
|
|
112
|
+
* Build (synchronously) a Trino `CREATE TABLE` statement. Omits all key
|
|
113
|
+
* constraints (PK/FK/UNIQUE) and appends connector `WITH (...)` properties.
|
|
114
|
+
*/
|
|
115
|
+
buildCreateTableSQL(tableName: string, columns: Record<string, ColumnDefinition>, options?: TrinoTableOptions): string;
|
|
116
|
+
/**
|
|
117
|
+
* Build (synchronously) a Trino `CREATE TABLE ... AS SELECT` (CTAS) statement.
|
|
118
|
+
*
|
|
119
|
+
* @param tableName - Name of the table to create.
|
|
120
|
+
* @param selectQuery - The `SELECT ...` query (raw SQL) to populate it from.
|
|
121
|
+
* @param options - Connector properties and CTAS options.
|
|
122
|
+
*/
|
|
123
|
+
buildCreateTableAsSelectSQL(tableName: string, selectQuery: string, options?: TrinoCTASOptions): string;
|
|
124
|
+
/**
|
|
125
|
+
* Create a table in Trino. Overrides the PostgreSQL implementation to omit
|
|
126
|
+
* key constraints and support connector `WITH (...)` properties.
|
|
127
|
+
*/
|
|
128
|
+
createTable(tableName: string, columns: Record<string, ColumnDefinition>, options?: TrinoTableOptions): Promise<void>;
|
|
129
|
+
/**
|
|
130
|
+
* Execute a `CREATE TABLE AS SELECT` (CTAS) statement.
|
|
131
|
+
*/
|
|
132
|
+
createTableAsSelect(tableName: string, selectQuery: string, options?: TrinoCTASOptions): Promise<void>;
|
|
133
|
+
/**
|
|
134
|
+
* Drop a table. Trino's `DROP TABLE` supports `IF EXISTS` but has no
|
|
135
|
+
* `CASCADE` (there are no dependent constraints to cascade).
|
|
136
|
+
*/
|
|
137
|
+
dropTable(tableName: string, options?: DropTableOptions): Promise<void>;
|
|
138
|
+
/**
|
|
139
|
+
* Add a column. Uses the Trino column-definition builder (no constraints /
|
|
140
|
+
* default / SERIAL) and the catalog-qualified table name.
|
|
141
|
+
*/
|
|
142
|
+
addColumn(tableName: string, columnName: string, definition: ColumnDefinition): Promise<void>;
|
|
143
|
+
/**
|
|
144
|
+
* Remove a column. `ALTER TABLE ... DROP COLUMN` with catalog-qualified name.
|
|
145
|
+
*/
|
|
146
|
+
removeColumn(tableName: string, columnName: string): Promise<void>;
|
|
147
|
+
buildLimitOffset(limit?: number | string, offset?: number | string): string;
|
|
148
|
+
/**
|
|
149
|
+
* Build an INSERT query. Trino form: `INSERT INTO t (cols) VALUES (...)`.
|
|
150
|
+
* No `RETURNING`. Trino has no `ON CONFLICT`, but it DOES support the ANSI
|
|
151
|
+
* `MERGE INTO` statement (on connectors that implement row-level writes, e.g.
|
|
152
|
+
* Iceberg/Delta/Hive-ACID), so an `upsert` request is routed to
|
|
153
|
+
* {@link TrinoDialect.buildUpsertMergeQuery} rather than forcing the caller to hand-
|
|
154
|
+
* write raw SQL. `conflictFields` is required to build the MERGE `ON` clause.
|
|
155
|
+
*/
|
|
156
|
+
buildInsertQuery(tableName: string, values: Record<string, unknown>, options?: InsertOptions): {
|
|
157
|
+
sql: string;
|
|
158
|
+
values: unknown[];
|
|
159
|
+
};
|
|
160
|
+
/**
|
|
161
|
+
* Build an upsert. Trino has no PostgreSQL-style `INSERT ... ON CONFLICT`, but
|
|
162
|
+
* it does implement the ANSI SQL `MERGE INTO` statement, which is the correct,
|
|
163
|
+
* connector-native way to express an upsert on connectors that support
|
|
164
|
+
* row-level writes (Iceberg, Delta, Hive ACID, and the JDBC connectors).
|
|
165
|
+
* Delegates to {@link TrinoDialect.buildUpsertMergeQuery} so no raw SQL is required.
|
|
166
|
+
*/
|
|
167
|
+
buildUpsertQuery(tableName: string, values: Record<string, unknown>, options?: UpsertQueryOptions): {
|
|
168
|
+
sql: string;
|
|
169
|
+
values: unknown[];
|
|
170
|
+
};
|
|
171
|
+
/**
|
|
172
|
+
* Build a Trino `MERGE INTO` statement implementing a single-row upsert.
|
|
173
|
+
*
|
|
174
|
+
* MERGE INTO "cat"."sch"."t" AS t
|
|
175
|
+
* USING (VALUES (?, ?)) AS s ("id", "name")
|
|
176
|
+
* ON t."id" = s."id"
|
|
177
|
+
* WHEN MATCHED THEN UPDATE SET "name" = s."name"
|
|
178
|
+
* WHEN NOT MATCHED THEN INSERT ("id", "name") VALUES (s."id", s."name")
|
|
179
|
+
*
|
|
180
|
+
* The source row is presented as an inline `(VALUES (...)) AS s (cols)`
|
|
181
|
+
* relation. Rows are matched on `conflictFields` (required — Trino has no
|
|
182
|
+
* primary/unique key metadata to infer them from); matched rows update every
|
|
183
|
+
* non-key column (or the explicit `updateOnDuplicate` list) and unmatched
|
|
184
|
+
* rows are inserted. Actual execution requires a connector that supports
|
|
185
|
+
* `MERGE`/row-level writes.
|
|
186
|
+
*
|
|
187
|
+
* @param tableName - Target table (catalog-qualified via {@link quoteTable}).
|
|
188
|
+
* @param values - Column/value pairs for the row to upsert.
|
|
189
|
+
* @param options - `conflictFields` (required) picks the `ON` key columns;
|
|
190
|
+
* `updateOnDuplicate` restricts the WHEN MATCHED update set; `schema`
|
|
191
|
+
* overrides the default schema for the target table.
|
|
192
|
+
*/
|
|
193
|
+
buildUpsertMergeQuery(tableName: string, values: Record<string, unknown>, options?: {
|
|
194
|
+
conflictFields?: string[];
|
|
195
|
+
updateOnDuplicate?: string[];
|
|
196
|
+
schema?: string;
|
|
197
|
+
}): {
|
|
198
|
+
sql: string;
|
|
199
|
+
values: unknown[];
|
|
200
|
+
};
|
|
201
|
+
/**
|
|
202
|
+
* Build an UPDATE query. No `RETURNING`, no `LIMIT` (Trino supports neither
|
|
203
|
+
* on UPDATE). Actual UPDATE support is connector-dependent at run time.
|
|
204
|
+
*/
|
|
205
|
+
buildUpdateQuery(tableName: string, values: Record<string, unknown>, where: WhereOptions, _options?: UpdateOptions): {
|
|
206
|
+
sql: string;
|
|
207
|
+
values: unknown[];
|
|
208
|
+
};
|
|
209
|
+
/**
|
|
210
|
+
* Build a DELETE query. No `RETURNING`, no `LIMIT`. Trino has no `TRUNCATE`,
|
|
211
|
+
* so a `truncate` request degrades to an unqualified `DELETE FROM t`. Actual
|
|
212
|
+
* DELETE support is connector-dependent at run time.
|
|
213
|
+
*/
|
|
214
|
+
buildDeleteQuery(tableName: string, where: WhereOptions, options?: DeleteOptions): {
|
|
215
|
+
sql: string;
|
|
216
|
+
values: unknown[];
|
|
217
|
+
};
|
|
218
|
+
private noIndexes;
|
|
219
|
+
addIndex(_tableName: string, _indexName: string, _fields?: string[], _options?: IndexOptions): Promise<void>;
|
|
220
|
+
createIndex(_tableName: string, _indexDef: IndexDefinition): Promise<void>;
|
|
221
|
+
removeIndex(_tableName: string, _indexName: string): Promise<void>;
|
|
222
|
+
dropIndex(_tableName: string, _indexName: string, _options?: DropIndexOptions): Promise<void>;
|
|
223
|
+
createPartialIndex(_tableName: string, _indexName: string, _fields: string[], _where: string, _options?: IndexOptions): Promise<void>;
|
|
224
|
+
createExpressionIndex(_tableName: string, _indexName: string, _expression: string, _options?: IndexOptions): Promise<void>;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Create a new Trino dialect instance.
|
|
228
|
+
*/
|
|
229
|
+
export declare function createTrinoDialect(options?: TrinoDialectOptions): TrinoDialect;
|
|
230
|
+
export default TrinoDialect;
|
|
@@ -301,13 +301,19 @@ class TrinoDialect extends index_1.PostgresDialect {
|
|
|
301
301
|
// ==========================================================================
|
|
302
302
|
/**
|
|
303
303
|
* Build an INSERT query. Trino form: `INSERT INTO t (cols) VALUES (...)`.
|
|
304
|
-
* No `RETURNING
|
|
304
|
+
* No `RETURNING`. Trino has no `ON CONFLICT`, but it DOES support the ANSI
|
|
305
|
+
* `MERGE INTO` statement (on connectors that implement row-level writes, e.g.
|
|
306
|
+
* Iceberg/Delta/Hive-ACID), so an `upsert` request is routed to
|
|
307
|
+
* {@link TrinoDialect.buildUpsertMergeQuery} rather than forcing the caller to hand-
|
|
308
|
+
* write raw SQL. `conflictFields` is required to build the MERGE `ON` clause.
|
|
305
309
|
*/
|
|
306
310
|
buildInsertQuery(tableName, values, options) {
|
|
307
311
|
if (options?.upsert) {
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
312
|
+
return this.buildUpsertMergeQuery(tableName, values, {
|
|
313
|
+
conflictFields: options.conflictFields,
|
|
314
|
+
updateOnDuplicate: options.updateOnDuplicate,
|
|
315
|
+
schema: options.schema,
|
|
316
|
+
});
|
|
311
317
|
}
|
|
312
318
|
const columns = Object.keys(values);
|
|
313
319
|
const processedValues = [];
|
|
@@ -330,13 +336,82 @@ class TrinoDialect extends index_1.PostgresDialect {
|
|
|
330
336
|
return { sql, values: processedValues };
|
|
331
337
|
}
|
|
332
338
|
/**
|
|
333
|
-
*
|
|
334
|
-
*
|
|
339
|
+
* Build an upsert. Trino has no PostgreSQL-style `INSERT ... ON CONFLICT`, but
|
|
340
|
+
* it does implement the ANSI SQL `MERGE INTO` statement, which is the correct,
|
|
341
|
+
* connector-native way to express an upsert on connectors that support
|
|
342
|
+
* row-level writes (Iceberg, Delta, Hive ACID, and the JDBC connectors).
|
|
343
|
+
* Delegates to {@link TrinoDialect.buildUpsertMergeQuery} so no raw SQL is required.
|
|
335
344
|
*/
|
|
336
|
-
buildUpsertQuery(
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
345
|
+
buildUpsertQuery(tableName, values, options) {
|
|
346
|
+
return this.buildUpsertMergeQuery(tableName, values, {
|
|
347
|
+
conflictFields: options?.conflictFields,
|
|
348
|
+
updateOnDuplicate: options?.updateOnDuplicate,
|
|
349
|
+
schema: options?.schema,
|
|
350
|
+
});
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* Build a Trino `MERGE INTO` statement implementing a single-row upsert.
|
|
354
|
+
*
|
|
355
|
+
* MERGE INTO "cat"."sch"."t" AS t
|
|
356
|
+
* USING (VALUES (?, ?)) AS s ("id", "name")
|
|
357
|
+
* ON t."id" = s."id"
|
|
358
|
+
* WHEN MATCHED THEN UPDATE SET "name" = s."name"
|
|
359
|
+
* WHEN NOT MATCHED THEN INSERT ("id", "name") VALUES (s."id", s."name")
|
|
360
|
+
*
|
|
361
|
+
* The source row is presented as an inline `(VALUES (...)) AS s (cols)`
|
|
362
|
+
* relation. Rows are matched on `conflictFields` (required — Trino has no
|
|
363
|
+
* primary/unique key metadata to infer them from); matched rows update every
|
|
364
|
+
* non-key column (or the explicit `updateOnDuplicate` list) and unmatched
|
|
365
|
+
* rows are inserted. Actual execution requires a connector that supports
|
|
366
|
+
* `MERGE`/row-level writes.
|
|
367
|
+
*
|
|
368
|
+
* @param tableName - Target table (catalog-qualified via {@link quoteTable}).
|
|
369
|
+
* @param values - Column/value pairs for the row to upsert.
|
|
370
|
+
* @param options - `conflictFields` (required) picks the `ON` key columns;
|
|
371
|
+
* `updateOnDuplicate` restricts the WHEN MATCHED update set; `schema`
|
|
372
|
+
* overrides the default schema for the target table.
|
|
373
|
+
*/
|
|
374
|
+
buildUpsertMergeQuery(tableName, values, options) {
|
|
375
|
+
const conflictFields = options?.conflictFields;
|
|
376
|
+
if (!conflictFields || conflictFields.length === 0) {
|
|
377
|
+
throw new Error('Trino MERGE (upsert) requires explicit `conflictFields` to build the ON clause. ' +
|
|
378
|
+
'Trino has no primary-key/unique metadata to infer the match key from.');
|
|
379
|
+
}
|
|
380
|
+
const columns = Object.keys(values);
|
|
381
|
+
if (columns.length === 0) {
|
|
382
|
+
throw new Error('buildUpsertMergeQuery requires at least one column to upsert.');
|
|
383
|
+
}
|
|
384
|
+
const processedValues = [];
|
|
385
|
+
let paramIndex = 1;
|
|
386
|
+
const sourceExprs = columns.map((col) => {
|
|
387
|
+
const value = values[col];
|
|
388
|
+
if (value instanceof prorm_1.Literal) {
|
|
389
|
+
return value.val;
|
|
390
|
+
}
|
|
391
|
+
processedValues.push(value);
|
|
392
|
+
return `$${paramIndex++}`;
|
|
393
|
+
});
|
|
394
|
+
const sourceCols = columns.map((c) => this.escapeId(c)).join(', ');
|
|
395
|
+
const onClause = conflictFields
|
|
396
|
+
.map((c) => `t.${this.escapeId(c)} = s.${this.escapeId(c)}`)
|
|
397
|
+
.join(' AND ');
|
|
398
|
+
const conflictSet = new Set(conflictFields);
|
|
399
|
+
const updateFields = (options?.updateOnDuplicate && options.updateOnDuplicate.length > 0
|
|
400
|
+
? options.updateOnDuplicate
|
|
401
|
+
: columns).filter((c) => !conflictSet.has(c));
|
|
402
|
+
let sql = `MERGE INTO ${this.quoteTable(tableName, options?.schema)} AS t` +
|
|
403
|
+
` USING (VALUES (${sourceExprs.join(', ')})) AS s (${sourceCols})` +
|
|
404
|
+
` ON ${onClause}`;
|
|
405
|
+
if (updateFields.length > 0) {
|
|
406
|
+
const setClause = updateFields
|
|
407
|
+
.map((c) => `${this.escapeId(c)} = s.${this.escapeId(c)}`)
|
|
408
|
+
.join(', ');
|
|
409
|
+
sql += ` WHEN MATCHED THEN UPDATE SET ${setClause}`;
|
|
410
|
+
}
|
|
411
|
+
const insertCols = columns.map((c) => this.escapeId(c)).join(', ');
|
|
412
|
+
const insertVals = columns.map((c) => `s.${this.escapeId(c)}`).join(', ');
|
|
413
|
+
sql += ` WHEN NOT MATCHED THEN INSERT (${insertCols}) VALUES (${insertVals})`;
|
|
414
|
+
return { sql, values: processedValues };
|
|
340
415
|
}
|
|
341
416
|
/**
|
|
342
417
|
* Build an UPDATE query. No `RETURNING`, no `LIMIT` (Trino supports neither
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Turso / libSQL dialect implementation.
|
|
3
|
+
*
|
|
4
|
+
* Turso is a hosted libSQL service; libSQL itself is a SQLite-compatible
|
|
5
|
+
* fork, so the SQL this dialect generates (DDL, JSON helpers, upsert
|
|
6
|
+
* syntax, LIMIT/OFFSET pagination, etc.) is identical to `SQLiteDialect`'s.
|
|
7
|
+
* Rather than duplicate ~90 pure SQL-generation methods, this class
|
|
8
|
+
* extends `SQLiteDialect` and overrides only the pieces that depend on the
|
|
9
|
+
* driver: connection lifecycle, query execution, streaming, and
|
|
10
|
+
* transactions. `SQLiteDialect` reaches those through its own `private`
|
|
11
|
+
* fields, which subclasses can't touch, so this class keeps entirely
|
|
12
|
+
* separate connection/transaction state and never touches the parent's.
|
|
13
|
+
*
|
|
14
|
+
* The `@libsql/client` driver works identically for a local embedded
|
|
15
|
+
* replica (`file:` / `:memory:` URLs) and a remote Turso database
|
|
16
|
+
* (`libsql:`/`https:` URLs with an `authToken`), unlike `better-sqlite3`
|
|
17
|
+
* which is local-only — that's the whole point of this dialect existing
|
|
18
|
+
* separately from `SQLiteDialect`.
|
|
19
|
+
*/
|
|
20
|
+
import { type Client } from '@libsql/client';
|
|
21
|
+
import { SQLiteDialect } from '../sqlite/index';
|
|
22
|
+
import { DialectOptions } from '../dialect';
|
|
23
|
+
import { Transaction, TransactionOptions, QueryResult, QueryOptions, StreamOptions } from '../../types';
|
|
24
|
+
import { Readable } from 'stream';
|
|
25
|
+
import { StreamableDialect } from '../query-stream-helper';
|
|
26
|
+
export interface TursoDialectOptions extends DialectOptions {
|
|
27
|
+
/**
|
|
28
|
+
* Database URL. Use `libsql://<db>.turso.io` (or `https://...`) for a
|
|
29
|
+
* hosted Turso database, `file:./local.db` for a local libSQL file, or
|
|
30
|
+
* `:memory:` for an in-memory database.
|
|
31
|
+
*/
|
|
32
|
+
url?: string;
|
|
33
|
+
/** Auth token for a hosted Turso database. Not needed for `file:`/`:memory:`. */
|
|
34
|
+
authToken?: string;
|
|
35
|
+
/** Encryption key for an encrypted local database file. */
|
|
36
|
+
encryptionKey?: string;
|
|
37
|
+
/** URL of a remote database to sync an embedded replica against. */
|
|
38
|
+
syncUrl?: string;
|
|
39
|
+
/** Sync interval in seconds when `syncUrl` is set. */
|
|
40
|
+
syncInterval?: number;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Turso / libSQL dialect. See the module-level doc comment for why this
|
|
44
|
+
* extends `SQLiteDialect` instead of implementing `Dialect` from scratch.
|
|
45
|
+
*/
|
|
46
|
+
export declare class TursoDialect extends SQLiteDialect implements StreamableDialect {
|
|
47
|
+
readonly name = "turso";
|
|
48
|
+
readonly library = "@libsql/client";
|
|
49
|
+
private client;
|
|
50
|
+
private _tursoConnected;
|
|
51
|
+
private tursoConfig;
|
|
52
|
+
private tursoTransactionDepth;
|
|
53
|
+
constructor(config: TursoDialectOptions);
|
|
54
|
+
connect(): Promise<void>;
|
|
55
|
+
disconnect(): Promise<void>;
|
|
56
|
+
getConnection(): Client | null;
|
|
57
|
+
isConnected(): boolean;
|
|
58
|
+
/**
|
|
59
|
+
* `SQLiteAdvanced` (the parent class's `.advanced` getter) drives
|
|
60
|
+
* better-sqlite3's synchronous `Database` API directly, which the
|
|
61
|
+
* `@libsql/client` connection this dialect wraps doesn't expose.
|
|
62
|
+
*/
|
|
63
|
+
get advanced(): never;
|
|
64
|
+
query(sql: string, options?: QueryOptions): Promise<QueryResult>;
|
|
65
|
+
/**
|
|
66
|
+
* `@libsql/client` has no native server-side cursor — `execute()` always
|
|
67
|
+
* returns the full result set — so this uses the same generic
|
|
68
|
+
* LIMIT/OFFSET-paginated fallback the other non-cursor dialects use
|
|
69
|
+
* (`buildLimitOffset()` is inherited unchanged from `SQLiteDialect`,
|
|
70
|
+
* since libSQL's pagination syntax is identical to SQLite's).
|
|
71
|
+
*/
|
|
72
|
+
queryStream(sql: string, options?: StreamOptions): Readable;
|
|
73
|
+
private toLibsqlArgs;
|
|
74
|
+
private rowToObject;
|
|
75
|
+
getDatabaseVersion(): Promise<string>;
|
|
76
|
+
/**
|
|
77
|
+
* The parent runs setter PRAGMAs through better-sqlite3's synchronous
|
|
78
|
+
* `exec()` (which TursoDialect has no handle for — `this.connection` is
|
|
79
|
+
* always null here). Route them through the async libSQL driver instead so
|
|
80
|
+
* table-rebuild paths (e.g. addForeignKey's `PRAGMA foreign_keys=OFF/ON`)
|
|
81
|
+
* actually take effect over the wire.
|
|
82
|
+
*/
|
|
83
|
+
protected setPragma(pragma: string): Promise<void>;
|
|
84
|
+
attachDatabase(path: string, alias: string): Promise<void>;
|
|
85
|
+
detachDatabase(alias: string): Promise<void>;
|
|
86
|
+
startTransaction(options?: TransactionOptions): Promise<Transaction>;
|
|
87
|
+
commitTransaction(transaction: Transaction): Promise<void>;
|
|
88
|
+
rollbackTransaction(transaction: Transaction): Promise<void>;
|
|
89
|
+
/**
|
|
90
|
+
* Pull the local embedded replica up to date with its `syncUrl` remote.
|
|
91
|
+
* No-op (well, throws) if this client wasn't configured with a `syncUrl`.
|
|
92
|
+
*/
|
|
93
|
+
sync(): Promise<void>;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Create a new Turso/libSQL dialect instance.
|
|
97
|
+
*/
|
|
98
|
+
export declare function createTursoDialect(options?: TursoDialectOptions): TursoDialect;
|
|
@@ -157,6 +157,16 @@ class TursoDialect extends index_1.SQLiteDialect {
|
|
|
157
157
|
const result = await this.query('SELECT sqlite_version() AS version');
|
|
158
158
|
return String(result.rows[0]?.version ?? 'unknown');
|
|
159
159
|
}
|
|
160
|
+
/**
|
|
161
|
+
* The parent runs setter PRAGMAs through better-sqlite3's synchronous
|
|
162
|
+
* `exec()` (which TursoDialect has no handle for — `this.connection` is
|
|
163
|
+
* always null here). Route them through the async libSQL driver instead so
|
|
164
|
+
* table-rebuild paths (e.g. addForeignKey's `PRAGMA foreign_keys=OFF/ON`)
|
|
165
|
+
* actually take effect over the wire.
|
|
166
|
+
*/
|
|
167
|
+
async setPragma(pragma) {
|
|
168
|
+
await this.query(`PRAGMA ${pragma}`);
|
|
169
|
+
}
|
|
160
170
|
async attachDatabase(path, alias) {
|
|
161
171
|
const aliasId = this.quoteIdentifier(alias);
|
|
162
172
|
await this.client.execute({ sql: `ATTACH DATABASE ? AS ${aliasId}`, args: [path] });
|