typeorm 0.2.39 → 0.2.40-dev.0cc8fbb

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 (104) hide show
  1. package/README.md +0 -3
  2. package/browser/decorator/columns/PrimaryGeneratedColumn.d.ts +1 -0
  3. package/browser/decorator/columns/PrimaryGeneratedColumn.js +1 -1
  4. package/browser/decorator/columns/PrimaryGeneratedColumn.js.map +1 -1
  5. package/browser/decorator/options/ColumnCommonOptions.d.ts +1 -1
  6. package/browser/decorator/options/ColumnCommonOptions.js.map +1 -1
  7. package/browser/driver/Driver.d.ts +5 -0
  8. package/browser/driver/Driver.js.map +1 -1
  9. package/browser/driver/aurora-data-api/AuroraDataApiDriver.d.ts +4 -0
  10. package/browser/driver/aurora-data-api/AuroraDataApiDriver.js +4 -0
  11. package/browser/driver/aurora-data-api/AuroraDataApiDriver.js.map +1 -1
  12. package/browser/driver/cockroachdb/CockroachDriver.d.ts +4 -0
  13. package/browser/driver/cockroachdb/CockroachDriver.js +4 -0
  14. package/browser/driver/cockroachdb/CockroachDriver.js.map +1 -1
  15. package/browser/driver/mysql/MysqlDriver.d.ts +4 -0
  16. package/browser/driver/mysql/MysqlDriver.js +10 -3
  17. package/browser/driver/mysql/MysqlDriver.js.map +1 -1
  18. package/browser/driver/postgres/PostgresDriver.d.ts +4 -0
  19. package/browser/driver/postgres/PostgresDriver.js +4 -0
  20. package/browser/driver/postgres/PostgresDriver.js.map +1 -1
  21. package/browser/driver/postgres/PostgresQueryRunner.js +19 -8
  22. package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
  23. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.d.ts +4 -0
  24. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js +4 -0
  25. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
  26. package/browser/driver/types/UpsertType.d.ts +1 -0
  27. package/browser/driver/types/UpsertType.js +3 -0
  28. package/browser/driver/types/UpsertType.js.map +1 -0
  29. package/browser/entity-manager/EntityManager.d.ts +2 -0
  30. package/browser/entity-manager/EntityManager.js +42 -1
  31. package/browser/entity-manager/EntityManager.js.map +1 -1
  32. package/browser/metadata/EntityMetadata.d.ts +4 -0
  33. package/browser/metadata/EntityMetadata.js +14 -0
  34. package/browser/metadata/EntityMetadata.js.map +1 -1
  35. package/browser/query-builder/InsertQueryBuilder.js +8 -2
  36. package/browser/query-builder/InsertQueryBuilder.js.map +1 -1
  37. package/browser/repository/BaseEntity.d.ts +7 -0
  38. package/browser/repository/BaseEntity.js +8 -0
  39. package/browser/repository/BaseEntity.js.map +1 -1
  40. package/browser/repository/Repository.d.ts +7 -0
  41. package/browser/repository/Repository.js +8 -0
  42. package/browser/repository/Repository.js.map +1 -1
  43. package/browser/repository/UpsertOptions.d.ts +6 -0
  44. package/browser/repository/UpsertOptions.js +3 -0
  45. package/browser/repository/UpsertOptions.js.map +1 -0
  46. package/browser/schema-builder/options/TableColumnOptions.d.ts +1 -1
  47. package/browser/schema-builder/options/TableColumnOptions.js.map +1 -1
  48. package/browser/schema-builder/table/TableColumn.d.ts +1 -1
  49. package/browser/schema-builder/table/TableColumn.js.map +1 -1
  50. package/browser/util/OrmUtils.d.ts +1 -0
  51. package/browser/util/OrmUtils.js +11 -0
  52. package/browser/util/OrmUtils.js.map +1 -1
  53. package/decorator/columns/PrimaryGeneratedColumn.d.ts +1 -0
  54. package/decorator/columns/PrimaryGeneratedColumn.js +1 -1
  55. package/decorator/columns/PrimaryGeneratedColumn.js.map +1 -1
  56. package/decorator/options/ColumnCommonOptions.d.ts +1 -1
  57. package/decorator/options/ColumnCommonOptions.js.map +1 -1
  58. package/driver/Driver.d.ts +5 -0
  59. package/driver/Driver.js.map +1 -1
  60. package/driver/aurora-data-api/AuroraDataApiDriver.d.ts +4 -0
  61. package/driver/aurora-data-api/AuroraDataApiDriver.js +4 -0
  62. package/driver/aurora-data-api/AuroraDataApiDriver.js.map +1 -1
  63. package/driver/cockroachdb/CockroachDriver.d.ts +4 -0
  64. package/driver/cockroachdb/CockroachDriver.js +4 -0
  65. package/driver/cockroachdb/CockroachDriver.js.map +1 -1
  66. package/driver/mysql/MysqlDriver.d.ts +4 -0
  67. package/driver/mysql/MysqlDriver.js +10 -3
  68. package/driver/mysql/MysqlDriver.js.map +1 -1
  69. package/driver/postgres/PostgresDriver.d.ts +4 -0
  70. package/driver/postgres/PostgresDriver.js +4 -0
  71. package/driver/postgres/PostgresDriver.js.map +1 -1
  72. package/driver/postgres/PostgresQueryRunner.js +19 -8
  73. package/driver/postgres/PostgresQueryRunner.js.map +1 -1
  74. package/driver/sqlite-abstract/AbstractSqliteDriver.d.ts +4 -0
  75. package/driver/sqlite-abstract/AbstractSqliteDriver.js +4 -0
  76. package/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
  77. package/driver/types/UpsertType.d.ts +1 -0
  78. package/driver/types/UpsertType.js +4 -0
  79. package/driver/types/UpsertType.js.map +1 -0
  80. package/entity-manager/EntityManager.d.ts +2 -0
  81. package/entity-manager/EntityManager.js +41 -0
  82. package/entity-manager/EntityManager.js.map +1 -1
  83. package/metadata/EntityMetadata.d.ts +4 -0
  84. package/metadata/EntityMetadata.js +14 -0
  85. package/metadata/EntityMetadata.js.map +1 -1
  86. package/package.json +1 -239
  87. package/query-builder/InsertQueryBuilder.js +11 -5
  88. package/query-builder/InsertQueryBuilder.js.map +1 -1
  89. package/repository/BaseEntity.d.ts +7 -0
  90. package/repository/BaseEntity.js +8 -0
  91. package/repository/BaseEntity.js.map +1 -1
  92. package/repository/Repository.d.ts +7 -0
  93. package/repository/Repository.js +8 -0
  94. package/repository/Repository.js.map +1 -1
  95. package/repository/UpsertOptions.d.ts +6 -0
  96. package/repository/UpsertOptions.js +4 -0
  97. package/repository/UpsertOptions.js.map +1 -0
  98. package/schema-builder/options/TableColumnOptions.d.ts +1 -1
  99. package/schema-builder/options/TableColumnOptions.js.map +1 -1
  100. package/schema-builder/table/TableColumn.d.ts +1 -1
  101. package/schema-builder/table/TableColumn.js.map +1 -1
  102. package/util/OrmUtils.d.ts +1 -0
  103. package/util/OrmUtils.js +11 -0
  104. package/util/OrmUtils.js.map +1 -1
@@ -15,6 +15,7 @@ import { BroadcasterResult } from "../subscriber/BroadcasterResult";
15
15
  import { EntitySchema } from "../entity-schema/EntitySchema";
16
16
  import { OracleDriver } from "../driver/oracle/OracleDriver";
17
17
  import { AuroraDataApiDriver } from "../driver/aurora-data-api/AuroraDataApiDriver";
18
+ import { TypeORMError } from "../error";
18
19
  /**
19
20
  * Allows to build complex sql queries in a fashion way and execute those queries.
20
21
  */
@@ -292,7 +293,7 @@ var InsertQueryBuilder = /** @class */ (function (_super) {
292
293
  query += " DEFAULT VALUES";
293
294
  }
294
295
  }
295
- if (this.connection.driver instanceof PostgresDriver || this.connection.driver instanceof AbstractSqliteDriver || this.connection.driver instanceof CockroachDriver) {
296
+ if (this.connection.driver.supportedUpsertType === "on-conflict-do-update") {
296
297
  if (this.expressionMap.onIgnore) {
297
298
  query += " ON CONFLICT DO NOTHING ";
298
299
  }
@@ -320,7 +321,7 @@ var InsertQueryBuilder = /** @class */ (function (_super) {
320
321
  }
321
322
  }
322
323
  }
323
- if (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver) {
324
+ else if (this.connection.driver.supportedUpsertType === "on-duplicate-key-update") {
324
325
  if (this.expressionMap.onUpdate) {
325
326
  var _b = this.expressionMap.onUpdate, overwrite = _b.overwrite, columns = _b.columns;
326
327
  if (Array.isArray(overwrite)) {
@@ -335,6 +336,11 @@ var InsertQueryBuilder = /** @class */ (function (_super) {
335
336
  }
336
337
  }
337
338
  }
339
+ else {
340
+ if (this.expressionMap.onUpdate) {
341
+ throw new TypeORMError("onUpdate is not supported by the current database driver");
342
+ }
343
+ }
338
344
  // add RETURNING expression
339
345
  if (returningExpression && (this.connection.driver instanceof PostgresDriver || this.connection.driver instanceof OracleDriver || this.connection.driver instanceof CockroachDriver)) {
340
346
  query += " RETURNING " + returningExpression;
@@ -1 +1 @@
1
- {"version":3,"sources":["../browser/src/query-builder/InsertQueryBuilder.ts"],"names":[],"mappings":"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","file":"InsertQueryBuilder.js","sourcesContent":["import {CockroachDriver} from \"../driver/cockroachdb/CockroachDriver\";\nimport {SapDriver} from \"../driver/sap/SapDriver\";\nimport {QueryBuilder} from \"./QueryBuilder\";\nimport {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {EntityTarget} from \"../common/EntityTarget\";\nimport {QueryDeepPartialEntity} from \"./QueryPartialEntity\";\nimport {SqlServerDriver} from \"../driver/sqlserver/SqlServerDriver\";\nimport {PostgresDriver} from \"../driver/postgres/PostgresDriver\";\nimport {MysqlDriver} from \"../driver/mysql/MysqlDriver\";\nimport {RandomGenerator} from \"../util/RandomGenerator\";\nimport {InsertResult} from \"./result/InsertResult\";\nimport {ReturningStatementNotSupportedError} from \"../error/ReturningStatementNotSupportedError\";\nimport {InsertValuesMissingError} from \"../error/InsertValuesMissingError\";\nimport {ColumnMetadata} from \"../metadata/ColumnMetadata\";\nimport {ReturningResultsEntityUpdator} from \"./ReturningResultsEntityUpdator\";\nimport {AbstractSqliteDriver} from \"../driver/sqlite-abstract/AbstractSqliteDriver\";\nimport {BroadcasterResult} from \"../subscriber/BroadcasterResult\";\nimport {EntitySchema} from \"../entity-schema/EntitySchema\";\nimport {OracleDriver} from \"../driver/oracle/OracleDriver\";\nimport {AuroraDataApiDriver} from \"../driver/aurora-data-api/AuroraDataApiDriver\";\n\n/**\n * Allows to build complex sql queries in a fashion way and execute those queries.\n */\nexport class InsertQueryBuilder<Entity> extends QueryBuilder<Entity> {\n\n // -------------------------------------------------------------------------\n // Public Implemented Methods\n // -------------------------------------------------------------------------\n\n /**\n * Gets generated sql query without parameters being replaced.\n */\n getQuery(): string {\n let sql = this.createComment();\n sql += this.createInsertExpression();\n return sql.trim();\n }\n\n /**\n * Executes sql generated by query builder and returns raw database results.\n */\n async execute(): Promise<InsertResult> {\n // console.time(\".value sets\");\n const valueSets: ObjectLiteral[] = this.getValueSets();\n // console.timeEnd(\".value sets\");\n\n // If user passed empty array of entities then we don't need to do\n // anything.\n //\n // Fixes GitHub issues #3111 and #5734. If we were to let this through\n // we would run into problems downstream, like subscribers getting\n // invoked with the empty array where they expect an entity, and SQL\n // queries with an empty VALUES clause.\n if (valueSets.length === 0)\n return new InsertResult();\n\n // console.time(\"QueryBuilder.execute\");\n // console.time(\".database stuff\");\n const queryRunner = this.obtainQueryRunner();\n let transactionStartedByUs: boolean = false;\n\n try {\n\n // start transaction if it was enabled\n if (this.expressionMap.useTransaction === true && queryRunner.isTransactionActive === false) {\n await queryRunner.startTransaction();\n transactionStartedByUs = true;\n }\n\n // console.timeEnd(\".database stuff\");\n\n // call before insertion methods in listeners and subscribers\n if (this.expressionMap.callListeners === true && this.expressionMap.mainAlias!.hasMetadata) {\n const broadcastResult = new BroadcasterResult();\n valueSets.forEach(valueSet => {\n queryRunner.broadcaster.broadcastBeforeInsertEvent(broadcastResult, this.expressionMap.mainAlias!.metadata, valueSet);\n });\n await broadcastResult.wait();\n }\n\n let declareSql: string | null = null;\n let selectOutputSql: string | null = null;\n\n // if update entity mode is enabled we may need extra columns for the returning statement\n // console.time(\".prepare returning statement\");\n const returningResultsEntityUpdator = new ReturningResultsEntityUpdator(queryRunner, this.expressionMap);\n\n const returningColumns: ColumnMetadata[] = [];\n\n if (Array.isArray(this.expressionMap.returning) && this.expressionMap.mainAlias!.hasMetadata) {\n for (const columnPath of this.expressionMap.returning) {\n returningColumns.push(\n ...this.expressionMap.mainAlias!.metadata.findColumnsWithPropertyPath(columnPath)\n );\n }\n }\n\n if (this.expressionMap.updateEntity === true && this.expressionMap.mainAlias!.hasMetadata) {\n if (!(valueSets.length > 1 && this.connection.driver instanceof OracleDriver)) {\n this.expressionMap.extraReturningColumns = returningResultsEntityUpdator.getInsertionReturningColumns();\n }\n\n returningColumns.push(...this.expressionMap.extraReturningColumns.filter(\n c => !returningColumns.includes(c)\n ));\n }\n\n if (returningColumns.length > 0 && this.connection.driver instanceof SqlServerDriver) {\n declareSql = this.connection.driver.buildTableVariableDeclaration(\"@OutputTable\", returningColumns);\n selectOutputSql = `SELECT * FROM @OutputTable`;\n }\n // console.timeEnd(\".prepare returning statement\");\n\n // execute query\n // console.time(\".getting query and parameters\");\n const [insertSql, parameters] = this.getQueryAndParameters();\n // console.timeEnd(\".getting query and parameters\");\n\n // console.time(\".query execution by database\");\n const statements = [declareSql, insertSql, selectOutputSql];\n const sql = statements.filter(s => s != null).join(\";\\n\\n\");\n\n const queryResult = await queryRunner.query(sql, parameters, true);\n\n const insertResult = InsertResult.from(queryResult);\n\n // console.timeEnd(\".query execution by database\");\n\n // load returning results and set them to the entity if entity updation is enabled\n if (this.expressionMap.updateEntity === true && this.expressionMap.mainAlias!.hasMetadata) {\n // console.time(\".updating entity\");\n await returningResultsEntityUpdator.insert(insertResult, valueSets);\n // console.timeEnd(\".updating entity\");\n }\n\n // call after insertion methods in listeners and subscribers\n if (this.expressionMap.callListeners === true && this.expressionMap.mainAlias!.hasMetadata) {\n const broadcastResult = new BroadcasterResult();\n valueSets.forEach(valueSet => {\n queryRunner.broadcaster.broadcastAfterInsertEvent(broadcastResult, this.expressionMap.mainAlias!.metadata, valueSet);\n });\n await broadcastResult.wait();\n }\n\n // close transaction if we started it\n // console.time(\".commit\");\n if (transactionStartedByUs) {\n await queryRunner.commitTransaction();\n }\n // console.timeEnd(\".commit\");\n\n return insertResult;\n\n } catch (error) {\n\n // rollback transaction if we started it\n if (transactionStartedByUs) {\n try {\n await queryRunner.rollbackTransaction();\n } catch (rollbackError) { }\n }\n throw error;\n\n } finally {\n\n // console.time(\".releasing connection\");\n if (queryRunner !== this.queryRunner) { // means we created our own query runner\n await queryRunner.release();\n }\n // console.timeEnd(\".releasing connection\");\n // console.timeEnd(\"QueryBuilder.execute\");\n }\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Specifies INTO which entity's table insertion will be executed.\n */\n into<T>(entityTarget: EntityTarget<T>, columns?: string[]): InsertQueryBuilder<T> {\n entityTarget = entityTarget instanceof EntitySchema ? entityTarget.options.name : entityTarget;\n const mainAlias = this.createFromAlias(entityTarget);\n this.expressionMap.setMainAlias(mainAlias);\n this.expressionMap.insertColumns = columns || [];\n return (this as any) as InsertQueryBuilder<T>;\n }\n\n /**\n * Values needs to be inserted into table.\n */\n values(values: QueryDeepPartialEntity<Entity>|QueryDeepPartialEntity<Entity>[]): this {\n this.expressionMap.valuesSet = values;\n return this;\n }\n\n /**\n * Optional returning/output clause.\n * This will return given column values.\n */\n output(columns: string[]): this;\n\n /**\n * Optional returning/output clause.\n * Returning is a SQL string containing returning statement.\n */\n output(output: string): this;\n\n /**\n * Optional returning/output clause.\n */\n output(output: string|string[]): this;\n\n /**\n * Optional returning/output clause.\n */\n output(output: string|string[]): this {\n return this.returning(output);\n }\n\n /**\n * Optional returning/output clause.\n * This will return given column values.\n */\n returning(columns: string[]): this;\n\n /**\n * Optional returning/output clause.\n * Returning is a SQL string containing returning statement.\n */\n returning(returning: string): this;\n\n /**\n * Optional returning/output clause.\n */\n returning(returning: string|string[]): this;\n\n /**\n * Optional returning/output clause.\n */\n returning(returning: string|string[]): this {\n\n // not all databases support returning/output cause\n if (!this.connection.driver.isReturningSqlSupported())\n throw new ReturningStatementNotSupportedError();\n\n this.expressionMap.returning = returning;\n return this;\n }\n\n /**\n * Indicates if entity must be updated after insertion operations.\n * This may produce extra query or use RETURNING / OUTPUT statement (depend on database).\n * Enabled by default.\n */\n updateEntity(enabled: boolean): this {\n this.expressionMap.updateEntity = enabled;\n return this;\n }\n\n /**\n * Adds additional ON CONFLICT statement supported in postgres and cockroach.\n *\n * @deprecated Use `orIgnore` or `orUpdate`\n */\n onConflict(statement: string): this {\n this.expressionMap.onConflict = statement;\n return this;\n }\n\n /**\n * Adds additional ignore statement supported in databases.\n */\n orIgnore(statement: string | boolean = true): this {\n this.expressionMap.onIgnore = !!statement;\n return this;\n }\n\n /**\n * @deprecated\n */\n orUpdate(statement?: { columns?: string[], overwrite?: string[], conflict_target?: string | string[] }): this;\n\n orUpdate(overwrite: string[], conflictTarget?: string | string[]): this;\n\n /**\n * Adds additional update statement supported in databases.\n */\n orUpdate(statementOrOverwrite?: { columns?: string[], overwrite?: string[], conflict_target?: string | string[] } | string[], conflictTarget?: string | string[]): this {\n if (!Array.isArray(statementOrOverwrite)) {\n this.expressionMap.onUpdate = {\n conflict: statementOrOverwrite?.conflict_target,\n columns: statementOrOverwrite?.columns,\n overwrite: statementOrOverwrite?.overwrite,\n };\n return this;\n }\n\n this.expressionMap.onUpdate = {\n overwrite: statementOrOverwrite,\n conflict: conflictTarget,\n };\n return this;\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates INSERT express used to perform insert query.\n */\n protected createInsertExpression() {\n const tableName = this.getTableName(this.getMainTableName());\n const valuesExpression = this.createValuesExpression(); // its important to get values before returning expression because oracle rely on native parameters and ordering of them is important\n const returningExpression = (this.connection.driver instanceof OracleDriver && this.getValueSets().length > 1) ? null : this.createReturningExpression(); // oracle doesnt support returning with multi-row insert\n const columnsExpression = this.createColumnNamesExpression();\n let query = \"INSERT \";\n\n if (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver) {\n query += `${this.expressionMap.onIgnore ? \" IGNORE \" : \"\"}`;\n }\n\n query += `INTO ${tableName}`;\n\n // add columns expression\n if (columnsExpression) {\n query += `(${columnsExpression})`;\n } else {\n if (!valuesExpression && (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver)) // special syntax for mysql DEFAULT VALUES insertion\n query += \"()\";\n }\n\n // add OUTPUT expression\n if (returningExpression && this.connection.driver instanceof SqlServerDriver) {\n query += ` OUTPUT ${returningExpression}`;\n }\n\n // add VALUES expression\n if (valuesExpression) {\n if (this.connection.driver instanceof OracleDriver && this.getValueSets().length > 1) {\n query += ` ${valuesExpression}`;\n } else {\n query += ` VALUES ${valuesExpression}`;\n }\n } else {\n if (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver) { // special syntax for mysql DEFAULT VALUES insertion\n query += \" VALUES ()\";\n } else {\n query += ` DEFAULT VALUES`;\n }\n }\n if (this.connection.driver instanceof PostgresDriver || this.connection.driver instanceof AbstractSqliteDriver || this.connection.driver instanceof CockroachDriver) {\n if (this.expressionMap.onIgnore) {\n query += \" ON CONFLICT DO NOTHING \";\n } else if (this.expressionMap.onConflict) {\n query += ` ON CONFLICT ${this.expressionMap.onConflict} `;\n } else if (this.expressionMap.onUpdate) {\n const { overwrite, columns, conflict } = this.expressionMap.onUpdate;\n\n let conflictTarget = \"ON CONFLICT\";\n\n if (Array.isArray(conflict)) {\n conflictTarget += ` ( ${conflict.map((column) => this.escape(column)).join(\", \")} )`;\n } else if (conflict) {\n conflictTarget += ` ON CONSTRAINT ${this.escape(conflict)}`;\n }\n\n if (Array.isArray(overwrite)) {\n query += ` ${conflictTarget} DO UPDATE SET `;\n query += overwrite?.map(column => `${this.escape(column)} = EXCLUDED.${this.escape(column)}`).join(\", \");\n query += \" \";\n } else if (columns) {\n query += ` ${conflictTarget} DO UPDATE SET `;\n query += columns.map(column => `${this.escape(column)} = :${column}`).join(\", \");\n query += \" \";\n }\n }\n }\n\n if (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver) {\n if (this.expressionMap.onUpdate) {\n const { overwrite, columns } = this.expressionMap.onUpdate;\n\n if (Array.isArray(overwrite)) {\n query += \" ON DUPLICATE KEY UPDATE \";\n query += overwrite.map(column => `${this.escape(column)} = VALUES(${this.escape(column)})`).join(\", \");\n query += \" \";\n } else if (Array.isArray(columns)) {\n query += \" ON DUPLICATE KEY UPDATE \";\n query += columns.map(column => `${this.escape(column)} = :${column}`).join(\", \");\n query += \" \";\n }\n }\n }\n\n // add RETURNING expression\n if (returningExpression && (this.connection.driver instanceof PostgresDriver || this.connection.driver instanceof OracleDriver || this.connection.driver instanceof CockroachDriver)) {\n query += ` RETURNING ${returningExpression}`;\n }\n\n\n // Inserting a specific value for an auto-increment primary key in mssql requires enabling IDENTITY_INSERT\n // IDENTITY_INSERT can only be enabled for tables where there is an IDENTITY column and only if there is a value to be inserted (i.e. supplying DEFAULT is prohibited if IDENTITY_INSERT is enabled)\n if (this.connection.driver instanceof SqlServerDriver\n && this.expressionMap.mainAlias!.hasMetadata\n && this.expressionMap.mainAlias!.metadata.columns\n .filter((column) => this.expressionMap.insertColumns.length > 0 ? this.expressionMap.insertColumns.indexOf(column.propertyPath) !== -1 : column.isInsert)\n .some((column) => this.isOverridingAutoIncrementBehavior(column))\n ) {\n query = `SET IDENTITY_INSERT ${tableName} ON; ${query}; SET IDENTITY_INSERT ${tableName} OFF`;\n }\n\n return query;\n }\n\n /**\n * Gets list of columns where values must be inserted to.\n */\n protected getInsertedColumns(): ColumnMetadata[] {\n if (!this.expressionMap.mainAlias!.hasMetadata)\n return [];\n\n return this.expressionMap.mainAlias!.metadata.columns.filter(column => {\n\n // if user specified list of columns he wants to insert to, then we filter only them\n if (this.expressionMap.insertColumns.length)\n return this.expressionMap.insertColumns.indexOf(column.propertyPath) !== -1;\n\n // skip columns the user doesn't want included by default\n if (!column.isInsert) { return false; }\n\n // if user did not specified such list then return all columns except auto-increment one\n // for Oracle we return auto-increment column as well because Oracle does not support DEFAULT VALUES expression\n if (column.isGenerated && column.generationStrategy === \"increment\"\n && !(this.connection.driver instanceof OracleDriver)\n && !(this.connection.driver instanceof AbstractSqliteDriver)\n && !(this.connection.driver instanceof MysqlDriver)\n && !(this.connection.driver instanceof AuroraDataApiDriver)\n && !(this.connection.driver instanceof SqlServerDriver && this.isOverridingAutoIncrementBehavior(column)))\n return false;\n\n return true;\n });\n }\n\n /**\n * Creates a columns string where values must be inserted to for INSERT INTO expression.\n */\n protected createColumnNamesExpression(): string {\n const columns = this.getInsertedColumns();\n if (columns.length > 0)\n return columns.map(column => this.escape(column.databaseName)).join(\", \");\n\n // in the case if there are no insert columns specified and table without metadata used\n // we get columns from the inserted value map, in the case if only one inserted map is specified\n if (!this.expressionMap.mainAlias!.hasMetadata && !this.expressionMap.insertColumns.length) {\n const valueSets = this.getValueSets();\n if (valueSets.length === 1)\n return Object.keys(valueSets[0]).map(columnName => this.escape(columnName)).join(\", \");\n }\n\n // get a table name and all column database names\n return this.expressionMap.insertColumns.map(columnName => this.escape(columnName)).join(\", \");\n }\n\n /**\n * Creates list of values needs to be inserted in the VALUES expression.\n */\n protected createValuesExpression(): string {\n const valueSets = this.getValueSets();\n const columns = this.getInsertedColumns();\n\n // if column metadatas are given then apply all necessary operations with values\n if (columns.length > 0) {\n let expression = \"\";\n valueSets.forEach((valueSet, valueSetIndex) => {\n columns.forEach((column, columnIndex) => {\n if (columnIndex === 0) {\n if (this.connection.driver instanceof OracleDriver && valueSets.length > 1) {\n expression += \" SELECT \";\n } else {\n expression += \"(\";\n }\n }\n\n // extract real value from the entity\n let value = column.getEntityValue(valueSet);\n\n // if column is relational and value is an object then get real referenced column value from this object\n // for example column value is { question: { id: 1 } }, value will be equal to { id: 1 }\n // and we extract \"1\" from this object\n /*if (column.referencedColumn && value instanceof Object && !(value instanceof Function)) { // todo: check if we still need it since getEntityValue already has similar code\n value = column.referencedColumn.getEntityValue(value);\n }*/\n\n\n if (!(value instanceof Function)) {\n // make sure our value is normalized by a driver\n value = this.connection.driver.preparePersistentValue(value, column);\n }\n\n // newly inserted entities always have a version equal to 1 (first version)\n // also, user-specified version must be empty\n if (column.isVersion && value === undefined) {\n expression += \"1\";\n\n // } else if (column.isNestedSetLeft) {\n // const tableName = this.connection.driver.escape(column.entityMetadata.tablePath);\n // const rightColumnName = this.connection.driver.escape(column.entityMetadata.nestedSetRightColumn!.databaseName);\n // const subQuery = `(SELECT c.max + 1 FROM (SELECT MAX(${rightColumnName}) as max from ${tableName}) c)`;\n // expression += subQuery;\n //\n // } else if (column.isNestedSetRight) {\n // const tableName = this.connection.driver.escape(column.entityMetadata.tablePath);\n // const rightColumnName = this.connection.driver.escape(column.entityMetadata.nestedSetRightColumn!.databaseName);\n // const subQuery = `(SELECT c.max + 2 FROM (SELECT MAX(${rightColumnName}) as max from ${tableName}) c)`;\n // expression += subQuery;\n\n } else if (column.isDiscriminator) {\n expression += this.createParameter(this.expressionMap.mainAlias!.metadata.discriminatorValue);\n // return \"1\";\n\n // for create and update dates we insert current date\n // no, we don't do it because this constant is already in \"default\" value of the column\n // with extended timestamp functionality, like CURRENT_TIMESTAMP(6) for example\n // } else if (column.isCreateDate || column.isUpdateDate) {\n // return \"CURRENT_TIMESTAMP\";\n\n // if column is generated uuid and database does not support its generation and custom generated value was not provided by a user - we generate a new uuid value for insertion\n } else if (column.isGenerated && column.generationStrategy === \"uuid\" && !this.connection.driver.isUUIDGenerationSupported() && value === undefined) {\n\n value = RandomGenerator.uuid4();\n expression += this.createParameter(value);\n\n if (!(valueSetIndex in this.expressionMap.locallyGenerated)) {\n this.expressionMap.locallyGenerated[valueSetIndex] = {};\n }\n column.setEntityValue(this.expressionMap.locallyGenerated[valueSetIndex], value);\n\n // if value for this column was not provided then insert default value\n } else if (value === undefined) {\n if ((this.connection.driver instanceof OracleDriver && valueSets.length > 1) || this.connection.driver instanceof AbstractSqliteDriver || this.connection.driver instanceof SapDriver) { // unfortunately sqlite does not support DEFAULT expression in INSERT queries\n if (column.default !== undefined && column.default !== null) { // try to use default defined in the column\n expression += this.connection.driver.normalizeDefault(column);\n } else {\n expression += \"NULL\"; // otherwise simply use NULL and pray if column is nullable\n }\n\n } else {\n expression += \"DEFAULT\";\n }\n\n // support for SQL expressions in queries\n } else if (value instanceof Function) {\n expression += value();\n\n // just any other regular value\n } else {\n if (this.connection.driver instanceof SqlServerDriver)\n value = this.connection.driver.parametrizeValue(column, value);\n\n // we need to store array values in a special class to make sure parameter replacement will work correctly\n // if (value instanceof Array)\n // value = new ArrayParameter(value);\n\n\n const paramName = this.createParameter(value);\n\n if ((this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver) && this.connection.driver.spatialTypes.indexOf(column.type) !== -1) {\n const useLegacy = this.connection.driver.options.legacySpatialSupport;\n const geomFromText = useLegacy ? \"GeomFromText\" : \"ST_GeomFromText\";\n if (column.srid != null) {\n expression += `${geomFromText}(${paramName}, ${column.srid})`;\n } else {\n expression += `${geomFromText}(${paramName})`;\n }\n } else if (this.connection.driver instanceof PostgresDriver && this.connection.driver.spatialTypes.indexOf(column.type) !== -1) {\n if (column.srid != null) {\n expression += `ST_SetSRID(ST_GeomFromGeoJSON(${paramName}), ${column.srid})::${column.type}`;\n } else {\n expression += `ST_GeomFromGeoJSON(${paramName})::${column.type}`;\n }\n } else if (this.connection.driver instanceof SqlServerDriver && this.connection.driver.spatialTypes.indexOf(column.type) !== -1) {\n expression += column.type + \"::STGeomFromText(\" + paramName + \", \" + (column.srid || \"0\") + \")\";\n } else {\n expression += paramName;\n }\n }\n\n if (columnIndex === columns.length - 1) {\n if (valueSetIndex === valueSets.length - 1) {\n if (this.connection.driver instanceof OracleDriver && valueSets.length > 1) {\n expression += \" FROM DUAL \";\n } else {\n expression += \")\";\n }\n } else {\n if (this.connection.driver instanceof OracleDriver && valueSets.length > 1) {\n expression += \" FROM DUAL UNION ALL \";\n } else {\n expression += \"), \";\n }\n }\n } else {\n expression += \", \";\n }\n });\n });\n if (expression === \"()\")\n return \"\";\n\n return expression;\n } else { // for tables without metadata\n // get values needs to be inserted\n let expression = \"\";\n\n valueSets.forEach((valueSet, insertionIndex) => {\n const columns = Object.keys(valueSet);\n columns.forEach((columnName, columnIndex) => {\n if (columnIndex === 0) {\n expression += \"(\";\n }\n\n const value = valueSet[columnName];\n\n // support for SQL expressions in queries\n if (value instanceof Function) {\n expression += value();\n\n // if value for this column was not provided then insert default value\n } else if (value === undefined) {\n if (this.connection.driver instanceof AbstractSqliteDriver || this.connection.driver instanceof SapDriver) {\n expression += \"NULL\";\n\n } else {\n expression += \"DEFAULT\";\n }\n\n // just any other regular value\n } else {\n expression += this.createParameter(value);\n }\n\n if (columnIndex === Object.keys(valueSet).length - 1) {\n if (insertionIndex === valueSets.length - 1) {\n expression += \")\";\n } else {\n expression += \"), \";\n }\n }\n else {\n expression += \", \";\n }\n });\n });\n if (expression === \"()\")\n return \"\";\n return expression;\n }\n }\n\n /**\n * Gets array of values need to be inserted into the target table.\n */\n protected getValueSets(): ObjectLiteral[] {\n if (Array.isArray(this.expressionMap.valuesSet))\n return this.expressionMap.valuesSet;\n\n if (this.expressionMap.valuesSet instanceof Object)\n return [this.expressionMap.valuesSet];\n\n throw new InsertValuesMissingError();\n }\n\n /**\n * Checks if column is an auto-generated primary key, but the current insertion specifies a value for it.\n *\n * @param column\n */\n protected isOverridingAutoIncrementBehavior(column: ColumnMetadata): boolean {\n return column.isPrimary\n && column.isGenerated\n && column.generationStrategy === \"increment\"\n && this.getValueSets().some((valueSet) =>\n column.getEntityValue(valueSet) !== undefined\n && column.getEntityValue(valueSet) !== null\n );\n }\n\n}\n"],"sourceRoot":".."}
1
+ {"version":3,"sources":["../browser/src/query-builder/InsertQueryBuilder.ts"],"names":[],"mappings":"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","file":"InsertQueryBuilder.js","sourcesContent":["import {CockroachDriver} from \"../driver/cockroachdb/CockroachDriver\";\nimport {SapDriver} from \"../driver/sap/SapDriver\";\nimport {QueryBuilder} from \"./QueryBuilder\";\nimport {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {EntityTarget} from \"../common/EntityTarget\";\nimport {QueryDeepPartialEntity} from \"./QueryPartialEntity\";\nimport {SqlServerDriver} from \"../driver/sqlserver/SqlServerDriver\";\nimport {PostgresDriver} from \"../driver/postgres/PostgresDriver\";\nimport {MysqlDriver} from \"../driver/mysql/MysqlDriver\";\nimport {RandomGenerator} from \"../util/RandomGenerator\";\nimport {InsertResult} from \"./result/InsertResult\";\nimport {ReturningStatementNotSupportedError} from \"../error/ReturningStatementNotSupportedError\";\nimport {InsertValuesMissingError} from \"../error/InsertValuesMissingError\";\nimport {ColumnMetadata} from \"../metadata/ColumnMetadata\";\nimport {ReturningResultsEntityUpdator} from \"./ReturningResultsEntityUpdator\";\nimport {AbstractSqliteDriver} from \"../driver/sqlite-abstract/AbstractSqliteDriver\";\nimport {BroadcasterResult} from \"../subscriber/BroadcasterResult\";\nimport {EntitySchema} from \"../entity-schema/EntitySchema\";\nimport {OracleDriver} from \"../driver/oracle/OracleDriver\";\nimport {AuroraDataApiDriver} from \"../driver/aurora-data-api/AuroraDataApiDriver\";\nimport { TypeORMError } from \"../error\";\n\n/**\n * Allows to build complex sql queries in a fashion way and execute those queries.\n */\nexport class InsertQueryBuilder<Entity> extends QueryBuilder<Entity> {\n\n // -------------------------------------------------------------------------\n // Public Implemented Methods\n // -------------------------------------------------------------------------\n\n /**\n * Gets generated sql query without parameters being replaced.\n */\n getQuery(): string {\n let sql = this.createComment();\n sql += this.createInsertExpression();\n return sql.trim();\n }\n\n /**\n * Executes sql generated by query builder and returns raw database results.\n */\n async execute(): Promise<InsertResult> {\n // console.time(\".value sets\");\n const valueSets: ObjectLiteral[] = this.getValueSets();\n // console.timeEnd(\".value sets\");\n\n // If user passed empty array of entities then we don't need to do\n // anything.\n //\n // Fixes GitHub issues #3111 and #5734. If we were to let this through\n // we would run into problems downstream, like subscribers getting\n // invoked with the empty array where they expect an entity, and SQL\n // queries with an empty VALUES clause.\n if (valueSets.length === 0)\n return new InsertResult();\n\n // console.time(\"QueryBuilder.execute\");\n // console.time(\".database stuff\");\n const queryRunner = this.obtainQueryRunner();\n let transactionStartedByUs: boolean = false;\n\n try {\n\n // start transaction if it was enabled\n if (this.expressionMap.useTransaction === true && queryRunner.isTransactionActive === false) {\n await queryRunner.startTransaction();\n transactionStartedByUs = true;\n }\n\n // console.timeEnd(\".database stuff\");\n\n // call before insertion methods in listeners and subscribers\n if (this.expressionMap.callListeners === true && this.expressionMap.mainAlias!.hasMetadata) {\n const broadcastResult = new BroadcasterResult();\n valueSets.forEach(valueSet => {\n queryRunner.broadcaster.broadcastBeforeInsertEvent(broadcastResult, this.expressionMap.mainAlias!.metadata, valueSet);\n });\n await broadcastResult.wait();\n }\n\n let declareSql: string | null = null;\n let selectOutputSql: string | null = null;\n\n // if update entity mode is enabled we may need extra columns for the returning statement\n // console.time(\".prepare returning statement\");\n const returningResultsEntityUpdator = new ReturningResultsEntityUpdator(queryRunner, this.expressionMap);\n\n const returningColumns: ColumnMetadata[] = [];\n\n if (Array.isArray(this.expressionMap.returning) && this.expressionMap.mainAlias!.hasMetadata) {\n for (const columnPath of this.expressionMap.returning) {\n returningColumns.push(\n ...this.expressionMap.mainAlias!.metadata.findColumnsWithPropertyPath(columnPath)\n );\n }\n }\n\n if (this.expressionMap.updateEntity === true && this.expressionMap.mainAlias!.hasMetadata) {\n if (!(valueSets.length > 1 && this.connection.driver instanceof OracleDriver)) {\n this.expressionMap.extraReturningColumns = returningResultsEntityUpdator.getInsertionReturningColumns();\n }\n\n returningColumns.push(...this.expressionMap.extraReturningColumns.filter(\n c => !returningColumns.includes(c)\n ));\n }\n\n if (returningColumns.length > 0 && this.connection.driver instanceof SqlServerDriver) {\n declareSql = this.connection.driver.buildTableVariableDeclaration(\"@OutputTable\", returningColumns);\n selectOutputSql = `SELECT * FROM @OutputTable`;\n }\n // console.timeEnd(\".prepare returning statement\");\n\n // execute query\n // console.time(\".getting query and parameters\");\n const [insertSql, parameters] = this.getQueryAndParameters();\n // console.timeEnd(\".getting query and parameters\");\n\n // console.time(\".query execution by database\");\n const statements = [declareSql, insertSql, selectOutputSql];\n const sql = statements.filter(s => s != null).join(\";\\n\\n\");\n\n const queryResult = await queryRunner.query(sql, parameters, true);\n\n const insertResult = InsertResult.from(queryResult);\n\n // console.timeEnd(\".query execution by database\");\n\n // load returning results and set them to the entity if entity updation is enabled\n if (this.expressionMap.updateEntity === true && this.expressionMap.mainAlias!.hasMetadata) {\n // console.time(\".updating entity\");\n await returningResultsEntityUpdator.insert(insertResult, valueSets);\n // console.timeEnd(\".updating entity\");\n }\n\n // call after insertion methods in listeners and subscribers\n if (this.expressionMap.callListeners === true && this.expressionMap.mainAlias!.hasMetadata) {\n const broadcastResult = new BroadcasterResult();\n valueSets.forEach(valueSet => {\n queryRunner.broadcaster.broadcastAfterInsertEvent(broadcastResult, this.expressionMap.mainAlias!.metadata, valueSet);\n });\n await broadcastResult.wait();\n }\n\n // close transaction if we started it\n // console.time(\".commit\");\n if (transactionStartedByUs) {\n await queryRunner.commitTransaction();\n }\n // console.timeEnd(\".commit\");\n\n return insertResult;\n\n } catch (error) {\n\n // rollback transaction if we started it\n if (transactionStartedByUs) {\n try {\n await queryRunner.rollbackTransaction();\n } catch (rollbackError) { }\n }\n throw error;\n\n } finally {\n\n // console.time(\".releasing connection\");\n if (queryRunner !== this.queryRunner) { // means we created our own query runner\n await queryRunner.release();\n }\n // console.timeEnd(\".releasing connection\");\n // console.timeEnd(\"QueryBuilder.execute\");\n }\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Specifies INTO which entity's table insertion will be executed.\n */\n into<T>(entityTarget: EntityTarget<T>, columns?: string[]): InsertQueryBuilder<T> {\n entityTarget = entityTarget instanceof EntitySchema ? entityTarget.options.name : entityTarget;\n const mainAlias = this.createFromAlias(entityTarget);\n this.expressionMap.setMainAlias(mainAlias);\n this.expressionMap.insertColumns = columns || [];\n return (this as any) as InsertQueryBuilder<T>;\n }\n\n /**\n * Values needs to be inserted into table.\n */\n values(values: QueryDeepPartialEntity<Entity>|QueryDeepPartialEntity<Entity>[]): this {\n this.expressionMap.valuesSet = values;\n return this;\n }\n\n /**\n * Optional returning/output clause.\n * This will return given column values.\n */\n output(columns: string[]): this;\n\n /**\n * Optional returning/output clause.\n * Returning is a SQL string containing returning statement.\n */\n output(output: string): this;\n\n /**\n * Optional returning/output clause.\n */\n output(output: string|string[]): this;\n\n /**\n * Optional returning/output clause.\n */\n output(output: string|string[]): this {\n return this.returning(output);\n }\n\n /**\n * Optional returning/output clause.\n * This will return given column values.\n */\n returning(columns: string[]): this;\n\n /**\n * Optional returning/output clause.\n * Returning is a SQL string containing returning statement.\n */\n returning(returning: string): this;\n\n /**\n * Optional returning/output clause.\n */\n returning(returning: string|string[]): this;\n\n /**\n * Optional returning/output clause.\n */\n returning(returning: string|string[]): this {\n\n // not all databases support returning/output cause\n if (!this.connection.driver.isReturningSqlSupported())\n throw new ReturningStatementNotSupportedError();\n\n this.expressionMap.returning = returning;\n return this;\n }\n\n /**\n * Indicates if entity must be updated after insertion operations.\n * This may produce extra query or use RETURNING / OUTPUT statement (depend on database).\n * Enabled by default.\n */\n updateEntity(enabled: boolean): this {\n this.expressionMap.updateEntity = enabled;\n return this;\n }\n\n /**\n * Adds additional ON CONFLICT statement supported in postgres and cockroach.\n *\n * @deprecated Use `orIgnore` or `orUpdate`\n */\n onConflict(statement: string): this {\n this.expressionMap.onConflict = statement;\n return this;\n }\n\n /**\n * Adds additional ignore statement supported in databases.\n */\n orIgnore(statement: string | boolean = true): this {\n this.expressionMap.onIgnore = !!statement;\n return this;\n }\n\n /**\n * @deprecated\n */\n orUpdate(statement?: { columns?: string[], overwrite?: string[], conflict_target?: string | string[] }): this;\n\n orUpdate(overwrite: string[], conflictTarget?: string | string[]): this;\n\n /**\n * Adds additional update statement supported in databases.\n */\n orUpdate(statementOrOverwrite?: { columns?: string[], overwrite?: string[], conflict_target?: string | string[] } | string[], conflictTarget?: string | string[]): this {\n if (!Array.isArray(statementOrOverwrite)) {\n this.expressionMap.onUpdate = {\n conflict: statementOrOverwrite?.conflict_target,\n columns: statementOrOverwrite?.columns,\n overwrite: statementOrOverwrite?.overwrite,\n };\n return this;\n }\n\n this.expressionMap.onUpdate = {\n overwrite: statementOrOverwrite,\n conflict: conflictTarget,\n };\n return this;\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates INSERT express used to perform insert query.\n */\n protected createInsertExpression() {\n const tableName = this.getTableName(this.getMainTableName());\n const valuesExpression = this.createValuesExpression(); // its important to get values before returning expression because oracle rely on native parameters and ordering of them is important\n const returningExpression = (this.connection.driver instanceof OracleDriver && this.getValueSets().length > 1) ? null : this.createReturningExpression(); // oracle doesnt support returning with multi-row insert\n const columnsExpression = this.createColumnNamesExpression();\n let query = \"INSERT \";\n\n if (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver) {\n query += `${this.expressionMap.onIgnore ? \" IGNORE \" : \"\"}`;\n }\n\n query += `INTO ${tableName}`;\n\n // add columns expression\n if (columnsExpression) {\n query += `(${columnsExpression})`;\n } else {\n if (!valuesExpression && (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver)) // special syntax for mysql DEFAULT VALUES insertion\n query += \"()\";\n }\n\n // add OUTPUT expression\n if (returningExpression && this.connection.driver instanceof SqlServerDriver) {\n query += ` OUTPUT ${returningExpression}`;\n }\n\n // add VALUES expression\n if (valuesExpression) {\n if (this.connection.driver instanceof OracleDriver && this.getValueSets().length > 1) {\n query += ` ${valuesExpression}`;\n } else {\n query += ` VALUES ${valuesExpression}`;\n }\n } else {\n if (this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver) { // special syntax for mysql DEFAULT VALUES insertion\n query += \" VALUES ()\";\n } else {\n query += ` DEFAULT VALUES`;\n }\n }\n if (this.connection.driver.supportedUpsertType === \"on-conflict-do-update\") {\n if (this.expressionMap.onIgnore) {\n query += \" ON CONFLICT DO NOTHING \";\n } else if (this.expressionMap.onConflict) {\n query += ` ON CONFLICT ${this.expressionMap.onConflict} `;\n } else if (this.expressionMap.onUpdate) {\n const { overwrite, columns, conflict } = this.expressionMap.onUpdate;\n\n let conflictTarget = \"ON CONFLICT\";\n\n if (Array.isArray(conflict)) {\n conflictTarget += ` ( ${conflict.map((column) => this.escape(column)).join(\", \")} )`;\n } else if (conflict) {\n conflictTarget += ` ON CONSTRAINT ${this.escape(conflict)}`;\n }\n\n if (Array.isArray(overwrite)) {\n query += ` ${conflictTarget} DO UPDATE SET `;\n query += overwrite?.map(column => `${this.escape(column)} = EXCLUDED.${this.escape(column)}`).join(\", \");\n query += \" \";\n } else if (columns) {\n query += ` ${conflictTarget} DO UPDATE SET `;\n query += columns.map(column => `${this.escape(column)} = :${column}`).join(\", \");\n query += \" \";\n }\n }\n } else if (this.connection.driver.supportedUpsertType === \"on-duplicate-key-update\") {\n if (this.expressionMap.onUpdate) {\n const { overwrite, columns } = this.expressionMap.onUpdate;\n\n if (Array.isArray(overwrite)) {\n query += \" ON DUPLICATE KEY UPDATE \";\n query += overwrite.map(column => `${this.escape(column)} = VALUES(${this.escape(column)})`).join(\", \");\n query += \" \";\n } else if (Array.isArray(columns)) {\n query += \" ON DUPLICATE KEY UPDATE \";\n query += columns.map(column => `${this.escape(column)} = :${column}`).join(\", \");\n query += \" \";\n }\n }\n } else {\n if (this.expressionMap.onUpdate) {\n throw new TypeORMError(`onUpdate is not supported by the current database driver`);\n }\n }\n\n // add RETURNING expression\n if (returningExpression && (this.connection.driver instanceof PostgresDriver || this.connection.driver instanceof OracleDriver || this.connection.driver instanceof CockroachDriver)) {\n query += ` RETURNING ${returningExpression}`;\n }\n\n\n // Inserting a specific value for an auto-increment primary key in mssql requires enabling IDENTITY_INSERT\n // IDENTITY_INSERT can only be enabled for tables where there is an IDENTITY column and only if there is a value to be inserted (i.e. supplying DEFAULT is prohibited if IDENTITY_INSERT is enabled)\n if (this.connection.driver instanceof SqlServerDriver\n && this.expressionMap.mainAlias!.hasMetadata\n && this.expressionMap.mainAlias!.metadata.columns\n .filter((column) => this.expressionMap.insertColumns.length > 0 ? this.expressionMap.insertColumns.indexOf(column.propertyPath) !== -1 : column.isInsert)\n .some((column) => this.isOverridingAutoIncrementBehavior(column))\n ) {\n query = `SET IDENTITY_INSERT ${tableName} ON; ${query}; SET IDENTITY_INSERT ${tableName} OFF`;\n }\n\n return query;\n }\n\n /**\n * Gets list of columns where values must be inserted to.\n */\n protected getInsertedColumns(): ColumnMetadata[] {\n if (!this.expressionMap.mainAlias!.hasMetadata)\n return [];\n\n return this.expressionMap.mainAlias!.metadata.columns.filter(column => {\n\n // if user specified list of columns he wants to insert to, then we filter only them\n if (this.expressionMap.insertColumns.length)\n return this.expressionMap.insertColumns.indexOf(column.propertyPath) !== -1;\n\n // skip columns the user doesn't want included by default\n if (!column.isInsert) { return false; }\n\n // if user did not specified such list then return all columns except auto-increment one\n // for Oracle we return auto-increment column as well because Oracle does not support DEFAULT VALUES expression\n if (column.isGenerated && column.generationStrategy === \"increment\"\n && !(this.connection.driver instanceof OracleDriver)\n && !(this.connection.driver instanceof AbstractSqliteDriver)\n && !(this.connection.driver instanceof MysqlDriver)\n && !(this.connection.driver instanceof AuroraDataApiDriver)\n && !(this.connection.driver instanceof SqlServerDriver && this.isOverridingAutoIncrementBehavior(column)))\n return false;\n\n return true;\n });\n }\n\n /**\n * Creates a columns string where values must be inserted to for INSERT INTO expression.\n */\n protected createColumnNamesExpression(): string {\n const columns = this.getInsertedColumns();\n if (columns.length > 0)\n return columns.map(column => this.escape(column.databaseName)).join(\", \");\n\n // in the case if there are no insert columns specified and table without metadata used\n // we get columns from the inserted value map, in the case if only one inserted map is specified\n if (!this.expressionMap.mainAlias!.hasMetadata && !this.expressionMap.insertColumns.length) {\n const valueSets = this.getValueSets();\n if (valueSets.length === 1)\n return Object.keys(valueSets[0]).map(columnName => this.escape(columnName)).join(\", \");\n }\n\n // get a table name and all column database names\n return this.expressionMap.insertColumns.map(columnName => this.escape(columnName)).join(\", \");\n }\n\n /**\n * Creates list of values needs to be inserted in the VALUES expression.\n */\n protected createValuesExpression(): string {\n const valueSets = this.getValueSets();\n const columns = this.getInsertedColumns();\n\n // if column metadatas are given then apply all necessary operations with values\n if (columns.length > 0) {\n let expression = \"\";\n valueSets.forEach((valueSet, valueSetIndex) => {\n columns.forEach((column, columnIndex) => {\n if (columnIndex === 0) {\n if (this.connection.driver instanceof OracleDriver && valueSets.length > 1) {\n expression += \" SELECT \";\n } else {\n expression += \"(\";\n }\n }\n\n // extract real value from the entity\n let value = column.getEntityValue(valueSet);\n\n // if column is relational and value is an object then get real referenced column value from this object\n // for example column value is { question: { id: 1 } }, value will be equal to { id: 1 }\n // and we extract \"1\" from this object\n /*if (column.referencedColumn && value instanceof Object && !(value instanceof Function)) { // todo: check if we still need it since getEntityValue already has similar code\n value = column.referencedColumn.getEntityValue(value);\n }*/\n\n\n if (!(value instanceof Function)) {\n // make sure our value is normalized by a driver\n value = this.connection.driver.preparePersistentValue(value, column);\n }\n\n // newly inserted entities always have a version equal to 1 (first version)\n // also, user-specified version must be empty\n if (column.isVersion && value === undefined) {\n expression += \"1\";\n\n // } else if (column.isNestedSetLeft) {\n // const tableName = this.connection.driver.escape(column.entityMetadata.tablePath);\n // const rightColumnName = this.connection.driver.escape(column.entityMetadata.nestedSetRightColumn!.databaseName);\n // const subQuery = `(SELECT c.max + 1 FROM (SELECT MAX(${rightColumnName}) as max from ${tableName}) c)`;\n // expression += subQuery;\n //\n // } else if (column.isNestedSetRight) {\n // const tableName = this.connection.driver.escape(column.entityMetadata.tablePath);\n // const rightColumnName = this.connection.driver.escape(column.entityMetadata.nestedSetRightColumn!.databaseName);\n // const subQuery = `(SELECT c.max + 2 FROM (SELECT MAX(${rightColumnName}) as max from ${tableName}) c)`;\n // expression += subQuery;\n\n } else if (column.isDiscriminator) {\n expression += this.createParameter(this.expressionMap.mainAlias!.metadata.discriminatorValue);\n // return \"1\";\n\n // for create and update dates we insert current date\n // no, we don't do it because this constant is already in \"default\" value of the column\n // with extended timestamp functionality, like CURRENT_TIMESTAMP(6) for example\n // } else if (column.isCreateDate || column.isUpdateDate) {\n // return \"CURRENT_TIMESTAMP\";\n\n // if column is generated uuid and database does not support its generation and custom generated value was not provided by a user - we generate a new uuid value for insertion\n } else if (column.isGenerated && column.generationStrategy === \"uuid\" && !this.connection.driver.isUUIDGenerationSupported() && value === undefined) {\n\n value = RandomGenerator.uuid4();\n expression += this.createParameter(value);\n\n if (!(valueSetIndex in this.expressionMap.locallyGenerated)) {\n this.expressionMap.locallyGenerated[valueSetIndex] = {};\n }\n column.setEntityValue(this.expressionMap.locallyGenerated[valueSetIndex], value);\n\n // if value for this column was not provided then insert default value\n } else if (value === undefined) {\n if ((this.connection.driver instanceof OracleDriver && valueSets.length > 1) || this.connection.driver instanceof AbstractSqliteDriver || this.connection.driver instanceof SapDriver) { // unfortunately sqlite does not support DEFAULT expression in INSERT queries\n if (column.default !== undefined && column.default !== null) { // try to use default defined in the column\n expression += this.connection.driver.normalizeDefault(column);\n } else {\n expression += \"NULL\"; // otherwise simply use NULL and pray if column is nullable\n }\n\n } else {\n expression += \"DEFAULT\";\n }\n\n // support for SQL expressions in queries\n } else if (value instanceof Function) {\n expression += value();\n\n // just any other regular value\n } else {\n if (this.connection.driver instanceof SqlServerDriver)\n value = this.connection.driver.parametrizeValue(column, value);\n\n // we need to store array values in a special class to make sure parameter replacement will work correctly\n // if (value instanceof Array)\n // value = new ArrayParameter(value);\n\n\n const paramName = this.createParameter(value);\n\n if ((this.connection.driver instanceof MysqlDriver || this.connection.driver instanceof AuroraDataApiDriver) && this.connection.driver.spatialTypes.indexOf(column.type) !== -1) {\n const useLegacy = this.connection.driver.options.legacySpatialSupport;\n const geomFromText = useLegacy ? \"GeomFromText\" : \"ST_GeomFromText\";\n if (column.srid != null) {\n expression += `${geomFromText}(${paramName}, ${column.srid})`;\n } else {\n expression += `${geomFromText}(${paramName})`;\n }\n } else if (this.connection.driver instanceof PostgresDriver && this.connection.driver.spatialTypes.indexOf(column.type) !== -1) {\n if (column.srid != null) {\n expression += `ST_SetSRID(ST_GeomFromGeoJSON(${paramName}), ${column.srid})::${column.type}`;\n } else {\n expression += `ST_GeomFromGeoJSON(${paramName})::${column.type}`;\n }\n } else if (this.connection.driver instanceof SqlServerDriver && this.connection.driver.spatialTypes.indexOf(column.type) !== -1) {\n expression += column.type + \"::STGeomFromText(\" + paramName + \", \" + (column.srid || \"0\") + \")\";\n } else {\n expression += paramName;\n }\n }\n\n if (columnIndex === columns.length - 1) {\n if (valueSetIndex === valueSets.length - 1) {\n if (this.connection.driver instanceof OracleDriver && valueSets.length > 1) {\n expression += \" FROM DUAL \";\n } else {\n expression += \")\";\n }\n } else {\n if (this.connection.driver instanceof OracleDriver && valueSets.length > 1) {\n expression += \" FROM DUAL UNION ALL \";\n } else {\n expression += \"), \";\n }\n }\n } else {\n expression += \", \";\n }\n });\n });\n if (expression === \"()\")\n return \"\";\n\n return expression;\n } else { // for tables without metadata\n // get values needs to be inserted\n let expression = \"\";\n\n valueSets.forEach((valueSet, insertionIndex) => {\n const columns = Object.keys(valueSet);\n columns.forEach((columnName, columnIndex) => {\n if (columnIndex === 0) {\n expression += \"(\";\n }\n\n const value = valueSet[columnName];\n\n // support for SQL expressions in queries\n if (value instanceof Function) {\n expression += value();\n\n // if value for this column was not provided then insert default value\n } else if (value === undefined) {\n if (this.connection.driver instanceof AbstractSqliteDriver || this.connection.driver instanceof SapDriver) {\n expression += \"NULL\";\n\n } else {\n expression += \"DEFAULT\";\n }\n\n // just any other regular value\n } else {\n expression += this.createParameter(value);\n }\n\n if (columnIndex === Object.keys(valueSet).length - 1) {\n if (insertionIndex === valueSets.length - 1) {\n expression += \")\";\n } else {\n expression += \"), \";\n }\n }\n else {\n expression += \", \";\n }\n });\n });\n if (expression === \"()\")\n return \"\";\n return expression;\n }\n }\n\n /**\n * Gets array of values need to be inserted into the target table.\n */\n protected getValueSets(): ObjectLiteral[] {\n if (Array.isArray(this.expressionMap.valuesSet))\n return this.expressionMap.valuesSet;\n\n if (this.expressionMap.valuesSet instanceof Object)\n return [this.expressionMap.valuesSet];\n\n throw new InsertValuesMissingError();\n }\n\n /**\n * Checks if column is an auto-generated primary key, but the current insertion specifies a value for it.\n *\n * @param column\n */\n protected isOverridingAutoIncrementBehavior(column: ColumnMetadata): boolean {\n return column.isPrimary\n && column.isGenerated\n && column.generationStrategy === \"increment\"\n && this.getValueSets().some((valueSet) =>\n column.getEntityValue(valueSet) !== undefined\n && column.getEntityValue(valueSet) !== null\n );\n }\n\n}\n"],"sourceRoot":".."}
@@ -13,6 +13,7 @@ import { UpdateResult } from "../query-builder/result/UpdateResult";
13
13
  import { DeleteResult } from "../query-builder/result/DeleteResult";
14
14
  import { ObjectID } from "../driver/mongodb/typings";
15
15
  import { QueryDeepPartialEntity } from "../query-builder/QueryPartialEntity";
16
+ import { UpsertOptions } from "./UpsertOptions";
16
17
  /**
17
18
  * Base abstract entity for all entities, used in ActiveRecord patterns.
18
19
  */
@@ -142,6 +143,12 @@ export declare class BaseEntity {
142
143
  * Does not check if entity exist in the database.
143
144
  */
144
145
  static update<T extends BaseEntity>(this: ObjectType<T>, criteria: string | string[] | number | number[] | Date | Date[] | ObjectID | ObjectID[] | FindConditions<T>, partialEntity: QueryDeepPartialEntity<T>, options?: SaveOptions): Promise<UpdateResult>;
146
+ /**
147
+ * Inserts a given entity into the database, unless a unique constraint conflicts then updates the entity
148
+ * Unlike save method executes a primitive operation without cascades, relations and other operations included.
149
+ * Executes fast and efficient INSERT ... ON CONFLICT DO UPDATE/ON DUPLICATE KEY UPDATE query.
150
+ */
151
+ static upsert<T extends BaseEntity>(this: ObjectType<T> & typeof BaseEntity, entityOrEntities: QueryDeepPartialEntity<T> | (QueryDeepPartialEntity<T>[]), conflictPathsOrOptions: string[] | UpsertOptions<T>): Promise<InsertResult>;
145
152
  /**
146
153
  * Deletes entities by a given criteria.
147
154
  * Unlike remove method executes a primitive operation without cascades, relations and other operations included.
@@ -174,6 +174,14 @@ var BaseEntity = /** @class */ (function () {
174
174
  BaseEntity.update = function (criteria, partialEntity, options) {
175
175
  return this.getRepository().update(criteria, partialEntity, options);
176
176
  };
177
+ /**
178
+ * Inserts a given entity into the database, unless a unique constraint conflicts then updates the entity
179
+ * Unlike save method executes a primitive operation without cascades, relations and other operations included.
180
+ * Executes fast and efficient INSERT ... ON CONFLICT DO UPDATE/ON DUPLICATE KEY UPDATE query.
181
+ */
182
+ BaseEntity.upsert = function (entityOrEntities, conflictPathsOrOptions) {
183
+ return this.getRepository().upsert(entityOrEntities, conflictPathsOrOptions);
184
+ };
177
185
  /**
178
186
  * Deletes entities by a given criteria.
179
187
  * Unlike remove method executes a primitive operation without cascades, relations and other operations included.
@@ -1 +1 @@
1
- {"version":3,"sources":["../browser/src/repository/BaseEntity.ts"],"names":[],"mappings":"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","file":"BaseEntity.js","sourcesContent":["import {Repository} from \"./Repository\";\nimport {getConnection} from \"../globals\";\nimport {FindConditions} from \"../find-options/FindConditions\";\nimport {DeepPartial} from \"../common/DeepPartial\";\nimport {SaveOptions} from \"./SaveOptions\";\nimport {FindOneOptions} from \"../find-options/FindOneOptions\";\nimport {RemoveOptions} from \"./RemoveOptions\";\nimport {FindManyOptions} from \"../find-options/FindManyOptions\";\nimport {Connection} from \"../connection/Connection\";\nimport {ObjectType} from \"../common/ObjectType\";\nimport {SelectQueryBuilder} from \"../query-builder/SelectQueryBuilder\";\nimport {InsertResult} from \"../query-builder/result/InsertResult\";\nimport {UpdateResult} from \"../query-builder/result/UpdateResult\";\nimport {DeleteResult} from \"../query-builder/result/DeleteResult\";\nimport {ObjectID} from \"../driver/mongodb/typings\";\nimport {ObjectUtils} from \"../util/ObjectUtils\";\nimport {QueryDeepPartialEntity} from \"../query-builder/QueryPartialEntity\";\n\n/**\n * Base abstract entity for all entities, used in ActiveRecord patterns.\n */\nexport class BaseEntity {\n\n // -------------------------------------------------------------------------\n // Private Static Properties\n // -------------------------------------------------------------------------\n\n /**\n * Connection used in all static methods of the BaseEntity.\n */\n // @ts-ignore: Unused variable which is actually used\n private static usedConnection?: Connection;\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Checks if entity has an id.\n * If entity composite compose ids, it will check them all.\n */\n hasId(): boolean {\n return (this.constructor as any).getRepository().hasId(this);\n }\n\n /**\n * Saves current entity in the database.\n * If entity does not exist in the database then inserts, otherwise updates.\n */\n save(options?: SaveOptions): Promise<this> {\n return (this.constructor as any).getRepository().save(this, options);\n }\n\n /**\n * Removes current entity from the database.\n */\n remove(options?: RemoveOptions): Promise<this> {\n return (this.constructor as any).getRepository().remove(this, options);\n }\n\n /**\n * Records the delete date of current entity.\n */\n softRemove(options?: SaveOptions): Promise<this> {\n return (this.constructor as any).getRepository().softRemove(this, options);\n }\n\n /**\n * Recovers a given entity in the database.\n */\n recover(options?: SaveOptions): Promise<this> {\n return (this.constructor as any).getRepository().recover(this, options);\n }\n\n /**\n * Reloads entity data from the database.\n */\n async reload(): Promise<void> {\n const base: any = this.constructor;\n const newestEntity: BaseEntity = await base.getRepository().findOneOrFail(base.getId(this));\n\n ObjectUtils.assign(this, newestEntity);\n }\n\n // -------------------------------------------------------------------------\n // Public Static Methods\n // -------------------------------------------------------------------------\n\n /**\n * Sets connection to be used by entity.\n */\n static useConnection(connection: Connection) {\n this.usedConnection = connection;\n }\n\n /**\n * Gets current entity's Repository.\n */\n static getRepository<T extends BaseEntity>(this: ObjectType<T>): Repository<T> {\n const connection: Connection = (this as any).usedConnection || getConnection();\n return connection.getRepository<T>(this);\n }\n\n /**\n * Returns object that is managed by this repository.\n * If this repository manages entity from schema,\n * then it returns a name of that schema instead.\n */\n static get target(): Function|string {\n return this.getRepository().target;\n }\n\n /**\n * Checks entity has an id.\n * If entity composite compose ids, it will check them all.\n */\n static hasId(entity: BaseEntity): boolean {\n return this.getRepository().hasId(entity);\n }\n\n /**\n * Gets entity mixed id.\n */\n static getId<T extends BaseEntity>(this: ObjectType<T>, entity: T): any {\n return (this as any).getRepository().getId(entity);\n }\n\n /**\n * Creates a new query builder that can be used to build a sql query.\n */\n static createQueryBuilder<T extends BaseEntity>(this: ObjectType<T>, alias?: string): SelectQueryBuilder<T> {\n return (this as any).getRepository().createQueryBuilder(alias);\n }\n\n /**\n * Creates a new entity instance.\n */\n static create<T extends BaseEntity>(this: ObjectType<T>): T;\n\n /**\n * Creates a new entities and copies all entity properties from given objects into their new entities.\n * Note that it copies only properties that present in entity schema.\n */\n static create<T extends BaseEntity>(this: ObjectType<T>, entityLikeArray: DeepPartial<T>[]): T[];\n\n /**\n * Creates a new entity instance and copies all entity properties from this object into a new entity.\n * Note that it copies only properties that present in entity schema.\n */\n static create<T extends BaseEntity>(this: ObjectType<T>, entityLike: DeepPartial<T>): T;\n /**\n * Creates a new entity instance and copies all entity properties from this object into a new entity.\n * Note that it copies only properties that present in entity schema.\n */\n static create<T extends BaseEntity>(this: ObjectType<T>, entityOrEntities?: any): T {\n return (this as any).getRepository().create(entityOrEntities);\n }\n\n /**\n * Merges multiple entities (or entity-like objects) into a given entity.\n */\n static merge<T extends BaseEntity>(this: ObjectType<T>, mergeIntoEntity: T, ...entityLikes: DeepPartial<T>[]): T {\n return (this as any).getRepository().merge(mergeIntoEntity, ...entityLikes);\n }\n\n /**\n * Creates a new entity from the given plain javascript object. If entity already exist in the database, then\n * it loads it (and everything related to it), replaces all values with the new ones from the given object\n * and returns this new entity. This new entity is actually a loaded from the db entity with all properties\n * replaced from the new object.\n *\n * Note that given entity-like object must have an entity id / primary key to find entity by.\n * Returns undefined if entity with given id was not found.\n */\n static preload<T extends BaseEntity>(this: ObjectType<T>, entityLike: DeepPartial<T>): Promise<T|undefined> {\n return (this as any).getRepository().preload(entityLike);\n }\n\n /**\n * Saves all given entities in the database.\n * If entities do not exist in the database then inserts, otherwise updates.\n */\n static save<T extends BaseEntity>(this: ObjectType<T>, entities: T[], options?: SaveOptions): Promise<T[]>;\n\n /**\n * Saves a given entity in the database.\n * If entity does not exist in the database then inserts, otherwise updates.\n */\n static save<T extends BaseEntity>(this: ObjectType<T>, entity: T, options?: SaveOptions): Promise<T>;\n\n /**\n * Saves one or many given entities.\n */\n static save<T extends BaseEntity>(this: ObjectType<T>, entityOrEntities: T|T[], options?: SaveOptions): Promise<T|T[]> {\n return (this as any).getRepository().save(entityOrEntities as any, options);\n }\n\n /**\n * Removes a given entities from the database.\n */\n static remove<T extends BaseEntity>(this: ObjectType<T>, entities: T[], options?: RemoveOptions): Promise<T[]>;\n\n /**\n * Removes a given entity from the database.\n */\n static remove<T extends BaseEntity>(this: ObjectType<T>, entity: T, options?: RemoveOptions): Promise<T>;\n\n /**\n * Removes one or many given entities.\n */\n static remove<T extends BaseEntity>(this: ObjectType<T>, entityOrEntities: T|T[], options?: RemoveOptions): Promise<T|T[]> {\n return (this as any).getRepository().remove(entityOrEntities as any, options);\n }\n\n /**\n * Records the delete date of all given entities.\n */\n static softRemove<T extends BaseEntity>(this: ObjectType<T>, entities: T[], options?: SaveOptions): Promise<T[]>;\n\n /**\n * Records the delete date of a given entity.\n */\n static softRemove<T extends BaseEntity>(this: ObjectType<T>, entity: T, options?: SaveOptions): Promise<T>;\n\n /**\n * Records the delete date of one or many given entities.\n */\n static softRemove<T extends BaseEntity>(this: ObjectType<T>, entityOrEntities: T|T[], options?: SaveOptions): Promise<T|T[]> {\n return (this as any).getRepository().softRemove(entityOrEntities as any, options);\n }\n\n /**\n * Inserts a given entity into the database.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient INSERT query.\n * Does not check if entity exist in the database, so query will fail if duplicate entity is being inserted.\n */\n static insert<T extends BaseEntity>(this: ObjectType<T>, entity: QueryDeepPartialEntity<T>|QueryDeepPartialEntity<T>[], options?: SaveOptions): Promise<InsertResult> {\n return (this as any).getRepository().insert(entity, options);\n }\n\n /**\n * Updates entity partially. Entity can be found by a given conditions.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient UPDATE query.\n * Does not check if entity exist in the database.\n */\n static update<T extends BaseEntity>(this: ObjectType<T>, criteria: string|string[]|number|number[]|Date|Date[]|ObjectID|ObjectID[]|FindConditions<T>, partialEntity: QueryDeepPartialEntity<T>, options?: SaveOptions): Promise<UpdateResult> {\n return (this as any).getRepository().update(criteria, partialEntity, options);\n }\n\n /**\n * Deletes entities by a given criteria.\n * Unlike remove method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient DELETE query.\n * Does not check if entity exist in the database.\n */\n static delete<T extends BaseEntity>(this: ObjectType<T>, criteria: string|string[]|number|number[]|Date|Date[]|ObjectID|ObjectID[]|FindConditions<T>, options?: RemoveOptions): Promise<DeleteResult> {\n return (this as any).getRepository().delete(criteria, options);\n }\n\n /**\n * Counts entities that match given options.\n */\n static count<T extends BaseEntity>(this: ObjectType<T>, options?: FindManyOptions<T>): Promise<number>;\n\n /**\n * Counts entities that match given conditions.\n */\n static count<T extends BaseEntity>(this: ObjectType<T>, conditions?: FindConditions<T>): Promise<number>;\n\n /**\n * Counts entities that match given find options or conditions.\n */\n static count<T extends BaseEntity>(this: ObjectType<T>, optionsOrConditions?: FindManyOptions<T>|FindConditions<T>): Promise<number> {\n return (this as any).getRepository().count(optionsOrConditions as any);\n }\n\n /**\n * Finds entities that match given options.\n */\n static find<T extends BaseEntity>(this: ObjectType<T>, options?: FindManyOptions<T>): Promise<T[]>;\n\n /**\n * Finds entities that match given conditions.\n */\n static find<T extends BaseEntity>(this: ObjectType<T>, conditions?: FindConditions<T>): Promise<T[]>;\n\n /**\n * Finds entities that match given find options or conditions.\n */\n static find<T extends BaseEntity>(this: ObjectType<T>, optionsOrConditions?: FindManyOptions<T>|FindConditions<T>): Promise<T[]> {\n return (this as any).getRepository().find(optionsOrConditions as any);\n }\n\n /**\n * Finds entities that match given find options.\n * Also counts all entities that match given conditions,\n * but ignores pagination settings (from and take options).\n */\n static findAndCount<T extends BaseEntity>(this: ObjectType<T>, options?: FindManyOptions<T>): Promise<[ T[], number ]>;\n\n /**\n * Finds entities that match given conditions.\n * Also counts all entities that match given conditions,\n * but ignores pagination settings (from and take options).\n */\n static findAndCount<T extends BaseEntity>(this: ObjectType<T>, conditions?: FindConditions<T>): Promise<[ T[], number ]>;\n\n /**\n * Finds entities that match given find options or conditions.\n * Also counts all entities that match given conditions,\n * but ignores pagination settings (from and take options).\n */\n static findAndCount<T extends BaseEntity>(this: ObjectType<T>, optionsOrConditions?: FindManyOptions<T>|FindConditions<T>): Promise<[ T[], number ]> {\n return (this as any).getRepository().findAndCount(optionsOrConditions as any);\n }\n\n /**\n * Finds entities by ids.\n * Optionally find options can be applied.\n */\n static findByIds<T extends BaseEntity>(this: ObjectType<T>, ids: any[], options?: FindManyOptions<T>): Promise<T[]>;\n\n /**\n * Finds entities by ids.\n * Optionally conditions can be applied.\n */\n static findByIds<T extends BaseEntity>(this: ObjectType<T>, ids: any[], conditions?: FindConditions<T>): Promise<T[]>;\n\n /**\n * Finds entities by ids.\n * Optionally find options can be applied.\n */\n static findByIds<T extends BaseEntity>(this: ObjectType<T>, ids: any[], optionsOrConditions?: FindManyOptions<T>|FindConditions<T>): Promise<T[]> {\n return (this as any).getRepository().findByIds(ids, optionsOrConditions as any);\n }\n\n /**\n * Finds first entity that matches given options.\n */\n static findOne<T extends BaseEntity>(this: ObjectType<T>, id?: string|number|Date|ObjectID, options?: FindOneOptions<T>): Promise<T|undefined>;\n\n /**\n * Finds first entity that matches given options.\n */\n static findOne<T extends BaseEntity>(this: ObjectType<T>, options?: FindOneOptions<T>): Promise<T|undefined>;\n\n /**\n * Finds first entity that matches given conditions.\n */\n static findOne<T extends BaseEntity>(this: ObjectType<T>, conditions?: FindConditions<T>, options?: FindOneOptions<T>): Promise<T|undefined>;\n\n /**\n * Finds first entity that matches given conditions.\n */\n static findOne<T extends BaseEntity>(this: ObjectType<T>, optionsOrConditions?: string|number|Date|ObjectID|FindOneOptions<T>|FindConditions<T>, maybeOptions?: FindOneOptions<T>): Promise<T|undefined> {\n return (this as any).getRepository().findOne(optionsOrConditions as any, maybeOptions);\n }\n\n /**\n * Finds first entity that matches given options.\n */\n static findOneOrFail<T extends BaseEntity>(this: ObjectType<T>, id?: string|number|Date|ObjectID, options?: FindOneOptions<T>): Promise<T>;\n\n /**\n * Finds first entity that matches given options.\n */\n static findOneOrFail<T extends BaseEntity>(this: ObjectType<T>, options?: FindOneOptions<T>): Promise<T>;\n\n /**\n * Finds first entity that matches given conditions.\n */\n static findOneOrFail<T extends BaseEntity>(this: ObjectType<T>, conditions?: FindConditions<T>, options?: FindOneOptions<T>): Promise<T>;\n\n /**\n * Finds first entity that matches given conditions.\n */\n static findOneOrFail<T extends BaseEntity>(this: ObjectType<T>, optionsOrConditions?: string|number|Date|ObjectID|FindOneOptions<T>|FindConditions<T>, maybeOptions?: FindOneOptions<T>): Promise<T> {\n return (this as any).getRepository().findOneOrFail(optionsOrConditions as any, maybeOptions);\n }\n\n /**\n * Executes a raw SQL query and returns a raw database results.\n * Raw query execution is supported only by relational databases (MongoDB is not supported).\n */\n static query<T extends BaseEntity>(this: ObjectType<T>, query: string, parameters?: any[]): Promise<any> {\n return (this as any).getRepository().query(query, parameters);\n }\n\n /**\n * Clears all the data from the given table/collection (truncates/drops it).\n */\n static clear<T extends BaseEntity>(this: ObjectType<T>, ): Promise<void> {\n return (this as any).getRepository().clear();\n }\n\n}\n"],"sourceRoot":".."}
1
+ {"version":3,"sources":["../browser/src/repository/BaseEntity.ts"],"names":[],"mappings":"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","file":"BaseEntity.js","sourcesContent":["import {Repository} from \"./Repository\";\nimport {getConnection} from \"../globals\";\nimport {FindConditions} from \"../find-options/FindConditions\";\nimport {DeepPartial} from \"../common/DeepPartial\";\nimport {SaveOptions} from \"./SaveOptions\";\nimport {FindOneOptions} from \"../find-options/FindOneOptions\";\nimport {RemoveOptions} from \"./RemoveOptions\";\nimport {FindManyOptions} from \"../find-options/FindManyOptions\";\nimport {Connection} from \"../connection/Connection\";\nimport {ObjectType} from \"../common/ObjectType\";\nimport {SelectQueryBuilder} from \"../query-builder/SelectQueryBuilder\";\nimport {InsertResult} from \"../query-builder/result/InsertResult\";\nimport {UpdateResult} from \"../query-builder/result/UpdateResult\";\nimport {DeleteResult} from \"../query-builder/result/DeleteResult\";\nimport {ObjectID} from \"../driver/mongodb/typings\";\nimport {ObjectUtils} from \"../util/ObjectUtils\";\nimport {QueryDeepPartialEntity} from \"../query-builder/QueryPartialEntity\";\nimport {UpsertOptions} from \"./UpsertOptions\";\n\n/**\n * Base abstract entity for all entities, used in ActiveRecord patterns.\n */\nexport class BaseEntity {\n\n // -------------------------------------------------------------------------\n // Private Static Properties\n // -------------------------------------------------------------------------\n\n /**\n * Connection used in all static methods of the BaseEntity.\n */\n // @ts-ignore: Unused variable which is actually used\n private static usedConnection?: Connection;\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Checks if entity has an id.\n * If entity composite compose ids, it will check them all.\n */\n hasId(): boolean {\n return (this.constructor as any).getRepository().hasId(this);\n }\n\n /**\n * Saves current entity in the database.\n * If entity does not exist in the database then inserts, otherwise updates.\n */\n save(options?: SaveOptions): Promise<this> {\n return (this.constructor as any).getRepository().save(this, options);\n }\n\n /**\n * Removes current entity from the database.\n */\n remove(options?: RemoveOptions): Promise<this> {\n return (this.constructor as any).getRepository().remove(this, options);\n }\n\n /**\n * Records the delete date of current entity.\n */\n softRemove(options?: SaveOptions): Promise<this> {\n return (this.constructor as any).getRepository().softRemove(this, options);\n }\n\n /**\n * Recovers a given entity in the database.\n */\n recover(options?: SaveOptions): Promise<this> {\n return (this.constructor as any).getRepository().recover(this, options);\n }\n\n /**\n * Reloads entity data from the database.\n */\n async reload(): Promise<void> {\n const base: any = this.constructor;\n const newestEntity: BaseEntity = await base.getRepository().findOneOrFail(base.getId(this));\n\n ObjectUtils.assign(this, newestEntity);\n }\n\n // -------------------------------------------------------------------------\n // Public Static Methods\n // -------------------------------------------------------------------------\n\n /**\n * Sets connection to be used by entity.\n */\n static useConnection(connection: Connection) {\n this.usedConnection = connection;\n }\n\n /**\n * Gets current entity's Repository.\n */\n static getRepository<T extends BaseEntity>(this: ObjectType<T>): Repository<T> {\n const connection: Connection = (this as any).usedConnection || getConnection();\n return connection.getRepository<T>(this);\n }\n\n /**\n * Returns object that is managed by this repository.\n * If this repository manages entity from schema,\n * then it returns a name of that schema instead.\n */\n static get target(): Function|string {\n return this.getRepository().target;\n }\n\n /**\n * Checks entity has an id.\n * If entity composite compose ids, it will check them all.\n */\n static hasId(entity: BaseEntity): boolean {\n return this.getRepository().hasId(entity);\n }\n\n /**\n * Gets entity mixed id.\n */\n static getId<T extends BaseEntity>(this: ObjectType<T>, entity: T): any {\n return (this as any).getRepository().getId(entity);\n }\n\n /**\n * Creates a new query builder that can be used to build a sql query.\n */\n static createQueryBuilder<T extends BaseEntity>(this: ObjectType<T>, alias?: string): SelectQueryBuilder<T> {\n return (this as any).getRepository().createQueryBuilder(alias);\n }\n\n /**\n * Creates a new entity instance.\n */\n static create<T extends BaseEntity>(this: ObjectType<T>): T;\n\n /**\n * Creates a new entities and copies all entity properties from given objects into their new entities.\n * Note that it copies only properties that present in entity schema.\n */\n static create<T extends BaseEntity>(this: ObjectType<T>, entityLikeArray: DeepPartial<T>[]): T[];\n\n /**\n * Creates a new entity instance and copies all entity properties from this object into a new entity.\n * Note that it copies only properties that present in entity schema.\n */\n static create<T extends BaseEntity>(this: ObjectType<T>, entityLike: DeepPartial<T>): T;\n /**\n * Creates a new entity instance and copies all entity properties from this object into a new entity.\n * Note that it copies only properties that present in entity schema.\n */\n static create<T extends BaseEntity>(this: ObjectType<T>, entityOrEntities?: any): T {\n return (this as any).getRepository().create(entityOrEntities);\n }\n\n /**\n * Merges multiple entities (or entity-like objects) into a given entity.\n */\n static merge<T extends BaseEntity>(this: ObjectType<T>, mergeIntoEntity: T, ...entityLikes: DeepPartial<T>[]): T {\n return (this as any).getRepository().merge(mergeIntoEntity, ...entityLikes);\n }\n\n /**\n * Creates a new entity from the given plain javascript object. If entity already exist in the database, then\n * it loads it (and everything related to it), replaces all values with the new ones from the given object\n * and returns this new entity. This new entity is actually a loaded from the db entity with all properties\n * replaced from the new object.\n *\n * Note that given entity-like object must have an entity id / primary key to find entity by.\n * Returns undefined if entity with given id was not found.\n */\n static preload<T extends BaseEntity>(this: ObjectType<T>, entityLike: DeepPartial<T>): Promise<T|undefined> {\n return (this as any).getRepository().preload(entityLike);\n }\n\n /**\n * Saves all given entities in the database.\n * If entities do not exist in the database then inserts, otherwise updates.\n */\n static save<T extends BaseEntity>(this: ObjectType<T>, entities: T[], options?: SaveOptions): Promise<T[]>;\n\n /**\n * Saves a given entity in the database.\n * If entity does not exist in the database then inserts, otherwise updates.\n */\n static save<T extends BaseEntity>(this: ObjectType<T>, entity: T, options?: SaveOptions): Promise<T>;\n\n /**\n * Saves one or many given entities.\n */\n static save<T extends BaseEntity>(this: ObjectType<T>, entityOrEntities: T|T[], options?: SaveOptions): Promise<T|T[]> {\n return (this as any).getRepository().save(entityOrEntities as any, options);\n }\n\n /**\n * Removes a given entities from the database.\n */\n static remove<T extends BaseEntity>(this: ObjectType<T>, entities: T[], options?: RemoveOptions): Promise<T[]>;\n\n /**\n * Removes a given entity from the database.\n */\n static remove<T extends BaseEntity>(this: ObjectType<T>, entity: T, options?: RemoveOptions): Promise<T>;\n\n /**\n * Removes one or many given entities.\n */\n static remove<T extends BaseEntity>(this: ObjectType<T>, entityOrEntities: T|T[], options?: RemoveOptions): Promise<T|T[]> {\n return (this as any).getRepository().remove(entityOrEntities as any, options);\n }\n\n /**\n * Records the delete date of all given entities.\n */\n static softRemove<T extends BaseEntity>(this: ObjectType<T>, entities: T[], options?: SaveOptions): Promise<T[]>;\n\n /**\n * Records the delete date of a given entity.\n */\n static softRemove<T extends BaseEntity>(this: ObjectType<T>, entity: T, options?: SaveOptions): Promise<T>;\n\n /**\n * Records the delete date of one or many given entities.\n */\n static softRemove<T extends BaseEntity>(this: ObjectType<T>, entityOrEntities: T|T[], options?: SaveOptions): Promise<T|T[]> {\n return (this as any).getRepository().softRemove(entityOrEntities as any, options);\n }\n\n /**\n * Inserts a given entity into the database.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient INSERT query.\n * Does not check if entity exist in the database, so query will fail if duplicate entity is being inserted.\n */\n static insert<T extends BaseEntity>(this: ObjectType<T>, entity: QueryDeepPartialEntity<T>|QueryDeepPartialEntity<T>[], options?: SaveOptions): Promise<InsertResult> {\n return (this as any).getRepository().insert(entity, options);\n }\n\n /**\n * Updates entity partially. Entity can be found by a given conditions.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient UPDATE query.\n * Does not check if entity exist in the database.\n */\n static update<T extends BaseEntity>(this: ObjectType<T>, criteria: string|string[]|number|number[]|Date|Date[]|ObjectID|ObjectID[]|FindConditions<T>, partialEntity: QueryDeepPartialEntity<T>, options?: SaveOptions): Promise<UpdateResult> {\n return (this as any).getRepository().update(criteria, partialEntity, options);\n }\n\n /**\n * Inserts a given entity into the database, unless a unique constraint conflicts then updates the entity\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient INSERT ... ON CONFLICT DO UPDATE/ON DUPLICATE KEY UPDATE query.\n */\n static upsert<T extends BaseEntity>(this: ObjectType<T> & typeof BaseEntity, \n entityOrEntities: QueryDeepPartialEntity<T> | (QueryDeepPartialEntity<T>[]),\n conflictPathsOrOptions: string[] | UpsertOptions<T>): Promise<InsertResult> {\n return this.getRepository<T>().upsert(entityOrEntities, conflictPathsOrOptions);\n }\n\n /**\n * Deletes entities by a given criteria.\n * Unlike remove method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient DELETE query.\n * Does not check if entity exist in the database.\n */\n static delete<T extends BaseEntity>(this: ObjectType<T>, criteria: string|string[]|number|number[]|Date|Date[]|ObjectID|ObjectID[]|FindConditions<T>, options?: RemoveOptions): Promise<DeleteResult> {\n return (this as any).getRepository().delete(criteria, options);\n }\n\n /**\n * Counts entities that match given options.\n */\n static count<T extends BaseEntity>(this: ObjectType<T>, options?: FindManyOptions<T>): Promise<number>;\n\n /**\n * Counts entities that match given conditions.\n */\n static count<T extends BaseEntity>(this: ObjectType<T>, conditions?: FindConditions<T>): Promise<number>;\n\n /**\n * Counts entities that match given find options or conditions.\n */\n static count<T extends BaseEntity>(this: ObjectType<T>, optionsOrConditions?: FindManyOptions<T>|FindConditions<T>): Promise<number> {\n return (this as any).getRepository().count(optionsOrConditions as any);\n }\n\n /**\n * Finds entities that match given options.\n */\n static find<T extends BaseEntity>(this: ObjectType<T>, options?: FindManyOptions<T>): Promise<T[]>;\n\n /**\n * Finds entities that match given conditions.\n */\n static find<T extends BaseEntity>(this: ObjectType<T>, conditions?: FindConditions<T>): Promise<T[]>;\n\n /**\n * Finds entities that match given find options or conditions.\n */\n static find<T extends BaseEntity>(this: ObjectType<T>, optionsOrConditions?: FindManyOptions<T>|FindConditions<T>): Promise<T[]> {\n return (this as any).getRepository().find(optionsOrConditions as any);\n }\n\n /**\n * Finds entities that match given find options.\n * Also counts all entities that match given conditions,\n * but ignores pagination settings (from and take options).\n */\n static findAndCount<T extends BaseEntity>(this: ObjectType<T>, options?: FindManyOptions<T>): Promise<[ T[], number ]>;\n\n /**\n * Finds entities that match given conditions.\n * Also counts all entities that match given conditions,\n * but ignores pagination settings (from and take options).\n */\n static findAndCount<T extends BaseEntity>(this: ObjectType<T>, conditions?: FindConditions<T>): Promise<[ T[], number ]>;\n\n /**\n * Finds entities that match given find options or conditions.\n * Also counts all entities that match given conditions,\n * but ignores pagination settings (from and take options).\n */\n static findAndCount<T extends BaseEntity>(this: ObjectType<T>, optionsOrConditions?: FindManyOptions<T>|FindConditions<T>): Promise<[ T[], number ]> {\n return (this as any).getRepository().findAndCount(optionsOrConditions as any);\n }\n\n /**\n * Finds entities by ids.\n * Optionally find options can be applied.\n */\n static findByIds<T extends BaseEntity>(this: ObjectType<T>, ids: any[], options?: FindManyOptions<T>): Promise<T[]>;\n\n /**\n * Finds entities by ids.\n * Optionally conditions can be applied.\n */\n static findByIds<T extends BaseEntity>(this: ObjectType<T>, ids: any[], conditions?: FindConditions<T>): Promise<T[]>;\n\n /**\n * Finds entities by ids.\n * Optionally find options can be applied.\n */\n static findByIds<T extends BaseEntity>(this: ObjectType<T>, ids: any[], optionsOrConditions?: FindManyOptions<T>|FindConditions<T>): Promise<T[]> {\n return (this as any).getRepository().findByIds(ids, optionsOrConditions as any);\n }\n\n /**\n * Finds first entity that matches given options.\n */\n static findOne<T extends BaseEntity>(this: ObjectType<T>, id?: string|number|Date|ObjectID, options?: FindOneOptions<T>): Promise<T|undefined>;\n\n /**\n * Finds first entity that matches given options.\n */\n static findOne<T extends BaseEntity>(this: ObjectType<T>, options?: FindOneOptions<T>): Promise<T|undefined>;\n\n /**\n * Finds first entity that matches given conditions.\n */\n static findOne<T extends BaseEntity>(this: ObjectType<T>, conditions?: FindConditions<T>, options?: FindOneOptions<T>): Promise<T|undefined>;\n\n /**\n * Finds first entity that matches given conditions.\n */\n static findOne<T extends BaseEntity>(this: ObjectType<T>, optionsOrConditions?: string|number|Date|ObjectID|FindOneOptions<T>|FindConditions<T>, maybeOptions?: FindOneOptions<T>): Promise<T|undefined> {\n return (this as any).getRepository().findOne(optionsOrConditions as any, maybeOptions);\n }\n\n /**\n * Finds first entity that matches given options.\n */\n static findOneOrFail<T extends BaseEntity>(this: ObjectType<T>, id?: string|number|Date|ObjectID, options?: FindOneOptions<T>): Promise<T>;\n\n /**\n * Finds first entity that matches given options.\n */\n static findOneOrFail<T extends BaseEntity>(this: ObjectType<T>, options?: FindOneOptions<T>): Promise<T>;\n\n /**\n * Finds first entity that matches given conditions.\n */\n static findOneOrFail<T extends BaseEntity>(this: ObjectType<T>, conditions?: FindConditions<T>, options?: FindOneOptions<T>): Promise<T>;\n\n /**\n * Finds first entity that matches given conditions.\n */\n static findOneOrFail<T extends BaseEntity>(this: ObjectType<T>, optionsOrConditions?: string|number|Date|ObjectID|FindOneOptions<T>|FindConditions<T>, maybeOptions?: FindOneOptions<T>): Promise<T> {\n return (this as any).getRepository().findOneOrFail(optionsOrConditions as any, maybeOptions);\n }\n\n /**\n * Executes a raw SQL query and returns a raw database results.\n * Raw query execution is supported only by relational databases (MongoDB is not supported).\n */\n static query<T extends BaseEntity>(this: ObjectType<T>, query: string, parameters?: any[]): Promise<any> {\n return (this as any).getRepository().query(query, parameters);\n }\n\n /**\n * Clears all the data from the given table/collection (truncates/drops it).\n */\n static clear<T extends BaseEntity>(this: ObjectType<T>, ): Promise<void> {\n return (this as any).getRepository().clear();\n }\n\n}\n"],"sourceRoot":".."}
@@ -14,6 +14,7 @@ import { InsertResult } from "../query-builder/result/InsertResult";
14
14
  import { QueryDeepPartialEntity } from "../query-builder/QueryPartialEntity";
15
15
  import { ObjectID } from "../driver/mongodb/typings";
16
16
  import { FindConditions } from "../find-options/FindConditions";
17
+ import { UpsertOptions } from "./UpsertOptions";
17
18
  /**
18
19
  * Repository is supposed to work with your entity objects. Find entities, insert, update, delete, etc.
19
20
  */
@@ -163,6 +164,12 @@ export declare class Repository<Entity extends ObjectLiteral> {
163
164
  * Does not check if entity exist in the database.
164
165
  */
165
166
  update(criteria: string | string[] | number | number[] | Date | Date[] | ObjectID | ObjectID[] | FindConditions<Entity>, partialEntity: QueryDeepPartialEntity<Entity>): Promise<UpdateResult>;
167
+ /**
168
+ * Inserts a given entity into the database, unless a unique constraint conflicts then updates the entity
169
+ * Unlike save method executes a primitive operation without cascades, relations and other operations included.
170
+ * Executes fast and efficient INSERT ... ON CONFLICT DO UPDATE/ON DUPLICATE KEY UPDATE query.
171
+ */
172
+ upsert(entityOrEntities: QueryDeepPartialEntity<Entity> | (QueryDeepPartialEntity<Entity>[]), conflictPathsOrOptions: string[] | UpsertOptions<Entity>): Promise<InsertResult>;
166
173
  /**
167
174
  * Deletes entities by a given criteria.
168
175
  * Unlike save method executes a primitive operation without cascades, relations and other operations included.
@@ -111,6 +111,14 @@ var Repository = /** @class */ (function () {
111
111
  Repository.prototype.update = function (criteria, partialEntity) {
112
112
  return this.manager.update(this.metadata.target, criteria, partialEntity);
113
113
  };
114
+ /**
115
+ * Inserts a given entity into the database, unless a unique constraint conflicts then updates the entity
116
+ * Unlike save method executes a primitive operation without cascades, relations and other operations included.
117
+ * Executes fast and efficient INSERT ... ON CONFLICT DO UPDATE/ON DUPLICATE KEY UPDATE query.
118
+ */
119
+ Repository.prototype.upsert = function (entityOrEntities, conflictPathsOrOptions) {
120
+ return this.manager.upsert(this.metadata.target, entityOrEntities, conflictPathsOrOptions);
121
+ };
114
122
  /**
115
123
  * Deletes entities by a given criteria.
116
124
  * Unlike save method executes a primitive operation without cascades, relations and other operations included.
@@ -1 +1 @@
1
- {"version":3,"sources":["../browser/src/repository/Repository.ts"],"names":[],"mappings":"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","file":"Repository.js","sourcesContent":["import {EntityMetadata} from \"../metadata/EntityMetadata\";\nimport {FindManyOptions} from \"../find-options/FindManyOptions\";\nimport {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {FindOneOptions} from \"../find-options/FindOneOptions\";\nimport {DeepPartial} from \"../common/DeepPartial\";\nimport {SaveOptions} from \"./SaveOptions\";\nimport {RemoveOptions} from \"./RemoveOptions\";\nimport {EntityManager} from \"../entity-manager/EntityManager\";\nimport {QueryRunner} from \"../query-runner/QueryRunner\";\nimport {SelectQueryBuilder} from \"../query-builder/SelectQueryBuilder\";\nimport {DeleteResult} from \"../query-builder/result/DeleteResult\";\nimport {UpdateResult} from \"../query-builder/result/UpdateResult\";\nimport {InsertResult} from \"../query-builder/result/InsertResult\";\nimport {QueryDeepPartialEntity} from \"../query-builder/QueryPartialEntity\";\nimport {ObjectID} from \"../driver/mongodb/typings\";\nimport {FindConditions} from \"../find-options/FindConditions\";\n\n/**\n * Repository is supposed to work with your entity objects. Find entities, insert, update, delete, etc.\n */\nexport class Repository<Entity extends ObjectLiteral> {\n\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * Entity Manager used by this repository.\n */\n readonly manager: EntityManager;\n\n /**\n * Entity metadata of the entity current repository manages.\n */\n readonly metadata: EntityMetadata;\n\n /**\n * Query runner provider used for this repository.\n */\n readonly queryRunner?: QueryRunner;\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates a new query builder that can be used to build a sql query.\n */\n createQueryBuilder(alias?: string, queryRunner?: QueryRunner): SelectQueryBuilder<Entity> {\n return this.manager.createQueryBuilder<Entity>(this.metadata.target as any, alias || this.metadata.targetName, queryRunner || this.queryRunner);\n }\n\n /**\n * Returns object that is managed by this repository.\n * If this repository manages entity from schema,\n * then it returns a name of that schema instead.\n */\n get target(): Function|string {\n return this.metadata.target;\n }\n\n /**\n * Checks if entity has an id.\n * If entity composite compose ids, it will check them all.\n */\n hasId(entity: Entity): boolean {\n return this.manager.hasId(this.metadata.target, entity);\n }\n\n /**\n * Gets entity mixed id.\n */\n getId(entity: Entity): any {\n return this.manager.getId(this.metadata.target, entity);\n }\n\n /**\n * Creates a new entity instance.\n */\n create(): Entity;\n\n /**\n * Creates new entities and copies all entity properties from given objects into their new entities.\n * Note that it copies only properties that are present in entity schema.\n */\n create(entityLikeArray: DeepPartial<Entity>[]): Entity[];\n\n /**\n * Creates a new entity instance and copies all entity properties from this object into a new entity.\n * Note that it copies only properties that are present in entity schema.\n */\n create(entityLike: DeepPartial<Entity>): Entity;\n\n /**\n * Creates a new entity instance or instances.\n * Can copy properties from the given object into new entities.\n */\n create(plainEntityLikeOrPlainEntityLikes?: DeepPartial<Entity>|DeepPartial<Entity>[]): Entity|Entity[] {\n return this.manager.create<any>(this.metadata.target as any, plainEntityLikeOrPlainEntityLikes as any);\n }\n\n /**\n * Merges multiple entities (or entity-like objects) into a given entity.\n */\n merge(mergeIntoEntity: Entity, ...entityLikes: DeepPartial<Entity>[]): Entity {\n return this.manager.merge(this.metadata.target as any, mergeIntoEntity, ...entityLikes);\n }\n\n /**\n * Creates a new entity from the given plain javascript object. If entity already exist in the database, then\n * it loads it (and everything related to it), replaces all values with the new ones from the given object\n * and returns this new entity. This new entity is actually a loaded from the db entity with all properties\n * replaced from the new object.\n *\n * Note that given entity-like object must have an entity id / primary key to find entity by.\n * Returns undefined if entity with given id was not found.\n */\n preload(entityLike: DeepPartial<Entity>): Promise<Entity|undefined> {\n return this.manager.preload(this.metadata.target as any, entityLike);\n }\n\n /**\n * Saves all given entities in the database.\n * If entities do not exist in the database then inserts, otherwise updates.\n */\n save<T extends DeepPartial<Entity>>(entities: T[], options: SaveOptions & { reload: false }): Promise<T[]>;\n\n /**\n * Saves all given entities in the database.\n * If entities do not exist in the database then inserts, otherwise updates.\n */\n save<T extends DeepPartial<Entity>>(entities: T[], options?: SaveOptions): Promise<(T & Entity)[]>;\n\n /**\n * Saves a given entity in the database.\n * If entity does not exist in the database then inserts, otherwise updates.\n */\n save<T extends DeepPartial<Entity>>(entity: T, options: SaveOptions & { reload: false }): Promise<T>;\n\n /**\n * Saves a given entity in the database.\n * If entity does not exist in the database then inserts, otherwise updates.\n */\n save<T extends DeepPartial<Entity>>(entity: T, options?: SaveOptions): Promise<T & Entity>;\n\n /**\n * Saves one or many given entities.\n */\n save<T extends DeepPartial<Entity>>(entityOrEntities: T|T[], options?: SaveOptions): Promise<T|T[]> {\n return this.manager.save<Entity, T>(this.metadata.target as any, entityOrEntities as any, options);\n }\n\n /**\n * Removes a given entities from the database.\n */\n remove(entities: Entity[], options?: RemoveOptions): Promise<Entity[]>;\n\n /**\n * Removes a given entity from the database.\n */\n remove(entity: Entity, options?: RemoveOptions): Promise<Entity>;\n\n /**\n * Removes one or many given entities.\n */\n remove(entityOrEntities: Entity|Entity[], options?: RemoveOptions): Promise<Entity|Entity[]> {\n return this.manager.remove(this.metadata.target as any, entityOrEntities as any, options);\n }\n\n /**\n * Records the delete date of all given entities.\n */\n softRemove<T extends DeepPartial<Entity>>(entities: T[], options: SaveOptions & { reload: false }): Promise<T[]>;\n\n /**\n * Records the delete date of all given entities.\n */\n softRemove<T extends DeepPartial<Entity>>(entities: T[], options?: SaveOptions): Promise<(T & Entity)[]>;\n\n /**\n * Records the delete date of a given entity.\n */\n softRemove<T extends DeepPartial<Entity>>(entity: T, options: SaveOptions & { reload: false }): Promise<T>;\n\n /**\n * Records the delete date of a given entity.\n */\n softRemove<T extends DeepPartial<Entity>>(entity: T, options?: SaveOptions): Promise<T & Entity>;\n\n /**\n * Records the delete date of one or many given entities.\n */\n softRemove<T extends DeepPartial<Entity>>(entityOrEntities: T|T[], options?: SaveOptions): Promise<T|T[]> {\n return this.manager.softRemove<Entity, T>(this.metadata.target as any, entityOrEntities as any, options);\n }\n\n /**\n * Recovers all given entities in the database.\n */\n recover<T extends DeepPartial<Entity>>(entities: T[], options: SaveOptions & { reload: false }): Promise<T[]>;\n\n /**\n * Recovers all given entities in the database.\n */\n recover<T extends DeepPartial<Entity>>(entities: T[], options?: SaveOptions): Promise<(T & Entity)[]>;\n\n /**\n * Recovers a given entity in the database.\n */\n recover<T extends DeepPartial<Entity>>(entity: T, options: SaveOptions & { reload: false }): Promise<T>;\n\n /**\n * Recovers a given entity in the database.\n */\n recover<T extends DeepPartial<Entity>>(entity: T, options?: SaveOptions): Promise<T & Entity>;\n\n /**\n * Recovers one or many given entities.\n */\n recover<T extends DeepPartial<Entity>>(entityOrEntities: T|T[], options?: SaveOptions): Promise<T|T[]> {\n return this.manager.recover<Entity, T>(this.metadata.target as any, entityOrEntities as any, options);\n }\n\n /**\n * Inserts a given entity into the database.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient INSERT query.\n * Does not check if entity exist in the database, so query will fail if duplicate entity is being inserted.\n */\n insert(entity: QueryDeepPartialEntity<Entity>|(QueryDeepPartialEntity<Entity>[])): Promise<InsertResult> {\n return this.manager.insert(this.metadata.target as any, entity);\n }\n\n /**\n * Updates entity partially. Entity can be found by a given conditions.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient UPDATE query.\n * Does not check if entity exist in the database.\n */\n update(criteria: string|string[]|number|number[]|Date|Date[]|ObjectID|ObjectID[]|FindConditions<Entity>, partialEntity: QueryDeepPartialEntity<Entity>): Promise<UpdateResult> {\n return this.manager.update(this.metadata.target as any, criteria as any, partialEntity);\n }\n\n /**\n * Deletes entities by a given criteria.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient DELETE query.\n * Does not check if entity exist in the database.\n */\n delete(criteria: string|string[]|number|number[]|Date|Date[]|ObjectID|ObjectID[]|FindConditions<Entity>): Promise<DeleteResult> {\n return this.manager.delete(this.metadata.target as any, criteria as any);\n }\n\n /**\n * Records the delete date of entities by a given criteria.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient SOFT-DELETE query.\n * Does not check if entity exist in the database.\n */\n softDelete(criteria: string|string[]|number|number[]|Date|Date[]|ObjectID|ObjectID[]|FindConditions<Entity>): Promise<UpdateResult> {\n return this.manager.softDelete(this.metadata.target as any, criteria as any);\n }\n\n /**\n * Restores entities by a given criteria.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient SOFT-DELETE query.\n * Does not check if entity exist in the database.\n */\n restore(criteria: string|string[]|number|number[]|Date|Date[]|ObjectID|ObjectID[]|FindConditions<Entity>): Promise<UpdateResult> {\n return this.manager.restore(this.metadata.target as any, criteria as any);\n }\n\n /**\n * Counts entities that match given options.\n */\n count(options?: FindManyOptions<Entity>): Promise<number>;\n\n /**\n * Counts entities that match given conditions.\n */\n count(conditions?: FindConditions<Entity>): Promise<number>;\n\n /**\n * Counts entities that match given find options or conditions.\n */\n count(optionsOrConditions?: FindManyOptions<Entity>|FindConditions<Entity>): Promise<number> {\n return this.manager.count(this.metadata.target as any, optionsOrConditions as any);\n }\n\n /**\n * Finds entities that match given options.\n */\n find(options?: FindManyOptions<Entity>): Promise<Entity[]>;\n\n /**\n * Finds entities that match given conditions.\n */\n find(conditions?: FindConditions<Entity>): Promise<Entity[]>;\n\n /**\n * Finds entities that match given find options or conditions.\n */\n find(optionsOrConditions?: FindManyOptions<Entity>|FindConditions<Entity>): Promise<Entity[]> {\n return this.manager.find(this.metadata.target as any, optionsOrConditions as any);\n }\n\n /**\n * Finds entities that match given find options.\n * Also counts all entities that match given conditions,\n * but ignores pagination settings (from and take options).\n */\n findAndCount(options?: FindManyOptions<Entity>): Promise<[ Entity[], number ]>;\n\n /**\n * Finds entities that match given conditions.\n * Also counts all entities that match given conditions,\n * but ignores pagination settings (from and take options).\n */\n findAndCount(conditions?: FindConditions<Entity>): Promise<[ Entity[], number ]>;\n\n /**\n * Finds entities that match given find options or conditions.\n * Also counts all entities that match given conditions,\n * but ignores pagination settings (from and take options).\n */\n findAndCount(optionsOrConditions?: FindManyOptions<Entity>|FindConditions<Entity>): Promise<[ Entity[], number ]> {\n return this.manager.findAndCount(this.metadata.target as any, optionsOrConditions as any);\n }\n\n /**\n * Finds entities by ids.\n * Optionally find options can be applied.\n */\n findByIds(ids: any[], options?: FindManyOptions<Entity>): Promise<Entity[]>;\n\n /**\n * Finds entities by ids.\n * Optionally conditions can be applied.\n */\n findByIds(ids: any[], conditions?: FindConditions<Entity>): Promise<Entity[]>;\n\n /**\n * Finds entities by ids.\n * Optionally find options can be applied.\n */\n findByIds(ids: any[], optionsOrConditions?: FindManyOptions<Entity>|FindConditions<Entity>): Promise<Entity[]> {\n return this.manager.findByIds(this.metadata.target as any, ids, optionsOrConditions as any);\n }\n\n /**\n * Finds first entity that matches given options.\n */\n findOne(id?: string|number|Date|ObjectID, options?: FindOneOptions<Entity>): Promise<Entity|undefined>;\n\n /**\n * Finds first entity that matches given options.\n */\n findOne(options?: FindOneOptions<Entity>): Promise<Entity|undefined>;\n\n /**\n * Finds first entity that matches given conditions.\n */\n findOne(conditions?: FindConditions<Entity>, options?: FindOneOptions<Entity>): Promise<Entity|undefined>;\n\n /**\n * Finds first entity that matches given conditions.\n */\n findOne(optionsOrConditions?: string|number|Date|ObjectID|FindOneOptions<Entity>|FindConditions<Entity>, maybeOptions?: FindOneOptions<Entity>): Promise<Entity|undefined> {\n return this.manager.findOne(this.metadata.target as any, optionsOrConditions as any, maybeOptions);\n }\n\n /**\n * Finds first entity that matches given options.\n */\n findOneOrFail(id?: string|number|Date|ObjectID, options?: FindOneOptions<Entity>): Promise<Entity>;\n\n /**\n * Finds first entity that matches given options.\n */\n findOneOrFail(options?: FindOneOptions<Entity>): Promise<Entity>;\n\n /**\n * Finds first entity that matches given conditions.\n */\n findOneOrFail(conditions?: FindConditions<Entity>, options?: FindOneOptions<Entity>): Promise<Entity>;\n\n /**\n * Finds first entity that matches given conditions.\n */\n findOneOrFail(optionsOrConditions?: string|number|Date|ObjectID|FindOneOptions<Entity>|FindConditions<Entity>, maybeOptions?: FindOneOptions<Entity>): Promise<Entity> {\n return this.manager.findOneOrFail(this.metadata.target as any, optionsOrConditions as any, maybeOptions);\n }\n\n /**\n * Executes a raw SQL query and returns a raw database results.\n * Raw query execution is supported only by relational databases (MongoDB is not supported).\n */\n query(query: string, parameters?: any[]): Promise<any> {\n return this.manager.query(query, parameters);\n }\n\n /**\n * Clears all the data from the given table/collection (truncates/drops it).\n *\n * Note: this method uses TRUNCATE and may not work as you expect in transactions on some platforms.\n * @see https://stackoverflow.com/a/5972738/925151\n */\n clear(): Promise<void> {\n return this.manager.clear(this.metadata.target);\n }\n\n /**\n * Increments some column by provided value of the entities matched given conditions.\n */\n increment(conditions: FindConditions<Entity>, propertyPath: string, value: number | string): Promise<UpdateResult> {\n return this.manager.increment(this.metadata.target, conditions, propertyPath, value);\n }\n\n /**\n * Decrements some column by provided value of the entities matched given conditions.\n */\n decrement(conditions: FindConditions<Entity>, propertyPath: string, value: number | string): Promise<UpdateResult> {\n return this.manager.decrement(this.metadata.target, conditions, propertyPath, value);\n }\n\n}\n"],"sourceRoot":".."}
1
+ {"version":3,"sources":["../browser/src/repository/Repository.ts"],"names":[],"mappings":"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","file":"Repository.js","sourcesContent":["import {EntityMetadata} from \"../metadata/EntityMetadata\";\nimport {FindManyOptions} from \"../find-options/FindManyOptions\";\nimport {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {FindOneOptions} from \"../find-options/FindOneOptions\";\nimport {DeepPartial} from \"../common/DeepPartial\";\nimport {SaveOptions} from \"./SaveOptions\";\nimport {RemoveOptions} from \"./RemoveOptions\";\nimport {EntityManager} from \"../entity-manager/EntityManager\";\nimport {QueryRunner} from \"../query-runner/QueryRunner\";\nimport {SelectQueryBuilder} from \"../query-builder/SelectQueryBuilder\";\nimport {DeleteResult} from \"../query-builder/result/DeleteResult\";\nimport {UpdateResult} from \"../query-builder/result/UpdateResult\";\nimport {InsertResult} from \"../query-builder/result/InsertResult\";\nimport {QueryDeepPartialEntity} from \"../query-builder/QueryPartialEntity\";\nimport {ObjectID} from \"../driver/mongodb/typings\";\nimport {FindConditions} from \"../find-options/FindConditions\";\nimport {UpsertOptions} from \"./UpsertOptions\";\n\n/**\n * Repository is supposed to work with your entity objects. Find entities, insert, update, delete, etc.\n */\nexport class Repository<Entity extends ObjectLiteral> {\n\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * Entity Manager used by this repository.\n */\n readonly manager: EntityManager;\n\n /**\n * Entity metadata of the entity current repository manages.\n */\n readonly metadata: EntityMetadata;\n\n /**\n * Query runner provider used for this repository.\n */\n readonly queryRunner?: QueryRunner;\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates a new query builder that can be used to build a sql query.\n */\n createQueryBuilder(alias?: string, queryRunner?: QueryRunner): SelectQueryBuilder<Entity> {\n return this.manager.createQueryBuilder<Entity>(this.metadata.target as any, alias || this.metadata.targetName, queryRunner || this.queryRunner);\n }\n\n /**\n * Returns object that is managed by this repository.\n * If this repository manages entity from schema,\n * then it returns a name of that schema instead.\n */\n get target(): Function|string {\n return this.metadata.target;\n }\n\n /**\n * Checks if entity has an id.\n * If entity composite compose ids, it will check them all.\n */\n hasId(entity: Entity): boolean {\n return this.manager.hasId(this.metadata.target, entity);\n }\n\n /**\n * Gets entity mixed id.\n */\n getId(entity: Entity): any {\n return this.manager.getId(this.metadata.target, entity);\n }\n\n /**\n * Creates a new entity instance.\n */\n create(): Entity;\n\n /**\n * Creates new entities and copies all entity properties from given objects into their new entities.\n * Note that it copies only properties that are present in entity schema.\n */\n create(entityLikeArray: DeepPartial<Entity>[]): Entity[];\n\n /**\n * Creates a new entity instance and copies all entity properties from this object into a new entity.\n * Note that it copies only properties that are present in entity schema.\n */\n create(entityLike: DeepPartial<Entity>): Entity;\n\n /**\n * Creates a new entity instance or instances.\n * Can copy properties from the given object into new entities.\n */\n create(plainEntityLikeOrPlainEntityLikes?: DeepPartial<Entity>|DeepPartial<Entity>[]): Entity|Entity[] {\n return this.manager.create<any>(this.metadata.target as any, plainEntityLikeOrPlainEntityLikes as any);\n }\n\n /**\n * Merges multiple entities (or entity-like objects) into a given entity.\n */\n merge(mergeIntoEntity: Entity, ...entityLikes: DeepPartial<Entity>[]): Entity {\n return this.manager.merge(this.metadata.target as any, mergeIntoEntity, ...entityLikes);\n }\n\n /**\n * Creates a new entity from the given plain javascript object. If entity already exist in the database, then\n * it loads it (and everything related to it), replaces all values with the new ones from the given object\n * and returns this new entity. This new entity is actually a loaded from the db entity with all properties\n * replaced from the new object.\n *\n * Note that given entity-like object must have an entity id / primary key to find entity by.\n * Returns undefined if entity with given id was not found.\n */\n preload(entityLike: DeepPartial<Entity>): Promise<Entity|undefined> {\n return this.manager.preload(this.metadata.target as any, entityLike);\n }\n\n /**\n * Saves all given entities in the database.\n * If entities do not exist in the database then inserts, otherwise updates.\n */\n save<T extends DeepPartial<Entity>>(entities: T[], options: SaveOptions & { reload: false }): Promise<T[]>;\n\n /**\n * Saves all given entities in the database.\n * If entities do not exist in the database then inserts, otherwise updates.\n */\n save<T extends DeepPartial<Entity>>(entities: T[], options?: SaveOptions): Promise<(T & Entity)[]>;\n\n /**\n * Saves a given entity in the database.\n * If entity does not exist in the database then inserts, otherwise updates.\n */\n save<T extends DeepPartial<Entity>>(entity: T, options: SaveOptions & { reload: false }): Promise<T>;\n\n /**\n * Saves a given entity in the database.\n * If entity does not exist in the database then inserts, otherwise updates.\n */\n save<T extends DeepPartial<Entity>>(entity: T, options?: SaveOptions): Promise<T & Entity>;\n\n /**\n * Saves one or many given entities.\n */\n save<T extends DeepPartial<Entity>>(entityOrEntities: T|T[], options?: SaveOptions): Promise<T|T[]> {\n return this.manager.save<Entity, T>(this.metadata.target as any, entityOrEntities as any, options);\n }\n\n /**\n * Removes a given entities from the database.\n */\n remove(entities: Entity[], options?: RemoveOptions): Promise<Entity[]>;\n\n /**\n * Removes a given entity from the database.\n */\n remove(entity: Entity, options?: RemoveOptions): Promise<Entity>;\n\n /**\n * Removes one or many given entities.\n */\n remove(entityOrEntities: Entity|Entity[], options?: RemoveOptions): Promise<Entity|Entity[]> {\n return this.manager.remove(this.metadata.target as any, entityOrEntities as any, options);\n }\n\n /**\n * Records the delete date of all given entities.\n */\n softRemove<T extends DeepPartial<Entity>>(entities: T[], options: SaveOptions & { reload: false }): Promise<T[]>;\n\n /**\n * Records the delete date of all given entities.\n */\n softRemove<T extends DeepPartial<Entity>>(entities: T[], options?: SaveOptions): Promise<(T & Entity)[]>;\n\n /**\n * Records the delete date of a given entity.\n */\n softRemove<T extends DeepPartial<Entity>>(entity: T, options: SaveOptions & { reload: false }): Promise<T>;\n\n /**\n * Records the delete date of a given entity.\n */\n softRemove<T extends DeepPartial<Entity>>(entity: T, options?: SaveOptions): Promise<T & Entity>;\n\n /**\n * Records the delete date of one or many given entities.\n */\n softRemove<T extends DeepPartial<Entity>>(entityOrEntities: T|T[], options?: SaveOptions): Promise<T|T[]> {\n return this.manager.softRemove<Entity, T>(this.metadata.target as any, entityOrEntities as any, options);\n }\n\n /**\n * Recovers all given entities in the database.\n */\n recover<T extends DeepPartial<Entity>>(entities: T[], options: SaveOptions & { reload: false }): Promise<T[]>;\n\n /**\n * Recovers all given entities in the database.\n */\n recover<T extends DeepPartial<Entity>>(entities: T[], options?: SaveOptions): Promise<(T & Entity)[]>;\n\n /**\n * Recovers a given entity in the database.\n */\n recover<T extends DeepPartial<Entity>>(entity: T, options: SaveOptions & { reload: false }): Promise<T>;\n\n /**\n * Recovers a given entity in the database.\n */\n recover<T extends DeepPartial<Entity>>(entity: T, options?: SaveOptions): Promise<T & Entity>;\n\n /**\n * Recovers one or many given entities.\n */\n recover<T extends DeepPartial<Entity>>(entityOrEntities: T|T[], options?: SaveOptions): Promise<T|T[]> {\n return this.manager.recover<Entity, T>(this.metadata.target as any, entityOrEntities as any, options);\n }\n\n /**\n * Inserts a given entity into the database.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient INSERT query.\n * Does not check if entity exist in the database, so query will fail if duplicate entity is being inserted.\n */\n insert(entity: QueryDeepPartialEntity<Entity>|(QueryDeepPartialEntity<Entity>[])): Promise<InsertResult> {\n return this.manager.insert(this.metadata.target as any, entity);\n }\n\n /**\n * Updates entity partially. Entity can be found by a given conditions.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient UPDATE query.\n * Does not check if entity exist in the database.\n */\n update(criteria: string|string[]|number|number[]|Date|Date[]|ObjectID|ObjectID[]|FindConditions<Entity>, partialEntity: QueryDeepPartialEntity<Entity>): Promise<UpdateResult> {\n return this.manager.update(this.metadata.target as any, criteria as any, partialEntity);\n }\n\n /**\n * Inserts a given entity into the database, unless a unique constraint conflicts then updates the entity\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient INSERT ... ON CONFLICT DO UPDATE/ON DUPLICATE KEY UPDATE query.\n */\n upsert(\n entityOrEntities: QueryDeepPartialEntity<Entity> | (QueryDeepPartialEntity<Entity>[]),\n conflictPathsOrOptions: string[] | UpsertOptions<Entity>): Promise<InsertResult> {\n return this.manager.upsert(this.metadata.target as any, entityOrEntities, conflictPathsOrOptions);\n }\n\n /**\n * Deletes entities by a given criteria.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient DELETE query.\n * Does not check if entity exist in the database.\n */\n delete(criteria: string|string[]|number|number[]|Date|Date[]|ObjectID|ObjectID[]|FindConditions<Entity>): Promise<DeleteResult> {\n return this.manager.delete(this.metadata.target as any, criteria as any);\n }\n\n /**\n * Records the delete date of entities by a given criteria.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient SOFT-DELETE query.\n * Does not check if entity exist in the database.\n */\n softDelete(criteria: string|string[]|number|number[]|Date|Date[]|ObjectID|ObjectID[]|FindConditions<Entity>): Promise<UpdateResult> {\n return this.manager.softDelete(this.metadata.target as any, criteria as any);\n }\n\n /**\n * Restores entities by a given criteria.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient SOFT-DELETE query.\n * Does not check if entity exist in the database.\n */\n restore(criteria: string|string[]|number|number[]|Date|Date[]|ObjectID|ObjectID[]|FindConditions<Entity>): Promise<UpdateResult> {\n return this.manager.restore(this.metadata.target as any, criteria as any);\n }\n\n /**\n * Counts entities that match given options.\n */\n count(options?: FindManyOptions<Entity>): Promise<number>;\n\n /**\n * Counts entities that match given conditions.\n */\n count(conditions?: FindConditions<Entity>): Promise<number>;\n\n /**\n * Counts entities that match given find options or conditions.\n */\n count(optionsOrConditions?: FindManyOptions<Entity>|FindConditions<Entity>): Promise<number> {\n return this.manager.count(this.metadata.target as any, optionsOrConditions as any);\n }\n\n /**\n * Finds entities that match given options.\n */\n find(options?: FindManyOptions<Entity>): Promise<Entity[]>;\n\n /**\n * Finds entities that match given conditions.\n */\n find(conditions?: FindConditions<Entity>): Promise<Entity[]>;\n\n /**\n * Finds entities that match given find options or conditions.\n */\n find(optionsOrConditions?: FindManyOptions<Entity>|FindConditions<Entity>): Promise<Entity[]> {\n return this.manager.find(this.metadata.target as any, optionsOrConditions as any);\n }\n\n /**\n * Finds entities that match given find options.\n * Also counts all entities that match given conditions,\n * but ignores pagination settings (from and take options).\n */\n findAndCount(options?: FindManyOptions<Entity>): Promise<[ Entity[], number ]>;\n\n /**\n * Finds entities that match given conditions.\n * Also counts all entities that match given conditions,\n * but ignores pagination settings (from and take options).\n */\n findAndCount(conditions?: FindConditions<Entity>): Promise<[ Entity[], number ]>;\n\n /**\n * Finds entities that match given find options or conditions.\n * Also counts all entities that match given conditions,\n * but ignores pagination settings (from and take options).\n */\n findAndCount(optionsOrConditions?: FindManyOptions<Entity>|FindConditions<Entity>): Promise<[ Entity[], number ]> {\n return this.manager.findAndCount(this.metadata.target as any, optionsOrConditions as any);\n }\n\n /**\n * Finds entities by ids.\n * Optionally find options can be applied.\n */\n findByIds(ids: any[], options?: FindManyOptions<Entity>): Promise<Entity[]>;\n\n /**\n * Finds entities by ids.\n * Optionally conditions can be applied.\n */\n findByIds(ids: any[], conditions?: FindConditions<Entity>): Promise<Entity[]>;\n\n /**\n * Finds entities by ids.\n * Optionally find options can be applied.\n */\n findByIds(ids: any[], optionsOrConditions?: FindManyOptions<Entity>|FindConditions<Entity>): Promise<Entity[]> {\n return this.manager.findByIds(this.metadata.target as any, ids, optionsOrConditions as any);\n }\n\n /**\n * Finds first entity that matches given options.\n */\n findOne(id?: string|number|Date|ObjectID, options?: FindOneOptions<Entity>): Promise<Entity|undefined>;\n\n /**\n * Finds first entity that matches given options.\n */\n findOne(options?: FindOneOptions<Entity>): Promise<Entity|undefined>;\n\n /**\n * Finds first entity that matches given conditions.\n */\n findOne(conditions?: FindConditions<Entity>, options?: FindOneOptions<Entity>): Promise<Entity|undefined>;\n\n /**\n * Finds first entity that matches given conditions.\n */\n findOne(optionsOrConditions?: string|number|Date|ObjectID|FindOneOptions<Entity>|FindConditions<Entity>, maybeOptions?: FindOneOptions<Entity>): Promise<Entity|undefined> {\n return this.manager.findOne(this.metadata.target as any, optionsOrConditions as any, maybeOptions);\n }\n\n /**\n * Finds first entity that matches given options.\n */\n findOneOrFail(id?: string|number|Date|ObjectID, options?: FindOneOptions<Entity>): Promise<Entity>;\n\n /**\n * Finds first entity that matches given options.\n */\n findOneOrFail(options?: FindOneOptions<Entity>): Promise<Entity>;\n\n /**\n * Finds first entity that matches given conditions.\n */\n findOneOrFail(conditions?: FindConditions<Entity>, options?: FindOneOptions<Entity>): Promise<Entity>;\n\n /**\n * Finds first entity that matches given conditions.\n */\n findOneOrFail(optionsOrConditions?: string|number|Date|ObjectID|FindOneOptions<Entity>|FindConditions<Entity>, maybeOptions?: FindOneOptions<Entity>): Promise<Entity> {\n return this.manager.findOneOrFail(this.metadata.target as any, optionsOrConditions as any, maybeOptions);\n }\n\n /**\n * Executes a raw SQL query and returns a raw database results.\n * Raw query execution is supported only by relational databases (MongoDB is not supported).\n */\n query(query: string, parameters?: any[]): Promise<any> {\n return this.manager.query(query, parameters);\n }\n\n /**\n * Clears all the data from the given table/collection (truncates/drops it).\n *\n * Note: this method uses TRUNCATE and may not work as you expect in transactions on some platforms.\n * @see https://stackoverflow.com/a/5972738/925151\n */\n clear(): Promise<void> {\n return this.manager.clear(this.metadata.target);\n }\n\n /**\n * Increments some column by provided value of the entities matched given conditions.\n */\n increment(conditions: FindConditions<Entity>, propertyPath: string, value: number | string): Promise<UpdateResult> {\n return this.manager.increment(this.metadata.target, conditions, propertyPath, value);\n }\n\n /**\n * Decrements some column by provided value of the entities matched given conditions.\n */\n decrement(conditions: FindConditions<Entity>, propertyPath: string, value: number | string): Promise<UpdateResult> {\n return this.manager.decrement(this.metadata.target, conditions, propertyPath, value);\n }\n\n}\n"],"sourceRoot":".."}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Special options passed to Repository#upsert
3
+ */
4
+ export interface UpsertOptions<Entity> {
5
+ conflictPaths: string[];
6
+ }