typeorm 0.3.26-dev.bdb8326 → 0.3.26-dev.ec26eae

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 (215) hide show
  1. package/README.md +15 -1113
  2. package/browser/cache/RedisQueryResultCache.d.ts +13 -0
  3. package/browser/cache/RedisQueryResultCache.js +105 -38
  4. package/browser/cache/RedisQueryResultCache.js.map +1 -1
  5. package/browser/connection/ConnectionOptionsReader.js +1 -1
  6. package/browser/connection/ConnectionOptionsReader.js.map +1 -1
  7. package/browser/connection/options-reader/ConnectionOptionsEnvReader.d.ts +1 -1
  8. package/browser/connection/options-reader/ConnectionOptionsEnvReader.js +1 -1
  9. package/browser/connection/options-reader/ConnectionOptionsEnvReader.js.map +1 -1
  10. package/browser/driver/aurora-mysql/AuroraMysqlDriver.d.ts +1 -1
  11. package/browser/driver/aurora-mysql/AuroraMysqlQueryRunner.js +12 -21
  12. package/browser/driver/aurora-mysql/AuroraMysqlQueryRunner.js.map +1 -1
  13. package/browser/driver/better-sqlite3/BetterSqlite3Driver.js +2 -2
  14. package/browser/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -1
  15. package/browser/driver/better-sqlite3/BetterSqlite3QueryRunner.js +3 -3
  16. package/browser/driver/better-sqlite3/BetterSqlite3QueryRunner.js.map +1 -1
  17. package/browser/driver/cockroachdb/CockroachDriver.js +2 -2
  18. package/browser/driver/cockroachdb/CockroachDriver.js.map +1 -1
  19. package/browser/driver/cockroachdb/CockroachQueryRunner.js +4 -4
  20. package/browser/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  21. package/browser/driver/cordova/CordovaQueryRunner.js +1 -1
  22. package/browser/driver/cordova/CordovaQueryRunner.js.map +1 -1
  23. package/browser/driver/expo/legacy/ExpoLegacyQueryRunner.js +1 -1
  24. package/browser/driver/expo/legacy/ExpoLegacyQueryRunner.js.map +1 -1
  25. package/browser/driver/mongodb/MongoConnectionOptions.d.ts +9 -9
  26. package/browser/driver/mongodb/MongoConnectionOptions.js.map +1 -1
  27. package/browser/driver/mongodb/MongoDriver.d.ts +1 -1
  28. package/browser/driver/mongodb/bson.typings.d.ts +0 -4
  29. package/browser/driver/mongodb/bson.typings.js +1 -1
  30. package/browser/driver/mongodb/bson.typings.js.map +1 -1
  31. package/browser/driver/mongodb/typings.d.ts +7 -10
  32. package/browser/driver/mongodb/typings.js +2 -2
  33. package/browser/driver/mongodb/typings.js.map +1 -1
  34. package/browser/driver/mysql/MysqlDriver.d.ts +1 -1
  35. package/browser/driver/mysql/MysqlDriver.js +3 -1
  36. package/browser/driver/mysql/MysqlDriver.js.map +1 -1
  37. package/browser/driver/mysql/MysqlQueryRunner.js +4 -4
  38. package/browser/driver/mysql/MysqlQueryRunner.js.map +1 -1
  39. package/browser/driver/nativescript/NativescriptQueryRunner.js +1 -1
  40. package/browser/driver/nativescript/NativescriptQueryRunner.js.map +1 -1
  41. package/browser/driver/oracle/OracleDriver.js +0 -5
  42. package/browser/driver/oracle/OracleDriver.js.map +1 -1
  43. package/browser/driver/oracle/OracleQueryRunner.js +1 -1
  44. package/browser/driver/oracle/OracleQueryRunner.js.map +1 -1
  45. package/browser/driver/postgres/PostgresDriver.js +3 -5
  46. package/browser/driver/postgres/PostgresDriver.js.map +1 -1
  47. package/browser/driver/postgres/PostgresQueryRunner.js +5 -5
  48. package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
  49. package/browser/driver/react-native/ReactNativeDriver.d.ts +1 -1
  50. package/browser/driver/react-native/ReactNativeQueryRunner.js +1 -1
  51. package/browser/driver/react-native/ReactNativeQueryRunner.js.map +1 -1
  52. package/browser/driver/sap/SapConnectionOptions.d.ts +33 -8
  53. package/browser/driver/sap/SapConnectionOptions.js.map +1 -1
  54. package/browser/driver/sap/SapDriver.d.ts +21 -22
  55. package/browser/driver/sap/SapDriver.js +127 -115
  56. package/browser/driver/sap/SapDriver.js.map +1 -1
  57. package/browser/driver/sap/SapQueryRunner.js +59 -63
  58. package/browser/driver/sap/SapQueryRunner.js.map +1 -1
  59. package/browser/driver/spanner/SpannerDriver.d.ts +1 -1
  60. package/browser/driver/spanner/SpannerQueryRunner.js +3 -3
  61. package/browser/driver/spanner/SpannerQueryRunner.js.map +1 -1
  62. package/browser/driver/sqlite/SqliteDriver.js +1 -1
  63. package/browser/driver/sqlite/SqliteDriver.js.map +1 -1
  64. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.d.ts +2 -2
  65. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js +1 -1
  66. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
  67. package/browser/driver/sqljs/SqljsDriver.d.ts +2 -1
  68. package/browser/driver/sqlserver/SqlServerQueryRunner.js +1 -1
  69. package/browser/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  70. package/browser/driver/types/ColumnTypes.d.ts +1 -1
  71. package/browser/driver/types/ColumnTypes.js.map +1 -1
  72. package/browser/entity-manager/MongoEntityManager.js +3 -3
  73. package/browser/entity-manager/MongoEntityManager.js.map +1 -1
  74. package/browser/error/DriverPackageNotInstalledError.js +1 -2
  75. package/browser/error/DriverPackageNotInstalledError.js.map +1 -1
  76. package/browser/logger/FormattedConsoleLogger.js +1 -1
  77. package/browser/logger/FormattedConsoleLogger.js.map +1 -1
  78. package/browser/metadata/ColumnMetadata.d.ts +1 -1
  79. package/browser/metadata/ColumnMetadata.js.map +1 -1
  80. package/browser/metadata-builder/EntityMetadataBuilder.js +8 -1
  81. package/browser/metadata-builder/EntityMetadataBuilder.js.map +1 -1
  82. package/browser/metadata-builder/EntityMetadataValidator.js +2 -4
  83. package/browser/metadata-builder/EntityMetadataValidator.js.map +1 -1
  84. package/browser/persistence/SubjectExecutor.js +4 -10
  85. package/browser/persistence/SubjectExecutor.js.map +1 -1
  86. package/browser/persistence/SubjectTopologicalSorter.js +5 -4
  87. package/browser/persistence/SubjectTopologicalSorter.js.map +1 -1
  88. package/browser/platform/BrowserPlatformTools.js +7 -3
  89. package/browser/platform/BrowserPlatformTools.js.map +1 -1
  90. package/browser/platform/PlatformTools.js +0 -2
  91. package/browser/platform/PlatformTools.js.map +1 -1
  92. package/browser/query-builder/QueryExpressionMap.js +1 -0
  93. package/browser/query-builder/QueryExpressionMap.js.map +1 -1
  94. package/browser/query-builder/RelationLoader.js +2 -0
  95. package/browser/query-builder/RelationLoader.js.map +1 -1
  96. package/browser/query-builder/SelectQueryBuilder.d.ts +1 -0
  97. package/browser/query-builder/SelectQueryBuilder.js +43 -5
  98. package/browser/query-builder/SelectQueryBuilder.js.map +1 -1
  99. package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.js.map +1 -1
  100. package/browser/query-runner/QueryLock.js +1 -0
  101. package/browser/query-runner/QueryLock.js.map +1 -1
  102. package/browser/util/ImportUtils.d.ts +1 -1
  103. package/browser/util/ImportUtils.js +2 -1
  104. package/browser/util/ImportUtils.js.map +1 -1
  105. package/browser/util/OrmUtils.d.ts +7 -10
  106. package/browser/util/OrmUtils.js +22 -31
  107. package/browser/util/OrmUtils.js.map +1 -1
  108. package/cache/RedisQueryResultCache.d.ts +13 -0
  109. package/cache/RedisQueryResultCache.js +105 -38
  110. package/cache/RedisQueryResultCache.js.map +1 -1
  111. package/cli.js +3 -1
  112. package/cli.js.map +1 -1
  113. package/connection/ConnectionOptionsReader.js +1 -1
  114. package/connection/ConnectionOptionsReader.js.map +1 -1
  115. package/connection/options-reader/ConnectionOptionsEnvReader.d.ts +1 -1
  116. package/connection/options-reader/ConnectionOptionsEnvReader.js +1 -1
  117. package/connection/options-reader/ConnectionOptionsEnvReader.js.map +1 -1
  118. package/driver/aurora-mysql/AuroraMysqlDriver.d.ts +1 -1
  119. package/driver/aurora-mysql/AuroraMysqlQueryRunner.js +12 -21
  120. package/driver/aurora-mysql/AuroraMysqlQueryRunner.js.map +1 -1
  121. package/driver/better-sqlite3/BetterSqlite3Driver.js +2 -2
  122. package/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -1
  123. package/driver/better-sqlite3/BetterSqlite3QueryRunner.js +3 -3
  124. package/driver/better-sqlite3/BetterSqlite3QueryRunner.js.map +1 -1
  125. package/driver/cockroachdb/CockroachDriver.js +2 -2
  126. package/driver/cockroachdb/CockroachDriver.js.map +1 -1
  127. package/driver/cockroachdb/CockroachQueryRunner.js +4 -4
  128. package/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  129. package/driver/cordova/CordovaQueryRunner.js +1 -1
  130. package/driver/cordova/CordovaQueryRunner.js.map +1 -1
  131. package/driver/expo/legacy/ExpoLegacyQueryRunner.js +1 -1
  132. package/driver/expo/legacy/ExpoLegacyQueryRunner.js.map +1 -1
  133. package/driver/mongodb/MongoConnectionOptions.d.ts +9 -9
  134. package/driver/mongodb/MongoConnectionOptions.js.map +1 -1
  135. package/driver/mongodb/MongoDriver.d.ts +1 -1
  136. package/driver/mongodb/bson.typings.d.ts +0 -4
  137. package/driver/mongodb/bson.typings.js +0 -1
  138. package/driver/mongodb/bson.typings.js.map +1 -1
  139. package/driver/mongodb/typings.d.ts +7 -10
  140. package/driver/mongodb/typings.js +3 -2
  141. package/driver/mongodb/typings.js.map +1 -1
  142. package/driver/mysql/MysqlDriver.d.ts +1 -1
  143. package/driver/mysql/MysqlDriver.js +3 -1
  144. package/driver/mysql/MysqlDriver.js.map +1 -1
  145. package/driver/mysql/MysqlQueryRunner.js +4 -4
  146. package/driver/mysql/MysqlQueryRunner.js.map +1 -1
  147. package/driver/nativescript/NativescriptQueryRunner.js +1 -1
  148. package/driver/nativescript/NativescriptQueryRunner.js.map +1 -1
  149. package/driver/oracle/OracleDriver.js +0 -5
  150. package/driver/oracle/OracleDriver.js.map +1 -1
  151. package/driver/oracle/OracleQueryRunner.js +1 -1
  152. package/driver/oracle/OracleQueryRunner.js.map +1 -1
  153. package/driver/postgres/PostgresDriver.js +3 -5
  154. package/driver/postgres/PostgresDriver.js.map +1 -1
  155. package/driver/postgres/PostgresQueryRunner.js +5 -5
  156. package/driver/postgres/PostgresQueryRunner.js.map +1 -1
  157. package/driver/react-native/ReactNativeDriver.d.ts +1 -1
  158. package/driver/react-native/ReactNativeQueryRunner.js +1 -1
  159. package/driver/react-native/ReactNativeQueryRunner.js.map +1 -1
  160. package/driver/sap/SapConnectionOptions.d.ts +33 -8
  161. package/driver/sap/SapConnectionOptions.js.map +1 -1
  162. package/driver/sap/SapDriver.d.ts +21 -22
  163. package/driver/sap/SapDriver.js +127 -115
  164. package/driver/sap/SapDriver.js.map +1 -1
  165. package/driver/sap/SapQueryRunner.js +64 -68
  166. package/driver/sap/SapQueryRunner.js.map +1 -1
  167. package/driver/spanner/SpannerDriver.d.ts +1 -1
  168. package/driver/spanner/SpannerQueryRunner.js +3 -3
  169. package/driver/spanner/SpannerQueryRunner.js.map +1 -1
  170. package/driver/sqlite/SqliteDriver.js +1 -1
  171. package/driver/sqlite/SqliteDriver.js.map +1 -1
  172. package/driver/sqlite-abstract/AbstractSqliteDriver.d.ts +2 -2
  173. package/driver/sqlite-abstract/AbstractSqliteDriver.js +1 -1
  174. package/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
  175. package/driver/sqljs/SqljsDriver.d.ts +2 -1
  176. package/driver/sqlserver/SqlServerQueryRunner.js +1 -1
  177. package/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  178. package/driver/types/ColumnTypes.d.ts +1 -1
  179. package/driver/types/ColumnTypes.js.map +1 -1
  180. package/entity-manager/MongoEntityManager.js +3 -3
  181. package/entity-manager/MongoEntityManager.js.map +1 -1
  182. package/error/DriverPackageNotInstalledError.js +1 -2
  183. package/error/DriverPackageNotInstalledError.js.map +1 -1
  184. package/index.mjs +2 -2
  185. package/logger/FormattedConsoleLogger.js +1 -1
  186. package/logger/FormattedConsoleLogger.js.map +1 -1
  187. package/metadata/ColumnMetadata.d.ts +1 -1
  188. package/metadata/ColumnMetadata.js.map +1 -1
  189. package/metadata-builder/EntityMetadataBuilder.js +8 -1
  190. package/metadata-builder/EntityMetadataBuilder.js.map +1 -1
  191. package/metadata-builder/EntityMetadataValidator.js +2 -4
  192. package/metadata-builder/EntityMetadataValidator.js.map +1 -1
  193. package/package.json +1 -1
  194. package/persistence/SubjectExecutor.js +4 -10
  195. package/persistence/SubjectExecutor.js.map +1 -1
  196. package/persistence/SubjectTopologicalSorter.js +5 -4
  197. package/persistence/SubjectTopologicalSorter.js.map +1 -1
  198. package/platform/PlatformTools.js +0 -2
  199. package/platform/PlatformTools.js.map +1 -1
  200. package/query-builder/QueryExpressionMap.js +1 -0
  201. package/query-builder/QueryExpressionMap.js.map +1 -1
  202. package/query-builder/RelationLoader.js +2 -0
  203. package/query-builder/RelationLoader.js.map +1 -1
  204. package/query-builder/SelectQueryBuilder.d.ts +1 -0
  205. package/query-builder/SelectQueryBuilder.js +43 -5
  206. package/query-builder/SelectQueryBuilder.js.map +1 -1
  207. package/query-builder/transformer/RawSqlResultsToEntityTransformer.js.map +1 -1
  208. package/query-runner/QueryLock.js +1 -0
  209. package/query-runner/QueryLock.js.map +1 -1
  210. package/util/ImportUtils.d.ts +1 -1
  211. package/util/ImportUtils.js +2 -1
  212. package/util/ImportUtils.js.map +1 -1
  213. package/util/OrmUtils.d.ts +7 -10
  214. package/util/OrmUtils.js +22 -31
  215. package/util/OrmUtils.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/platform/PlatformTools.ts"],"names":[],"mappings":"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","file":"PlatformTools.js","sourcesContent":["import ansi from \"ansis\"\nimport dotenv from \"dotenv\"\nimport fs from \"fs\"\nimport path from \"path\"\nimport { highlight } from \"sql-highlight\"\nimport { format as sqlFormat } from \"@sqltools/formatter\"\nimport { type Config as SqlFormatterConfig } from \"@sqltools/formatter/lib/core/types\"\nimport { type DatabaseType } from \"../driver/types/DatabaseType\"\n\nexport { EventEmitter } from \"events\"\nexport { ReadStream } from \"fs\"\nexport { Readable, Writable } from \"stream\"\n\n/**\n * Platform-specific tools.\n */\nexport class PlatformTools {\n /**\n * Type of the currently running platform.\n */\n static type: \"browser\" | \"node\" = \"node\"\n\n /**\n * Gets global variable where global stuff can be stored.\n */\n static getGlobalVariable(): any {\n return global\n }\n\n /**\n * Loads (\"require\"-s) given file or package.\n * This operation only supports on node platform\n */\n static load(name: string): any {\n // if name is not absolute or relative, then try to load package from the node_modules of the directory we are currently in\n // this is useful when we are using typeorm package globally installed and it accesses drivers\n // that are not installed globally\n\n try {\n // switch case to explicit require statements for webpack compatibility.\n switch (name) {\n /**\n * spanner\n */\n case \"spanner\":\n return require(\"@google-cloud/spanner\")\n\n /**\n * mongodb\n */\n case \"mongodb\":\n return require(\"mongodb\")\n\n /**\n * hana\n */\n case \"@sap/hana-client\":\n return require(\"@sap/hana-client\")\n\n case \"@sap/hana-client/extension/Stream\":\n return require(\"@sap/hana-client/extension/Stream\")\n\n case \"hdb-pool\":\n return require(\"hdb-pool\")\n\n /**\n * mysql\n */\n case \"mysql\":\n return require(\"mysql\")\n\n case \"mysql2\":\n return require(\"mysql2\")\n\n /**\n * oracle\n */\n case \"oracledb\":\n return require(\"oracledb\")\n\n /**\n * postgres\n */\n case \"pg\":\n return require(\"pg\")\n\n case \"pg-native\":\n return require(\"pg-native\")\n\n case \"pg-query-stream\":\n return require(\"pg-query-stream\")\n\n case \"typeorm-aurora-data-api-driver\":\n return require(\"typeorm-aurora-data-api-driver\")\n\n /**\n * redis\n */\n case \"redis\":\n return require(\"redis\")\n\n case \"ioredis\":\n return require(\"ioredis\")\n\n /**\n * better-sqlite3\n */\n case \"better-sqlite3\":\n return require(\"better-sqlite3\")\n\n /**\n * sqlite\n */\n case \"sqlite3\":\n return require(\"sqlite3\")\n\n /**\n * sql.js\n */\n case \"sql.js\":\n return require(\"sql.js\")\n\n /**\n * sqlserver\n */\n case \"mssql\":\n return require(\"mssql\")\n\n /**\n * react-native-sqlite\n */\n case \"react-native-sqlite-storage\":\n return require(\"react-native-sqlite-storage\")\n }\n } catch (err) {\n return require(path.resolve(\n process.cwd() + \"/node_modules/\" + name,\n ))\n }\n\n // If nothing above matched and we get here, the package was not listed within PlatformTools\n // and is an Invalid Package. To make it explicit that this is NOT the intended use case for\n // PlatformTools.load - it's not just a way to replace `require` all willy-nilly - let's throw\n // an error.\n throw new TypeError(`Invalid Package for PlatformTools.load: ${name}`)\n }\n\n /**\n * Normalizes given path. Does \"path.normalize\" and replaces backslashes with forward slashes on Windows.\n */\n static pathNormalize(pathStr: string): string {\n let normalizedPath = path.normalize(pathStr)\n if (process.platform === \"win32\")\n normalizedPath = normalizedPath.replace(/\\\\/g, \"/\")\n return normalizedPath\n }\n\n /**\n * Gets file extension. Does \"path.extname\".\n */\n static pathExtname(pathStr: string): string {\n return path.extname(pathStr)\n }\n\n /**\n * Resolved given path. Does \"path.resolve\".\n */\n static pathResolve(pathStr: string): string {\n return path.resolve(pathStr)\n }\n\n /**\n * Synchronously checks if file exist. Does \"fs.existsSync\".\n */\n static fileExist(pathStr: string): boolean {\n return fs.existsSync(pathStr)\n }\n\n static readFileSync(filename: string): Buffer {\n return fs.readFileSync(filename)\n }\n\n static appendFileSync(filename: string, data: any): void {\n fs.appendFileSync(filename, data)\n }\n\n static async writeFile(path: string, data: any): Promise<void> {\n return fs.promises.writeFile(path, data)\n }\n\n /**\n * Loads a dotenv file into the environment variables.\n *\n * @param path The file to load as a dotenv configuration\n */\n static dotenv(pathStr: string): void {\n dotenv.config({ path: pathStr })\n }\n\n /**\n * Gets environment variable.\n */\n static getEnvVariable(name: string): any {\n return process.env[name]\n }\n\n /**\n * Highlights sql string to be printed in the console.\n */\n static highlightSql(sql: string) {\n return highlight(sql, {\n colors: {\n keyword: ansi.blueBright.open,\n function: ansi.magentaBright.open,\n number: ansi.green.open,\n string: ansi.white.open,\n identifier: ansi.white.open,\n special: ansi.white.open,\n bracket: ansi.white.open,\n comment: ansi.gray.open,\n clear: ansi.reset.open,\n },\n })\n }\n\n /**\n * Pretty-print sql string to be print in the console.\n */\n static formatSql(sql: string, dataSourceType?: DatabaseType): string {\n const databaseLanguageMap: Record<\n string,\n SqlFormatterConfig[\"language\"]\n > = {\n oracle: \"pl/sql\",\n }\n\n const databaseLanguage = dataSourceType\n ? databaseLanguageMap[dataSourceType] || \"sql\"\n : \"sql\"\n\n return sqlFormat(sql, {\n language: databaseLanguage,\n indent: \" \",\n })\n }\n\n /**\n * Logging functions needed by AdvancedConsoleLogger\n */\n static logInfo(prefix: string, info: any) {\n console.log(ansi.gray.underline(prefix), info)\n }\n\n static logError(prefix: string, error: any) {\n console.log(ansi.underline.red(prefix), error)\n }\n\n static logWarn(prefix: string, warning: any) {\n console.log(ansi.underline.yellow(prefix), warning)\n }\n\n static log(message: string) {\n console.log(ansi.underline(message))\n }\n\n static info(info: any) {\n return ansi.gray(info)\n }\n\n static error(error: any) {\n return ansi.red(error)\n }\n\n static warn(message: string) {\n return ansi.yellow(message)\n }\n\n static logCmdErr(prefix: string, err?: any) {\n console.log(ansi.black.bgRed(prefix))\n if (err) console.error(err)\n }\n}\n"],"sourceRoot":".."}
1
+ {"version":3,"sources":["../../src/platform/PlatformTools.ts"],"names":[],"mappings":"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","file":"PlatformTools.js","sourcesContent":["import ansi from \"ansis\"\nimport dotenv from \"dotenv\"\nimport fs from \"fs\"\nimport path from \"path\"\nimport { highlight } from \"sql-highlight\"\nimport { format as sqlFormat } from \"@sqltools/formatter\"\nimport { type Config as SqlFormatterConfig } from \"@sqltools/formatter/lib/core/types\"\nimport { type DatabaseType } from \"../driver/types/DatabaseType\"\n\nexport { EventEmitter } from \"events\"\nexport { ReadStream } from \"fs\"\nexport { Readable, Writable } from \"stream\"\n\n/**\n * Platform-specific tools.\n */\nexport class PlatformTools {\n /**\n * Type of the currently running platform.\n */\n static type: \"browser\" | \"node\" = \"node\"\n\n /**\n * Gets global variable where global stuff can be stored.\n */\n static getGlobalVariable(): any {\n return global\n }\n\n /**\n * Loads (\"require\"-s) given file or package.\n * This operation only supports on node platform\n */\n static load(name: string): any {\n // if name is not absolute or relative, then try to load package from the node_modules of the directory we are currently in\n // this is useful when we are using typeorm package globally installed and it accesses drivers\n // that are not installed globally\n\n try {\n // switch case to explicit require statements for webpack compatibility.\n switch (name) {\n /**\n * spanner\n */\n case \"spanner\":\n return require(\"@google-cloud/spanner\")\n\n /**\n * mongodb\n */\n case \"mongodb\":\n return require(\"mongodb\")\n\n /**\n * hana\n */\n case \"@sap/hana-client\":\n return require(\"@sap/hana-client\")\n\n case \"@sap/hana-client/extension/Stream\":\n return require(\"@sap/hana-client/extension/Stream\")\n\n /**\n * mysql\n */\n case \"mysql\":\n return require(\"mysql\")\n\n case \"mysql2\":\n return require(\"mysql2\")\n\n /**\n * oracle\n */\n case \"oracledb\":\n return require(\"oracledb\")\n\n /**\n * postgres\n */\n case \"pg\":\n return require(\"pg\")\n\n case \"pg-native\":\n return require(\"pg-native\")\n\n case \"pg-query-stream\":\n return require(\"pg-query-stream\")\n\n case \"typeorm-aurora-data-api-driver\":\n return require(\"typeorm-aurora-data-api-driver\")\n\n /**\n * redis\n */\n case \"redis\":\n return require(\"redis\")\n\n case \"ioredis\":\n return require(\"ioredis\")\n\n /**\n * better-sqlite3\n */\n case \"better-sqlite3\":\n return require(\"better-sqlite3\")\n\n /**\n * sqlite\n */\n case \"sqlite3\":\n return require(\"sqlite3\")\n\n /**\n * sql.js\n */\n case \"sql.js\":\n return require(\"sql.js\")\n\n /**\n * sqlserver\n */\n case \"mssql\":\n return require(\"mssql\")\n\n /**\n * react-native-sqlite\n */\n case \"react-native-sqlite-storage\":\n return require(\"react-native-sqlite-storage\")\n }\n } catch (err) {\n return require(path.resolve(\n process.cwd() + \"/node_modules/\" + name,\n ))\n }\n\n // If nothing above matched and we get here, the package was not listed within PlatformTools\n // and is an Invalid Package. To make it explicit that this is NOT the intended use case for\n // PlatformTools.load - it's not just a way to replace `require` all willy-nilly - let's throw\n // an error.\n throw new TypeError(`Invalid Package for PlatformTools.load: ${name}`)\n }\n\n /**\n * Normalizes given path. Does \"path.normalize\" and replaces backslashes with forward slashes on Windows.\n */\n static pathNormalize(pathStr: string): string {\n let normalizedPath = path.normalize(pathStr)\n if (process.platform === \"win32\")\n normalizedPath = normalizedPath.replace(/\\\\/g, \"/\")\n return normalizedPath\n }\n\n /**\n * Gets file extension. Does \"path.extname\".\n */\n static pathExtname(pathStr: string): string {\n return path.extname(pathStr)\n }\n\n /**\n * Resolved given path. Does \"path.resolve\".\n */\n static pathResolve(pathStr: string): string {\n return path.resolve(pathStr)\n }\n\n /**\n * Synchronously checks if file exist. Does \"fs.existsSync\".\n */\n static fileExist(pathStr: string): boolean {\n return fs.existsSync(pathStr)\n }\n\n static readFileSync(filename: string): Buffer {\n return fs.readFileSync(filename)\n }\n\n static appendFileSync(filename: string, data: any): void {\n fs.appendFileSync(filename, data)\n }\n\n static async writeFile(path: string, data: any): Promise<void> {\n return fs.promises.writeFile(path, data)\n }\n\n /**\n * Loads a dotenv file into the environment variables.\n *\n * @param path The file to load as a dotenv configuration\n */\n static dotenv(pathStr: string): void {\n dotenv.config({ path: pathStr })\n }\n\n /**\n * Gets environment variable.\n */\n static getEnvVariable(name: string): any {\n return process.env[name]\n }\n\n /**\n * Highlights sql string to be printed in the console.\n */\n static highlightSql(sql: string) {\n return highlight(sql, {\n colors: {\n keyword: ansi.blueBright.open,\n function: ansi.magentaBright.open,\n number: ansi.green.open,\n string: ansi.white.open,\n identifier: ansi.white.open,\n special: ansi.white.open,\n bracket: ansi.white.open,\n comment: ansi.gray.open,\n clear: ansi.reset.open,\n },\n })\n }\n\n /**\n * Pretty-print sql string to be print in the console.\n */\n static formatSql(sql: string, dataSourceType?: DatabaseType): string {\n const databaseLanguageMap: Record<\n string,\n SqlFormatterConfig[\"language\"]\n > = {\n oracle: \"pl/sql\",\n }\n\n const databaseLanguage = dataSourceType\n ? databaseLanguageMap[dataSourceType] || \"sql\"\n : \"sql\"\n\n return sqlFormat(sql, {\n language: databaseLanguage,\n indent: \" \",\n })\n }\n\n /**\n * Logging functions needed by AdvancedConsoleLogger\n */\n static logInfo(prefix: string, info: any) {\n console.log(ansi.gray.underline(prefix), info)\n }\n\n static logError(prefix: string, error: any) {\n console.log(ansi.underline.red(prefix), error)\n }\n\n static logWarn(prefix: string, warning: any) {\n console.log(ansi.underline.yellow(prefix), warning)\n }\n\n static log(message: string) {\n console.log(ansi.underline(message))\n }\n\n static info(info: any) {\n return ansi.gray(info)\n }\n\n static error(error: any) {\n return ansi.red(error)\n }\n\n static warn(message: string) {\n return ansi.yellow(message)\n }\n\n static logCmdErr(prefix: string, err?: any) {\n console.log(ansi.black.bgRed(prefix))\n if (err) console.error(err)\n }\n}\n"],"sourceRoot":".."}
@@ -289,6 +289,7 @@ class QueryExpressionMap {
289
289
  map.offset = this.offset;
290
290
  map.skip = this.skip;
291
291
  map.take = this.take;
292
+ map.useIndex = this.useIndex;
292
293
  map.lockMode = this.lockMode;
293
294
  map.onLocked = this.onLocked;
294
295
  map.lockVersion = this.lockVersion;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/query-builder/QueryExpressionMap.ts"],"names":[],"mappings":";;;AAAA,mCAA+B;AAG/B,mDAA+C;AAG/C,2EAAuE;AACvE,oFAAgF;AAOhF,oCAAuC;AAKvC;;GAEG;AACH,MAAa,kBAAkB;IA4U3B,4EAA4E;IAC5E,cAAc;IACd,4EAA4E;IAE5E,YAAsB,UAAsB;QAAtB,eAAU,GAAV,UAAU,CAAY;QA/U5C,4EAA4E;QAC5E,oBAAoB;QACpB,4EAA4E;QAE5E;;WAEG;QACH,yBAAoB,GAAqB,MAAM,CAAA;QAE/C;;WAEG;QACH,gBAAW,GAAY,KAAK,CAAA;QAO5B;;WAEG;QACH,YAAO,GAAY,EAAE,CAAA;QAErB;;WAEG;QACH,cAAS,GAOS,QAAQ,CAAA;QAE1B;;WAEG;QACH,YAAO,GAAkB,EAAE,CAAA;QAE3B;;WAEG;QACH,qBAAgB,GAAW,CAAC,CAAA;QAE5B;;WAEG;QACH,mBAAc,GAAY,KAAK,CAAA;QAE/B;;WAEG;QACH,qBAAgB,GAAa,EAAE,CAAA;QAkB/B;;WAEG;QACH,0BAAqB,GAAqB,EAAE,CAAA;QAE5C;;WAEG;QACH,eAAU,GAAW,EAAE,CAAA;QAEvB;;WAEG;QACH,aAAQ,GAAY,KAAK,CAAA;QAezB;;WAEG;QACH,mBAAc,GAAoB,EAAE,CAAA;QAEpC;;WAEG;QACH,yBAAoB,GAA0B,EAAE,CAAA;QAEhD;;WAEG;QACH,4BAAuB,GAA6B,EAAE,CAAA;QAEtD;;WAEG;QACH,WAAM,GAAkB,EAAE,CAAA;QAE1B;;WAEG;QACH,YAAO,GAA2D,EAAE,CAAA;QAEpE;;WAEG;QACH,aAAQ,GAAqB,EAAE,CAAA;QAE/B;;WAEG;QACH,aAAQ,GAAa,EAAE,CAAA;QA+DvB;;;WAGG;QACH,gBAAW,GAAY,KAAK,CAAA;QAE5B;;WAEG;QACH,eAAU,GAAkB,EAAE,CAAA;QAE9B;;;;WAIG;QACH,oBAAe,GAAY,IAAI,CAAA;QAE/B;;;;WAIG;QACH,2BAAsB,GAAY,KAAK,CAAA;QAEvC;;;WAGG;QACH,mCAA8B,GAAW,EAAE,CAAA;QAE3C;;WAEG;QACH,aAAQ,GAAY,KAAK,CAAA;QAEzB;;;;WAIG;QACH,8BAAyB,GAAY,IAAI,CAAA;QAoBzC;;WAEG;QACH,YAAO,GAA+B,EAAE,CAAA;QAaxC;;;WAGG;QACH,kBAAa,GAAa,EAAE,CAAA;QAE5B;;WAEG;QACH,kBAAa,GAAoB,EAAE,CAAA;QAEnC;;;WAGG;QACH,iBAAY,GAAY,IAAI,CAAA;QAE5B;;WAEG;QACH,kBAAa,GAAY,IAAI,CAAA;QAE7B;;WAEG;QACH,mBAAc,GAAY,KAAK,CAAA;QAQ/B;;;;WAIG;QACH,qBAAgB,GAAkB,EAAE,CAAA;QAOpC;;;;WAIG;QACH,qBAAgB,GAAqC,EAAE,CAAA;QAEvD,2BAAsB,GAIhB,EAAE,CAAA;QAOJ,IAAI,UAAU,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAC;YAC1C,IAAI,CAAC,oBAAoB,GAAG,UAAU,CAAC,OAAO,CAAC,oBAAoB,CAAA;QACvE,CAAC;QAED,IAAI,CAAC,UAAU;YACV,UAAU,CAAC,OAAsC;gBAC9C,EAAE,iBAAiB,IAAI,KAAK,CAAA;IACxC,CAAC;IAED,4EAA4E;IAC5E,YAAY;IACZ,4EAA4E;IAE5E;;;OAGG;IACH,IAAI,WAAW;QACX,IACI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM;YAClC,IAAI,CAAC,SAAU,CAAC,WAAW;YAC3B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,EACrD,CAAC;YACC,MAAM,aAAa,GAAG,IAAI,CAAC,SAAU,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAA;YAC5D,OAAO,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;gBACtD,OAAO,CAAC,IAAI,CAAC,SAAU,CAAC,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA;gBAC9D,OAAO,OAAO,CAAA;YAClB,CAAC,EAAE,EAAsB,CAAC,CAAA;QAC9B,CAAC;QAED,OAAO,IAAI,CAAC,QAAQ,CAAA;IACxB,CAAC;IAED,4EAA4E;IAC5E,iBAAiB;IACjB,4EAA4E;IAE5E;;OAEG;IACH,YAAY,CAAC,KAAY;QACrB,6DAA6D;QAC7D,sBAAsB;QACtB,iEAAiE;QAEjE,qBAAqB;QACrB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAA;QAEtB,OAAO,KAAK,CAAA;IAChB,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,OAOX;QACG,IAAI,SAAS,GAAG,OAAO,CAAC,IAAI,CAAA;QAC5B,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS;YAAE,SAAS,GAAG,OAAO,CAAC,SAAS,CAAA;QAClE,IAAI,CAAC,SAAS,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,UAAU;YAClD,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAA;QACnC,IAAI,CAAC,SAAS,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ;YAChD,SAAS,GAAG,OAAO,CAAC,MAAM,CAAA;QAE9B,MAAM,KAAK,GAAG,IAAI,aAAK,EAAE,CAAA;QACzB,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAA;QACzB,IAAI,SAAS;YAAE,KAAK,CAAC,IAAI,GAAG,SAAS,CAAA;QACrC,IAAI,OAAO,CAAC,QAAQ;YAAE,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAA;QACvD,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW;YACpC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QAChE,IAAI,OAAO,CAAC,SAAS;YAAE,KAAK,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAA;QAC1D,IAAI,OAAO,CAAC,QAAQ;YAAE,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAA;QAEvD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACxB,OAAO,KAAK,CAAA;IAChB,CAAC;IAED;;;OAGG;IACH,eAAe,CAAC,SAAiB;QAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAA;QACpE,IAAI,CAAC,KAAK;YACN,MAAM,IAAI,oBAAY,CAClB,IAAI,SAAS,qDAAqD,CACrE,CAAA;QAEL,OAAO,KAAK,CAAA;IAChB,CAAC;IAED,2BAA2B,CACvB,eAAuB;QAEvB,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAA;QAC7C,OAAO,KAAK,CAAC,QAAQ,CAAC,0BAA0B,CAAC,YAAY,CAAC,CAAA;IAClE,CAAC;IAED;;;;OAIG;IACH,IAAI,gBAAgB;QAChB,IAAI,CAAC,IAAI,CAAC,SAAS;YACf,MAAM,IAAI,oBAAY,CAAC,uCAAuC,CAAC,CAAA,CAAC,uBAAuB;QAE3F,MAAM,gBAAgB,GAClB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,4BAA4B,CAChD,IAAI,CAAC,oBAAoB,CAC5B,CAAA;QACL,IAAI,CAAC,gBAAgB;YACjB,MAAM,IAAI,oBAAY,CAClB,YAAY,IAAI,CAAC,oBAAoB,4BAA4B,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CACzF,CAAA,CAAC,uBAAuB;QAE7B,OAAO,gBAAgB,CAAA;IAC3B,CAAC;IAED;;;OAGG;IACH,KAAK;QACD,MAAM,GAAG,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACnD,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAA;QAC9B,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,CAAA;QAClD,GAAG,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAA;QAC5C,GAAG,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAA;QACxC,GAAG,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAA;QAC5C,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,aAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QACnE,GAAG,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAA;QACpD,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAA;QAC9B,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAA;QAC9B,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAA;QAC9B,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAA;QAChC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;QAC5B,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;QAC5B,GAAG,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CACxC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,6BAAa,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,CAC3D,CAAA;QACD,GAAG,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CACpD,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,yCAAmB,CAAC,IAAI,EAAE,UAAU,CAAC,CAC5D,CAAA;QACD,GAAG,CAAC,uBAAuB,GAAG,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAC1D,CAAC,aAAa,EAAE,EAAE,CAAC,IAAI,+CAAsB,CAAC,IAAI,EAAE,aAAa,CAAC,CACrE,CAAA;QACD,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,CAAA;QACvD,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,CAAA;QAC3D,GAAG,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC/C,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,CAAA;QACtD,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QACtB,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QACxB,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;QACpB,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;QACpB,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;QAC5B,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;QAC5B,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;QAClC,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAA;QAChC,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;QAClC,GAAG,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;QACnD,GAAG,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAA;QAC1C,GAAG,CAAC,sBAAsB,GAAG,IAAI,CAAC,sBAAsB,CAAA;QACxD,GAAG,CAAC,8BAA8B,GAAG,IAAI,CAAC,8BAA8B,CAAA;QACxE,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;QAC5B,GAAG,CAAC,yBAAyB,GAAG,IAAI,CAAC,yBAAyB,CAAA;QAC9D,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QACtB,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;QAC1B,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAA;QACtC,GAAG,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAA;QACpD,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAA;QAChB,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAA;QACtC,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAA;QACtC,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAA;QACpC,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAA;QACtC,GAAG,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAA;QACxC,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAA;QAChC,GAAG,CAAC,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAA;QAC/D,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;QAC1B,GAAG,CAAC,sBAAsB,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CACxD,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YACb,KAAK,EAAE,UAAU,CAAC,KAAK;YACvB,YAAY,EACR,OAAO,UAAU,CAAC,YAAY,KAAK,QAAQ;gBACvC,CAAC,CAAC,UAAU,CAAC,YAAY;gBACzB,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,KAAK,EAAE;YACzC,OAAO,EAAE,UAAU,CAAC,OAAO;SAC9B,CAAC,CACL,CAAA;QACD,OAAO,GAAG,CAAA;IACd,CAAC;CACJ;AAthBD,gDAshBC","file":"QueryExpressionMap.js","sourcesContent":["import { Alias } from \"./Alias\"\nimport { ObjectLiteral } from \"../common/ObjectLiteral\"\nimport { OrderByCondition } from \"../find-options/OrderByCondition\"\nimport { JoinAttribute } from \"./JoinAttribute\"\nimport { QueryBuilder } from \"./QueryBuilder\"\nimport { QueryBuilderCteOptions } from \"./QueryBuilderCte\"\nimport { RelationIdAttribute } from \"./relation-id/RelationIdAttribute\"\nimport { RelationCountAttribute } from \"./relation-count/RelationCountAttribute\"\nimport { DataSource } from \"../data-source/DataSource\"\nimport { EntityMetadata } from \"../metadata/EntityMetadata\"\nimport { SelectQuery } from \"./SelectQuery\"\nimport { ColumnMetadata } from \"../metadata/ColumnMetadata\"\nimport { RelationMetadata } from \"../metadata/RelationMetadata\"\nimport { SelectQueryBuilderOption } from \"./SelectQueryBuilderOption\"\nimport { TypeORMError } from \"../error\"\nimport { WhereClause } from \"./WhereClause\"\nimport { UpsertType } from \"../driver/types/UpsertType\"\nimport { CockroachConnectionOptions } from \"../driver/cockroachdb/CockroachConnectionOptions\"\n\n/**\n * Contains all properties of the QueryBuilder that needs to be build a final query.\n */\nexport class QueryExpressionMap {\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * Strategy to load relations.\n */\n relationLoadStrategy: \"join\" | \"query\" = \"join\"\n\n /**\n * Indicates if QueryBuilder used to select entities and not a raw results.\n */\n queryEntity: boolean = false\n\n /**\n * Main alias is a main selection object selected by QueryBuilder.\n */\n mainAlias?: Alias\n\n /**\n * All aliases (including main alias) used in the query.\n */\n aliases: Alias[] = []\n\n /**\n * Represents query type. QueryBuilder is able to build SELECT, UPDATE and DELETE queries.\n */\n queryType:\n | \"select\"\n | \"update\"\n | \"delete\"\n | \"insert\"\n | \"relation\"\n | \"soft-delete\"\n | \"restore\" = \"select\"\n\n /**\n * Data needs to be SELECT-ed.\n */\n selects: SelectQuery[] = []\n\n /**\n * Max execution time in millisecond.\n */\n maxExecutionTime: number = 0\n\n /**\n * Whether SELECT is DISTINCT.\n */\n selectDistinct: boolean = false\n\n /**\n * SELECT DISTINCT ON query (postgres).\n */\n selectDistinctOn: string[] = []\n\n /**\n * FROM-s to be selected.\n */\n // froms: { target: string, alias: string }[] = [];\n\n /**\n * If update query was used, it needs \"update set\" - properties which will be updated by this query.\n * If insert query was used, it needs \"insert set\" - values that needs to be inserted.\n */\n valuesSet?: ObjectLiteral | ObjectLiteral[]\n\n /**\n * Optional returning (or output) clause for insert, update or delete queries.\n */\n returning: string | string[]\n\n /**\n * Extra returning columns to be added to the returning statement if driver supports it.\n */\n extraReturningColumns: ColumnMetadata[] = []\n\n /**\n * Optional on conflict statement used in insertion query in postgres.\n */\n onConflict: string = \"\"\n\n /**\n * Optional on ignore statement used in insertion query in databases.\n */\n onIgnore: boolean = false\n\n /**\n * Optional on update statement used in insertion query in databases.\n */\n onUpdate: {\n conflict?: string | string[]\n columns?: string[]\n overwrite?: string[]\n skipUpdateIfNoValuesChanged?: boolean\n indexPredicate?: string\n upsertType?: UpsertType\n overwriteCondition?: WhereClause[]\n }\n\n /**\n * JOIN queries.\n */\n joinAttributes: JoinAttribute[] = []\n\n /**\n * RelationId queries.\n */\n relationIdAttributes: RelationIdAttribute[] = []\n\n /**\n * Relation count queries.\n */\n relationCountAttributes: RelationCountAttribute[] = []\n\n /**\n * WHERE queries.\n */\n wheres: WhereClause[] = []\n\n /**\n * HAVING queries.\n */\n havings: { type: \"simple\" | \"and\" | \"or\"; condition: string }[] = []\n\n /**\n * ORDER BY queries.\n */\n orderBys: OrderByCondition = {}\n\n /**\n * GROUP BY queries.\n */\n groupBys: string[] = []\n\n /**\n * LIMIT query.\n */\n limit?: number\n\n /**\n * OFFSET query.\n */\n offset?: number\n\n /**\n * Number of rows to skip of result using pagination.\n */\n skip?: number\n\n /**\n * Number of rows to take using pagination.\n */\n take?: number\n\n /**\n * Use certain index for the query.\n *\n * SELECT * FROM table_name USE INDEX (col1_index, col2_index) WHERE col1=1 AND col2=2 AND col3=3;\n */\n useIndex?: string\n\n /**\n * Locking mode.\n */\n lockMode?:\n | \"optimistic\"\n | \"pessimistic_read\"\n | \"pessimistic_write\"\n | \"dirty_read\"\n /*\n \"pessimistic_partial_write\" and \"pessimistic_write_or_fail\" are deprecated and\n will be removed in a future version.\n\n Use onLocked instead.\n */\n | \"pessimistic_partial_write\"\n | \"pessimistic_write_or_fail\"\n | \"for_no_key_update\"\n | \"for_key_share\"\n\n /**\n * Current version of the entity, used for locking.\n */\n lockVersion?: number | Date\n\n /**\n * Tables to be specified in the \"FOR UPDATE OF\" clause, referred by their alias\n */\n lockTables?: string[]\n\n /**\n * Modify behavior when encountering locked rows. NOWAIT or SKIP LOCKED\n */\n onLocked?: \"nowait\" | \"skip_locked\"\n\n /**\n * Indicates if soft-deleted rows should be included in entity result.\n * By default the soft-deleted rows are not included.\n */\n withDeleted: boolean = false\n\n /**\n * Parameters used to be escaped in final query.\n */\n parameters: ObjectLiteral = {}\n\n /**\n * Indicates if alias, table names and column names will be escaped by driver, or not.\n *\n * todo: rename to isQuotingDisabled, also think if it should be named \"escaping\"\n */\n disableEscaping: boolean = true\n\n /**\n * Indicates if virtual columns should be included in entity result.\n *\n * todo: what to do with it? is it properly used? what about persistence?\n */\n enableRelationIdValues: boolean = false\n\n /**\n * Extra where condition appended to the end of original where conditions with AND keyword.\n * Original condition will be wrapped into brackets.\n */\n extraAppendedAndWhereCondition: string = \"\"\n\n /**\n * Indicates if query builder creates a subquery.\n */\n subQuery: boolean = false\n\n /**\n * Indicates if property names are prefixed with alias names during property replacement.\n * By default this is enabled, however we need this because aliases are not supported in UPDATE and DELETE queries,\n * but user can use them in WHERE expressions.\n */\n aliasNamePrefixingEnabled: boolean = true\n\n /**\n * Indicates if query result cache is enabled or not.\n * It is undefined by default to avoid overriding the `alwaysEnabled` config\n */\n cache?: boolean\n\n /**\n * Time in milliseconds in which cache will expire.\n * If not set then global caching time will be used.\n */\n cacheDuration: number\n\n /**\n * Cache id.\n * Used to identifier your cache queries.\n */\n cacheId: string\n\n /**\n * Options that define QueryBuilder behaviour.\n */\n options: SelectQueryBuilderOption[] = []\n\n /**\n * Property path of relation to work with.\n * Used in relational query builder.\n */\n relationPropertyPath: string\n\n /**\n * Entity (target) which relations will be updated.\n */\n of: any | any[]\n\n /**\n * List of columns where data should be inserted.\n * Used in INSERT query.\n */\n insertColumns: string[] = []\n\n /**\n * Used if user wants to update or delete a specific entities.\n */\n whereEntities: ObjectLiteral[] = []\n\n /**\n * Indicates if entity must be updated after insertion / updation.\n * This may produce extra query or use RETURNING / OUTPUT statement (depend on database).\n */\n updateEntity: boolean = true\n\n /**\n * Indicates if listeners and subscribers must be called before and after query execution.\n */\n callListeners: boolean = true\n\n /**\n * Indicates if query must be wrapped into transaction.\n */\n useTransaction: boolean = false\n\n /**\n * Indicates if query should be time travel query\n * https://www.cockroachlabs.com/docs/stable/as-of-system-time.html\n */\n timeTravel?: boolean | string\n\n /**\n * Extra parameters.\n *\n * @deprecated Use standard parameters instead\n */\n nativeParameters: ObjectLiteral = {}\n\n /**\n * Query Comment to include extra information for debugging or other purposes.\n */\n comment?: string\n\n /**\n * Items from an entity that have been locally generated & are recorded here for later use.\n * Examples include the UUID generation when the database does not natively support it.\n * These are included in the entity index order.\n */\n locallyGenerated: { [key: number]: ObjectLiteral } = {}\n\n commonTableExpressions: {\n queryBuilder: QueryBuilder<any> | string\n alias: string\n options: QueryBuilderCteOptions\n }[] = []\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(protected connection: DataSource) {\n if (connection.options.relationLoadStrategy) {\n this.relationLoadStrategy = connection.options.relationLoadStrategy\n }\n\n this.timeTravel =\n (connection.options as CockroachConnectionOptions)\n ?.timeTravelQueries || false\n }\n\n // -------------------------------------------------------------------------\n // Accessors\n // -------------------------------------------------------------------------\n\n /**\n * Get all ORDER BY queries - if order by is specified by user then it uses them,\n * otherwise it uses default entity order by if it was set.\n */\n get allOrderBys() {\n if (\n !Object.keys(this.orderBys).length &&\n this.mainAlias!.hasMetadata &&\n this.options.indexOf(\"disable-global-order\") === -1\n ) {\n const entityOrderBy = this.mainAlias!.metadata.orderBy || {}\n return Object.keys(entityOrderBy).reduce((orderBy, key) => {\n orderBy[this.mainAlias!.name + \".\" + key] = entityOrderBy[key]\n return orderBy\n }, {} as OrderByCondition)\n }\n\n return this.orderBys\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates a main alias and adds it to the current expression map.\n */\n setMainAlias(alias: Alias): Alias {\n // if main alias is already set then remove it from the array\n // if (this.mainAlias)\n // this.aliases.splice(this.aliases.indexOf(this.mainAlias));\n\n // set new main alias\n this.mainAlias = alias\n\n return alias\n }\n\n /**\n * Creates a new alias and adds it to the current expression map.\n */\n createAlias(options: {\n type: \"from\" | \"select\" | \"join\" | \"other\"\n name?: string\n target?: Function | string\n tablePath?: string\n subQuery?: string\n metadata?: EntityMetadata\n }): Alias {\n let aliasName = options.name\n if (!aliasName && options.tablePath) aliasName = options.tablePath\n if (!aliasName && typeof options.target === \"function\")\n aliasName = options.target.name\n if (!aliasName && typeof options.target === \"string\")\n aliasName = options.target\n\n const alias = new Alias()\n alias.type = options.type\n if (aliasName) alias.name = aliasName\n if (options.metadata) alias.metadata = options.metadata\n if (options.target && !alias.hasMetadata)\n alias.metadata = this.connection.getMetadata(options.target)\n if (options.tablePath) alias.tablePath = options.tablePath\n if (options.subQuery) alias.subQuery = options.subQuery\n\n this.aliases.push(alias)\n return alias\n }\n\n /**\n * Finds alias with the given name.\n * If alias was not found it throw an exception.\n */\n findAliasByName(aliasName: string): Alias {\n const alias = this.aliases.find((alias) => alias.name === aliasName)\n if (!alias)\n throw new TypeORMError(\n `\"${aliasName}\" alias was not found. Maybe you forgot to join it?`,\n )\n\n return alias\n }\n\n findColumnByAliasExpression(\n aliasExpression: string,\n ): ColumnMetadata | undefined {\n const [aliasName, propertyPath] = aliasExpression.split(\".\")\n const alias = this.findAliasByName(aliasName)\n return alias.metadata.findColumnWithPropertyName(propertyPath)\n }\n\n /**\n * Gets relation metadata of the relation this query builder works with.\n *\n * todo: add proper exceptions\n */\n get relationMetadata(): RelationMetadata {\n if (!this.mainAlias)\n throw new TypeORMError(`Entity to work with is not specified!`) // todo: better message\n\n const relationMetadata =\n this.mainAlias.metadata.findRelationWithPropertyPath(\n this.relationPropertyPath,\n )\n if (!relationMetadata)\n throw new TypeORMError(\n `Relation ${this.relationPropertyPath} was not found in entity ${this.mainAlias.name}`,\n ) // todo: better message\n\n return relationMetadata\n }\n\n /**\n * Copies all properties of the current QueryExpressionMap into a new one.\n * Useful when QueryBuilder needs to create a copy of itself.\n */\n clone(): QueryExpressionMap {\n const map = new QueryExpressionMap(this.connection)\n map.queryType = this.queryType\n map.selects = this.selects.map((select) => select)\n map.maxExecutionTime = this.maxExecutionTime\n map.selectDistinct = this.selectDistinct\n map.selectDistinctOn = this.selectDistinctOn\n this.aliases.forEach((alias) => map.aliases.push(new Alias(alias)))\n map.relationLoadStrategy = this.relationLoadStrategy\n map.mainAlias = this.mainAlias\n map.valuesSet = this.valuesSet\n map.returning = this.returning\n map.onConflict = this.onConflict\n map.onIgnore = this.onIgnore\n map.onUpdate = this.onUpdate\n map.joinAttributes = this.joinAttributes.map(\n (join) => new JoinAttribute(this.connection, this, join),\n )\n map.relationIdAttributes = this.relationIdAttributes.map(\n (relationId) => new RelationIdAttribute(this, relationId),\n )\n map.relationCountAttributes = this.relationCountAttributes.map(\n (relationCount) => new RelationCountAttribute(this, relationCount),\n )\n map.wheres = this.wheres.map((where) => ({ ...where }))\n map.havings = this.havings.map((having) => ({ ...having }))\n map.orderBys = Object.assign({}, this.orderBys)\n map.groupBys = this.groupBys.map((groupBy) => groupBy)\n map.limit = this.limit\n map.offset = this.offset\n map.skip = this.skip\n map.take = this.take\n map.lockMode = this.lockMode\n map.onLocked = this.onLocked\n map.lockVersion = this.lockVersion\n map.lockTables = this.lockTables\n map.withDeleted = this.withDeleted\n map.parameters = Object.assign({}, this.parameters)\n map.disableEscaping = this.disableEscaping\n map.enableRelationIdValues = this.enableRelationIdValues\n map.extraAppendedAndWhereCondition = this.extraAppendedAndWhereCondition\n map.subQuery = this.subQuery\n map.aliasNamePrefixingEnabled = this.aliasNamePrefixingEnabled\n map.cache = this.cache\n map.cacheId = this.cacheId\n map.cacheDuration = this.cacheDuration\n map.relationPropertyPath = this.relationPropertyPath\n map.of = this.of\n map.insertColumns = this.insertColumns\n map.whereEntities = this.whereEntities\n map.updateEntity = this.updateEntity\n map.callListeners = this.callListeners\n map.useTransaction = this.useTransaction\n map.timeTravel = this.timeTravel\n map.nativeParameters = Object.assign({}, this.nativeParameters)\n map.comment = this.comment\n map.commonTableExpressions = this.commonTableExpressions.map(\n (cteOptions) => ({\n alias: cteOptions.alias,\n queryBuilder:\n typeof cteOptions.queryBuilder === \"string\"\n ? cteOptions.queryBuilder\n : cteOptions.queryBuilder.clone(),\n options: cteOptions.options,\n }),\n )\n return map\n }\n}\n"],"sourceRoot":".."}
1
+ {"version":3,"sources":["../../src/query-builder/QueryExpressionMap.ts"],"names":[],"mappings":"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","file":"QueryExpressionMap.js","sourcesContent":["import { Alias } from \"./Alias\"\nimport { ObjectLiteral } from \"../common/ObjectLiteral\"\nimport { OrderByCondition } from \"../find-options/OrderByCondition\"\nimport { JoinAttribute } from \"./JoinAttribute\"\nimport { QueryBuilder } from \"./QueryBuilder\"\nimport { QueryBuilderCteOptions } from \"./QueryBuilderCte\"\nimport { RelationIdAttribute } from \"./relation-id/RelationIdAttribute\"\nimport { RelationCountAttribute } from \"./relation-count/RelationCountAttribute\"\nimport { DataSource } from \"../data-source/DataSource\"\nimport { EntityMetadata } from \"../metadata/EntityMetadata\"\nimport { SelectQuery } from \"./SelectQuery\"\nimport { ColumnMetadata } from \"../metadata/ColumnMetadata\"\nimport { RelationMetadata } from \"../metadata/RelationMetadata\"\nimport { SelectQueryBuilderOption } from \"./SelectQueryBuilderOption\"\nimport { TypeORMError } from \"../error\"\nimport { WhereClause } from \"./WhereClause\"\nimport { UpsertType } from \"../driver/types/UpsertType\"\nimport { CockroachConnectionOptions } from \"../driver/cockroachdb/CockroachConnectionOptions\"\n\n/**\n * Contains all properties of the QueryBuilder that needs to be build a final query.\n */\nexport class QueryExpressionMap {\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * Strategy to load relations.\n */\n relationLoadStrategy: \"join\" | \"query\" = \"join\"\n\n /**\n * Indicates if QueryBuilder used to select entities and not a raw results.\n */\n queryEntity: boolean = false\n\n /**\n * Main alias is a main selection object selected by QueryBuilder.\n */\n mainAlias?: Alias\n\n /**\n * All aliases (including main alias) used in the query.\n */\n aliases: Alias[] = []\n\n /**\n * Represents query type. QueryBuilder is able to build SELECT, UPDATE and DELETE queries.\n */\n queryType:\n | \"select\"\n | \"update\"\n | \"delete\"\n | \"insert\"\n | \"relation\"\n | \"soft-delete\"\n | \"restore\" = \"select\"\n\n /**\n * Data needs to be SELECT-ed.\n */\n selects: SelectQuery[] = []\n\n /**\n * Max execution time in millisecond.\n */\n maxExecutionTime: number = 0\n\n /**\n * Whether SELECT is DISTINCT.\n */\n selectDistinct: boolean = false\n\n /**\n * SELECT DISTINCT ON query (postgres).\n */\n selectDistinctOn: string[] = []\n\n /**\n * FROM-s to be selected.\n */\n // froms: { target: string, alias: string }[] = [];\n\n /**\n * If update query was used, it needs \"update set\" - properties which will be updated by this query.\n * If insert query was used, it needs \"insert set\" - values that needs to be inserted.\n */\n valuesSet?: ObjectLiteral | ObjectLiteral[]\n\n /**\n * Optional returning (or output) clause for insert, update or delete queries.\n */\n returning: string | string[]\n\n /**\n * Extra returning columns to be added to the returning statement if driver supports it.\n */\n extraReturningColumns: ColumnMetadata[] = []\n\n /**\n * Optional on conflict statement used in insertion query in postgres.\n */\n onConflict: string = \"\"\n\n /**\n * Optional on ignore statement used in insertion query in databases.\n */\n onIgnore: boolean = false\n\n /**\n * Optional on update statement used in insertion query in databases.\n */\n onUpdate: {\n conflict?: string | string[]\n columns?: string[]\n overwrite?: string[]\n skipUpdateIfNoValuesChanged?: boolean\n indexPredicate?: string\n upsertType?: UpsertType\n overwriteCondition?: WhereClause[]\n }\n\n /**\n * JOIN queries.\n */\n joinAttributes: JoinAttribute[] = []\n\n /**\n * RelationId queries.\n */\n relationIdAttributes: RelationIdAttribute[] = []\n\n /**\n * Relation count queries.\n */\n relationCountAttributes: RelationCountAttribute[] = []\n\n /**\n * WHERE queries.\n */\n wheres: WhereClause[] = []\n\n /**\n * HAVING queries.\n */\n havings: { type: \"simple\" | \"and\" | \"or\"; condition: string }[] = []\n\n /**\n * ORDER BY queries.\n */\n orderBys: OrderByCondition = {}\n\n /**\n * GROUP BY queries.\n */\n groupBys: string[] = []\n\n /**\n * LIMIT query.\n */\n limit?: number\n\n /**\n * OFFSET query.\n */\n offset?: number\n\n /**\n * Number of rows to skip of result using pagination.\n */\n skip?: number\n\n /**\n * Number of rows to take using pagination.\n */\n take?: number\n\n /**\n * Use certain index for the query.\n *\n * SELECT * FROM table_name USE INDEX (col1_index, col2_index) WHERE col1=1 AND col2=2 AND col3=3;\n */\n useIndex?: string\n\n /**\n * Locking mode.\n */\n lockMode?:\n | \"optimistic\"\n | \"pessimistic_read\"\n | \"pessimistic_write\"\n | \"dirty_read\"\n /*\n \"pessimistic_partial_write\" and \"pessimistic_write_or_fail\" are deprecated and\n will be removed in a future version.\n\n Use onLocked instead.\n */\n | \"pessimistic_partial_write\"\n | \"pessimistic_write_or_fail\"\n | \"for_no_key_update\"\n | \"for_key_share\"\n\n /**\n * Current version of the entity, used for locking.\n */\n lockVersion?: number | Date\n\n /**\n * Tables to be specified in the \"FOR UPDATE OF\" clause, referred by their alias\n */\n lockTables?: string[]\n\n /**\n * Modify behavior when encountering locked rows. NOWAIT or SKIP LOCKED\n */\n onLocked?: \"nowait\" | \"skip_locked\"\n\n /**\n * Indicates if soft-deleted rows should be included in entity result.\n * By default the soft-deleted rows are not included.\n */\n withDeleted: boolean = false\n\n /**\n * Parameters used to be escaped in final query.\n */\n parameters: ObjectLiteral = {}\n\n /**\n * Indicates if alias, table names and column names will be escaped by driver, or not.\n *\n * todo: rename to isQuotingDisabled, also think if it should be named \"escaping\"\n */\n disableEscaping: boolean = true\n\n /**\n * Indicates if virtual columns should be included in entity result.\n *\n * todo: what to do with it? is it properly used? what about persistence?\n */\n enableRelationIdValues: boolean = false\n\n /**\n * Extra where condition appended to the end of original where conditions with AND keyword.\n * Original condition will be wrapped into brackets.\n */\n extraAppendedAndWhereCondition: string = \"\"\n\n /**\n * Indicates if query builder creates a subquery.\n */\n subQuery: boolean = false\n\n /**\n * Indicates if property names are prefixed with alias names during property replacement.\n * By default this is enabled, however we need this because aliases are not supported in UPDATE and DELETE queries,\n * but user can use them in WHERE expressions.\n */\n aliasNamePrefixingEnabled: boolean = true\n\n /**\n * Indicates if query result cache is enabled or not.\n * It is undefined by default to avoid overriding the `alwaysEnabled` config\n */\n cache?: boolean\n\n /**\n * Time in milliseconds in which cache will expire.\n * If not set then global caching time will be used.\n */\n cacheDuration: number\n\n /**\n * Cache id.\n * Used to identifier your cache queries.\n */\n cacheId: string\n\n /**\n * Options that define QueryBuilder behaviour.\n */\n options: SelectQueryBuilderOption[] = []\n\n /**\n * Property path of relation to work with.\n * Used in relational query builder.\n */\n relationPropertyPath: string\n\n /**\n * Entity (target) which relations will be updated.\n */\n of: any | any[]\n\n /**\n * List of columns where data should be inserted.\n * Used in INSERT query.\n */\n insertColumns: string[] = []\n\n /**\n * Used if user wants to update or delete a specific entities.\n */\n whereEntities: ObjectLiteral[] = []\n\n /**\n * Indicates if entity must be updated after insertion / updation.\n * This may produce extra query or use RETURNING / OUTPUT statement (depend on database).\n */\n updateEntity: boolean = true\n\n /**\n * Indicates if listeners and subscribers must be called before and after query execution.\n */\n callListeners: boolean = true\n\n /**\n * Indicates if query must be wrapped into transaction.\n */\n useTransaction: boolean = false\n\n /**\n * Indicates if query should be time travel query\n * https://www.cockroachlabs.com/docs/stable/as-of-system-time.html\n */\n timeTravel?: boolean | string\n\n /**\n * Extra parameters.\n *\n * @deprecated Use standard parameters instead\n */\n nativeParameters: ObjectLiteral = {}\n\n /**\n * Query Comment to include extra information for debugging or other purposes.\n */\n comment?: string\n\n /**\n * Items from an entity that have been locally generated & are recorded here for later use.\n * Examples include the UUID generation when the database does not natively support it.\n * These are included in the entity index order.\n */\n locallyGenerated: { [key: number]: ObjectLiteral } = {}\n\n commonTableExpressions: {\n queryBuilder: QueryBuilder<any> | string\n alias: string\n options: QueryBuilderCteOptions\n }[] = []\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(protected connection: DataSource) {\n if (connection.options.relationLoadStrategy) {\n this.relationLoadStrategy = connection.options.relationLoadStrategy\n }\n\n this.timeTravel =\n (connection.options as CockroachConnectionOptions)\n ?.timeTravelQueries || false\n }\n\n // -------------------------------------------------------------------------\n // Accessors\n // -------------------------------------------------------------------------\n\n /**\n * Get all ORDER BY queries - if order by is specified by user then it uses them,\n * otherwise it uses default entity order by if it was set.\n */\n get allOrderBys() {\n if (\n !Object.keys(this.orderBys).length &&\n this.mainAlias!.hasMetadata &&\n this.options.indexOf(\"disable-global-order\") === -1\n ) {\n const entityOrderBy = this.mainAlias!.metadata.orderBy || {}\n return Object.keys(entityOrderBy).reduce((orderBy, key) => {\n orderBy[this.mainAlias!.name + \".\" + key] = entityOrderBy[key]\n return orderBy\n }, {} as OrderByCondition)\n }\n\n return this.orderBys\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates a main alias and adds it to the current expression map.\n */\n setMainAlias(alias: Alias): Alias {\n // if main alias is already set then remove it from the array\n // if (this.mainAlias)\n // this.aliases.splice(this.aliases.indexOf(this.mainAlias));\n\n // set new main alias\n this.mainAlias = alias\n\n return alias\n }\n\n /**\n * Creates a new alias and adds it to the current expression map.\n */\n createAlias(options: {\n type: \"from\" | \"select\" | \"join\" | \"other\"\n name?: string\n target?: Function | string\n tablePath?: string\n subQuery?: string\n metadata?: EntityMetadata\n }): Alias {\n let aliasName = options.name\n if (!aliasName && options.tablePath) aliasName = options.tablePath\n if (!aliasName && typeof options.target === \"function\")\n aliasName = options.target.name\n if (!aliasName && typeof options.target === \"string\")\n aliasName = options.target\n\n const alias = new Alias()\n alias.type = options.type\n if (aliasName) alias.name = aliasName\n if (options.metadata) alias.metadata = options.metadata\n if (options.target && !alias.hasMetadata)\n alias.metadata = this.connection.getMetadata(options.target)\n if (options.tablePath) alias.tablePath = options.tablePath\n if (options.subQuery) alias.subQuery = options.subQuery\n\n this.aliases.push(alias)\n return alias\n }\n\n /**\n * Finds alias with the given name.\n * If alias was not found it throw an exception.\n */\n findAliasByName(aliasName: string): Alias {\n const alias = this.aliases.find((alias) => alias.name === aliasName)\n if (!alias)\n throw new TypeORMError(\n `\"${aliasName}\" alias was not found. Maybe you forgot to join it?`,\n )\n\n return alias\n }\n\n findColumnByAliasExpression(\n aliasExpression: string,\n ): ColumnMetadata | undefined {\n const [aliasName, propertyPath] = aliasExpression.split(\".\")\n const alias = this.findAliasByName(aliasName)\n return alias.metadata.findColumnWithPropertyName(propertyPath)\n }\n\n /**\n * Gets relation metadata of the relation this query builder works with.\n *\n * todo: add proper exceptions\n */\n get relationMetadata(): RelationMetadata {\n if (!this.mainAlias)\n throw new TypeORMError(`Entity to work with is not specified!`) // todo: better message\n\n const relationMetadata =\n this.mainAlias.metadata.findRelationWithPropertyPath(\n this.relationPropertyPath,\n )\n if (!relationMetadata)\n throw new TypeORMError(\n `Relation ${this.relationPropertyPath} was not found in entity ${this.mainAlias.name}`,\n ) // todo: better message\n\n return relationMetadata\n }\n\n /**\n * Copies all properties of the current QueryExpressionMap into a new one.\n * Useful when QueryBuilder needs to create a copy of itself.\n */\n clone(): QueryExpressionMap {\n const map = new QueryExpressionMap(this.connection)\n map.queryType = this.queryType\n map.selects = this.selects.map((select) => select)\n map.maxExecutionTime = this.maxExecutionTime\n map.selectDistinct = this.selectDistinct\n map.selectDistinctOn = this.selectDistinctOn\n this.aliases.forEach((alias) => map.aliases.push(new Alias(alias)))\n map.relationLoadStrategy = this.relationLoadStrategy\n map.mainAlias = this.mainAlias\n map.valuesSet = this.valuesSet\n map.returning = this.returning\n map.onConflict = this.onConflict\n map.onIgnore = this.onIgnore\n map.onUpdate = this.onUpdate\n map.joinAttributes = this.joinAttributes.map(\n (join) => new JoinAttribute(this.connection, this, join),\n )\n map.relationIdAttributes = this.relationIdAttributes.map(\n (relationId) => new RelationIdAttribute(this, relationId),\n )\n map.relationCountAttributes = this.relationCountAttributes.map(\n (relationCount) => new RelationCountAttribute(this, relationCount),\n )\n map.wheres = this.wheres.map((where) => ({ ...where }))\n map.havings = this.havings.map((having) => ({ ...having }))\n map.orderBys = Object.assign({}, this.orderBys)\n map.groupBys = this.groupBys.map((groupBy) => groupBy)\n map.limit = this.limit\n map.offset = this.offset\n map.skip = this.skip\n map.take = this.take\n map.useIndex = this.useIndex\n map.lockMode = this.lockMode\n map.onLocked = this.onLocked\n map.lockVersion = this.lockVersion\n map.lockTables = this.lockTables\n map.withDeleted = this.withDeleted\n map.parameters = Object.assign({}, this.parameters)\n map.disableEscaping = this.disableEscaping\n map.enableRelationIdValues = this.enableRelationIdValues\n map.extraAppendedAndWhereCondition = this.extraAppendedAndWhereCondition\n map.subQuery = this.subQuery\n map.aliasNamePrefixingEnabled = this.aliasNamePrefixingEnabled\n map.cache = this.cache\n map.cacheId = this.cacheId\n map.cacheDuration = this.cacheDuration\n map.relationPropertyPath = this.relationPropertyPath\n map.of = this.of\n map.insertColumns = this.insertColumns\n map.whereEntities = this.whereEntities\n map.updateEntity = this.updateEntity\n map.callListeners = this.callListeners\n map.useTransaction = this.useTransaction\n map.timeTravel = this.timeTravel\n map.nativeParameters = Object.assign({}, this.nativeParameters)\n map.comment = this.comment\n map.commonTableExpressions = this.commonTableExpressions.map(\n (cteOptions) => ({\n alias: cteOptions.alias,\n queryBuilder:\n typeof cteOptions.queryBuilder === \"string\"\n ? cteOptions.queryBuilder\n : cteOptions.queryBuilder.clone(),\n options: cteOptions.options,\n }),\n )\n return map\n }\n}\n"],"sourceRoot":".."}
@@ -237,6 +237,7 @@ class RelationLoader {
237
237
  delete entity[resolveIndex];
238
238
  delete entity[dataIndex];
239
239
  entity[promiseIndex] = value;
240
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
240
241
  value.then(
241
242
  // ensure different value is not assigned yet
242
243
  (result) => entity[promiseIndex] === value
@@ -266,6 +267,7 @@ class RelationLoader {
266
267
  set: function (value) {
267
268
  if (value instanceof Promise) {
268
269
  // if set data is a promise then wait for its resolve and save in the object
270
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
269
271
  setPromise(this, value);
270
272
  }
271
273
  else {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/query-builder/RelationLoader.ts"],"names":[],"mappings":"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","file":"RelationLoader.js","sourcesContent":["import { DataSource } from \"../data-source/DataSource\"\nimport { ObjectLiteral } from \"../common/ObjectLiteral\"\nimport { QueryRunner } from \"../query-runner/QueryRunner\"\nimport { RelationMetadata } from \"../metadata/RelationMetadata\"\nimport { FindOptionsUtils } from \"../find-options/FindOptionsUtils\"\nimport { SelectQueryBuilder } from \"./SelectQueryBuilder\"\n\n/**\n * Wraps entities and creates getters/setters for their relations\n * to be able to lazily load relations when accessing these relations.\n */\nexport class RelationLoader {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(private connection: DataSource) {}\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Loads relation data for the given entity and its relation.\n */\n load(\n relation: RelationMetadata,\n entityOrEntities: ObjectLiteral | ObjectLiteral[],\n queryRunner?: QueryRunner,\n queryBuilder?: SelectQueryBuilder<any>,\n ): Promise<any[]> {\n // todo: check all places where it uses non array\n if (queryRunner && queryRunner.isReleased) queryRunner = undefined // get new one if already closed\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n return this.loadManyToOneOrOneToOneOwner(\n relation,\n entityOrEntities,\n queryRunner,\n queryBuilder,\n )\n } else if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n return this.loadOneToManyOrOneToOneNotOwner(\n relation,\n entityOrEntities,\n queryRunner,\n queryBuilder,\n )\n } else if (relation.isManyToManyOwner) {\n return this.loadManyToManyOwner(\n relation,\n entityOrEntities,\n queryRunner,\n queryBuilder,\n )\n } else {\n // many-to-many non owner\n return this.loadManyToManyNotOwner(\n relation,\n entityOrEntities,\n queryRunner,\n queryBuilder,\n )\n }\n }\n\n /**\n * Loads data for many-to-one and one-to-one owner relations.\n *\n * (ow) post.category<=>category.post\n * loaded: category from post\n * example: SELECT category.id AS category_id, category.name AS category_name FROM category category\n * INNER JOIN post Post ON Post.category=category.id WHERE Post.id=1\n */\n loadManyToOneOrOneToOneOwner(\n relation: RelationMetadata,\n entityOrEntities: ObjectLiteral | ObjectLiteral[],\n queryRunner?: QueryRunner,\n queryBuilder?: SelectQueryBuilder<any>,\n ): Promise<any> {\n const entities = Array.isArray(entityOrEntities)\n ? entityOrEntities\n : [entityOrEntities]\n\n const joinAliasName = relation.entityMetadata.name\n const qb = queryBuilder\n ? queryBuilder\n : this.connection\n .createQueryBuilder(queryRunner)\n .select(relation.propertyName) // category\n .from(relation.type, relation.propertyName)\n\n const mainAlias = qb.expressionMap.mainAlias!.name\n const columns = relation.entityMetadata.primaryColumns\n const joinColumns = relation.isOwning\n ? relation.joinColumns\n : relation.inverseRelation!.joinColumns\n const conditions = joinColumns\n .map((joinColumn) => {\n return `${relation.entityMetadata.name}.${\n joinColumn.propertyName\n } = ${mainAlias}.${joinColumn.referencedColumn!.propertyName}`\n })\n .join(\" AND \")\n\n qb.innerJoin(\n relation.entityMetadata.target as Function,\n joinAliasName,\n conditions,\n )\n\n if (columns.length === 1) {\n qb.where(\n `${joinAliasName}.${columns[0].propertyPath} IN (:...${\n joinAliasName + \"_\" + columns[0].propertyName\n })`,\n )\n qb.setParameter(\n joinAliasName + \"_\" + columns[0].propertyName,\n entities.map((entity) =>\n columns[0].getEntityValue(entity, true),\n ),\n )\n } else {\n const condition = entities\n .map((entity, entityIndex) => {\n return columns\n .map((column, columnIndex) => {\n const paramName =\n joinAliasName +\n \"_entity_\" +\n entityIndex +\n \"_\" +\n columnIndex\n qb.setParameter(\n paramName,\n column.getEntityValue(entity, true),\n )\n return (\n joinAliasName +\n \".\" +\n column.propertyPath +\n \" = :\" +\n paramName\n )\n })\n .join(\" AND \")\n })\n .map((condition) => \"(\" + condition + \")\")\n .join(\" OR \")\n qb.where(condition)\n }\n\n FindOptionsUtils.joinEagerRelations(\n qb,\n qb.alias,\n qb.expressionMap.mainAlias!.metadata,\n )\n\n return qb.getMany()\n // return qb.getOne(); todo: fix all usages\n }\n\n /**\n * Loads data for one-to-many and one-to-one not owner relations.\n *\n * SELECT post\n * FROM post post\n * WHERE post.[joinColumn.name] = entity[joinColumn.referencedColumn]\n */\n loadOneToManyOrOneToOneNotOwner(\n relation: RelationMetadata,\n entityOrEntities: ObjectLiteral | ObjectLiteral[],\n queryRunner?: QueryRunner,\n queryBuilder?: SelectQueryBuilder<any>,\n ): Promise<any> {\n const entities = Array.isArray(entityOrEntities)\n ? entityOrEntities\n : [entityOrEntities]\n const columns = relation.inverseRelation!.joinColumns\n const qb = queryBuilder\n ? queryBuilder\n : this.connection\n .createQueryBuilder(queryRunner)\n .select(relation.propertyName)\n .from(\n relation.inverseRelation!.entityMetadata.target,\n relation.propertyName,\n )\n\n const aliasName = qb.expressionMap.mainAlias!.name\n\n if (columns.length === 1) {\n qb.where(\n `${aliasName}.${columns[0].propertyPath} IN (:...${\n aliasName + \"_\" + columns[0].propertyName\n })`,\n )\n qb.setParameter(\n aliasName + \"_\" + columns[0].propertyName,\n entities.map((entity) =>\n columns[0].referencedColumn!.getEntityValue(entity, true),\n ),\n )\n } else {\n const condition = entities\n .map((entity, entityIndex) => {\n return columns\n .map((column, columnIndex) => {\n const paramName =\n aliasName +\n \"_entity_\" +\n entityIndex +\n \"_\" +\n columnIndex\n qb.setParameter(\n paramName,\n column.referencedColumn!.getEntityValue(\n entity,\n true,\n ),\n )\n return (\n aliasName +\n \".\" +\n column.propertyPath +\n \" = :\" +\n paramName\n )\n })\n .join(\" AND \")\n })\n .map((condition) => \"(\" + condition + \")\")\n .join(\" OR \")\n qb.where(condition)\n }\n\n FindOptionsUtils.joinEagerRelations(\n qb,\n qb.alias,\n qb.expressionMap.mainAlias!.metadata,\n )\n\n return qb.getMany()\n // return relation.isOneToMany ? qb.getMany() : qb.getOne(); todo: fix all usages\n }\n\n /**\n * Loads data for many-to-many owner relations.\n *\n * SELECT category\n * FROM category category\n * INNER JOIN post_categories post_categories\n * ON post_categories.postId = :postId\n * AND post_categories.categoryId = category.id\n */\n loadManyToManyOwner(\n relation: RelationMetadata,\n entityOrEntities: ObjectLiteral | ObjectLiteral[],\n queryRunner?: QueryRunner,\n queryBuilder?: SelectQueryBuilder<any>,\n ): Promise<any> {\n const entities = Array.isArray(entityOrEntities)\n ? entityOrEntities\n : [entityOrEntities]\n const parameters = relation.joinColumns.reduce(\n (parameters, joinColumn) => {\n parameters[joinColumn.propertyName] = entities.map((entity) =>\n joinColumn.referencedColumn!.getEntityValue(entity, true),\n )\n return parameters\n },\n {} as ObjectLiteral,\n )\n\n const qb = queryBuilder\n ? queryBuilder\n : this.connection\n .createQueryBuilder(queryRunner)\n .select(relation.propertyName)\n .from(relation.type, relation.propertyName)\n\n const mainAlias = qb.expressionMap.mainAlias!.name\n const joinAlias = relation.junctionEntityMetadata!.tableName\n const joinColumnConditions = relation.joinColumns.map((joinColumn) => {\n return `${joinAlias}.${joinColumn.propertyName} IN (:...${joinColumn.propertyName})`\n })\n const inverseJoinColumnConditions = relation.inverseJoinColumns.map(\n (inverseJoinColumn) => {\n return `${joinAlias}.${\n inverseJoinColumn.propertyName\n }=${mainAlias}.${\n inverseJoinColumn.referencedColumn!.propertyName\n }`\n },\n )\n\n qb.innerJoin(\n joinAlias,\n joinAlias,\n [...joinColumnConditions, ...inverseJoinColumnConditions].join(\n \" AND \",\n ),\n ).setParameters(parameters)\n\n FindOptionsUtils.joinEagerRelations(\n qb,\n qb.alias,\n qb.expressionMap.mainAlias!.metadata,\n )\n\n return qb.getMany()\n }\n\n /**\n * Loads data for many-to-many not owner relations.\n *\n * SELECT post\n * FROM post post\n * INNER JOIN post_categories post_categories\n * ON post_categories.postId = post.id\n * AND post_categories.categoryId = post_categories.categoryId\n */\n loadManyToManyNotOwner(\n relation: RelationMetadata,\n entityOrEntities: ObjectLiteral | ObjectLiteral[],\n queryRunner?: QueryRunner,\n queryBuilder?: SelectQueryBuilder<any>,\n ): Promise<any> {\n const entities = Array.isArray(entityOrEntities)\n ? entityOrEntities\n : [entityOrEntities]\n\n const qb = queryBuilder\n ? queryBuilder\n : this.connection\n .createQueryBuilder(queryRunner)\n .select(relation.propertyName)\n .from(relation.type, relation.propertyName)\n\n const mainAlias = qb.expressionMap.mainAlias!.name\n const joinAlias = relation.junctionEntityMetadata!.tableName\n const joinColumnConditions = relation.inverseRelation!.joinColumns.map(\n (joinColumn) => {\n return `${joinAlias}.${\n joinColumn.propertyName\n } = ${mainAlias}.${joinColumn.referencedColumn!.propertyName}`\n },\n )\n const inverseJoinColumnConditions =\n relation.inverseRelation!.inverseJoinColumns.map(\n (inverseJoinColumn) => {\n return `${joinAlias}.${inverseJoinColumn.propertyName} IN (:...${inverseJoinColumn.propertyName})`\n },\n )\n const parameters = relation.inverseRelation!.inverseJoinColumns.reduce(\n (parameters, joinColumn) => {\n parameters[joinColumn.propertyName] = entities.map((entity) =>\n joinColumn.referencedColumn!.getEntityValue(entity, true),\n )\n return parameters\n },\n {} as ObjectLiteral,\n )\n\n qb.innerJoin(\n joinAlias,\n joinAlias,\n [...joinColumnConditions, ...inverseJoinColumnConditions].join(\n \" AND \",\n ),\n ).setParameters(parameters)\n\n FindOptionsUtils.joinEagerRelations(\n qb,\n qb.alias,\n qb.expressionMap.mainAlias!.metadata,\n )\n\n return qb.getMany()\n }\n\n /**\n * Wraps given entity and creates getters/setters for its given relation\n * to be able to lazily load data when accessing this relation.\n */\n enableLazyLoad(\n relation: RelationMetadata,\n entity: ObjectLiteral,\n queryRunner?: QueryRunner,\n ) {\n const relationLoader = this\n const dataIndex = \"__\" + relation.propertyName + \"__\" // in what property of the entity loaded data will be stored\n const promiseIndex = \"__promise_\" + relation.propertyName + \"__\" // in what property of the entity loading promise will be stored\n const resolveIndex = \"__has_\" + relation.propertyName + \"__\" // indicates if relation data already was loaded or not, we need this flag if loaded data is empty\n\n const setData = (entity: ObjectLiteral, value: any) => {\n entity[dataIndex] = value\n entity[resolveIndex] = true\n delete entity[promiseIndex]\n return value\n }\n const setPromise = (entity: ObjectLiteral, value: Promise<any>) => {\n delete entity[resolveIndex]\n delete entity[dataIndex]\n entity[promiseIndex] = value\n value.then(\n // ensure different value is not assigned yet\n (result) =>\n entity[promiseIndex] === value\n ? setData(entity, result)\n : result,\n )\n return value\n }\n\n Object.defineProperty(entity, relation.propertyName, {\n get: function () {\n if (\n this[resolveIndex] === true ||\n this[dataIndex] !== undefined\n )\n // if related data already was loaded then simply return it\n return Promise.resolve(this[dataIndex])\n\n if (this[promiseIndex])\n // if related data is loading then return a promise relationLoader loads it\n return this[promiseIndex]\n\n // nothing is loaded yet, load relation data and save it in the model once they are loaded\n const loader = relationLoader\n .load(relation, this, queryRunner)\n .then((result) =>\n relation.isOneToOne || relation.isManyToOne\n ? result.length === 0\n ? null\n : result[0]\n : result,\n )\n return setPromise(this, loader)\n },\n set: function (value: any | Promise<any>) {\n if (value instanceof Promise) {\n // if set data is a promise then wait for its resolve and save in the object\n setPromise(this, value)\n } else {\n // if its direct data set (non promise, probably not safe-typed)\n setData(this, value)\n }\n },\n configurable: true,\n enumerable: false,\n })\n }\n}\n"],"sourceRoot":".."}
1
+ {"version":3,"sources":["../../src/query-builder/RelationLoader.ts"],"names":[],"mappings":"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","file":"RelationLoader.js","sourcesContent":["import { DataSource } from \"../data-source/DataSource\"\nimport { ObjectLiteral } from \"../common/ObjectLiteral\"\nimport { QueryRunner } from \"../query-runner/QueryRunner\"\nimport { RelationMetadata } from \"../metadata/RelationMetadata\"\nimport { FindOptionsUtils } from \"../find-options/FindOptionsUtils\"\nimport { SelectQueryBuilder } from \"./SelectQueryBuilder\"\n\n/**\n * Wraps entities and creates getters/setters for their relations\n * to be able to lazily load relations when accessing these relations.\n */\nexport class RelationLoader {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(private connection: DataSource) {}\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Loads relation data for the given entity and its relation.\n */\n load(\n relation: RelationMetadata,\n entityOrEntities: ObjectLiteral | ObjectLiteral[],\n queryRunner?: QueryRunner,\n queryBuilder?: SelectQueryBuilder<any>,\n ): Promise<any[]> {\n // todo: check all places where it uses non array\n if (queryRunner && queryRunner.isReleased) queryRunner = undefined // get new one if already closed\n if (relation.isManyToOne || relation.isOneToOneOwner) {\n return this.loadManyToOneOrOneToOneOwner(\n relation,\n entityOrEntities,\n queryRunner,\n queryBuilder,\n )\n } else if (relation.isOneToMany || relation.isOneToOneNotOwner) {\n return this.loadOneToManyOrOneToOneNotOwner(\n relation,\n entityOrEntities,\n queryRunner,\n queryBuilder,\n )\n } else if (relation.isManyToManyOwner) {\n return this.loadManyToManyOwner(\n relation,\n entityOrEntities,\n queryRunner,\n queryBuilder,\n )\n } else {\n // many-to-many non owner\n return this.loadManyToManyNotOwner(\n relation,\n entityOrEntities,\n queryRunner,\n queryBuilder,\n )\n }\n }\n\n /**\n * Loads data for many-to-one and one-to-one owner relations.\n *\n * (ow) post.category<=>category.post\n * loaded: category from post\n * example: SELECT category.id AS category_id, category.name AS category_name FROM category category\n * INNER JOIN post Post ON Post.category=category.id WHERE Post.id=1\n */\n loadManyToOneOrOneToOneOwner(\n relation: RelationMetadata,\n entityOrEntities: ObjectLiteral | ObjectLiteral[],\n queryRunner?: QueryRunner,\n queryBuilder?: SelectQueryBuilder<any>,\n ): Promise<any> {\n const entities = Array.isArray(entityOrEntities)\n ? entityOrEntities\n : [entityOrEntities]\n\n const joinAliasName = relation.entityMetadata.name\n const qb = queryBuilder\n ? queryBuilder\n : this.connection\n .createQueryBuilder(queryRunner)\n .select(relation.propertyName) // category\n .from(relation.type, relation.propertyName)\n\n const mainAlias = qb.expressionMap.mainAlias!.name\n const columns = relation.entityMetadata.primaryColumns\n const joinColumns = relation.isOwning\n ? relation.joinColumns\n : relation.inverseRelation!.joinColumns\n const conditions = joinColumns\n .map((joinColumn) => {\n return `${relation.entityMetadata.name}.${\n joinColumn.propertyName\n } = ${mainAlias}.${joinColumn.referencedColumn!.propertyName}`\n })\n .join(\" AND \")\n\n qb.innerJoin(\n relation.entityMetadata.target as Function,\n joinAliasName,\n conditions,\n )\n\n if (columns.length === 1) {\n qb.where(\n `${joinAliasName}.${columns[0].propertyPath} IN (:...${\n joinAliasName + \"_\" + columns[0].propertyName\n })`,\n )\n qb.setParameter(\n joinAliasName + \"_\" + columns[0].propertyName,\n entities.map((entity) =>\n columns[0].getEntityValue(entity, true),\n ),\n )\n } else {\n const condition = entities\n .map((entity, entityIndex) => {\n return columns\n .map((column, columnIndex) => {\n const paramName =\n joinAliasName +\n \"_entity_\" +\n entityIndex +\n \"_\" +\n columnIndex\n qb.setParameter(\n paramName,\n column.getEntityValue(entity, true),\n )\n return (\n joinAliasName +\n \".\" +\n column.propertyPath +\n \" = :\" +\n paramName\n )\n })\n .join(\" AND \")\n })\n .map((condition) => \"(\" + condition + \")\")\n .join(\" OR \")\n qb.where(condition)\n }\n\n FindOptionsUtils.joinEagerRelations(\n qb,\n qb.alias,\n qb.expressionMap.mainAlias!.metadata,\n )\n\n return qb.getMany()\n // return qb.getOne(); todo: fix all usages\n }\n\n /**\n * Loads data for one-to-many and one-to-one not owner relations.\n *\n * SELECT post\n * FROM post post\n * WHERE post.[joinColumn.name] = entity[joinColumn.referencedColumn]\n */\n loadOneToManyOrOneToOneNotOwner(\n relation: RelationMetadata,\n entityOrEntities: ObjectLiteral | ObjectLiteral[],\n queryRunner?: QueryRunner,\n queryBuilder?: SelectQueryBuilder<any>,\n ): Promise<any> {\n const entities = Array.isArray(entityOrEntities)\n ? entityOrEntities\n : [entityOrEntities]\n const columns = relation.inverseRelation!.joinColumns\n const qb = queryBuilder\n ? queryBuilder\n : this.connection\n .createQueryBuilder(queryRunner)\n .select(relation.propertyName)\n .from(\n relation.inverseRelation!.entityMetadata.target,\n relation.propertyName,\n )\n\n const aliasName = qb.expressionMap.mainAlias!.name\n\n if (columns.length === 1) {\n qb.where(\n `${aliasName}.${columns[0].propertyPath} IN (:...${\n aliasName + \"_\" + columns[0].propertyName\n })`,\n )\n qb.setParameter(\n aliasName + \"_\" + columns[0].propertyName,\n entities.map((entity) =>\n columns[0].referencedColumn!.getEntityValue(entity, true),\n ),\n )\n } else {\n const condition = entities\n .map((entity, entityIndex) => {\n return columns\n .map((column, columnIndex) => {\n const paramName =\n aliasName +\n \"_entity_\" +\n entityIndex +\n \"_\" +\n columnIndex\n qb.setParameter(\n paramName,\n column.referencedColumn!.getEntityValue(\n entity,\n true,\n ),\n )\n return (\n aliasName +\n \".\" +\n column.propertyPath +\n \" = :\" +\n paramName\n )\n })\n .join(\" AND \")\n })\n .map((condition) => \"(\" + condition + \")\")\n .join(\" OR \")\n qb.where(condition)\n }\n\n FindOptionsUtils.joinEagerRelations(\n qb,\n qb.alias,\n qb.expressionMap.mainAlias!.metadata,\n )\n\n return qb.getMany()\n // return relation.isOneToMany ? qb.getMany() : qb.getOne(); todo: fix all usages\n }\n\n /**\n * Loads data for many-to-many owner relations.\n *\n * SELECT category\n * FROM category category\n * INNER JOIN post_categories post_categories\n * ON post_categories.postId = :postId\n * AND post_categories.categoryId = category.id\n */\n loadManyToManyOwner(\n relation: RelationMetadata,\n entityOrEntities: ObjectLiteral | ObjectLiteral[],\n queryRunner?: QueryRunner,\n queryBuilder?: SelectQueryBuilder<any>,\n ): Promise<any> {\n const entities = Array.isArray(entityOrEntities)\n ? entityOrEntities\n : [entityOrEntities]\n const parameters = relation.joinColumns.reduce(\n (parameters, joinColumn) => {\n parameters[joinColumn.propertyName] = entities.map((entity) =>\n joinColumn.referencedColumn!.getEntityValue(entity, true),\n )\n return parameters\n },\n {} as ObjectLiteral,\n )\n\n const qb = queryBuilder\n ? queryBuilder\n : this.connection\n .createQueryBuilder(queryRunner)\n .select(relation.propertyName)\n .from(relation.type, relation.propertyName)\n\n const mainAlias = qb.expressionMap.mainAlias!.name\n const joinAlias = relation.junctionEntityMetadata!.tableName\n const joinColumnConditions = relation.joinColumns.map((joinColumn) => {\n return `${joinAlias}.${joinColumn.propertyName} IN (:...${joinColumn.propertyName})`\n })\n const inverseJoinColumnConditions = relation.inverseJoinColumns.map(\n (inverseJoinColumn) => {\n return `${joinAlias}.${\n inverseJoinColumn.propertyName\n }=${mainAlias}.${\n inverseJoinColumn.referencedColumn!.propertyName\n }`\n },\n )\n\n qb.innerJoin(\n joinAlias,\n joinAlias,\n [...joinColumnConditions, ...inverseJoinColumnConditions].join(\n \" AND \",\n ),\n ).setParameters(parameters)\n\n FindOptionsUtils.joinEagerRelations(\n qb,\n qb.alias,\n qb.expressionMap.mainAlias!.metadata,\n )\n\n return qb.getMany()\n }\n\n /**\n * Loads data for many-to-many not owner relations.\n *\n * SELECT post\n * FROM post post\n * INNER JOIN post_categories post_categories\n * ON post_categories.postId = post.id\n * AND post_categories.categoryId = post_categories.categoryId\n */\n loadManyToManyNotOwner(\n relation: RelationMetadata,\n entityOrEntities: ObjectLiteral | ObjectLiteral[],\n queryRunner?: QueryRunner,\n queryBuilder?: SelectQueryBuilder<any>,\n ): Promise<any> {\n const entities = Array.isArray(entityOrEntities)\n ? entityOrEntities\n : [entityOrEntities]\n\n const qb = queryBuilder\n ? queryBuilder\n : this.connection\n .createQueryBuilder(queryRunner)\n .select(relation.propertyName)\n .from(relation.type, relation.propertyName)\n\n const mainAlias = qb.expressionMap.mainAlias!.name\n const joinAlias = relation.junctionEntityMetadata!.tableName\n const joinColumnConditions = relation.inverseRelation!.joinColumns.map(\n (joinColumn) => {\n return `${joinAlias}.${\n joinColumn.propertyName\n } = ${mainAlias}.${joinColumn.referencedColumn!.propertyName}`\n },\n )\n const inverseJoinColumnConditions =\n relation.inverseRelation!.inverseJoinColumns.map(\n (inverseJoinColumn) => {\n return `${joinAlias}.${inverseJoinColumn.propertyName} IN (:...${inverseJoinColumn.propertyName})`\n },\n )\n const parameters = relation.inverseRelation!.inverseJoinColumns.reduce(\n (parameters, joinColumn) => {\n parameters[joinColumn.propertyName] = entities.map((entity) =>\n joinColumn.referencedColumn!.getEntityValue(entity, true),\n )\n return parameters\n },\n {} as ObjectLiteral,\n )\n\n qb.innerJoin(\n joinAlias,\n joinAlias,\n [...joinColumnConditions, ...inverseJoinColumnConditions].join(\n \" AND \",\n ),\n ).setParameters(parameters)\n\n FindOptionsUtils.joinEagerRelations(\n qb,\n qb.alias,\n qb.expressionMap.mainAlias!.metadata,\n )\n\n return qb.getMany()\n }\n\n /**\n * Wraps given entity and creates getters/setters for its given relation\n * to be able to lazily load data when accessing this relation.\n */\n enableLazyLoad(\n relation: RelationMetadata,\n entity: ObjectLiteral,\n queryRunner?: QueryRunner,\n ) {\n const relationLoader = this\n const dataIndex = \"__\" + relation.propertyName + \"__\" // in what property of the entity loaded data will be stored\n const promiseIndex = \"__promise_\" + relation.propertyName + \"__\" // in what property of the entity loading promise will be stored\n const resolveIndex = \"__has_\" + relation.propertyName + \"__\" // indicates if relation data already was loaded or not, we need this flag if loaded data is empty\n\n const setData = (entity: ObjectLiteral, value: any) => {\n entity[dataIndex] = value\n entity[resolveIndex] = true\n delete entity[promiseIndex]\n return value\n }\n const setPromise = (entity: ObjectLiteral, value: Promise<any>) => {\n delete entity[resolveIndex]\n delete entity[dataIndex]\n entity[promiseIndex] = value\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n value.then(\n // ensure different value is not assigned yet\n (result) =>\n entity[promiseIndex] === value\n ? setData(entity, result)\n : result,\n )\n return value\n }\n\n Object.defineProperty(entity, relation.propertyName, {\n get: function () {\n if (\n this[resolveIndex] === true ||\n this[dataIndex] !== undefined\n )\n // if related data already was loaded then simply return it\n return Promise.resolve(this[dataIndex])\n\n if (this[promiseIndex])\n // if related data is loading then return a promise relationLoader loads it\n return this[promiseIndex]\n\n // nothing is loaded yet, load relation data and save it in the model once they are loaded\n const loader = relationLoader\n .load(relation, this, queryRunner)\n .then((result) =>\n relation.isOneToOne || relation.isManyToOne\n ? result.length === 0\n ? null\n : result[0]\n : result,\n )\n return setPromise(this, loader)\n },\n set: function (value: any | Promise<any>) {\n if (value instanceof Promise) {\n // if set data is a promise then wait for its resolve and save in the object\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n setPromise(this, value)\n } else {\n // if its direct data set (non promise, probably not safe-typed)\n setData(this, value)\n }\n },\n configurable: true,\n enumerable: false,\n })\n }\n}\n"],"sourceRoot":".."}
@@ -588,6 +588,7 @@ export declare class SelectQueryBuilder<Entity extends ObjectLiteral> extends Qu
588
588
  * This method is useful to build pagination.
589
589
  */
590
590
  getManyAndCount(): Promise<[Entity[], number]>;
591
+ private lazyCount;
591
592
  /**
592
593
  * Executes built SQL query and returns raw data stream.
593
594
  */
@@ -849,11 +849,16 @@ class SelectQueryBuilder extends QueryBuilder_1.QueryBuilder {
849
849
  this.expressionMap.queryEntity = true;
850
850
  const entitiesAndRaw = await this.executeEntitiesAndRawResults(queryRunner);
851
851
  this.expressionMap.queryEntity = false;
852
- const cacheId = this.expressionMap.cacheId;
853
- // Creates a new cacheId for the count query, or it will retreive the above query results
854
- // and count will return 0.
855
- this.expressionMap.cacheId = cacheId ? `${cacheId}-count` : cacheId;
856
- const count = await this.executeCountQuery(queryRunner);
852
+ let count = this.lazyCount(entitiesAndRaw);
853
+ if (count === undefined) {
854
+ const cacheId = this.expressionMap.cacheId;
855
+ // Creates a new cacheId for the count query, or it will retrieve the above query results
856
+ // and count will return 0.
857
+ if (cacheId) {
858
+ this.expressionMap.cacheId = `${cacheId}-count`;
859
+ }
860
+ count = await this.executeCountQuery(queryRunner);
861
+ }
857
862
  const results = [entitiesAndRaw.entities, count];
858
863
  // close transaction if we started it
859
864
  if (transactionStartedByUs) {
@@ -877,6 +882,39 @@ class SelectQueryBuilder extends QueryBuilder_1.QueryBuilder {
877
882
  await queryRunner.release();
878
883
  }
879
884
  }
885
+ lazyCount(entitiesAndRaw) {
886
+ const hasLimit = this.expressionMap.limit !== undefined &&
887
+ this.expressionMap.limit !== null;
888
+ if (this.expressionMap.joinAttributes.length > 0 && hasLimit) {
889
+ return undefined;
890
+ }
891
+ const hasTake = this.expressionMap.take !== undefined &&
892
+ this.expressionMap.take !== null;
893
+ // limit overrides take when no join is defined
894
+ const maxResults = hasLimit
895
+ ? this.expressionMap.limit
896
+ : hasTake
897
+ ? this.expressionMap.take
898
+ : undefined;
899
+ if (maxResults !== undefined &&
900
+ entitiesAndRaw.entities.length === maxResults) {
901
+ // stop here when the result set contains the max number of rows; we need to execute a full count
902
+ return undefined;
903
+ }
904
+ const hasSkip = this.expressionMap.skip !== undefined &&
905
+ this.expressionMap.skip !== null &&
906
+ this.expressionMap.skip > 0;
907
+ const hasOffset = this.expressionMap.offset !== undefined &&
908
+ this.expressionMap.offset !== null &&
909
+ this.expressionMap.offset > 0;
910
+ // offset overrides skip when no join is defined
911
+ const previousResults = hasOffset
912
+ ? this.expressionMap.offset
913
+ : hasSkip
914
+ ? this.expressionMap.skip
915
+ : 0;
916
+ return entitiesAndRaw.entities.length + previousResults;
917
+ }
880
918
  /**
881
919
  * Executes built SQL query and returns raw data stream.
882
920
  */