typeorm 0.3.29-dev.cc07c90 → 0.3.30

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 (179) hide show
  1. package/README.md +2 -2
  2. package/browser/cache/RedisQueryResultCache.d.ts +6 -9
  3. package/browser/cache/RedisQueryResultCache.js +21 -42
  4. package/browser/cache/RedisQueryResultCache.js.map +1 -1
  5. package/browser/cli-ts-node-commonjs.js +0 -0
  6. package/browser/cli-ts-node-esm.js +0 -0
  7. package/browser/driver/aurora-mysql/AuroraMysqlDriver.js +18 -5
  8. package/browser/driver/aurora-mysql/AuroraMysqlDriver.js.map +1 -1
  9. package/browser/driver/cockroachdb/CockroachDriver.d.ts +2 -2
  10. package/browser/driver/cockroachdb/CockroachDriver.js +13 -3
  11. package/browser/driver/cockroachdb/CockroachDriver.js.map +1 -1
  12. package/browser/driver/cockroachdb/CockroachQueryRunner.js +22 -16
  13. package/browser/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  14. package/browser/driver/mysql/MysqlDriver.js +18 -5
  15. package/browser/driver/mysql/MysqlDriver.js.map +1 -1
  16. package/browser/driver/oracle/OracleDriver.d.ts +2 -2
  17. package/browser/driver/oracle/OracleDriver.js +8 -5
  18. package/browser/driver/oracle/OracleDriver.js.map +1 -1
  19. package/browser/driver/postgres/PostgresDriver.d.ts +2 -2
  20. package/browser/driver/postgres/PostgresDriver.js +18 -5
  21. package/browser/driver/postgres/PostgresDriver.js.map +1 -1
  22. package/browser/driver/postgres/PostgresQueryRunner.js +16 -10
  23. package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
  24. package/browser/driver/sap/SapConnectionOptions.d.ts +8 -1
  25. package/browser/driver/sap/SapConnectionOptions.js.map +1 -1
  26. package/browser/driver/sap/SapDriver.js +4 -8
  27. package/browser/driver/sap/SapDriver.js.map +1 -1
  28. package/browser/driver/spanner/SpannerDriver.d.ts +2 -2
  29. package/browser/driver/spanner/SpannerDriver.js +1 -1
  30. package/browser/driver/spanner/SpannerDriver.js.map +1 -1
  31. package/browser/driver/sqlserver/SqlServerDriver.d.ts +2 -2
  32. package/browser/driver/sqlserver/SqlServerDriver.js +1 -1
  33. package/browser/driver/sqlserver/SqlServerDriver.js.map +1 -1
  34. package/browser/driver/sqlserver/SqlServerQueryRunner.js +4 -2
  35. package/browser/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  36. package/browser/entity-manager/EntityManager.d.ts +3 -2
  37. package/browser/entity-manager/EntityManager.js +32 -18
  38. package/browser/entity-manager/EntityManager.js.map +1 -1
  39. package/browser/error/QueryFailedError.js +1 -2
  40. package/browser/error/QueryFailedError.js.map +1 -1
  41. package/browser/find-options/operator/JsonContains.d.ts +1 -1
  42. package/browser/find-options/operator/JsonContains.js.map +1 -1
  43. package/browser/index.d.ts +3 -0
  44. package/browser/index.js +1 -0
  45. package/browser/index.js.map +1 -1
  46. package/browser/metadata-builder/ClosureJunctionEntityMetadataBuilder.js +2 -0
  47. package/browser/metadata-builder/ClosureJunctionEntityMetadataBuilder.js.map +1 -1
  48. package/browser/metadata-builder/RelationJoinColumnBuilder.d.ts +11 -5
  49. package/browser/metadata-builder/RelationJoinColumnBuilder.js +11 -5
  50. package/browser/metadata-builder/RelationJoinColumnBuilder.js.map +1 -1
  51. package/browser/migration/MigrationExecutor.d.ts +3 -1
  52. package/browser/migration/MigrationExecutor.js +13 -3
  53. package/browser/migration/MigrationExecutor.js.map +1 -1
  54. package/browser/persistence/SubjectChangedColumnsComputer.js +6 -2
  55. package/browser/persistence/SubjectChangedColumnsComputer.js.map +1 -1
  56. package/browser/persistence/SubjectExecutor.d.ts +3 -0
  57. package/browser/persistence/SubjectExecutor.js +11 -0
  58. package/browser/persistence/SubjectExecutor.js.map +1 -1
  59. package/browser/query-builder/QueryBuilder.d.ts +8 -0
  60. package/browser/query-builder/QueryBuilder.js +42 -24
  61. package/browser/query-builder/QueryBuilder.js.map +1 -1
  62. package/browser/query-builder/ReturningOption.d.ts +4 -0
  63. package/browser/query-builder/ReturningOption.js +3 -0
  64. package/browser/query-builder/ReturningOption.js.map +1 -0
  65. package/browser/query-builder/SelectQueryBuilder.d.ts +1 -5
  66. package/browser/query-builder/SelectQueryBuilder.js +48 -54
  67. package/browser/query-builder/SelectQueryBuilder.js.map +1 -1
  68. package/browser/query-builder/SoftDeleteQueryBuilder.js +17 -12
  69. package/browser/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
  70. package/browser/query-builder/UpdateQueryBuilder.js +17 -12
  71. package/browser/query-builder/UpdateQueryBuilder.js.map +1 -1
  72. package/browser/repository/BaseEntity.d.ts +2 -1
  73. package/browser/repository/BaseEntity.js +2 -2
  74. package/browser/repository/BaseEntity.js.map +1 -1
  75. package/browser/repository/Repository.d.ts +3 -2
  76. package/browser/repository/Repository.js +4 -4
  77. package/browser/repository/Repository.js.map +1 -1
  78. package/browser/repository/TreeRepository.js +2 -2
  79. package/browser/repository/TreeRepository.js.map +1 -1
  80. package/browser/repository/UpdateOptions.d.ts +11 -0
  81. package/browser/repository/UpdateOptions.js +3 -0
  82. package/browser/repository/UpdateOptions.js.map +1 -0
  83. package/browser/repository/UpsertOptions.d.ts +6 -0
  84. package/browser/repository/UpsertOptions.js.map +1 -1
  85. package/browser/schema-builder/RdbmsSchemaBuilder.js +1 -1
  86. package/browser/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
  87. package/browser/util/OrmUtils.d.ts +13 -0
  88. package/browser/util/OrmUtils.js +53 -0
  89. package/browser/util/OrmUtils.js.map +1 -1
  90. package/cache/RedisQueryResultCache.d.ts +6 -9
  91. package/cache/RedisQueryResultCache.js +21 -42
  92. package/cache/RedisQueryResultCache.js.map +1 -1
  93. package/commands/InitCommand.js +1 -1
  94. package/commands/MigrationRunCommand.js +4 -4
  95. package/commands/MigrationRunCommand.js.map +1 -1
  96. package/driver/aurora-mysql/AuroraMysqlDriver.js +18 -5
  97. package/driver/aurora-mysql/AuroraMysqlDriver.js.map +1 -1
  98. package/driver/cockroachdb/CockroachDriver.d.ts +2 -2
  99. package/driver/cockroachdb/CockroachDriver.js +13 -3
  100. package/driver/cockroachdb/CockroachDriver.js.map +1 -1
  101. package/driver/cockroachdb/CockroachQueryRunner.js +22 -16
  102. package/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  103. package/driver/mysql/MysqlDriver.js +18 -5
  104. package/driver/mysql/MysqlDriver.js.map +1 -1
  105. package/driver/oracle/OracleDriver.d.ts +2 -2
  106. package/driver/oracle/OracleDriver.js +8 -5
  107. package/driver/oracle/OracleDriver.js.map +1 -1
  108. package/driver/postgres/PostgresDriver.d.ts +2 -2
  109. package/driver/postgres/PostgresDriver.js +18 -5
  110. package/driver/postgres/PostgresDriver.js.map +1 -1
  111. package/driver/postgres/PostgresQueryRunner.js +16 -10
  112. package/driver/postgres/PostgresQueryRunner.js.map +1 -1
  113. package/driver/sap/SapConnectionOptions.d.ts +8 -1
  114. package/driver/sap/SapConnectionOptions.js.map +1 -1
  115. package/driver/sap/SapDriver.js +4 -8
  116. package/driver/sap/SapDriver.js.map +1 -1
  117. package/driver/spanner/SpannerDriver.d.ts +2 -2
  118. package/driver/spanner/SpannerDriver.js +1 -1
  119. package/driver/spanner/SpannerDriver.js.map +1 -1
  120. package/driver/sqlserver/SqlServerDriver.d.ts +2 -2
  121. package/driver/sqlserver/SqlServerDriver.js +1 -1
  122. package/driver/sqlserver/SqlServerDriver.js.map +1 -1
  123. package/driver/sqlserver/SqlServerQueryRunner.js +4 -2
  124. package/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  125. package/entity-manager/EntityManager.d.ts +3 -2
  126. package/entity-manager/EntityManager.js +32 -18
  127. package/entity-manager/EntityManager.js.map +1 -1
  128. package/error/QueryFailedError.js +1 -2
  129. package/error/QueryFailedError.js.map +1 -1
  130. package/find-options/operator/JsonContains.d.ts +1 -1
  131. package/find-options/operator/JsonContains.js.map +1 -1
  132. package/index.d.ts +3 -0
  133. package/index.js +1 -0
  134. package/index.js.map +1 -1
  135. package/metadata-builder/ClosureJunctionEntityMetadataBuilder.js +2 -0
  136. package/metadata-builder/ClosureJunctionEntityMetadataBuilder.js.map +1 -1
  137. package/metadata-builder/RelationJoinColumnBuilder.d.ts +11 -5
  138. package/metadata-builder/RelationJoinColumnBuilder.js +11 -5
  139. package/metadata-builder/RelationJoinColumnBuilder.js.map +1 -1
  140. package/migration/MigrationExecutor.d.ts +3 -1
  141. package/migration/MigrationExecutor.js +13 -3
  142. package/migration/MigrationExecutor.js.map +1 -1
  143. package/package.json +278 -1
  144. package/persistence/SubjectChangedColumnsComputer.js +6 -2
  145. package/persistence/SubjectChangedColumnsComputer.js.map +1 -1
  146. package/persistence/SubjectExecutor.d.ts +3 -0
  147. package/persistence/SubjectExecutor.js +11 -0
  148. package/persistence/SubjectExecutor.js.map +1 -1
  149. package/query-builder/QueryBuilder.d.ts +8 -0
  150. package/query-builder/QueryBuilder.js +42 -24
  151. package/query-builder/QueryBuilder.js.map +1 -1
  152. package/query-builder/ReturningOption.d.ts +4 -0
  153. package/query-builder/ReturningOption.js +4 -0
  154. package/query-builder/ReturningOption.js.map +1 -0
  155. package/query-builder/SelectQueryBuilder.d.ts +1 -5
  156. package/query-builder/SelectQueryBuilder.js +48 -54
  157. package/query-builder/SelectQueryBuilder.js.map +1 -1
  158. package/query-builder/SoftDeleteQueryBuilder.js +17 -12
  159. package/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
  160. package/query-builder/UpdateQueryBuilder.js +17 -12
  161. package/query-builder/UpdateQueryBuilder.js.map +1 -1
  162. package/repository/BaseEntity.d.ts +2 -1
  163. package/repository/BaseEntity.js +2 -2
  164. package/repository/BaseEntity.js.map +1 -1
  165. package/repository/Repository.d.ts +3 -2
  166. package/repository/Repository.js +4 -4
  167. package/repository/Repository.js.map +1 -1
  168. package/repository/TreeRepository.js +2 -2
  169. package/repository/TreeRepository.js.map +1 -1
  170. package/repository/UpdateOptions.d.ts +11 -0
  171. package/repository/UpdateOptions.js +4 -0
  172. package/repository/UpdateOptions.js.map +1 -0
  173. package/repository/UpsertOptions.d.ts +6 -0
  174. package/repository/UpsertOptions.js.map +1 -1
  175. package/schema-builder/RdbmsSchemaBuilder.js +1 -1
  176. package/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
  177. package/util/OrmUtils.d.ts +13 -0
  178. package/util/OrmUtils.js +53 -0
  179. package/util/OrmUtils.js.map +1 -1
@@ -496,25 +496,17 @@ export class SelectQueryBuilder extends QueryBuilder {
496
496
  * calling this function will override previously set ORDER BY conditions.
497
497
  */
498
498
  orderBy(sort, order = "ASC", nulls) {
499
- if (order !== undefined && order !== "ASC" && order !== "DESC")
500
- throw new TypeORMError(`SelectQueryBuilder.addOrderBy "order" can accept only "ASC" and "DESC" values.`);
501
- if (nulls !== undefined &&
502
- nulls !== "NULLS FIRST" &&
503
- nulls !== "NULLS LAST")
504
- throw new TypeORMError(`SelectQueryBuilder.addOrderBy "nulls" can accept only "NULLS FIRST" and "NULLS LAST" values.`);
505
499
  if (sort) {
506
500
  if (typeof sort === "object") {
501
+ this.validateOrderByCondition(sort);
507
502
  this.expressionMap.orderBys = sort;
508
503
  }
509
504
  else {
510
- if (nulls) {
511
- this.expressionMap.orderBys = {
512
- [sort]: { order, nulls },
513
- };
514
- }
515
- else {
516
- this.expressionMap.orderBys = { [sort]: order };
517
- }
505
+ const condition = nulls
506
+ ? { [sort]: { order, nulls } }
507
+ : { [sort]: order };
508
+ this.validateOrderByCondition(condition);
509
+ this.expressionMap.orderBys = condition;
518
510
  }
519
511
  }
520
512
  else {
@@ -526,12 +518,10 @@ export class SelectQueryBuilder extends QueryBuilder {
526
518
  * Adds ORDER BY condition in the query builder.
527
519
  */
528
520
  addOrderBy(sort, order = "ASC", nulls) {
529
- if (order !== undefined && order !== "ASC" && order !== "DESC")
530
- throw new TypeORMError(`SelectQueryBuilder.addOrderBy "order" can accept only "ASC" and "DESC" values.`);
531
- if (nulls !== undefined &&
532
- nulls !== "NULLS FIRST" &&
533
- nulls !== "NULLS LAST")
534
- throw new TypeORMError(`SelectQueryBuilder.addOrderBy "nulls" can accept only "NULLS FIRST" and "NULLS LAST" values.`);
521
+ const condition = nulls
522
+ ? { [sort]: { order, nulls } }
523
+ : { [sort]: order };
524
+ this.validateOrderByCondition(condition);
535
525
  if (nulls) {
536
526
  this.expressionMap.orderBys[sort] = { order, nulls };
537
527
  }
@@ -547,10 +537,7 @@ export class SelectQueryBuilder extends QueryBuilder {
547
537
  * then use the take method instead.
548
538
  */
549
539
  limit(limit) {
550
- this.expressionMap.limit = this.normalizeNumber(limit);
551
- if (this.expressionMap.limit !== undefined &&
552
- isNaN(this.expressionMap.limit))
553
- throw new TypeORMError(`Provided "limit" value is not a number. Please provide a numeric value.`);
540
+ this.expressionMap.limit = this.validateNumericInput("limit", limit);
554
541
  return this;
555
542
  }
556
543
  /**
@@ -560,30 +547,21 @@ export class SelectQueryBuilder extends QueryBuilder {
560
547
  * then use the skip method instead.
561
548
  */
562
549
  offset(offset) {
563
- this.expressionMap.offset = this.normalizeNumber(offset);
564
- if (this.expressionMap.offset !== undefined &&
565
- isNaN(this.expressionMap.offset))
566
- throw new TypeORMError(`Provided "offset" value is not a number. Please provide a numeric value.`);
550
+ this.expressionMap.offset = this.validateNumericInput("offset", offset);
567
551
  return this;
568
552
  }
569
553
  /**
570
554
  * Sets maximal number of entities to take.
571
555
  */
572
556
  take(take) {
573
- this.expressionMap.take = this.normalizeNumber(take);
574
- if (this.expressionMap.take !== undefined &&
575
- isNaN(this.expressionMap.take))
576
- throw new TypeORMError(`Provided "take" value is not a number. Please provide a numeric value.`);
557
+ this.expressionMap.take = this.validateNumericInput("take", take);
577
558
  return this;
578
559
  }
579
560
  /**
580
561
  * Sets number of entities to skip.
581
562
  */
582
563
  skip(skip) {
583
- this.expressionMap.skip = this.normalizeNumber(skip);
584
- if (this.expressionMap.skip !== undefined &&
585
- isNaN(this.expressionMap.skip))
586
- throw new TypeORMError(`Provided "skip" value is not a number. Please provide a numeric value.`);
564
+ this.expressionMap.skip = this.validateNumericInput("skip", skip);
587
565
  return this;
588
566
  }
589
567
  /**
@@ -1472,14 +1450,13 @@ export class SelectQueryBuilder extends QueryBuilder {
1472
1450
  return "";
1473
1451
  }
1474
1452
  /**
1475
- * Creates "LOCK" part of SQL query.
1453
+ * @returns "LOCK" part of SQL query
1476
1454
  */
1477
1455
  createLockExpression() {
1478
1456
  const driver = this.connection.driver;
1479
1457
  let lockTablesClause = "";
1480
1458
  if (this.expressionMap.lockTables) {
1481
- if (!(DriverUtils.isPostgresFamily(driver) ||
1482
- driver.options.type === "cockroachdb")) {
1459
+ if (!DriverUtils.isPostgresFamily(driver)) {
1483
1460
  throw new TypeORMError("Lock tables not supported in selected driver");
1484
1461
  }
1485
1462
  if (this.expressionMap.lockTables.length < 1) {
@@ -1492,7 +1469,12 @@ export class SelectQueryBuilder extends QueryBuilder {
1492
1469
  onLockExpression = " NOWAIT";
1493
1470
  }
1494
1471
  else if (this.expressionMap.onLocked === "skip_locked") {
1495
- onLockExpression = " SKIP LOCKED";
1472
+ if (driver.options.type === "sap") {
1473
+ onLockExpression = " IGNORE LOCKED";
1474
+ }
1475
+ else {
1476
+ onLockExpression = " SKIP LOCKED";
1477
+ }
1496
1478
  }
1497
1479
  switch (this.expressionMap.lockMode) {
1498
1480
  case "pessimistic_read":
@@ -1511,6 +1493,9 @@ export class SelectQueryBuilder extends QueryBuilder {
1511
1493
  else if (DriverUtils.isPostgresFamily(driver)) {
1512
1494
  return " FOR SHARE" + lockTablesClause + onLockExpression;
1513
1495
  }
1496
+ else if (driver.options.type === "sap") {
1497
+ return (" FOR SHARE LOCK" + lockTablesClause + onLockExpression);
1498
+ }
1514
1499
  else if (driver.options.type === "oracle") {
1515
1500
  return " FOR UPDATE";
1516
1501
  }
@@ -1527,7 +1512,7 @@ export class SelectQueryBuilder extends QueryBuilder {
1527
1512
  return " FOR UPDATE" + onLockExpression;
1528
1513
  }
1529
1514
  else if (DriverUtils.isPostgresFamily(driver) ||
1530
- driver.options.type === "cockroachdb") {
1515
+ driver.options.type === "sap") {
1531
1516
  return " FOR UPDATE" + lockTablesClause + onLockExpression;
1532
1517
  }
1533
1518
  else if (driver.options.type === "mssql") {
@@ -1536,19 +1521,24 @@ export class SelectQueryBuilder extends QueryBuilder {
1536
1521
  else {
1537
1522
  throw new LockNotSupportedOnGivenDriverError();
1538
1523
  }
1524
+ // deprecated, use pessimistic_write with onLocked = "skip_locked" instead
1539
1525
  case "pessimistic_partial_write":
1540
1526
  if (DriverUtils.isPostgresFamily(driver)) {
1541
1527
  return " FOR UPDATE" + lockTablesClause + " SKIP LOCKED";
1542
1528
  }
1529
+ else if (driver.options.type === "sap") {
1530
+ return " FOR UPDATE" + lockTablesClause + " IGNORE LOCKED";
1531
+ }
1543
1532
  else if (DriverUtils.isMySQLFamily(driver)) {
1544
1533
  return " FOR UPDATE SKIP LOCKED";
1545
1534
  }
1546
1535
  else {
1547
1536
  throw new LockNotSupportedOnGivenDriverError();
1548
1537
  }
1538
+ // deprecated, use pessimistic_write with onLocked = "nowait" instead
1549
1539
  case "pessimistic_write_or_fail":
1550
1540
  if (DriverUtils.isPostgresFamily(driver) ||
1551
- driver.options.type === "cockroachdb") {
1541
+ driver.options.type === "sap") {
1552
1542
  return " FOR UPDATE" + lockTablesClause + " NOWAIT";
1553
1543
  }
1554
1544
  else if (DriverUtils.isMySQLFamily(driver)) {
@@ -1558,8 +1548,7 @@ export class SelectQueryBuilder extends QueryBuilder {
1558
1548
  throw new LockNotSupportedOnGivenDriverError();
1559
1549
  }
1560
1550
  case "for_no_key_update":
1561
- if (DriverUtils.isPostgresFamily(driver) ||
1562
- driver.options.type === "cockroachdb") {
1551
+ if (DriverUtils.isPostgresFamily(driver)) {
1563
1552
  return (" FOR NO KEY UPDATE" +
1564
1553
  lockTablesClause +
1565
1554
  onLockExpression);
@@ -2255,14 +2244,6 @@ export class SelectQueryBuilder extends QueryBuilder {
2255
2244
  ObjectUtils.assign(this.expressionMap, expressionMap);
2256
2245
  return this;
2257
2246
  }
2258
- /**
2259
- * Normalizes a give number - converts to int if possible.
2260
- */
2261
- normalizeNumber(num) {
2262
- if (typeof num === "number" || num === undefined || num === null)
2263
- return num;
2264
- return Number(num);
2265
- }
2266
2247
  /**
2267
2248
  * Creates a query builder used to execute sql queries inside this query builder.
2268
2249
  */
@@ -2583,8 +2564,21 @@ export class SelectQueryBuilder extends QueryBuilder {
2583
2564
  // if all properties of where are undefined we don't need to join anything
2584
2565
  // this can happen when user defines map with conditional queries inside
2585
2566
  if (typeof where[key] === "object") {
2586
- const allAllUndefined = Object.keys(where[key]).every((k) => where[key][k] === undefined);
2587
- if (allAllUndefined) {
2567
+ const whereKeys = Object.keys(where[key]);
2568
+ // empty object — no predicates to apply, skip the join
2569
+ if (whereKeys.length === 0) {
2570
+ continue;
2571
+ }
2572
+ const allUndefined = whereKeys.every((k) => where[key][k] === undefined);
2573
+ if (allUndefined) {
2574
+ const undefinedBehavior = this.connection.options
2575
+ .invalidWhereValuesBehavior?.undefined ||
2576
+ "ignore";
2577
+ if (undefinedBehavior === "throw") {
2578
+ throw new TypeORMError(`Undefined value encountered in nested relation '${alias}.${key}' of a where condition. ` +
2579
+ `All properties of the nested object are undefined. ` +
2580
+ `Set 'invalidWhereValuesBehavior.undefined' to 'ignore' in connection options to skip properties with undefined values.`);
2581
+ }
2588
2582
  continue;
2589
2583
  }
2590
2584
  }