typeorm 0.3.12-dev.3e1caf0 → 0.3.12-dev.54ca9dd

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 (192) hide show
  1. package/browser/data-source/DataSource.js +1 -1
  2. package/browser/data-source/DataSource.js.map +1 -1
  3. package/browser/decorator/options/SpatialColumnOptions.d.ts +2 -1
  4. package/browser/decorator/options/SpatialColumnOptions.js.map +1 -1
  5. package/browser/driver/Driver.d.ts +1 -1
  6. package/browser/driver/Driver.js.map +1 -1
  7. package/browser/driver/DriverUtils.js +1 -1
  8. package/browser/driver/DriverUtils.js.map +1 -1
  9. package/browser/driver/aurora-mysql/AuroraMysqlDriver.d.ts +2 -1
  10. package/browser/driver/aurora-mysql/AuroraMysqlDriver.js +1 -1
  11. package/browser/driver/aurora-mysql/AuroraMysqlDriver.js.map +1 -1
  12. package/browser/driver/better-sqlite3/BetterSqlite3ConnectionOptions.d.ts +6 -0
  13. package/browser/driver/better-sqlite3/BetterSqlite3ConnectionOptions.js.map +1 -1
  14. package/browser/driver/better-sqlite3/BetterSqlite3Driver.js +3 -1
  15. package/browser/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -1
  16. package/browser/driver/cockroachdb/CockroachConnectionOptions.d.ts +5 -0
  17. package/browser/driver/cockroachdb/CockroachConnectionOptions.js.map +1 -1
  18. package/browser/driver/cockroachdb/CockroachDriver.d.ts +19 -14
  19. package/browser/driver/cockroachdb/CockroachDriver.js +128 -13
  20. package/browser/driver/cockroachdb/CockroachDriver.js.map +1 -1
  21. package/browser/driver/cockroachdb/CockroachQueryRunner.d.ts +28 -0
  22. package/browser/driver/cockroachdb/CockroachQueryRunner.js +283 -11
  23. package/browser/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  24. package/browser/driver/mongodb/MongoDriver.d.ts +5 -0
  25. package/browser/driver/mongodb/MongoDriver.js.map +1 -1
  26. package/browser/driver/mysql/MysqlDriver.d.ts +2 -1
  27. package/browser/driver/mysql/MysqlDriver.js +1 -1
  28. package/browser/driver/mysql/MysqlDriver.js.map +1 -1
  29. package/browser/driver/oracle/OracleDriver.d.ts +5 -0
  30. package/browser/driver/oracle/OracleDriver.js +4 -0
  31. package/browser/driver/oracle/OracleDriver.js.map +1 -1
  32. package/browser/driver/postgres/PostgresDriver.d.ts +2 -1
  33. package/browser/driver/postgres/PostgresDriver.js +1 -1
  34. package/browser/driver/postgres/PostgresDriver.js.map +1 -1
  35. package/browser/driver/postgres/PostgresQueryRunner.js +12 -37
  36. package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
  37. package/browser/driver/sap/SapDriver.d.ts +5 -0
  38. package/browser/driver/sap/SapDriver.js +4 -0
  39. package/browser/driver/sap/SapDriver.js.map +1 -1
  40. package/browser/driver/spanner/SpannerDriver.d.ts +2 -1
  41. package/browser/driver/spanner/SpannerDriver.js +1 -1
  42. package/browser/driver/spanner/SpannerDriver.js.map +1 -1
  43. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.d.ts +2 -1
  44. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js +13 -1
  45. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
  46. package/browser/driver/sqlserver/SqlServerDriver.d.ts +5 -0
  47. package/browser/driver/sqlserver/SqlServerDriver.js +4 -0
  48. package/browser/driver/sqlserver/SqlServerDriver.js.map +1 -1
  49. package/browser/driver/types/GeoJsonTypes.d.ts +87 -0
  50. package/browser/driver/types/GeoJsonTypes.js +3 -0
  51. package/browser/driver/types/GeoJsonTypes.js.map +1 -0
  52. package/browser/driver/types/UpsertType.d.ts +1 -1
  53. package/browser/driver/types/UpsertType.js.map +1 -1
  54. package/browser/entity-manager/EntityManager.js +2 -0
  55. package/browser/entity-manager/EntityManager.js.map +1 -1
  56. package/browser/find-options/FindOperatorType.d.ts +1 -1
  57. package/browser/find-options/FindOperatorType.js.map +1 -1
  58. package/browser/find-options/FindOptionsWhere.d.ts +5 -1
  59. package/browser/find-options/FindOptionsWhere.js.map +1 -1
  60. package/browser/find-options/operator/JsonContains.d.ts +6 -0
  61. package/browser/find-options/operator/JsonContains.js +10 -0
  62. package/browser/find-options/operator/JsonContains.js.map +1 -0
  63. package/browser/index.d.ts +3 -0
  64. package/browser/index.js +3 -0
  65. package/browser/index.js.map +1 -1
  66. package/browser/metadata-builder/RelationJoinColumnBuilder.js +2 -1
  67. package/browser/metadata-builder/RelationJoinColumnBuilder.js.map +1 -1
  68. package/browser/migration/MigrationExecutor.js +1 -1
  69. package/browser/migration/MigrationExecutor.js.map +1 -1
  70. package/browser/naming-strategy/LegacyOracleNamingStrategy.d.ts +21 -0
  71. package/browser/naming-strategy/LegacyOracleNamingStrategy.js +46 -0
  72. package/browser/naming-strategy/LegacyOracleNamingStrategy.js.map +1 -0
  73. package/browser/persistence/SubjectTopoligicalSorter.js +2 -6
  74. package/browser/persistence/SubjectTopoligicalSorter.js.map +1 -1
  75. package/browser/platform/BrowserPlatformTools.js +2 -2
  76. package/browser/platform/BrowserPlatformTools.js.map +1 -1
  77. package/browser/query-builder/InsertOrUpdateOptions.d.ts +2 -0
  78. package/browser/query-builder/InsertOrUpdateOptions.js.map +1 -1
  79. package/browser/query-builder/InsertQueryBuilder.d.ts +4 -4
  80. package/browser/query-builder/InsertQueryBuilder.js +80 -74
  81. package/browser/query-builder/InsertQueryBuilder.js.map +1 -1
  82. package/browser/query-builder/QueryBuilder.d.ts +4 -0
  83. package/browser/query-builder/QueryBuilder.js +22 -3
  84. package/browser/query-builder/QueryBuilder.js.map +1 -1
  85. package/browser/query-builder/QueryExpressionMap.d.ts +7 -0
  86. package/browser/query-builder/QueryExpressionMap.js +4 -0
  87. package/browser/query-builder/QueryExpressionMap.js.map +1 -1
  88. package/browser/query-builder/SelectQueryBuilder.d.ts +5 -1
  89. package/browser/query-builder/SelectQueryBuilder.js +30 -5
  90. package/browser/query-builder/SelectQueryBuilder.js.map +1 -1
  91. package/browser/query-builder/UpdateQueryBuilder.js +1 -2
  92. package/browser/query-builder/UpdateQueryBuilder.js.map +1 -1
  93. package/browser/query-builder/WhereClause.d.ts +1 -1
  94. package/browser/query-builder/WhereClause.js.map +1 -1
  95. package/browser/repository/UpsertOptions.d.ts +7 -0
  96. package/browser/repository/UpsertOptions.js.map +1 -1
  97. package/data-source/DataSource.js +1 -1
  98. package/data-source/DataSource.js.map +1 -1
  99. package/decorator/options/SpatialColumnOptions.d.ts +2 -1
  100. package/decorator/options/SpatialColumnOptions.js.map +1 -1
  101. package/driver/Driver.d.ts +1 -1
  102. package/driver/Driver.js.map +1 -1
  103. package/driver/DriverUtils.js +1 -1
  104. package/driver/DriverUtils.js.map +1 -1
  105. package/driver/aurora-mysql/AuroraMysqlDriver.d.ts +2 -1
  106. package/driver/aurora-mysql/AuroraMysqlDriver.js +1 -1
  107. package/driver/aurora-mysql/AuroraMysqlDriver.js.map +1 -1
  108. package/driver/better-sqlite3/BetterSqlite3ConnectionOptions.d.ts +6 -0
  109. package/driver/better-sqlite3/BetterSqlite3ConnectionOptions.js.map +1 -1
  110. package/driver/better-sqlite3/BetterSqlite3Driver.js +3 -1
  111. package/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -1
  112. package/driver/cockroachdb/CockroachConnectionOptions.d.ts +5 -0
  113. package/driver/cockroachdb/CockroachConnectionOptions.js.map +1 -1
  114. package/driver/cockroachdb/CockroachDriver.d.ts +19 -14
  115. package/driver/cockroachdb/CockroachDriver.js +128 -13
  116. package/driver/cockroachdb/CockroachDriver.js.map +1 -1
  117. package/driver/cockroachdb/CockroachQueryRunner.d.ts +28 -0
  118. package/driver/cockroachdb/CockroachQueryRunner.js +283 -11
  119. package/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  120. package/driver/mongodb/MongoDriver.d.ts +5 -0
  121. package/driver/mongodb/MongoDriver.js.map +1 -1
  122. package/driver/mysql/MysqlDriver.d.ts +2 -1
  123. package/driver/mysql/MysqlDriver.js +1 -1
  124. package/driver/mysql/MysqlDriver.js.map +1 -1
  125. package/driver/oracle/OracleDriver.d.ts +5 -0
  126. package/driver/oracle/OracleDriver.js +4 -0
  127. package/driver/oracle/OracleDriver.js.map +1 -1
  128. package/driver/postgres/PostgresDriver.d.ts +2 -1
  129. package/driver/postgres/PostgresDriver.js +1 -1
  130. package/driver/postgres/PostgresDriver.js.map +1 -1
  131. package/driver/postgres/PostgresQueryRunner.js +12 -37
  132. package/driver/postgres/PostgresQueryRunner.js.map +1 -1
  133. package/driver/sap/SapDriver.d.ts +5 -0
  134. package/driver/sap/SapDriver.js +4 -0
  135. package/driver/sap/SapDriver.js.map +1 -1
  136. package/driver/spanner/SpannerDriver.d.ts +2 -1
  137. package/driver/spanner/SpannerDriver.js +1 -1
  138. package/driver/spanner/SpannerDriver.js.map +1 -1
  139. package/driver/sqlite-abstract/AbstractSqliteDriver.d.ts +2 -1
  140. package/driver/sqlite-abstract/AbstractSqliteDriver.js +13 -1
  141. package/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
  142. package/driver/sqlserver/SqlServerDriver.d.ts +5 -0
  143. package/driver/sqlserver/SqlServerDriver.js +4 -0
  144. package/driver/sqlserver/SqlServerDriver.js.map +1 -1
  145. package/driver/types/GeoJsonTypes.d.ts +87 -0
  146. package/driver/types/GeoJsonTypes.js +4 -0
  147. package/driver/types/GeoJsonTypes.js.map +1 -0
  148. package/driver/types/UpsertType.d.ts +1 -1
  149. package/driver/types/UpsertType.js.map +1 -1
  150. package/entity-manager/EntityManager.js +2 -0
  151. package/entity-manager/EntityManager.js.map +1 -1
  152. package/find-options/FindOperatorType.d.ts +1 -1
  153. package/find-options/FindOperatorType.js.map +1 -1
  154. package/find-options/FindOptionsWhere.d.ts +5 -1
  155. package/find-options/FindOptionsWhere.js.map +1 -1
  156. package/find-options/operator/JsonContains.d.ts +6 -0
  157. package/find-options/operator/JsonContains.js +14 -0
  158. package/find-options/operator/JsonContains.js.map +1 -0
  159. package/index.d.ts +3 -0
  160. package/index.js +5 -1
  161. package/index.js.map +1 -1
  162. package/index.mjs +4 -0
  163. package/metadata-builder/RelationJoinColumnBuilder.js +2 -1
  164. package/metadata-builder/RelationJoinColumnBuilder.js.map +1 -1
  165. package/migration/MigrationExecutor.js +1 -1
  166. package/migration/MigrationExecutor.js.map +1 -1
  167. package/naming-strategy/LegacyOracleNamingStrategy.d.ts +21 -0
  168. package/naming-strategy/LegacyOracleNamingStrategy.js +50 -0
  169. package/naming-strategy/LegacyOracleNamingStrategy.js.map +1 -0
  170. package/package.json +1 -1
  171. package/persistence/SubjectTopoligicalSorter.js +2 -6
  172. package/persistence/SubjectTopoligicalSorter.js.map +1 -1
  173. package/query-builder/InsertOrUpdateOptions.d.ts +2 -0
  174. package/query-builder/InsertOrUpdateOptions.js.map +1 -1
  175. package/query-builder/InsertQueryBuilder.d.ts +4 -4
  176. package/query-builder/InsertQueryBuilder.js +80 -74
  177. package/query-builder/InsertQueryBuilder.js.map +1 -1
  178. package/query-builder/QueryBuilder.d.ts +4 -0
  179. package/query-builder/QueryBuilder.js +22 -3
  180. package/query-builder/QueryBuilder.js.map +1 -1
  181. package/query-builder/QueryExpressionMap.d.ts +7 -0
  182. package/query-builder/QueryExpressionMap.js +4 -0
  183. package/query-builder/QueryExpressionMap.js.map +1 -1
  184. package/query-builder/SelectQueryBuilder.d.ts +5 -1
  185. package/query-builder/SelectQueryBuilder.js +30 -5
  186. package/query-builder/SelectQueryBuilder.js.map +1 -1
  187. package/query-builder/UpdateQueryBuilder.js +1 -2
  188. package/query-builder/UpdateQueryBuilder.js.map +1 -1
  189. package/query-builder/WhereClause.d.ts +1 -1
  190. package/query-builder/WhereClause.js.map +1 -1
  191. package/repository/UpsertOptions.d.ts +7 -0
  192. package/repository/UpsertOptions.js.map +1 -1
package/package.json CHANGED
@@ -1 +1 @@
1
- { "name": "typeorm", "private": false, "version": "0.3.12-dev.3e1caf0", "description": "Data-Mapper ORM for TypeScript, ES7, ES6, ES5. Supports MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server, Oracle, MongoDB databases.", "license": "MIT", "readmeFilename": "README.md", "author": { "name": "Umed Khudoiberdiev", "email": "pleerock.me@gmail.com" }, "engines": { "node": ">= 12.9.0" }, "exports": { ".": { "types": "./index.d.ts", "node": { "import": "./index.mjs", "require": "./index.js", "types": "./index.d.ts" }, "browser": { "require": "./index.js", "import": "./browser/index.js", "default": "./index.js" } }, "./browser": { "types": "./index.d.ts", "default": "./browser/index.js" }, "./*.js": "./*.js", "./*": { "require": "./*.js", "import": "./*" } }, "main": "./index.js", "module": "./index.mjs", "types": "./index.d.ts", "browser": { "./browser/connection/ConnectionOptionsReader.js": "./browser/platform/BrowserConnectionOptionsReaderDummy.js", "./browser/connection/options-reader/ConnectionOptionsXmlReader.js": "./browser/platform/BrowserConnectionOptionsReaderDummy.js", "./browser/connection/options-reader/ConnectionOptionsYmlReader.js": "./browser/platform/BrowserConnectionOptionsReaderDummy.js", "./browser/driver/aurora-data-api/AuroraDataApiDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/better-sqlite3/BetterSqlite3Driver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/cockroachdb/CockroachDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/mongodb/MongoDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/mongodb/MongoQueryRunner.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/mysql/MysqlDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/oracle/OracleDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/postgres/PostgresDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/sap/SapDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/sqlite/SqliteDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/sqlserver/SqlServerDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/entity-manager/MongoEntityManager.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/logger/FileLogger.js": "./browser/platform/BrowserFileLoggerDummy.js", "./browser/platform/PlatformTools.js": "./browser/platform/BrowserPlatformTools.js", "./browser/repository/MongoRepository.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/util/DirectoryExportedClassesLoader.js": "./browser/platform/BrowserDirectoryExportedClassesLoader.js", "./index.js": "./browser/index.js", "./index.mjs": "./browser/index.js" }, "repository": { "type": "git", "url": "https://github.com/typeorm/typeorm.git" }, "bugs": { "url": "https://github.com/typeorm/typeorm/issues" }, "homepage": "https://typeorm.io", "tags": [ "orm", "typescript", "typescript-orm", "mysql", "mysql-orm", "postgresql", "postgresql-orm", "mariadb", "mariadb-orm", "spanner", "sqlite", "sqlite-orm", "sql-server", "sql-server-orm", "oracle", "oracle-orm", "cloud-spanner", "cloud-spanner-orm" ], "devDependencies": { "@types/app-root-path": "^1.2.4", "@types/chai": "^4.2.15", "@types/chai-as-promised": "^7.1.3", "@types/debug": "^4.1.5", "@types/js-yaml": "^4.0.0", "@types/mkdirp": "^1.0.1", "@types/mocha": "^8.2.1", "@types/node": "^14.14.31", "@types/rimraf": "^3.0.0", "@types/sha.js": "^2.4.0", "@types/sinon": "^9.0.10", "@types/source-map-support": "^0.5.3", "@types/uuid": "^8.3.4", "@types/xml2js": "^0.4.8", "@types/yargs": "^17.0.2", "better-sqlite3": "^8.0.0", "chai": "^4.3.0", "chai-as-promised": "^7.1.1", "class-transformer": "^0.4.0", "conventional-changelog-angular": "^5.0.12", "conventional-changelog-cli": "^2.1.1", "del": "^6.0.0", "gulp": "^4.0.2", "gulp-istanbul": "^1.1.3", "gulp-mocha": "^8.0.0", "gulp-rename": "^2.0.0", "gulp-replace": "^1.0.0", "gulp-shell": "^0.8.0", "gulp-sourcemaps": "^3.0.0", "gulp-typescript": "^6.0.0-alpha.1", "gulpclass": "^0.2.0", "husky": "^5.1.1", "mocha": "^8.3.0", "mongodb": "^3.6.4", "mssql": "^7.3.0", "mysql": "^2.18.1", "mysql2": "^2.2.5", "pg": "^8.5.1", "pg-query-stream": "^4.0.0", "prettier": "^2.5.1", "redis": "^3.1.1", "remap-istanbul": "^0.13.0", "rimraf": "^3.0.2", "sinon": "^9.2.4", "sinon-chai": "^3.5.0", "source-map-support": "^0.5.19", "sql.js": "^1.4.0", "sqlite3": "^5.0.11", "ts-node": "^10.7.0", "typeorm-aurora-data-api-driver": "^2.0.0", "typescript": "^4.8.2" }, "peerDependencies": { "@google-cloud/spanner": "^5.18.0", "@sap/hana-client": "^2.12.25", "better-sqlite3": "^7.1.2 || ^8.0.0", "hdb-pool": "^0.1.6", "ioredis": "^5.0.4", "mongodb": "^3.6.0", "mssql": "^7.3.0", "mysql2": "^2.2.5", "oracledb": "^5.1.0", "pg": "^8.5.1", "pg-native": "^3.0.0", "pg-query-stream": "^4.0.0", "redis": "^3.1.1 || ^4.0.0", "sql.js": "^1.4.0", "sqlite3": "^5.0.3", "ts-node": "^10.7.0", "typeorm-aurora-data-api-driver": "^2.0.0" }, "peerDependenciesMeta": { "@google-cloud/spanner": { "optional": true }, "@sap/hana-client": { "optional": true }, "better-sqlite3": { "optional": true }, "hdb-pool": { "optional": true }, "ioredis": { "optional": true }, "mongodb": { "optional": true }, "mssql": { "optional": true }, "mysql2": { "optional": true }, "oracledb": { "optional": true }, "pg": { "optional": true }, "pg-native": { "optional": true }, "pg-query-stream": { "optional": true }, "redis": { "optional": true }, "sql.js": { "optional": true }, "sqlite3": { "optional": true }, "ts-node": { "optional": true }, "typeorm-aurora-data-api-driver": { "optional": true } }, "dependencies": { "@sqltools/formatter": "^1.2.2", "app-root-path": "^3.0.0", "buffer": "^6.0.3", "chalk": "^4.1.0", "cli-highlight": "^2.1.11", "date-fns": "^2.28.0", "debug": "^4.3.3", "dotenv": "^16.0.0", "glob": "^7.2.0", "js-yaml": "^4.1.0", "mkdirp": "^1.0.4", "reflect-metadata": "^0.1.13", "sha.js": "^2.4.11", "tslib": "^2.3.1", "uuid": "^8.3.2", "xml2js": "^0.4.23", "yargs": "^17.3.1" }, "scripts": { "test": "rimraf ./build && tsc && mocha --file ./build/compiled/test/utils/test-setup.js --bail --recursive --timeout 60000 ./build/compiled/test", "test-fast": "mocha --file ./build/compiled/test/utils/test-setup.js --bail --recursive --timeout 60000 ./build/compiled/test", "compile": "rimraf ./build && tsc", "watch": "./node_modules/.bin/tsc -w", "package": "gulp package", "pack": "gulp pack", "lint": "prettier --check \"./src/**/*.ts\" \"./test/**/*.ts\" \"./sample/**/*.ts\"", "format": "prettier --write \"./src/**/*.ts\" \"./test/**/*.ts\" \"./sample/**/*.ts\"", "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s -r 2" }, "bin": { "typeorm": "./cli.js", "typeorm-ts-node-commonjs": "./cli-ts-node-commonjs.js", "typeorm-ts-node-esm": "./cli-ts-node-esm.js" }, "funding": "https://opencollective.com/typeorm", "collective": { "type": "opencollective", "url": "https://opencollective.com/typeorm", "logo": "https://opencollective.com/opencollective/logo.txt" }, "nyc": { "all": true, "cache": false, "exclude": [ "**/*.d.ts" ], "extension": [ ".ts" ], "include": [ "build/compiled/src/**", "src/**" ], "reporter": "json" } }
1
+ { "name": "typeorm", "private": false, "version": "0.3.12-dev.54ca9dd", "description": "Data-Mapper ORM for TypeScript, ES7, ES6, ES5. Supports MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server, Oracle, MongoDB databases.", "license": "MIT", "readmeFilename": "README.md", "author": { "name": "Umed Khudoiberdiev", "email": "pleerock.me@gmail.com" }, "engines": { "node": ">= 12.9.0" }, "exports": { ".": { "types": "./index.d.ts", "node": { "import": "./index.mjs", "require": "./index.js", "types": "./index.d.ts" }, "browser": { "require": "./index.js", "import": "./browser/index.js", "default": "./index.js" } }, "./browser": { "types": "./index.d.ts", "default": "./browser/index.js" }, "./*.js": "./*.js", "./*": { "require": "./*.js", "import": "./*" } }, "main": "./index.js", "module": "./index.mjs", "types": "./index.d.ts", "browser": { "./browser/connection/ConnectionOptionsReader.js": "./browser/platform/BrowserConnectionOptionsReaderDummy.js", "./browser/connection/options-reader/ConnectionOptionsXmlReader.js": "./browser/platform/BrowserConnectionOptionsReaderDummy.js", "./browser/connection/options-reader/ConnectionOptionsYmlReader.js": "./browser/platform/BrowserConnectionOptionsReaderDummy.js", "./browser/driver/aurora-data-api/AuroraDataApiDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/better-sqlite3/BetterSqlite3Driver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/cockroachdb/CockroachDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/mongodb/MongoDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/mongodb/MongoQueryRunner.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/mysql/MysqlDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/oracle/OracleDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/postgres/PostgresDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/sap/SapDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/sqlite/SqliteDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/sqlserver/SqlServerDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/entity-manager/MongoEntityManager.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/logger/FileLogger.js": "./browser/platform/BrowserFileLoggerDummy.js", "./browser/platform/PlatformTools.js": "./browser/platform/BrowserPlatformTools.js", "./browser/repository/MongoRepository.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/util/DirectoryExportedClassesLoader.js": "./browser/platform/BrowserDirectoryExportedClassesLoader.js", "./index.js": "./browser/index.js", "./index.mjs": "./browser/index.js" }, "repository": { "type": "git", "url": "https://github.com/typeorm/typeorm.git" }, "bugs": { "url": "https://github.com/typeorm/typeorm/issues" }, "homepage": "https://typeorm.io", "tags": [ "orm", "typescript", "typescript-orm", "mysql", "mysql-orm", "postgresql", "postgresql-orm", "mariadb", "mariadb-orm", "spanner", "sqlite", "sqlite-orm", "sql-server", "sql-server-orm", "oracle", "oracle-orm", "cloud-spanner", "cloud-spanner-orm" ], "devDependencies": { "@types/app-root-path": "^1.2.4", "@types/chai": "^4.2.15", "@types/chai-as-promised": "^7.1.3", "@types/debug": "^4.1.5", "@types/js-yaml": "^4.0.0", "@types/mkdirp": "^1.0.1", "@types/mocha": "^8.2.1", "@types/node": "^14.14.31", "@types/rimraf": "^3.0.0", "@types/sha.js": "^2.4.0", "@types/sinon": "^9.0.10", "@types/source-map-support": "^0.5.3", "@types/uuid": "^8.3.4", "@types/xml2js": "^0.4.8", "@types/yargs": "^17.0.2", "better-sqlite3": "^8.0.0", "chai": "^4.3.0", "chai-as-promised": "^7.1.1", "class-transformer": "^0.4.0", "conventional-changelog-angular": "^5.0.12", "conventional-changelog-cli": "^2.1.1", "del": "^6.0.0", "gulp": "^4.0.2", "gulp-istanbul": "^1.1.3", "gulp-mocha": "^8.0.0", "gulp-rename": "^2.0.0", "gulp-replace": "^1.0.0", "gulp-shell": "^0.8.0", "gulp-sourcemaps": "^3.0.0", "gulp-typescript": "^6.0.0-alpha.1", "gulpclass": "^0.2.0", "husky": "^5.1.1", "mocha": "^8.3.0", "mongodb": "^3.6.4", "mssql": "^7.3.0", "mysql": "^2.18.1", "mysql2": "^2.2.5", "pg": "^8.5.1", "pg-query-stream": "^4.0.0", "prettier": "^2.5.1", "redis": "^3.1.1", "remap-istanbul": "^0.13.0", "rimraf": "^3.0.2", "sinon": "^9.2.4", "sinon-chai": "^3.5.0", "source-map-support": "^0.5.19", "sql.js": "^1.4.0", "sqlite3": "^5.0.11", "ts-node": "^10.7.0", "typeorm-aurora-data-api-driver": "^2.0.0", "typescript": "^4.8.2" }, "peerDependencies": { "@google-cloud/spanner": "^5.18.0", "@sap/hana-client": "^2.12.25", "better-sqlite3": "^7.1.2 || ^8.0.0", "hdb-pool": "^0.1.6", "ioredis": "^5.0.4", "mongodb": "^3.6.0", "mssql": "^7.3.0", "mysql2": "^2.2.5 || ^3.0.1", "oracledb": "^5.1.0", "pg": "^8.5.1", "pg-native": "^3.0.0", "pg-query-stream": "^4.0.0", "redis": "^3.1.1 || ^4.0.0", "sql.js": "^1.4.0", "sqlite3": "^5.0.3", "ts-node": "^10.7.0", "typeorm-aurora-data-api-driver": "^2.0.0" }, "peerDependenciesMeta": { "@google-cloud/spanner": { "optional": true }, "@sap/hana-client": { "optional": true }, "better-sqlite3": { "optional": true }, "hdb-pool": { "optional": true }, "ioredis": { "optional": true }, "mongodb": { "optional": true }, "mssql": { "optional": true }, "mysql2": { "optional": true }, "oracledb": { "optional": true }, "pg": { "optional": true }, "pg-native": { "optional": true }, "pg-query-stream": { "optional": true }, "redis": { "optional": true }, "sql.js": { "optional": true }, "sqlite3": { "optional": true }, "ts-node": { "optional": true }, "typeorm-aurora-data-api-driver": { "optional": true } }, "dependencies": { "@sqltools/formatter": "^1.2.2", "app-root-path": "^3.0.0", "buffer": "^6.0.3", "chalk": "^4.1.0", "cli-highlight": "^2.1.11", "date-fns": "^2.28.0", "debug": "^4.3.3", "dotenv": "^16.0.0", "glob": "^7.2.0", "js-yaml": "^4.1.0", "mkdirp": "^1.0.4", "reflect-metadata": "^0.1.13", "sha.js": "^2.4.11", "tslib": "^2.3.1", "uuid": "^8.3.2", "xml2js": "^0.4.23", "yargs": "^17.3.1" }, "scripts": { "test": "rimraf ./build && tsc && mocha --file ./build/compiled/test/utils/test-setup.js --bail --recursive --timeout 60000 ./build/compiled/test", "test-fast": "mocha --file ./build/compiled/test/utils/test-setup.js --bail --recursive --timeout 60000 ./build/compiled/test", "compile": "rimraf ./build && tsc", "watch": "./node_modules/.bin/tsc -w", "package": "gulp package", "pack": "gulp pack", "lint": "prettier --check \"./src/**/*.ts\" \"./test/**/*.ts\" \"./sample/**/*.ts\"", "format": "prettier --write \"./src/**/*.ts\" \"./test/**/*.ts\" \"./sample/**/*.ts\"", "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s -r 2" }, "bin": { "typeorm": "./cli.js", "typeorm-ts-node-commonjs": "./cli-ts-node-commonjs.js", "typeorm-ts-node-esm": "./cli-ts-node-esm.js" }, "funding": "https://opencollective.com/typeorm", "collective": { "type": "opencollective", "url": "https://opencollective.com/typeorm", "logo": "https://opencollective.com/opencollective/logo.txt" }, "nyc": { "all": true, "cache": false, "exclude": [ "**/*.d.ts" ], "extension": [ ".ts" ], "include": [ "build/compiled/src/**", "src/**" ], "reporter": "json" } }
@@ -42,12 +42,8 @@ class SubjectTopoligicalSorter {
42
42
  // go thought each of them and find all subjects with sorted entity target
43
43
  // add those sorted targets and remove them from original array of targets
44
44
  sortedNonNullableEntityTargets.forEach((sortedEntityTarget) => {
45
- const entityTargetSubjects = this.subjects.filter((subject) => {
46
- var _a;
47
- return subject.metadata.targetName === sortedEntityTarget ||
48
- ((_a = subject.metadata.parentEntityMetadata) === null || _a === void 0 ? void 0 : _a.targetName) ===
49
- sortedEntityTarget;
50
- });
45
+ const entityTargetSubjects = this.subjects.filter((subject) => subject.metadata.targetName === sortedEntityTarget ||
46
+ subject.metadata.inheritanceTree.some((s) => s.name === sortedEntityTarget));
51
47
  sortedSubjects.push(...entityTargetSubjects);
52
48
  this.removeAlreadySorted(entityTargetSubjects);
53
49
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/persistence/SubjectTopoligicalSorter.ts"],"names":[],"mappings":"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","file":"SubjectTopoligicalSorter.js","sourcesContent":["import { Subject } from \"./Subject\"\nimport { EntityMetadata } from \"../metadata/EntityMetadata\"\nimport { TypeORMError } from \"../error\"\n\n/**\n * Orders insert or remove subjects in proper order (using topological sorting)\n * to make sure insert or remove operations are executed in a proper order.\n */\nexport class SubjectTopoligicalSorter {\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * Insert subjects needs to be sorted.\n */\n subjects: Subject[]\n\n /**\n * Unique list of entity metadatas of this subject.\n */\n metadatas: EntityMetadata[]\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(subjects: Subject[]) {\n this.subjects = [...subjects] // copy subjects to prevent changing of sent array\n this.metadatas = this.getUniqueMetadatas(this.subjects)\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Sorts (orders) subjects in their topological order.\n */\n sort(direction: \"insert\" | \"delete\"): Subject[] {\n // if there are no metadatas it probably mean there is no subjects... we don't have to do anything here\n if (!this.metadatas.length) return this.subjects\n\n const sortedSubjects: Subject[] = []\n\n // first if we sort for deletion all junction subjects\n // junction subjects are subjects without entity and database entity set\n if (direction === \"delete\") {\n const junctionSubjects = this.subjects.filter(\n (subject) => !subject.entity && !subject.databaseEntity,\n )\n sortedSubjects.push(...junctionSubjects)\n this.removeAlreadySorted(junctionSubjects)\n }\n\n // next we always insert entities with non-nullable relations, sort them first\n const nonNullableDependencies = this.getNonNullableDependencies()\n let sortedNonNullableEntityTargets = this.toposort(\n nonNullableDependencies,\n )\n if (direction === \"insert\")\n sortedNonNullableEntityTargets =\n sortedNonNullableEntityTargets.reverse()\n\n // so we have a sorted entity targets\n // go thought each of them and find all subjects with sorted entity target\n // add those sorted targets and remove them from original array of targets\n sortedNonNullableEntityTargets.forEach((sortedEntityTarget) => {\n const entityTargetSubjects = this.subjects.filter(\n (subject) =>\n subject.metadata.targetName === sortedEntityTarget ||\n subject.metadata.parentEntityMetadata?.targetName ===\n sortedEntityTarget,\n )\n sortedSubjects.push(...entityTargetSubjects)\n this.removeAlreadySorted(entityTargetSubjects)\n })\n\n // next sort all other entities\n // same process as in above but with other entities\n const otherDependencies: string[][] = this.getDependencies()\n let sortedOtherEntityTargets = this.toposort(otherDependencies)\n if (direction === \"insert\")\n sortedOtherEntityTargets = sortedOtherEntityTargets.reverse()\n\n sortedOtherEntityTargets.forEach((sortedEntityTarget) => {\n const entityTargetSubjects = this.subjects.filter(\n (subject) => subject.metadata.targetName === sortedEntityTarget,\n )\n sortedSubjects.push(...entityTargetSubjects)\n this.removeAlreadySorted(entityTargetSubjects)\n })\n\n // if we have something left in the subjects add them as well\n sortedSubjects.push(...this.subjects)\n return sortedSubjects\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Removes already sorted subjects from this.subjects list of subjects.\n */\n protected removeAlreadySorted(subjects: Subject[]) {\n subjects.forEach((subject) => {\n this.subjects.splice(this.subjects.indexOf(subject), 1)\n })\n }\n\n /**\n * Extracts all unique metadatas from the given subjects.\n */\n protected getUniqueMetadatas(subjects: Subject[]) {\n const metadatas: EntityMetadata[] = []\n subjects.forEach((subject) => {\n if (metadatas.indexOf(subject.metadata) === -1)\n metadatas.push(subject.metadata)\n })\n return metadatas\n }\n\n /**\n * Gets dependency tree for all entity metadatas with non-nullable relations.\n * We need to execute insertions first for entities which non-nullable relations.\n */\n protected getNonNullableDependencies(): string[][] {\n return this.metadatas.reduce((dependencies, metadata) => {\n metadata.relationsWithJoinColumns.forEach((relation) => {\n if (relation.isNullable) return\n\n dependencies.push([\n metadata.targetName,\n relation.inverseEntityMetadata.targetName,\n ])\n })\n return dependencies\n }, [] as string[][])\n }\n\n /**\n * Gets dependency tree for all entity metadatas with non-nullable relations.\n * We need to execute insertions first for entities which non-nullable relations.\n */\n protected getDependencies(): string[][] {\n return this.metadatas.reduce((dependencies, metadata) => {\n metadata.relationsWithJoinColumns.forEach((relation) => {\n // if relation is self-referenced we skip it\n if (relation.inverseEntityMetadata === metadata) return\n\n dependencies.push([\n metadata.targetName,\n relation.inverseEntityMetadata.targetName,\n ])\n })\n return dependencies\n }, [] as string[][])\n }\n\n /**\n * Sorts given graph using topological sorting algorithm.\n *\n * Algorithm is kindly taken from https://github.com/marcelklehr/toposort repository.\n */\n protected toposort(edges: any[][]) {\n function uniqueNodes(arr: any[]) {\n let res = []\n for (let i = 0, len = arr.length; i < len; i++) {\n let edge: any = arr[i]\n if (res.indexOf(edge[0]) < 0) res.push(edge[0])\n if (res.indexOf(edge[1]) < 0) res.push(edge[1])\n }\n return res\n }\n\n const nodes = uniqueNodes(edges)\n let cursor = nodes.length,\n sorted = new Array(cursor),\n visited: any = {},\n i = cursor\n\n while (i--) {\n if (!visited[i]) visit(nodes[i], i, [])\n }\n\n function visit(node: any, i: number, predecessors: any[]) {\n if (predecessors.indexOf(node) >= 0) {\n throw new TypeORMError(\n \"Cyclic dependency: \" + JSON.stringify(node),\n ) // todo: better error\n }\n\n if (!~nodes.indexOf(node)) {\n throw new TypeORMError(\n \"Found unknown node. Make sure to provided all involved nodes. Unknown node: \" +\n JSON.stringify(node),\n )\n }\n\n if (visited[i]) return\n visited[i] = true\n\n // outgoing edges\n let outgoing = edges.filter(function (edge) {\n return edge[0] === node\n })\n if ((i = outgoing.length)) {\n let preds = predecessors.concat(node)\n do {\n let child = outgoing[--i][1]\n visit(child, nodes.indexOf(child), preds)\n } while (i)\n }\n\n sorted[--cursor] = node\n }\n\n return sorted\n }\n}\n"],"sourceRoot":".."}
1
+ {"version":3,"sources":["../../src/persistence/SubjectTopoligicalSorter.ts"],"names":[],"mappings":"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","file":"SubjectTopoligicalSorter.js","sourcesContent":["import { Subject } from \"./Subject\"\nimport { EntityMetadata } from \"../metadata/EntityMetadata\"\nimport { TypeORMError } from \"../error\"\n\n/**\n * Orders insert or remove subjects in proper order (using topological sorting)\n * to make sure insert or remove operations are executed in a proper order.\n */\nexport class SubjectTopoligicalSorter {\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * Insert subjects needs to be sorted.\n */\n subjects: Subject[]\n\n /**\n * Unique list of entity metadatas of this subject.\n */\n metadatas: EntityMetadata[]\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(subjects: Subject[]) {\n this.subjects = [...subjects] // copy subjects to prevent changing of sent array\n this.metadatas = this.getUniqueMetadatas(this.subjects)\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Sorts (orders) subjects in their topological order.\n */\n sort(direction: \"insert\" | \"delete\"): Subject[] {\n // if there are no metadatas it probably mean there is no subjects... we don't have to do anything here\n if (!this.metadatas.length) return this.subjects\n\n const sortedSubjects: Subject[] = []\n\n // first if we sort for deletion all junction subjects\n // junction subjects are subjects without entity and database entity set\n if (direction === \"delete\") {\n const junctionSubjects = this.subjects.filter(\n (subject) => !subject.entity && !subject.databaseEntity,\n )\n sortedSubjects.push(...junctionSubjects)\n this.removeAlreadySorted(junctionSubjects)\n }\n\n // next we always insert entities with non-nullable relations, sort them first\n const nonNullableDependencies = this.getNonNullableDependencies()\n let sortedNonNullableEntityTargets = this.toposort(\n nonNullableDependencies,\n )\n if (direction === \"insert\")\n sortedNonNullableEntityTargets =\n sortedNonNullableEntityTargets.reverse()\n\n // so we have a sorted entity targets\n // go thought each of them and find all subjects with sorted entity target\n // add those sorted targets and remove them from original array of targets\n sortedNonNullableEntityTargets.forEach((sortedEntityTarget) => {\n const entityTargetSubjects = this.subjects.filter(\n (subject) =>\n subject.metadata.targetName === sortedEntityTarget ||\n subject.metadata.inheritanceTree.some(\n (s) => s.name === sortedEntityTarget,\n ),\n )\n sortedSubjects.push(...entityTargetSubjects)\n this.removeAlreadySorted(entityTargetSubjects)\n })\n\n // next sort all other entities\n // same process as in above but with other entities\n const otherDependencies: string[][] = this.getDependencies()\n let sortedOtherEntityTargets = this.toposort(otherDependencies)\n if (direction === \"insert\")\n sortedOtherEntityTargets = sortedOtherEntityTargets.reverse()\n\n sortedOtherEntityTargets.forEach((sortedEntityTarget) => {\n const entityTargetSubjects = this.subjects.filter(\n (subject) => subject.metadata.targetName === sortedEntityTarget,\n )\n sortedSubjects.push(...entityTargetSubjects)\n this.removeAlreadySorted(entityTargetSubjects)\n })\n\n // if we have something left in the subjects add them as well\n sortedSubjects.push(...this.subjects)\n return sortedSubjects\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Removes already sorted subjects from this.subjects list of subjects.\n */\n protected removeAlreadySorted(subjects: Subject[]) {\n subjects.forEach((subject) => {\n this.subjects.splice(this.subjects.indexOf(subject), 1)\n })\n }\n\n /**\n * Extracts all unique metadatas from the given subjects.\n */\n protected getUniqueMetadatas(subjects: Subject[]) {\n const metadatas: EntityMetadata[] = []\n subjects.forEach((subject) => {\n if (metadatas.indexOf(subject.metadata) === -1)\n metadatas.push(subject.metadata)\n })\n return metadatas\n }\n\n /**\n * Gets dependency tree for all entity metadatas with non-nullable relations.\n * We need to execute insertions first for entities which non-nullable relations.\n */\n protected getNonNullableDependencies(): string[][] {\n return this.metadatas.reduce((dependencies, metadata) => {\n metadata.relationsWithJoinColumns.forEach((relation) => {\n if (relation.isNullable) return\n\n dependencies.push([\n metadata.targetName,\n relation.inverseEntityMetadata.targetName,\n ])\n })\n return dependencies\n }, [] as string[][])\n }\n\n /**\n * Gets dependency tree for all entity metadatas with non-nullable relations.\n * We need to execute insertions first for entities which non-nullable relations.\n */\n protected getDependencies(): string[][] {\n return this.metadatas.reduce((dependencies, metadata) => {\n metadata.relationsWithJoinColumns.forEach((relation) => {\n // if relation is self-referenced we skip it\n if (relation.inverseEntityMetadata === metadata) return\n\n dependencies.push([\n metadata.targetName,\n relation.inverseEntityMetadata.targetName,\n ])\n })\n return dependencies\n }, [] as string[][])\n }\n\n /**\n * Sorts given graph using topological sorting algorithm.\n *\n * Algorithm is kindly taken from https://github.com/marcelklehr/toposort repository.\n */\n protected toposort(edges: any[][]) {\n function uniqueNodes(arr: any[]) {\n let res = []\n for (let i = 0, len = arr.length; i < len; i++) {\n let edge: any = arr[i]\n if (res.indexOf(edge[0]) < 0) res.push(edge[0])\n if (res.indexOf(edge[1]) < 0) res.push(edge[1])\n }\n return res\n }\n\n const nodes = uniqueNodes(edges)\n let cursor = nodes.length,\n sorted = new Array(cursor),\n visited: any = {},\n i = cursor\n\n while (i--) {\n if (!visited[i]) visit(nodes[i], i, [])\n }\n\n function visit(node: any, i: number, predecessors: any[]) {\n if (predecessors.indexOf(node) >= 0) {\n throw new TypeORMError(\n \"Cyclic dependency: \" + JSON.stringify(node),\n ) // todo: better error\n }\n\n if (!~nodes.indexOf(node)) {\n throw new TypeORMError(\n \"Found unknown node. Make sure to provided all involved nodes. Unknown node: \" +\n JSON.stringify(node),\n )\n }\n\n if (visited[i]) return\n visited[i] = true\n\n // outgoing edges\n let outgoing = edges.filter(function (edge) {\n return edge[0] === node\n })\n if ((i = outgoing.length)) {\n let preds = predecessors.concat(node)\n do {\n let child = outgoing[--i][1]\n visit(child, nodes.indexOf(child), preds)\n } while (i)\n }\n\n sorted[--cursor] = node\n }\n\n return sorted\n }\n}\n"],"sourceRoot":".."}
@@ -1,3 +1,4 @@
1
+ import { UpsertType } from "../driver/types/UpsertType";
1
2
  export declare type InsertOrUpdateOptions = {
2
3
  /**
3
4
  * If true, postgres will skip the update if no values would be changed (reduces writes)
@@ -7,4 +8,5 @@ export declare type InsertOrUpdateOptions = {
7
8
  * If included, postgres will apply the index predicate to a conflict target (partial index)
8
9
  */
9
10
  indexPredicate?: string;
11
+ upsertType?: UpsertType;
10
12
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/query-builder/InsertOrUpdateOptions.ts"],"names":[],"mappings":"","file":"InsertOrUpdateOptions.js","sourcesContent":["export type InsertOrUpdateOptions = {\n /**\n * If true, postgres will skip the update if no values would be changed (reduces writes)\n */\n skipUpdateIfNoValuesChanged?: boolean\n /**\n * If included, postgres will apply the index predicate to a conflict target (partial index)\n */\n indexPredicate?: string\n}\n"],"sourceRoot":".."}
1
+ {"version":3,"sources":["../../src/query-builder/InsertOrUpdateOptions.ts"],"names":[],"mappings":"","file":"InsertOrUpdateOptions.js","sourcesContent":["import { UpsertType } from \"../driver/types/UpsertType\"\n\nexport type InsertOrUpdateOptions = {\n /**\n * If true, postgres will skip the update if no values would be changed (reduces writes)\n */\n skipUpdateIfNoValuesChanged?: boolean\n /**\n * If included, postgres will apply the index predicate to a conflict target (partial index)\n */\n indexPredicate?: string\n upsertType?: UpsertType\n}\n"],"sourceRoot":".."}
@@ -1,10 +1,10 @@
1
- import { QueryBuilder } from "./QueryBuilder";
2
- import { ObjectLiteral } from "../common/ObjectLiteral";
3
1
  import { EntityTarget } from "../common/EntityTarget";
4
- import { QueryDeepPartialEntity } from "./QueryPartialEntity";
5
- import { InsertResult } from "./result/InsertResult";
2
+ import { ObjectLiteral } from "../common/ObjectLiteral";
6
3
  import { ColumnMetadata } from "../metadata/ColumnMetadata";
7
4
  import { InsertOrUpdateOptions } from "./InsertOrUpdateOptions";
5
+ import { QueryBuilder } from "./QueryBuilder";
6
+ import { QueryDeepPartialEntity } from "./QueryPartialEntity";
7
+ import { InsertResult } from "./result/InsertResult";
8
8
  /**
9
9
  * Allows to build complex sql queries in a fashion way and execute those queries.
10
10
  */
@@ -1,17 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.InsertQueryBuilder = void 0;
4
- const QueryBuilder_1 = require("./QueryBuilder");
5
- const InsertResult_1 = require("./result/InsertResult");
6
- const ReturningStatementNotSupportedError_1 = require("../error/ReturningStatementNotSupportedError");
7
- const InsertValuesMissingError_1 = require("../error/InsertValuesMissingError");
8
- const ReturningResultsEntityUpdator_1 = require("./ReturningResultsEntityUpdator");
9
- const BroadcasterResult_1 = require("../subscriber/BroadcasterResult");
10
- const error_1 = require("../error");
11
4
  const uuid_1 = require("uuid");
12
5
  const DriverUtils_1 = require("../driver/DriverUtils");
13
- const ObjectUtils_1 = require("../util/ObjectUtils");
6
+ const error_1 = require("../error");
7
+ const InsertValuesMissingError_1 = require("../error/InsertValuesMissingError");
8
+ const ReturningStatementNotSupportedError_1 = require("../error/ReturningStatementNotSupportedError");
9
+ const BroadcasterResult_1 = require("../subscriber/BroadcasterResult");
14
10
  const InstanceChecker_1 = require("../util/InstanceChecker");
11
+ const ObjectUtils_1 = require("../util/ObjectUtils");
12
+ const QueryBuilder_1 = require("./QueryBuilder");
13
+ const InsertResult_1 = require("./result/InsertResult");
14
+ const ReturningResultsEntityUpdator_1 = require("./ReturningResultsEntityUpdator");
15
15
  /**
16
16
  * Allows to build complex sql queries in a fashion way and execute those queries.
17
17
  */
@@ -224,6 +224,7 @@ class InsertQueryBuilder extends QueryBuilder_1.QueryBuilder {
224
224
  columns: statementOrOverwrite === null || statementOrOverwrite === void 0 ? void 0 : statementOrOverwrite.columns,
225
225
  overwrite: statementOrOverwrite === null || statementOrOverwrite === void 0 ? void 0 : statementOrOverwrite.overwrite,
226
226
  skipUpdateIfNoValuesChanged: orUpdateOptions === null || orUpdateOptions === void 0 ? void 0 : orUpdateOptions.skipUpdateIfNoValuesChanged,
227
+ upsertType: orUpdateOptions === null || orUpdateOptions === void 0 ? void 0 : orUpdateOptions.upsertType,
227
228
  };
228
229
  return this;
229
230
  }
@@ -232,6 +233,7 @@ class InsertQueryBuilder extends QueryBuilder_1.QueryBuilder {
232
233
  conflict: conflictTarget,
233
234
  skipUpdateIfNoValuesChanged: orUpdateOptions === null || orUpdateOptions === void 0 ? void 0 : orUpdateOptions.skipUpdateIfNoValuesChanged,
234
235
  indexPredicate: orUpdateOptions === null || orUpdateOptions === void 0 ? void 0 : orUpdateOptions.indexPredicate,
236
+ upsertType: orUpdateOptions === null || orUpdateOptions === void 0 ? void 0 : orUpdateOptions.upsertType,
235
237
  };
236
238
  return this;
237
239
  }
@@ -242,6 +244,7 @@ class InsertQueryBuilder extends QueryBuilder_1.QueryBuilder {
242
244
  * Creates INSERT express used to perform insert query.
243
245
  */
244
246
  createInsertExpression() {
247
+ var _a, _b;
245
248
  const tableName = this.getTableName(this.getMainTableName());
246
249
  const valuesExpression = this.createValuesExpression(); // its important to get values before returning expression because oracle rely on native parameters and ordering of them is important
247
250
  const returningExpression = this.connection.driver.options.type === "oracle" &&
@@ -250,6 +253,9 @@ class InsertQueryBuilder extends QueryBuilder_1.QueryBuilder {
250
253
  : this.createReturningExpression("insert"); // oracle doesnt support returning with multi-row insert
251
254
  const columnsExpression = this.createColumnNamesExpression();
252
255
  let query = "INSERT ";
256
+ if (((_a = this.expressionMap.onUpdate) === null || _a === void 0 ? void 0 : _a.upsertType) === "primary-key") {
257
+ query = "UPSERT ";
258
+ }
253
259
  if (DriverUtils_1.DriverUtils.isMySQLFamily(this.connection.driver) ||
254
260
  this.connection.driver.options.type === "aurora-mysql") {
255
261
  query += `${this.expressionMap.onIgnore ? " IGNORE " : ""}`;
@@ -295,79 +301,79 @@ class InsertQueryBuilder extends QueryBuilder_1.QueryBuilder {
295
301
  query += ` DEFAULT VALUES`;
296
302
  }
297
303
  }
298
- if (this.connection.driver.supportedUpsertType ===
299
- "on-conflict-do-update") {
300
- if (this.expressionMap.onIgnore) {
301
- query += " ON CONFLICT DO NOTHING ";
302
- }
303
- else if (this.expressionMap.onConflict) {
304
- query += ` ON CONFLICT ${this.expressionMap.onConflict} `;
305
- }
306
- else if (this.expressionMap.onUpdate) {
307
- const { overwrite, columns, conflict, skipUpdateIfNoValuesChanged, indexPredicate, } = this.expressionMap.onUpdate;
308
- let conflictTarget = "ON CONFLICT";
309
- if (Array.isArray(conflict)) {
310
- conflictTarget += ` ( ${conflict
311
- .map((column) => this.escape(column))
312
- .join(", ")} )`;
313
- if (indexPredicate &&
314
- !DriverUtils_1.DriverUtils.isPostgresFamily(this.connection.driver)) {
315
- throw new error_1.TypeORMError(`indexPredicate option is not supported by the current database driver`);
304
+ if (((_b = this.expressionMap.onUpdate) === null || _b === void 0 ? void 0 : _b.upsertType) !== "primary-key") {
305
+ if (this.connection.driver.supportedUpsertTypes.includes("on-conflict-do-update")) {
306
+ if (this.expressionMap.onIgnore) {
307
+ query += " ON CONFLICT DO NOTHING ";
308
+ }
309
+ else if (this.expressionMap.onConflict) {
310
+ query += ` ON CONFLICT ${this.expressionMap.onConflict} `;
311
+ }
312
+ else if (this.expressionMap.onUpdate) {
313
+ const { overwrite, columns, conflict, skipUpdateIfNoValuesChanged, indexPredicate, } = this.expressionMap.onUpdate;
314
+ let conflictTarget = "ON CONFLICT";
315
+ if (Array.isArray(conflict)) {
316
+ conflictTarget += ` ( ${conflict
317
+ .map((column) => this.escape(column))
318
+ .join(", ")} )`;
319
+ if (indexPredicate &&
320
+ !DriverUtils_1.DriverUtils.isPostgresFamily(this.connection.driver)) {
321
+ throw new error_1.TypeORMError(`indexPredicate option is not supported by the current database driver`);
322
+ }
323
+ if (indexPredicate &&
324
+ DriverUtils_1.DriverUtils.isPostgresFamily(this.connection.driver)) {
325
+ conflictTarget += ` WHERE ( ${this.escape(indexPredicate)} )`;
326
+ }
327
+ }
328
+ else if (conflict) {
329
+ conflictTarget += ` ON CONSTRAINT ${this.escape(conflict)}`;
316
330
  }
317
- if (indexPredicate &&
331
+ if (Array.isArray(overwrite)) {
332
+ query += ` ${conflictTarget} DO UPDATE SET `;
333
+ query += overwrite === null || overwrite === void 0 ? void 0 : overwrite.map((column) => `${this.escape(column)} = EXCLUDED.${this.escape(column)}`).join(", ");
334
+ query += " ";
335
+ }
336
+ else if (columns) {
337
+ query += ` ${conflictTarget} DO UPDATE SET `;
338
+ query += columns
339
+ .map((column) => `${this.escape(column)} = :${column}`)
340
+ .join(", ");
341
+ query += " ";
342
+ }
343
+ if (Array.isArray(overwrite) &&
344
+ skipUpdateIfNoValuesChanged &&
318
345
  DriverUtils_1.DriverUtils.isPostgresFamily(this.connection.driver)) {
319
- conflictTarget += ` WHERE ( ${this.escape(indexPredicate)} )`;
346
+ query += ` WHERE (`;
347
+ query += overwrite
348
+ .map((column) => `${tableName}.${this.escape(column)} IS DISTINCT FROM EXCLUDED.${this.escape(column)}`)
349
+ .join(" OR ");
350
+ query += ") ";
320
351
  }
321
352
  }
322
- else if (conflict) {
323
- conflictTarget += ` ON CONSTRAINT ${this.escape(conflict)}`;
324
- }
325
- if (Array.isArray(overwrite)) {
326
- query += ` ${conflictTarget} DO UPDATE SET `;
327
- query += overwrite === null || overwrite === void 0 ? void 0 : overwrite.map((column) => `${this.escape(column)} = EXCLUDED.${this.escape(column)}`).join(", ");
328
- query += " ";
329
- }
330
- else if (columns) {
331
- query += ` ${conflictTarget} DO UPDATE SET `;
332
- query += columns
333
- .map((column) => `${this.escape(column)} = :${column}`)
334
- .join(", ");
335
- query += " ";
336
- }
337
- if (Array.isArray(overwrite) &&
338
- skipUpdateIfNoValuesChanged &&
339
- DriverUtils_1.DriverUtils.isPostgresFamily(this.connection.driver)) {
340
- query += ` WHERE (`;
341
- query += overwrite
342
- .map((column) => `${tableName}.${this.escape(column)} IS DISTINCT FROM EXCLUDED.${this.escape(column)}`)
343
- .join(" OR ");
344
- query += ") ";
345
- }
346
353
  }
347
- }
348
- else if (this.connection.driver.supportedUpsertType ===
349
- "on-duplicate-key-update") {
350
- if (this.expressionMap.onUpdate) {
351
- const { overwrite, columns } = this.expressionMap.onUpdate;
352
- if (Array.isArray(overwrite)) {
353
- query += " ON DUPLICATE KEY UPDATE ";
354
- query += overwrite
355
- .map((column) => `${this.escape(column)} = VALUES(${this.escape(column)})`)
356
- .join(", ");
357
- query += " ";
358
- }
359
- else if (Array.isArray(columns)) {
360
- query += " ON DUPLICATE KEY UPDATE ";
361
- query += columns
362
- .map((column) => `${this.escape(column)} = :${column}`)
363
- .join(", ");
364
- query += " ";
354
+ else if (this.connection.driver.supportedUpsertTypes.includes("on-duplicate-key-update")) {
355
+ if (this.expressionMap.onUpdate) {
356
+ const { overwrite, columns } = this.expressionMap.onUpdate;
357
+ if (Array.isArray(overwrite)) {
358
+ query += " ON DUPLICATE KEY UPDATE ";
359
+ query += overwrite
360
+ .map((column) => `${this.escape(column)} = VALUES(${this.escape(column)})`)
361
+ .join(", ");
362
+ query += " ";
363
+ }
364
+ else if (Array.isArray(columns)) {
365
+ query += " ON DUPLICATE KEY UPDATE ";
366
+ query += columns
367
+ .map((column) => `${this.escape(column)} = :${column}`)
368
+ .join(", ");
369
+ query += " ";
370
+ }
365
371
  }
366
372
  }
367
- }
368
- else {
369
- if (this.expressionMap.onUpdate) {
370
- throw new error_1.TypeORMError(`onUpdate is not supported by the current database driver`);
373
+ else {
374
+ if (this.expressionMap.onUpdate) {
375
+ throw new error_1.TypeORMError(`onUpdate is not supported by the current database driver`);
376
+ }
371
377
  }
372
378
  }
373
379
  // add RETURNING expression