typeorm 1.1.1 → 1.1.2

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 (66) hide show
  1. package/LICENSE +21 -0
  2. package/browser/data-source/DataSource.d.ts +1 -0
  3. package/browser/data-source/DataSource.js +56 -29
  4. package/browser/data-source/DataSource.js.map +1 -1
  5. package/browser/driver/cockroachdb/CockroachDriver.js +9 -4
  6. package/browser/driver/cockroachdb/CockroachDriver.js.map +1 -1
  7. package/browser/driver/cockroachdb/CockroachQueryRunner.js +71 -31
  8. package/browser/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  9. package/browser/driver/mysql/MysqlQueryRunner.js +132 -84
  10. package/browser/driver/mysql/MysqlQueryRunner.js.map +1 -1
  11. package/browser/driver/oracle/OracleQueryRunner.js +84 -40
  12. package/browser/driver/oracle/OracleQueryRunner.js.map +1 -1
  13. package/browser/driver/postgres/PostgresDriver.js +6 -3
  14. package/browser/driver/postgres/PostgresDriver.js.map +1 -1
  15. package/browser/driver/postgres/PostgresQueryRunner.js +117 -72
  16. package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
  17. package/browser/driver/sap/SapQueryRunner.js +24 -20
  18. package/browser/driver/sap/SapQueryRunner.js.map +1 -1
  19. package/browser/driver/spanner/SpannerQueryRunner.js +20 -16
  20. package/browser/driver/spanner/SpannerQueryRunner.js.map +1 -1
  21. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +52 -31
  22. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  23. package/browser/driver/sqlserver/SqlServerQueryRunner.js +95 -49
  24. package/browser/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  25. package/browser/entity-manager/EntityManager.d.ts +6 -0
  26. package/browser/entity-manager/EntityManager.js +6 -0
  27. package/browser/entity-manager/EntityManager.js.map +1 -1
  28. package/browser/metadata-builder/EntityMetadataBuilder.js +5 -2
  29. package/browser/metadata-builder/EntityMetadataBuilder.js.map +1 -1
  30. package/browser/persistence/tree/ClosureSubjectExecutor.js +2 -3
  31. package/browser/persistence/tree/ClosureSubjectExecutor.js.map +1 -1
  32. package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.js +15 -5
  33. package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.js.map +1 -1
  34. package/data-source/DataSource.d.ts +1 -0
  35. package/data-source/DataSource.js +56 -29
  36. package/data-source/DataSource.js.map +1 -1
  37. package/driver/cockroachdb/CockroachDriver.js +9 -4
  38. package/driver/cockroachdb/CockroachDriver.js.map +1 -1
  39. package/driver/cockroachdb/CockroachQueryRunner.js +71 -31
  40. package/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  41. package/driver/mysql/MysqlQueryRunner.js +132 -84
  42. package/driver/mysql/MysqlQueryRunner.js.map +1 -1
  43. package/driver/oracle/OracleQueryRunner.js +84 -40
  44. package/driver/oracle/OracleQueryRunner.js.map +1 -1
  45. package/driver/postgres/PostgresDriver.js +6 -3
  46. package/driver/postgres/PostgresDriver.js.map +1 -1
  47. package/driver/postgres/PostgresQueryRunner.js +117 -72
  48. package/driver/postgres/PostgresQueryRunner.js.map +1 -1
  49. package/driver/sap/SapQueryRunner.js +24 -20
  50. package/driver/sap/SapQueryRunner.js.map +1 -1
  51. package/driver/spanner/SpannerQueryRunner.js +20 -16
  52. package/driver/spanner/SpannerQueryRunner.js.map +1 -1
  53. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +52 -31
  54. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  55. package/driver/sqlserver/SqlServerQueryRunner.js +95 -49
  56. package/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  57. package/entity-manager/EntityManager.d.ts +6 -0
  58. package/entity-manager/EntityManager.js +6 -0
  59. package/entity-manager/EntityManager.js.map +1 -1
  60. package/metadata-builder/EntityMetadataBuilder.js +5 -2
  61. package/metadata-builder/EntityMetadataBuilder.js.map +1 -1
  62. package/package.json +3 -3
  63. package/persistence/tree/ClosureSubjectExecutor.js +2 -3
  64. package/persistence/tree/ClosureSubjectExecutor.js.map +1 -1
  65. package/query-builder/transformer/RawSqlResultsToEntityTransformer.js +15 -5
  66. package/query-builder/transformer/RawSqlResultsToEntityTransformer.js.map +1 -1
@@ -374,18 +374,19 @@ class MysqlQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
374
374
  // if table has column with generated type, we must add the expression to the metadata table
375
375
  const generatedColumns = table.columns.filter((column) => column.generatedType && column.asExpression);
376
376
  if (generatedColumns.length > 0) {
377
- const currentDatabase = await this.getCurrentDatabase();
377
+ let { database, tableName } = this.driver.parseTableName(table);
378
+ database ??= await this.getCurrentDatabase();
378
379
  for (const column of generatedColumns) {
379
380
  const insertQuery = this.insertTypeormMetadataSql({
380
- schema: currentDatabase,
381
- table: table.name,
381
+ schema: database,
382
+ table: tableName,
382
383
  type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
383
384
  name: column.name,
384
385
  value: column.asExpression,
385
386
  });
386
387
  const deleteQuery = this.deleteTypeormMetadataSql({
387
- schema: currentDatabase,
388
- table: table.name,
388
+ schema: database,
389
+ table: tableName,
389
390
  type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
390
391
  name: column.name,
391
392
  });
@@ -422,25 +423,28 @@ class MysqlQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
422
423
  upQueries.push(this.dropTableSql(table));
423
424
  downQueries.push(this.createTableSql(table, createForeignKeys));
424
425
  // if table had columns with generated type, we must remove the expression from the metadata table
425
- const generatedColumns = table.columns.filter((column) => column.generatedType && column.asExpression);
426
+ const generatedColumns = table.columns.filter((column) => column.generatedType);
426
427
  if (generatedColumns.length > 0) {
427
- const currentDatabase = await this.getCurrentDatabase();
428
+ let { database, tableName } = this.driver.parseTableName(table);
429
+ database ??= await this.getCurrentDatabase();
428
430
  for (const column of generatedColumns) {
429
431
  const deleteQuery = this.deleteTypeormMetadataSql({
430
- schema: currentDatabase,
431
- table: table.name,
432
+ schema: database,
433
+ table: tableName,
432
434
  type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
433
435
  name: column.name,
434
436
  });
435
- const insertQuery = this.insertTypeormMetadataSql({
436
- schema: currentDatabase,
437
- table: table.name,
438
- type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
439
- name: column.name,
440
- value: column.asExpression,
441
- });
442
437
  upQueries.push(deleteQuery);
443
- downQueries.push(insertQuery);
438
+ if (column.asExpression) {
439
+ const insertQuery = this.insertTypeormMetadataSql({
440
+ schema: database,
441
+ table: tableName,
442
+ type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
443
+ name: column.name,
444
+ value: column.asExpression,
445
+ });
446
+ downQueries.push(insertQuery);
447
+ }
444
448
  }
445
449
  }
446
450
  await this.executeQueries(upQueries, downQueries);
@@ -497,11 +501,29 @@ class MysqlQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
497
501
  ? oldTableOrName
498
502
  : await this.getCachedTable(oldTableOrName);
499
503
  const newTable = oldTable.clone();
500
- const { database } = this.driver.parseTableName(oldTable);
504
+ let { database, tableName: oldTableName } = this.driver.parseTableName(oldTable);
505
+ database ??= await this.getCurrentDatabase();
501
506
  newTable.name = database ? `${database}.${newTableName}` : newTableName;
502
507
  // rename table
503
508
  upQueries.push(new Query_1.Query(`RENAME TABLE ${this.escapePath(oldTable)} TO ${this.escapePath(newTable)}`));
504
509
  downQueries.push(new Query_1.Query(`RENAME TABLE ${this.escapePath(newTable)} TO ${this.escapePath(oldTable)}`));
510
+ const hasGeneratedColumns = newTable.columns.some((col) => col.generatedType);
511
+ if (hasGeneratedColumns) {
512
+ const updateQuery = this.updateTypeormMetadataSql({
513
+ schema: database,
514
+ table: oldTableName,
515
+ type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
516
+ valueToSet: { table: newTableName },
517
+ });
518
+ const revertUpdateQuery = this.updateTypeormMetadataSql({
519
+ schema: database,
520
+ table: newTableName,
521
+ type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
522
+ valueToSet: { table: oldTableName },
523
+ });
524
+ upQueries.push(updateQuery);
525
+ downQueries.push(revertUpdateQuery);
526
+ }
505
527
  // rename index constraints
506
528
  newTable.indices.forEach((index) => {
507
529
  const oldIndexName = this.dataSource.namingStrategy.indexName(oldTable, index.columnNames);
@@ -642,17 +664,18 @@ class MysqlQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
642
664
  }
643
665
  }
644
666
  if (column.generatedType && column.asExpression) {
645
- const currentDatabase = await this.getCurrentDatabase();
667
+ let { database, tableName } = this.driver.parseTableName(table);
668
+ database ??= await this.getCurrentDatabase();
646
669
  const insertQuery = this.insertTypeormMetadataSql({
647
- schema: currentDatabase,
648
- table: table.name,
670
+ schema: database,
671
+ table: tableName,
649
672
  type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
650
673
  name: column.name,
651
674
  value: column.asExpression,
652
675
  });
653
676
  const deleteQuery = this.deleteTypeormMetadataSql({
654
- schema: currentDatabase,
655
- table: table.name,
677
+ schema: database,
678
+ table: tableName,
656
679
  type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
657
680
  name: column.name,
658
681
  });
@@ -762,6 +785,26 @@ class MysqlQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
762
785
  // We don't change any column properties, just rename it.
763
786
  upQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} CHANGE \`${oldColumn.name}\` \`${newColumn.name}\` ${this.buildCreateColumnSql(oldColumn, true, true)}`));
764
787
  downQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} CHANGE \`${newColumn.name}\` \`${oldColumn.name}\` ${this.buildCreateColumnSql(oldColumn, true, true)}`));
788
+ if (oldColumn.generatedType) {
789
+ let { database, tableName } = this.driver.parseTableName(table);
790
+ database ??= await this.getCurrentDatabase();
791
+ const updateQuery = this.updateTypeormMetadataSql({
792
+ schema: database,
793
+ table: tableName,
794
+ name: oldColumn.name,
795
+ type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
796
+ valueToSet: { name: newColumn.name },
797
+ });
798
+ const revertUpdateQuery = this.updateTypeormMetadataSql({
799
+ schema: database,
800
+ table: tableName,
801
+ name: newColumn.name,
802
+ type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
803
+ valueToSet: { name: oldColumn.name },
804
+ });
805
+ upQueries.push(updateQuery);
806
+ downQueries.push(revertUpdateQuery);
807
+ }
765
808
  // rename index constraints
766
809
  clonedTable.findColumnIndices(oldColumn).forEach((index) => {
767
810
  const oldUniqueName = this.dataSource.namingStrategy.indexName(clonedTable, index.columnNames);
@@ -837,74 +880,69 @@ class MysqlQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
837
880
  downQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} CHANGE \`${newColumn.name}\` ${this.buildCreateColumnSql(oldColumn, true)}`));
838
881
  if (oldColumn.generatedType && !newColumn.generatedType) {
839
882
  // if column changed from generated to non-generated, delete record from typeorm metadata
840
- const currentDatabase = await this.getCurrentDatabase();
883
+ let { database, tableName } = this.driver.parseTableName(table);
884
+ database ??= await this.getCurrentDatabase();
841
885
  const deleteQuery = this.deleteTypeormMetadataSql({
842
- schema: currentDatabase,
843
- table: table.name,
844
- type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
845
- name: oldColumn.name,
846
- });
847
- const insertQuery = this.insertTypeormMetadataSql({
848
- schema: currentDatabase,
849
- table: table.name,
886
+ schema: database,
887
+ table: tableName,
850
888
  type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
851
889
  name: oldColumn.name,
852
- value: oldColumn.asExpression,
853
890
  });
854
891
  upQueries.push(deleteQuery);
855
- downQueries.push(insertQuery);
892
+ if (oldColumn.asExpression) {
893
+ const insertQuery = this.insertTypeormMetadataSql({
894
+ schema: database,
895
+ table: tableName,
896
+ type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
897
+ name: oldColumn.name,
898
+ value: oldColumn.asExpression,
899
+ });
900
+ downQueries.push(insertQuery);
901
+ }
856
902
  }
857
903
  else if (!oldColumn.generatedType &&
858
904
  newColumn.generatedType) {
859
905
  // if column changed from non-generated to generated, insert record into typeorm metadata
860
- const currentDatabase = await this.getCurrentDatabase();
861
- const insertQuery = this.insertTypeormMetadataSql({
862
- schema: currentDatabase,
863
- table: table.name,
864
- type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
865
- name: newColumn.name,
866
- value: newColumn.asExpression,
867
- });
906
+ let { database, tableName } = this.driver.parseTableName(table);
907
+ database ??= await this.getCurrentDatabase();
908
+ if (newColumn.asExpression) {
909
+ const insertQuery = this.insertTypeormMetadataSql({
910
+ schema: database,
911
+ table: tableName,
912
+ type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
913
+ name: newColumn.name,
914
+ value: newColumn.asExpression,
915
+ });
916
+ upQueries.push(insertQuery);
917
+ }
868
918
  const deleteQuery = this.deleteTypeormMetadataSql({
869
- schema: currentDatabase,
870
- table: table.name,
919
+ schema: database,
920
+ table: tableName,
871
921
  type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
872
922
  name: newColumn.name,
873
923
  });
874
- upQueries.push(insertQuery);
875
924
  downQueries.push(deleteQuery);
876
925
  }
877
926
  else if (oldColumn.asExpression !== newColumn.asExpression) {
878
927
  // if only expression changed, just update it in typeorm_metadata table
879
- const currentDatabase = await this.getCurrentDatabase();
880
- const updateQuery = this.dataSource
881
- .createQueryBuilder()
882
- .update(this.getTypeormMetadataTableName())
883
- .set({ value: newColumn.asExpression })
884
- .where("`type` = :type", {
928
+ let { database, tableName } = this.driver.parseTableName(table);
929
+ database ??= await this.getCurrentDatabase();
930
+ const updateQuery = this.updateTypeormMetadataSql({
931
+ schema: database,
932
+ table: tableName,
885
933
  type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
886
- })
887
- .andWhere("`name` = :name", { name: oldColumn.name })
888
- .andWhere("`schema` = :schema", {
889
- schema: currentDatabase,
890
- })
891
- .andWhere("`table` = :table", { table: table.name })
892
- .getQueryAndParameters();
893
- const revertUpdateQuery = this.dataSource
894
- .createQueryBuilder()
895
- .update(this.getTypeormMetadataTableName())
896
- .set({ value: oldColumn.asExpression })
897
- .where("`type` = :type", {
934
+ name: oldColumn.name,
935
+ valueToSet: { value: newColumn.asExpression },
936
+ });
937
+ const revertUpdateQuery = this.updateTypeormMetadataSql({
938
+ schema: database,
939
+ table: tableName,
898
940
  type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
899
- })
900
- .andWhere("`name` = :name", { name: newColumn.name })
901
- .andWhere("`schema` = :schema", {
902
- schema: currentDatabase,
903
- })
904
- .andWhere("`table` = :table", { table: table.name })
905
- .getQueryAndParameters();
906
- upQueries.push(new Query_1.Query(updateQuery[0], updateQuery[1]));
907
- downQueries.push(new Query_1.Query(revertUpdateQuery[0], revertUpdateQuery[1]));
941
+ name: newColumn.name,
942
+ valueToSet: { value: oldColumn.asExpression },
943
+ });
944
+ upQueries.push(updateQuery);
945
+ downQueries.push(revertUpdateQuery);
908
946
  }
909
947
  }
910
948
  if (newColumn.isPrimary !== oldColumn.isPrimary) {
@@ -1094,23 +1132,26 @@ class MysqlQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
1094
1132
  }
1095
1133
  upQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} DROP COLUMN \`${column.name}\``));
1096
1134
  downQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} ADD ${this.buildCreateColumnSql(column, true)}`));
1097
- if (column.generatedType && column.asExpression) {
1098
- const currentDatabase = await this.getCurrentDatabase();
1135
+ if (column.generatedType) {
1136
+ let { database, tableName } = this.driver.parseTableName(table);
1137
+ database ??= await this.getCurrentDatabase();
1099
1138
  const deleteQuery = this.deleteTypeormMetadataSql({
1100
- schema: currentDatabase,
1101
- table: table.name,
1139
+ schema: database,
1140
+ table: tableName,
1102
1141
  type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
1103
1142
  name: column.name,
1104
1143
  });
1105
- const insertQuery = this.insertTypeormMetadataSql({
1106
- schema: currentDatabase,
1107
- table: table.name,
1108
- type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
1109
- name: column.name,
1110
- value: column.asExpression,
1111
- });
1112
1144
  upQueries.push(deleteQuery);
1113
- downQueries.push(insertQuery);
1145
+ if (column.asExpression) {
1146
+ const insertQuery = this.insertTypeormMetadataSql({
1147
+ schema: database,
1148
+ table: tableName,
1149
+ type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
1150
+ name: column.name,
1151
+ value: column.asExpression,
1152
+ });
1153
+ downQueries.push(insertQuery);
1154
+ }
1114
1155
  }
1115
1156
  await this.executeQueries(upQueries, downQueries);
1116
1157
  clonedTable.removeColumn(column);
@@ -1521,6 +1562,13 @@ class MysqlQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
1521
1562
  const dropQueries = await this.query(dropTablesQuery, [dbName]);
1522
1563
  await Promise.all(dropQueries.map((query) => this.query(query["query"])));
1523
1564
  await this.query(enableForeignKeysCheckQuery);
1565
+ if (database) {
1566
+ const metadataTableName = this.getTypeormMetadataTableName();
1567
+ const hasMetadataTable = await this.hasTable(metadataTableName);
1568
+ if (hasMetadataTable) {
1569
+ await this.query(`DELETE FROM ${this.escapePath(metadataTableName)} WHERE \`schema\` = ?`, [database]);
1570
+ }
1571
+ }
1524
1572
  if (!isAnotherTransactionActive)
1525
1573
  await this.commitTransaction();
1526
1574
  }