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.
- package/browser/data-source/BaseDataSourceOptions.d.ts +18 -0
- package/browser/data-source/BaseDataSourceOptions.js.map +1 -1
- package/browser/decorator/columns/Column.d.ts +7 -7
- package/browser/decorator/columns/Column.js +1 -1
- package/browser/decorator/columns/Column.js.map +1 -1
- package/browser/decorator/options/ColumnNumericOptions.d.ts +8 -1
- package/browser/decorator/options/ColumnNumericOptions.js.map +1 -1
- package/browser/decorator/options/ColumnOptions.d.ts +6 -0
- package/browser/decorator/options/ColumnOptions.js.map +1 -1
- package/browser/decorator/options/ColumnUnsignedOptions.d.ts +28 -0
- package/browser/decorator/options/ColumnUnsignedOptions.js +3 -0
- package/browser/decorator/options/ColumnUnsignedOptions.js.map +1 -0
- package/browser/decorator/options/PrimaryGeneratedColumnNumericOptions.d.ts +3 -0
- package/browser/decorator/options/PrimaryGeneratedColumnNumericOptions.js.map +1 -1
- package/browser/driver/aurora-mysql/AuroraMysqlDriver.d.ts +15 -19
- package/browser/driver/aurora-mysql/AuroraMysqlDriver.js +7 -27
- package/browser/driver/aurora-mysql/AuroraMysqlDriver.js.map +1 -1
- package/browser/driver/aurora-mysql/AuroraMysqlQueryRunner.d.ts +7 -7
- package/browser/driver/aurora-mysql/AuroraMysqlQueryRunner.js +15 -13
- package/browser/driver/aurora-mysql/AuroraMysqlQueryRunner.js.map +1 -1
- package/browser/driver/mysql/MysqlDriver.d.ts +23 -19
- package/browser/driver/mysql/MysqlDriver.js +63 -29
- package/browser/driver/mysql/MysqlDriver.js.map +1 -1
- package/browser/driver/mysql/MysqlQueryRunner.d.ts +1 -0
- package/browser/driver/mysql/MysqlQueryRunner.js +12 -6
- package/browser/driver/mysql/MysqlQueryRunner.js.map +1 -1
- package/browser/driver/postgres/PostgresDriver.d.ts +1 -0
- package/browser/driver/postgres/PostgresDriver.js +40 -1
- package/browser/driver/postgres/PostgresDriver.js.map +1 -1
- package/browser/driver/postgres/PostgresQueryRunner.js +7 -0
- package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
- package/browser/driver/sap/SapDriver.js +6 -0
- package/browser/driver/sap/SapDriver.js.map +1 -1
- package/browser/driver/spanner/SpannerConnectionOptions.d.ts +0 -5
- package/browser/driver/spanner/SpannerConnectionOptions.js.map +1 -1
- package/browser/driver/spanner/SpannerDriver.d.ts +0 -4
- package/browser/driver/spanner/SpannerDriver.js +0 -4
- package/browser/driver/spanner/SpannerDriver.js.map +1 -1
- package/browser/driver/types/ColumnTypes.d.ts +3 -3
- package/browser/driver/types/ColumnTypes.js.map +1 -1
- package/browser/metadata-builder/EntityMetadataBuilder.js +1 -8
- package/browser/metadata-builder/EntityMetadataBuilder.js.map +1 -1
- package/browser/query-builder/QueryBuilder.js +26 -12
- package/browser/query-builder/QueryBuilder.js.map +1 -1
- package/browser/query-builder/SelectQueryBuilder.js +47 -35
- package/browser/query-builder/SelectQueryBuilder.js.map +1 -1
- package/browser/util/StringUtils.d.ts +1 -1
- package/browser/util/StringUtils.js +2 -2
- package/browser/util/StringUtils.js.map +1 -1
- package/commands/MigrationCreateCommand.js +7 -0
- package/commands/MigrationCreateCommand.js.map +1 -1
- package/commands/MigrationGenerateCommand.js +7 -0
- package/commands/MigrationGenerateCommand.js.map +1 -1
- package/data-source/BaseDataSourceOptions.d.ts +18 -0
- package/data-source/BaseDataSourceOptions.js.map +1 -1
- package/decorator/columns/Column.d.ts +7 -7
- package/decorator/columns/Column.js +1 -1
- package/decorator/columns/Column.js.map +1 -1
- package/decorator/options/ColumnNumericOptions.d.ts +8 -1
- package/decorator/options/ColumnNumericOptions.js.map +1 -1
- package/decorator/options/ColumnOptions.d.ts +6 -0
- package/decorator/options/ColumnOptions.js.map +1 -1
- package/decorator/options/ColumnUnsignedOptions.d.ts +28 -0
- package/decorator/options/{ColumnWithWidthOptions.js → ColumnUnsignedOptions.js} +1 -1
- package/decorator/options/ColumnUnsignedOptions.js.map +1 -0
- package/decorator/options/PrimaryGeneratedColumnNumericOptions.d.ts +3 -0
- package/decorator/options/PrimaryGeneratedColumnNumericOptions.js.map +1 -1
- package/driver/aurora-mysql/AuroraMysqlDriver.d.ts +15 -19
- package/driver/aurora-mysql/AuroraMysqlDriver.js +7 -27
- package/driver/aurora-mysql/AuroraMysqlDriver.js.map +1 -1
- package/driver/aurora-mysql/AuroraMysqlQueryRunner.d.ts +7 -7
- package/driver/aurora-mysql/AuroraMysqlQueryRunner.js +15 -13
- package/driver/aurora-mysql/AuroraMysqlQueryRunner.js.map +1 -1
- package/driver/mysql/MysqlDriver.d.ts +23 -19
- package/driver/mysql/MysqlDriver.js +63 -29
- package/driver/mysql/MysqlDriver.js.map +1 -1
- package/driver/mysql/MysqlQueryRunner.d.ts +1 -0
- package/driver/mysql/MysqlQueryRunner.js +12 -6
- package/driver/mysql/MysqlQueryRunner.js.map +1 -1
- package/driver/postgres/PostgresDriver.d.ts +1 -0
- package/driver/postgres/PostgresDriver.js +40 -1
- package/driver/postgres/PostgresDriver.js.map +1 -1
- package/driver/postgres/PostgresQueryRunner.js +7 -0
- package/driver/postgres/PostgresQueryRunner.js.map +1 -1
- package/driver/sap/SapDriver.js +6 -0
- package/driver/sap/SapDriver.js.map +1 -1
- package/driver/spanner/SpannerConnectionOptions.d.ts +0 -5
- package/driver/spanner/SpannerConnectionOptions.js.map +1 -1
- package/driver/spanner/SpannerDriver.d.ts +0 -4
- package/driver/spanner/SpannerDriver.js +0 -4
- package/driver/spanner/SpannerDriver.js.map +1 -1
- package/driver/types/ColumnTypes.d.ts +3 -3
- package/driver/types/ColumnTypes.js.map +1 -1
- package/metadata-builder/EntityMetadataBuilder.js +1 -8
- package/metadata-builder/EntityMetadataBuilder.js.map +1 -1
- package/package.json +1 -1
- package/query-builder/QueryBuilder.js +26 -12
- package/query-builder/QueryBuilder.js.map +1 -1
- package/query-builder/SelectQueryBuilder.js +47 -35
- package/query-builder/SelectQueryBuilder.js.map +1 -1
- package/util/StringUtils.d.ts +1 -1
- package/util/StringUtils.js +2 -2
- package/util/StringUtils.js.map +1 -1
- package/browser/decorator/options/ColumnWithWidthOptions.d.ts +0 -19
- package/browser/decorator/options/ColumnWithWidthOptions.js +0 -3
- package/browser/decorator/options/ColumnWithWidthOptions.js.map +0 -1
- package/decorator/options/ColumnWithWidthOptions.d.ts +0 -19
- 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
|
-
|
|
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") {
|