typeorm 0.3.5 → 0.3.6-dev.2d8afbe

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 (235) hide show
  1. package/README.md +33 -13
  2. package/browser/cache/DbQueryResultCache.js +9 -1
  3. package/browser/cache/DbQueryResultCache.js.map +1 -1
  4. package/browser/cache/RedisQueryResultCache.js +3 -0
  5. package/browser/cache/RedisQueryResultCache.js.map +1 -1
  6. package/browser/cli-ts-node-commonjs.js +0 -0
  7. package/browser/cli-ts-node-esm.js +0 -0
  8. package/browser/data-source/BaseDataSourceOptions.d.ts +1 -2
  9. package/browser/data-source/BaseDataSourceOptions.js.map +1 -1
  10. package/browser/data-source/DataSourceOptions.d.ts +2 -1
  11. package/browser/data-source/DataSourceOptions.js.map +1 -1
  12. package/browser/decorator/Index.js +1 -0
  13. package/browser/decorator/Index.js.map +1 -1
  14. package/browser/decorator/columns/PrimaryColumn.js +4 -1
  15. package/browser/decorator/columns/PrimaryColumn.js.map +1 -1
  16. package/browser/decorator/options/ColumnOptions.d.ts +3 -2
  17. package/browser/decorator/options/ColumnOptions.js.map +1 -1
  18. package/browser/decorator/options/IndexOptions.d.ts +8 -0
  19. package/browser/decorator/options/IndexOptions.js.map +1 -1
  20. package/browser/driver/DriverFactory.js +4 -0
  21. package/browser/driver/DriverFactory.js.map +1 -1
  22. package/browser/driver/cockroachdb/CockroachDriver.js +4 -1
  23. package/browser/driver/cockroachdb/CockroachDriver.js.map +1 -1
  24. package/browser/driver/cockroachdb/CockroachQueryRunner.js +133 -11
  25. package/browser/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  26. package/browser/driver/mysql/MysqlDriver.d.ts +1 -0
  27. package/browser/driver/mysql/MysqlDriver.js +94 -23
  28. package/browser/driver/mysql/MysqlDriver.js.map +1 -1
  29. package/browser/driver/mysql/MysqlQueryRunner.js +203 -24
  30. package/browser/driver/mysql/MysqlQueryRunner.js.map +1 -1
  31. package/browser/driver/oracle/OracleDriver.js +79 -15
  32. package/browser/driver/oracle/OracleDriver.js.map +1 -1
  33. package/browser/driver/oracle/OracleQueryRunner.js +118 -21
  34. package/browser/driver/oracle/OracleQueryRunner.js.map +1 -1
  35. package/browser/driver/postgres/PostgresDriver.js +95 -18
  36. package/browser/driver/postgres/PostgresDriver.js.map +1 -1
  37. package/browser/driver/postgres/PostgresQueryRunner.js +60 -38
  38. package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
  39. package/browser/driver/spanner/SpannerConnectionCredentialsOptions.d.ts +17 -0
  40. package/browser/driver/spanner/SpannerConnectionCredentialsOptions.js +3 -0
  41. package/browser/driver/spanner/SpannerConnectionCredentialsOptions.js.map +1 -0
  42. package/browser/driver/spanner/SpannerConnectionOptions.d.ts +120 -0
  43. package/browser/driver/spanner/SpannerConnectionOptions.js +3 -0
  44. package/browser/driver/spanner/SpannerConnectionOptions.js.map +1 -0
  45. package/browser/driver/spanner/SpannerDriver.d.ts +241 -0
  46. package/browser/driver/spanner/SpannerDriver.js +604 -0
  47. package/browser/driver/spanner/SpannerDriver.js.map +1 -0
  48. package/browser/driver/spanner/SpannerQueryRunner.d.ts +350 -0
  49. package/browser/driver/spanner/SpannerQueryRunner.js +1445 -0
  50. package/browser/driver/spanner/SpannerQueryRunner.js.map +1 -0
  51. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js +21 -16
  52. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
  53. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +165 -20
  54. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  55. package/browser/driver/sqlserver/SqlServerDriver.d.ts +3 -1
  56. package/browser/driver/sqlserver/SqlServerDriver.js +99 -26
  57. package/browser/driver/sqlserver/SqlServerDriver.js.map +1 -1
  58. package/browser/driver/sqlserver/SqlServerQueryRunner.js +153 -17
  59. package/browser/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  60. package/browser/driver/types/ColumnTypes.d.ts +1 -1
  61. package/browser/driver/types/ColumnTypes.js.map +1 -1
  62. package/browser/driver/types/DatabaseType.d.ts +1 -1
  63. package/browser/driver/types/DatabaseType.js.map +1 -1
  64. package/browser/entity-schema/EntitySchemaColumnOptions.d.ts +2 -2
  65. package/browser/entity-schema/EntitySchemaColumnOptions.js.map +1 -1
  66. package/browser/entity-schema/EntitySchemaIndexOptions.d.ts +8 -0
  67. package/browser/entity-schema/EntitySchemaIndexOptions.js.map +1 -1
  68. package/browser/entity-schema/EntitySchemaTransformer.js +1 -0
  69. package/browser/entity-schema/EntitySchemaTransformer.js.map +1 -1
  70. package/browser/find-options/FindOneOptions.d.ts +1 -1
  71. package/browser/find-options/FindOneOptions.js.map +1 -1
  72. package/browser/find-options/FindOptionsUtils.d.ts +2 -1
  73. package/browser/find-options/FindOptionsUtils.js +2 -1
  74. package/browser/find-options/FindOptionsUtils.js.map +1 -1
  75. package/browser/logger/AdvancedConsoleLogger.d.ts +1 -1
  76. package/browser/logger/AdvancedConsoleLogger.js +1 -1
  77. package/browser/logger/AdvancedConsoleLogger.js.map +1 -1
  78. package/browser/metadata/ColumnMetadata.d.ts +2 -2
  79. package/browser/metadata/ColumnMetadata.js.map +1 -1
  80. package/browser/metadata/IndexMetadata.d.ts +8 -0
  81. package/browser/metadata/IndexMetadata.js +9 -0
  82. package/browser/metadata/IndexMetadata.js.map +1 -1
  83. package/browser/metadata-args/IndexMetadataArgs.d.ts +8 -0
  84. package/browser/metadata-args/IndexMetadataArgs.js.map +1 -1
  85. package/browser/metadata-builder/EntityMetadataBuilder.js +13 -6
  86. package/browser/metadata-builder/EntityMetadataBuilder.js.map +1 -1
  87. package/browser/metadata-builder/EntityMetadataValidator.js +8 -0
  88. package/browser/metadata-builder/EntityMetadataValidator.js.map +1 -1
  89. package/browser/metadata-builder/JunctionEntityMetadataBuilder.js +13 -6
  90. package/browser/metadata-builder/JunctionEntityMetadataBuilder.js.map +1 -1
  91. package/browser/platform/PlatformTools.js +5 -0
  92. package/browser/platform/PlatformTools.js.map +1 -1
  93. package/browser/query-builder/InsertQueryBuilder.js +15 -3
  94. package/browser/query-builder/InsertQueryBuilder.js.map +1 -1
  95. package/browser/query-builder/QueryExpressionMap.d.ts +1 -1
  96. package/browser/query-builder/QueryExpressionMap.js.map +1 -1
  97. package/browser/query-builder/SelectQueryBuilder.d.ts +1 -1
  98. package/browser/query-builder/SelectQueryBuilder.js +25 -4
  99. package/browser/query-builder/SelectQueryBuilder.js.map +1 -1
  100. package/browser/query-builder/UpdateQueryBuilder.js +18 -7
  101. package/browser/query-builder/UpdateQueryBuilder.js.map +1 -1
  102. package/browser/query-runner/BaseQueryRunner.d.ts +10 -0
  103. package/browser/query-runner/BaseQueryRunner.js +25 -1
  104. package/browser/query-runner/BaseQueryRunner.js.map +1 -1
  105. package/browser/schema-builder/RdbmsSchemaBuilder.d.ts +6 -2
  106. package/browser/schema-builder/RdbmsSchemaBuilder.js +26 -6
  107. package/browser/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
  108. package/browser/schema-builder/options/TableColumnOptions.d.ts +2 -2
  109. package/browser/schema-builder/options/TableColumnOptions.js.map +1 -1
  110. package/browser/schema-builder/options/TableIndexOptions.d.ts +8 -0
  111. package/browser/schema-builder/options/TableIndexOptions.js.map +1 -1
  112. package/browser/schema-builder/table/TableColumn.d.ts +2 -2
  113. package/browser/schema-builder/table/TableColumn.js.map +1 -1
  114. package/browser/schema-builder/table/TableIndex.d.ts +8 -0
  115. package/browser/schema-builder/table/TableIndex.js +3 -0
  116. package/browser/schema-builder/table/TableIndex.js.map +1 -1
  117. package/cache/DbQueryResultCache.js +9 -1
  118. package/cache/DbQueryResultCache.js.map +1 -1
  119. package/cache/RedisQueryResultCache.js +3 -0
  120. package/cache/RedisQueryResultCache.js.map +1 -1
  121. package/cli-ts-node-commonjs.js +0 -0
  122. package/cli-ts-node-esm.js +0 -0
  123. package/cli.js +0 -0
  124. package/commands/InitCommand.js +1 -1
  125. package/commands/InitCommand.js.map +1 -1
  126. package/data-source/BaseDataSourceOptions.d.ts +1 -2
  127. package/data-source/BaseDataSourceOptions.js.map +1 -1
  128. package/data-source/DataSourceOptions.d.ts +2 -1
  129. package/data-source/DataSourceOptions.js.map +1 -1
  130. package/decorator/Index.js +1 -0
  131. package/decorator/Index.js.map +1 -1
  132. package/decorator/columns/PrimaryColumn.js +4 -1
  133. package/decorator/columns/PrimaryColumn.js.map +1 -1
  134. package/decorator/options/ColumnOptions.d.ts +3 -2
  135. package/decorator/options/ColumnOptions.js.map +1 -1
  136. package/decorator/options/IndexOptions.d.ts +8 -0
  137. package/decorator/options/IndexOptions.js.map +1 -1
  138. package/driver/DriverFactory.js +4 -0
  139. package/driver/DriverFactory.js.map +1 -1
  140. package/driver/cockroachdb/CockroachDriver.js +4 -1
  141. package/driver/cockroachdb/CockroachDriver.js.map +1 -1
  142. package/driver/cockroachdb/CockroachQueryRunner.js +133 -11
  143. package/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  144. package/driver/mysql/MysqlDriver.d.ts +1 -0
  145. package/driver/mysql/MysqlDriver.js +94 -23
  146. package/driver/mysql/MysqlDriver.js.map +1 -1
  147. package/driver/mysql/MysqlQueryRunner.js +203 -24
  148. package/driver/mysql/MysqlQueryRunner.js.map +1 -1
  149. package/driver/oracle/OracleDriver.js +79 -15
  150. package/driver/oracle/OracleDriver.js.map +1 -1
  151. package/driver/oracle/OracleQueryRunner.js +118 -21
  152. package/driver/oracle/OracleQueryRunner.js.map +1 -1
  153. package/driver/postgres/PostgresDriver.js +95 -18
  154. package/driver/postgres/PostgresDriver.js.map +1 -1
  155. package/driver/postgres/PostgresQueryRunner.js +60 -38
  156. package/driver/postgres/PostgresQueryRunner.js.map +1 -1
  157. package/driver/spanner/SpannerConnectionCredentialsOptions.d.ts +17 -0
  158. package/driver/spanner/SpannerConnectionCredentialsOptions.js +4 -0
  159. package/driver/spanner/SpannerConnectionCredentialsOptions.js.map +1 -0
  160. package/driver/spanner/SpannerConnectionOptions.d.ts +120 -0
  161. package/driver/spanner/SpannerConnectionOptions.js +4 -0
  162. package/driver/spanner/SpannerConnectionOptions.js.map +1 -0
  163. package/driver/spanner/SpannerDriver.d.ts +241 -0
  164. package/driver/spanner/SpannerDriver.js +608 -0
  165. package/driver/spanner/SpannerDriver.js.map +1 -0
  166. package/driver/spanner/SpannerQueryRunner.d.ts +350 -0
  167. package/driver/spanner/SpannerQueryRunner.js +1449 -0
  168. package/driver/spanner/SpannerQueryRunner.js.map +1 -0
  169. package/driver/sqlite-abstract/AbstractSqliteDriver.js +21 -16
  170. package/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
  171. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +165 -20
  172. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  173. package/driver/sqlserver/SqlServerDriver.d.ts +3 -1
  174. package/driver/sqlserver/SqlServerDriver.js +99 -26
  175. package/driver/sqlserver/SqlServerDriver.js.map +1 -1
  176. package/driver/sqlserver/SqlServerQueryRunner.js +153 -17
  177. package/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  178. package/driver/types/ColumnTypes.d.ts +1 -1
  179. package/driver/types/ColumnTypes.js.map +1 -1
  180. package/driver/types/DatabaseType.d.ts +1 -1
  181. package/driver/types/DatabaseType.js.map +1 -1
  182. package/entity-schema/EntitySchemaColumnOptions.d.ts +2 -2
  183. package/entity-schema/EntitySchemaColumnOptions.js.map +1 -1
  184. package/entity-schema/EntitySchemaIndexOptions.d.ts +8 -0
  185. package/entity-schema/EntitySchemaIndexOptions.js.map +1 -1
  186. package/entity-schema/EntitySchemaTransformer.js +1 -0
  187. package/entity-schema/EntitySchemaTransformer.js.map +1 -1
  188. package/find-options/FindOneOptions.d.ts +1 -1
  189. package/find-options/FindOneOptions.js.map +1 -1
  190. package/find-options/FindOptionsUtils.d.ts +2 -1
  191. package/find-options/FindOptionsUtils.js +2 -1
  192. package/find-options/FindOptionsUtils.js.map +1 -1
  193. package/logger/AdvancedConsoleLogger.d.ts +1 -1
  194. package/logger/AdvancedConsoleLogger.js +1 -1
  195. package/logger/AdvancedConsoleLogger.js.map +1 -1
  196. package/metadata/ColumnMetadata.d.ts +2 -2
  197. package/metadata/ColumnMetadata.js.map +1 -1
  198. package/metadata/IndexMetadata.d.ts +8 -0
  199. package/metadata/IndexMetadata.js +9 -0
  200. package/metadata/IndexMetadata.js.map +1 -1
  201. package/metadata-args/IndexMetadataArgs.d.ts +8 -0
  202. package/metadata-args/IndexMetadataArgs.js.map +1 -1
  203. package/metadata-builder/EntityMetadataBuilder.js +13 -6
  204. package/metadata-builder/EntityMetadataBuilder.js.map +1 -1
  205. package/metadata-builder/EntityMetadataValidator.js +8 -0
  206. package/metadata-builder/EntityMetadataValidator.js.map +1 -1
  207. package/metadata-builder/JunctionEntityMetadataBuilder.js +13 -6
  208. package/metadata-builder/JunctionEntityMetadataBuilder.js.map +1 -1
  209. package/package.json +1 -261
  210. package/platform/PlatformTools.js +5 -0
  211. package/platform/PlatformTools.js.map +1 -1
  212. package/query-builder/InsertQueryBuilder.js +15 -3
  213. package/query-builder/InsertQueryBuilder.js.map +1 -1
  214. package/query-builder/QueryExpressionMap.d.ts +1 -1
  215. package/query-builder/QueryExpressionMap.js.map +1 -1
  216. package/query-builder/SelectQueryBuilder.d.ts +1 -1
  217. package/query-builder/SelectQueryBuilder.js +25 -4
  218. package/query-builder/SelectQueryBuilder.js.map +1 -1
  219. package/query-builder/UpdateQueryBuilder.js +18 -7
  220. package/query-builder/UpdateQueryBuilder.js.map +1 -1
  221. package/query-runner/BaseQueryRunner.d.ts +10 -0
  222. package/query-runner/BaseQueryRunner.js +25 -1
  223. package/query-runner/BaseQueryRunner.js.map +1 -1
  224. package/schema-builder/RdbmsSchemaBuilder.d.ts +6 -2
  225. package/schema-builder/RdbmsSchemaBuilder.js +26 -6
  226. package/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
  227. package/schema-builder/options/TableColumnOptions.d.ts +2 -2
  228. package/schema-builder/options/TableColumnOptions.js.map +1 -1
  229. package/schema-builder/options/TableIndexOptions.d.ts +8 -0
  230. package/schema-builder/options/TableIndexOptions.js.map +1 -1
  231. package/schema-builder/table/TableColumn.d.ts +2 -2
  232. package/schema-builder/table/TableColumn.js.map +1 -1
  233. package/schema-builder/table/TableIndex.d.ts +8 -0
  234. package/schema-builder/table/TableIndex.js +3 -0
  235. package/schema-builder/table/TableIndex.js.map +1 -1
@@ -180,7 +180,7 @@ class AbstractSqliteQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
180
180
  const tableName = InstanceChecker_1.InstanceChecker.isTable(tableOrName)
181
181
  ? tableOrName.name
182
182
  : tableOrName;
183
- const sql = `PRAGMA table_info(${this.escapePath(tableName)})`;
183
+ const sql = `PRAGMA table_xinfo(${this.escapePath(tableName)})`;
184
184
  const columns = await this.query(sql);
185
185
  return !!columns.find((column) => column["name"] === columnName);
186
186
  }
@@ -230,6 +230,23 @@ class AbstractSqliteQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
230
230
  downQueries.push(this.dropIndexSql(index));
231
231
  });
232
232
  }
233
+ // if table have column with generated type, we must add the expression to the metadata table
234
+ const generatedColumns = table.columns.filter((column) => column.generatedType && column.asExpression);
235
+ for (const column of generatedColumns) {
236
+ const insertQuery = this.insertTypeormMetadataSql({
237
+ table: table.name,
238
+ type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
239
+ name: column.name,
240
+ value: column.asExpression,
241
+ });
242
+ const deleteQuery = this.deleteTypeormMetadataSql({
243
+ table: table.name,
244
+ type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
245
+ name: column.name,
246
+ });
247
+ upQueries.push(insertQuery);
248
+ downQueries.push(deleteQuery);
249
+ }
233
250
  await this.executeQueries(upQueries, downQueries);
234
251
  }
235
252
  /**
@@ -256,6 +273,23 @@ class AbstractSqliteQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
256
273
  }
257
274
  upQueries.push(this.dropTableSql(table, ifExist));
258
275
  downQueries.push(this.createTableSql(table, createForeignKeys));
276
+ // if table had columns with generated type, we must remove the expression from the metadata table
277
+ const generatedColumns = table.columns.filter((column) => column.generatedType && column.asExpression);
278
+ for (const column of generatedColumns) {
279
+ const deleteQuery = this.deleteTypeormMetadataSql({
280
+ table: table.name,
281
+ type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
282
+ name: column.name,
283
+ });
284
+ const insertQuery = this.insertTypeormMetadataSql({
285
+ table: table.name,
286
+ type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
287
+ name: column.name,
288
+ value: column.asExpression,
289
+ });
290
+ upQueries.push(deleteQuery);
291
+ downQueries.push(insertQuery);
292
+ }
259
293
  await this.executeQueries(upQueries, downQueries);
260
294
  }
261
295
  /**
@@ -828,7 +862,7 @@ class AbstractSqliteQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
828
862
  const sql = dbTable["sql"];
829
863
  // load columns and indices
830
864
  const [dbColumns, dbIndices, dbForeignKeys] = await Promise.all([
831
- this.loadPragmaRecords(tablePath, `table_info`),
865
+ this.loadPragmaRecords(tablePath, `table_xinfo`),
832
866
  this.loadPragmaRecords(tablePath, `index_list`),
833
867
  this.loadPragmaRecords(tablePath, `foreign_key_list`),
834
868
  ]);
@@ -860,7 +894,7 @@ class AbstractSqliteQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
860
894
  }
861
895
  }
862
896
  // create columns from the loaded columns
863
- table.columns = dbColumns.map((dbColumn) => {
897
+ table.columns = await Promise.all(dbColumns.map(async (dbColumn) => {
864
898
  const tableColumn = new TableColumn_1.TableColumn();
865
899
  tableColumn.name = dbColumn["name"];
866
900
  tableColumn.type = dbColumn["type"].toLowerCase();
@@ -878,6 +912,23 @@ class AbstractSqliteQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
878
912
  if (tableColumn.isGenerated) {
879
913
  tableColumn.generationStrategy = "increment";
880
914
  }
915
+ if (dbColumn["hidden"] === 2 ||
916
+ dbColumn["hidden"] === 3) {
917
+ tableColumn.generatedType =
918
+ dbColumn["hidden"] === 2 ? "VIRTUAL" : "STORED";
919
+ const asExpressionQuery = await this.selectTypeormMetadataSql({
920
+ table: table.name,
921
+ type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
922
+ name: tableColumn.name,
923
+ });
924
+ const results = await this.query(asExpressionQuery.query, asExpressionQuery.parameters);
925
+ if (results[0] && results[0].value) {
926
+ tableColumn.asExpression = results[0].value;
927
+ }
928
+ else {
929
+ tableColumn.asExpression = "";
930
+ }
931
+ }
881
932
  if (tableColumn.type === "varchar") {
882
933
  // Check if this is an enum
883
934
  const enumMatch = sql.match(new RegExp('"(' +
@@ -917,7 +968,7 @@ class AbstractSqliteQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
917
968
  }
918
969
  }
919
970
  return tableColumn;
920
- });
971
+ }));
921
972
  // build foreign keys
922
973
  const tableForeignKeyConstraints = OrmUtils_1.OrmUtils.uniq(dbForeignKeys, (dbForeignKey) => dbForeignKey["id"]);
923
974
  table.foreignKeys = tableForeignKeyConstraints.map((foreignKey) => {
@@ -1211,8 +1262,13 @@ class AbstractSqliteQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
1211
1262
  c += " COLLATE " + column.collation;
1212
1263
  if (column.isNullable !== true)
1213
1264
  c += " NOT NULL";
1214
- if (column.default !== undefined && column.default !== null)
1215
- c += " DEFAULT (" + column.default + ")";
1265
+ if (column.asExpression) {
1266
+ c += ` AS (${column.asExpression}) ${column.generatedType ? column.generatedType : "VIRTUAL"}`;
1267
+ }
1268
+ else {
1269
+ if (column.default !== undefined && column.default !== null)
1270
+ c += " DEFAULT (" + column.default + ")";
1271
+ }
1216
1272
  return c;
1217
1273
  }
1218
1274
  async recreateTable(newTable, oldTable, migrateData = true) {
@@ -1233,29 +1289,31 @@ class AbstractSqliteQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
1233
1289
  // migrate all data from the old table into new table
1234
1290
  if (migrateData) {
1235
1291
  let newColumnNames = newTable.columns
1236
- .map((column) => `"${column.name}"`)
1237
- .join(", ");
1292
+ .filter((column) => !column.generatedType)
1293
+ .map((column) => `"${column.name}"`);
1238
1294
  let oldColumnNames = oldTable.columns
1239
- .map((column) => `"${column.name}"`)
1240
- .join(", ");
1241
- if (oldTable.columns.length < newTable.columns.length) {
1295
+ .filter((column) => !column.generatedType)
1296
+ .map((column) => `"${column.name}"`);
1297
+ if (oldColumnNames.length < newColumnNames.length) {
1242
1298
  newColumnNames = newTable.columns
1243
1299
  .filter((column) => {
1244
- return oldTable.columns.find((c) => c.name === column.name);
1300
+ const oldColumn = oldTable.columns.find((c) => c.name === column.name);
1301
+ if (oldColumn && oldColumn.generatedType)
1302
+ return false;
1303
+ return !column.generatedType && oldColumn;
1245
1304
  })
1246
- .map((column) => `"${column.name}"`)
1247
- .join(", ");
1305
+ .map((column) => `"${column.name}"`);
1248
1306
  }
1249
- else if (oldTable.columns.length > newTable.columns.length) {
1307
+ else if (oldColumnNames.length > newColumnNames.length) {
1250
1308
  oldColumnNames = oldTable.columns
1251
1309
  .filter((column) => {
1252
- return newTable.columns.find((c) => c.name === column.name);
1310
+ return (!column.generatedType &&
1311
+ newTable.columns.find((c) => c.name === column.name));
1253
1312
  })
1254
- .map((column) => `"${column.name}"`)
1255
- .join(", ");
1313
+ .map((column) => `"${column.name}"`);
1256
1314
  }
1257
- upQueries.push(new Query_1.Query(`INSERT INTO ${this.escapePath(newTable.name)}(${newColumnNames}) SELECT ${oldColumnNames} FROM ${this.escapePath(oldTable.name)}`));
1258
- downQueries.push(new Query_1.Query(`INSERT INTO ${this.escapePath(oldTable.name)}(${oldColumnNames}) SELECT ${newColumnNames} FROM ${this.escapePath(newTable.name)}`));
1315
+ upQueries.push(new Query_1.Query(`INSERT INTO ${this.escapePath(newTable.name)}(${newColumnNames.join(", ")}) SELECT ${oldColumnNames.join(", ")} FROM ${this.escapePath(oldTable.name)}`));
1316
+ downQueries.push(new Query_1.Query(`INSERT INTO ${this.escapePath(oldTable.name)}(${oldColumnNames.join(", ")}) SELECT ${newColumnNames.join(", ")} FROM ${this.escapePath(newTable.name)}`));
1259
1317
  }
1260
1318
  // drop old table
1261
1319
  upQueries.push(this.dropTableSql(oldTable));
@@ -1272,6 +1330,93 @@ class AbstractSqliteQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
1272
1330
  upQueries.push(this.createIndexSql(newTable, index));
1273
1331
  downQueries.push(this.dropIndexSql(index));
1274
1332
  });
1333
+ // update generated columns in "typeorm_metadata" table
1334
+ // Step 1: clear data for removed generated columns
1335
+ oldTable.columns
1336
+ .filter((column) => {
1337
+ const newTableColumn = newTable.columns.find((c) => c.name === column.name);
1338
+ // we should delete record from "typeorm_metadata" if generated column was removed
1339
+ // or it was changed to non-generated
1340
+ return (column.generatedType &&
1341
+ column.asExpression &&
1342
+ (!newTableColumn ||
1343
+ (!newTableColumn.generatedType &&
1344
+ !newTableColumn.asExpression)));
1345
+ })
1346
+ .forEach((column) => {
1347
+ const deleteQuery = this.deleteTypeormMetadataSql({
1348
+ table: oldTable.name,
1349
+ type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
1350
+ name: column.name,
1351
+ });
1352
+ const insertQuery = this.insertTypeormMetadataSql({
1353
+ table: oldTable.name,
1354
+ type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
1355
+ name: column.name,
1356
+ value: column.asExpression,
1357
+ });
1358
+ upQueries.push(deleteQuery);
1359
+ downQueries.push(insertQuery);
1360
+ });
1361
+ // Step 2: add data for new generated columns
1362
+ newTable.columns
1363
+ .filter((column) => column.generatedType &&
1364
+ column.asExpression &&
1365
+ !oldTable.columns.some((c) => c.name === column.name))
1366
+ .forEach((column) => {
1367
+ const insertQuery = this.insertTypeormMetadataSql({
1368
+ table: newTable.name,
1369
+ type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
1370
+ name: column.name,
1371
+ value: column.asExpression,
1372
+ });
1373
+ const deleteQuery = this.deleteTypeormMetadataSql({
1374
+ table: newTable.name,
1375
+ type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
1376
+ name: column.name,
1377
+ });
1378
+ upQueries.push(insertQuery);
1379
+ downQueries.push(deleteQuery);
1380
+ });
1381
+ // Step 3: update changed expressions
1382
+ newTable.columns
1383
+ .filter((column) => column.generatedType && column.asExpression)
1384
+ .forEach((column) => {
1385
+ const oldColumn = oldTable.columns.find((c) => c.name === column.name &&
1386
+ c.generatedType &&
1387
+ column.generatedType &&
1388
+ c.asExpression !== column.asExpression);
1389
+ if (!oldColumn)
1390
+ return;
1391
+ // update expression
1392
+ const deleteQuery = this.deleteTypeormMetadataSql({
1393
+ table: oldTable.name,
1394
+ type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
1395
+ name: oldColumn.name,
1396
+ });
1397
+ const insertQuery = this.insertTypeormMetadataSql({
1398
+ table: newTable.name,
1399
+ type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
1400
+ name: column.name,
1401
+ value: column.asExpression,
1402
+ });
1403
+ upQueries.push(deleteQuery);
1404
+ upQueries.push(insertQuery);
1405
+ // revert update
1406
+ const revertInsertQuery = this.insertTypeormMetadataSql({
1407
+ table: newTable.name,
1408
+ type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
1409
+ name: oldColumn.name,
1410
+ value: oldColumn.asExpression,
1411
+ });
1412
+ const revertDeleteQuery = this.deleteTypeormMetadataSql({
1413
+ table: oldTable.name,
1414
+ type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
1415
+ name: column.name,
1416
+ });
1417
+ downQueries.push(revertInsertQuery);
1418
+ downQueries.push(revertDeleteQuery);
1419
+ });
1275
1420
  await this.executeQueries(upQueries, downQueries);
1276
1421
  this.replaceCachedTable(oldTable, newTable);
1277
1422
  }