typeorm 0.3.6-dev.0418ebc → 0.3.6-dev.22570f5

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.
Files changed (120) hide show
  1. package/README.md +1 -1
  2. package/browser/cache/RedisQueryResultCache.js +3 -0
  3. package/browser/cache/RedisQueryResultCache.js.map +1 -1
  4. package/browser/decorator/options/ColumnOptions.d.ts +8 -0
  5. package/browser/decorator/options/ColumnOptions.js.map +1 -1
  6. package/browser/decorator/options/JoinColumnOptions.d.ts +4 -0
  7. package/browser/decorator/options/JoinColumnOptions.js.map +1 -1
  8. package/browser/decorator/options/PrimaryGeneratedColumnIdentityOptions.d.ts +4 -0
  9. package/browser/decorator/options/PrimaryGeneratedColumnIdentityOptions.js.map +1 -1
  10. package/browser/decorator/options/PrimaryGeneratedColumnNumericOptions.d.ts +4 -0
  11. package/browser/decorator/options/PrimaryGeneratedColumnNumericOptions.js.map +1 -1
  12. package/browser/decorator/options/PrimaryGeneratedColumnUUIDOptions.d.ts +4 -0
  13. package/browser/decorator/options/PrimaryGeneratedColumnUUIDOptions.js.map +1 -1
  14. package/browser/decorator/relations/JoinColumn.js +1 -0
  15. package/browser/decorator/relations/JoinColumn.js.map +1 -1
  16. package/browser/driver/cockroachdb/CockroachQueryRunner.d.ts +3 -3
  17. package/browser/driver/cockroachdb/CockroachQueryRunner.js +100 -22
  18. package/browser/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  19. package/browser/driver/mysql/MysqlQueryRunner.js +16 -0
  20. package/browser/driver/mysql/MysqlQueryRunner.js.map +1 -1
  21. package/browser/driver/oracle/OracleQueryRunner.d.ts +3 -3
  22. package/browser/driver/oracle/OracleQueryRunner.js +98 -21
  23. package/browser/driver/oracle/OracleQueryRunner.js.map +1 -1
  24. package/browser/driver/postgres/PostgresQueryRunner.d.ts +3 -3
  25. package/browser/driver/postgres/PostgresQueryRunner.js +99 -21
  26. package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
  27. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js +59 -15
  28. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
  29. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +53 -12
  30. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  31. package/browser/driver/sqlserver/SqlServerQueryRunner.d.ts +3 -3
  32. package/browser/driver/sqlserver/SqlServerQueryRunner.js +100 -22
  33. package/browser/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  34. package/browser/entity-schema/EntitySchemaTransformer.js +1 -0
  35. package/browser/entity-schema/EntitySchemaTransformer.js.map +1 -1
  36. package/browser/metadata/ColumnMetadata.d.ts +8 -0
  37. package/browser/metadata/ColumnMetadata.js +8 -0
  38. package/browser/metadata/ColumnMetadata.js.map +1 -1
  39. package/browser/metadata/ForeignKeyMetadata.d.ts +7 -0
  40. package/browser/metadata/ForeignKeyMetadata.js +4 -1
  41. package/browser/metadata/ForeignKeyMetadata.js.map +1 -1
  42. package/browser/metadata-args/JoinColumnMetadataArgs.d.ts +4 -0
  43. package/browser/metadata-args/JoinColumnMetadataArgs.js.map +1 -1
  44. package/browser/metadata-builder/EntityMetadataValidator.js +9 -0
  45. package/browser/metadata-builder/EntityMetadataValidator.js.map +1 -1
  46. package/browser/metadata-builder/JunctionEntityMetadataBuilder.js +5 -0
  47. package/browser/metadata-builder/JunctionEntityMetadataBuilder.js.map +1 -1
  48. package/browser/metadata-builder/RelationJoinColumnBuilder.js +2 -0
  49. package/browser/metadata-builder/RelationJoinColumnBuilder.js.map +1 -1
  50. package/browser/query-runner/QueryRunner.d.ts +2 -2
  51. package/browser/query-runner/QueryRunner.js.map +1 -1
  52. package/browser/schema-builder/options/TableColumnOptions.d.ts +8 -0
  53. package/browser/schema-builder/options/TableColumnOptions.js.map +1 -1
  54. package/browser/schema-builder/table/TableColumn.d.ts +4 -0
  55. package/browser/schema-builder/table/TableColumn.js +2 -0
  56. package/browser/schema-builder/table/TableColumn.js.map +1 -1
  57. package/browser/schema-builder/util/TableUtils.js +1 -0
  58. package/browser/schema-builder/util/TableUtils.js.map +1 -1
  59. package/cache/RedisQueryResultCache.js +3 -0
  60. package/cache/RedisQueryResultCache.js.map +1 -1
  61. package/commands/InitCommand.js +1 -1
  62. package/commands/InitCommand.js.map +1 -1
  63. package/commands/MigrationGenerateCommand.js +3 -2
  64. package/commands/MigrationGenerateCommand.js.map +1 -1
  65. package/decorator/options/ColumnOptions.d.ts +8 -0
  66. package/decorator/options/ColumnOptions.js.map +1 -1
  67. package/decorator/options/JoinColumnOptions.d.ts +4 -0
  68. package/decorator/options/JoinColumnOptions.js.map +1 -1
  69. package/decorator/options/PrimaryGeneratedColumnIdentityOptions.d.ts +4 -0
  70. package/decorator/options/PrimaryGeneratedColumnIdentityOptions.js.map +1 -1
  71. package/decorator/options/PrimaryGeneratedColumnNumericOptions.d.ts +4 -0
  72. package/decorator/options/PrimaryGeneratedColumnNumericOptions.js.map +1 -1
  73. package/decorator/options/PrimaryGeneratedColumnUUIDOptions.d.ts +4 -0
  74. package/decorator/options/PrimaryGeneratedColumnUUIDOptions.js.map +1 -1
  75. package/decorator/relations/JoinColumn.js +1 -0
  76. package/decorator/relations/JoinColumn.js.map +1 -1
  77. package/driver/cockroachdb/CockroachQueryRunner.d.ts +3 -3
  78. package/driver/cockroachdb/CockroachQueryRunner.js +100 -22
  79. package/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  80. package/driver/mysql/MysqlQueryRunner.js +16 -0
  81. package/driver/mysql/MysqlQueryRunner.js.map +1 -1
  82. package/driver/oracle/OracleQueryRunner.d.ts +3 -3
  83. package/driver/oracle/OracleQueryRunner.js +98 -21
  84. package/driver/oracle/OracleQueryRunner.js.map +1 -1
  85. package/driver/postgres/PostgresQueryRunner.d.ts +3 -3
  86. package/driver/postgres/PostgresQueryRunner.js +99 -21
  87. package/driver/postgres/PostgresQueryRunner.js.map +1 -1
  88. package/driver/sqlite-abstract/AbstractSqliteDriver.js +59 -15
  89. package/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
  90. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +53 -12
  91. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  92. package/driver/sqlserver/SqlServerQueryRunner.d.ts +3 -3
  93. package/driver/sqlserver/SqlServerQueryRunner.js +100 -22
  94. package/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  95. package/entity-schema/EntitySchemaTransformer.js +1 -0
  96. package/entity-schema/EntitySchemaTransformer.js.map +1 -1
  97. package/metadata/ColumnMetadata.d.ts +8 -0
  98. package/metadata/ColumnMetadata.js +8 -0
  99. package/metadata/ColumnMetadata.js.map +1 -1
  100. package/metadata/ForeignKeyMetadata.d.ts +7 -0
  101. package/metadata/ForeignKeyMetadata.js +4 -1
  102. package/metadata/ForeignKeyMetadata.js.map +1 -1
  103. package/metadata-args/JoinColumnMetadataArgs.d.ts +4 -0
  104. package/metadata-args/JoinColumnMetadataArgs.js.map +1 -1
  105. package/metadata-builder/EntityMetadataValidator.js +9 -0
  106. package/metadata-builder/EntityMetadataValidator.js.map +1 -1
  107. package/metadata-builder/JunctionEntityMetadataBuilder.js +5 -0
  108. package/metadata-builder/JunctionEntityMetadataBuilder.js.map +1 -1
  109. package/metadata-builder/RelationJoinColumnBuilder.js +2 -0
  110. package/metadata-builder/RelationJoinColumnBuilder.js.map +1 -1
  111. package/package.json +1 -1
  112. package/query-runner/QueryRunner.d.ts +2 -2
  113. package/query-runner/QueryRunner.js.map +1 -1
  114. package/schema-builder/options/TableColumnOptions.d.ts +8 -0
  115. package/schema-builder/options/TableColumnOptions.js.map +1 -1
  116. package/schema-builder/table/TableColumn.d.ts +4 -0
  117. package/schema-builder/table/TableColumn.js +2 -0
  118. package/schema-builder/table/TableColumn.js.map +1 -1
  119. package/schema-builder/util/TableUtils.js +1 -0
  120. package/schema-builder/util/TableUtils.js.map +1 -1
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/Drop database - [typeorm-extension](https://github.com/Tada5hi/typeorm-extension)
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":"../.."}
@@ -10,4 +10,8 @@ export interface JoinColumnOptions {
10
10
  * Name of the column in the entity to which this column is referenced.
11
11
  */
12
12
  referencedColumnName?: string;
13
+ /**
14
+ * Name of the foreign key constraint.
15
+ */
16
+ foreignKeyConstraintName?: string;
13
17
  }
@@ -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":"../.."}
@@ -24,4 +24,8 @@ export interface PrimaryGeneratedColumnNumericOptions {
24
24
  * Puts UNSIGNED attribute on to numeric column. Works only for MySQL.
25
25
  */
26
26
  unsigned?: boolean;
27
+ /**
28
+ * Name of the primary key constraint.
29
+ */
30
+ primaryKeyConstraintName?: string;
27
31
  }
@@ -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":"../.."}
@@ -10,4 +10,8 @@ export interface PrimaryGeneratedColumnUUIDOptions {
10
10
  * Column comment. Not supported by all database types.
11
11
  */
12
12
  comment?: string;
13
+ /**
14
+ * Name of the primary key constraint.
15
+ */
16
+ primaryKeyConstraintName?: string;
13
17
  }
@@ -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":"../.."}
@@ -15,6 +15,7 @@ export function JoinColumn(optionsOrOptionsArray) {
15
15
  propertyName: propertyName,
16
16
  name: options.name,
17
17
  referencedColumnName: options.referencedColumnName,
18
+ foreignKeyConstraintName: options.foreignKeyConstraintName,
18
19
  });
19
20
  });
20
21
  };
@@ -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;aAC3B,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 } as JoinColumnMetadataArgs)\n })\n }\n}\n"],"sourceRoot":"../.."}
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: altering pk is not supported yet https://github.com/cockroachdb/cockroach/issues/19141
591
+ // todo: https://go.crdb.dev/issue-v/48026/v21.1
579
592
  if (primaryColumns.length > 0) {
580
- const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
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 = this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
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 = this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
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 = this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
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 = this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
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: altering pk is not supported yet https://github.com/cockroachdb/cockroach/issues/19141
961
+ // todo: https://go.crdb.dev/issue-v/48026/v21.1
925
962
  if (column.isPrimary) {
926
- const pkName = this.connection.namingStrategy.primaryKeyName(clonedTable, clonedTable.primaryColumns.map((column) => column.name));
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 = this.connection.namingStrategy.primaryKeyName(clonedTable, clonedTable.primaryColumns.map((column) => column.name));
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 = this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
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 = this.connection.namingStrategy.primaryKeyName(clonedTable, columnNames);
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
- tableColumn.isPrimary = !!columnConstraints.find((constraint) => constraint["constraint_type"] === "PRIMARY");
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 = this.connection.namingStrategy.primaryKeyName(table, primaryColumns.map((column) => column.name));
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 = this.connection.namingStrategy.primaryKeyName(table, columnNames);
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 primaryKeyName = this.connection.namingStrategy.primaryKeyName(table, columnNames);
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
  /**