typeorm 0.3.5 → 0.3.6-dev.0418ebc

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