typeorm 0.3.29-dev.cc07c90 → 0.3.29

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 (161) 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 +18 -12
  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/entity-manager/EntityManager.d.ts +3 -2
  35. package/browser/entity-manager/EntityManager.js +25 -15
  36. package/browser/entity-manager/EntityManager.js.map +1 -1
  37. package/browser/error/QueryFailedError.js +1 -2
  38. package/browser/error/QueryFailedError.js.map +1 -1
  39. package/browser/index.d.ts +3 -0
  40. package/browser/index.js +1 -0
  41. package/browser/index.js.map +1 -1
  42. package/browser/metadata-builder/ClosureJunctionEntityMetadataBuilder.js +2 -0
  43. package/browser/metadata-builder/ClosureJunctionEntityMetadataBuilder.js.map +1 -1
  44. package/browser/metadata-builder/RelationJoinColumnBuilder.d.ts +11 -5
  45. package/browser/metadata-builder/RelationJoinColumnBuilder.js +11 -5
  46. package/browser/metadata-builder/RelationJoinColumnBuilder.js.map +1 -1
  47. package/browser/migration/MigrationExecutor.d.ts +3 -1
  48. package/browser/migration/MigrationExecutor.js +13 -3
  49. package/browser/migration/MigrationExecutor.js.map +1 -1
  50. package/browser/persistence/SubjectExecutor.d.ts +3 -0
  51. package/browser/persistence/SubjectExecutor.js +11 -0
  52. package/browser/persistence/SubjectExecutor.js.map +1 -1
  53. package/browser/query-builder/QueryBuilder.d.ts +8 -0
  54. package/browser/query-builder/QueryBuilder.js +35 -0
  55. package/browser/query-builder/QueryBuilder.js.map +1 -1
  56. package/browser/query-builder/ReturningOption.d.ts +4 -0
  57. package/browser/query-builder/ReturningOption.js +3 -0
  58. package/browser/query-builder/ReturningOption.js.map +1 -0
  59. package/browser/query-builder/SelectQueryBuilder.d.ts +7 -11
  60. package/browser/query-builder/SelectQueryBuilder.js +53 -64
  61. package/browser/query-builder/SelectQueryBuilder.js.map +1 -1
  62. package/browser/query-builder/SoftDeleteQueryBuilder.js +17 -12
  63. package/browser/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
  64. package/browser/query-builder/UpdateQueryBuilder.js +17 -12
  65. package/browser/query-builder/UpdateQueryBuilder.js.map +1 -1
  66. package/browser/repository/BaseEntity.d.ts +2 -1
  67. package/browser/repository/BaseEntity.js +2 -2
  68. package/browser/repository/BaseEntity.js.map +1 -1
  69. package/browser/repository/Repository.d.ts +3 -2
  70. package/browser/repository/Repository.js +4 -4
  71. package/browser/repository/Repository.js.map +1 -1
  72. package/browser/repository/TreeRepository.js +2 -2
  73. package/browser/repository/TreeRepository.js.map +1 -1
  74. package/browser/repository/UpdateOptions.d.ts +11 -0
  75. package/browser/repository/UpdateOptions.js +3 -0
  76. package/browser/repository/UpdateOptions.js.map +1 -0
  77. package/browser/repository/UpsertOptions.d.ts +6 -0
  78. package/browser/repository/UpsertOptions.js.map +1 -1
  79. package/browser/schema-builder/RdbmsSchemaBuilder.js +1 -1
  80. package/browser/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
  81. package/cache/RedisQueryResultCache.d.ts +6 -9
  82. package/cache/RedisQueryResultCache.js +21 -42
  83. package/cache/RedisQueryResultCache.js.map +1 -1
  84. package/commands/InitCommand.js +1 -1
  85. package/commands/MigrationRunCommand.js +4 -4
  86. package/commands/MigrationRunCommand.js.map +1 -1
  87. package/driver/aurora-mysql/AuroraMysqlDriver.js +18 -5
  88. package/driver/aurora-mysql/AuroraMysqlDriver.js.map +1 -1
  89. package/driver/cockroachdb/CockroachDriver.d.ts +2 -2
  90. package/driver/cockroachdb/CockroachDriver.js +13 -3
  91. package/driver/cockroachdb/CockroachDriver.js.map +1 -1
  92. package/driver/cockroachdb/CockroachQueryRunner.js +18 -12
  93. package/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  94. package/driver/mysql/MysqlDriver.js +18 -5
  95. package/driver/mysql/MysqlDriver.js.map +1 -1
  96. package/driver/oracle/OracleDriver.d.ts +2 -2
  97. package/driver/oracle/OracleDriver.js +8 -5
  98. package/driver/oracle/OracleDriver.js.map +1 -1
  99. package/driver/postgres/PostgresDriver.d.ts +2 -2
  100. package/driver/postgres/PostgresDriver.js +18 -5
  101. package/driver/postgres/PostgresDriver.js.map +1 -1
  102. package/driver/postgres/PostgresQueryRunner.js +16 -10
  103. package/driver/postgres/PostgresQueryRunner.js.map +1 -1
  104. package/driver/sap/SapConnectionOptions.d.ts +8 -1
  105. package/driver/sap/SapConnectionOptions.js.map +1 -1
  106. package/driver/sap/SapDriver.js +4 -8
  107. package/driver/sap/SapDriver.js.map +1 -1
  108. package/driver/spanner/SpannerDriver.d.ts +2 -2
  109. package/driver/spanner/SpannerDriver.js +1 -1
  110. package/driver/spanner/SpannerDriver.js.map +1 -1
  111. package/driver/sqlserver/SqlServerDriver.d.ts +2 -2
  112. package/driver/sqlserver/SqlServerDriver.js +1 -1
  113. package/driver/sqlserver/SqlServerDriver.js.map +1 -1
  114. package/entity-manager/EntityManager.d.ts +3 -2
  115. package/entity-manager/EntityManager.js +25 -15
  116. package/entity-manager/EntityManager.js.map +1 -1
  117. package/error/QueryFailedError.js +1 -2
  118. package/error/QueryFailedError.js.map +1 -1
  119. package/index.d.ts +3 -0
  120. package/index.js +1 -0
  121. package/index.js.map +1 -1
  122. package/metadata-builder/ClosureJunctionEntityMetadataBuilder.js +2 -0
  123. package/metadata-builder/ClosureJunctionEntityMetadataBuilder.js.map +1 -1
  124. package/metadata-builder/RelationJoinColumnBuilder.d.ts +11 -5
  125. package/metadata-builder/RelationJoinColumnBuilder.js +11 -5
  126. package/metadata-builder/RelationJoinColumnBuilder.js.map +1 -1
  127. package/migration/MigrationExecutor.d.ts +3 -1
  128. package/migration/MigrationExecutor.js +13 -3
  129. package/migration/MigrationExecutor.js.map +1 -1
  130. package/package.json +278 -1
  131. package/persistence/SubjectExecutor.d.ts +3 -0
  132. package/persistence/SubjectExecutor.js +11 -0
  133. package/persistence/SubjectExecutor.js.map +1 -1
  134. package/query-builder/QueryBuilder.d.ts +8 -0
  135. package/query-builder/QueryBuilder.js +35 -0
  136. package/query-builder/QueryBuilder.js.map +1 -1
  137. package/query-builder/ReturningOption.d.ts +4 -0
  138. package/query-builder/ReturningOption.js +4 -0
  139. package/query-builder/ReturningOption.js.map +1 -0
  140. package/query-builder/SelectQueryBuilder.d.ts +7 -11
  141. package/query-builder/SelectQueryBuilder.js +53 -64
  142. package/query-builder/SelectQueryBuilder.js.map +1 -1
  143. package/query-builder/SoftDeleteQueryBuilder.js +17 -12
  144. package/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
  145. package/query-builder/UpdateQueryBuilder.js +17 -12
  146. package/query-builder/UpdateQueryBuilder.js.map +1 -1
  147. package/repository/BaseEntity.d.ts +2 -1
  148. package/repository/BaseEntity.js +2 -2
  149. package/repository/BaseEntity.js.map +1 -1
  150. package/repository/Repository.d.ts +3 -2
  151. package/repository/Repository.js +4 -4
  152. package/repository/Repository.js.map +1 -1
  153. package/repository/TreeRepository.js +2 -2
  154. package/repository/TreeRepository.js.map +1 -1
  155. package/repository/UpdateOptions.d.ts +11 -0
  156. package/repository/UpdateOptions.js +4 -0
  157. package/repository/UpdateOptions.js.map +1 -0
  158. package/repository/UpsertOptions.d.ts +6 -0
  159. package/repository/UpsertOptions.js.map +1 -1
  160. package/schema-builder/RdbmsSchemaBuilder.js +1 -1
  161. package/schema-builder/RdbmsSchemaBuilder.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
  }
@@ -542,48 +532,36 @@ export class SelectQueryBuilder extends QueryBuilder {
542
532
  }
543
533
  /**
544
534
  * Sets LIMIT - maximum number of rows to be selected.
545
- * NOTE that it may not work as you expect if you are using joins.
546
- * If you want to implement pagination, and you are having join in your query,
547
- * then use the take method instead.
535
+ * When joins are present, a two-query distinct-id strategy is used
536
+ * so that LIMIT applies to root entities rather than raw joined rows.
537
+ * @param limit
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
  /**
557
544
  * Sets OFFSET - selection offset.
558
- * NOTE that it may not work as you expect if you are using joins.
559
- * If you want to implement pagination, and you are having join in your query,
560
- * then use the skip method instead.
545
+ * When joins are present, a two-query distinct-id strategy is used
546
+ * so that OFFSET applies to root entities rather than raw joined rows.
547
+ * @param offset
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);
@@ -1993,7 +1982,10 @@ export class SelectQueryBuilder extends QueryBuilder {
1993
1982
  // where we make two queries to find the data we need
1994
1983
  // first query find ids in skip and take range
1995
1984
  // and second query loads the actual data in given ids range
1996
- if ((this.expressionMap.skip || this.expressionMap.take) &&
1985
+ if ((this.expressionMap.skip ||
1986
+ this.expressionMap.take ||
1987
+ this.expressionMap.offset ||
1988
+ this.expressionMap.limit) &&
1997
1989
  this.expressionMap.joinAttributes.length > 0) {
1998
1990
  // we are skipping order by here because its not working in subqueries anyway
1999
1991
  // to make order by working we need to apply it on a distinct query
@@ -2010,6 +2002,9 @@ export class SelectQueryBuilder extends QueryBuilder {
2010
2002
  return `${distinctAlias}.${columnAlias} AS ${this.escape(alias)}`;
2011
2003
  });
2012
2004
  const originalQuery = this.clone();
2005
+ // clear limit/offset from the inner query since pagination is handled by the outer distinct query
2006
+ originalQuery.expressionMap.limit = undefined;
2007
+ originalQuery.expressionMap.offset = undefined;
2013
2008
  // preserve original timeTravel value since we set it to "false" in subquery
2014
2009
  const originalQueryTimeTravel = originalQuery.expressionMap.timeTravel;
2015
2010
  rawResults = await new SelectQueryBuilder(this.connection, queryRunner)
@@ -2020,8 +2015,8 @@ export class SelectQueryBuilder extends QueryBuilder {
2020
2015
  .timeTravelQuery(false) // set it to "false" since time travel clause must appear at the very end and applies to the entire SELECT clause.
2021
2016
  .getQuery()})`, "distinctAlias")
2022
2017
  .timeTravelQuery(originalQueryTimeTravel)
2023
- .offset(this.expressionMap.skip)
2024
- .limit(this.expressionMap.take)
2018
+ .offset(this.expressionMap.skip ?? this.expressionMap.offset)
2019
+ .limit(this.expressionMap.take ?? this.expressionMap.limit)
2025
2020
  .orderBy(orderBys)
2026
2021
  .cache(this.expressionMap.cache && this.expressionMap.cacheId
2027
2022
  ? `${this.expressionMap.cacheId}-pagination`
@@ -2064,12 +2059,14 @@ export class SelectQueryBuilder extends QueryBuilder {
2064
2059
  " IN (:...orm_distinct_ids)";
2065
2060
  }
2066
2061
  }
2067
- rawResults = await this.clone()
2062
+ const secondQuery = this.clone()
2068
2063
  .mergeExpressionMap({
2069
2064
  extraAppendedAndWhereCondition: condition,
2070
2065
  })
2071
- .setParameters(parameters)
2072
- .loadRawResults(queryRunner);
2066
+ .setParameters(parameters);
2067
+ secondQuery.expressionMap.limit = undefined;
2068
+ secondQuery.expressionMap.offset = undefined;
2069
+ rawResults = await secondQuery.loadRawResults(queryRunner);
2073
2070
  }
2074
2071
  }
2075
2072
  else {
@@ -2255,14 +2252,6 @@ export class SelectQueryBuilder extends QueryBuilder {
2255
2252
  ObjectUtils.assign(this.expressionMap, expressionMap);
2256
2253
  return this;
2257
2254
  }
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
2255
  /**
2267
2256
  * Creates a query builder used to execute sql queries inside this query builder.
2268
2257
  */