ts-prorm-orm 1.1.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 +1111 -0
- package/LICENSE +21 -0
- package/README.md +573 -0
- package/dist/audit/history-query.js +180 -0
- package/dist/audit/index.js +23 -0
- package/dist/audit/logger.js +236 -0
- package/dist/cache/cache-manager.js +84 -0
- package/dist/cache/index.js +16 -0
- package/dist/cache/redis-cluster-cache.js +557 -0
- package/dist/cli.js +2200 -0
- package/dist/compliance/audit-trail.js +68 -0
- package/dist/compliance/backup-verification.js +685 -0
- package/dist/compliance/breach-detector.js +505 -0
- package/dist/compliance/consent-record.js +227 -0
- package/dist/compliance/consent-versioning.js +331 -0
- package/dist/compliance/cross-border-log.js +530 -0
- package/dist/compliance/data-classifier.js +258 -0
- package/dist/compliance/data-lineage.js +565 -0
- package/dist/compliance/data-masker.js +303 -0
- package/dist/compliance/data-portability.js +265 -0
- package/dist/compliance/data-retention.js +195 -0
- package/dist/compliance/dsar-workflow.js +342 -0
- package/dist/compliance/field-encryption.js +223 -0
- package/dist/compliance/immutable-record.js +148 -0
- package/dist/compliance/index.js +260 -0
- package/dist/compliance/privacy-impact-assessment.js +364 -0
- package/dist/compliance/pseudonymization.js +269 -0
- package/dist/compliance/query-firewall.js +1182 -0
- package/dist/compliance/rate-limiter.js +580 -0
- package/dist/compliance/right-to-erasure.js +117 -0
- package/dist/compliance/row-level-security.js +246 -0
- package/dist/compliance/security-decorator.js +574 -0
- package/dist/compliance/security-monitor.js +525 -0
- package/dist/compliance/sensitive-data-discovery.js +476 -0
- package/dist/compliance/session-isolation.js +472 -0
- package/dist/compliance/tls-enforcer.js +108 -0
- package/dist/compliance/worm-storage.js +712 -0
- package/dist/connection-manager.js +198 -0
- package/dist/connection-pool.js +519 -0
- package/dist/decorators/audit.js +136 -0
- package/dist/decorators/belongs-to-many.js +115 -0
- package/dist/decorators/belongs-to.js +115 -0
- package/dist/decorators/check.js +435 -0
- package/dist/decorators/collate.js +329 -0
- package/dist/decorators/comment.js +205 -0
- package/dist/decorators/database-settings.js +236 -0
- package/dist/decorators/default.js +244 -0
- package/dist/decorators/encryption.js +235 -0
- package/dist/decorators/engine.js +97 -0
- package/dist/decorators/fk-constraints.js +594 -0
- package/dist/decorators/foreign-table.js +136 -0
- package/dist/decorators/generated.js +274 -0
- package/dist/decorators/has-many.js +127 -0
- package/dist/decorators/has-one.js +116 -0
- package/dist/decorators/hstore.js +129 -0
- package/dist/decorators/index.js +355 -0
- package/dist/decorators/json-column.js +83 -0
- package/dist/decorators/jsonb.js +101 -0
- package/dist/decorators/orm-decorators.js +425 -0
- package/dist/decorators/permissions.js +294 -0
- package/dist/decorators/procedure.js +210 -0
- package/dist/decorators/query-options.js +556 -0
- package/dist/decorators/range.js +167 -0
- package/dist/decorators/set-column.js +83 -0
- package/dist/decorators/spatial.js +114 -0
- package/dist/decorators/storage.js +580 -0
- package/dist/decorators/timezone.js +512 -0
- package/dist/decorators/trigger.js +90 -0
- package/dist/decorators/uuid.js +135 -0
- package/dist/decorators/view.js +258 -0
- package/dist/diagrams/chen-diagram.js +354 -0
- package/dist/diagrams/class-diagram.js +384 -0
- package/dist/diagrams/dependency-diagram.js +432 -0
- package/dist/diagrams/er-diagram.js +605 -0
- package/dist/diagrams/flow-diagram.js +394 -0
- package/dist/diagrams/gantt-diagram.js +411 -0
- package/dist/diagrams/index-diagram.js +353 -0
- package/dist/diagrams/index.js +184 -0
- package/dist/diagrams/migration-diagram.js +316 -0
- package/dist/diagrams/model-diagram.js +616 -0
- package/dist/diagrams/package-diagram.js +376 -0
- package/dist/diagrams/palette.js +85 -0
- package/dist/diagrams/relational-diagram.js +455 -0
- package/dist/diagrams/schemadoc-diagram.js +309 -0
- package/dist/diagrams/sequence-diagram.js +307 -0
- package/dist/diagrams/state-diagram.js +344 -0
- package/dist/diagrams/svg-dom.js +111 -0
- package/dist/diagrams/tree-diagram.js +250 -0
- package/dist/dialects/clickhouse/index.js +1742 -0
- package/dist/dialects/cockroachdb/index.js +4677 -0
- package/dist/dialects/cratedb/index.js +441 -0
- package/dist/dialects/databricks/index.js +517 -0
- package/dist/dialects/db2/index.js +2225 -0
- package/dist/dialects/dialect.js +720 -0
- package/dist/dialects/duckdb/index.js +2014 -0
- package/dist/dialects/exasol/index.js +357 -0
- package/dist/dialects/firebird/index.js +495 -0
- package/dist/dialects/greenplum/index.js +457 -0
- package/dist/dialects/hana/index.js +1741 -0
- package/dist/dialects/mariadb/index.js +3590 -0
- package/dist/dialects/mssql/index.js +2296 -0
- package/dist/dialects/mysql/index.js +4058 -0
- package/dist/dialects/oracle/index.js +2999 -0
- package/dist/dialects/postgres/index.js +5319 -0
- package/dist/dialects/query-stream-helper.js +152 -0
- package/dist/dialects/questdb/index.js +433 -0
- package/dist/dialects/redshift/index.js +2277 -0
- package/dist/dialects/singlestore/index.js +354 -0
- package/dist/dialects/snowflake/index.js +2082 -0
- package/dist/dialects/spanner/index.js +1768 -0
- package/dist/dialects/sqlite/index.js +3382 -0
- package/dist/dialects/tidb/index.js +377 -0
- package/dist/dialects/timescaledb/index.js +164 -0
- package/dist/dialects/trino/index.js +420 -0
- package/dist/dialects/turso/index.js +227 -0
- package/dist/dialects/vertica/index.js +317 -0
- package/dist/dialects/yugabytedb/index.js +424 -0
- package/dist/errors/index.js +472 -0
- package/dist/errors/utils.js +340 -0
- package/dist/errors.js +21 -0
- package/dist/extensions/catalog/cloud-warehouse-features.js +207 -0
- package/dist/extensions/catalog/mssql-features.js +147 -0
- package/dist/extensions/catalog/mysql-mariadb-plugins.js +229 -0
- package/dist/extensions/catalog/oracle-db2-features.js +196 -0
- package/dist/extensions/catalog/postgres-extensions.js +516 -0
- package/dist/extensions/index.js +71 -0
- package/dist/extensions/types.js +13 -0
- package/dist/foreign-data.js +173 -0
- package/dist/hooks/hooks-manager.js +350 -0
- package/dist/hooks/index.js +37 -0
- package/dist/index.js +463 -0
- package/dist/logging.js +335 -0
- package/dist/migrations/index.js +40 -0
- package/dist/migrations/migration.js +196 -0
- package/dist/migrations/migrator.js +411 -0
- package/dist/migrations/prormmigration.js +275 -0
- package/dist/migrations/query-interface.js +435 -0
- package/dist/migrations/seeder.js +353 -0
- package/dist/models/associations.js +852 -0
- package/dist/models/constraints.js +288 -0
- package/dist/models/data-types.js +2518 -0
- package/dist/models/decorators.js +445 -0
- package/dist/models/index.js +33 -0
- package/dist/models/indexes.js +531 -0
- package/dist/models/methods.js +382 -0
- package/dist/models/model-manager.js +103 -0
- package/dist/models/model.js +5349 -0
- package/dist/models/operators.js +67 -0
- package/dist/models/scopes.js +189 -0
- package/dist/models/typescript-types.js +26 -0
- package/dist/nosql/aerospike/index.js +205 -0
- package/dist/nosql/allegrograph/index.js +169 -0
- package/dist/nosql/arangodb/index.js +364 -0
- package/dist/nosql/azure-blob/index.js +206 -0
- package/dist/nosql/beanstalkd/index.js +231 -0
- package/dist/nosql/beequeue/index.js +210 -0
- package/dist/nosql/bigchaindb/index.js +195 -0
- package/dist/nosql/bigtable/index.js +224 -0
- package/dist/nosql/blazegraph/index.js +173 -0
- package/dist/nosql/bullmq/index.js +191 -0
- package/dist/nosql/cassandra/index.js +174 -0
- package/dist/nosql/chroma/index.js +190 -0
- package/dist/nosql/cloudflare-kv/index.js +220 -0
- package/dist/nosql/coherence/index.js +200 -0
- package/dist/nosql/cosmosdb/index.js +157 -0
- package/dist/nosql/couchbase/index.js +213 -0
- package/dist/nosql/dax/index.js +212 -0
- package/dist/nosql/deno-kv/index.js +206 -0
- package/dist/nosql/dgraph/index.js +171 -0
- package/dist/nosql/doris/index.js +169 -0
- package/dist/nosql/druid/index.js +162 -0
- package/dist/nosql/dynamodb/index.js +937 -0
- package/dist/nosql/elasticsearch/index.js +377 -0
- package/dist/nosql/etcd/index.js +502 -0
- package/dist/nosql/eventhubs/index.js +213 -0
- package/dist/nosql/eventstore/index.js +254 -0
- package/dist/nosql/faunadb/index.js +188 -0
- package/dist/nosql/firestore/index.js +177 -0
- package/dist/nosql/fluree/index.js +148 -0
- package/dist/nosql/fuseki/index.js +170 -0
- package/dist/nosql/gcs/index.js +172 -0
- package/dist/nosql/gearman/index.js +160 -0
- package/dist/nosql/geode/index.js +196 -0
- package/dist/nosql/graphdb/index.js +169 -0
- package/dist/nosql/graylog/index.js +188 -0
- package/dist/nosql/gridgain/index.js +171 -0
- package/dist/nosql/hazelcast/index.js +162 -0
- package/dist/nosql/hbase/index.js +230 -0
- package/dist/nosql/ignite/index.js +173 -0
- package/dist/nosql/immudb/index.js +184 -0
- package/dist/nosql/index.js +232 -0
- package/dist/nosql/infinispan/index.js +200 -0
- package/dist/nosql/influxdb/index.js +0 -0
- package/dist/nosql/kafka/index.js +234 -0
- package/dist/nosql/keyspaces/index.js +189 -0
- package/dist/nosql/kinesis/index.js +253 -0
- package/dist/nosql/leveldb/index.js +153 -0
- package/dist/nosql/lmdb/index.js +160 -0
- package/dist/nosql/loki/index.js +201 -0
- package/dist/nosql/marklogic/index.js +204 -0
- package/dist/nosql/materialize/index.js +145 -0
- package/dist/nosql/meilisearch/index.js +154 -0
- package/dist/nosql/memcached/index.js +223 -0
- package/dist/nosql/milvus/index.js +410 -0
- package/dist/nosql/minio/index.js +265 -0
- package/dist/nosql/momento/index.js +179 -0
- package/dist/nosql/mongodb/index.js +461 -0
- package/dist/nosql/nats/index.js +247 -0
- package/dist/nosql/nedb/index.js +164 -0
- package/dist/nosql/neo4j/index.js +450 -0
- package/dist/nosql/neptune/index.js +470 -0
- package/dist/nosql/nsq/index.js +200 -0
- package/dist/nosql/opensearch/index.js +186 -0
- package/dist/nosql/orientdb/index.js +175 -0
- package/dist/nosql/papertrail/index.js +200 -0
- package/dist/nosql/pinecone/index.js +0 -0
- package/dist/nosql/pinot/index.js +133 -0
- package/dist/nosql/pouchdb/index.js +172 -0
- package/dist/nosql/prometheus/index.js +174 -0
- package/dist/nosql/provendb/index.js +147 -0
- package/dist/nosql/pubsub/index.js +187 -0
- package/dist/nosql/pulsar/index.js +232 -0
- package/dist/nosql/qdrant/index.js +295 -0
- package/dist/nosql/qldb/index.js +192 -0
- package/dist/nosql/r2/index.js +281 -0
- package/dist/nosql/rabbitmq/index.js +237 -0
- package/dist/nosql/ravendb/index.js +175 -0
- package/dist/nosql/redis/index.js +607 -0
- package/dist/nosql/redpanda/index.js +237 -0
- package/dist/nosql/resque/index.js +203 -0
- package/dist/nosql/rethinkdb/index.js +232 -0
- package/dist/nosql/rocksdb/index.js +152 -0
- package/dist/nosql/rockset/index.js +126 -0
- package/dist/nosql/s3/index.js +298 -0
- package/dist/nosql/scylladb/index.js +178 -0
- package/dist/nosql/signoz/index.js +227 -0
- package/dist/nosql/sns/index.js +201 -0
- package/dist/nosql/solr/index.js +231 -0
- package/dist/nosql/splunk/index.js +227 -0
- package/dist/nosql/sqs/index.js +246 -0
- package/dist/nosql/stardog/index.js +169 -0
- package/dist/nosql/starrocks/index.js +170 -0
- package/dist/nosql/store.js +2 -0
- package/dist/nosql/sumologic/index.js +213 -0
- package/dist/nosql/surrealdb/index.js +179 -0
- package/dist/nosql/terminusdb/index.js +151 -0
- package/dist/nosql/tigergraph/index.js +469 -0
- package/dist/nosql/typesense/index.js +148 -0
- package/dist/nosql/unqlite/index.js +157 -0
- package/dist/nosql/upstash/index.js +167 -0
- package/dist/nosql/vercel-kv/index.js +166 -0
- package/dist/nosql/victoriametrics/index.js +213 -0
- package/dist/nosql/virtuoso/index.js +169 -0
- package/dist/nosql/weaviate/index.js +276 -0
- package/dist/operators/index.js +108 -0
- package/dist/operators.js +2690 -0
- package/dist/prisma-migrate/index.js +38 -0
- package/dist/prisma-migrate/migration-generator.js +125 -0
- package/dist/prisma-migrate/model-generator.js +172 -0
- package/dist/prisma-migrate/relations.js +100 -0
- package/dist/prisma-migrate/schema-parser.js +167 -0
- package/dist/prisma-migrate/type-mapper.js +40 -0
- package/dist/prorm.js +6832 -0
- package/dist/query-builders/cte-builder.js +80 -0
- package/dist/query-builders/functions/aggregate.js +390 -0
- package/dist/query-builders/functions/conditional.js +503 -0
- package/dist/query-builders/functions/datetime.js +695 -0
- package/dist/query-builders/functions/fulltext.js +439 -0
- package/dist/query-builders/functions/index.js +93 -0
- package/dist/query-builders/functions/json.js +427 -0
- package/dist/query-builders/functions/math.js +399 -0
- package/dist/query-builders/functions/string.js +518 -0
- package/dist/query-builders/functions/window.js +328 -0
- package/dist/query-builders/include-builder.js +323 -0
- package/dist/query-builders/index-expression-builder.js +242 -0
- package/dist/query-builders/index.js +161 -0
- package/dist/query-builders/insert-builder.js +164 -0
- package/dist/query-builders/model-helpers.js +38 -0
- package/dist/query-builders/order-limit-builder.js +239 -0
- package/dist/query-builders/sql-compiler.js +2040 -0
- package/dist/query-builders/subquery-builder.js +152 -0
- package/dist/query-builders/update-builder.js +182 -0
- package/dist/query-builders/view-builder.js +218 -0
- package/dist/query-builders/where-builder.js +1532 -0
- package/dist/query-interface.js +622 -0
- package/dist/query-optimizers/batch-optimizer.js +426 -0
- package/dist/query-optimizers/explain-plans.js +415 -0
- package/dist/query-optimizers/index.js +51 -0
- package/dist/query-optimizers/prepared-statement-cache.js +423 -0
- package/dist/query-optimizers/query-hints.js +438 -0
- package/dist/query-optimizers/query-optimizer.js +278 -0
- package/dist/query-optimizers/slow-query-logger.js +271 -0
- package/dist/replica-manager.js +507 -0
- package/dist/schema/index.js +15 -0
- package/dist/schema/migration-generator.js +374 -0
- package/dist/schema/schema-differ.js +549 -0
- package/dist/schema/types.js +6 -0
- package/dist/sql-constants.js +300 -0
- package/dist/sqlite-advanced.js +1047 -0
- package/dist/streams/index.js +12 -0
- package/dist/streams/transforms.js +178 -0
- package/dist/transaction.js +456 -0
- package/dist/types/index.js +180 -0
- package/dist/user-management.js +127 -0
- package/dist/utils/date.js +300 -0
- package/dist/utils/index.js +1079 -0
- package/dist/utils/string.js +161 -0
- package/dist/validators/index.js +19 -0
- package/dist/validators/validator.js +911 -0
- package/package.json +190 -0
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* SET Column decorator for MySQL SET type
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* class Options extends Model {
|
|
7
|
+
* @SetColumn(['red', 'green', 'blue'])
|
|
8
|
+
* colors: DataTypes.SET;
|
|
9
|
+
*
|
|
10
|
+
* @SetColumn('a', 'b', 'c')
|
|
11
|
+
* flags: DataTypes.SET;
|
|
12
|
+
* }
|
|
13
|
+
*/
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.SetColumn = SetColumn;
|
|
16
|
+
exports.SetColumnWithOptions = SetColumnWithOptions;
|
|
17
|
+
exports.getSetColumnMetadata = getSetColumnMetadata;
|
|
18
|
+
exports.getAllSetColumnMetadata = getAllSetColumnMetadata;
|
|
19
|
+
exports.isSetColumn = isSetColumn;
|
|
20
|
+
exports.generateSetFindInSetSQL = generateSetFindInSetSQL;
|
|
21
|
+
const SETCOLUMN_METADATA_KEY = Symbol('setColumn');
|
|
22
|
+
/**
|
|
23
|
+
* Decorator to mark a field as a SET column
|
|
24
|
+
* @param values - Either an array of values or individual string values
|
|
25
|
+
*/
|
|
26
|
+
function SetColumn(values, ...additionalValues) {
|
|
27
|
+
return (target, propertyKey) => {
|
|
28
|
+
let setValues;
|
|
29
|
+
if (Array.isArray(values)) {
|
|
30
|
+
setValues = values;
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
setValues = [values, ...additionalValues];
|
|
34
|
+
}
|
|
35
|
+
const metadata = { values: setValues };
|
|
36
|
+
target[`${String(propertyKey)}_setcolumn`] = metadata;
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Decorator to mark a field as a SET column with options
|
|
41
|
+
* @param options - Options for the SET column
|
|
42
|
+
*/
|
|
43
|
+
function SetColumnWithOptions(options) {
|
|
44
|
+
return (target, propertyKey) => {
|
|
45
|
+
const metadata = {
|
|
46
|
+
values: options.values,
|
|
47
|
+
name: options.name,
|
|
48
|
+
};
|
|
49
|
+
target[`${String(propertyKey)}_setcolumn`] = metadata;
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Get SET column metadata for a field
|
|
54
|
+
*/
|
|
55
|
+
function getSetColumnMetadata(target, propertyKey) {
|
|
56
|
+
return target[`${propertyKey}_setcolumn`];
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Get all SET column metadata for a model
|
|
60
|
+
*/
|
|
61
|
+
function getAllSetColumnMetadata(target) {
|
|
62
|
+
const metadata = new Map();
|
|
63
|
+
const keys = Object.keys(target);
|
|
64
|
+
for (const key of keys) {
|
|
65
|
+
const setMeta = target[`${key}_setcolumn`];
|
|
66
|
+
if (setMeta) {
|
|
67
|
+
metadata.set(key, setMeta);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return metadata;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Check if a field is marked as SET column
|
|
74
|
+
*/
|
|
75
|
+
function isSetColumn(target, propertyKey) {
|
|
76
|
+
return !!getSetColumnMetadata(target, propertyKey);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Generate SQL to check if a SET value contains a specific value
|
|
80
|
+
*/
|
|
81
|
+
function generateSetFindInSetSQL(columnName, value) {
|
|
82
|
+
return `FIND_IN_SET('${value}', \`${columnName}\`)`;
|
|
83
|
+
}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Spatial column decorator for MySQL spatial types
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* class Location extends Model {
|
|
7
|
+
* @Spatial('POINT', 4326)
|
|
8
|
+
* point: DataTypes.POINT;
|
|
9
|
+
*
|
|
10
|
+
* @Spatial('POLYGON')
|
|
11
|
+
* area: DataTypes.POLYGON;
|
|
12
|
+
* }
|
|
13
|
+
*/
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.Spatial = Spatial;
|
|
16
|
+
exports.getSpatialMetadata = getSpatialMetadata;
|
|
17
|
+
exports.getAllSpatialMetadata = getAllSpatialMetadata;
|
|
18
|
+
exports.isSpatialColumn = isSpatialColumn;
|
|
19
|
+
exports.generateSpatialIndexSQL = generateSpatialIndexSQL;
|
|
20
|
+
const SPATIAL_METADATA_KEY = Symbol('spatial');
|
|
21
|
+
/**
|
|
22
|
+
* Decorator to mark a field as a spatial column
|
|
23
|
+
* @param type - The spatial type (POINT, LINESTRING, POLYGON, etc.)
|
|
24
|
+
* @param srid - Optional SRID (Spatial Reference System Identifier)
|
|
25
|
+
*/
|
|
26
|
+
function Spatial(type, srid) {
|
|
27
|
+
return (target, propertyKey) => {
|
|
28
|
+
const metadata = { type, srid };
|
|
29
|
+
target[`${String(propertyKey)}_spatial`] = metadata;
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Get spatial metadata for a field
|
|
34
|
+
*/
|
|
35
|
+
function getSpatialMetadata(target, propertyKey) {
|
|
36
|
+
return target[`${propertyKey}_spatial`];
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Get all spatial metadata for a model
|
|
40
|
+
*/
|
|
41
|
+
function getAllSpatialMetadata(target) {
|
|
42
|
+
const metadata = new Map();
|
|
43
|
+
const keys = Object.keys(target);
|
|
44
|
+
for (const key of keys) {
|
|
45
|
+
const spatialMeta = target[`${key}_spatial`];
|
|
46
|
+
if (spatialMeta) {
|
|
47
|
+
metadata.set(key, spatialMeta);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return metadata;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Check if a field is marked as spatial
|
|
54
|
+
*/
|
|
55
|
+
function isSpatialColumn(target, propertyKey) {
|
|
56
|
+
return !!getSpatialMetadata(target, propertyKey);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Quote an identifier using the quoting convention for the given dialect.
|
|
60
|
+
*/
|
|
61
|
+
function quoteSpatialIdentifier(identifier, dialect) {
|
|
62
|
+
switch (dialect) {
|
|
63
|
+
case 'mysql':
|
|
64
|
+
case 'mariadb':
|
|
65
|
+
return `\`${identifier}\``;
|
|
66
|
+
case 'mssql':
|
|
67
|
+
return `[${identifier}]`;
|
|
68
|
+
case 'postgres':
|
|
69
|
+
case 'oracle':
|
|
70
|
+
case 'sqlite':
|
|
71
|
+
default:
|
|
72
|
+
return `"${identifier}"`;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Generate SQL for spatial index creation.
|
|
77
|
+
*
|
|
78
|
+
* Mirrors the per-dialect `createSpatialIndex` implementations found under
|
|
79
|
+
* `src/dialects/*\/index.ts`, and is consistent with the dialects that
|
|
80
|
+
* `DataTypes.GEOMETRY`/`GEOGRAPHY` (src/models/data-types.ts) actually
|
|
81
|
+
* generate column syntax for:
|
|
82
|
+
* - PostgreSQL/PostGIS: `CREATE INDEX ... USING gist (col)`
|
|
83
|
+
* - MySQL/MariaDB: `CREATE SPATIAL INDEX ...`
|
|
84
|
+
* - Oracle: `CREATE INDEX ... INDEXTYPE IS MDSYS.SPATIAL_INDEX`
|
|
85
|
+
* - MSSQL: `CREATE SPATIAL INDEX ...` (default grid tessellation)
|
|
86
|
+
* - SQLite: `CREATE VIRTUAL TABLE ... USING rtree(...)` (SQLite has no
|
|
87
|
+
* native spatial index — the R-Tree virtual table module is the closest
|
|
88
|
+
* equivalent)
|
|
89
|
+
*
|
|
90
|
+
* @param tableName - The table to index
|
|
91
|
+
* @param columnName - The spatial column to index
|
|
92
|
+
* @param indexName - Optional explicit index name
|
|
93
|
+
* @param dialect - The target SQL dialect (defaults to 'mysql' for backwards compatibility)
|
|
94
|
+
*/
|
|
95
|
+
function generateSpatialIndexSQL(tableName, columnName, indexName, dialect = 'mysql') {
|
|
96
|
+
const idxName = indexName || `idx_${tableName}_${columnName}`;
|
|
97
|
+
const qIdx = quoteSpatialIdentifier(idxName, dialect);
|
|
98
|
+
const qTable = quoteSpatialIdentifier(tableName, dialect);
|
|
99
|
+
const qColumn = quoteSpatialIdentifier(columnName, dialect);
|
|
100
|
+
switch (dialect) {
|
|
101
|
+
case 'postgres':
|
|
102
|
+
return `CREATE INDEX ${qIdx} ON ${qTable} USING gist (${qColumn})`;
|
|
103
|
+
case 'mysql':
|
|
104
|
+
case 'mariadb':
|
|
105
|
+
case 'mssql':
|
|
106
|
+
return `CREATE SPATIAL INDEX ${qIdx} ON ${qTable}(${qColumn})`;
|
|
107
|
+
case 'oracle':
|
|
108
|
+
return `CREATE INDEX ${qIdx} ON ${qTable} (${qColumn}) INDEXTYPE IS MDSYS.SPATIAL_INDEX`;
|
|
109
|
+
case 'sqlite':
|
|
110
|
+
return `CREATE VIRTUAL TABLE ${qIdx} USING rtree(${columnName})`;
|
|
111
|
+
default:
|
|
112
|
+
throw new Error(`Spatial indexes are not supported for the "${dialect}" dialect.`);
|
|
113
|
+
}
|
|
114
|
+
}
|