typeorm 0.3.27-dev.22b26d1 → 0.3.27-dev.34d8714

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 (108) hide show
  1. package/browser/data-source/BaseDataSourceOptions.d.ts +18 -0
  2. package/browser/data-source/BaseDataSourceOptions.js.map +1 -1
  3. package/browser/decorator/columns/Column.d.ts +7 -7
  4. package/browser/decorator/columns/Column.js +1 -1
  5. package/browser/decorator/columns/Column.js.map +1 -1
  6. package/browser/decorator/options/ColumnNumericOptions.d.ts +8 -1
  7. package/browser/decorator/options/ColumnNumericOptions.js.map +1 -1
  8. package/browser/decorator/options/ColumnOptions.d.ts +6 -0
  9. package/browser/decorator/options/ColumnOptions.js.map +1 -1
  10. package/browser/decorator/options/ColumnUnsignedOptions.d.ts +28 -0
  11. package/browser/decorator/options/ColumnUnsignedOptions.js +3 -0
  12. package/browser/decorator/options/ColumnUnsignedOptions.js.map +1 -0
  13. package/browser/decorator/options/PrimaryGeneratedColumnNumericOptions.d.ts +3 -0
  14. package/browser/decorator/options/PrimaryGeneratedColumnNumericOptions.js.map +1 -1
  15. package/browser/driver/aurora-mysql/AuroraMysqlDriver.d.ts +15 -19
  16. package/browser/driver/aurora-mysql/AuroraMysqlDriver.js +7 -27
  17. package/browser/driver/aurora-mysql/AuroraMysqlDriver.js.map +1 -1
  18. package/browser/driver/aurora-mysql/AuroraMysqlQueryRunner.d.ts +7 -7
  19. package/browser/driver/aurora-mysql/AuroraMysqlQueryRunner.js +15 -13
  20. package/browser/driver/aurora-mysql/AuroraMysqlQueryRunner.js.map +1 -1
  21. package/browser/driver/mysql/MysqlDriver.d.ts +23 -19
  22. package/browser/driver/mysql/MysqlDriver.js +63 -29
  23. package/browser/driver/mysql/MysqlDriver.js.map +1 -1
  24. package/browser/driver/mysql/MysqlQueryRunner.d.ts +1 -0
  25. package/browser/driver/mysql/MysqlQueryRunner.js +12 -6
  26. package/browser/driver/mysql/MysqlQueryRunner.js.map +1 -1
  27. package/browser/driver/postgres/PostgresDriver.d.ts +1 -0
  28. package/browser/driver/postgres/PostgresDriver.js +40 -1
  29. package/browser/driver/postgres/PostgresDriver.js.map +1 -1
  30. package/browser/driver/postgres/PostgresQueryRunner.js +7 -0
  31. package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
  32. package/browser/driver/sap/SapDriver.js +6 -0
  33. package/browser/driver/sap/SapDriver.js.map +1 -1
  34. package/browser/driver/spanner/SpannerConnectionOptions.d.ts +0 -5
  35. package/browser/driver/spanner/SpannerConnectionOptions.js.map +1 -1
  36. package/browser/driver/spanner/SpannerDriver.d.ts +0 -4
  37. package/browser/driver/spanner/SpannerDriver.js +0 -4
  38. package/browser/driver/spanner/SpannerDriver.js.map +1 -1
  39. package/browser/driver/types/ColumnTypes.d.ts +3 -3
  40. package/browser/driver/types/ColumnTypes.js.map +1 -1
  41. package/browser/metadata-builder/EntityMetadataBuilder.js +1 -8
  42. package/browser/metadata-builder/EntityMetadataBuilder.js.map +1 -1
  43. package/browser/query-builder/QueryBuilder.js +26 -12
  44. package/browser/query-builder/QueryBuilder.js.map +1 -1
  45. package/browser/query-builder/SelectQueryBuilder.js +47 -35
  46. package/browser/query-builder/SelectQueryBuilder.js.map +1 -1
  47. package/browser/util/StringUtils.d.ts +1 -1
  48. package/browser/util/StringUtils.js +2 -2
  49. package/browser/util/StringUtils.js.map +1 -1
  50. package/commands/MigrationCreateCommand.js +7 -0
  51. package/commands/MigrationCreateCommand.js.map +1 -1
  52. package/commands/MigrationGenerateCommand.js +7 -0
  53. package/commands/MigrationGenerateCommand.js.map +1 -1
  54. package/data-source/BaseDataSourceOptions.d.ts +18 -0
  55. package/data-source/BaseDataSourceOptions.js.map +1 -1
  56. package/decorator/columns/Column.d.ts +7 -7
  57. package/decorator/columns/Column.js +1 -1
  58. package/decorator/columns/Column.js.map +1 -1
  59. package/decorator/options/ColumnNumericOptions.d.ts +8 -1
  60. package/decorator/options/ColumnNumericOptions.js.map +1 -1
  61. package/decorator/options/ColumnOptions.d.ts +6 -0
  62. package/decorator/options/ColumnOptions.js.map +1 -1
  63. package/decorator/options/ColumnUnsignedOptions.d.ts +28 -0
  64. package/decorator/options/{ColumnWithWidthOptions.js → ColumnUnsignedOptions.js} +1 -1
  65. package/decorator/options/ColumnUnsignedOptions.js.map +1 -0
  66. package/decorator/options/PrimaryGeneratedColumnNumericOptions.d.ts +3 -0
  67. package/decorator/options/PrimaryGeneratedColumnNumericOptions.js.map +1 -1
  68. package/driver/aurora-mysql/AuroraMysqlDriver.d.ts +15 -19
  69. package/driver/aurora-mysql/AuroraMysqlDriver.js +7 -27
  70. package/driver/aurora-mysql/AuroraMysqlDriver.js.map +1 -1
  71. package/driver/aurora-mysql/AuroraMysqlQueryRunner.d.ts +7 -7
  72. package/driver/aurora-mysql/AuroraMysqlQueryRunner.js +15 -13
  73. package/driver/aurora-mysql/AuroraMysqlQueryRunner.js.map +1 -1
  74. package/driver/mysql/MysqlDriver.d.ts +23 -19
  75. package/driver/mysql/MysqlDriver.js +63 -29
  76. package/driver/mysql/MysqlDriver.js.map +1 -1
  77. package/driver/mysql/MysqlQueryRunner.d.ts +1 -0
  78. package/driver/mysql/MysqlQueryRunner.js +12 -6
  79. package/driver/mysql/MysqlQueryRunner.js.map +1 -1
  80. package/driver/postgres/PostgresDriver.d.ts +1 -0
  81. package/driver/postgres/PostgresDriver.js +40 -1
  82. package/driver/postgres/PostgresDriver.js.map +1 -1
  83. package/driver/postgres/PostgresQueryRunner.js +7 -0
  84. package/driver/postgres/PostgresQueryRunner.js.map +1 -1
  85. package/driver/sap/SapDriver.js +6 -0
  86. package/driver/sap/SapDriver.js.map +1 -1
  87. package/driver/spanner/SpannerConnectionOptions.d.ts +0 -5
  88. package/driver/spanner/SpannerConnectionOptions.js.map +1 -1
  89. package/driver/spanner/SpannerDriver.d.ts +0 -4
  90. package/driver/spanner/SpannerDriver.js +0 -4
  91. package/driver/spanner/SpannerDriver.js.map +1 -1
  92. package/driver/types/ColumnTypes.d.ts +3 -3
  93. package/driver/types/ColumnTypes.js.map +1 -1
  94. package/metadata-builder/EntityMetadataBuilder.js +1 -8
  95. package/metadata-builder/EntityMetadataBuilder.js.map +1 -1
  96. package/package.json +1 -1
  97. package/query-builder/QueryBuilder.js +26 -12
  98. package/query-builder/QueryBuilder.js.map +1 -1
  99. package/query-builder/SelectQueryBuilder.js +47 -35
  100. package/query-builder/SelectQueryBuilder.js.map +1 -1
  101. package/util/StringUtils.d.ts +1 -1
  102. package/util/StringUtils.js +2 -2
  103. package/util/StringUtils.js.map +1 -1
  104. package/browser/decorator/options/ColumnWithWidthOptions.d.ts +0 -19
  105. package/browser/decorator/options/ColumnWithWidthOptions.js +0 -3
  106. package/browser/decorator/options/ColumnWithWidthOptions.js.map +0 -1
  107. package/decorator/options/ColumnWithWidthOptions.d.ts +0 -19
  108. package/decorator/options/ColumnWithWidthOptions.js.map +0 -1
@@ -907,6 +907,11 @@ class SelectQueryBuilder extends QueryBuilder_1.QueryBuilder {
907
907
  const hasOffset = this.expressionMap.offset !== undefined &&
908
908
  this.expressionMap.offset !== null &&
909
909
  this.expressionMap.offset > 0;
910
+ if (entitiesAndRaw.entities.length === 0 && (hasSkip || hasOffset)) {
911
+ // when skip or offset were used and no results found, we need to execute a full count
912
+ // (the given offset may have exceeded the actual number of rows)
913
+ return undefined;
914
+ }
910
915
  // offset overrides skip when no join is defined
911
916
  const previousResults = hasOffset
912
917
  ? this.expressionMap.offset
@@ -2499,22 +2504,47 @@ class SelectQueryBuilder extends QueryBuilder_1.QueryBuilder {
2499
2504
  else {
2500
2505
  const andConditions = [];
2501
2506
  for (const key in where) {
2502
- if (where[key] === undefined || where[key] === null)
2503
- continue;
2507
+ let parameterValue = where[key];
2504
2508
  const propertyPath = embedPrefix ? embedPrefix + "." + key : key;
2505
2509
  const column = metadata.findColumnWithPropertyPathStrict(propertyPath);
2506
2510
  const embed = metadata.findEmbeddedWithPropertyPath(propertyPath);
2507
2511
  const relation = metadata.findRelationWithPropertyPath(propertyPath);
2508
- if (!embed && !column && !relation)
2512
+ if (!embed && !column && !relation) {
2509
2513
  throw new EntityPropertyNotFoundError_1.EntityPropertyNotFoundError(propertyPath, metadata);
2514
+ }
2515
+ if (parameterValue === undefined) {
2516
+ const undefinedBehavior = this.connection.options.invalidWhereValuesBehavior
2517
+ ?.undefined || "ignore";
2518
+ if (undefinedBehavior === "throw") {
2519
+ throw new error_1.TypeORMError(`Undefined value encountered in property '${alias}.${key}' of a where condition. ` +
2520
+ `Set 'invalidWhereValuesBehavior.undefined' to 'ignore' in connection options to skip properties with undefined values.`);
2521
+ }
2522
+ continue;
2523
+ }
2524
+ if (parameterValue === null) {
2525
+ const nullBehavior = this.connection.options.invalidWhereValuesBehavior
2526
+ ?.null || "ignore";
2527
+ if (nullBehavior === "ignore") {
2528
+ continue;
2529
+ }
2530
+ else if (nullBehavior === "throw") {
2531
+ throw new error_1.TypeORMError(`Null value encountered in property '${alias}.${key}' of a where condition. ` +
2532
+ `To match with SQL NULL, the IsNull() operator must be used. ` +
2533
+ `Set 'invalidWhereValuesBehavior.null' to 'ignore' or 'sql-null' in connection options to skip or handle null values.`);
2534
+ }
2535
+ // 'sql-null' behavior continues to the next logic
2536
+ }
2510
2537
  if (column) {
2511
2538
  let aliasPath = `${alias}.${propertyPath}`;
2512
2539
  if (column.isVirtualProperty && column.query) {
2513
2540
  aliasPath = `(${column.query(this.escape(alias))})`;
2514
2541
  }
2542
+ if (parameterValue === null) {
2543
+ andConditions.push(`${aliasPath} IS NULL`);
2544
+ continue;
2545
+ }
2515
2546
  // const parameterName = alias + "_" + propertyPath.split(".").join("_") + "_" + parameterIndex;
2516
2547
  // todo: we need to handle other operators as well?
2517
- let parameterValue = where[key];
2518
2548
  if (InstanceChecker_1.InstanceChecker.isEqualOperator(where[key])) {
2519
2549
  parameterValue = where[key].value;
2520
2550
  }
@@ -2530,37 +2560,6 @@ class SelectQueryBuilder extends QueryBuilder_1.QueryBuilder {
2530
2560
  if (this.connection.driver.options.type === "mssql") {
2531
2561
  parameterValue = this.connection.driver.parametrizeValues(column, parameterValue);
2532
2562
  }
2533
- // if (parameterValue === null) {
2534
- // andConditions.push(`${aliasPath} IS NULL`);
2535
- //
2536
- // } else if (parameterValue instanceof FindOperator) {
2537
- // // let parameters: any[] = [];
2538
- // // if (parameterValue.useParameter) {
2539
- // // const realParameterValues: any[] = parameterValue.multipleParameters ? parameterValue.value : [parameterValue.value];
2540
- // // realParameterValues.forEach((realParameterValue, realParameterValueIndex) => {
2541
- // //
2542
- // // // don't create parameters for number to prevent max number of variables issues as much as possible
2543
- // // if (typeof realParameterValue === "number") {
2544
- // // parameters.push(realParameterValue);
2545
- // //
2546
- // // } else {
2547
- // // this.expressionMap.nativeParameters[parameterName + realParameterValueIndex] = realParameterValue;
2548
- // // parameterIndex++;
2549
- // // parameters.push(this.connection.driver.createParameter(parameterName + realParameterValueIndex, parameterIndex - 1));
2550
- // // }
2551
- // // });
2552
- // // }
2553
- // andConditions.push(
2554
- // this.createWhereConditionExpression(this.getWherePredicateCondition(aliasPath, parameterValue))
2555
- // // parameterValue.toSql(this.connection, aliasPath, parameters));
2556
- // )
2557
- //
2558
- // } else {
2559
- // this.expressionMap.nativeParameters[parameterName] = parameterValue;
2560
- // parameterIndex++;
2561
- // const parameter = this.connection.driver.createParameter(parameterName, parameterIndex - 1);
2562
- // andConditions.push(`${aliasPath} = ${parameter}`);
2563
- // }
2564
2563
  andConditions.push(this.createWhereConditionExpression(this.getWherePredicateCondition(aliasPath, parameterValue)));
2565
2564
  // this.conditions.push(`${alias}.${propertyPath} = :${paramName}`);
2566
2565
  // this.expressionMap.parameters[paramName] = where[key]; // todo: handle functions and other edge cases
@@ -2571,6 +2570,19 @@ class SelectQueryBuilder extends QueryBuilder_1.QueryBuilder {
2571
2570
  andConditions.push(condition);
2572
2571
  }
2573
2572
  else if (relation) {
2573
+ if (where[key] === null) {
2574
+ const nullBehavior = this.connection.options.invalidWhereValuesBehavior
2575
+ ?.null || "ignore";
2576
+ if (nullBehavior === "sql-null") {
2577
+ andConditions.push(`${alias}.${propertyPath} IS NULL`);
2578
+ }
2579
+ else if (nullBehavior === "throw") {
2580
+ throw new error_1.TypeORMError(`Null value encountered in property '${alias}.${key}' of a where condition. ` +
2581
+ `Set 'invalidWhereValuesBehavior.null' to 'ignore' or 'sql-null' in connection options to skip or handle null values.`);
2582
+ }
2583
+ // 'ignore' behavior falls through to continue
2584
+ continue;
2585
+ }
2574
2586
  // if all properties of where are undefined we don't need to join anything
2575
2587
  // this can happen when user defines map with conditional queries inside
2576
2588
  if (typeof where[key] === "object") {