typeorm 1.0.0-beta.2 → 1.0.0-beta.3

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 (330) hide show
  1. package/README.md +1 -3
  2. package/browser/connection/ConnectionOptionsReader.js +1 -1
  3. package/browser/connection/ConnectionOptionsReader.js.map +1 -1
  4. package/browser/data-source/DataSource.d.ts +1 -1
  5. package/browser/data-source/DataSource.js.map +1 -1
  6. package/browser/decorator/options/JoinColumnOptions.js.map +1 -1
  7. package/browser/driver/DriverUtils.d.ts +1 -0
  8. package/browser/driver/DriverUtils.js +27 -29
  9. package/browser/driver/DriverUtils.js.map +1 -1
  10. package/browser/driver/aurora-mysql/AuroraMysqlDriver.js +4 -4
  11. package/browser/driver/aurora-mysql/AuroraMysqlDriver.js.map +1 -1
  12. package/browser/driver/aurora-mysql/AuroraMysqlQueryRunner.d.ts +2 -1
  13. package/browser/driver/aurora-mysql/AuroraMysqlQueryRunner.js +9 -6
  14. package/browser/driver/aurora-mysql/AuroraMysqlQueryRunner.js.map +1 -1
  15. package/browser/driver/aurora-postgres/AuroraPostgresQueryRunner.d.ts +2 -1
  16. package/browser/driver/aurora-postgres/AuroraPostgresQueryRunner.js +3 -0
  17. package/browser/driver/aurora-postgres/AuroraPostgresQueryRunner.js.map +1 -1
  18. package/browser/driver/better-sqlite3/BetterSqlite3QueryRunner.d.ts +2 -1
  19. package/browser/driver/better-sqlite3/BetterSqlite3QueryRunner.js +3 -0
  20. package/browser/driver/better-sqlite3/BetterSqlite3QueryRunner.js.map +1 -1
  21. package/browser/driver/capacitor/CapacitorQueryRunner.d.ts +1 -1
  22. package/browser/driver/capacitor/CapacitorQueryRunner.js +5 -1
  23. package/browser/driver/capacitor/CapacitorQueryRunner.js.map +1 -1
  24. package/browser/driver/cockroachdb/CockroachDriver.js +3 -3
  25. package/browser/driver/cockroachdb/CockroachDriver.js.map +1 -1
  26. package/browser/driver/cockroachdb/CockroachQueryRunner.d.ts +2 -1
  27. package/browser/driver/cockroachdb/CockroachQueryRunner.js +55 -50
  28. package/browser/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  29. package/browser/driver/cordova/CordovaQueryRunner.d.ts +1 -1
  30. package/browser/driver/cordova/CordovaQueryRunner.js +2 -0
  31. package/browser/driver/cordova/CordovaQueryRunner.js.map +1 -1
  32. package/browser/driver/expo/ExpoDataSourceOptions.d.ts +5 -3
  33. package/browser/driver/expo/ExpoDataSourceOptions.js.map +1 -1
  34. package/browser/driver/expo/ExpoDriver.d.ts +16 -1
  35. package/browser/driver/expo/ExpoDriver.js +68 -6
  36. package/browser/driver/expo/ExpoDriver.js.map +1 -1
  37. package/browser/driver/expo/ExpoQueryRunner.d.ts +2 -1
  38. package/browser/driver/expo/ExpoQueryRunner.js +3 -0
  39. package/browser/driver/expo/ExpoQueryRunner.js.map +1 -1
  40. package/browser/driver/mysql/MysqlDriver.js +4 -4
  41. package/browser/driver/mysql/MysqlDriver.js.map +1 -1
  42. package/browser/driver/mysql/MysqlQueryRunner.d.ts +2 -1
  43. package/browser/driver/mysql/MysqlQueryRunner.js +78 -82
  44. package/browser/driver/mysql/MysqlQueryRunner.js.map +1 -1
  45. package/browser/driver/nativescript/NativescriptQueryRunner.d.ts +1 -1
  46. package/browser/driver/nativescript/NativescriptQueryRunner.js +3 -0
  47. package/browser/driver/nativescript/NativescriptQueryRunner.js.map +1 -1
  48. package/browser/driver/oracle/OracleDriver.js +2 -2
  49. package/browser/driver/oracle/OracleDriver.js.map +1 -1
  50. package/browser/driver/postgres/PostgresDriver.js +8 -8
  51. package/browser/driver/postgres/PostgresDriver.js.map +1 -1
  52. package/browser/driver/postgres/PostgresQueryRunner.d.ts +2 -1
  53. package/browser/driver/postgres/PostgresQueryRunner.js +12 -8
  54. package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
  55. package/browser/driver/react-native/ReactNativeDriver.js +1 -1
  56. package/browser/driver/react-native/ReactNativeDriver.js.map +1 -1
  57. package/browser/driver/react-native/ReactNativeQueryRunner.d.ts +1 -1
  58. package/browser/driver/react-native/ReactNativeQueryRunner.js +3 -0
  59. package/browser/driver/react-native/ReactNativeQueryRunner.js.map +1 -1
  60. package/browser/driver/sap/SapDriver.js +5 -3
  61. package/browser/driver/sap/SapDriver.js.map +1 -1
  62. package/browser/driver/sap/SapQueryRunner.d.ts +2 -1
  63. package/browser/driver/sap/SapQueryRunner.js +171 -16
  64. package/browser/driver/sap/SapQueryRunner.js.map +1 -1
  65. package/browser/driver/spanner/SpannerDriver.d.ts +1 -1
  66. package/browser/driver/spanner/SpannerDriver.js +6 -8
  67. package/browser/driver/spanner/SpannerDriver.js.map +1 -1
  68. package/browser/driver/spanner/SpannerQueryRunner.d.ts +16 -1
  69. package/browser/driver/spanner/SpannerQueryRunner.js +75 -7
  70. package/browser/driver/spanner/SpannerQueryRunner.js.map +1 -1
  71. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js +1 -1
  72. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
  73. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +10 -14
  74. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  75. package/browser/driver/sqljs/SqljsQueryRunner.d.ts +2 -1
  76. package/browser/driver/sqljs/SqljsQueryRunner.js +3 -0
  77. package/browser/driver/sqljs/SqljsQueryRunner.js.map +1 -1
  78. package/browser/driver/sqlserver/SqlServerDriver.js +1 -1
  79. package/browser/driver/sqlserver/SqlServerDriver.js.map +1 -1
  80. package/browser/driver/sqlserver/SqlServerQueryRunner.d.ts +2 -1
  81. package/browser/driver/sqlserver/SqlServerQueryRunner.js +65 -60
  82. package/browser/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  83. package/browser/entity-manager/EntityManager.d.ts +1 -1
  84. package/browser/entity-manager/EntityManager.js.map +1 -1
  85. package/browser/error/NamedPlaceholdersNotSupportedError.d.ts +7 -0
  86. package/browser/error/NamedPlaceholdersNotSupportedError.js +14 -0
  87. package/browser/error/NamedPlaceholdersNotSupportedError.js.map +1 -0
  88. package/browser/error/QueryFailedError.d.ts +3 -2
  89. package/browser/error/QueryFailedError.js.map +1 -1
  90. package/browser/error/index.d.ts +1 -0
  91. package/browser/error/index.js +1 -0
  92. package/browser/error/index.js.map +1 -1
  93. package/browser/index.d.ts +0 -1
  94. package/browser/index.js +1 -3
  95. package/browser/index.js.map +1 -1
  96. package/browser/logger/AbstractLogger.d.ts +5 -4
  97. package/browser/logger/AbstractLogger.js +3 -1
  98. package/browser/logger/AbstractLogger.js.map +1 -1
  99. package/browser/logger/DebugLogger.js +3 -1
  100. package/browser/logger/DebugLogger.js.map +1 -1
  101. package/browser/logger/Logger.d.ts +5 -4
  102. package/browser/logger/Logger.js.map +1 -1
  103. package/browser/naming-strategy/DefaultNamingStrategy.d.ts +7 -26
  104. package/browser/naming-strategy/DefaultNamingStrategy.js +19 -37
  105. package/browser/naming-strategy/DefaultNamingStrategy.js.map +1 -1
  106. package/browser/naming-strategy/NamingStrategyInterface.d.ts +9 -13
  107. package/browser/naming-strategy/NamingStrategyInterface.js.map +1 -1
  108. package/browser/persistence/EntityPersistExecutor.js +20 -8
  109. package/browser/persistence/EntityPersistExecutor.js.map +1 -1
  110. package/browser/persistence/SubjectDatabaseEntityLoader.js +15 -5
  111. package/browser/persistence/SubjectDatabaseEntityLoader.js.map +1 -1
  112. package/browser/persistence/SubjectExecutor.js +50 -30
  113. package/browser/persistence/SubjectExecutor.js.map +1 -1
  114. package/browser/platform/PlatformTools.js +1 -1
  115. package/browser/platform/PlatformTools.js.map +1 -1
  116. package/browser/query-builder/JoinAttribute.js +3 -3
  117. package/browser/query-builder/JoinAttribute.js.map +1 -1
  118. package/browser/query-builder/QueryBuilder.d.ts +0 -1
  119. package/browser/query-builder/QueryBuilder.js +3 -13
  120. package/browser/query-builder/QueryBuilder.js.map +1 -1
  121. package/browser/query-builder/SelectQueryBuilder.js +33 -27
  122. package/browser/query-builder/SelectQueryBuilder.js.map +1 -1
  123. package/browser/query-builder/SoftDeleteQueryBuilder.js +0 -2
  124. package/browser/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
  125. package/browser/query-builder/UpdateQueryBuilder.js +0 -2
  126. package/browser/query-builder/UpdateQueryBuilder.js.map +1 -1
  127. package/browser/query-builder/relation-id/RelationIdAttribute.js +4 -4
  128. package/browser/query-builder/relation-id/RelationIdAttribute.js.map +1 -1
  129. package/browser/query-builder/relation-id/RelationIdLoader.js +16 -9
  130. package/browser/query-builder/relation-id/RelationIdLoader.js.map +1 -1
  131. package/browser/query-runner/BaseQueryRunner.d.ts +44 -21
  132. package/browser/query-runner/BaseQueryRunner.js +61 -21
  133. package/browser/query-runner/BaseQueryRunner.js.map +1 -1
  134. package/browser/query-runner/QueryRunner.d.ts +11 -2
  135. package/browser/query-runner/QueryRunner.js.map +1 -1
  136. package/browser/repository/BaseEntity.d.ts +2 -1
  137. package/browser/repository/BaseEntity.js.map +1 -1
  138. package/browser/repository/Repository.d.ts +1 -1
  139. package/browser/repository/Repository.js.map +1 -1
  140. package/browser/subscriber/Broadcaster.d.ts +4 -4
  141. package/browser/subscriber/Broadcaster.js.map +1 -1
  142. package/browser/subscriber/event/QueryEvent.d.ts +2 -1
  143. package/browser/subscriber/event/QueryEvent.js.map +1 -1
  144. package/browser/util/DirectoryExportedClassesLoader.js +1 -1
  145. package/browser/util/DirectoryExportedClassesLoader.js.map +1 -1
  146. package/browser/util/ImportUtils.js +1 -1
  147. package/browser/util/ImportUtils.js.map +1 -1
  148. package/browser/util/OrmUtils.js +1 -1
  149. package/browser/util/OrmUtils.js.map +1 -1
  150. package/browser/util/PathUtils.js +1 -1
  151. package/browser/util/PathUtils.js.map +1 -1
  152. package/browser/util/RandomGenerator.d.ts +1 -10
  153. package/browser/util/RandomGenerator.js +1 -10
  154. package/browser/util/RandomGenerator.js.map +1 -1
  155. package/browser/util/StringUtils.js +9 -9
  156. package/browser/util/StringUtils.js.map +1 -1
  157. package/browser/util/escapeRegExp.js +1 -1
  158. package/browser/util/escapeRegExp.js.map +1 -1
  159. package/commands/InitCommand.d.ts +0 -3
  160. package/commands/InitCommand.js +4 -31
  161. package/commands/InitCommand.js.map +1 -1
  162. package/commands/MigrationGenerateCommand.js +3 -1
  163. package/commands/MigrationGenerateCommand.js.map +1 -1
  164. package/commands/VersionCommand.js +2 -2
  165. package/commands/VersionCommand.js.map +1 -1
  166. package/connection/ConnectionOptionsReader.js +1 -1
  167. package/connection/ConnectionOptionsReader.js.map +1 -1
  168. package/data-source/DataSource.d.ts +1 -1
  169. package/data-source/DataSource.js.map +1 -1
  170. package/decorator/options/JoinColumnOptions.js.map +1 -1
  171. package/driver/DriverUtils.d.ts +1 -0
  172. package/driver/DriverUtils.js +27 -29
  173. package/driver/DriverUtils.js.map +1 -1
  174. package/driver/aurora-mysql/AuroraMysqlDriver.js +4 -4
  175. package/driver/aurora-mysql/AuroraMysqlDriver.js.map +1 -1
  176. package/driver/aurora-mysql/AuroraMysqlQueryRunner.d.ts +2 -1
  177. package/driver/aurora-mysql/AuroraMysqlQueryRunner.js +9 -6
  178. package/driver/aurora-mysql/AuroraMysqlQueryRunner.js.map +1 -1
  179. package/driver/aurora-postgres/AuroraPostgresQueryRunner.d.ts +2 -1
  180. package/driver/aurora-postgres/AuroraPostgresQueryRunner.js +3 -0
  181. package/driver/aurora-postgres/AuroraPostgresQueryRunner.js.map +1 -1
  182. package/driver/better-sqlite3/BetterSqlite3QueryRunner.d.ts +2 -1
  183. package/driver/better-sqlite3/BetterSqlite3QueryRunner.js +3 -0
  184. package/driver/better-sqlite3/BetterSqlite3QueryRunner.js.map +1 -1
  185. package/driver/capacitor/CapacitorQueryRunner.d.ts +1 -1
  186. package/driver/capacitor/CapacitorQueryRunner.js +5 -1
  187. package/driver/capacitor/CapacitorQueryRunner.js.map +1 -1
  188. package/driver/cockroachdb/CockroachDriver.js +3 -3
  189. package/driver/cockroachdb/CockroachDriver.js.map +1 -1
  190. package/driver/cockroachdb/CockroachQueryRunner.d.ts +2 -1
  191. package/driver/cockroachdb/CockroachQueryRunner.js +55 -50
  192. package/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  193. package/driver/cordova/CordovaQueryRunner.d.ts +1 -1
  194. package/driver/cordova/CordovaQueryRunner.js +2 -0
  195. package/driver/cordova/CordovaQueryRunner.js.map +1 -1
  196. package/driver/expo/ExpoDataSourceOptions.d.ts +5 -3
  197. package/driver/expo/ExpoDataSourceOptions.js.map +1 -1
  198. package/driver/expo/ExpoDriver.d.ts +16 -1
  199. package/driver/expo/ExpoDriver.js +68 -6
  200. package/driver/expo/ExpoDriver.js.map +1 -1
  201. package/driver/expo/ExpoQueryRunner.d.ts +2 -1
  202. package/driver/expo/ExpoQueryRunner.js +3 -0
  203. package/driver/expo/ExpoQueryRunner.js.map +1 -1
  204. package/driver/mysql/MysqlDriver.js +4 -4
  205. package/driver/mysql/MysqlDriver.js.map +1 -1
  206. package/driver/mysql/MysqlQueryRunner.d.ts +2 -1
  207. package/driver/mysql/MysqlQueryRunner.js +78 -82
  208. package/driver/mysql/MysqlQueryRunner.js.map +1 -1
  209. package/driver/nativescript/NativescriptQueryRunner.d.ts +1 -1
  210. package/driver/nativescript/NativescriptQueryRunner.js +3 -0
  211. package/driver/nativescript/NativescriptQueryRunner.js.map +1 -1
  212. package/driver/oracle/OracleDriver.js +2 -2
  213. package/driver/oracle/OracleDriver.js.map +1 -1
  214. package/driver/postgres/PostgresDriver.js +8 -8
  215. package/driver/postgres/PostgresDriver.js.map +1 -1
  216. package/driver/postgres/PostgresQueryRunner.d.ts +2 -1
  217. package/driver/postgres/PostgresQueryRunner.js +12 -8
  218. package/driver/postgres/PostgresQueryRunner.js.map +1 -1
  219. package/driver/react-native/ReactNativeDriver.js +1 -1
  220. package/driver/react-native/ReactNativeDriver.js.map +1 -1
  221. package/driver/react-native/ReactNativeQueryRunner.d.ts +1 -1
  222. package/driver/react-native/ReactNativeQueryRunner.js +3 -0
  223. package/driver/react-native/ReactNativeQueryRunner.js.map +1 -1
  224. package/driver/sap/SapDriver.js +5 -3
  225. package/driver/sap/SapDriver.js.map +1 -1
  226. package/driver/sap/SapQueryRunner.d.ts +2 -1
  227. package/driver/sap/SapQueryRunner.js +171 -16
  228. package/driver/sap/SapQueryRunner.js.map +1 -1
  229. package/driver/spanner/SpannerDriver.d.ts +1 -1
  230. package/driver/spanner/SpannerDriver.js +6 -8
  231. package/driver/spanner/SpannerDriver.js.map +1 -1
  232. package/driver/spanner/SpannerQueryRunner.d.ts +16 -1
  233. package/driver/spanner/SpannerQueryRunner.js +75 -7
  234. package/driver/spanner/SpannerQueryRunner.js.map +1 -1
  235. package/driver/sqlite-abstract/AbstractSqliteDriver.js +1 -1
  236. package/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
  237. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +10 -14
  238. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  239. package/driver/sqljs/SqljsQueryRunner.d.ts +2 -1
  240. package/driver/sqljs/SqljsQueryRunner.js +3 -0
  241. package/driver/sqljs/SqljsQueryRunner.js.map +1 -1
  242. package/driver/sqlserver/SqlServerDriver.js +1 -1
  243. package/driver/sqlserver/SqlServerDriver.js.map +1 -1
  244. package/driver/sqlserver/SqlServerQueryRunner.d.ts +2 -1
  245. package/driver/sqlserver/SqlServerQueryRunner.js +65 -60
  246. package/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  247. package/entity-manager/EntityManager.d.ts +1 -1
  248. package/entity-manager/EntityManager.js.map +1 -1
  249. package/error/NamedPlaceholdersNotSupportedError.d.ts +7 -0
  250. package/error/NamedPlaceholdersNotSupportedError.js +14 -0
  251. package/error/NamedPlaceholdersNotSupportedError.js.map +1 -0
  252. package/error/QueryFailedError.d.ts +3 -2
  253. package/error/QueryFailedError.js.map +1 -1
  254. package/error/index.d.ts +1 -0
  255. package/error/index.js +1 -0
  256. package/error/index.js.map +1 -1
  257. package/index.d.ts +0 -1
  258. package/index.js +1 -3
  259. package/index.js.map +1 -1
  260. package/index.mjs +2 -2
  261. package/logger/AbstractLogger.d.ts +5 -4
  262. package/logger/AbstractLogger.js +3 -1
  263. package/logger/AbstractLogger.js.map +1 -1
  264. package/logger/DebugLogger.js +3 -1
  265. package/logger/DebugLogger.js.map +1 -1
  266. package/logger/Logger.d.ts +5 -4
  267. package/logger/Logger.js.map +1 -1
  268. package/naming-strategy/DefaultNamingStrategy.d.ts +7 -26
  269. package/naming-strategy/DefaultNamingStrategy.js +19 -37
  270. package/naming-strategy/DefaultNamingStrategy.js.map +1 -1
  271. package/naming-strategy/NamingStrategyInterface.d.ts +9 -13
  272. package/naming-strategy/NamingStrategyInterface.js.map +1 -1
  273. package/package.json +6 -6
  274. package/persistence/EntityPersistExecutor.js +20 -8
  275. package/persistence/EntityPersistExecutor.js.map +1 -1
  276. package/persistence/SubjectDatabaseEntityLoader.js +15 -5
  277. package/persistence/SubjectDatabaseEntityLoader.js.map +1 -1
  278. package/persistence/SubjectExecutor.js +50 -30
  279. package/persistence/SubjectExecutor.js.map +1 -1
  280. package/platform/PlatformTools.js +1 -1
  281. package/platform/PlatformTools.js.map +1 -1
  282. package/query-builder/JoinAttribute.js +3 -3
  283. package/query-builder/JoinAttribute.js.map +1 -1
  284. package/query-builder/QueryBuilder.d.ts +0 -1
  285. package/query-builder/QueryBuilder.js +3 -13
  286. package/query-builder/QueryBuilder.js.map +1 -1
  287. package/query-builder/SelectQueryBuilder.js +33 -27
  288. package/query-builder/SelectQueryBuilder.js.map +1 -1
  289. package/query-builder/SoftDeleteQueryBuilder.js +0 -2
  290. package/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
  291. package/query-builder/UpdateQueryBuilder.js +0 -2
  292. package/query-builder/UpdateQueryBuilder.js.map +1 -1
  293. package/query-builder/relation-id/RelationIdAttribute.js +4 -4
  294. package/query-builder/relation-id/RelationIdAttribute.js.map +1 -1
  295. package/query-builder/relation-id/RelationIdLoader.js +16 -9
  296. package/query-builder/relation-id/RelationIdLoader.js.map +1 -1
  297. package/query-runner/BaseQueryRunner.d.ts +44 -21
  298. package/query-runner/BaseQueryRunner.js +61 -21
  299. package/query-runner/BaseQueryRunner.js.map +1 -1
  300. package/query-runner/QueryRunner.d.ts +11 -2
  301. package/query-runner/QueryRunner.js.map +1 -1
  302. package/repository/BaseEntity.d.ts +2 -1
  303. package/repository/BaseEntity.js.map +1 -1
  304. package/repository/Repository.d.ts +1 -1
  305. package/repository/Repository.js.map +1 -1
  306. package/subscriber/Broadcaster.d.ts +4 -4
  307. package/subscriber/Broadcaster.js.map +1 -1
  308. package/subscriber/event/QueryEvent.d.ts +2 -1
  309. package/subscriber/event/QueryEvent.js.map +1 -1
  310. package/util/DirectoryExportedClassesLoader.js +1 -1
  311. package/util/DirectoryExportedClassesLoader.js.map +1 -1
  312. package/util/ImportUtils.js +1 -1
  313. package/util/ImportUtils.js.map +1 -1
  314. package/util/OrmUtils.js +1 -1
  315. package/util/OrmUtils.js.map +1 -1
  316. package/util/PathUtils.js +1 -1
  317. package/util/PathUtils.js.map +1 -1
  318. package/util/RandomGenerator.d.ts +1 -10
  319. package/util/RandomGenerator.js +1 -10
  320. package/util/RandomGenerator.js.map +1 -1
  321. package/util/StringUtils.js +9 -9
  322. package/util/StringUtils.js.map +1 -1
  323. package/util/escapeRegExp.js +1 -1
  324. package/util/escapeRegExp.js.map +1 -1
  325. package/browser/naming-strategy/LegacyOracleNamingStrategy.d.ts +0 -21
  326. package/browser/naming-strategy/LegacyOracleNamingStrategy.js +0 -49
  327. package/browser/naming-strategy/LegacyOracleNamingStrategy.js.map +0 -1
  328. package/naming-strategy/LegacyOracleNamingStrategy.d.ts +0 -21
  329. package/naming-strategy/LegacyOracleNamingStrategy.js +0 -49
  330. package/naming-strategy/LegacyOracleNamingStrategy.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"SapDriver.js","sourceRoot":"","sources":["../../../../src/driver/sap/SapDriver.ts"],"names":[],"mappings":"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","sourcesContent":["import { promisify } from \"node:util\"\nimport type { ObjectLiteral } from \"../../common/ObjectLiteral\"\nimport type { DataSource } from \"../../data-source\"\nimport { ConnectionIsNotSetError } from \"../../error/ConnectionIsNotSetError\"\nimport { DriverPackageNotInstalledError } from \"../../error/DriverPackageNotInstalledError\"\nimport { TypeORMError } from \"../../error/TypeORMError\"\nimport type { ColumnMetadata } from \"../../metadata/ColumnMetadata\"\nimport type { EntityMetadata } from \"../../metadata/EntityMetadata\"\nimport { PlatformTools } from \"../../platform/PlatformTools\"\nimport { RdbmsSchemaBuilder } from \"../../schema-builder/RdbmsSchemaBuilder\"\nimport type { Table } from \"../../schema-builder/table/Table\"\nimport type { TableColumn } from \"../../schema-builder/table/TableColumn\"\nimport type { TableForeignKey } from \"../../schema-builder/table/TableForeignKey\"\nimport type { View } from \"../../schema-builder/view/View\"\nimport { ApplyValueTransformers } from \"../../util/ApplyValueTransformers\"\nimport { DateUtils } from \"../../util/DateUtils\"\nimport { InstanceChecker } from \"../../util/InstanceChecker\"\nimport { OrmUtils } from \"../../util/OrmUtils\"\nimport type { Driver } from \"../Driver\"\nimport { DriverUtils } from \"../DriverUtils\"\nimport type { ColumnType } from \"../types/ColumnTypes\"\nimport type { CteCapabilities } from \"../types/CteCapabilities\"\nimport type { DataTypeDefaults } from \"../types/DataTypeDefaults\"\nimport type { MappedColumnTypes } from \"../types/MappedColumnTypes\"\nimport type { ReplicationMode } from \"../types/ReplicationMode\"\nimport type { IsolationLevel } from \"../types/IsolationLevel\"\nimport type { UpsertType } from \"../types/UpsertType\"\nimport type { SapDataSourceOptions } from \"./SapDataSourceOptions\"\nimport { SapQueryRunner } from \"./SapQueryRunner\"\n/**\n * Organizes communication with SAP Hana DBMS.\n *\n * todo: looks like there is no built in support for connection pooling, we need to figure out something\n */\nexport class SapDriver implements Driver {\n // -------------------------------------------------------------------------\n // Static Properties\n // -------------------------------------------------------------------------\n\n /**\n * Transaction isolation levels supported by this driver.\n *\n * @see https://help.sap.com/docs/SAP_HANA_PLATFORM/4fe29514fd584807ac9f2a04f6754767/d91cbe21f56e4b82b3b7e4ff2b35acf8.html\n */\n static readonly supportedIsolationLevels: IsolationLevel[] = [\n \"READ COMMITTED\",\n \"REPEATABLE READ\",\n \"SERIALIZABLE\",\n ]\n\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * DataSource used by the driver.\n */\n dataSource: DataSource\n\n /**\n * Isolation levels supported by this driver.\n */\n supportedIsolationLevels = SapDriver.supportedIsolationLevels\n\n /**\n * DataSource used by the driver.\n *\n * @deprecated since 1.0.0. Use {@link dataSource} instance instead.\n */\n get connection(): DataSource {\n return this.dataSource\n }\n\n /**\n * SAP HANA Client Pool instance.\n */\n client: any\n\n /**\n * SAP HANA Client streaming extension.\n */\n streamClient: any\n\n /**\n * Pool for master database.\n */\n master: any\n\n /**\n * Function handling errors thrown by drivers pool.\n */\n poolErrorHandler: (error: any) => void\n\n // -------------------------------------------------------------------------\n // Public Implemented Properties\n // -------------------------------------------------------------------------\n\n /**\n * DataSource options.\n */\n options: SapDataSourceOptions\n\n /**\n * Version of SAP HANA. Requires a SQL query to the DB, so it is not always set\n */\n version?: string\n\n /**\n * Database name used to perform all write queries.\n */\n database?: string\n\n /**\n * Schema name used to perform all write queries.\n */\n schema?: string\n\n /**\n * Indicates if replication is enabled.\n */\n isReplicated: boolean = false\n\n /**\n * Indicates if tree tables are supported by this driver.\n */\n treeSupport = true\n\n /**\n * Represent transaction support by this driver\n */\n transactionSupport = \"simple\" as const\n\n /**\n * Gets list of supported column data types by a driver.\n *\n * @see https://help.sap.com/docs/SAP_HANA_PLATFORM/4fe29514fd584807ac9f2a04f6754767/20a1569875191014b507cf392724b7eb.html\n * @see https://help.sap.com/docs/hana-cloud-database/sap-hana-cloud-sap-hana-database-sql-reference-guide/data-types\n */\n supportedDataTypes: ColumnType[] = [\n \"alphanum\", // removed in SAP HANA Cloud\n \"array\",\n \"bigint\",\n \"binary\",\n \"blob\",\n \"boolean\",\n \"char\", // not officially supported, in SAP HANA Cloud: alias for \"nchar\"\n \"clob\", // in SAP HANA Cloud: alias for \"nclob\"\n \"date\",\n \"dec\", // typeorm alias for \"decimal\"\n \"decimal\",\n \"double\",\n \"float\", // database alias for \"real\" / \"double\"\n \"half_vector\", // only supported in SAP HANA Cloud, not in SAP HANA 2.0\n \"int\", // typeorm alias for \"integer\"\n \"integer\",\n \"nchar\", // not officially supported\n \"nclob\",\n \"nvarchar\",\n \"real_vector\", // only supported in SAP HANA Cloud, not in SAP HANA 2.0\n \"real\",\n \"seconddate\",\n \"shorttext\", // removed in SAP HANA Cloud\n \"smalldecimal\",\n \"smallint\",\n \"st_geometry\",\n \"st_point\",\n \"text\", // removed in SAP HANA Cloud\n \"time\",\n \"timestamp\",\n \"tinyint\",\n \"varbinary\",\n \"varchar\", // in SAP HANA Cloud: alias for \"nvarchar\"\n ]\n\n /**\n * Returns type of upsert supported by driver if any\n */\n supportedUpsertTypes: UpsertType[] = [\"merge-into\"]\n\n /**\n * Gets list of spatial column data types.\n */\n spatialTypes: ColumnType[] = [\"st_geometry\", \"st_point\"]\n\n /**\n * Gets list of column data types that support length by a driver.\n */\n withLengthColumnTypes: ColumnType[] = [\n \"alphanum\",\n \"binary\",\n \"half_vector\",\n \"nvarchar\",\n \"real_vector\",\n \"shorttext\",\n \"varbinary\",\n \"varchar\",\n ]\n\n /**\n * Gets list of column data types that support precision by a driver.\n */\n withPrecisionColumnTypes: ColumnType[] = [\"decimal\"]\n\n /**\n * Gets list of column data types that support scale by a driver.\n */\n withScaleColumnTypes: ColumnType[] = [\"decimal\", \"timestamp\"]\n\n /**\n * Orm has special columns and we need to know what database column types should be for those types.\n * Column types are driver dependant.\n */\n mappedDataTypes: MappedColumnTypes = {\n createDate: \"timestamp\",\n createDateDefault: \"CURRENT_TIMESTAMP\",\n updateDate: \"timestamp\",\n updateDateDefault: \"CURRENT_TIMESTAMP\",\n deleteDate: \"timestamp\",\n deleteDateNullable: true,\n version: \"integer\",\n treeLevel: \"integer\",\n migrationId: \"integer\",\n migrationName: \"nvarchar\",\n migrationTimestamp: \"bigint\",\n cacheId: \"integer\",\n cacheIdentifier: \"nvarchar\",\n cacheTime: \"bigint\",\n cacheDuration: \"integer\",\n cacheQuery: \"nvarchar(5000)\" as any,\n cacheResult: \"nclob\",\n metadataType: \"nvarchar\",\n metadataDatabase: \"nvarchar\",\n metadataSchema: \"nvarchar\",\n metadataTable: \"nvarchar\",\n metadataName: \"nvarchar\",\n metadataValue: \"nvarchar(5000)\" as any,\n }\n\n /**\n * Default values of length, precision and scale depends on column data type.\n * Used in the cases when length/precision/scale is not specified by user.\n */\n dataTypeDefaults: DataTypeDefaults = {\n binary: { length: 1 },\n char: { length: 1 },\n decimal: { precision: 18, scale: 0 },\n nchar: { length: 1 },\n nvarchar: { length: 255 },\n shorttext: { length: 255 },\n varbinary: { length: 255 },\n varchar: { length: 255 },\n }\n\n /**\n * Max length allowed by SAP HANA for aliases (identifiers).\n *\n * @see https://help.sap.com/docs/hana-cloud-database/sap-hana-cloud-sap-hana-database-sql-reference-guide/system-limitations\n */\n maxAliasLength = 128\n\n cteCapabilities: CteCapabilities = {\n enabled: true,\n }\n\n dummyTableName = `SYS.DUMMY`\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(dataSource: DataSource) {\n this.dataSource = dataSource\n this.options = dataSource.options as SapDataSourceOptions\n this.loadDependencies()\n\n this.database = DriverUtils.buildDriverOptions(this.options).database\n this.schema = DriverUtils.buildDriverOptions(this.options).schema\n }\n\n // -------------------------------------------------------------------------\n // Public Implemented Methods\n // -------------------------------------------------------------------------\n\n /**\n * Performs connection to the database.\n * Based on pooling options, it can either create connection immediately,\n * either create a pool and create connection when needed.\n */\n async connect(): Promise<void> {\n // HANA connection info\n const connectionOptions: any = {\n host: this.options.host,\n port: this.options.port,\n user: this.options.username,\n password: this.options.password,\n database: this.options.database,\n currentSchema: this.options.schema,\n encrypt: this.options.encrypt,\n sslValidateCertificate: this.options.sslValidateCertificate,\n key: this.options.key,\n cert: this.options.cert,\n ca: this.options.ca,\n }\n Object.keys(connectionOptions).forEach((key) => {\n if (connectionOptions[key] === undefined) {\n delete connectionOptions[key]\n }\n })\n Object.assign(connectionOptions, this.options.extra ?? {})\n\n // pool options\n const poolOptions: any = {\n maxConnectedOrPooled:\n this.options.pool?.maxConnectedOrPooled ??\n this.options.poolSize ??\n 10,\n maxPooledIdleTime: this.options.pool?.maxPooledIdleTime ?? 30,\n maxWaitTimeoutIfPoolExhausted:\n this.options.pool?.maxWaitTimeoutIfPoolExhausted ?? 0,\n }\n if (this.options.pool?.pingCheck) {\n poolOptions.pingCheck = this.options.pool.pingCheck\n }\n if (this.options.pool?.poolCapacity) {\n poolOptions.poolCapacity = this.options.pool.poolCapacity\n }\n\n this.poolErrorHandler =\n this.options.pool?.poolErrorHandler ??\n ((error: Error) => {\n this.dataSource.logger.log(\n \"warn\",\n `SAP HANA pool raised an error: ${error}`,\n )\n })\n\n // create the pool\n try {\n this.master = this.client.createPool(connectionOptions, poolOptions)\n } catch (error) {\n this.poolErrorHandler(error)\n throw error\n }\n\n const queryRunner = this.createQueryRunner(\"master\")\n\n const { version, database } = await queryRunner.getDatabaseAndVersion()\n this.version = version\n this.database = database\n\n this.schema ??= await queryRunner.getCurrentSchema()\n\n await queryRunner.release()\n }\n\n /**\n * Makes any action after connection (e.g. create extensions in Postgres driver).\n */\n afterConnect(): Promise<void> {\n return Promise.resolve()\n }\n\n /**\n * Closes connection with the database.\n */\n async disconnect(): Promise<void> {\n const pool = this.master\n if (!pool) {\n throw new ConnectionIsNotSetError(\"sap\")\n }\n\n this.master = undefined\n try {\n await promisify(pool.clear).call(pool)\n } catch (error) {\n this.poolErrorHandler(error)\n throw error\n }\n }\n\n /**\n * Obtains a new database connection to a master server.\n * Used for replication.\n * If replication is not setup then returns default connection's database connection.\n */\n async obtainMasterConnection(): Promise<any> {\n const pool = this.master\n if (!pool) {\n throw new TypeORMError(\"Driver not Connected\")\n }\n\n try {\n return await promisify(pool.getConnection).call(pool)\n } catch (error) {\n this.poolErrorHandler(error)\n throw error\n }\n }\n\n /**\n * Obtains a new database connection to a slave server.\n * Used for replication.\n * If replication is not setup then returns master (default) connection's database connection.\n */\n async obtainSlaveConnection(): Promise<any> {\n return this.obtainMasterConnection()\n }\n\n /**\n * Creates a schema builder used to build and sync a schema.\n */\n createSchemaBuilder() {\n return new RdbmsSchemaBuilder(this.dataSource)\n }\n\n /**\n * Creates a query runner used to execute database queries.\n *\n * @param mode\n */\n createQueryRunner(mode: ReplicationMode) {\n return new SapQueryRunner(this, mode)\n }\n\n /**\n * Replaces parameters in the given sql with special escaping character\n * and an array of parameter names to be passed to a query.\n *\n * @param sql\n * @param parameters\n */\n escapeQueryWithParameters(\n sql: string,\n parameters: ObjectLiteral,\n ): [string, any[]] {\n const escapedParameters: any[] = []\n\n if (!parameters || !Object.keys(parameters).length)\n return [sql, escapedParameters]\n\n sql = sql.replace(\n /:(\\.\\.\\.)?([A-Za-z0-9_.]+)/g,\n (full, isArray: string, key: string): string => {\n if (!parameters.hasOwnProperty(key)) {\n return full\n }\n\n const value: any = parameters[key]\n\n if (isArray) {\n return value\n .map((v: any) => {\n escapedParameters.push(v)\n return this.createParameter(\n key,\n escapedParameters.length - 1,\n )\n })\n .join(\", \")\n }\n\n if (typeof value === \"function\") {\n return value()\n }\n\n escapedParameters.push(value)\n return this.createParameter(key, escapedParameters.length - 1)\n },\n ) // todo: make replace only in value statements, otherwise problems\n return [sql, escapedParameters]\n }\n\n /**\n * Escapes a column name.\n *\n * @param columnName\n */\n escape(columnName: string): string {\n return `\"${columnName.replaceAll('\"', '\"\"')}\"`\n }\n\n /**\n * Build full table name with schema name and table name.\n * E.g. myDB.mySchema.myTable\n *\n * @param tableName\n * @param schema\n */\n buildTableName(tableName: string, schema?: string): string {\n const tablePath = [tableName]\n\n if (schema) {\n tablePath.unshift(schema)\n }\n\n return tablePath.join(\".\")\n }\n\n /**\n * Parse a target table name or other types and return a normalized table definition.\n *\n * @param target\n */\n parseTableName(\n target: EntityMetadata | Table | View | TableForeignKey | string,\n ): { database?: string; schema?: string; tableName: string } {\n const driverDatabase = this.database\n const driverSchema = this.schema\n\n if (InstanceChecker.isTable(target) || InstanceChecker.isView(target)) {\n const parsed = this.parseTableName(target.name)\n\n return {\n database: target.database ?? parsed.database ?? driverDatabase,\n schema: target.schema ?? parsed.schema ?? driverSchema,\n tableName: parsed.tableName,\n }\n }\n\n if (InstanceChecker.isTableForeignKey(target)) {\n const parsed = this.parseTableName(target.referencedTableName)\n\n return {\n database:\n target.referencedDatabase ??\n parsed.database ??\n driverDatabase,\n schema:\n target.referencedSchema ?? parsed.schema ?? driverSchema,\n tableName: parsed.tableName,\n }\n }\n\n if (InstanceChecker.isEntityMetadata(target)) {\n // EntityMetadata tableName is never a path\n\n return {\n database: target.database ?? driverDatabase,\n schema: target.schema ?? driverSchema,\n tableName: target.tableName,\n }\n }\n\n const parts = target.split(\".\")\n\n return {\n database: driverDatabase,\n schema: (parts.length > 1 ? parts[0] : undefined) ?? driverSchema,\n tableName: parts.length > 1 ? parts[1] : parts[0],\n }\n }\n\n /**\n * Prepares given value to a value to be persisted, based on its column type and metadata.\n *\n * @param value\n * @param columnMetadata\n */\n preparePersistentValue(value: any, columnMetadata: ColumnMetadata): any {\n if (columnMetadata.transformer)\n value = ApplyValueTransformers.transformTo(\n columnMetadata.transformer,\n value,\n )\n\n if (value === null || value === undefined) return value\n\n if (columnMetadata.type === \"date\") {\n return DateUtils.mixedDateToDateString(value, {\n utc: columnMetadata.utc,\n })\n } else if (columnMetadata.type === \"time\") {\n return DateUtils.mixedDateToTimeString(value)\n } else if (\n columnMetadata.type === \"timestamp\" ||\n columnMetadata.type === Date\n ) {\n return DateUtils.mixedDateToDatetimeString(value, true)\n } else if (columnMetadata.type === \"seconddate\") {\n return DateUtils.mixedDateToDatetimeString(value, false)\n } else if (columnMetadata.type === \"simple-array\") {\n return DateUtils.simpleArrayToString(value)\n } else if (columnMetadata.type === \"simple-json\") {\n return DateUtils.simpleJsonToString(value)\n } else if (columnMetadata.type === \"simple-enum\") {\n return DateUtils.simpleEnumToString(value)\n } else if (columnMetadata.isArray) {\n return () => `ARRAY(${value.map((it: any) => `'${it}'`)})`\n }\n\n return value\n }\n\n /**\n * Prepares given value to a value to be persisted, based on its column type or metadata.\n *\n * @param value\n * @param columnMetadata\n */\n prepareHydratedValue(value: any, columnMetadata: ColumnMetadata): any {\n if (value === null || value === undefined)\n return columnMetadata.transformer\n ? ApplyValueTransformers.transformFrom(\n columnMetadata.transformer,\n value,\n )\n : value\n\n if (\n columnMetadata.type === \"timestamp\" ||\n columnMetadata.type === \"seconddate\" ||\n columnMetadata.type === Date\n ) {\n value = DateUtils.normalizeHydratedDate(value)\n } else if (columnMetadata.type === \"date\") {\n value = DateUtils.mixedDateToDateString(value, {\n utc: columnMetadata.utc,\n })\n } else if (columnMetadata.type === \"time\") {\n value = DateUtils.mixedTimeToString(value)\n } else if (columnMetadata.type === \"simple-array\") {\n value = DateUtils.stringToSimpleArray(value)\n } else if (columnMetadata.type === \"simple-json\") {\n value = DateUtils.stringToSimpleJson(value)\n } else if (columnMetadata.type === \"simple-enum\") {\n value = DateUtils.stringToSimpleEnum(value, columnMetadata)\n }\n\n if (columnMetadata.transformer)\n value = ApplyValueTransformers.transformFrom(\n columnMetadata.transformer,\n value,\n )\n\n return value\n }\n\n /**\n * Creates a database type from a given column metadata.\n *\n * @param column\n * @param column.type\n * @param column.length\n * @param column.precision\n * @param column.scale\n */\n normalizeType(column: {\n type?: ColumnType\n length?: number | string\n precision?: number | null\n scale?: number\n }): string {\n if (column.type === Number || column.type === \"int\") {\n return \"integer\"\n } else if (column.type === \"dec\") {\n return \"decimal\"\n } else if (column.type === \"float\") {\n const length =\n typeof column.length === \"string\"\n ? parseInt(column.length)\n : column.length\n\n // https://help.sap.com/docs/SAP_HANA_PLATFORM/4fe29514fd584807ac9f2a04f6754767/4ee2f261e9c44003807d08ccc2e249ac.html\n if (length && length < 25) {\n return \"real\"\n }\n\n return \"double\"\n } else if (column.type === String) {\n return \"nvarchar\"\n } else if (column.type === Date) {\n return \"timestamp\"\n } else if (column.type === Boolean) {\n return \"boolean\"\n } else if (\n typeof column.type === \"function\" &&\n column.type.prototype instanceof Uint8Array\n ) {\n return \"blob\"\n } else if (column.type === \"uuid\") {\n return \"nvarchar\"\n } else if (\n column.type === \"simple-array\" ||\n column.type === \"simple-json\"\n ) {\n return \"nclob\"\n } else if (column.type === \"simple-enum\") {\n return \"nvarchar\"\n } else if (column.type === \"vector\") {\n return \"real_vector\"\n } else if (column.type === \"halfvec\") {\n return \"half_vector\"\n }\n\n if (DriverUtils.isReleaseVersionOrGreater(this, \"4.0\")) {\n // SAP HANA Cloud deprecated / removed these data types\n if (\n column.type === \"varchar\" ||\n column.type === \"alphanum\" ||\n column.type === \"shorttext\"\n ) {\n return \"nvarchar\"\n } else if (column.type === \"text\" || column.type === \"clob\") {\n return \"nclob\"\n } else if (column.type === \"char\") {\n return \"nchar\"\n }\n } else {\n if (\n column.type === \"real_vector\" ||\n column.type === \"half_vector\"\n ) {\n return \"varbinary\"\n }\n }\n\n return (column.type as string) || \"\"\n }\n\n /**\n * Normalizes \"default\" value of the column.\n *\n * @param columnMetadata\n */\n normalizeDefault(columnMetadata: ColumnMetadata): string | undefined {\n const defaultValue = columnMetadata.default\n\n if (typeof defaultValue === \"number\") {\n return `${defaultValue}`\n }\n\n if (typeof defaultValue === \"boolean\") {\n return defaultValue ? \"true\" : \"false\"\n }\n\n if (typeof defaultValue === \"function\") {\n return defaultValue()\n }\n\n if (typeof defaultValue === \"string\") {\n return `'${defaultValue}'`\n }\n\n if (defaultValue === null || defaultValue === undefined) {\n return undefined\n }\n\n return `${defaultValue}`\n }\n\n /**\n * Normalizes \"isUnique\" value of the column.\n *\n * @param column\n */\n normalizeIsUnique(column: ColumnMetadata): boolean {\n return column.entityMetadata.indices.some(\n (idx) =>\n idx.isUnique &&\n idx.columns.length === 1 &&\n idx.columns[0] === column,\n )\n }\n\n /**\n * Returns default column lengths, which is required on column creation.\n *\n * @param column\n */\n getColumnLength(column: ColumnMetadata | TableColumn): string {\n if (column.length) return column.length.toString()\n\n if (column.generationStrategy === \"uuid\") return \"36\"\n\n switch (column.type) {\n case \"varchar\":\n case \"nvarchar\":\n case \"shorttext\":\n case String:\n return \"255\"\n case \"alphanum\":\n return \"127\"\n case \"varbinary\":\n return \"255\"\n }\n\n return \"\"\n }\n\n /**\n * Creates column type definition including length, precision and scale\n *\n * @param column\n */\n createFullType(column: TableColumn): string {\n let type = column.type\n\n // used 'getColumnLength()' method, because SqlServer sets `varchar` and `nvarchar` length to 1 by default.\n if (this.getColumnLength(column)) {\n type += `(${this.getColumnLength(column)})`\n } else if (\n column.precision !== null &&\n column.precision !== undefined &&\n column.scale !== null &&\n column.scale !== undefined\n ) {\n type += `(${column.precision},${column.scale})`\n } else if (\n column.precision !== null &&\n column.precision !== undefined\n ) {\n type += `(${column.precision})`\n }\n\n if (column.isArray) type += \" array\"\n\n return type\n }\n\n /**\n * Creates generated map of values generated or returned by database after INSERT query.\n *\n * @param metadata\n * @param insertResult\n */\n createGeneratedMap(metadata: EntityMetadata, insertResult: ObjectLiteral) {\n const generatedMap = metadata.generatedColumns.reduce(\n (map, generatedColumn) => {\n let value: any\n if (\n generatedColumn.generationStrategy === \"increment\" &&\n insertResult\n ) {\n value = insertResult\n // } else if (generatedColumn.generationStrategy === \"uuid\") {\n // console.log(\"getting db value:\", generatedColumn.databaseName);\n // value = generatedColumn.getEntityValue(uuidMap);\n }\n\n return OrmUtils.mergeDeep(\n map,\n generatedColumn.createValueMap(value),\n )\n },\n {} as ObjectLiteral,\n )\n\n return Object.keys(generatedMap).length > 0 ? generatedMap : undefined\n }\n\n /**\n * Differentiate columns of this table and columns from the given column metadatas columns\n * and returns only changed.\n *\n * @param tableColumns\n * @param columnMetadatas\n */\n findChangedColumns(\n tableColumns: TableColumn[],\n columnMetadatas: ColumnMetadata[],\n ): ColumnMetadata[] {\n return columnMetadatas.filter((columnMetadata) => {\n const tableColumn = tableColumns.find(\n (c) => c.name === columnMetadata.databaseName,\n )\n if (!tableColumn) {\n // we don't need new columns, we only need exist and changed\n return false\n }\n\n const normalizedDefault = this.normalizeDefault(columnMetadata)\n\n return (\n tableColumn.name !== columnMetadata.databaseName ||\n tableColumn.type !== this.normalizeType(columnMetadata) ||\n (columnMetadata.length &&\n tableColumn.length !==\n this.getColumnLength(columnMetadata)) ||\n tableColumn.precision !== columnMetadata.precision ||\n tableColumn.scale !== columnMetadata.scale ||\n tableColumn.comment !==\n this.escapeComment(columnMetadata.comment) ||\n (!tableColumn.isGenerated &&\n normalizedDefault !== tableColumn.default) || // we included check for generated here, because generated columns already can have default values\n tableColumn.isPrimary !== columnMetadata.isPrimary ||\n tableColumn.isNullable !== columnMetadata.isNullable ||\n tableColumn.isUnique !==\n this.normalizeIsUnique(columnMetadata) ||\n (columnMetadata.generationStrategy !== \"uuid\" &&\n tableColumn.isGenerated !== columnMetadata.isGenerated)\n )\n })\n }\n\n /**\n * Returns true if driver supports RETURNING / OUTPUT statement.\n */\n isReturningSqlSupported(): boolean {\n return false\n }\n\n /**\n * Returns true if driver supports uuid values generation on its own.\n */\n isUUIDGenerationSupported(): boolean {\n return false\n }\n\n /**\n * Returns true if driver supports fulltext indices.\n */\n isFullTextColumnTypeSupported(): boolean {\n return !DriverUtils.isReleaseVersionOrGreater(this, \"4.0\")\n }\n\n /**\n * Creates an escaped parameter.\n *\n * @param parameterName\n * @param index\n */\n createParameter(parameterName: string, index: number): string {\n return \"?\"\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * If driver dependency is not given explicitly, then try to load it via \"require\".\n */\n protected loadDependencies(): void {\n const client = this.options.driver\n if (client) {\n this.client = client\n\n return\n }\n\n try {\n this.client = PlatformTools.load(\"@sap/hana-client\")\n this.streamClient = PlatformTools.load(\n \"@sap/hana-client/extension/Stream\",\n )\n } catch {\n // todo: better error for browser env\n throw new DriverPackageNotInstalledError(\n \"SAP Hana\",\n \"@sap/hana-client\",\n )\n }\n }\n\n /**\n * Escapes a given comment.\n *\n * @param comment\n */\n protected escapeComment(comment?: string) {\n if (!comment) return comment\n\n comment = comment.replace(/\\u0000/g, \"\") // Null bytes aren't allowed in comments\n\n return comment\n }\n}\n"]}
1
+ {"version":3,"file":"SapDriver.js","sourceRoot":"","sources":["../../../../src/driver/sap/SapDriver.ts"],"names":[],"mappings":"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","sourcesContent":["import { promisify } from \"node:util\"\nimport type { ObjectLiteral } from \"../../common/ObjectLiteral\"\nimport type { DataSource } from \"../../data-source\"\nimport { ConnectionIsNotSetError } from \"../../error/ConnectionIsNotSetError\"\nimport { DriverPackageNotInstalledError } from \"../../error/DriverPackageNotInstalledError\"\nimport { TypeORMError } from \"../../error/TypeORMError\"\nimport type { ColumnMetadata } from \"../../metadata/ColumnMetadata\"\nimport type { EntityMetadata } from \"../../metadata/EntityMetadata\"\nimport { PlatformTools } from \"../../platform/PlatformTools\"\nimport { RdbmsSchemaBuilder } from \"../../schema-builder/RdbmsSchemaBuilder\"\nimport type { Table } from \"../../schema-builder/table/Table\"\nimport type { TableColumn } from \"../../schema-builder/table/TableColumn\"\nimport type { TableForeignKey } from \"../../schema-builder/table/TableForeignKey\"\nimport type { View } from \"../../schema-builder/view/View\"\nimport { ApplyValueTransformers } from \"../../util/ApplyValueTransformers\"\nimport { DateUtils } from \"../../util/DateUtils\"\nimport { InstanceChecker } from \"../../util/InstanceChecker\"\nimport { OrmUtils } from \"../../util/OrmUtils\"\nimport type { Driver } from \"../Driver\"\nimport { DriverUtils } from \"../DriverUtils\"\nimport type { ColumnType } from \"../types/ColumnTypes\"\nimport type { CteCapabilities } from \"../types/CteCapabilities\"\nimport type { DataTypeDefaults } from \"../types/DataTypeDefaults\"\nimport type { MappedColumnTypes } from \"../types/MappedColumnTypes\"\nimport type { ReplicationMode } from \"../types/ReplicationMode\"\nimport type { IsolationLevel } from \"../types/IsolationLevel\"\nimport type { UpsertType } from \"../types/UpsertType\"\nimport type { SapDataSourceOptions } from \"./SapDataSourceOptions\"\nimport { SapQueryRunner } from \"./SapQueryRunner\"\n/**\n * Organizes communication with SAP Hana DBMS.\n *\n * todo: looks like there is no built in support for connection pooling, we need to figure out something\n */\nexport class SapDriver implements Driver {\n // -------------------------------------------------------------------------\n // Static Properties\n // -------------------------------------------------------------------------\n\n /**\n * Transaction isolation levels supported by this driver.\n *\n * @see https://help.sap.com/docs/SAP_HANA_PLATFORM/4fe29514fd584807ac9f2a04f6754767/d91cbe21f56e4b82b3b7e4ff2b35acf8.html\n */\n static readonly supportedIsolationLevels: IsolationLevel[] = [\n \"READ COMMITTED\",\n \"REPEATABLE READ\",\n \"SERIALIZABLE\",\n ]\n\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * DataSource used by the driver.\n */\n dataSource: DataSource\n\n /**\n * Isolation levels supported by this driver.\n */\n supportedIsolationLevels = SapDriver.supportedIsolationLevels\n\n /**\n * DataSource used by the driver.\n *\n * @deprecated since 1.0.0. Use {@link dataSource} instance instead.\n */\n get connection(): DataSource {\n return this.dataSource\n }\n\n /**\n * SAP HANA Client Pool instance.\n */\n client: any\n\n /**\n * SAP HANA Client streaming extension.\n */\n streamClient: any\n\n /**\n * Pool for master database.\n */\n master: any\n\n /**\n * Function handling errors thrown by drivers pool.\n */\n poolErrorHandler: (error: any) => void\n\n // -------------------------------------------------------------------------\n // Public Implemented Properties\n // -------------------------------------------------------------------------\n\n /**\n * DataSource options.\n */\n options: SapDataSourceOptions\n\n /**\n * Version of SAP HANA. Requires a SQL query to the DB, so it is not always set\n */\n version?: string\n\n /**\n * Database name used to perform all write queries.\n */\n database?: string\n\n /**\n * Schema name used to perform all write queries.\n */\n schema?: string\n\n /**\n * Indicates if replication is enabled.\n */\n isReplicated: boolean = false\n\n /**\n * Indicates if tree tables are supported by this driver.\n */\n treeSupport = true\n\n /**\n * Represent transaction support by this driver\n */\n transactionSupport = \"simple\" as const\n\n /**\n * Gets list of supported column data types by a driver.\n *\n * @see https://help.sap.com/docs/SAP_HANA_PLATFORM/4fe29514fd584807ac9f2a04f6754767/20a1569875191014b507cf392724b7eb.html\n * @see https://help.sap.com/docs/hana-cloud-database/sap-hana-cloud-sap-hana-database-sql-reference-guide/data-types\n */\n supportedDataTypes: ColumnType[] = [\n \"alphanum\", // removed in SAP HANA Cloud\n \"array\",\n \"bigint\",\n \"binary\",\n \"blob\",\n \"boolean\",\n \"char\", // not officially supported, in SAP HANA Cloud: alias for \"nchar\"\n \"clob\", // in SAP HANA Cloud: alias for \"nclob\"\n \"date\",\n \"dec\", // typeorm alias for \"decimal\"\n \"decimal\",\n \"double\",\n \"float\", // database alias for \"real\" / \"double\"\n \"half_vector\", // only supported in SAP HANA Cloud, not in SAP HANA 2.0\n \"int\", // typeorm alias for \"integer\"\n \"integer\",\n \"nchar\", // not officially supported\n \"nclob\",\n \"nvarchar\",\n \"real_vector\", // only supported in SAP HANA Cloud, not in SAP HANA 2.0\n \"real\",\n \"seconddate\",\n \"shorttext\", // removed in SAP HANA Cloud\n \"smalldecimal\",\n \"smallint\",\n \"st_geometry\",\n \"st_point\",\n \"text\", // removed in SAP HANA Cloud\n \"time\",\n \"timestamp\",\n \"tinyint\",\n \"varbinary\",\n \"varchar\", // in SAP HANA Cloud: alias for \"nvarchar\"\n ]\n\n /**\n * Returns type of upsert supported by driver if any\n */\n supportedUpsertTypes: UpsertType[] = [\"merge-into\"]\n\n /**\n * Gets list of spatial column data types.\n */\n spatialTypes: ColumnType[] = [\"st_geometry\", \"st_point\"]\n\n /**\n * Gets list of column data types that support length by a driver.\n */\n withLengthColumnTypes: ColumnType[] = [\n \"alphanum\",\n \"binary\",\n \"half_vector\",\n \"nvarchar\",\n \"real_vector\",\n \"shorttext\",\n \"varbinary\",\n \"varchar\",\n ]\n\n /**\n * Gets list of column data types that support precision by a driver.\n */\n withPrecisionColumnTypes: ColumnType[] = [\"decimal\"]\n\n /**\n * Gets list of column data types that support scale by a driver.\n */\n withScaleColumnTypes: ColumnType[] = [\"decimal\", \"timestamp\"]\n\n /**\n * Orm has special columns and we need to know what database column types should be for those types.\n * Column types are driver dependant.\n */\n mappedDataTypes: MappedColumnTypes = {\n createDate: \"timestamp\",\n createDateDefault: \"CURRENT_TIMESTAMP\",\n updateDate: \"timestamp\",\n updateDateDefault: \"CURRENT_TIMESTAMP\",\n deleteDate: \"timestamp\",\n deleteDateNullable: true,\n version: \"integer\",\n treeLevel: \"integer\",\n migrationId: \"integer\",\n migrationName: \"nvarchar\",\n migrationTimestamp: \"bigint\",\n cacheId: \"integer\",\n cacheIdentifier: \"nvarchar\",\n cacheTime: \"bigint\",\n cacheDuration: \"integer\",\n cacheQuery: \"nvarchar(5000)\" as any,\n cacheResult: \"nclob\",\n metadataType: \"nvarchar\",\n metadataDatabase: \"nvarchar\",\n metadataSchema: \"nvarchar\",\n metadataTable: \"nvarchar\",\n metadataName: \"nvarchar\",\n metadataValue: \"nvarchar(5000)\" as any,\n }\n\n /**\n * Default values of length, precision and scale depends on column data type.\n * Used in the cases when length/precision/scale is not specified by user.\n */\n dataTypeDefaults: DataTypeDefaults = {\n binary: { length: 1 },\n char: { length: 1 },\n decimal: { precision: 18, scale: 0 },\n nchar: { length: 1 },\n nvarchar: { length: 255 },\n shorttext: { length: 255 },\n varbinary: { length: 255 },\n varchar: { length: 255 },\n }\n\n /**\n * Max length allowed by SAP HANA for aliases (identifiers).\n *\n * @see https://help.sap.com/docs/hana-cloud-database/sap-hana-cloud-sap-hana-database-sql-reference-guide/system-limitations\n */\n maxAliasLength = 128\n\n cteCapabilities: CteCapabilities = {\n enabled: true,\n }\n\n dummyTableName = `SYS.DUMMY`\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(dataSource: DataSource) {\n this.dataSource = dataSource\n this.options = dataSource.options as SapDataSourceOptions\n this.loadDependencies()\n\n this.database = DriverUtils.buildDriverOptions(this.options).database\n this.schema = DriverUtils.buildDriverOptions(this.options).schema\n }\n\n // -------------------------------------------------------------------------\n // Public Implemented Methods\n // -------------------------------------------------------------------------\n\n /**\n * Performs connection to the database.\n * Based on pooling options, it can either create connection immediately,\n * either create a pool and create connection when needed.\n */\n async connect(): Promise<void> {\n // HANA connection info\n const connectionOptions: any = {\n host: this.options.host,\n port: this.options.port,\n user: this.options.username,\n password: this.options.password,\n database: this.options.database,\n currentSchema: this.options.schema,\n encrypt: this.options.encrypt,\n sslValidateCertificate: this.options.sslValidateCertificate,\n key: this.options.key,\n cert: this.options.cert,\n ca: this.options.ca,\n }\n Object.keys(connectionOptions).forEach((key) => {\n if (connectionOptions[key] === undefined) {\n delete connectionOptions[key]\n }\n })\n Object.assign(connectionOptions, this.options.extra ?? {})\n\n // pool options\n const poolOptions: any = {\n maxConnectedOrPooled:\n this.options.pool?.maxConnectedOrPooled ??\n this.options.poolSize ??\n 10,\n maxPooledIdleTime: this.options.pool?.maxPooledIdleTime ?? 30,\n maxWaitTimeoutIfPoolExhausted:\n this.options.pool?.maxWaitTimeoutIfPoolExhausted ?? 0,\n }\n if (this.options.pool?.pingCheck) {\n poolOptions.pingCheck = this.options.pool.pingCheck\n }\n if (this.options.pool?.poolCapacity) {\n poolOptions.poolCapacity = this.options.pool.poolCapacity\n }\n\n this.poolErrorHandler =\n this.options.pool?.poolErrorHandler ??\n ((error: Error) => {\n this.dataSource.logger.log(\n \"warn\",\n `SAP HANA pool raised an error: ${error}`,\n )\n })\n\n // create the pool\n try {\n this.master = this.client.createPool(connectionOptions, poolOptions)\n } catch (error) {\n this.poolErrorHandler(error)\n throw error\n }\n\n const queryRunner = this.createQueryRunner(\"master\")\n\n const { version, database } = await queryRunner.getDatabaseAndVersion()\n this.version = version\n this.database = database\n\n this.schema ??= await queryRunner.getCurrentSchema()\n\n await queryRunner.release()\n }\n\n /**\n * Makes any action after connection (e.g. create extensions in Postgres driver).\n */\n afterConnect(): Promise<void> {\n return Promise.resolve()\n }\n\n /**\n * Closes connection with the database.\n */\n async disconnect(): Promise<void> {\n const pool = this.master\n if (!pool) {\n throw new ConnectionIsNotSetError(\"sap\")\n }\n\n this.master = undefined\n try {\n await promisify(pool.clear).call(pool)\n } catch (error) {\n this.poolErrorHandler(error)\n throw error\n }\n }\n\n /**\n * Obtains a new database connection to a master server.\n * Used for replication.\n * If replication is not setup then returns default connection's database connection.\n */\n async obtainMasterConnection(): Promise<any> {\n const pool = this.master\n if (!pool) {\n throw new TypeORMError(\"Driver not Connected\")\n }\n\n try {\n return await promisify(pool.getConnection).call(pool)\n } catch (error) {\n this.poolErrorHandler(error)\n throw error\n }\n }\n\n /**\n * Obtains a new database connection to a slave server.\n * Used for replication.\n * If replication is not setup then returns master (default) connection's database connection.\n */\n async obtainSlaveConnection(): Promise<any> {\n return this.obtainMasterConnection()\n }\n\n /**\n * Creates a schema builder used to build and sync a schema.\n */\n createSchemaBuilder() {\n return new RdbmsSchemaBuilder(this.dataSource)\n }\n\n /**\n * Creates a query runner used to execute database queries.\n *\n * @param mode\n */\n createQueryRunner(mode: ReplicationMode) {\n return new SapQueryRunner(this, mode)\n }\n\n /**\n * Replaces parameters in the given sql with special escaping character\n * and an array of parameter names to be passed to a query.\n *\n * @param sql\n * @param parameters\n */\n escapeQueryWithParameters(\n sql: string,\n parameters: ObjectLiteral,\n ): [string, any[]] {\n const escapedParameters: any[] = []\n\n if (!parameters || !Object.keys(parameters).length)\n return [sql, escapedParameters]\n\n sql = sql.replaceAll(\n /:(\\.\\.\\.)?([A-Za-z0-9_.]+)/g,\n (full, isArray: string, key: string): string => {\n if (!parameters.hasOwnProperty(key)) {\n return full\n }\n\n const value: any = parameters[key]\n\n if (isArray) {\n return value\n .map((v: any) => {\n escapedParameters.push(v)\n return this.createParameter(\n key,\n escapedParameters.length - 1,\n )\n })\n .join(\", \")\n }\n\n if (typeof value === \"function\") {\n return value()\n }\n\n escapedParameters.push(value)\n return this.createParameter(key, escapedParameters.length - 1)\n },\n ) // todo: make replace only in value statements, otherwise problems\n return [sql, escapedParameters]\n }\n\n /**\n * Escapes a column name.\n *\n * @param columnName\n */\n escape(columnName: string): string {\n return `\"${columnName.replaceAll('\"', '\"\"')}\"`\n }\n\n /**\n * Build full table name with schema name and table name.\n * E.g. myDB.mySchema.myTable\n *\n * @param tableName\n * @param schema\n */\n buildTableName(tableName: string, schema?: string): string {\n const tablePath = [tableName]\n\n if (schema) {\n tablePath.unshift(schema)\n }\n\n return tablePath.join(\".\")\n }\n\n /**\n * Parse a target table name or other types and return a normalized table definition.\n *\n * @param target\n */\n parseTableName(\n target: EntityMetadata | Table | View | TableForeignKey | string,\n ): { database?: string; schema?: string; tableName: string } {\n const driverDatabase = this.database\n const driverSchema = this.schema\n\n if (InstanceChecker.isTable(target) || InstanceChecker.isView(target)) {\n const parsed = this.parseTableName(target.name)\n\n return {\n database: target.database ?? parsed.database ?? driverDatabase,\n schema: target.schema ?? parsed.schema ?? driverSchema,\n tableName: parsed.tableName,\n }\n }\n\n if (InstanceChecker.isTableForeignKey(target)) {\n const parsed = this.parseTableName(target.referencedTableName)\n\n return {\n database:\n target.referencedDatabase ??\n parsed.database ??\n driverDatabase,\n schema:\n target.referencedSchema ?? parsed.schema ?? driverSchema,\n tableName: parsed.tableName,\n }\n }\n\n if (InstanceChecker.isEntityMetadata(target)) {\n // EntityMetadata tableName is never a path\n\n return {\n database: target.database ?? driverDatabase,\n schema: target.schema ?? driverSchema,\n tableName: target.tableName,\n }\n }\n\n const parts = target.split(\".\")\n\n return {\n database: driverDatabase,\n schema: (parts.length > 1 ? parts[0] : undefined) ?? driverSchema,\n tableName: parts.length > 1 ? parts[1] : parts[0],\n }\n }\n\n /**\n * Prepares given value to a value to be persisted, based on its column type and metadata.\n *\n * @param value\n * @param columnMetadata\n */\n preparePersistentValue(value: any, columnMetadata: ColumnMetadata): any {\n if (columnMetadata.transformer)\n value = ApplyValueTransformers.transformTo(\n columnMetadata.transformer,\n value,\n )\n\n if (value === null || value === undefined) return value\n\n if (columnMetadata.type === \"date\") {\n return DateUtils.mixedDateToDateString(value, {\n utc: columnMetadata.utc,\n })\n } else if (columnMetadata.type === \"time\") {\n return DateUtils.mixedDateToTimeString(value)\n } else if (\n columnMetadata.type === \"timestamp\" ||\n columnMetadata.type === Date\n ) {\n return DateUtils.mixedDateToDatetimeString(value, true)\n } else if (columnMetadata.type === \"seconddate\") {\n return DateUtils.mixedDateToDatetimeString(value, false)\n } else if (columnMetadata.type === \"simple-array\") {\n return DateUtils.simpleArrayToString(value)\n } else if (columnMetadata.type === \"simple-json\") {\n return DateUtils.simpleJsonToString(value)\n } else if (columnMetadata.type === \"simple-enum\") {\n return DateUtils.simpleEnumToString(value)\n } else if (columnMetadata.isArray) {\n return () => `ARRAY(${value.map((it: any) => `'${it}'`)})`\n }\n\n return value\n }\n\n /**\n * Prepares given value to a value to be persisted, based on its column type or metadata.\n *\n * @param value\n * @param columnMetadata\n */\n prepareHydratedValue(value: any, columnMetadata: ColumnMetadata): any {\n if (value === null || value === undefined)\n return columnMetadata.transformer\n ? ApplyValueTransformers.transformFrom(\n columnMetadata.transformer,\n value,\n )\n : value\n\n if (\n columnMetadata.type === \"timestamp\" ||\n columnMetadata.type === \"seconddate\" ||\n columnMetadata.type === Date\n ) {\n value = DateUtils.normalizeHydratedDate(value)\n } else if (columnMetadata.type === \"date\") {\n value = DateUtils.mixedDateToDateString(value, {\n utc: columnMetadata.utc,\n })\n } else if (columnMetadata.type === \"time\") {\n value = DateUtils.mixedTimeToString(value)\n } else if (columnMetadata.type === \"simple-array\") {\n value = DateUtils.stringToSimpleArray(value)\n } else if (columnMetadata.type === \"simple-json\") {\n value = DateUtils.stringToSimpleJson(value)\n } else if (columnMetadata.type === \"simple-enum\") {\n value = DateUtils.stringToSimpleEnum(value, columnMetadata)\n }\n\n if (columnMetadata.transformer)\n value = ApplyValueTransformers.transformFrom(\n columnMetadata.transformer,\n value,\n )\n\n return value\n }\n\n /**\n * Creates a database type from a given column metadata.\n *\n * @param column\n * @param column.type\n * @param column.length\n * @param column.precision\n * @param column.scale\n */\n normalizeType(column: {\n type?: ColumnType\n length?: number | string\n precision?: number | null\n scale?: number\n }): string {\n if (column.type === Number || column.type === \"int\") {\n return \"integer\"\n } else if (column.type === \"dec\") {\n return \"decimal\"\n } else if (column.type === \"float\") {\n const length =\n typeof column.length === \"string\"\n ? parseInt(column.length)\n : column.length\n\n // https://help.sap.com/docs/SAP_HANA_PLATFORM/4fe29514fd584807ac9f2a04f6754767/4ee2f261e9c44003807d08ccc2e249ac.html\n if (length && length < 25) {\n return \"real\"\n }\n\n return \"double\"\n } else if (column.type === String) {\n return \"nvarchar\"\n } else if (column.type === Date) {\n return \"timestamp\"\n } else if (column.type === Boolean) {\n return \"boolean\"\n } else if (\n typeof column.type === \"function\" &&\n column.type.prototype instanceof Uint8Array\n ) {\n return \"blob\"\n } else if (column.type === \"uuid\") {\n return \"nvarchar\"\n } else if (\n column.type === \"simple-array\" ||\n column.type === \"simple-json\"\n ) {\n return \"nclob\"\n } else if (column.type === \"simple-enum\") {\n return \"nvarchar\"\n } else if (column.type === \"vector\") {\n return \"real_vector\"\n } else if (column.type === \"halfvec\") {\n return \"half_vector\"\n }\n\n if (DriverUtils.isReleaseVersionOrGreater(this, \"4.0\")) {\n // SAP HANA Cloud deprecated / removed these data types\n if (\n column.type === \"varchar\" ||\n column.type === \"alphanum\" ||\n column.type === \"shorttext\"\n ) {\n return \"nvarchar\"\n } else if (column.type === \"text\" || column.type === \"clob\") {\n return \"nclob\"\n } else if (column.type === \"char\") {\n return \"nchar\"\n }\n } else {\n if (\n column.type === \"real_vector\" ||\n column.type === \"half_vector\"\n ) {\n return \"varbinary\"\n }\n }\n\n return (column.type as string) || \"\"\n }\n\n /**\n * Normalizes \"default\" value of the column.\n *\n * @param columnMetadata\n */\n normalizeDefault(columnMetadata: ColumnMetadata): string | undefined {\n const defaultValue = columnMetadata.default\n\n if (typeof defaultValue === \"number\") {\n return `${defaultValue}`\n }\n\n if (typeof defaultValue === \"boolean\") {\n return defaultValue ? \"true\" : \"false\"\n }\n\n if (typeof defaultValue === \"function\") {\n return defaultValue()\n }\n\n if (typeof defaultValue === \"string\") {\n return `'${defaultValue}'`\n }\n\n if (defaultValue === null || defaultValue === undefined) {\n return undefined\n }\n\n return `${defaultValue}`\n }\n\n /**\n * Normalizes \"isUnique\" value of the column.\n *\n * @param column\n */\n normalizeIsUnique(column: ColumnMetadata): boolean {\n return column.entityMetadata.indices.some(\n (idx) =>\n idx.isUnique &&\n idx.columns.length === 1 &&\n idx.columns[0] === column,\n )\n }\n\n /**\n * Returns default column lengths, which is required on column creation.\n *\n * @param column\n */\n getColumnLength(column: ColumnMetadata | TableColumn): string {\n if (column.length) return column.length.toString()\n\n if (column.generationStrategy === \"uuid\") return \"36\"\n\n switch (column.type) {\n case \"varchar\":\n case \"nvarchar\":\n case \"shorttext\":\n case String:\n return \"255\"\n case \"alphanum\":\n return \"127\"\n case \"varbinary\":\n return \"255\"\n }\n\n return \"\"\n }\n\n /**\n * Creates column type definition including length, precision and scale\n *\n * @param column\n */\n createFullType(column: TableColumn): string {\n let type = column.type\n\n // used 'getColumnLength()' method, because SqlServer sets `varchar` and `nvarchar` length to 1 by default.\n if (this.getColumnLength(column)) {\n type += `(${this.getColumnLength(column)})`\n } else if (\n column.precision !== null &&\n column.precision !== undefined &&\n column.scale !== null &&\n column.scale !== undefined\n ) {\n type += `(${column.precision},${column.scale})`\n } else if (\n column.precision !== null &&\n column.precision !== undefined\n ) {\n type += `(${column.precision})`\n }\n\n if (column.isArray) type += \" array\"\n\n return type\n }\n\n /**\n * Creates generated map of values generated or returned by database after INSERT query.\n *\n * @param metadata\n * @param insertResult\n */\n createGeneratedMap(metadata: EntityMetadata, insertResult: ObjectLiteral) {\n const generatedMap = metadata.generatedColumns.reduce(\n (map, generatedColumn) => {\n let value: any\n if (\n generatedColumn.generationStrategy === \"increment\" &&\n insertResult\n ) {\n value = insertResult\n // } else if (generatedColumn.generationStrategy === \"uuid\") {\n // console.log(\"getting db value:\", generatedColumn.databaseName);\n // value = generatedColumn.getEntityValue(uuidMap);\n }\n\n return OrmUtils.mergeDeep(\n map,\n generatedColumn.createValueMap(value),\n )\n },\n {} as ObjectLiteral,\n )\n\n return Object.keys(generatedMap).length > 0 ? generatedMap : undefined\n }\n\n /**\n * Differentiate columns of this table and columns from the given column metadatas columns\n * and returns only changed.\n *\n * @param tableColumns\n * @param columnMetadatas\n */\n findChangedColumns(\n tableColumns: TableColumn[],\n columnMetadatas: ColumnMetadata[],\n ): ColumnMetadata[] {\n return columnMetadatas.filter((columnMetadata) => {\n const tableColumn = tableColumns.find(\n (c) => c.name === columnMetadata.databaseName,\n )\n if (!tableColumn) {\n // we don't need new columns, we only need exist and changed\n return false\n }\n\n const normalizedDefault = this.normalizeDefault(columnMetadata)\n\n return (\n tableColumn.name !== columnMetadata.databaseName ||\n tableColumn.type !== this.normalizeType(columnMetadata) ||\n (columnMetadata.length &&\n tableColumn.length !==\n this.getColumnLength(columnMetadata)) ||\n tableColumn.precision !== columnMetadata.precision ||\n tableColumn.scale !== columnMetadata.scale ||\n tableColumn.comment !==\n this.escapeComment(columnMetadata.comment) ||\n (!tableColumn.isGenerated &&\n normalizedDefault !== tableColumn.default) || // we included check for generated here, because generated columns already can have default values\n tableColumn.isPrimary !== columnMetadata.isPrimary ||\n tableColumn.isNullable !== columnMetadata.isNullable ||\n tableColumn.isUnique !==\n this.normalizeIsUnique(columnMetadata) ||\n (columnMetadata.generationStrategy !== \"uuid\" &&\n tableColumn.isGenerated !== columnMetadata.isGenerated) ||\n (tableColumn.asExpression ?? \"\").trim() !==\n (columnMetadata.asExpression ?? \"\").trim()\n )\n })\n }\n\n /**\n * Returns true if driver supports RETURNING / OUTPUT statement.\n */\n isReturningSqlSupported(): boolean {\n return false\n }\n\n /**\n * Returns true if driver supports uuid values generation on its own.\n */\n isUUIDGenerationSupported(): boolean {\n return false\n }\n\n /**\n * Returns true if driver supports fulltext indices.\n */\n isFullTextColumnTypeSupported(): boolean {\n return !DriverUtils.isReleaseVersionOrGreater(this, \"4.0\")\n }\n\n /**\n * Creates an escaped parameter.\n *\n * @param parameterName\n * @param index\n */\n createParameter(parameterName: string, index: number): string {\n return \"?\"\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * If driver dependency is not given explicitly, then try to load it via \"require\".\n */\n protected loadDependencies(): void {\n const client = this.options.driver\n if (client) {\n this.client = client\n\n return\n }\n\n try {\n this.client = PlatformTools.load(\"@sap/hana-client\")\n this.streamClient = PlatformTools.load(\n \"@sap/hana-client/extension/Stream\",\n )\n } catch {\n // todo: better error for browser env\n throw new DriverPackageNotInstalledError(\n \"SAP Hana\",\n \"@sap/hana-client\",\n )\n }\n }\n\n /**\n * Escapes a given comment.\n *\n * @param comment\n */\n protected escapeComment(comment?: string) {\n if (!comment) return comment\n\n comment = comment.replaceAll(\"\\u0000\", \"\") // Null bytes aren't allowed in comments\n\n return comment\n }\n}\n"]}
@@ -1,3 +1,4 @@
1
+ import type { ObjectLiteral } from "../../common/ObjectLiteral";
1
2
  import type { ReadStream } from "../../platform/PlatformTools";
2
3
  import { BaseQueryRunner } from "../../query-runner/BaseQueryRunner";
3
4
  import type { QueryRunner } from "../../query-runner/QueryRunner";
@@ -70,7 +71,7 @@ export declare class SapQueryRunner extends BaseQueryRunner implements QueryRunn
70
71
  * @param parameters
71
72
  * @param useStructuredResult
72
73
  */
73
- query(query: string, parameters?: any[], useStructuredResult?: boolean): Promise<any>;
74
+ query(query: string, parameters?: any[] | ObjectLiteral, useStructuredResult?: boolean): Promise<any>;
74
75
  /**
75
76
  * Returns raw data stream.
76
77
  *
@@ -23,6 +23,7 @@ const OrmUtils_1 = require("../../util/OrmUtils");
23
23
  const Query_1 = require("../Query");
24
24
  const validate_isolation_level_1 = require("../validate-isolation-level");
25
25
  const MetadataTableType_1 = require("../types/MetadataTableType");
26
+ const NamedPlaceholdersNotSupportedError_1 = require("../../error/NamedPlaceholdersNotSupportedError");
26
27
  /**
27
28
  * Runs queries on a single SQL Server database connection.
28
29
  */
@@ -152,6 +153,8 @@ class SapQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
152
153
  async query(query, parameters, useStructuredResult = false) {
153
154
  if (this.isReleased)
154
155
  throw new QueryRunnerAlreadyReleasedError_1.QueryRunnerAlreadyReleasedError();
156
+ if (parameters && !Array.isArray(parameters))
157
+ throw new NamedPlaceholdersNotSupportedError_1.NamedPlaceholdersNotSupportedError();
155
158
  const release = await this.lock.acquire();
156
159
  const databaseConnection = await this.connect();
157
160
  let statement;
@@ -458,6 +461,29 @@ class SapQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
458
461
  downQueries.push(this.dropIndexSql(table, index));
459
462
  });
460
463
  }
464
+ // if table has generated column, we must add the expression to the metadata table
465
+ const generatedColumns = table.columns.filter((column) => column.asExpression);
466
+ if (generatedColumns.length > 0) {
467
+ const parsedTableName = this.driver.parseTableName(table);
468
+ parsedTableName.schema ??= await this.getCurrentSchema();
469
+ for (const column of generatedColumns) {
470
+ const insertQuery = this.insertTypeormMetadataSql({
471
+ schema: parsedTableName.schema,
472
+ table: parsedTableName.tableName,
473
+ type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
474
+ name: column.name,
475
+ value: column.asExpression,
476
+ });
477
+ const deleteQuery = this.deleteTypeormMetadataSql({
478
+ schema: parsedTableName.schema,
479
+ table: parsedTableName.tableName,
480
+ type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
481
+ name: column.name,
482
+ });
483
+ upQueries.push(insertQuery);
484
+ downQueries.push(deleteQuery);
485
+ }
486
+ }
461
487
  await this.executeQueries(upQueries, downQueries);
462
488
  }
463
489
  /**
@@ -493,6 +519,29 @@ class SapQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
493
519
  // createTable does not need separate method to create foreign keys, because it create fk's in the same query with table creation.
494
520
  if (dropForeignKeys)
495
521
  table.foreignKeys.forEach((foreignKey) => upQueries.push(this.dropForeignKeySql(table, foreignKey)));
522
+ // if table has column with generated type, we must add the expression to the metadata table
523
+ const generatedColumns = table.columns.filter((column) => column.asExpression);
524
+ if (generatedColumns.length > 0) {
525
+ const parsedTableName = this.driver.parseTableName(table);
526
+ parsedTableName.schema ??= await this.getCurrentSchema();
527
+ for (const column of generatedColumns) {
528
+ const deleteQuery = this.deleteTypeormMetadataSql({
529
+ schema: parsedTableName.schema,
530
+ table: parsedTableName.tableName,
531
+ type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
532
+ name: column.name,
533
+ });
534
+ const insertQuery = this.insertTypeormMetadataSql({
535
+ schema: parsedTableName.schema,
536
+ table: parsedTableName.tableName,
537
+ type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
538
+ name: column.name,
539
+ value: column.asExpression,
540
+ });
541
+ upQueries.push(deleteQuery);
542
+ downQueries.push(insertQuery);
543
+ }
544
+ }
496
545
  upQueries.push(this.dropTableSql(table));
497
546
  downQueries.push(this.createTableSql(table, createForeignKeys));
498
547
  await this.executeQueries(upQueries, downQueries);
@@ -556,6 +605,24 @@ class SapQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
556
605
  // rename table
557
606
  upQueries.push(new Query_1.Query(`RENAME TABLE ${this.escapePath(oldTable)} TO ${this.escapePath(newTable)}`));
558
607
  downQueries.push(new Query_1.Query(`RENAME TABLE ${this.escapePath(newTable)} TO ${this.escapePath(oldTable)}`));
608
+ const hasGeneratedColumns = oldTable.columns.some((col) => col.asExpression);
609
+ if (hasGeneratedColumns) {
610
+ const schema = schemaName ?? (await this.getCurrentSchema());
611
+ const updateQuery = this.updateTypeormMetadataSql({
612
+ schema: schema,
613
+ table: oldTableName,
614
+ type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
615
+ valueToSet: { table: newTableName },
616
+ });
617
+ const revertUpdateQuery = this.updateTypeormMetadataSql({
618
+ schema: schema,
619
+ table: newTableName,
620
+ type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
621
+ valueToSet: { table: oldTableName },
622
+ });
623
+ upQueries.push(updateQuery);
624
+ downQueries.push(revertUpdateQuery);
625
+ }
559
626
  // drop old FK's. Foreign keys must be dropped before the primary keys are dropped
560
627
  newTable.foreignKeys.forEach((foreignKey) => {
561
628
  upQueries.push(this.dropForeignKeySql(newTable, foreignKey));
@@ -725,6 +792,23 @@ class SapQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
725
792
  upQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT "${pkName}" PRIMARY KEY (${columnNames})`));
726
793
  downQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT "${pkName}"`));
727
794
  }
795
+ if (column.asExpression) {
796
+ const insertQuery = this.insertTypeormMetadataSql({
797
+ schema: parsedTableName.schema,
798
+ table: parsedTableName.tableName,
799
+ type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
800
+ name: column.name,
801
+ value: column.asExpression,
802
+ });
803
+ const deleteQuery = this.deleteTypeormMetadataSql({
804
+ schema: parsedTableName.schema,
805
+ table: parsedTableName.tableName,
806
+ type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
807
+ name: column.name,
808
+ });
809
+ upQueries.push(insertQuery);
810
+ downQueries.push(deleteQuery);
811
+ }
728
812
  // create column index
729
813
  const columnIndex = clonedTable.indices.find((index) => index.columnNames.length === 1 &&
730
814
  index.columnNames[0] === column.name);
@@ -811,7 +895,9 @@ class SapQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
811
895
  if ((newColumn.isGenerated !== oldColumn.isGenerated &&
812
896
  newColumn.generationStrategy !== "uuid") ||
813
897
  newColumn.type !== oldColumn.type ||
814
- newColumn.length !== oldColumn.length) {
898
+ newColumn.length !== oldColumn.length ||
899
+ (newColumn.asExpression ?? "").trim() !==
900
+ (oldColumn.asExpression ?? "").trim()) {
815
901
  // SQL Server does not support changing of IDENTITY column, so we must drop column and recreate it again.
816
902
  // Also, we recreate column if column type changed
817
903
  await this.dropColumn(table, oldColumn);
@@ -844,6 +930,26 @@ class SapQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
844
930
  upQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(clonedTable)} ADD CONSTRAINT "${newPkName}" PRIMARY KEY (${columnNamesString})`));
845
931
  downQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(clonedTable)} DROP CONSTRAINT "${newPkName}"`));
846
932
  }
933
+ if (oldColumn.asExpression) {
934
+ const parsedTableName = this.driver.parseTableName(table);
935
+ parsedTableName.schema ??= await this.getCurrentSchema();
936
+ const updateQuery = this.updateTypeormMetadataSql({
937
+ schema: parsedTableName.schema,
938
+ table: parsedTableName.tableName,
939
+ type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
940
+ name: oldColumn.name,
941
+ valueToSet: { name: newColumn.name },
942
+ });
943
+ const revertUpdateQuery = this.updateTypeormMetadataSql({
944
+ schema: parsedTableName.schema,
945
+ table: parsedTableName.tableName,
946
+ type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
947
+ name: newColumn.name,
948
+ valueToSet: { name: oldColumn.name },
949
+ });
950
+ upQueries.push(updateQuery);
951
+ downQueries.push(revertUpdateQuery);
952
+ }
847
953
  // rename index constraints
848
954
  clonedTable.findColumnIndices(oldColumn).forEach((index) => {
849
955
  // build new constraint name
@@ -1114,6 +1220,23 @@ class SapQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
1114
1220
  upQueries.push(this.dropCheckConstraintSql(table, columnCheck));
1115
1221
  downQueries.push(this.createCheckConstraintSql(table, columnCheck));
1116
1222
  }
1223
+ if (column.asExpression) {
1224
+ const deleteQuery = this.deleteTypeormMetadataSql({
1225
+ schema: parsedTableName.schema,
1226
+ table: parsedTableName.tableName,
1227
+ type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
1228
+ name: column.name,
1229
+ });
1230
+ const insertQuery = this.insertTypeormMetadataSql({
1231
+ schema: parsedTableName.schema,
1232
+ table: parsedTableName.tableName,
1233
+ type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
1234
+ name: column.name,
1235
+ value: column.asExpression,
1236
+ });
1237
+ upQueries.push(deleteQuery);
1238
+ downQueries.push(insertQuery);
1239
+ }
1117
1240
  upQueries.push(new Query_1.Query(this.dropColumnSql(table, column)));
1118
1241
  downQueries.push(new Query_1.Query(this.addColumnSql(table, column)));
1119
1242
  await this.executeQueries(upQueries, downQueries);
@@ -1663,6 +1786,7 @@ class SapQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
1663
1786
  * @param tableNames
1664
1787
  */
1665
1788
  async loadTables(tableNames) {
1789
+ const hasTable = await this.hasTable(this.getTypeormMetadataTableName());
1666
1790
  if (tableNames?.length === 0) {
1667
1791
  return [];
1668
1792
  }
@@ -1727,7 +1851,7 @@ class SapQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
1727
1851
  this.query(foreignKeysSql),
1728
1852
  ]);
1729
1853
  // create tables for loaded tables
1730
- return dbTables.map((dbTable) => {
1854
+ return await Promise.all(dbTables.map(async (dbTable) => {
1731
1855
  const table = new Table_1.Table();
1732
1856
  const getSchemaFromKey = (dbObject, key) => {
1733
1857
  return dbObject[key] === currentSchema &&
@@ -1742,6 +1866,15 @@ class SapQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
1742
1866
  table.schema = dbTable["SCHEMA_NAME"];
1743
1867
  table.comment = dbTable["COMMENTS"];
1744
1868
  table.name = this.driver.buildTableName(dbTable["TABLE_NAME"], schema);
1869
+ let dbGeneratedColumns = [];
1870
+ if (hasTable) {
1871
+ const generatedColumnSql = this.selectTypeormMetadataSql({
1872
+ schema: dbTable["SCHEMA_NAME"],
1873
+ table: dbTable["TABLE_NAME"],
1874
+ type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
1875
+ });
1876
+ dbGeneratedColumns = await this.query(generatedColumnSql?.query, generatedColumnSql?.parameters);
1877
+ }
1745
1878
  // create columns from the loaded columns
1746
1879
  table.columns = dbColumns
1747
1880
  .filter((dbColumn) => dbColumn["TABLE_NAME"] === dbTable["TABLE_NAME"] &&
@@ -1754,19 +1887,23 @@ class SapQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
1754
1887
  dbConstraint["COLUMN_NAME"] ===
1755
1888
  dbColumn["COLUMN_NAME"]);
1756
1889
  const columnUniqueIndices = dbIndices.filter((dbIndex) => {
1757
- return (dbIndex["TABLE_NAME"] === dbTable["TABLE_NAME"] &&
1758
- dbIndex["SCHEMA_NAME"] === dbTable["SCHEMA_NAME"] &&
1890
+ return (dbIndex["TABLE_NAME"] ===
1891
+ dbTable["TABLE_NAME"] &&
1892
+ dbIndex["SCHEMA_NAME"] ===
1893
+ dbTable["SCHEMA_NAME"] &&
1759
1894
  dbIndex["COLUMN_NAME"] ===
1760
1895
  dbColumn["COLUMN_NAME"] &&
1761
1896
  dbIndex["CONSTRAINT"] &&
1762
- dbIndex["CONSTRAINT"].indexOf("UNIQUE") !== -1);
1897
+ dbIndex["CONSTRAINT"].indexOf("UNIQUE") !==
1898
+ -1);
1763
1899
  });
1764
1900
  const tableMetadata = this.dataSource.entityMetadatas.find((metadata) => this.getTablePath(table) ===
1765
1901
  this.getTablePath(metadata));
1766
1902
  const hasIgnoredIndex = columnUniqueIndices.length > 0 &&
1767
1903
  tableMetadata?.indices.some((index) => {
1768
1904
  return columnUniqueIndices.some((uniqueIndex) => {
1769
- return (index.name === uniqueIndex["INDEX_NAME"] &&
1905
+ return (index.name ===
1906
+ uniqueIndex["INDEX_NAME"] &&
1770
1907
  index.synchronize === false);
1771
1908
  });
1772
1909
  });
@@ -1778,7 +1915,8 @@ class SapQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
1778
1915
  });
1779
1916
  const tableColumn = new TableColumn_1.TableColumn();
1780
1917
  tableColumn.name = dbColumn["COLUMN_NAME"];
1781
- tableColumn.type = dbColumn["DATA_TYPE_NAME"].toLowerCase();
1918
+ tableColumn.type =
1919
+ dbColumn["DATA_TYPE_NAME"].toLowerCase();
1782
1920
  if (tableColumn.type === "dec" ||
1783
1921
  tableColumn.type === "decimal") {
1784
1922
  // If one of these properties was set, and another was not, Postgres sets '0' in to unspecified property
@@ -1817,11 +1955,14 @@ class SapQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
1817
1955
  columnUniqueIndices.length > 0 &&
1818
1956
  !hasIgnoredIndex &&
1819
1957
  !isConstraintComposite;
1820
- tableColumn.isNullable = dbColumn["IS_NULLABLE"] === "TRUE";
1958
+ tableColumn.isNullable =
1959
+ dbColumn["IS_NULLABLE"] === "TRUE";
1821
1960
  tableColumn.isPrimary = !!columnConstraints.find((constraint) => constraint["IS_PRIMARY_KEY"] === "TRUE");
1822
1961
  tableColumn.isGenerated =
1823
- dbColumn["GENERATION_TYPE"] === "ALWAYS AS IDENTITY" ||
1824
- dbColumn["GENERATION_TYPE"] === "BY DEFAULT AS IDENTITY";
1962
+ dbColumn["GENERATION_TYPE"] ===
1963
+ "ALWAYS AS IDENTITY" ||
1964
+ dbColumn["GENERATION_TYPE"] ===
1965
+ "BY DEFAULT AS IDENTITY";
1825
1966
  if (tableColumn.isGenerated)
1826
1967
  tableColumn.generationStrategy = "increment";
1827
1968
  if (dbColumn["DEFAULT_VALUE"] === null ||
@@ -1847,13 +1988,21 @@ class SapQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
1847
1988
  tableColumn.default = dbColumn["DEFAULT_VALUE"];
1848
1989
  }
1849
1990
  }
1991
+ if (dbColumn["GENERATED_ALWAYS_AS"]) {
1992
+ // get generated column expression from typeorm metadata table, as GENERATED_ALWAYS_AS has sanitized expression
1993
+ tableColumn.asExpression =
1994
+ dbGeneratedColumns.find((gc) => gc.name === dbColumn["COLUMN_NAME"])?.value ??
1995
+ dbColumn["GENERATED_ALWAYS_AS"] ??
1996
+ "";
1997
+ }
1850
1998
  if (dbColumn["COMMENTS"]) {
1851
1999
  tableColumn.comment = dbColumn["COMMENTS"];
1852
2000
  }
1853
2001
  return tableColumn;
1854
2002
  });
1855
2003
  // find check constraints of table, group them by constraint name and build TableCheck.
1856
- const tableCheckConstraints = OrmUtils_1.OrmUtils.uniq(dbConstraints.filter((dbConstraint) => dbConstraint["TABLE_NAME"] === dbTable["TABLE_NAME"] &&
2004
+ const tableCheckConstraints = OrmUtils_1.OrmUtils.uniq(dbConstraints.filter((dbConstraint) => dbConstraint["TABLE_NAME"] ===
2005
+ dbTable["TABLE_NAME"] &&
1857
2006
  dbConstraint["SCHEMA_NAME"] ===
1858
2007
  dbTable["SCHEMA_NAME"] &&
1859
2008
  dbConstraint["CHECK_CONDITION"] !== null &&
@@ -1868,8 +2017,10 @@ class SapQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
1868
2017
  });
1869
2018
  });
1870
2019
  // find foreign key constraints of table, group them by constraint name and build TableForeignKey.
1871
- const tableForeignKeyConstraints = OrmUtils_1.OrmUtils.uniq(dbForeignKeys.filter((dbForeignKey) => dbForeignKey["TABLE_NAME"] === dbTable["TABLE_NAME"] &&
1872
- dbForeignKey["SCHEMA_NAME"] === dbTable["SCHEMA_NAME"]), (dbForeignKey) => dbForeignKey["CONSTRAINT_NAME"]);
2020
+ const tableForeignKeyConstraints = OrmUtils_1.OrmUtils.uniq(dbForeignKeys.filter((dbForeignKey) => dbForeignKey["TABLE_NAME"] ===
2021
+ dbTable["TABLE_NAME"] &&
2022
+ dbForeignKey["SCHEMA_NAME"] ===
2023
+ dbTable["SCHEMA_NAME"]), (dbForeignKey) => dbForeignKey["CONSTRAINT_NAME"]);
1873
2024
  table.foreignKeys = tableForeignKeyConstraints.map((dbForeignKey) => {
1874
2025
  const foreignKeys = dbForeignKeys.filter((dbFk) => dbFk["CONSTRAINT_NAME"] ===
1875
2026
  dbForeignKey["CONSTRAINT_NAME"]);
@@ -1897,7 +2048,8 @@ class SapQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
1897
2048
  dbIndex["SCHEMA_NAME"] === dbTable["SCHEMA_NAME"]), (dbIndex) => dbIndex["INDEX_NAME"]);
1898
2049
  table.indices = tableIndexConstraints.map((constraint) => {
1899
2050
  const indices = dbIndices.filter((index) => {
1900
- return (index["SCHEMA_NAME"] === constraint["SCHEMA_NAME"] &&
2051
+ return (index["SCHEMA_NAME"] ===
2052
+ constraint["SCHEMA_NAME"] &&
1901
2053
  index["TABLE_NAME"] === constraint["TABLE_NAME"] &&
1902
2054
  index["INDEX_NAME"] === constraint["INDEX_NAME"]);
1903
2055
  });
@@ -1911,7 +2063,7 @@ class SapQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
1911
2063
  });
1912
2064
  });
1913
2065
  return table;
1914
- });
2066
+ }));
1915
2067
  }
1916
2068
  /**
1917
2069
  * Builds and returns SQL for create table.
@@ -2212,7 +2364,7 @@ class SapQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
2212
2364
  if (!comment || comment.length === 0) {
2213
2365
  return "NULL";
2214
2366
  }
2215
- comment = comment.replace(/'/g, "''").replace(/\u0000/g, ""); // Null bytes aren't allowed in comments
2367
+ comment = comment.replaceAll("'", "''").replaceAll("\u0000", ""); // Null bytes aren't allowed in comments
2216
2368
  return `'${comment}'`;
2217
2369
  }
2218
2370
  /**
@@ -2258,6 +2410,9 @@ class SapQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
2258
2410
  // column is an identity column.
2259
2411
  c += " GENERATED BY DEFAULT AS IDENTITY";
2260
2412
  }
2413
+ if (column.asExpression) {
2414
+ c += ` GENERATED ALWAYS AS (${column.asExpression})`;
2415
+ }
2261
2416
  if (column.comment) {
2262
2417
  c += ` COMMENT ${this.escapeComment(column.comment)}`;
2263
2418
  }