typeorm 0.3.11-dev.66acec8 → 0.3.11-dev.71efa8e

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 (151) hide show
  1. package/README.md +3 -3
  2. package/browser/driver/aurora-mysql/AuroraMysqlQueryRunner.js +21 -4
  3. package/browser/driver/aurora-mysql/AuroraMysqlQueryRunner.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/PostgresQueryRunner.d.ts +17 -1
  7. package/browser/driver/postgres/PostgresQueryRunner.js +100 -0
  8. package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
  9. package/browser/driver/react-native/ReactNativeQueryRunner.js +4 -4
  10. package/browser/driver/react-native/ReactNativeQueryRunner.js.map +1 -1
  11. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js +6 -0
  12. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
  13. package/browser/entity-manager/EntityManager.js +3 -1
  14. package/browser/entity-manager/EntityManager.js.map +1 -1
  15. package/browser/find-options/FindOperatorType.d.ts +1 -1
  16. package/browser/find-options/FindOperatorType.js.map +1 -1
  17. package/browser/find-options/FindOptionsOrder.d.ts +1 -1
  18. package/browser/find-options/FindOptionsOrder.js.map +1 -1
  19. package/browser/find-options/FindOptionsRelations.d.ts +1 -1
  20. package/browser/find-options/FindOptionsRelations.js.map +1 -1
  21. package/browser/find-options/FindOptionsSelect.d.ts +1 -1
  22. package/browser/find-options/FindOptionsSelect.js.map +1 -1
  23. package/browser/find-options/FindOptionsWhere.d.ts +2 -2
  24. package/browser/find-options/FindOptionsWhere.js.map +1 -1
  25. package/browser/find-options/operator/And.d.ts +2 -0
  26. package/browser/find-options/operator/And.js +6 -0
  27. package/browser/find-options/operator/And.js.map +1 -0
  28. package/browser/find-options/operator/Any.d.ts +1 -1
  29. package/browser/find-options/operator/Any.js.map +1 -1
  30. package/browser/find-options/operator/ArrayContainedBy.d.ts +1 -1
  31. package/browser/find-options/operator/ArrayContainedBy.js.map +1 -1
  32. package/browser/find-options/operator/ArrayContains.d.ts +1 -1
  33. package/browser/find-options/operator/ArrayContains.js.map +1 -1
  34. package/browser/find-options/operator/ArrayOverlap.d.ts +1 -1
  35. package/browser/find-options/operator/ArrayOverlap.js.map +1 -1
  36. package/browser/find-options/operator/In.d.ts +1 -1
  37. package/browser/find-options/operator/In.js.map +1 -1
  38. package/browser/index.d.ts +1 -0
  39. package/browser/index.js +1 -0
  40. package/browser/index.js.map +1 -1
  41. package/browser/migration/MigrationExecutor.js +1 -1
  42. package/browser/migration/MigrationExecutor.js.map +1 -1
  43. package/browser/naming-strategy/NamingStrategyInterface.d.ts +2 -1
  44. package/browser/naming-strategy/NamingStrategyInterface.js.map +1 -1
  45. package/browser/persistence/tree/MaterializedPathSubjectExecutor.d.ts +1 -0
  46. package/browser/persistence/tree/MaterializedPathSubjectExecutor.js +19 -4
  47. package/browser/persistence/tree/MaterializedPathSubjectExecutor.js.map +1 -1
  48. package/browser/query-builder/QueryBuilder.js +9 -0
  49. package/browser/query-builder/QueryBuilder.js.map +1 -1
  50. package/browser/query-builder/RelationLoader.js +1 -0
  51. package/browser/query-builder/RelationLoader.js.map +1 -1
  52. package/browser/query-builder/SelectQueryBuilder.js +1 -5
  53. package/browser/query-builder/SelectQueryBuilder.js.map +1 -1
  54. package/browser/query-builder/WhereClause.d.ts +1 -1
  55. package/browser/query-builder/WhereClause.js.map +1 -1
  56. package/browser/query-runner/BaseQueryRunner.d.ts +1 -1
  57. package/browser/query-runner/BaseQueryRunner.js.map +1 -1
  58. package/browser/repository/Repository.d.ts +1 -1
  59. package/browser/repository/Repository.js.map +1 -1
  60. package/browser/repository/TreeRepository.d.ts +0 -4
  61. package/browser/repository/TreeRepository.js +0 -11
  62. package/browser/repository/TreeRepository.js.map +1 -1
  63. package/browser/repository/UpsertOptions.d.ts +3 -1
  64. package/browser/repository/UpsertOptions.js.map +1 -1
  65. package/browser/schema-builder/RdbmsSchemaBuilder.d.ts +4 -0
  66. package/browser/schema-builder/RdbmsSchemaBuilder.js +74 -2
  67. package/browser/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
  68. package/browser/schema-builder/view/View.d.ts +13 -1
  69. package/browser/schema-builder/view/View.js +16 -0
  70. package/browser/schema-builder/view/View.js.map +1 -1
  71. package/browser/util/OrmUtils.js +2 -1
  72. package/browser/util/OrmUtils.js.map +1 -1
  73. package/browser/util/TreeRepositoryUtils.js +16 -6
  74. package/browser/util/TreeRepositoryUtils.js.map +1 -1
  75. package/commands/MigrationRevertCommand.js +1 -0
  76. package/commands/MigrationRevertCommand.js.map +1 -1
  77. package/driver/aurora-mysql/AuroraMysqlQueryRunner.js +21 -4
  78. package/driver/aurora-mysql/AuroraMysqlQueryRunner.js.map +1 -1
  79. package/driver/better-sqlite3/BetterSqlite3QueryRunner.js +0 -6
  80. package/driver/better-sqlite3/BetterSqlite3QueryRunner.js.map +1 -1
  81. package/driver/postgres/PostgresQueryRunner.d.ts +17 -1
  82. package/driver/postgres/PostgresQueryRunner.js +100 -0
  83. package/driver/postgres/PostgresQueryRunner.js.map +1 -1
  84. package/driver/react-native/ReactNativeQueryRunner.js +4 -4
  85. package/driver/react-native/ReactNativeQueryRunner.js.map +1 -1
  86. package/driver/sqlite-abstract/AbstractSqliteDriver.js +6 -0
  87. package/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
  88. package/entity-manager/EntityManager.js +3 -1
  89. package/entity-manager/EntityManager.js.map +1 -1
  90. package/find-options/FindOperatorType.d.ts +1 -1
  91. package/find-options/FindOperatorType.js.map +1 -1
  92. package/find-options/FindOptionsOrder.d.ts +1 -1
  93. package/find-options/FindOptionsOrder.js.map +1 -1
  94. package/find-options/FindOptionsRelations.d.ts +1 -1
  95. package/find-options/FindOptionsRelations.js.map +1 -1
  96. package/find-options/FindOptionsSelect.d.ts +1 -1
  97. package/find-options/FindOptionsSelect.js.map +1 -1
  98. package/find-options/FindOptionsWhere.d.ts +2 -2
  99. package/find-options/FindOptionsWhere.js.map +1 -1
  100. package/find-options/operator/And.d.ts +2 -0
  101. package/find-options/operator/And.js +10 -0
  102. package/find-options/operator/And.js.map +1 -0
  103. package/find-options/operator/Any.d.ts +1 -1
  104. package/find-options/operator/Any.js.map +1 -1
  105. package/find-options/operator/ArrayContainedBy.d.ts +1 -1
  106. package/find-options/operator/ArrayContainedBy.js.map +1 -1
  107. package/find-options/operator/ArrayContains.d.ts +1 -1
  108. package/find-options/operator/ArrayContains.js.map +1 -1
  109. package/find-options/operator/ArrayOverlap.d.ts +1 -1
  110. package/find-options/operator/ArrayOverlap.js.map +1 -1
  111. package/find-options/operator/In.d.ts +1 -1
  112. package/find-options/operator/In.js.map +1 -1
  113. package/index.d.ts +1 -0
  114. package/index.js +1 -0
  115. package/index.js.map +1 -1
  116. package/index.mjs +2 -0
  117. package/migration/MigrationExecutor.js +1 -1
  118. package/migration/MigrationExecutor.js.map +1 -1
  119. package/naming-strategy/NamingStrategyInterface.d.ts +2 -1
  120. package/naming-strategy/NamingStrategyInterface.js.map +1 -1
  121. package/package.json +1 -1
  122. package/persistence/tree/MaterializedPathSubjectExecutor.d.ts +1 -0
  123. package/persistence/tree/MaterializedPathSubjectExecutor.js +19 -4
  124. package/persistence/tree/MaterializedPathSubjectExecutor.js.map +1 -1
  125. package/query-builder/QueryBuilder.js +9 -0
  126. package/query-builder/QueryBuilder.js.map +1 -1
  127. package/query-builder/RelationLoader.js +1 -0
  128. package/query-builder/RelationLoader.js.map +1 -1
  129. package/query-builder/SelectQueryBuilder.js +1 -5
  130. package/query-builder/SelectQueryBuilder.js.map +1 -1
  131. package/query-builder/WhereClause.d.ts +1 -1
  132. package/query-builder/WhereClause.js.map +1 -1
  133. package/query-runner/BaseQueryRunner.d.ts +1 -1
  134. package/query-runner/BaseQueryRunner.js.map +1 -1
  135. package/repository/Repository.d.ts +1 -1
  136. package/repository/Repository.js.map +1 -1
  137. package/repository/TreeRepository.d.ts +0 -4
  138. package/repository/TreeRepository.js +0 -11
  139. package/repository/TreeRepository.js.map +1 -1
  140. package/repository/UpsertOptions.d.ts +3 -1
  141. package/repository/UpsertOptions.js.map +1 -1
  142. package/schema-builder/RdbmsSchemaBuilder.d.ts +4 -0
  143. package/schema-builder/RdbmsSchemaBuilder.js +74 -2
  144. package/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
  145. package/schema-builder/view/View.d.ts +13 -1
  146. package/schema-builder/view/View.js +16 -0
  147. package/schema-builder/view/View.js.map +1 -1
  148. package/util/OrmUtils.js +2 -1
  149. package/util/OrmUtils.js.map +1 -1
  150. package/util/TreeRepositoryUtils.js +16 -6
  151. package/util/TreeRepositoryUtils.js.map +1 -1
@@ -66,12 +66,6 @@ export class BetterSqlite3QueryRunner extends AbstractSqliteQueryRunner {
66
66
  if (this.isReleased)
67
67
  throw new QueryRunnerAlreadyReleasedError();
68
68
  const connection = this.driver.connection;
69
- parameters = parameters || [];
70
- for (let i = 0; i < parameters.length; i++) {
71
- // in "where" clauses the parameters are not escaped by the driver
72
- if (typeof parameters[i] === "boolean")
73
- parameters[i] = +parameters[i];
74
- }
75
69
  this.driver.connection.logger.logQuery(query, parameters, this);
76
70
  const queryStartTime = +new Date();
77
71
  const stmt = await this.getStmt(query);
@@ -1 +1 @@
1
- {"version":3,"sources":["../browser/src/driver/better-sqlite3/BetterSqlite3QueryRunner.ts"],"names":[],"mappings":"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","file":"BetterSqlite3QueryRunner.js","sourcesContent":["import { QueryRunnerAlreadyReleasedError } from \"../../error/QueryRunnerAlreadyReleasedError\"\nimport { QueryFailedError } from \"../../error/QueryFailedError\"\nimport { AbstractSqliteQueryRunner } from \"../sqlite-abstract/AbstractSqliteQueryRunner\"\nimport { Broadcaster } from \"../../subscriber/Broadcaster\"\nimport { BetterSqlite3Driver } from \"./BetterSqlite3Driver\"\nimport { QueryResult } from \"../../query-runner/QueryResult\"\n\n/**\n * Runs queries on a single sqlite database connection.\n *\n * Does not support compose primary keys with autoincrement field.\n * todo: need to throw exception for this case.\n */\nexport class BetterSqlite3QueryRunner extends AbstractSqliteQueryRunner {\n /**\n * Database driver used by connection.\n */\n driver: BetterSqlite3Driver\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(driver: BetterSqlite3Driver) {\n super()\n this.driver = driver\n this.connection = driver.connection\n this.broadcaster = new Broadcaster(this)\n if (typeof this.driver.options.statementCacheSize === \"number\") {\n this.cacheSize = this.driver.options.statementCacheSize\n } else {\n this.cacheSize = 100\n }\n }\n\n private cacheSize: number\n private stmtCache = new Map<string, any>()\n\n private async getStmt(query: string) {\n if (this.cacheSize > 0) {\n let stmt = this.stmtCache.get(query)\n if (!stmt) {\n const databaseConnection = await this.connect()\n stmt = databaseConnection.prepare(query)\n this.stmtCache.set(query, stmt)\n while (this.stmtCache.size > this.cacheSize) {\n // since es6 map keeps the insertion order,\n // it comes to be FIFO cache\n const key = this.stmtCache.keys().next().value\n this.stmtCache.delete(key)\n }\n }\n return stmt\n } else {\n const databaseConnection = await this.connect()\n return databaseConnection.prepare(query)\n }\n }\n\n /**\n * Called before migrations are run.\n */\n async beforeMigration(): Promise<void> {\n await this.query(`PRAGMA foreign_keys = OFF`)\n }\n\n /**\n * Called after migrations are run.\n */\n async afterMigration(): Promise<void> {\n await this.query(`PRAGMA foreign_keys = ON`)\n }\n\n /**\n * Executes a given SQL query.\n */\n async query(\n query: string,\n parameters?: any[],\n useStructuredResult = false,\n ): Promise<any> {\n if (this.isReleased) throw new QueryRunnerAlreadyReleasedError()\n\n const connection = this.driver.connection\n\n parameters = parameters || []\n for (let i = 0; i < parameters.length; i++) {\n // in \"where\" clauses the parameters are not escaped by the driver\n if (typeof parameters[i] === \"boolean\")\n parameters[i] = +parameters[i]\n }\n\n this.driver.connection.logger.logQuery(query, parameters, this)\n const queryStartTime = +new Date()\n\n const stmt = await this.getStmt(query)\n\n try {\n const result = new QueryResult()\n\n if (stmt.reader) {\n const raw = stmt.all.apply(stmt, parameters)\n\n result.raw = raw\n\n if (Array.isArray(raw)) {\n result.records = raw\n }\n } else {\n const raw = stmt.run.apply(stmt, parameters)\n result.affected = raw.changes\n result.raw = raw.lastInsertRowid\n }\n\n // log slow queries if maxQueryExecution time is set\n const maxQueryExecutionTime =\n this.driver.options.maxQueryExecutionTime\n const queryEndTime = +new Date()\n const queryExecutionTime = queryEndTime - queryStartTime\n if (\n maxQueryExecutionTime &&\n queryExecutionTime > maxQueryExecutionTime\n )\n connection.logger.logQuerySlow(\n queryExecutionTime,\n query,\n parameters,\n this,\n )\n\n if (!useStructuredResult) {\n return result.raw\n }\n\n return result\n } catch (err) {\n connection.logger.logQueryError(err, query, parameters, this)\n throw new QueryFailedError(query, parameters, err)\n }\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n protected async loadTableRecords(\n tablePath: string,\n tableOrIndex: \"table\" | \"index\",\n ) {\n const [database, tableName] = this.splitTablePath(tablePath)\n const res = await this.query(\n `SELECT ${\n database ? `'${database}'` : null\n } as database, * FROM ${this.escapePath(\n `${database ? `${database}.` : \"\"}sqlite_master`,\n )} WHERE \"type\" = '${tableOrIndex}' AND \"${\n tableOrIndex === \"table\" ? \"name\" : \"tbl_name\"\n }\" IN ('${tableName}')`,\n )\n return res\n }\n protected async loadPragmaRecords(tablePath: string, pragma: string) {\n const [database, tableName] = this.splitTablePath(tablePath)\n const res = await this.query(\n `PRAGMA ${\n database ? `\"${database}\".` : \"\"\n }${pragma}(\"${tableName}\")`,\n )\n return res\n }\n}\n"],"sourceRoot":"../.."}
1
+ {"version":3,"sources":["../browser/src/driver/better-sqlite3/BetterSqlite3QueryRunner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAE,MAAM,6CAA6C,CAAA;AAC7F,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAA;AAC/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,8CAA8C,CAAA;AACxF,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAE1D,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAA;AAE5D;;;;;GAKG;AACH,MAAM,OAAO,wBAAyB,SAAQ,yBAAyB;IAMnE,4EAA4E;IAC5E,cAAc;IACd,4EAA4E;IAE5E,YAAY,MAA2B;QACnC,KAAK,EAAE,CAAA;QAYH,cAAS,GAAG,IAAI,GAAG,EAAe,CAAA;QAXtC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAA;QACnC,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,CAAA;QACxC,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,kBAAkB,KAAK,QAAQ,EAAE;YAC5D,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAA;SAC1D;aAAM;YACH,IAAI,CAAC,SAAS,GAAG,GAAG,CAAA;SACvB;IACL,CAAC;IAKO,KAAK,CAAC,OAAO,CAAC,KAAa;QAC/B,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,EAAE;YACpB,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YACpC,IAAI,CAAC,IAAI,EAAE;gBACP,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAA;gBAC/C,IAAI,GAAG,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;gBACxC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;gBAC/B,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE;oBACzC,2CAA2C;oBAC3C,4BAA4B;oBAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAA;oBAC9C,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;iBAC7B;aACJ;YACD,OAAO,IAAI,CAAA;SACd;aAAM;YACH,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAA;YAC/C,OAAO,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;SAC3C;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe;QACjB,MAAM,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAA;IACjD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc;QAChB,MAAM,IAAI,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAA;IAChD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,CACP,KAAa,EACb,UAAkB,EAClB,mBAAmB,GAAG,KAAK;QAE3B,IAAI,IAAI,CAAC,UAAU;YAAE,MAAM,IAAI,+BAA+B,EAAE,CAAA;QAEhE,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAA;QAEzC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,CAAA;QAC/D,MAAM,cAAc,GAAG,CAAC,IAAI,IAAI,EAAE,CAAA;QAElC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QAEtC,IAAI;YACA,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAA;YAEhC,IAAI,IAAI,CAAC,MAAM,EAAE;gBACb,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;gBAE5C,MAAM,CAAC,GAAG,GAAG,GAAG,CAAA;gBAEhB,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;oBACpB,MAAM,CAAC,OAAO,GAAG,GAAG,CAAA;iBACvB;aACJ;iBAAM;gBACH,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;gBAC5C,MAAM,CAAC,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAA;gBAC7B,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,eAAe,CAAA;aACnC;YAED,oDAAoD;YACpD,MAAM,qBAAqB,GACvB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAA;YAC7C,MAAM,YAAY,GAAG,CAAC,IAAI,IAAI,EAAE,CAAA;YAChC,MAAM,kBAAkB,GAAG,YAAY,GAAG,cAAc,CAAA;YACxD,IACI,qBAAqB;gBACrB,kBAAkB,GAAG,qBAAqB;gBAE1C,UAAU,CAAC,MAAM,CAAC,YAAY,CAC1B,kBAAkB,EAClB,KAAK,EACL,UAAU,EACV,IAAI,CACP,CAAA;YAEL,IAAI,CAAC,mBAAmB,EAAE;gBACtB,OAAO,MAAM,CAAC,GAAG,CAAA;aACpB;YAED,OAAO,MAAM,CAAA;SAChB;QAAC,OAAO,GAAG,EAAE;YACV,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,CAAA;YAC7D,MAAM,IAAI,gBAAgB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,CAAC,CAAA;SACrD;IACL,CAAC;IAED,4EAA4E;IAC5E,oBAAoB;IACpB,4EAA4E;IAElE,KAAK,CAAC,gBAAgB,CAC5B,SAAiB,EACjB,YAA+B;QAE/B,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAA;QAC5D,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CACxB,UACI,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC,IACjC,wBAAwB,IAAI,CAAC,UAAU,CACnC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,eAAe,CACnD,oBAAoB,YAAY,UAC7B,YAAY,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UACxC,UAAU,SAAS,IAAI,CAC1B,CAAA;QACD,OAAO,GAAG,CAAA;IACd,CAAC;IACS,KAAK,CAAC,iBAAiB,CAAC,SAAiB,EAAE,MAAc;QAC/D,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAA;QAC5D,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CACxB,UACI,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,IAAI,CAAC,CAAC,CAAC,EAClC,GAAG,MAAM,KAAK,SAAS,IAAI,CAC9B,CAAA;QACD,OAAO,GAAG,CAAA;IACd,CAAC;CACJ","file":"BetterSqlite3QueryRunner.js","sourcesContent":["import { QueryRunnerAlreadyReleasedError } from \"../../error/QueryRunnerAlreadyReleasedError\"\nimport { QueryFailedError } from \"../../error/QueryFailedError\"\nimport { AbstractSqliteQueryRunner } from \"../sqlite-abstract/AbstractSqliteQueryRunner\"\nimport { Broadcaster } from \"../../subscriber/Broadcaster\"\nimport { BetterSqlite3Driver } from \"./BetterSqlite3Driver\"\nimport { QueryResult } from \"../../query-runner/QueryResult\"\n\n/**\n * Runs queries on a single sqlite database connection.\n *\n * Does not support compose primary keys with autoincrement field.\n * todo: need to throw exception for this case.\n */\nexport class BetterSqlite3QueryRunner extends AbstractSqliteQueryRunner {\n /**\n * Database driver used by connection.\n */\n driver: BetterSqlite3Driver\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(driver: BetterSqlite3Driver) {\n super()\n this.driver = driver\n this.connection = driver.connection\n this.broadcaster = new Broadcaster(this)\n if (typeof this.driver.options.statementCacheSize === \"number\") {\n this.cacheSize = this.driver.options.statementCacheSize\n } else {\n this.cacheSize = 100\n }\n }\n\n private cacheSize: number\n private stmtCache = new Map<string, any>()\n\n private async getStmt(query: string) {\n if (this.cacheSize > 0) {\n let stmt = this.stmtCache.get(query)\n if (!stmt) {\n const databaseConnection = await this.connect()\n stmt = databaseConnection.prepare(query)\n this.stmtCache.set(query, stmt)\n while (this.stmtCache.size > this.cacheSize) {\n // since es6 map keeps the insertion order,\n // it comes to be FIFO cache\n const key = this.stmtCache.keys().next().value\n this.stmtCache.delete(key)\n }\n }\n return stmt\n } else {\n const databaseConnection = await this.connect()\n return databaseConnection.prepare(query)\n }\n }\n\n /**\n * Called before migrations are run.\n */\n async beforeMigration(): Promise<void> {\n await this.query(`PRAGMA foreign_keys = OFF`)\n }\n\n /**\n * Called after migrations are run.\n */\n async afterMigration(): Promise<void> {\n await this.query(`PRAGMA foreign_keys = ON`)\n }\n\n /**\n * Executes a given SQL query.\n */\n async query(\n query: string,\n parameters?: any[],\n useStructuredResult = false,\n ): Promise<any> {\n if (this.isReleased) throw new QueryRunnerAlreadyReleasedError()\n\n const connection = this.driver.connection\n\n this.driver.connection.logger.logQuery(query, parameters, this)\n const queryStartTime = +new Date()\n\n const stmt = await this.getStmt(query)\n\n try {\n const result = new QueryResult()\n\n if (stmt.reader) {\n const raw = stmt.all.apply(stmt, parameters)\n\n result.raw = raw\n\n if (Array.isArray(raw)) {\n result.records = raw\n }\n } else {\n const raw = stmt.run.apply(stmt, parameters)\n result.affected = raw.changes\n result.raw = raw.lastInsertRowid\n }\n\n // log slow queries if maxQueryExecution time is set\n const maxQueryExecutionTime =\n this.driver.options.maxQueryExecutionTime\n const queryEndTime = +new Date()\n const queryExecutionTime = queryEndTime - queryStartTime\n if (\n maxQueryExecutionTime &&\n queryExecutionTime > maxQueryExecutionTime\n )\n connection.logger.logQuerySlow(\n queryExecutionTime,\n query,\n parameters,\n this,\n )\n\n if (!useStructuredResult) {\n return result.raw\n }\n\n return result\n } catch (err) {\n connection.logger.logQueryError(err, query, parameters, this)\n throw new QueryFailedError(query, parameters, err)\n }\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n protected async loadTableRecords(\n tablePath: string,\n tableOrIndex: \"table\" | \"index\",\n ) {\n const [database, tableName] = this.splitTablePath(tablePath)\n const res = await this.query(\n `SELECT ${\n database ? `'${database}'` : null\n } as database, * FROM ${this.escapePath(\n `${database ? `${database}.` : \"\"}sqlite_master`,\n )} WHERE \"type\" = '${tableOrIndex}' AND \"${\n tableOrIndex === \"table\" ? \"name\" : \"tbl_name\"\n }\" IN ('${tableName}')`,\n )\n return res\n }\n protected async loadPragmaRecords(tablePath: string, pragma: string) {\n const [database, tableName] = this.splitTablePath(tablePath)\n const res = await this.query(\n `PRAGMA ${\n database ? `\"${database}\".` : \"\"\n }${pragma}(\"${tableName}\")`,\n )\n return res\n }\n}\n"],"sourceRoot":"../.."}
@@ -250,14 +250,26 @@ export declare class PostgresQueryRunner extends BaseQueryRunner implements Quer
250
250
  * Creates a new index.
251
251
  */
252
252
  createIndex(tableOrName: Table | string, index: TableIndex): Promise<void>;
253
+ /**
254
+ * Create a new view index.
255
+ */
256
+ createViewIndex(viewOrName: View | string, index: TableIndex): Promise<void>;
253
257
  /**
254
258
  * Creates a new indices
255
259
  */
256
260
  createIndices(tableOrName: Table | string, indices: TableIndex[]): Promise<void>;
261
+ /**
262
+ * Creates new view indices
263
+ */
264
+ createViewIndices(viewOrName: View | string, indices: TableIndex[]): Promise<void>;
257
265
  /**
258
266
  * Drops an index from the table.
259
267
  */
260
268
  dropIndex(tableOrName: Table | string, indexOrName: TableIndex | string): Promise<void>;
269
+ /**
270
+ * Drops an index from a view.
271
+ */
272
+ dropViewIndex(viewOrName: View | string, indexOrName: TableIndex | string): Promise<void>;
261
273
  /**
262
274
  * Drops an indices from the table.
263
275
  */
@@ -318,10 +330,14 @@ export declare class PostgresQueryRunner extends BaseQueryRunner implements Quer
318
330
  * Builds create index sql.
319
331
  */
320
332
  protected createIndexSql(table: Table, index: TableIndex): Query;
333
+ /**
334
+ * Builds create view index sql.
335
+ */
336
+ protected createViewIndexSql(view: View, index: TableIndex): Query;
321
337
  /**
322
338
  * Builds drop index sql.
323
339
  */
324
- protected dropIndexSql(table: Table, indexOrName: TableIndex | string): Query;
340
+ protected dropIndexSql(table: Table | View, indexOrName: TableIndex | string): Query;
325
341
  /**
326
342
  * Builds create primary key sql.
327
343
  */
@@ -1448,6 +1448,9 @@ export class PostgresQueryRunner extends BaseQueryRunner {
1448
1448
  : table.foreignKeys.find((fk) => fk.name === foreignKeyOrName);
1449
1449
  if (!foreignKey)
1450
1450
  throw new TypeORMError(`Supplied foreign key was not found in table ${table.name}`);
1451
+ if (!foreignKey.name) {
1452
+ foreignKey.name = this.connection.namingStrategy.foreignKeyName(table, foreignKey.columnNames, this.getTablePath(foreignKey), foreignKey.referencedColumnNames);
1453
+ }
1451
1454
  const up = this.dropForeignKeySql(table, foreignKey);
1452
1455
  const down = this.createForeignKeySql(table, foreignKey);
1453
1456
  await this.executeQueries(up, down);
@@ -1476,6 +1479,21 @@ export class PostgresQueryRunner extends BaseQueryRunner {
1476
1479
  await this.executeQueries(up, down);
1477
1480
  table.addIndex(index);
1478
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
+ }
1479
1497
  /**
1480
1498
  * Creates a new indices
1481
1499
  */
@@ -1484,6 +1502,14 @@ export class PostgresQueryRunner extends BaseQueryRunner {
1484
1502
  await this.createIndex(tableOrName, index);
1485
1503
  }
1486
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
+ }
1487
1513
  /**
1488
1514
  * Drops an index from the table.
1489
1515
  */
@@ -1504,6 +1530,26 @@ export class PostgresQueryRunner extends BaseQueryRunner {
1504
1530
  await this.executeQueries(up, down);
1505
1531
  table.removeIndex(index);
1506
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
+ }
1507
1553
  /**
1508
1554
  * Drops an indices from the table.
1509
1555
  */
@@ -1602,12 +1648,41 @@ export class PostgresQueryRunner extends BaseQueryRunner {
1602
1648
  return `("t"."schema" = '${schema}' AND "t"."name" = '${tableName}')`;
1603
1649
  })
1604
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})`;
1605
1674
  const query = `SELECT "t".* FROM ${this.escapePath(this.getTypeormMetadataTableName())} "t" ` +
1606
1675
  `INNER JOIN "pg_catalog"."pg_class" "c" ON "c"."relname" = "t"."name" ` +
1607
1676
  `INNER JOIN "pg_namespace" "n" ON "n"."oid" = "c"."relnamespace" AND "n"."nspname" = "t"."schema" ` +
1608
1677
  `WHERE "t"."type" IN ('${MetadataTableType.VIEW}', '${MetadataTableType.MATERIALIZED_VIEW}') ${viewsCondition ? `AND (${viewsCondition})` : ""}`;
1609
1678
  const dbViews = await this.query(query);
1679
+ const dbIndices = await this.query(indicesSql);
1610
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"]);
1611
1686
  const view = new View();
1612
1687
  const schema = dbView["schema"] === currentSchema &&
1613
1688
  !this.driver.options.schema
@@ -1619,6 +1694,22 @@ export class PostgresQueryRunner extends BaseQueryRunner {
1619
1694
  view.expression = dbView["value"];
1620
1695
  view.materialized =
1621
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
+ });
1622
1713
  return view;
1623
1714
  });
1624
1715
  }
@@ -2315,6 +2406,15 @@ export class PostgresQueryRunner extends BaseQueryRunner {
2315
2406
  .join(", ");
2316
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 : ""}`);
2317
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
+ }
2318
2418
  /**
2319
2419
  * Builds drop index sql.
2320
2420
  */