typeorm 0.3.6-dev.0418ebc → 0.3.6-dev.1b4cb00
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/README.md +1 -1
- package/browser/cache/RedisQueryResultCache.js +3 -0
- package/browser/cache/RedisQueryResultCache.js.map +1 -1
- package/browser/decorator/options/ColumnOptions.d.ts +8 -0
- package/browser/decorator/options/ColumnOptions.js.map +1 -1
- package/browser/decorator/options/JoinColumnOptions.d.ts +4 -0
- package/browser/decorator/options/JoinColumnOptions.js.map +1 -1
- package/browser/decorator/options/PrimaryGeneratedColumnIdentityOptions.d.ts +4 -0
- package/browser/decorator/options/PrimaryGeneratedColumnIdentityOptions.js.map +1 -1
- package/browser/decorator/options/PrimaryGeneratedColumnNumericOptions.d.ts +4 -0
- package/browser/decorator/options/PrimaryGeneratedColumnNumericOptions.js.map +1 -1
- package/browser/decorator/options/PrimaryGeneratedColumnUUIDOptions.d.ts +4 -0
- package/browser/decorator/options/PrimaryGeneratedColumnUUIDOptions.js.map +1 -1
- package/browser/decorator/relations/JoinColumn.js +1 -0
- package/browser/decorator/relations/JoinColumn.js.map +1 -1
- package/browser/driver/cockroachdb/CockroachQueryRunner.d.ts +3 -3
- package/browser/driver/cockroachdb/CockroachQueryRunner.js +100 -22
- package/browser/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
- package/browser/driver/mysql/MysqlQueryRunner.js +16 -0
- package/browser/driver/mysql/MysqlQueryRunner.js.map +1 -1
- package/browser/driver/oracle/OracleQueryRunner.d.ts +3 -3
- package/browser/driver/oracle/OracleQueryRunner.js +98 -21
- package/browser/driver/oracle/OracleQueryRunner.js.map +1 -1
- package/browser/driver/postgres/PostgresQueryRunner.d.ts +3 -3
- package/browser/driver/postgres/PostgresQueryRunner.js +99 -21
- package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
- package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js +59 -15
- package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
- package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +53 -12
- package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
- package/browser/driver/sqlserver/SqlServerQueryRunner.d.ts +3 -3
- package/browser/driver/sqlserver/SqlServerQueryRunner.js +100 -22
- package/browser/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
- package/browser/entity-schema/EntitySchemaColumnOptions.d.ts +4 -0
- package/browser/entity-schema/EntitySchemaColumnOptions.js.map +1 -1
- package/browser/entity-schema/EntitySchemaTransformer.js +2 -0
- package/browser/entity-schema/EntitySchemaTransformer.js.map +1 -1
- package/browser/metadata/ColumnMetadata.d.ts +8 -0
- package/browser/metadata/ColumnMetadata.js +8 -0
- package/browser/metadata/ColumnMetadata.js.map +1 -1
- package/browser/metadata/ForeignKeyMetadata.d.ts +7 -0
- package/browser/metadata/ForeignKeyMetadata.js +4 -1
- package/browser/metadata/ForeignKeyMetadata.js.map +1 -1
- package/browser/metadata-args/JoinColumnMetadataArgs.d.ts +4 -0
- package/browser/metadata-args/JoinColumnMetadataArgs.js.map +1 -1
- package/browser/metadata-builder/EntityMetadataValidator.js +9 -0
- package/browser/metadata-builder/EntityMetadataValidator.js.map +1 -1
- package/browser/metadata-builder/JunctionEntityMetadataBuilder.js +5 -0
- package/browser/metadata-builder/JunctionEntityMetadataBuilder.js.map +1 -1
- package/browser/metadata-builder/RelationJoinColumnBuilder.js +2 -0
- package/browser/metadata-builder/RelationJoinColumnBuilder.js.map +1 -1
- package/browser/query-builder/QueryBuilder.js +1 -3
- package/browser/query-builder/QueryBuilder.js.map +1 -1
- package/browser/query-runner/QueryRunner.d.ts +2 -2
- package/browser/query-runner/QueryRunner.js.map +1 -1
- package/browser/schema-builder/options/TableColumnOptions.d.ts +8 -0
- package/browser/schema-builder/options/TableColumnOptions.js.map +1 -1
- package/browser/schema-builder/table/TableColumn.d.ts +4 -0
- package/browser/schema-builder/table/TableColumn.js +2 -0
- package/browser/schema-builder/table/TableColumn.js.map +1 -1
- package/browser/schema-builder/util/TableUtils.js +1 -0
- package/browser/schema-builder/util/TableUtils.js.map +1 -1
- package/browser/util/escapeRegExp.d.ts +1 -0
- package/browser/util/escapeRegExp.js +6 -0
- package/browser/util/escapeRegExp.js.map +1 -0
- package/cache/RedisQueryResultCache.js +3 -0
- package/cache/RedisQueryResultCache.js.map +1 -1
- package/commands/InitCommand.js +1 -1
- package/commands/InitCommand.js.map +1 -1
- package/commands/MigrationGenerateCommand.js +3 -2
- package/commands/MigrationGenerateCommand.js.map +1 -1
- package/decorator/options/ColumnOptions.d.ts +8 -0
- package/decorator/options/ColumnOptions.js.map +1 -1
- package/decorator/options/JoinColumnOptions.d.ts +4 -0
- package/decorator/options/JoinColumnOptions.js.map +1 -1
- package/decorator/options/PrimaryGeneratedColumnIdentityOptions.d.ts +4 -0
- package/decorator/options/PrimaryGeneratedColumnIdentityOptions.js.map +1 -1
- package/decorator/options/PrimaryGeneratedColumnNumericOptions.d.ts +4 -0
- package/decorator/options/PrimaryGeneratedColumnNumericOptions.js.map +1 -1
- package/decorator/options/PrimaryGeneratedColumnUUIDOptions.d.ts +4 -0
- package/decorator/options/PrimaryGeneratedColumnUUIDOptions.js.map +1 -1
- package/decorator/relations/JoinColumn.js +1 -0
- package/decorator/relations/JoinColumn.js.map +1 -1
- package/driver/cockroachdb/CockroachQueryRunner.d.ts +3 -3
- package/driver/cockroachdb/CockroachQueryRunner.js +100 -22
- package/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
- package/driver/mysql/MysqlQueryRunner.js +16 -0
- package/driver/mysql/MysqlQueryRunner.js.map +1 -1
- package/driver/oracle/OracleQueryRunner.d.ts +3 -3
- package/driver/oracle/OracleQueryRunner.js +98 -21
- package/driver/oracle/OracleQueryRunner.js.map +1 -1
- package/driver/postgres/PostgresQueryRunner.d.ts +3 -3
- package/driver/postgres/PostgresQueryRunner.js +99 -21
- package/driver/postgres/PostgresQueryRunner.js.map +1 -1
- package/driver/sqlite-abstract/AbstractSqliteDriver.js +59 -15
- package/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
- package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +53 -12
- package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
- package/driver/sqlserver/SqlServerQueryRunner.d.ts +3 -3
- package/driver/sqlserver/SqlServerQueryRunner.js +100 -22
- package/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
- package/entity-schema/EntitySchemaColumnOptions.d.ts +4 -0
- package/entity-schema/EntitySchemaColumnOptions.js.map +1 -1
- package/entity-schema/EntitySchemaTransformer.js +2 -0
- package/entity-schema/EntitySchemaTransformer.js.map +1 -1
- package/metadata/ColumnMetadata.d.ts +8 -0
- package/metadata/ColumnMetadata.js +8 -0
- package/metadata/ColumnMetadata.js.map +1 -1
- package/metadata/ForeignKeyMetadata.d.ts +7 -0
- package/metadata/ForeignKeyMetadata.js +4 -1
- package/metadata/ForeignKeyMetadata.js.map +1 -1
- package/metadata-args/JoinColumnMetadataArgs.d.ts +4 -0
- package/metadata-args/JoinColumnMetadataArgs.js.map +1 -1
- package/metadata-builder/EntityMetadataValidator.js +9 -0
- package/metadata-builder/EntityMetadataValidator.js.map +1 -1
- package/metadata-builder/JunctionEntityMetadataBuilder.js +5 -0
- package/metadata-builder/JunctionEntityMetadataBuilder.js.map +1 -1
- package/metadata-builder/RelationJoinColumnBuilder.js +2 -0
- package/metadata-builder/RelationJoinColumnBuilder.js.map +1 -1
- package/package.json +1 -1
- package/query-builder/QueryBuilder.js +3 -5
- package/query-builder/QueryBuilder.js.map +1 -1
- package/query-runner/QueryRunner.d.ts +2 -2
- package/query-runner/QueryRunner.js.map +1 -1
- package/schema-builder/options/TableColumnOptions.d.ts +8 -0
- package/schema-builder/options/TableColumnOptions.js.map +1 -1
- package/schema-builder/table/TableColumn.d.ts +4 -0
- package/schema-builder/table/TableColumn.js +2 -0
- package/schema-builder/table/TableColumn.js.map +1 -1
- package/schema-builder/util/TableUtils.js +1 -0
- package/schema-builder/util/TableUtils.js.map +1 -1
- package/util/escapeRegExp.d.ts +1 -0
- package/util/escapeRegExp.js +10 -0
- package/util/escapeRegExp.js.map +1 -0
package/README.md
CHANGED
|
@@ -1296,7 +1296,7 @@ There are several extensions that simplify working with TypeORM and integrating
|
|
|
1296
1296
|
- Fixtures loader - [typeorm-fixtures-cli](https://github.com/RobinCK/typeorm-fixtures)
|
|
1297
1297
|
- ER Diagram generator - [typeorm-uml](https://github.com/eugene-manuilov/typeorm-uml/)
|
|
1298
1298
|
- another ER Diagram generator - [erdia](https://www.npmjs.com/package/erdia/)
|
|
1299
|
-
- Create
|
|
1299
|
+
- Create, drop & seed database - [typeorm-extension](https://github.com/tada5hi/typeorm-extension)
|
|
1300
1300
|
- Automatically update `data-source.ts` after generating migrations/entities - [typeorm-codebase-sync](https://www.npmjs.com/package/typeorm-codebase-sync)
|
|
1301
1301
|
|
|
1302
1302
|
## Contributing
|
|
@@ -31,6 +31,9 @@ export class RedisQueryResultCache {
|
|
|
31
31
|
this.connection.logger.log("warn", err);
|
|
32
32
|
});
|
|
33
33
|
}
|
|
34
|
+
if ("connect" in this.client) {
|
|
35
|
+
await this.client.connect();
|
|
36
|
+
}
|
|
34
37
|
}
|
|
35
38
|
else if (this.clientType === "ioredis") {
|
|
36
39
|
if (cacheOptions && cacheOptions.port) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../browser/src/cache/RedisQueryResultCache.ts"],"names":[],"mappings":"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","file":"RedisQueryResultCache.js","sourcesContent":["import { QueryResultCache } from \"./QueryResultCache\"\nimport { QueryResultCacheOptions } from \"./QueryResultCacheOptions\"\nimport { PlatformTools } from \"../platform/PlatformTools\"\nimport { DataSource } from \"../data-source/DataSource\"\nimport { QueryRunner } from \"../query-runner/QueryRunner\"\nimport { TypeORMError } from \"../error/TypeORMError\"\n\n/**\n * Caches query result into Redis database.\n */\nexport class RedisQueryResultCache implements QueryResultCache {\n // -------------------------------------------------------------------------\n // Protected Properties\n // -------------------------------------------------------------------------\n\n /**\n * Redis module instance loaded dynamically.\n */\n protected redis: any\n\n /**\n * Connected redis client.\n */\n protected client: any\n\n /**\n * Type of the Redis Client (redis or ioredis).\n */\n protected clientType: \"redis\" | \"ioredis\" | \"ioredis/cluster\"\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(\n protected connection: DataSource,\n clientType: \"redis\" | \"ioredis\" | \"ioredis/cluster\",\n ) {\n this.clientType = clientType\n this.redis = this.loadRedis()\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates a connection with given cache provider.\n */\n async connect(): Promise<void> {\n const cacheOptions: any = this.connection.options.cache\n if (this.clientType === \"redis\") {\n this.client = this.redis.createClient({\n ...cacheOptions?.options,\n legacyMode: true,\n })\n if (\n typeof this.connection.options.cache === \"object\" &&\n this.connection.options.cache.ignoreErrors\n ) {\n this.client.on(\"error\", (err: any) => {\n this.connection.logger.log(\"warn\", err)\n })\n }\n } else if (this.clientType === \"ioredis\") {\n if (cacheOptions && cacheOptions.port) {\n if (cacheOptions.options) {\n this.client = new this.redis(\n cacheOptions.port,\n cacheOptions.options,\n )\n } else {\n this.client = new this.redis(cacheOptions.port)\n }\n } else if (cacheOptions && cacheOptions.options) {\n this.client = new this.redis(cacheOptions.options)\n } else {\n this.client = new this.redis()\n }\n } else if (this.clientType === \"ioredis/cluster\") {\n if (\n cacheOptions &&\n cacheOptions.options &&\n Array.isArray(cacheOptions.options)\n ) {\n this.client = new this.redis.Cluster(cacheOptions.options)\n } else if (\n cacheOptions &&\n cacheOptions.options &&\n cacheOptions.options.startupNodes\n ) {\n this.client = new this.redis.Cluster(\n cacheOptions.options.startupNodes,\n cacheOptions.options.options,\n )\n } else {\n throw new TypeORMError(\n `options.startupNodes required for ${this.clientType}.`,\n )\n }\n }\n }\n\n /**\n * Disconnects the connection\n */\n async disconnect(): Promise<void> {\n return new Promise<void>((ok, fail) => {\n this.client.quit((err: any, result: any) => {\n if (err) return fail(err)\n ok()\n this.client = undefined\n })\n })\n }\n\n /**\n * Creates table for storing cache if it does not exist yet.\n */\n async synchronize(queryRunner: QueryRunner): Promise<void> {}\n\n /**\n * Caches given query result.\n * Returns cache result if found.\n * Returns undefined if result is not cached.\n */\n getFromCache(\n options: QueryResultCacheOptions,\n queryRunner?: QueryRunner,\n ): Promise<QueryResultCacheOptions | undefined> {\n return new Promise<QueryResultCacheOptions | undefined>((ok, fail) => {\n if (options.identifier) {\n this.client.get(options.identifier, (err: any, result: any) => {\n if (err) return fail(err)\n ok(JSON.parse(result))\n })\n } else if (options.query) {\n this.client.get(options.query, (err: any, result: any) => {\n if (err) return fail(err)\n ok(JSON.parse(result))\n })\n } else {\n ok(undefined)\n }\n })\n }\n\n /**\n * Checks if cache is expired or not.\n */\n isExpired(savedCache: QueryResultCacheOptions): boolean {\n return savedCache.time! + savedCache.duration < new Date().getTime()\n }\n\n /**\n * Stores given query result in the cache.\n */\n async storeInCache(\n options: QueryResultCacheOptions,\n savedCache: QueryResultCacheOptions,\n queryRunner?: QueryRunner,\n ): Promise<void> {\n return new Promise<void>((ok, fail) => {\n if (options.identifier) {\n this.client.set(\n options.identifier,\n JSON.stringify(options),\n \"PX\",\n options.duration,\n (err: any, result: any) => {\n if (err) return fail(err)\n ok()\n },\n )\n } else if (options.query) {\n this.client.set(\n options.query,\n JSON.stringify(options),\n \"PX\",\n options.duration,\n (err: any, result: any) => {\n if (err) return fail(err)\n ok()\n },\n )\n }\n })\n }\n\n /**\n * Clears everything stored in the cache.\n */\n async clear(queryRunner?: QueryRunner): Promise<void> {\n return new Promise<void>((ok, fail) => {\n this.client.flushdb((err: any, result: any) => {\n if (err) return fail(err)\n ok()\n })\n })\n }\n\n /**\n * Removes all cached results by given identifiers from cache.\n */\n async remove(\n identifiers: string[],\n queryRunner?: QueryRunner,\n ): Promise<void> {\n await Promise.all(\n identifiers.map((identifier) => {\n return this.deleteKey(identifier)\n }),\n )\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Removes a single key from redis database.\n */\n protected deleteKey(key: string): Promise<void> {\n return new Promise<void>((ok, fail) => {\n this.client.del(key, (err: any, result: any) => {\n if (err) return fail(err)\n ok()\n })\n })\n }\n\n /**\n * Loads redis dependency.\n */\n protected loadRedis(): any {\n try {\n if (this.clientType === \"ioredis/cluster\") {\n return PlatformTools.load(\"ioredis\")\n } else {\n return PlatformTools.load(this.clientType)\n }\n } catch (e) {\n throw new TypeORMError(\n `Cannot use cache because ${this.clientType} is not installed. Please run \"npm i ${this.clientType} --save\".`,\n )\n }\n }\n}\n"],"sourceRoot":".."}
|
|
1
|
+
{"version":3,"sources":["../browser/src/cache/RedisQueryResultCache.ts"],"names":[],"mappings":"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","file":"RedisQueryResultCache.js","sourcesContent":["import { QueryResultCache } from \"./QueryResultCache\"\nimport { QueryResultCacheOptions } from \"./QueryResultCacheOptions\"\nimport { PlatformTools } from \"../platform/PlatformTools\"\nimport { DataSource } from \"../data-source/DataSource\"\nimport { QueryRunner } from \"../query-runner/QueryRunner\"\nimport { TypeORMError } from \"../error/TypeORMError\"\n\n/**\n * Caches query result into Redis database.\n */\nexport class RedisQueryResultCache implements QueryResultCache {\n // -------------------------------------------------------------------------\n // Protected Properties\n // -------------------------------------------------------------------------\n\n /**\n * Redis module instance loaded dynamically.\n */\n protected redis: any\n\n /**\n * Connected redis client.\n */\n protected client: any\n\n /**\n * Type of the Redis Client (redis or ioredis).\n */\n protected clientType: \"redis\" | \"ioredis\" | \"ioredis/cluster\"\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(\n protected connection: DataSource,\n clientType: \"redis\" | \"ioredis\" | \"ioredis/cluster\",\n ) {\n this.clientType = clientType\n this.redis = this.loadRedis()\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates a connection with given cache provider.\n */\n async connect(): Promise<void> {\n const cacheOptions: any = this.connection.options.cache\n if (this.clientType === \"redis\") {\n this.client = this.redis.createClient({\n ...cacheOptions?.options,\n legacyMode: true,\n })\n if (\n typeof this.connection.options.cache === \"object\" &&\n this.connection.options.cache.ignoreErrors\n ) {\n this.client.on(\"error\", (err: any) => {\n this.connection.logger.log(\"warn\", err)\n })\n }\n if (\"connect\" in this.client) {\n await this.client.connect()\n }\n } else if (this.clientType === \"ioredis\") {\n if (cacheOptions && cacheOptions.port) {\n if (cacheOptions.options) {\n this.client = new this.redis(\n cacheOptions.port,\n cacheOptions.options,\n )\n } else {\n this.client = new this.redis(cacheOptions.port)\n }\n } else if (cacheOptions && cacheOptions.options) {\n this.client = new this.redis(cacheOptions.options)\n } else {\n this.client = new this.redis()\n }\n } else if (this.clientType === \"ioredis/cluster\") {\n if (\n cacheOptions &&\n cacheOptions.options &&\n Array.isArray(cacheOptions.options)\n ) {\n this.client = new this.redis.Cluster(cacheOptions.options)\n } else if (\n cacheOptions &&\n cacheOptions.options &&\n cacheOptions.options.startupNodes\n ) {\n this.client = new this.redis.Cluster(\n cacheOptions.options.startupNodes,\n cacheOptions.options.options,\n )\n } else {\n throw new TypeORMError(\n `options.startupNodes required for ${this.clientType}.`,\n )\n }\n }\n }\n\n /**\n * Disconnects the connection\n */\n async disconnect(): Promise<void> {\n return new Promise<void>((ok, fail) => {\n this.client.quit((err: any, result: any) => {\n if (err) return fail(err)\n ok()\n this.client = undefined\n })\n })\n }\n\n /**\n * Creates table for storing cache if it does not exist yet.\n */\n async synchronize(queryRunner: QueryRunner): Promise<void> {}\n\n /**\n * Caches given query result.\n * Returns cache result if found.\n * Returns undefined if result is not cached.\n */\n getFromCache(\n options: QueryResultCacheOptions,\n queryRunner?: QueryRunner,\n ): Promise<QueryResultCacheOptions | undefined> {\n return new Promise<QueryResultCacheOptions | undefined>((ok, fail) => {\n if (options.identifier) {\n this.client.get(options.identifier, (err: any, result: any) => {\n if (err) return fail(err)\n ok(JSON.parse(result))\n })\n } else if (options.query) {\n this.client.get(options.query, (err: any, result: any) => {\n if (err) return fail(err)\n ok(JSON.parse(result))\n })\n } else {\n ok(undefined)\n }\n })\n }\n\n /**\n * Checks if cache is expired or not.\n */\n isExpired(savedCache: QueryResultCacheOptions): boolean {\n return savedCache.time! + savedCache.duration < new Date().getTime()\n }\n\n /**\n * Stores given query result in the cache.\n */\n async storeInCache(\n options: QueryResultCacheOptions,\n savedCache: QueryResultCacheOptions,\n queryRunner?: QueryRunner,\n ): Promise<void> {\n return new Promise<void>((ok, fail) => {\n if (options.identifier) {\n this.client.set(\n options.identifier,\n JSON.stringify(options),\n \"PX\",\n options.duration,\n (err: any, result: any) => {\n if (err) return fail(err)\n ok()\n },\n )\n } else if (options.query) {\n this.client.set(\n options.query,\n JSON.stringify(options),\n \"PX\",\n options.duration,\n (err: any, result: any) => {\n if (err) return fail(err)\n ok()\n },\n )\n }\n })\n }\n\n /**\n * Clears everything stored in the cache.\n */\n async clear(queryRunner?: QueryRunner): Promise<void> {\n return new Promise<void>((ok, fail) => {\n this.client.flushdb((err: any, result: any) => {\n if (err) return fail(err)\n ok()\n })\n })\n }\n\n /**\n * Removes all cached results by given identifiers from cache.\n */\n async remove(\n identifiers: string[],\n queryRunner?: QueryRunner,\n ): Promise<void> {\n await Promise.all(\n identifiers.map((identifier) => {\n return this.deleteKey(identifier)\n }),\n )\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Removes a single key from redis database.\n */\n protected deleteKey(key: string): Promise<void> {\n return new Promise<void>((ok, fail) => {\n this.client.del(key, (err: any, result: any) => {\n if (err) return fail(err)\n ok()\n })\n })\n }\n\n /**\n * Loads redis dependency.\n */\n protected loadRedis(): any {\n try {\n if (this.clientType === \"ioredis/cluster\") {\n return PlatformTools.load(\"ioredis\")\n } else {\n return PlatformTools.load(this.clientType)\n }\n } catch (e) {\n throw new TypeORMError(\n `Cannot use cache because ${this.clientType} is not installed. Please run \"npm i ${this.clientType} --save\".`,\n )\n }\n }\n}\n"],"sourceRoot":".."}
|
|
@@ -111,6 +111,14 @@ export interface ColumnOptions extends ColumnCommonOptions {
|
|
|
111
111
|
* Exact name of enum
|
|
112
112
|
*/
|
|
113
113
|
enumName?: string;
|
|
114
|
+
/**
|
|
115
|
+
* If this column is primary key then this specifies the name for it.
|
|
116
|
+
*/
|
|
117
|
+
primaryKeyConstraintName?: string;
|
|
118
|
+
/**
|
|
119
|
+
* If this column is foreign key then this specifies the name for it.
|
|
120
|
+
*/
|
|
121
|
+
foreignKeyConstraintName?: string;
|
|
114
122
|
/**
|
|
115
123
|
* Generated column expression.
|
|
116
124
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../browser/src/decorator/options/ColumnOptions.ts"],"names":[],"mappings":"","file":"ColumnOptions.js","sourcesContent":["import { ColumnType } from \"../../driver/types/ColumnTypes\"\nimport { ValueTransformer } from \"./ValueTransformer\"\nimport { ColumnCommonOptions } from \"./ColumnCommonOptions\"\n\n/**\n * Describes all column's options.\n */\nexport interface ColumnOptions extends ColumnCommonOptions {\n /**\n * Column type. Must be one of the value from the ColumnTypes class.\n */\n type?: ColumnType\n\n /**\n * Column name in the database.\n */\n name?: string\n\n /**\n * Column type's length. Used only on some column types.\n * For example type = \"string\" and length = \"100\" means that ORM will create a column with type varchar(100).\n */\n length?: string | number\n\n /**\n * Column type's display width. Used only on some column types in MySQL.\n * For example, INT(4) specifies an INT with a display width of four digits.\n */\n width?: number\n\n /**\n * Indicates if column's value can be set to NULL.\n * Default value is \"false\".\n */\n nullable?: boolean\n\n /**\n * Indicates if column value is not updated by \"save\" operation.\n * It means you'll be able to write this value only when you first time insert the object.\n * Default value is \"false\".\n *\n * @deprecated Please use the `update` option instead. Careful, it takes\n * the opposite value to readonly.\n *\n */\n readonly?: boolean\n\n /**\n * Indicates if column value is updated by \"save\" operation.\n * If false, you'll be able to write this value only when you first time insert the object.\n * Default value is \"true\".\n */\n update?: boolean\n\n /**\n * Indicates if column is always selected by QueryBuilder and find operations.\n * Default value is \"true\".\n */\n select?: boolean\n\n /**\n * Indicates if column is inserted by default.\n * Default value is \"true\".\n */\n insert?: boolean\n\n /**\n * Default database value.\n */\n default?: any\n\n /**\n * ON UPDATE trigger. Works only for MySQL.\n */\n onUpdate?: string\n\n /**\n * Indicates if this column is a primary key.\n * Same can be achieved when @PrimaryColumn decorator is used.\n */\n primary?: boolean\n\n /**\n * Specifies if column's value must be unique or not.\n */\n unique?: boolean\n\n /**\n * Column comment. Not supported by all database types.\n */\n comment?: string\n\n /**\n * The precision for a decimal (exact numeric) column (applies only for decimal column), which is the maximum\n * number of digits that are stored for the values.\n */\n precision?: number | null\n\n /**\n * The scale for a decimal (exact numeric) column (applies only for decimal column), which represents the number\n * of digits to the right of the decimal point and must not be greater than precision.\n */\n scale?: number\n\n /**\n * Puts ZEROFILL attribute on to numeric column. Works only for MySQL.\n * If you specify ZEROFILL for a numeric column, MySQL automatically adds the UNSIGNED attribute to this column\n */\n zerofill?: boolean\n\n /**\n * Puts UNSIGNED attribute on to numeric column. Works only for MySQL.\n */\n unsigned?: boolean\n\n /**\n * Defines a column character set.\n * Not supported by all database types.\n */\n charset?: string\n\n /**\n * Defines a column collation.\n */\n collation?: string\n\n /**\n * Array of possible enumerated values.\n */\n enum?: (string | number)[] | Object\n /**\n * Exact name of enum\n */\n enumName?: string\n\n /**\n * Generated column expression.\n */\n asExpression?: string\n\n /**\n * Generated column type.\n */\n generatedType?: \"VIRTUAL\" | \"STORED\"\n\n /**\n * Identity column type. Supports only in Postgres 10+.\n */\n generatedIdentity?: \"ALWAYS\" | \"BY DEFAULT\"\n\n /**\n * Return type of HSTORE column.\n * Returns value as string or as object.\n */\n hstoreType?: \"object\" | \"string\"\n\n /**\n * Indicates if this column is an array.\n * Can be simply set to true or array length can be specified.\n * Supported only by postgres.\n */\n array?: boolean\n\n /**\n * Specifies a value transformer that is to be used to (un)marshal\n * this column when reading or writing to the database.\n */\n transformer?: ValueTransformer | ValueTransformer[]\n\n /**\n * Spatial Feature Type (Geometry, Point, Polygon, etc.)\n */\n spatialFeatureType?: string\n\n /**\n * SRID (Spatial Reference ID (EPSG code))\n */\n srid?: number\n}\n"],"sourceRoot":"../.."}
|
|
1
|
+
{"version":3,"sources":["../browser/src/decorator/options/ColumnOptions.ts"],"names":[],"mappings":"","file":"ColumnOptions.js","sourcesContent":["import { ColumnType } from \"../../driver/types/ColumnTypes\"\nimport { ValueTransformer } from \"./ValueTransformer\"\nimport { ColumnCommonOptions } from \"./ColumnCommonOptions\"\n\n/**\n * Describes all column's options.\n */\nexport interface ColumnOptions extends ColumnCommonOptions {\n /**\n * Column type. Must be one of the value from the ColumnTypes class.\n */\n type?: ColumnType\n\n /**\n * Column name in the database.\n */\n name?: string\n\n /**\n * Column type's length. Used only on some column types.\n * For example type = \"string\" and length = \"100\" means that ORM will create a column with type varchar(100).\n */\n length?: string | number\n\n /**\n * Column type's display width. Used only on some column types in MySQL.\n * For example, INT(4) specifies an INT with a display width of four digits.\n */\n width?: number\n\n /**\n * Indicates if column's value can be set to NULL.\n * Default value is \"false\".\n */\n nullable?: boolean\n\n /**\n * Indicates if column value is not updated by \"save\" operation.\n * It means you'll be able to write this value only when you first time insert the object.\n * Default value is \"false\".\n *\n * @deprecated Please use the `update` option instead. Careful, it takes\n * the opposite value to readonly.\n *\n */\n readonly?: boolean\n\n /**\n * Indicates if column value is updated by \"save\" operation.\n * If false, you'll be able to write this value only when you first time insert the object.\n * Default value is \"true\".\n */\n update?: boolean\n\n /**\n * Indicates if column is always selected by QueryBuilder and find operations.\n * Default value is \"true\".\n */\n select?: boolean\n\n /**\n * Indicates if column is inserted by default.\n * Default value is \"true\".\n */\n insert?: boolean\n\n /**\n * Default database value.\n */\n default?: any\n\n /**\n * ON UPDATE trigger. Works only for MySQL.\n */\n onUpdate?: string\n\n /**\n * Indicates if this column is a primary key.\n * Same can be achieved when @PrimaryColumn decorator is used.\n */\n primary?: boolean\n\n /**\n * Specifies if column's value must be unique or not.\n */\n unique?: boolean\n\n /**\n * Column comment. Not supported by all database types.\n */\n comment?: string\n\n /**\n * The precision for a decimal (exact numeric) column (applies only for decimal column), which is the maximum\n * number of digits that are stored for the values.\n */\n precision?: number | null\n\n /**\n * The scale for a decimal (exact numeric) column (applies only for decimal column), which represents the number\n * of digits to the right of the decimal point and must not be greater than precision.\n */\n scale?: number\n\n /**\n * Puts ZEROFILL attribute on to numeric column. Works only for MySQL.\n * If you specify ZEROFILL for a numeric column, MySQL automatically adds the UNSIGNED attribute to this column\n */\n zerofill?: boolean\n\n /**\n * Puts UNSIGNED attribute on to numeric column. Works only for MySQL.\n */\n unsigned?: boolean\n\n /**\n * Defines a column character set.\n * Not supported by all database types.\n */\n charset?: string\n\n /**\n * Defines a column collation.\n */\n collation?: string\n\n /**\n * Array of possible enumerated values.\n */\n enum?: (string | number)[] | Object\n\n /**\n * Exact name of enum\n */\n enumName?: string\n\n /**\n * If this column is primary key then this specifies the name for it.\n */\n primaryKeyConstraintName?: string\n\n /**\n * If this column is foreign key then this specifies the name for it.\n */\n foreignKeyConstraintName?: string\n\n /**\n * Generated column expression.\n */\n asExpression?: string\n\n /**\n * Generated column type.\n */\n generatedType?: \"VIRTUAL\" | \"STORED\"\n\n /**\n * Identity column type. Supports only in Postgres 10+.\n */\n generatedIdentity?: \"ALWAYS\" | \"BY DEFAULT\"\n\n /**\n * Return type of HSTORE column.\n * Returns value as string or as object.\n */\n hstoreType?: \"object\" | \"string\"\n\n /**\n * Indicates if this column is an array.\n * Can be simply set to true or array length can be specified.\n * Supported only by postgres.\n */\n array?: boolean\n\n /**\n * Specifies a value transformer that is to be used to (un)marshal\n * this column when reading or writing to the database.\n */\n transformer?: ValueTransformer | ValueTransformer[]\n\n /**\n * Spatial Feature Type (Geometry, Point, Polygon, etc.)\n */\n spatialFeatureType?: string\n\n /**\n * SRID (Spatial Reference ID (EPSG code))\n */\n srid?: number\n}\n"],"sourceRoot":"../.."}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../browser/src/decorator/options/JoinColumnOptions.ts"],"names":[],"mappings":"","file":"JoinColumnOptions.js","sourcesContent":["/**\n * Describes join column options.\n */\nexport interface JoinColumnOptions {\n /**\n * Name of the column.\n */\n name?: string\n\n /**\n * Name of the column in the entity to which this column is referenced.\n */\n referencedColumnName?: string // TODO rename to referencedColumn\n}\n"],"sourceRoot":"../.."}
|
|
1
|
+
{"version":3,"sources":["../browser/src/decorator/options/JoinColumnOptions.ts"],"names":[],"mappings":"","file":"JoinColumnOptions.js","sourcesContent":["/**\n * Describes join column options.\n */\nexport interface JoinColumnOptions {\n /**\n * Name of the column.\n */\n name?: string\n\n /**\n * Name of the column in the entity to which this column is referenced.\n */\n referencedColumnName?: string // TODO rename to referencedColumn\n\n /**\n * Name of the foreign key constraint.\n */\n foreignKeyConstraintName?: string\n}\n"],"sourceRoot":"../.."}
|
|
@@ -19,4 +19,8 @@ export interface PrimaryGeneratedColumnIdentityOptions {
|
|
|
19
19
|
* Identity column type. Supports only in Postgres 10+.
|
|
20
20
|
*/
|
|
21
21
|
generatedIdentity?: "ALWAYS" | "BY DEFAULT";
|
|
22
|
+
/**
|
|
23
|
+
* Name of the primary key constraint.
|
|
24
|
+
*/
|
|
25
|
+
primaryKeyConstraintName?: string;
|
|
22
26
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../browser/src/decorator/options/PrimaryGeneratedColumnIdentityOptions.ts"],"names":[],"mappings":"","file":"PrimaryGeneratedColumnIdentityOptions.js","sourcesContent":["import { PrimaryGeneratedColumnType } from \"../../driver/types/ColumnTypes\"\n\n/**\n * Describes all options for PrimaryGeneratedColumn decorator with identity generation strategy.\n */\nexport interface PrimaryGeneratedColumnIdentityOptions {\n /**\n * Column type. Must be one of the value from the ColumnTypes class.\n */\n type?: PrimaryGeneratedColumnType\n\n /**\n * Column name in the database.\n */\n name?: string\n\n /**\n * Column comment. Not supported by all database types.\n */\n comment?: string\n\n /**\n * Identity column type. Supports only in Postgres 10+.\n */\n generatedIdentity?: \"ALWAYS\" | \"BY DEFAULT\"\n}\n"],"sourceRoot":"../.."}
|
|
1
|
+
{"version":3,"sources":["../browser/src/decorator/options/PrimaryGeneratedColumnIdentityOptions.ts"],"names":[],"mappings":"","file":"PrimaryGeneratedColumnIdentityOptions.js","sourcesContent":["import { PrimaryGeneratedColumnType } from \"../../driver/types/ColumnTypes\"\n\n/**\n * Describes all options for PrimaryGeneratedColumn decorator with identity generation strategy.\n */\nexport interface PrimaryGeneratedColumnIdentityOptions {\n /**\n * Column type. Must be one of the value from the ColumnTypes class.\n */\n type?: PrimaryGeneratedColumnType\n\n /**\n * Column name in the database.\n */\n name?: string\n\n /**\n * Column comment. Not supported by all database types.\n */\n comment?: string\n\n /**\n * Identity column type. Supports only in Postgres 10+.\n */\n generatedIdentity?: \"ALWAYS\" | \"BY DEFAULT\"\n\n /**\n * Name of the primary key constraint.\n */\n primaryKeyConstraintName?: string\n}\n"],"sourceRoot":"../.."}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../browser/src/decorator/options/PrimaryGeneratedColumnNumericOptions.ts"],"names":[],"mappings":"","file":"PrimaryGeneratedColumnNumericOptions.js","sourcesContent":["import { PrimaryGeneratedColumnType } from \"../../driver/types/ColumnTypes\"\n\n/**\n * Describes all options for PrimaryGeneratedColumn decorator with numeric generation strategy.\n */\nexport interface PrimaryGeneratedColumnNumericOptions {\n /**\n * Column type. Must be one of the value from the ColumnTypes class.\n */\n type?: PrimaryGeneratedColumnType\n\n /**\n * Column name in the database.\n */\n name?: string\n\n /**\n * Column comment. Not supported by all database types.\n */\n comment?: string\n\n /**\n * Puts ZEROFILL attribute on to numeric column. Works only for MySQL.\n * If you specify ZEROFILL for a numeric column, MySQL automatically adds the UNSIGNED attribute to the column\n */\n zerofill?: boolean\n\n /**\n * Puts UNSIGNED attribute on to numeric column. Works only for MySQL.\n */\n unsigned?: boolean\n}\n"],"sourceRoot":"../.."}
|
|
1
|
+
{"version":3,"sources":["../browser/src/decorator/options/PrimaryGeneratedColumnNumericOptions.ts"],"names":[],"mappings":"","file":"PrimaryGeneratedColumnNumericOptions.js","sourcesContent":["import { PrimaryGeneratedColumnType } from \"../../driver/types/ColumnTypes\"\n\n/**\n * Describes all options for PrimaryGeneratedColumn decorator with numeric generation strategy.\n */\nexport interface PrimaryGeneratedColumnNumericOptions {\n /**\n * Column type. Must be one of the value from the ColumnTypes class.\n */\n type?: PrimaryGeneratedColumnType\n\n /**\n * Column name in the database.\n */\n name?: string\n\n /**\n * Column comment. Not supported by all database types.\n */\n comment?: string\n\n /**\n * Puts ZEROFILL attribute on to numeric column. Works only for MySQL.\n * If you specify ZEROFILL for a numeric column, MySQL automatically adds the UNSIGNED attribute to the column\n */\n zerofill?: boolean\n\n /**\n * Puts UNSIGNED attribute on to numeric column. Works only for MySQL.\n */\n unsigned?: boolean\n\n /**\n * Name of the primary key constraint.\n */\n primaryKeyConstraintName?: string\n}\n"],"sourceRoot":"../.."}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../browser/src/decorator/options/PrimaryGeneratedColumnUUIDOptions.ts"],"names":[],"mappings":"","file":"PrimaryGeneratedColumnUUIDOptions.js","sourcesContent":["/**\n * Describes all options for PrimaryGeneratedColumn decorator with numeric uuid strategy.\n */\nexport interface PrimaryGeneratedColumnUUIDOptions {\n /**\n * Column name in the database.\n */\n name?: string\n\n /**\n * Column comment. Not supported by all database types.\n */\n comment?: string\n}\n"],"sourceRoot":"../.."}
|
|
1
|
+
{"version":3,"sources":["../browser/src/decorator/options/PrimaryGeneratedColumnUUIDOptions.ts"],"names":[],"mappings":"","file":"PrimaryGeneratedColumnUUIDOptions.js","sourcesContent":["/**\n * Describes all options for PrimaryGeneratedColumn decorator with numeric uuid strategy.\n */\nexport interface PrimaryGeneratedColumnUUIDOptions {\n /**\n * Column name in the database.\n */\n name?: string\n\n /**\n * Column comment. Not supported by all database types.\n */\n comment?: string\n\n /**\n * Name of the primary key constraint.\n */\n primaryKeyConstraintName?: string\n}\n"],"sourceRoot":"../.."}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../browser/src/decorator/relations/JoinColumn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAyBtD;;;;GAIG;AACH,MAAM,UAAU,UAAU,CACtB,qBAA+D;IAE/D,OAAO,UAAU,MAAc,EAAE,YAAoB;QACjD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,qBAAqB,CAAC;YAChD,CAAC,CAAC,qBAAqB;YACvB,CAAC,CAAC,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAA;QACnC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YACxB,sBAAsB,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC;gBACtC,MAAM,EAAE,MAAM,CAAC,WAAW;gBAC1B,YAAY,EAAE,YAAY;gBAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,oBAAoB,EAAE,OAAO,CAAC,oBAAoB;
|
|
1
|
+
{"version":3,"sources":["../browser/src/decorator/relations/JoinColumn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAyBtD;;;;GAIG;AACH,MAAM,UAAU,UAAU,CACtB,qBAA+D;IAE/D,OAAO,UAAU,MAAc,EAAE,YAAoB;QACjD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,qBAAqB,CAAC;YAChD,CAAC,CAAC,qBAAqB;YACvB,CAAC,CAAC,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAA;QACnC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YACxB,sBAAsB,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC;gBACtC,MAAM,EAAE,MAAM,CAAC,WAAW;gBAC1B,YAAY,EAAE,YAAY;gBAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,oBAAoB,EAAE,OAAO,CAAC,oBAAoB;gBAClD,wBAAwB,EAAE,OAAO,CAAC,wBAAwB;aACnC,CAAC,CAAA;QAChC,CAAC,CAAC,CAAA;IACN,CAAC,CAAA;AACL,CAAC","file":"JoinColumn.js","sourcesContent":["import { getMetadataArgsStorage } from \"../../globals\"\nimport { JoinColumnMetadataArgs } from \"../../metadata-args/JoinColumnMetadataArgs\"\nimport { JoinColumnOptions } from \"../options/JoinColumnOptions\"\n\n/**\n * JoinColumn decorator used on one-to-one relations to specify owner side of relationship.\n * It also can be used on both one-to-one and many-to-one relations to specify custom column name\n * or custom referenced column.\n */\nexport function JoinColumn(): PropertyDecorator\n\n/**\n * JoinColumn decorator used on one-to-one relations to specify owner side of relationship.\n * It also can be used on both one-to-one and many-to-one relations to specify custom column name\n * or custom referenced column.\n */\nexport function JoinColumn(options: JoinColumnOptions): PropertyDecorator\n\n/**\n * JoinColumn decorator used on one-to-one relations to specify owner side of relationship.\n * It also can be used on both one-to-one and many-to-one relations to specify custom column name\n * or custom referenced column.\n */\nexport function JoinColumn(options: JoinColumnOptions[]): PropertyDecorator\n\n/**\n * JoinColumn decorator used on one-to-one relations to specify owner side of relationship.\n * It also can be used on both one-to-one and many-to-one relations to specify custom column name\n * or custom referenced column.\n */\nexport function JoinColumn(\n optionsOrOptionsArray?: JoinColumnOptions | JoinColumnOptions[],\n): PropertyDecorator {\n return function (object: Object, propertyName: string) {\n const options = Array.isArray(optionsOrOptionsArray)\n ? optionsOrOptionsArray\n : [optionsOrOptionsArray || {}]\n options.forEach((options) => {\n getMetadataArgsStorage().joinColumns.push({\n target: object.constructor,\n propertyName: propertyName,\n name: options.name,\n referencedColumnName: options.referencedColumnName,\n foreignKeyConstraintName: options.foreignKeyConstraintName,\n } as JoinColumnMetadataArgs)\n })\n }\n}\n"],"sourceRoot":"../.."}
|
|
@@ -177,7 +177,7 @@ export declare class CockroachQueryRunner extends BaseQueryRunner implements Que
|
|
|
177
177
|
/**
|
|
178
178
|
* Creates a new primary key.
|
|
179
179
|
*/
|
|
180
|
-
createPrimaryKey(tableOrName: Table | string, columnNames: string[]): Promise<void>;
|
|
180
|
+
createPrimaryKey(tableOrName: Table | string, columnNames: string[], constraintName?: string): Promise<void>;
|
|
181
181
|
/**
|
|
182
182
|
* Updates composite primary keys.
|
|
183
183
|
*/
|
|
@@ -185,7 +185,7 @@ export declare class CockroachQueryRunner extends BaseQueryRunner implements Que
|
|
|
185
185
|
/**
|
|
186
186
|
* Drops a primary key.
|
|
187
187
|
*/
|
|
188
|
-
dropPrimaryKey(tableOrName: Table | string): Promise<void>;
|
|
188
|
+
dropPrimaryKey(tableOrName: Table | string, constraintName?: string): Promise<void>;
|
|
189
189
|
/**
|
|
190
190
|
* Creates new unique constraint.
|
|
191
191
|
*/
|
|
@@ -310,7 +310,7 @@ export declare class CockroachQueryRunner extends BaseQueryRunner implements Que
|
|
|
310
310
|
/**
|
|
311
311
|
* Builds create primary key sql.
|
|
312
312
|
*/
|
|
313
|
-
protected createPrimaryKeySql(table: Table, columnNames: string[]): Query;
|
|
313
|
+
protected createPrimaryKeySql(table: Table, columnNames: string[], constraintName?: string): Query;
|
|
314
314
|
/**
|
|
315
315
|
* Builds drop primary key sql.
|
|
316
316
|
*/
|
|
@@ -510,7 +510,8 @@ export class CockroachQueryRunner extends BaseQueryRunner {
|
|
|
510
510
|
upQueries.push(new Query(`ALTER TABLE ${this.escapePath(oldTable)} RENAME TO "${newTableName}"`));
|
|
511
511
|
downQueries.push(new Query(`ALTER TABLE ${this.escapePath(newTable)} RENAME TO "${oldTableName}"`));
|
|
512
512
|
// rename column primary key constraint
|
|
513
|
-
if (newTable.primaryColumns.length > 0
|
|
513
|
+
if (newTable.primaryColumns.length > 0 &&
|
|
514
|
+
!newTable.primaryColumns[0].primaryKeyConstraintName) {
|
|
514
515
|
const columnNames = newTable.primaryColumns.map((column) => column.name);
|
|
515
516
|
const oldPkName = this.connection.namingStrategy.primaryKeyName(oldTable, columnNames);
|
|
516
517
|
const newPkName = this.connection.namingStrategy.primaryKeyName(newTable, columnNames);
|
|
@@ -519,6 +520,10 @@ export class CockroachQueryRunner extends BaseQueryRunner {
|
|
|
519
520
|
}
|
|
520
521
|
// rename unique constraints
|
|
521
522
|
newTable.uniques.forEach((unique) => {
|
|
523
|
+
const oldUniqueName = this.connection.namingStrategy.uniqueConstraintName(oldTable, unique.columnNames);
|
|
524
|
+
// Skip renaming if Unique has user defined constraint name
|
|
525
|
+
if (unique.name !== oldUniqueName)
|
|
526
|
+
return;
|
|
522
527
|
// build new constraint name
|
|
523
528
|
const newUniqueName = this.connection.namingStrategy.uniqueConstraintName(newTable, unique.columnNames);
|
|
524
529
|
// build queries
|
|
@@ -529,6 +534,10 @@ export class CockroachQueryRunner extends BaseQueryRunner {
|
|
|
529
534
|
});
|
|
530
535
|
// rename index constraints
|
|
531
536
|
newTable.indices.forEach((index) => {
|
|
537
|
+
const oldIndexName = this.connection.namingStrategy.indexName(oldTable, index.columnNames, index.where);
|
|
538
|
+
// Skip renaming if Index has user defined constraint name
|
|
539
|
+
if (index.name !== oldIndexName)
|
|
540
|
+
return;
|
|
532
541
|
// build new constraint name
|
|
533
542
|
const { schema } = this.driver.parseTableName(newTable);
|
|
534
543
|
const newIndexName = this.connection.namingStrategy.indexName(newTable, index.columnNames, index.where);
|
|
@@ -546,6 +555,10 @@ export class CockroachQueryRunner extends BaseQueryRunner {
|
|
|
546
555
|
});
|
|
547
556
|
// rename foreign key constraints
|
|
548
557
|
newTable.foreignKeys.forEach((foreignKey) => {
|
|
558
|
+
const oldForeignKeyName = this.connection.namingStrategy.foreignKeyName(oldTable, foreignKey.columnNames, this.getTablePath(foreignKey), foreignKey.referencedColumnNames);
|
|
559
|
+
// Skip renaming if foreign key has user defined constraint name
|
|
560
|
+
if (foreignKey.name !== oldForeignKeyName)
|
|
561
|
+
return;
|
|
549
562
|
// build new constraint name
|
|
550
563
|
const newForeignKeyName = this.connection.namingStrategy.foreignKeyName(newTable, foreignKey.columnNames, this.getTablePath(foreignKey), foreignKey.referencedColumnNames);
|
|
551
564
|
// build queries
|
|
@@ -575,9 +588,11 @@ export class CockroachQueryRunner extends BaseQueryRunner {
|
|
|
575
588
|
if (column.isPrimary) {
|
|
576
589
|
const primaryColumns = clonedTable.primaryColumns;
|
|
577
590
|
// if table already have primary key, me must drop it and recreate again
|
|
578
|
-
// todo:
|
|
591
|
+
// todo: https://go.crdb.dev/issue-v/48026/v21.1
|
|
579
592
|
if (primaryColumns.length > 0) {
|
|
580
|
-
const pkName =
|
|
593
|
+
const pkName = primaryColumns[0].primaryKeyConstraintName
|
|
594
|
+
? primaryColumns[0].primaryKeyConstraintName
|
|
595
|
+
: this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
|
|
581
596
|
const columnNames = primaryColumns
|
|
582
597
|
.map((column) => `"${column.name}"`)
|
|
583
598
|
.join(", ");
|
|
@@ -585,7 +600,9 @@ export class CockroachQueryRunner extends BaseQueryRunner {
|
|
|
585
600
|
downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT "${pkName}" PRIMARY KEY (${columnNames})`));
|
|
586
601
|
}
|
|
587
602
|
primaryColumns.push(column);
|
|
588
|
-
const pkName =
|
|
603
|
+
const pkName = primaryColumns[0].primaryKeyConstraintName
|
|
604
|
+
? primaryColumns[0].primaryKeyConstraintName
|
|
605
|
+
: this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
|
|
589
606
|
const columnNames = primaryColumns
|
|
590
607
|
.map((column) => `"${column.name}"`)
|
|
591
608
|
.join(", ");
|
|
@@ -713,7 +730,8 @@ export class CockroachQueryRunner extends BaseQueryRunner {
|
|
|
713
730
|
upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} RENAME COLUMN "${oldColumn.name}" TO "${newColumn.name}"`));
|
|
714
731
|
downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} RENAME COLUMN "${newColumn.name}" TO "${oldColumn.name}"`));
|
|
715
732
|
// rename column primary key constraint
|
|
716
|
-
if (oldColumn.isPrimary === true
|
|
733
|
+
if (oldColumn.isPrimary === true &&
|
|
734
|
+
!oldColumn.primaryKeyConstraintName) {
|
|
717
735
|
const primaryColumns = clonedTable.primaryColumns;
|
|
718
736
|
// build old primary constraint name
|
|
719
737
|
const columnNames = primaryColumns.map((column) => column.name);
|
|
@@ -728,6 +746,10 @@ export class CockroachQueryRunner extends BaseQueryRunner {
|
|
|
728
746
|
}
|
|
729
747
|
// rename unique constraints
|
|
730
748
|
clonedTable.findColumnUniques(oldColumn).forEach((unique) => {
|
|
749
|
+
const oldUniqueName = this.connection.namingStrategy.uniqueConstraintName(clonedTable, unique.columnNames);
|
|
750
|
+
// Skip renaming if Unique has user defined constraint name
|
|
751
|
+
if (unique.name !== oldUniqueName)
|
|
752
|
+
return;
|
|
731
753
|
// build new constraint name
|
|
732
754
|
unique.columnNames.splice(unique.columnNames.indexOf(oldColumn.name), 1);
|
|
733
755
|
unique.columnNames.push(newColumn.name);
|
|
@@ -740,6 +762,10 @@ export class CockroachQueryRunner extends BaseQueryRunner {
|
|
|
740
762
|
});
|
|
741
763
|
// rename index constraints
|
|
742
764
|
clonedTable.findColumnIndices(oldColumn).forEach((index) => {
|
|
765
|
+
const oldIndexName = this.connection.namingStrategy.indexName(clonedTable, index.columnNames, index.where);
|
|
766
|
+
// Skip renaming if Index has user defined constraint name
|
|
767
|
+
if (index.name !== oldIndexName)
|
|
768
|
+
return;
|
|
743
769
|
// build new constraint name
|
|
744
770
|
index.columnNames.splice(index.columnNames.indexOf(oldColumn.name), 1);
|
|
745
771
|
index.columnNames.push(newColumn.name);
|
|
@@ -761,6 +787,10 @@ export class CockroachQueryRunner extends BaseQueryRunner {
|
|
|
761
787
|
clonedTable
|
|
762
788
|
.findColumnForeignKeys(oldColumn)
|
|
763
789
|
.forEach((foreignKey) => {
|
|
790
|
+
const foreignKeyName = this.connection.namingStrategy.foreignKeyName(clonedTable, foreignKey.columnNames, this.getTablePath(foreignKey), foreignKey.referencedColumnNames);
|
|
791
|
+
// Skip renaming if foreign key has user defined constraint name
|
|
792
|
+
if (foreignKey.name !== foreignKeyName)
|
|
793
|
+
return;
|
|
764
794
|
// build new constraint name
|
|
765
795
|
foreignKey.columnNames.splice(foreignKey.columnNames.indexOf(oldColumn.name), 1);
|
|
766
796
|
foreignKey.columnNames.push(newColumn.name);
|
|
@@ -799,7 +829,9 @@ export class CockroachQueryRunner extends BaseQueryRunner {
|
|
|
799
829
|
const primaryColumns = clonedTable.primaryColumns;
|
|
800
830
|
// if primary column state changed, we must always drop existed constraint.
|
|
801
831
|
if (primaryColumns.length > 0) {
|
|
802
|
-
const pkName =
|
|
832
|
+
const pkName = primaryColumns[0].primaryKeyConstraintName
|
|
833
|
+
? primaryColumns[0].primaryKeyConstraintName
|
|
834
|
+
: this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
|
|
803
835
|
const columnNames = primaryColumns
|
|
804
836
|
.map((column) => `"${column.name}"`)
|
|
805
837
|
.join(", ");
|
|
@@ -811,7 +843,9 @@ export class CockroachQueryRunner extends BaseQueryRunner {
|
|
|
811
843
|
// update column in table
|
|
812
844
|
const column = clonedTable.columns.find((column) => column.name === newColumn.name);
|
|
813
845
|
column.isPrimary = true;
|
|
814
|
-
const pkName =
|
|
846
|
+
const pkName = primaryColumns[0].primaryKeyConstraintName
|
|
847
|
+
? primaryColumns[0].primaryKeyConstraintName
|
|
848
|
+
: this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
|
|
815
849
|
const columnNames = primaryColumns
|
|
816
850
|
.map((column) => `"${column.name}"`)
|
|
817
851
|
.join(", ");
|
|
@@ -826,7 +860,10 @@ export class CockroachQueryRunner extends BaseQueryRunner {
|
|
|
826
860
|
column.isPrimary = false;
|
|
827
861
|
// if we have another primary keys, we must recreate constraint.
|
|
828
862
|
if (primaryColumns.length > 0) {
|
|
829
|
-
const pkName =
|
|
863
|
+
const pkName = primaryColumns[0]
|
|
864
|
+
.primaryKeyConstraintName
|
|
865
|
+
? primaryColumns[0].primaryKeyConstraintName
|
|
866
|
+
: this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
|
|
830
867
|
const columnNames = primaryColumns
|
|
831
868
|
.map((column) => `"${column.name}"`)
|
|
832
869
|
.join(", ");
|
|
@@ -921,9 +958,11 @@ export class CockroachQueryRunner extends BaseQueryRunner {
|
|
|
921
958
|
const upQueries = [];
|
|
922
959
|
const downQueries = [];
|
|
923
960
|
// drop primary key constraint
|
|
924
|
-
// todo:
|
|
961
|
+
// todo: https://go.crdb.dev/issue-v/48026/v21.1
|
|
925
962
|
if (column.isPrimary) {
|
|
926
|
-
const pkName =
|
|
963
|
+
const pkName = column.primaryKeyConstraintName
|
|
964
|
+
? column.primaryKeyConstraintName
|
|
965
|
+
: this.connection.namingStrategy.primaryKeyName(clonedTable, clonedTable.primaryColumns.map((column) => column.name));
|
|
927
966
|
const columnNames = clonedTable.primaryColumns
|
|
928
967
|
.map((primaryColumn) => `"${primaryColumn.name}"`)
|
|
929
968
|
.join(", ");
|
|
@@ -934,7 +973,10 @@ export class CockroachQueryRunner extends BaseQueryRunner {
|
|
|
934
973
|
tableColumn.isPrimary = false;
|
|
935
974
|
// if primary key have multiple columns, we must recreate it without dropped column
|
|
936
975
|
if (clonedTable.primaryColumns.length > 0) {
|
|
937
|
-
const pkName =
|
|
976
|
+
const pkName = clonedTable.primaryColumns[0]
|
|
977
|
+
.primaryKeyConstraintName
|
|
978
|
+
? clonedTable.primaryColumns[0].primaryKeyConstraintName
|
|
979
|
+
: this.connection.namingStrategy.primaryKeyName(clonedTable, clonedTable.primaryColumns.map((column) => column.name));
|
|
938
980
|
const columnNames = clonedTable.primaryColumns
|
|
939
981
|
.map((primaryColumn) => `"${primaryColumn.name}"`)
|
|
940
982
|
.join(", ");
|
|
@@ -1010,12 +1052,12 @@ export class CockroachQueryRunner extends BaseQueryRunner {
|
|
|
1010
1052
|
/**
|
|
1011
1053
|
* Creates a new primary key.
|
|
1012
1054
|
*/
|
|
1013
|
-
async createPrimaryKey(tableOrName, columnNames) {
|
|
1055
|
+
async createPrimaryKey(tableOrName, columnNames, constraintName) {
|
|
1014
1056
|
const table = InstanceChecker.isTable(tableOrName)
|
|
1015
1057
|
? tableOrName
|
|
1016
1058
|
: await this.getCachedTable(tableOrName);
|
|
1017
1059
|
const clonedTable = table.clone();
|
|
1018
|
-
const up = this.createPrimaryKeySql(table, columnNames);
|
|
1060
|
+
const up = this.createPrimaryKeySql(table, columnNames, constraintName);
|
|
1019
1061
|
// mark columns as primary, because dropPrimaryKeySql build constraint name from table primary column names.
|
|
1020
1062
|
clonedTable.columns.forEach((column) => {
|
|
1021
1063
|
if (columnNames.find((columnName) => columnName === column.name))
|
|
@@ -1039,7 +1081,9 @@ export class CockroachQueryRunner extends BaseQueryRunner {
|
|
|
1039
1081
|
// if table already have primary columns, we must drop them.
|
|
1040
1082
|
const primaryColumns = clonedTable.primaryColumns;
|
|
1041
1083
|
if (primaryColumns.length > 0) {
|
|
1042
|
-
const pkName =
|
|
1084
|
+
const pkName = primaryColumns[0].primaryKeyConstraintName
|
|
1085
|
+
? primaryColumns[0].primaryKeyConstraintName
|
|
1086
|
+
: this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
|
|
1043
1087
|
const columnNamesString = primaryColumns
|
|
1044
1088
|
.map((column) => `"${column.name}"`)
|
|
1045
1089
|
.join(", ");
|
|
@@ -1050,7 +1094,9 @@ export class CockroachQueryRunner extends BaseQueryRunner {
|
|
|
1050
1094
|
clonedTable.columns
|
|
1051
1095
|
.filter((column) => columnNames.indexOf(column.name) !== -1)
|
|
1052
1096
|
.forEach((column) => (column.isPrimary = true));
|
|
1053
|
-
const pkName =
|
|
1097
|
+
const pkName = primaryColumns[0].primaryKeyConstraintName
|
|
1098
|
+
? primaryColumns[0].primaryKeyConstraintName
|
|
1099
|
+
: this.connection.namingStrategy.primaryKeyName(clonedTable, columnNames);
|
|
1054
1100
|
const columnNamesString = columnNames
|
|
1055
1101
|
.map((columnName) => `"${columnName}"`)
|
|
1056
1102
|
.join(", ");
|
|
@@ -1062,12 +1108,12 @@ export class CockroachQueryRunner extends BaseQueryRunner {
|
|
|
1062
1108
|
/**
|
|
1063
1109
|
* Drops a primary key.
|
|
1064
1110
|
*/
|
|
1065
|
-
async dropPrimaryKey(tableOrName) {
|
|
1111
|
+
async dropPrimaryKey(tableOrName, constraintName) {
|
|
1066
1112
|
const table = InstanceChecker.isTable(tableOrName)
|
|
1067
1113
|
? tableOrName
|
|
1068
1114
|
: await this.getCachedTable(tableOrName);
|
|
1069
1115
|
const up = this.dropPrimaryKeySql(table);
|
|
1070
|
-
const down = this.createPrimaryKeySql(table, table.primaryColumns.map((column) => column.name));
|
|
1116
|
+
const down = this.createPrimaryKeySql(table, table.primaryColumns.map((column) => column.name), constraintName);
|
|
1071
1117
|
await this.executeQueries(up, down);
|
|
1072
1118
|
table.primaryColumns.forEach((column) => {
|
|
1073
1119
|
column.isPrimary = false;
|
|
@@ -1570,7 +1616,30 @@ export class CockroachQueryRunner extends BaseQueryRunner {
|
|
|
1570
1616
|
}
|
|
1571
1617
|
tableColumn.isNullable =
|
|
1572
1618
|
dbColumn["is_nullable"] === "YES";
|
|
1573
|
-
|
|
1619
|
+
const primaryConstraint = columnConstraints.find((constraint) => constraint["constraint_type"] === "PRIMARY");
|
|
1620
|
+
if (primaryConstraint) {
|
|
1621
|
+
tableColumn.isPrimary = true;
|
|
1622
|
+
// find another columns involved in primary key constraint
|
|
1623
|
+
const anotherPrimaryConstraints = dbConstraints.filter((constraint) => constraint["table_name"] ===
|
|
1624
|
+
dbColumn["table_name"] &&
|
|
1625
|
+
constraint["table_schema"] ===
|
|
1626
|
+
dbColumn["table_schema"] &&
|
|
1627
|
+
constraint["column_name"] !==
|
|
1628
|
+
dbColumn["column_name"] &&
|
|
1629
|
+
constraint["constraint_type"] ===
|
|
1630
|
+
"PRIMARY");
|
|
1631
|
+
// collect all column names
|
|
1632
|
+
const columnNames = anotherPrimaryConstraints.map((constraint) => constraint["column_name"]);
|
|
1633
|
+
columnNames.push(dbColumn["column_name"]);
|
|
1634
|
+
// build default primary key constraint name
|
|
1635
|
+
const pkName = this.connection.namingStrategy.primaryKeyName(table, columnNames);
|
|
1636
|
+
// if primary key has user-defined constraint name, write it in table column
|
|
1637
|
+
if (primaryConstraint["constraint_name"] !==
|
|
1638
|
+
pkName) {
|
|
1639
|
+
tableColumn.primaryKeyConstraintName =
|
|
1640
|
+
primaryConstraint["constraint_name"];
|
|
1641
|
+
}
|
|
1642
|
+
}
|
|
1574
1643
|
const uniqueConstraints = columnConstraints.filter((constraint) => constraint["constraint_type"] === "UNIQUE");
|
|
1575
1644
|
const isConstraintComposite = uniqueConstraints.every((uniqueConstraint) => {
|
|
1576
1645
|
return dbConstraints.some((dbConstraint) => dbConstraint["constraint_type"] ===
|
|
@@ -1801,7 +1870,9 @@ export class CockroachQueryRunner extends BaseQueryRunner {
|
|
|
1801
1870
|
}
|
|
1802
1871
|
const primaryColumns = table.columns.filter((column) => column.isPrimary);
|
|
1803
1872
|
if (primaryColumns.length > 0) {
|
|
1804
|
-
const primaryKeyName =
|
|
1873
|
+
const primaryKeyName = primaryColumns[0].primaryKeyConstraintName
|
|
1874
|
+
? primaryColumns[0].primaryKeyConstraintName
|
|
1875
|
+
: this.connection.namingStrategy.primaryKeyName(table, primaryColumns.map((column) => column.name));
|
|
1805
1876
|
const columnNames = primaryColumns
|
|
1806
1877
|
.map((column) => `"${column.name}"`)
|
|
1807
1878
|
.join(", ");
|
|
@@ -1889,8 +1960,10 @@ export class CockroachQueryRunner extends BaseQueryRunner {
|
|
|
1889
1960
|
/**
|
|
1890
1961
|
* Builds create primary key sql.
|
|
1891
1962
|
*/
|
|
1892
|
-
createPrimaryKeySql(table, columnNames) {
|
|
1893
|
-
const primaryKeyName =
|
|
1963
|
+
createPrimaryKeySql(table, columnNames, constraintName) {
|
|
1964
|
+
const primaryKeyName = constraintName
|
|
1965
|
+
? constraintName
|
|
1966
|
+
: this.connection.namingStrategy.primaryKeyName(table, columnNames);
|
|
1894
1967
|
const columnNamesString = columnNames
|
|
1895
1968
|
.map((columnName) => `"${columnName}"`)
|
|
1896
1969
|
.join(", ");
|
|
@@ -1900,8 +1973,13 @@ export class CockroachQueryRunner extends BaseQueryRunner {
|
|
|
1900
1973
|
* Builds drop primary key sql.
|
|
1901
1974
|
*/
|
|
1902
1975
|
dropPrimaryKeySql(table) {
|
|
1976
|
+
if (!table.primaryColumns.length)
|
|
1977
|
+
throw new TypeORMError(`Table ${table} has no primary keys.`);
|
|
1903
1978
|
const columnNames = table.primaryColumns.map((column) => column.name);
|
|
1904
|
-
const
|
|
1979
|
+
const constraintName = table.primaryColumns[0].primaryKeyConstraintName;
|
|
1980
|
+
const primaryKeyName = constraintName
|
|
1981
|
+
? constraintName
|
|
1982
|
+
: this.connection.namingStrategy.primaryKeyName(table, columnNames);
|
|
1905
1983
|
return new Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT "${primaryKeyName}"`);
|
|
1906
1984
|
}
|
|
1907
1985
|
/**
|