typeorm 0.3.11-dev.19536ed → 0.3.11-dev.2473ff0

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 (163) hide show
  1. package/README.md +2 -2
  2. package/browser/data-source/DataSource.js +2 -2
  3. package/browser/data-source/DataSource.js.map +1 -1
  4. package/browser/driver/better-sqlite3/BetterSqlite3QueryRunner.js +0 -6
  5. package/browser/driver/better-sqlite3/BetterSqlite3QueryRunner.js.map +1 -1
  6. package/browser/driver/postgres/PostgresConnectionOptions.d.ts +16 -0
  7. package/browser/driver/postgres/PostgresConnectionOptions.js.map +1 -1
  8. package/browser/driver/postgres/PostgresDriver.js +11 -1
  9. package/browser/driver/postgres/PostgresDriver.js.map +1 -1
  10. package/browser/driver/postgres/PostgresQueryRunner.d.ts +17 -1
  11. package/browser/driver/postgres/PostgresQueryRunner.js +97 -0
  12. package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
  13. package/browser/driver/react-native/ReactNativeQueryRunner.js +4 -4
  14. package/browser/driver/react-native/ReactNativeQueryRunner.js.map +1 -1
  15. package/browser/driver/sqlite/SqliteConnectionOptions.d.ts +6 -0
  16. package/browser/driver/sqlite/SqliteConnectionOptions.js.map +1 -1
  17. package/browser/driver/sqlite/SqliteDriver.js +18 -6
  18. package/browser/driver/sqlite/SqliteDriver.js.map +1 -1
  19. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js +6 -0
  20. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
  21. package/browser/entity-manager/EntityManager.js +3 -1
  22. package/browser/entity-manager/EntityManager.js.map +1 -1
  23. package/browser/find-options/FindOperatorType.d.ts +1 -1
  24. package/browser/find-options/FindOperatorType.js.map +1 -1
  25. package/browser/find-options/FindOptionsOrder.d.ts +1 -1
  26. package/browser/find-options/FindOptionsOrder.js.map +1 -1
  27. package/browser/find-options/FindOptionsRelations.d.ts +1 -1
  28. package/browser/find-options/FindOptionsRelations.js.map +1 -1
  29. package/browser/find-options/FindOptionsSelect.d.ts +1 -1
  30. package/browser/find-options/FindOptionsSelect.js.map +1 -1
  31. package/browser/find-options/FindOptionsWhere.d.ts +2 -2
  32. package/browser/find-options/FindOptionsWhere.js.map +1 -1
  33. package/browser/find-options/operator/And.d.ts +2 -0
  34. package/browser/find-options/operator/And.js +6 -0
  35. package/browser/find-options/operator/And.js.map +1 -0
  36. package/browser/find-options/operator/Any.d.ts +1 -1
  37. package/browser/find-options/operator/Any.js.map +1 -1
  38. package/browser/find-options/operator/ArrayContainedBy.d.ts +1 -1
  39. package/browser/find-options/operator/ArrayContainedBy.js.map +1 -1
  40. package/browser/find-options/operator/ArrayContains.d.ts +1 -1
  41. package/browser/find-options/operator/ArrayContains.js.map +1 -1
  42. package/browser/find-options/operator/ArrayOverlap.d.ts +1 -1
  43. package/browser/find-options/operator/ArrayOverlap.js.map +1 -1
  44. package/browser/find-options/operator/In.d.ts +1 -1
  45. package/browser/find-options/operator/In.js.map +1 -1
  46. package/browser/index.d.ts +1 -0
  47. package/browser/index.js +1 -0
  48. package/browser/index.js.map +1 -1
  49. package/browser/migration/MigrationExecutor.js +1 -1
  50. package/browser/migration/MigrationExecutor.js.map +1 -1
  51. package/browser/naming-strategy/NamingStrategyInterface.d.ts +2 -1
  52. package/browser/naming-strategy/NamingStrategyInterface.js.map +1 -1
  53. package/browser/persistence/tree/MaterializedPathSubjectExecutor.d.ts +1 -0
  54. package/browser/persistence/tree/MaterializedPathSubjectExecutor.js +19 -4
  55. package/browser/persistence/tree/MaterializedPathSubjectExecutor.js.map +1 -1
  56. package/browser/query-builder/QueryBuilder.js +9 -0
  57. package/browser/query-builder/QueryBuilder.js.map +1 -1
  58. package/browser/query-builder/RelationLoader.js +1 -0
  59. package/browser/query-builder/RelationLoader.js.map +1 -1
  60. package/browser/query-builder/SelectQueryBuilder.js +4 -8
  61. package/browser/query-builder/SelectQueryBuilder.js.map +1 -1
  62. package/browser/query-builder/WhereClause.d.ts +1 -1
  63. package/browser/query-builder/WhereClause.js.map +1 -1
  64. package/browser/query-runner/BaseQueryRunner.d.ts +1 -1
  65. package/browser/query-runner/BaseQueryRunner.js.map +1 -1
  66. package/browser/repository/Repository.d.ts +1 -1
  67. package/browser/repository/Repository.js.map +1 -1
  68. package/browser/repository/TreeRepository.d.ts +0 -4
  69. package/browser/repository/TreeRepository.js +0 -11
  70. package/browser/repository/TreeRepository.js.map +1 -1
  71. package/browser/repository/UpsertOptions.d.ts +3 -1
  72. package/browser/repository/UpsertOptions.js.map +1 -1
  73. package/browser/schema-builder/RdbmsSchemaBuilder.d.ts +4 -0
  74. package/browser/schema-builder/RdbmsSchemaBuilder.js +74 -2
  75. package/browser/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
  76. package/browser/schema-builder/view/View.d.ts +13 -1
  77. package/browser/schema-builder/view/View.js +16 -0
  78. package/browser/schema-builder/view/View.js.map +1 -1
  79. package/browser/util/TreeRepositoryUtils.js +16 -6
  80. package/browser/util/TreeRepositoryUtils.js.map +1 -1
  81. package/commands/MigrationRevertCommand.js +1 -0
  82. package/commands/MigrationRevertCommand.js.map +1 -1
  83. package/data-source/DataSource.js +2 -2
  84. package/data-source/DataSource.js.map +1 -1
  85. package/driver/better-sqlite3/BetterSqlite3QueryRunner.js +0 -6
  86. package/driver/better-sqlite3/BetterSqlite3QueryRunner.js.map +1 -1
  87. package/driver/postgres/PostgresConnectionOptions.d.ts +16 -0
  88. package/driver/postgres/PostgresConnectionOptions.js.map +1 -1
  89. package/driver/postgres/PostgresDriver.js +11 -1
  90. package/driver/postgres/PostgresDriver.js.map +1 -1
  91. package/driver/postgres/PostgresQueryRunner.d.ts +17 -1
  92. package/driver/postgres/PostgresQueryRunner.js +97 -0
  93. package/driver/postgres/PostgresQueryRunner.js.map +1 -1
  94. package/driver/react-native/ReactNativeQueryRunner.js +4 -4
  95. package/driver/react-native/ReactNativeQueryRunner.js.map +1 -1
  96. package/driver/sqlite/SqliteConnectionOptions.d.ts +6 -0
  97. package/driver/sqlite/SqliteConnectionOptions.js.map +1 -1
  98. package/driver/sqlite/SqliteDriver.js +18 -6
  99. package/driver/sqlite/SqliteDriver.js.map +1 -1
  100. package/driver/sqlite-abstract/AbstractSqliteDriver.js +6 -0
  101. package/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
  102. package/entity-manager/EntityManager.js +3 -1
  103. package/entity-manager/EntityManager.js.map +1 -1
  104. package/find-options/FindOperatorType.d.ts +1 -1
  105. package/find-options/FindOperatorType.js.map +1 -1
  106. package/find-options/FindOptionsOrder.d.ts +1 -1
  107. package/find-options/FindOptionsOrder.js.map +1 -1
  108. package/find-options/FindOptionsRelations.d.ts +1 -1
  109. package/find-options/FindOptionsRelations.js.map +1 -1
  110. package/find-options/FindOptionsSelect.d.ts +1 -1
  111. package/find-options/FindOptionsSelect.js.map +1 -1
  112. package/find-options/FindOptionsWhere.d.ts +2 -2
  113. package/find-options/FindOptionsWhere.js.map +1 -1
  114. package/find-options/operator/And.d.ts +2 -0
  115. package/find-options/operator/And.js +10 -0
  116. package/find-options/operator/And.js.map +1 -0
  117. package/find-options/operator/Any.d.ts +1 -1
  118. package/find-options/operator/Any.js.map +1 -1
  119. package/find-options/operator/ArrayContainedBy.d.ts +1 -1
  120. package/find-options/operator/ArrayContainedBy.js.map +1 -1
  121. package/find-options/operator/ArrayContains.d.ts +1 -1
  122. package/find-options/operator/ArrayContains.js.map +1 -1
  123. package/find-options/operator/ArrayOverlap.d.ts +1 -1
  124. package/find-options/operator/ArrayOverlap.js.map +1 -1
  125. package/find-options/operator/In.d.ts +1 -1
  126. package/find-options/operator/In.js.map +1 -1
  127. package/index.d.ts +1 -0
  128. package/index.js +1 -0
  129. package/index.js.map +1 -1
  130. package/index.mjs +2 -0
  131. package/migration/MigrationExecutor.js +1 -1
  132. package/migration/MigrationExecutor.js.map +1 -1
  133. package/naming-strategy/NamingStrategyInterface.d.ts +2 -1
  134. package/naming-strategy/NamingStrategyInterface.js.map +1 -1
  135. package/package.json +1 -1
  136. package/persistence/tree/MaterializedPathSubjectExecutor.d.ts +1 -0
  137. package/persistence/tree/MaterializedPathSubjectExecutor.js +19 -4
  138. package/persistence/tree/MaterializedPathSubjectExecutor.js.map +1 -1
  139. package/query-builder/QueryBuilder.js +9 -0
  140. package/query-builder/QueryBuilder.js.map +1 -1
  141. package/query-builder/RelationLoader.js +1 -0
  142. package/query-builder/RelationLoader.js.map +1 -1
  143. package/query-builder/SelectQueryBuilder.js +4 -8
  144. package/query-builder/SelectQueryBuilder.js.map +1 -1
  145. package/query-builder/WhereClause.d.ts +1 -1
  146. package/query-builder/WhereClause.js.map +1 -1
  147. package/query-runner/BaseQueryRunner.d.ts +1 -1
  148. package/query-runner/BaseQueryRunner.js.map +1 -1
  149. package/repository/Repository.d.ts +1 -1
  150. package/repository/Repository.js.map +1 -1
  151. package/repository/TreeRepository.d.ts +0 -4
  152. package/repository/TreeRepository.js +0 -11
  153. package/repository/TreeRepository.js.map +1 -1
  154. package/repository/UpsertOptions.d.ts +3 -1
  155. package/repository/UpsertOptions.js.map +1 -1
  156. package/schema-builder/RdbmsSchemaBuilder.d.ts +4 -0
  157. package/schema-builder/RdbmsSchemaBuilder.js +74 -2
  158. package/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
  159. package/schema-builder/view/View.d.ts +13 -1
  160. package/schema-builder/view/View.js +16 -0
  161. package/schema-builder/view/View.js.map +1 -1
  162. package/util/TreeRepositoryUtils.js +16 -6
  163. package/util/TreeRepositoryUtils.js.map +1 -1
@@ -1479,6 +1479,21 @@ export class PostgresQueryRunner extends BaseQueryRunner {
1479
1479
  await this.executeQueries(up, down);
1480
1480
  table.addIndex(index);
1481
1481
  }
1482
+ /**
1483
+ * Create a new view index.
1484
+ */
1485
+ async createViewIndex(viewOrName, index) {
1486
+ const view = InstanceChecker.isView(viewOrName)
1487
+ ? viewOrName
1488
+ : await this.getCachedView(viewOrName);
1489
+ // new index may be passed without name. In this case we generate index name manually.
1490
+ if (!index.name)
1491
+ index.name = this.generateIndexName(view, index);
1492
+ const up = this.createViewIndexSql(view, index);
1493
+ const down = this.dropIndexSql(view, index);
1494
+ await this.executeQueries(up, down);
1495
+ view.addIndex(index);
1496
+ }
1482
1497
  /**
1483
1498
  * Creates a new indices
1484
1499
  */
@@ -1487,6 +1502,14 @@ export class PostgresQueryRunner extends BaseQueryRunner {
1487
1502
  await this.createIndex(tableOrName, index);
1488
1503
  }
1489
1504
  }
1505
+ /**
1506
+ * Creates new view indices
1507
+ */
1508
+ async createViewIndices(viewOrName, indices) {
1509
+ for (const index of indices) {
1510
+ await this.createViewIndex(viewOrName, index);
1511
+ }
1512
+ }
1490
1513
  /**
1491
1514
  * Drops an index from the table.
1492
1515
  */
@@ -1507,6 +1530,26 @@ export class PostgresQueryRunner extends BaseQueryRunner {
1507
1530
  await this.executeQueries(up, down);
1508
1531
  table.removeIndex(index);
1509
1532
  }
1533
+ /**
1534
+ * Drops an index from a view.
1535
+ */
1536
+ async dropViewIndex(viewOrName, indexOrName) {
1537
+ const view = InstanceChecker.isView(viewOrName)
1538
+ ? viewOrName
1539
+ : await this.getCachedView(viewOrName);
1540
+ const index = InstanceChecker.isTableIndex(indexOrName)
1541
+ ? indexOrName
1542
+ : view.indices.find((i) => i.name === indexOrName);
1543
+ if (!index)
1544
+ throw new TypeORMError(`Supplied index ${indexOrName} was not found in view ${view.name}`);
1545
+ // old index may be passed without name. In this case we generate index name manually.
1546
+ if (!index.name)
1547
+ index.name = this.generateIndexName(view, index);
1548
+ const up = this.dropIndexSql(view, index);
1549
+ const down = this.createViewIndexSql(view, index);
1550
+ await this.executeQueries(up, down);
1551
+ view.removeIndex(index);
1552
+ }
1510
1553
  /**
1511
1554
  * Drops an indices from the table.
1512
1555
  */
@@ -1605,12 +1648,41 @@ export class PostgresQueryRunner extends BaseQueryRunner {
1605
1648
  return `("t"."schema" = '${schema}' AND "t"."name" = '${tableName}')`;
1606
1649
  })
1607
1650
  .join(" OR ");
1651
+ const constraintsCondition = viewNames.length === 0
1652
+ ? "1=1"
1653
+ : viewNames
1654
+ .map((tableName) => this.driver.parseTableName(tableName))
1655
+ .map(({ schema, tableName }) => {
1656
+ if (!schema) {
1657
+ schema =
1658
+ this.driver.options.schema || currentSchema;
1659
+ }
1660
+ return `("ns"."nspname" = '${schema}' AND "t"."relname" = '${tableName}')`;
1661
+ })
1662
+ .join(" OR ");
1663
+ const indicesSql = `SELECT "ns"."nspname" AS "table_schema", "t"."relname" AS "table_name", "i"."relname" AS "constraint_name", "a"."attname" AS "column_name", ` +
1664
+ `CASE "ix"."indisunique" WHEN 't' THEN 'TRUE' ELSE'FALSE' END AS "is_unique", pg_get_expr("ix"."indpred", "ix"."indrelid") AS "condition", ` +
1665
+ `"types"."typname" AS "type_name" ` +
1666
+ `FROM "pg_class" "t" ` +
1667
+ `INNER JOIN "pg_index" "ix" ON "ix"."indrelid" = "t"."oid" ` +
1668
+ `INNER JOIN "pg_attribute" "a" ON "a"."attrelid" = "t"."oid" AND "a"."attnum" = ANY ("ix"."indkey") ` +
1669
+ `INNER JOIN "pg_namespace" "ns" ON "ns"."oid" = "t"."relnamespace" ` +
1670
+ `INNER JOIN "pg_class" "i" ON "i"."oid" = "ix"."indexrelid" ` +
1671
+ `INNER JOIN "pg_type" "types" ON "types"."oid" = "a"."atttypid" ` +
1672
+ `LEFT JOIN "pg_constraint" "cnst" ON "cnst"."conname" = "i"."relname" ` +
1673
+ `WHERE "t"."relkind" IN ('m') AND "cnst"."contype" IS NULL AND (${constraintsCondition})`;
1608
1674
  const query = `SELECT "t".* FROM ${this.escapePath(this.getTypeormMetadataTableName())} "t" ` +
1609
1675
  `INNER JOIN "pg_catalog"."pg_class" "c" ON "c"."relname" = "t"."name" ` +
1610
1676
  `INNER JOIN "pg_namespace" "n" ON "n"."oid" = "c"."relnamespace" AND "n"."nspname" = "t"."schema" ` +
1611
1677
  `WHERE "t"."type" IN ('${MetadataTableType.VIEW}', '${MetadataTableType.MATERIALIZED_VIEW}') ${viewsCondition ? `AND (${viewsCondition})` : ""}`;
1612
1678
  const dbViews = await this.query(query);
1679
+ const dbIndices = await this.query(indicesSql);
1613
1680
  return dbViews.map((dbView) => {
1681
+ // find index constraints of table, group them by constraint name and build TableIndex.
1682
+ const tableIndexConstraints = OrmUtils.uniq(dbIndices.filter((dbIndex) => {
1683
+ return (dbIndex["table_name"] === dbView["name"] &&
1684
+ dbIndex["table_schema"] === dbView["schema"]);
1685
+ }), (dbIndex) => dbIndex["constraint_name"]);
1614
1686
  const view = new View();
1615
1687
  const schema = dbView["schema"] === currentSchema &&
1616
1688
  !this.driver.options.schema
@@ -1622,6 +1694,22 @@ export class PostgresQueryRunner extends BaseQueryRunner {
1622
1694
  view.expression = dbView["value"];
1623
1695
  view.materialized =
1624
1696
  dbView["type"] === MetadataTableType.MATERIALIZED_VIEW;
1697
+ view.indices = tableIndexConstraints.map((constraint) => {
1698
+ const indices = dbIndices.filter((index) => {
1699
+ return (index["table_schema"] === constraint["table_schema"] &&
1700
+ index["table_name"] === constraint["table_name"] &&
1701
+ index["constraint_name"] ===
1702
+ constraint["constraint_name"]);
1703
+ });
1704
+ return new TableIndex({
1705
+ view: view,
1706
+ name: constraint["constraint_name"],
1707
+ columnNames: indices.map((i) => i["column_name"]),
1708
+ isUnique: constraint["is_unique"] === "TRUE",
1709
+ where: constraint["condition"],
1710
+ isFulltext: false,
1711
+ });
1712
+ });
1625
1713
  return view;
1626
1714
  });
1627
1715
  }
@@ -2318,6 +2406,15 @@ export class PostgresQueryRunner extends BaseQueryRunner {
2318
2406
  .join(", ");
2319
2407
  return new Query(`CREATE ${index.isUnique ? "UNIQUE " : ""}INDEX "${index.name}" ON ${this.escapePath(table)} ${index.isSpatial ? "USING GiST " : ""}(${columns}) ${index.where ? "WHERE " + index.where : ""}`);
2320
2408
  }
2409
+ /**
2410
+ * Builds create view index sql.
2411
+ */
2412
+ createViewIndexSql(view, index) {
2413
+ const columns = index.columnNames
2414
+ .map((columnName) => `"${columnName}"`)
2415
+ .join(", ");
2416
+ return new Query(`CREATE ${index.isUnique ? "UNIQUE " : ""}INDEX "${index.name}" ON ${this.escapePath(view)} (${columns}) ${index.where ? "WHERE " + index.where : ""}`);
2417
+ }
2321
2418
  /**
2322
2419
  * Builds drop index sql.
2323
2420
  */