typeorm 0.3.8-dev.e49d0c8 → 0.3.8

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 (106) hide show
  1. package/browser/cli-ts-node-commonjs.js +0 -0
  2. package/browser/cli-ts-node-esm.js +0 -0
  3. package/browser/data-source/DataSource.d.ts +2 -0
  4. package/browser/data-source/DataSource.js +2 -0
  5. package/browser/data-source/DataSource.js.map +1 -1
  6. package/browser/driver/Driver.d.ts +4 -0
  7. package/browser/driver/Driver.js.map +1 -1
  8. package/browser/driver/DriverUtils.d.ts +1 -0
  9. package/browser/driver/DriverUtils.js +5 -0
  10. package/browser/driver/DriverUtils.js.map +1 -1
  11. package/browser/driver/mysql/MysqlDriver.d.ts +4 -0
  12. package/browser/driver/mysql/MysqlDriver.js +1 -0
  13. package/browser/driver/mysql/MysqlDriver.js.map +1 -1
  14. package/browser/driver/postgres/PostgresDriver.d.ts +4 -0
  15. package/browser/driver/postgres/PostgresDriver.js +3 -2
  16. package/browser/driver/postgres/PostgresDriver.js.map +1 -1
  17. package/browser/driver/postgres/PostgresQueryRunner.d.ts +1 -1
  18. package/browser/driver/postgres/PostgresQueryRunner.js +18 -12
  19. package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
  20. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.d.ts +1 -1
  21. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +16 -12
  22. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  23. package/browser/driver/sqlserver/SqlServerConnectionOptions.d.ts +6 -1
  24. package/browser/driver/sqlserver/SqlServerConnectionOptions.js.map +1 -1
  25. package/browser/entity-manager/EntityManager.js +1 -0
  26. package/browser/entity-manager/EntityManager.js.map +1 -1
  27. package/browser/find-options/FindOneOptions.d.ts +1 -0
  28. package/browser/find-options/FindOneOptions.js.map +1 -1
  29. package/browser/migration/MigrationExecutor.d.ts +8 -0
  30. package/browser/migration/MigrationExecutor.js +13 -5
  31. package/browser/migration/MigrationExecutor.js.map +1 -1
  32. package/browser/persistence/SubjectTopoligicalSorter.js +6 -1
  33. package/browser/persistence/SubjectTopoligicalSorter.js.map +1 -1
  34. package/browser/query-builder/QueryExpressionMap.d.ts +4 -0
  35. package/browser/query-builder/QueryExpressionMap.js +1 -0
  36. package/browser/query-builder/QueryExpressionMap.js.map +1 -1
  37. package/browser/query-builder/SelectQueryBuilder.d.ts +4 -0
  38. package/browser/query-builder/SelectQueryBuilder.js +57 -18
  39. package/browser/query-builder/SelectQueryBuilder.js.map +1 -1
  40. package/browser/query-builder/UpdateQueryBuilder.js +1 -0
  41. package/browser/query-builder/UpdateQueryBuilder.js.map +1 -1
  42. package/browser/schema-builder/options/TableOptions.d.ts +4 -0
  43. package/browser/schema-builder/options/TableOptions.js.map +1 -1
  44. package/browser/schema-builder/table/Table.d.ts +4 -0
  45. package/browser/schema-builder/table/Table.js +8 -0
  46. package/browser/schema-builder/table/Table.js.map +1 -1
  47. package/browser/util/DateUtils.d.ts +1 -1
  48. package/browser/util/DateUtils.js +7 -8
  49. package/browser/util/DateUtils.js.map +1 -1
  50. package/cli-ts-node-commonjs.js +0 -0
  51. package/cli-ts-node-esm.js +0 -0
  52. package/cli.js +0 -0
  53. package/commands/MigrationRevertCommand.d.ts +2 -0
  54. package/commands/MigrationRevertCommand.js +6 -0
  55. package/commands/MigrationRevertCommand.js.map +1 -1
  56. package/commands/MigrationRunCommand.d.ts +2 -0
  57. package/commands/MigrationRunCommand.js +8 -0
  58. package/commands/MigrationRunCommand.js.map +1 -1
  59. package/data-source/DataSource.d.ts +2 -0
  60. package/data-source/DataSource.js +2 -0
  61. package/data-source/DataSource.js.map +1 -1
  62. package/driver/Driver.d.ts +4 -0
  63. package/driver/Driver.js.map +1 -1
  64. package/driver/DriverUtils.d.ts +1 -0
  65. package/driver/DriverUtils.js +5 -0
  66. package/driver/DriverUtils.js.map +1 -1
  67. package/driver/mysql/MysqlDriver.d.ts +4 -0
  68. package/driver/mysql/MysqlDriver.js +1 -0
  69. package/driver/mysql/MysqlDriver.js.map +1 -1
  70. package/driver/postgres/PostgresDriver.d.ts +4 -0
  71. package/driver/postgres/PostgresDriver.js +3 -2
  72. package/driver/postgres/PostgresDriver.js.map +1 -1
  73. package/driver/postgres/PostgresQueryRunner.d.ts +1 -1
  74. package/driver/postgres/PostgresQueryRunner.js +18 -12
  75. package/driver/postgres/PostgresQueryRunner.js.map +1 -1
  76. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.d.ts +1 -1
  77. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +16 -12
  78. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  79. package/driver/sqlserver/SqlServerConnectionOptions.d.ts +6 -1
  80. package/driver/sqlserver/SqlServerConnectionOptions.js.map +1 -1
  81. package/entity-manager/EntityManager.js +1 -0
  82. package/entity-manager/EntityManager.js.map +1 -1
  83. package/find-options/FindOneOptions.d.ts +1 -0
  84. package/find-options/FindOneOptions.js.map +1 -1
  85. package/migration/MigrationExecutor.d.ts +8 -0
  86. package/migration/MigrationExecutor.js +13 -5
  87. package/migration/MigrationExecutor.js.map +1 -1
  88. package/package.json +274 -1
  89. package/persistence/SubjectTopoligicalSorter.js +6 -1
  90. package/persistence/SubjectTopoligicalSorter.js.map +1 -1
  91. package/query-builder/QueryExpressionMap.d.ts +4 -0
  92. package/query-builder/QueryExpressionMap.js +1 -0
  93. package/query-builder/QueryExpressionMap.js.map +1 -1
  94. package/query-builder/SelectQueryBuilder.d.ts +4 -0
  95. package/query-builder/SelectQueryBuilder.js +57 -18
  96. package/query-builder/SelectQueryBuilder.js.map +1 -1
  97. package/query-builder/UpdateQueryBuilder.js +1 -0
  98. package/query-builder/UpdateQueryBuilder.js.map +1 -1
  99. package/schema-builder/options/TableOptions.d.ts +4 -0
  100. package/schema-builder/options/TableOptions.js.map +1 -1
  101. package/schema-builder/table/Table.d.ts +4 -0
  102. package/schema-builder/table/Table.js +8 -0
  103. package/schema-builder/table/Table.js.map +1 -1
  104. package/util/DateUtils.d.ts +1 -1
  105. package/util/DateUtils.js +7 -8
  106. package/util/DateUtils.js.map +1 -1
@@ -565,6 +565,13 @@ export class SelectQueryBuilder extends QueryBuilder {
565
565
  this.expressionMap.lockTables = lockTables;
566
566
  return this;
567
567
  }
568
+ /**
569
+ * Sets lock handling by adding NO WAIT or SKIP LOCKED.
570
+ */
571
+ setOnLocked(onLocked) {
572
+ this.expressionMap.onLocked = onLocked;
573
+ return this;
574
+ }
568
575
  /**
569
576
  * Disables the global condition of "non-deleted" for the entity with delete date columns.
570
577
  */
@@ -999,7 +1006,8 @@ export class SelectQueryBuilder extends QueryBuilder {
999
1006
  select += `/*+ MAX_EXECUTION_TIME(${this.expressionMap.maxExecutionTime}) */ `;
1000
1007
  }
1001
1008
  }
1002
- if (driver.options.type === "postgres" && selectDistinctOn.length > 0) {
1009
+ if (DriverUtils.isPostgresFamily(driver) &&
1010
+ selectDistinctOn.length > 0) {
1003
1011
  const selectDistinctOnMap = selectDistinctOn
1004
1012
  .map((on) => this.replacePropertyNames(on))
1005
1013
  .join(", ");
@@ -1329,7 +1337,7 @@ export class SelectQueryBuilder extends QueryBuilder {
1329
1337
  const driver = this.connection.driver;
1330
1338
  let lockTablesClause = "";
1331
1339
  if (this.expressionMap.lockTables) {
1332
- if (!(driver.options.type === "postgres" ||
1340
+ if (!(DriverUtils.isPostgresFamily(driver) ||
1333
1341
  driver.options.type === "cockroachdb")) {
1334
1342
  throw new TypeORMError("Lock tables not supported in selected driver");
1335
1343
  }
@@ -1338,14 +1346,29 @@ export class SelectQueryBuilder extends QueryBuilder {
1338
1346
  }
1339
1347
  lockTablesClause = " OF " + this.expressionMap.lockTables.join(", ");
1340
1348
  }
1349
+ let onLockExpression = "";
1350
+ if (this.expressionMap.onLocked === "nowait") {
1351
+ onLockExpression = " NOWAIT";
1352
+ }
1353
+ else if (this.expressionMap.onLocked === "skip_locked") {
1354
+ onLockExpression = " SKIP LOCKED";
1355
+ }
1341
1356
  switch (this.expressionMap.lockMode) {
1342
1357
  case "pessimistic_read":
1343
- if (DriverUtils.isMySQLFamily(driver) ||
1358
+ if (driver.options.type === "mysql" ||
1344
1359
  driver.options.type === "aurora-mysql") {
1360
+ if (DriverUtils.isReleaseVersionOrGreater(driver, "8.0.0")) {
1361
+ return (" FOR SHARE" + lockTablesClause + onLockExpression);
1362
+ }
1363
+ else {
1364
+ return " LOCK IN SHARE MODE";
1365
+ }
1366
+ }
1367
+ else if (driver.options.type === "mariadb") {
1345
1368
  return " LOCK IN SHARE MODE";
1346
1369
  }
1347
- else if (driver.options.type === "postgres") {
1348
- return " FOR SHARE" + lockTablesClause;
1370
+ else if (DriverUtils.isPostgresFamily(driver)) {
1371
+ return " FOR SHARE" + lockTablesClause + onLockExpression;
1349
1372
  }
1350
1373
  else if (driver.options.type === "oracle") {
1351
1374
  return " FOR UPDATE";
@@ -1360,11 +1383,11 @@ export class SelectQueryBuilder extends QueryBuilder {
1360
1383
  if (DriverUtils.isMySQLFamily(driver) ||
1361
1384
  driver.options.type === "aurora-mysql" ||
1362
1385
  driver.options.type === "oracle") {
1363
- return " FOR UPDATE";
1386
+ return " FOR UPDATE" + onLockExpression;
1364
1387
  }
1365
- else if (driver.options.type === "postgres" ||
1388
+ else if (DriverUtils.isPostgresFamily(driver) ||
1366
1389
  driver.options.type === "cockroachdb") {
1367
- return " FOR UPDATE" + lockTablesClause;
1390
+ return " FOR UPDATE" + lockTablesClause + onLockExpression;
1368
1391
  }
1369
1392
  else if (driver.options.type === "mssql") {
1370
1393
  return "";
@@ -1373,7 +1396,7 @@ export class SelectQueryBuilder extends QueryBuilder {
1373
1396
  throw new LockNotSupportedOnGivenDriverError();
1374
1397
  }
1375
1398
  case "pessimistic_partial_write":
1376
- if (driver.options.type === "postgres") {
1399
+ if (DriverUtils.isPostgresFamily(driver)) {
1377
1400
  return " FOR UPDATE" + lockTablesClause + " SKIP LOCKED";
1378
1401
  }
1379
1402
  else if (DriverUtils.isMySQLFamily(driver)) {
@@ -1383,7 +1406,7 @@ export class SelectQueryBuilder extends QueryBuilder {
1383
1406
  throw new LockNotSupportedOnGivenDriverError();
1384
1407
  }
1385
1408
  case "pessimistic_write_or_fail":
1386
- if (driver.options.type === "postgres" ||
1409
+ if (DriverUtils.isPostgresFamily(driver) ||
1387
1410
  driver.options.type === "cockroachdb") {
1388
1411
  return " FOR UPDATE" + lockTablesClause + " NOWAIT";
1389
1412
  }
@@ -1394,16 +1417,18 @@ export class SelectQueryBuilder extends QueryBuilder {
1394
1417
  throw new LockNotSupportedOnGivenDriverError();
1395
1418
  }
1396
1419
  case "for_no_key_update":
1397
- if (driver.options.type === "postgres" ||
1420
+ if (DriverUtils.isPostgresFamily(driver) ||
1398
1421
  driver.options.type === "cockroachdb") {
1399
- return " FOR NO KEY UPDATE" + lockTablesClause;
1422
+ return (" FOR NO KEY UPDATE" +
1423
+ lockTablesClause +
1424
+ onLockExpression);
1400
1425
  }
1401
1426
  else {
1402
1427
  throw new LockNotSupportedOnGivenDriverError();
1403
1428
  }
1404
1429
  case "for_key_share":
1405
- if (driver.options.type === "postgres") {
1406
- return " FOR KEY SHARE" + lockTablesClause;
1430
+ if (DriverUtils.isPostgresFamily(driver)) {
1431
+ return (" FOR KEY SHARE" + lockTablesClause + onLockExpression);
1407
1432
  }
1408
1433
  else {
1409
1434
  throw new LockNotSupportedOnGivenDriverError();
@@ -1466,7 +1491,7 @@ export class SelectQueryBuilder extends QueryBuilder {
1466
1491
  const asText = useLegacy ? "AsText" : "ST_AsText";
1467
1492
  selectionPath = `${asText}(${selectionPath})`;
1468
1493
  }
1469
- if (this.connection.driver.options.type === "postgres")
1494
+ if (DriverUtils.isPostgresFamily(this.connection.driver))
1470
1495
  if (column.precision) {
1471
1496
  // cast to JSON to trigger parsing in the driver
1472
1497
  selectionPath = `ST_AsGeoJSON(${selectionPath}, ${column.precision})::json`;
@@ -1523,7 +1548,7 @@ export class SelectQueryBuilder extends QueryBuilder {
1523
1548
  }
1524
1549
  // For everything else, we'll need to do some hackery to get the correct count values.
1525
1550
  if (this.connection.driver.options.type === "cockroachdb" ||
1526
- this.connection.driver.options.type === "postgres") {
1551
+ DriverUtils.isPostgresFamily(this.connection.driver)) {
1527
1552
  // Postgres and CockroachDB can pass multiple parameters to the `DISTINCT` function
1528
1553
  // https://www.postgresql.org/docs/9.5/sql-select.html#SQL-DISTINCT
1529
1554
  return ("COUNT(DISTINCT(" +
@@ -1751,6 +1776,9 @@ export class SelectQueryBuilder extends QueryBuilder {
1751
1776
  })
1752
1777
  : undefined;
1753
1778
  this.setLock(this.findOptions.lock.mode, undefined, tableNames);
1779
+ if (this.findOptions.lock.onLocked) {
1780
+ this.setOnLocked(this.findOptions.lock.onLocked);
1781
+ }
1754
1782
  }
1755
1783
  }
1756
1784
  if (this.findOptions.loadRelationIds === true) {
@@ -2227,9 +2255,9 @@ export class SelectQueryBuilder extends QueryBuilder {
2227
2255
  ? order[key].nulls
2228
2256
  : undefined;
2229
2257
  nulls =
2230
- nulls === "first"
2258
+ (nulls === null || nulls === void 0 ? void 0 : nulls.toLowerCase()) === "first"
2231
2259
  ? "NULLS FIRST"
2232
- : nulls === "last"
2260
+ : (nulls === null || nulls === void 0 ? void 0 : nulls.toLowerCase()) === "last"
2233
2261
  ? "NULLS LAST"
2234
2262
  : undefined;
2235
2263
  this.addOrderBy(`${alias}.${propertyPath}`, direction, nulls);
@@ -2397,6 +2425,17 @@ export class SelectQueryBuilder extends QueryBuilder {
2397
2425
  " " +
2398
2426
  parseInt(where[key].value));
2399
2427
  }
2428
+ else {
2429
+ if (relation.isManyToOne ||
2430
+ (relation.isOneToOne &&
2431
+ relation.isOneToOneOwner)) {
2432
+ const aliasPath = `${alias}.${propertyPath}`;
2433
+ andConditions.push(this.createWhereConditionExpression(this.getWherePredicateCondition(aliasPath, where[key])));
2434
+ }
2435
+ else {
2436
+ throw new Error(`This relation isn't supported by given find operator`);
2437
+ }
2438
+ }
2400
2439
  }
2401
2440
  else {
2402
2441
  // const joinAlias = alias + "_" + relation.propertyName;