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
@@ -346,6 +346,23 @@ export class OracleQueryRunner extends BaseQueryRunner {
346
346
  downQueries.push(this.dropIndexSql(index));
347
347
  });
348
348
  }
349
+ // if table have column with generated type, we must add the expression to the metadata table
350
+ const generatedColumns = table.columns.filter((column) => column.generatedType && column.asExpression);
351
+ for (const column of generatedColumns) {
352
+ const insertQuery = this.insertTypeormMetadataSql({
353
+ table: table.name,
354
+ type: MetadataTableType.GENERATED_COLUMN,
355
+ name: column.name,
356
+ value: column.asExpression,
357
+ });
358
+ const deleteQuery = this.deleteTypeormMetadataSql({
359
+ table: table.name,
360
+ type: MetadataTableType.GENERATED_COLUMN,
361
+ name: column.name,
362
+ });
363
+ upQueries.push(insertQuery);
364
+ downQueries.push(deleteQuery);
365
+ }
349
366
  await this.executeQueries(upQueries, downQueries);
350
367
  }
351
368
  /**
@@ -378,6 +395,23 @@ export class OracleQueryRunner extends BaseQueryRunner {
378
395
  table.foreignKeys.forEach((foreignKey) => upQueries.push(this.dropForeignKeySql(table, foreignKey)));
379
396
  upQueries.push(this.dropTableSql(table));
380
397
  downQueries.push(this.createTableSql(table, createForeignKeys));
398
+ // if table had columns with generated type, we must remove the expression from the metadata table
399
+ const generatedColumns = table.columns.filter((column) => column.generatedType && column.asExpression);
400
+ for (const column of generatedColumns) {
401
+ const deleteQuery = this.deleteTypeormMetadataSql({
402
+ table: table.name,
403
+ type: MetadataTableType.GENERATED_COLUMN,
404
+ name: column.name,
405
+ });
406
+ const insertQuery = this.insertTypeormMetadataSql({
407
+ table: table.name,
408
+ type: MetadataTableType.GENERATED_COLUMN,
409
+ name: column.name,
410
+ value: column.asExpression,
411
+ });
412
+ upQueries.push(deleteQuery);
413
+ downQueries.push(insertQuery);
414
+ }
381
415
  await this.executeQueries(upQueries, downQueries);
382
416
  }
383
417
  /**
@@ -515,6 +549,21 @@ export class OracleQueryRunner extends BaseQueryRunner {
515
549
  upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT "${uniqueConstraint.name}" UNIQUE ("${column.name}")`));
516
550
  downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT "${uniqueConstraint.name}"`));
517
551
  }
552
+ if (column.generatedType && column.asExpression) {
553
+ const insertQuery = this.insertTypeormMetadataSql({
554
+ table: table.name,
555
+ type: MetadataTableType.GENERATED_COLUMN,
556
+ name: column.name,
557
+ value: column.asExpression,
558
+ });
559
+ const deleteQuery = this.deleteTypeormMetadataSql({
560
+ table: table.name,
561
+ type: MetadataTableType.GENERATED_COLUMN,
562
+ name: column.name,
563
+ });
564
+ upQueries.push(insertQuery);
565
+ downQueries.push(deleteQuery);
566
+ }
518
567
  await this.executeQueries(upQueries, downQueries);
519
568
  clonedTable.addColumn(column);
520
569
  this.replaceCachedTable(table, clonedTable);
@@ -567,7 +616,9 @@ export class OracleQueryRunner extends BaseQueryRunner {
567
616
  if ((newColumn.isGenerated !== oldColumn.isGenerated &&
568
617
  newColumn.generationStrategy !== "uuid") ||
569
618
  oldColumn.type !== newColumn.type ||
570
- oldColumn.length !== newColumn.length) {
619
+ oldColumn.length !== newColumn.length ||
620
+ oldColumn.generatedType !== newColumn.generatedType ||
621
+ oldColumn.asExpression !== newColumn.asExpression) {
571
622
  // Oracle does not support changing of IDENTITY column, so we must drop column and recreate it again.
572
623
  // Also, we recreate column if column type changed
573
624
  await this.dropColumn(table, oldColumn);
@@ -807,6 +858,21 @@ export class OracleQueryRunner extends BaseQueryRunner {
807
858
  }
808
859
  upQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} DROP COLUMN "${column.name}"`));
809
860
  downQueries.push(new Query(`ALTER TABLE ${this.escapePath(table)} ADD ${this.buildCreateColumnSql(column)}`));
861
+ if (column.generatedType && column.asExpression) {
862
+ const deleteQuery = this.deleteTypeormMetadataSql({
863
+ table: table.name,
864
+ type: MetadataTableType.GENERATED_COLUMN,
865
+ name: column.name,
866
+ });
867
+ const insertQuery = this.insertTypeormMetadataSql({
868
+ table: table.name,
869
+ type: MetadataTableType.GENERATED_COLUMN,
870
+ name: column.name,
871
+ value: column.asExpression,
872
+ });
873
+ upQueries.push(deleteQuery);
874
+ downQueries.push(insertQuery);
875
+ }
810
876
  await this.executeQueries(upQueries, downQueries);
811
877
  clonedTable.removeColumn(column);
812
878
  this.replaceCachedTable(table, clonedTable);
@@ -1243,7 +1309,7 @@ export class OracleQueryRunner extends BaseQueryRunner {
1243
1309
  this.query(constraintsSql),
1244
1310
  ]);
1245
1311
  // create tables for loaded tables
1246
- return dbTables.map((dbTable) => {
1312
+ return await Promise.all(dbTables.map(async (dbTable) => {
1247
1313
  const table = new Table();
1248
1314
  const owner = dbTable["OWNER"] === currentSchema &&
1249
1315
  (!this.driver.options.schema ||
@@ -1254,11 +1320,13 @@ export class OracleQueryRunner extends BaseQueryRunner {
1254
1320
  table.schema = dbTable["OWNER"];
1255
1321
  table.name = this.driver.buildTableName(dbTable["TABLE_NAME"], owner);
1256
1322
  // create columns from the loaded columns
1257
- table.columns = dbColumns
1323
+ table.columns = await Promise.all(dbColumns
1258
1324
  .filter((dbColumn) => dbColumn["OWNER"] === dbTable["OWNER"] &&
1259
- dbColumn["TABLE_NAME"] === dbTable["TABLE_NAME"])
1260
- .map((dbColumn) => {
1261
- const columnConstraints = dbConstraints.filter((dbConstraint) => dbConstraint["OWNER"] === dbColumn["OWNER"] &&
1325
+ dbColumn["TABLE_NAME"] ===
1326
+ dbTable["TABLE_NAME"])
1327
+ .map(async (dbColumn) => {
1328
+ const columnConstraints = dbConstraints.filter((dbConstraint) => dbConstraint["OWNER"] ===
1329
+ dbColumn["OWNER"] &&
1262
1330
  dbConstraint["TABLE_NAME"] ===
1263
1331
  dbColumn["TABLE_NAME"] &&
1264
1332
  dbConstraint["COLUMN_NAME"] ===
@@ -1273,12 +1341,14 @@ export class OracleQueryRunner extends BaseQueryRunner {
1273
1341
  dbColumn["COLUMN_NAME"] &&
1274
1342
  dbConstraint["CONSTRAINT_NAME"] ===
1275
1343
  uniqueConstraint["CONSTRAINT_NAME"] &&
1276
- dbConstraint["CONSTRAINT_TYPE"] === "U");
1344
+ dbConstraint["CONSTRAINT_TYPE"] ===
1345
+ "U");
1277
1346
  });
1278
1347
  const isPrimary = !!columnConstraints.find((constraint) => constraint["CONSTRAINT_TYPE"] === "P");
1279
1348
  const tableColumn = new TableColumn();
1280
1349
  tableColumn.name = dbColumn["COLUMN_NAME"];
1281
- tableColumn.type = dbColumn["DATA_TYPE"].toLowerCase();
1350
+ tableColumn.type =
1351
+ dbColumn["DATA_TYPE"].toLowerCase();
1282
1352
  if (tableColumn.type.indexOf("(") !== -1)
1283
1353
  tableColumn.type = tableColumn.type.replace(/\([0-9]*\)/, "");
1284
1354
  // check only columns that have length property
@@ -1296,30 +1366,36 @@ export class OracleQueryRunner extends BaseQueryRunner {
1296
1366
  tableColumn.type === "float") {
1297
1367
  if (dbColumn["DATA_PRECISION"] !== null &&
1298
1368
  !this.isDefaultColumnPrecision(table, tableColumn, dbColumn["DATA_PRECISION"]))
1299
- tableColumn.precision = dbColumn["DATA_PRECISION"];
1369
+ tableColumn.precision =
1370
+ dbColumn["DATA_PRECISION"];
1300
1371
  if (dbColumn["DATA_SCALE"] !== null &&
1301
1372
  !this.isDefaultColumnScale(table, tableColumn, dbColumn["DATA_SCALE"]))
1302
1373
  tableColumn.scale = dbColumn["DATA_SCALE"];
1303
1374
  }
1304
1375
  else if ((tableColumn.type === "timestamp" ||
1305
- tableColumn.type === "timestamp with time zone" ||
1376
+ tableColumn.type ===
1377
+ "timestamp with time zone" ||
1306
1378
  tableColumn.type ===
1307
1379
  "timestamp with local time zone") &&
1308
1380
  dbColumn["DATA_SCALE"] !== null) {
1309
- tableColumn.precision = !this.isDefaultColumnPrecision(table, tableColumn, dbColumn["DATA_SCALE"])
1310
- ? dbColumn["DATA_SCALE"]
1311
- : undefined;
1381
+ tableColumn.precision =
1382
+ !this.isDefaultColumnPrecision(table, tableColumn, dbColumn["DATA_SCALE"])
1383
+ ? dbColumn["DATA_SCALE"]
1384
+ : undefined;
1312
1385
  }
1313
1386
  tableColumn.default =
1314
1387
  dbColumn["DATA_DEFAULT"] !== null &&
1315
1388
  dbColumn["DATA_DEFAULT"] !== undefined &&
1389
+ dbColumn["VIRTUAL_COLUMN"] === "NO" &&
1316
1390
  dbColumn["DATA_DEFAULT"].trim() !== "NULL"
1317
1391
  ? (tableColumn.default =
1318
1392
  dbColumn["DATA_DEFAULT"].trim())
1319
1393
  : undefined;
1320
- tableColumn.isNullable = dbColumn["NULLABLE"] === "Y";
1394
+ tableColumn.isNullable =
1395
+ dbColumn["NULLABLE"] === "Y";
1321
1396
  tableColumn.isUnique =
1322
- uniqueConstraints.length > 0 && !isConstraintComposite;
1397
+ uniqueConstraints.length > 0 &&
1398
+ !isConstraintComposite;
1323
1399
  tableColumn.isPrimary = isPrimary;
1324
1400
  tableColumn.isGenerated =
1325
1401
  dbColumn["IDENTITY_COLUMN"] === "YES";
@@ -1328,11 +1404,27 @@ export class OracleQueryRunner extends BaseQueryRunner {
1328
1404
  tableColumn.default = undefined;
1329
1405
  }
1330
1406
  tableColumn.comment = ""; // todo
1407
+ if (dbColumn["VIRTUAL_COLUMN"] === "YES") {
1408
+ tableColumn.generatedType = "VIRTUAL";
1409
+ const asExpressionQuery = await this.selectTypeormMetadataSql({
1410
+ table: dbTable["TABLE_NAME"],
1411
+ type: MetadataTableType.GENERATED_COLUMN,
1412
+ name: tableColumn.name,
1413
+ });
1414
+ const results = await this.query(asExpressionQuery.query, asExpressionQuery.parameters);
1415
+ if (results[0] && results[0].value) {
1416
+ tableColumn.asExpression = results[0].value;
1417
+ }
1418
+ else {
1419
+ tableColumn.asExpression = "";
1420
+ }
1421
+ }
1331
1422
  return tableColumn;
1332
- });
1423
+ }));
1333
1424
  // find unique constraints of table, group them by constraint name and build TableUnique.
1334
1425
  const tableUniqueConstraints = OrmUtils.uniq(dbConstraints.filter((dbConstraint) => {
1335
- return (dbConstraint["TABLE_NAME"] === dbTable["TABLE_NAME"] &&
1426
+ return (dbConstraint["TABLE_NAME"] ===
1427
+ dbTable["TABLE_NAME"] &&
1336
1428
  dbConstraint["OWNER"] === dbTable["OWNER"] &&
1337
1429
  dbConstraint["CONSTRAINT_TYPE"] === "U");
1338
1430
  }), (dbConstraint) => dbConstraint["CONSTRAINT_NAME"]);
@@ -1346,7 +1438,8 @@ export class OracleQueryRunner extends BaseQueryRunner {
1346
1438
  });
1347
1439
  // find check constraints of table, group them by constraint name and build TableCheck.
1348
1440
  const tableCheckConstraints = OrmUtils.uniq(dbConstraints.filter((dbConstraint) => {
1349
- return (dbConstraint["TABLE_NAME"] === dbTable["TABLE_NAME"] &&
1441
+ return (dbConstraint["TABLE_NAME"] ===
1442
+ dbTable["TABLE_NAME"] &&
1350
1443
  dbConstraint["OWNER"] === dbTable["OWNER"] &&
1351
1444
  dbConstraint["CONSTRAINT_TYPE"] === "C");
1352
1445
  }), (dbConstraint) => dbConstraint["CONSTRAINT_NAME"]);
@@ -1363,9 +1456,11 @@ export class OracleQueryRunner extends BaseQueryRunner {
1363
1456
  });
1364
1457
  // find foreign key constraints of table, group them by constraint name and build TableForeignKey.
1365
1458
  const tableForeignKeyConstraints = OrmUtils.uniq(dbForeignKeys.filter((dbForeignKey) => dbForeignKey["OWNER"] === dbTable["OWNER"] &&
1366
- dbForeignKey["TABLE_NAME"] === dbTable["TABLE_NAME"]), (dbForeignKey) => dbForeignKey["CONSTRAINT_NAME"]);
1459
+ dbForeignKey["TABLE_NAME"] ===
1460
+ dbTable["TABLE_NAME"]), (dbForeignKey) => dbForeignKey["CONSTRAINT_NAME"]);
1367
1461
  table.foreignKeys = tableForeignKeyConstraints.map((dbForeignKey) => {
1368
- const foreignKeys = dbForeignKeys.filter((dbFk) => dbFk["TABLE_NAME"] === dbForeignKey["TABLE_NAME"] &&
1462
+ const foreignKeys = dbForeignKeys.filter((dbFk) => dbFk["TABLE_NAME"] ===
1463
+ dbForeignKey["TABLE_NAME"] &&
1369
1464
  dbFk["OWNER"] === dbForeignKey["OWNER"] &&
1370
1465
  dbFk["CONSTRAINT_NAME"] ===
1371
1466
  dbForeignKey["CONSTRAINT_NAME"]);
@@ -1392,7 +1487,7 @@ export class OracleQueryRunner extends BaseQueryRunner {
1392
1487
  });
1393
1488
  });
1394
1489
  return table;
1395
- });
1490
+ }));
1396
1491
  }
1397
1492
  /**
1398
1493
  * Builds and returns SQL for create table.
@@ -1620,6 +1715,8 @@ export class OracleQueryRunner extends BaseQueryRunner {
1620
1715
  c += " CHARACTER SET " + column.charset;
1621
1716
  if (column.collation)
1622
1717
  c += " COLLATE " + column.collation;
1718
+ if (column.asExpression)
1719
+ c += ` AS (${column.asExpression}) VIRTUAL`;
1623
1720
  if (column.default !== undefined && column.default !== null)
1624
1721
  // DEFAULT must be placed before NOT NULL
1625
1722
  c += " DEFAULT " + column.default;