typeorm 0.2.42-dev.f3e2b0e → 0.2.43-dev.a5493fb

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 (530) hide show
  1. package/README.md +38 -0
  2. package/browser/cache/RedisQueryResultCache.js +40 -35
  3. package/browser/cache/RedisQueryResultCache.js.map +1 -1
  4. package/browser/common/DeepPartial.d.ts +3 -3
  5. package/browser/common/DeepPartial.js.map +1 -1
  6. package/browser/common/RelationType.d.ts +14 -0
  7. package/browser/common/RelationType.js +3 -0
  8. package/browser/common/RelationType.js.map +1 -0
  9. package/browser/connection/BaseConnectionOptions.d.ts +5 -0
  10. package/browser/connection/BaseConnectionOptions.js.map +1 -1
  11. package/browser/connection/Connection.d.ts +7 -3
  12. package/browser/connection/Connection.js +80 -55
  13. package/browser/connection/Connection.js.map +1 -1
  14. package/browser/connection/ConnectionMetadataBuilder.d.ts +3 -3
  15. package/browser/connection/ConnectionMetadataBuilder.js +54 -22
  16. package/browser/connection/ConnectionMetadataBuilder.js.map +1 -1
  17. package/browser/connection/ConnectionOptionsReader.js +36 -29
  18. package/browser/connection/ConnectionOptionsReader.js.map +1 -1
  19. package/browser/connection/options-reader/ConnectionOptionsEnvReader.js +1 -0
  20. package/browser/connection/options-reader/ConnectionOptionsEnvReader.js.map +1 -1
  21. package/browser/decorator/Unique.d.ts +5 -4
  22. package/browser/decorator/Unique.js +7 -3
  23. package/browser/decorator/Unique.js.map +1 -1
  24. package/browser/decorator/columns/PrimaryGeneratedColumn.d.ts +2 -1
  25. package/browser/decorator/columns/PrimaryGeneratedColumn.js.map +1 -1
  26. package/browser/decorator/listeners/AfterRecover.d.ts +4 -0
  27. package/browser/decorator/listeners/AfterRecover.js +16 -0
  28. package/browser/decorator/listeners/AfterRecover.js.map +1 -0
  29. package/browser/decorator/listeners/AfterSoftRemove.d.ts +4 -0
  30. package/browser/decorator/listeners/AfterSoftRemove.js +16 -0
  31. package/browser/decorator/listeners/AfterSoftRemove.js.map +1 -0
  32. package/browser/decorator/listeners/BeforeRecover.d.ts +4 -0
  33. package/browser/decorator/listeners/BeforeRecover.js +16 -0
  34. package/browser/decorator/listeners/BeforeRecover.js.map +1 -0
  35. package/browser/decorator/listeners/BeforeSoftRemove.d.ts +4 -0
  36. package/browser/decorator/listeners/BeforeSoftRemove.js +16 -0
  37. package/browser/decorator/listeners/BeforeSoftRemove.js.map +1 -0
  38. package/browser/decorator/options/ColumnOptions.d.ts +4 -0
  39. package/browser/decorator/options/ColumnOptions.js.map +1 -1
  40. package/browser/decorator/options/PrimaryGeneratedColumnIdentityOptions.d.ts +22 -0
  41. package/browser/decorator/options/PrimaryGeneratedColumnIdentityOptions.js +3 -0
  42. package/browser/decorator/options/PrimaryGeneratedColumnIdentityOptions.js.map +1 -0
  43. package/browser/decorator/options/RelationOptions.d.ts +1 -1
  44. package/browser/decorator/options/RelationOptions.js.map +1 -1
  45. package/browser/decorator/options/UniqueOptions.d.ts +10 -0
  46. package/browser/decorator/options/UniqueOptions.js +3 -0
  47. package/browser/decorator/options/UniqueOptions.js.map +1 -0
  48. package/browser/driver/aurora-data-api/AuroraDataApiQueryRunner.js +2 -2
  49. package/browser/driver/aurora-data-api/AuroraDataApiQueryRunner.js.map +1 -1
  50. package/browser/driver/better-sqlite3/BetterSqlite3Driver.d.ts +14 -1
  51. package/browser/driver/better-sqlite3/BetterSqlite3Driver.js +94 -9
  52. package/browser/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -1
  53. package/browser/driver/better-sqlite3/BetterSqlite3QueryRunner.d.ts +10 -0
  54. package/browser/driver/better-sqlite3/BetterSqlite3QueryRunner.js +64 -1
  55. package/browser/driver/better-sqlite3/BetterSqlite3QueryRunner.js.map +1 -1
  56. package/browser/driver/capacitor/CapacitorQueryRunner.d.ts +8 -0
  57. package/browser/driver/capacitor/CapacitorQueryRunner.js +30 -0
  58. package/browser/driver/capacitor/CapacitorQueryRunner.js.map +1 -1
  59. package/browser/driver/cockroachdb/CockroachQueryRunner.js +1 -1
  60. package/browser/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  61. package/browser/driver/cordova/CordovaQueryRunner.d.ts +8 -0
  62. package/browser/driver/cordova/CordovaQueryRunner.js +30 -0
  63. package/browser/driver/cordova/CordovaQueryRunner.js.map +1 -1
  64. package/browser/driver/expo/ExpoQueryRunner.d.ts +8 -0
  65. package/browser/driver/expo/ExpoQueryRunner.js +30 -0
  66. package/browser/driver/expo/ExpoQueryRunner.js.map +1 -1
  67. package/browser/driver/mongodb/MongoConnectionOptions.d.ts +1 -1
  68. package/browser/driver/mongodb/MongoConnectionOptions.js.map +1 -1
  69. package/browser/driver/mongodb/MongoQueryRunner.d.ts +8 -0
  70. package/browser/driver/mongodb/MongoQueryRunner.js +20 -0
  71. package/browser/driver/mongodb/MongoQueryRunner.js.map +1 -1
  72. package/browser/driver/mysql/MysqlQueryRunner.js +1 -1
  73. package/browser/driver/mysql/MysqlQueryRunner.js.map +1 -1
  74. package/browser/driver/nativescript/NativescriptQueryRunner.d.ts +8 -0
  75. package/browser/driver/nativescript/NativescriptQueryRunner.js +30 -0
  76. package/browser/driver/nativescript/NativescriptQueryRunner.js.map +1 -1
  77. package/browser/driver/oracle/OracleQueryRunner.js +1 -1
  78. package/browser/driver/oracle/OracleQueryRunner.js.map +1 -1
  79. package/browser/driver/postgres/PostgresQueryRunner.js +52 -19
  80. package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
  81. package/browser/driver/react-native/ReactNativeQueryRunner.d.ts +8 -0
  82. package/browser/driver/react-native/ReactNativeQueryRunner.js +30 -0
  83. package/browser/driver/react-native/ReactNativeQueryRunner.js.map +1 -1
  84. package/browser/driver/sap/SapQueryRunner.js +1 -1
  85. package/browser/driver/sap/SapQueryRunner.js.map +1 -1
  86. package/browser/driver/sqlite/SqliteDriver.d.ts +13 -0
  87. package/browser/driver/sqlite/SqliteDriver.js +95 -11
  88. package/browser/driver/sqlite/SqliteDriver.js.map +1 -1
  89. package/browser/driver/sqlite/SqliteQueryRunner.d.ts +8 -0
  90. package/browser/driver/sqlite/SqliteQueryRunner.js +30 -0
  91. package/browser/driver/sqlite/SqliteQueryRunner.js.map +1 -1
  92. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.d.ts +13 -0
  93. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js +25 -2
  94. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
  95. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.d.ts +11 -1
  96. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +119 -58
  97. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  98. package/browser/driver/sqljs/SqljsQueryRunner.d.ts +8 -0
  99. package/browser/driver/sqljs/SqljsQueryRunner.js +30 -0
  100. package/browser/driver/sqljs/SqljsQueryRunner.js.map +1 -1
  101. package/browser/entity-manager/EntityManager.d.ts +2 -2
  102. package/browser/entity-manager/EntityManager.js +2 -12
  103. package/browser/entity-manager/EntityManager.js.map +1 -1
  104. package/browser/entity-manager/MongoEntityManager.d.ts +2 -0
  105. package/browser/entity-manager/MongoEntityManager.js +37 -5
  106. package/browser/entity-manager/MongoEntityManager.js.map +1 -1
  107. package/browser/entity-schema/EntitySchemaOptions.d.ts +6 -0
  108. package/browser/entity-schema/EntitySchemaOptions.js.map +1 -1
  109. package/browser/entity-schema/EntitySchemaRelationOptions.d.ts +7 -1
  110. package/browser/entity-schema/EntitySchemaRelationOptions.js.map +1 -1
  111. package/browser/entity-schema/EntitySchemaTransformer.js +4 -1
  112. package/browser/entity-schema/EntitySchemaTransformer.js.map +1 -1
  113. package/browser/entity-schema/EntitySchemaUniqueOptions.d.ts +5 -0
  114. package/browser/entity-schema/EntitySchemaUniqueOptions.js.map +1 -1
  115. package/browser/find-options/FindOneOptions.d.ts +6 -0
  116. package/browser/find-options/FindOneOptions.js.map +1 -1
  117. package/browser/find-options/FindOptionsUtils.js +4 -0
  118. package/browser/find-options/FindOptionsUtils.js.map +1 -1
  119. package/browser/find-options/operator/Like.d.ts +1 -1
  120. package/browser/find-options/operator/Like.js +1 -1
  121. package/browser/find-options/operator/Like.js.map +1 -1
  122. package/browser/find-options/operator/Not.d.ts +1 -1
  123. package/browser/find-options/operator/Not.js +1 -1
  124. package/browser/find-options/operator/Not.js.map +1 -1
  125. package/browser/globals.js +34 -7
  126. package/browser/globals.js.map +1 -1
  127. package/browser/index.d.ts +6 -0
  128. package/browser/index.js +6 -0
  129. package/browser/index.js.map +1 -1
  130. package/browser/metadata/ColumnMetadata.d.ts +4 -0
  131. package/browser/metadata/ColumnMetadata.js +2 -0
  132. package/browser/metadata/ColumnMetadata.js.map +1 -1
  133. package/browser/metadata/EntityMetadata.d.ts +16 -0
  134. package/browser/metadata/EntityMetadata.js +16 -0
  135. package/browser/metadata/EntityMetadata.js.map +1 -1
  136. package/browser/metadata/RelationMetadata.d.ts +1 -1
  137. package/browser/metadata/RelationMetadata.js.map +1 -1
  138. package/browser/metadata/UniqueMetadata.d.ts +5 -0
  139. package/browser/metadata/UniqueMetadata.js +1 -0
  140. package/browser/metadata/UniqueMetadata.js.map +1 -1
  141. package/browser/metadata/types/EventListenerTypes.d.ts +5 -1
  142. package/browser/metadata/types/EventListenerTypes.js +4 -0
  143. package/browser/metadata/types/EventListenerTypes.js.map +1 -1
  144. package/browser/metadata-args/UniqueMetadataArgs.d.ts +5 -0
  145. package/browser/metadata-args/UniqueMetadataArgs.js.map +1 -1
  146. package/browser/metadata-builder/EntityMetadataBuilder.js +4 -0
  147. package/browser/metadata-builder/EntityMetadataBuilder.js.map +1 -1
  148. package/browser/metadata-builder/EntityMetadataValidator.js +2 -1
  149. package/browser/metadata-builder/EntityMetadataValidator.js.map +1 -1
  150. package/browser/migration/MigrationExecutor.js +38 -26
  151. package/browser/migration/MigrationExecutor.js.map +1 -1
  152. package/browser/persistence/SubjectExecutor.d.ts +4 -2
  153. package/browser/persistence/SubjectExecutor.js +105 -13
  154. package/browser/persistence/SubjectExecutor.js.map +1 -1
  155. package/browser/persistence/subject-builder/OneToManySubjectBuilder.js +3 -0
  156. package/browser/persistence/subject-builder/OneToManySubjectBuilder.js.map +1 -1
  157. package/browser/persistence/tree/MaterializedPathSubjectExecutor.js +1 -1
  158. package/browser/persistence/tree/MaterializedPathSubjectExecutor.js.map +1 -1
  159. package/browser/platform/PlatformTools.d.ts +1 -0
  160. package/browser/platform/PlatformTools.js +5 -0
  161. package/browser/platform/PlatformTools.js.map +1 -1
  162. package/browser/query-builder/DeleteQueryBuilder.d.ts +4 -2
  163. package/browser/query-builder/DeleteQueryBuilder.js +4 -2
  164. package/browser/query-builder/DeleteQueryBuilder.js.map +1 -1
  165. package/browser/query-builder/InsertQueryBuilder.d.ts +1 -1
  166. package/browser/query-builder/InsertQueryBuilder.js +12 -3
  167. package/browser/query-builder/InsertQueryBuilder.js.map +1 -1
  168. package/browser/query-builder/NotBrackets.d.ts +7 -0
  169. package/browser/query-builder/NotBrackets.js +16 -0
  170. package/browser/query-builder/NotBrackets.js.map +1 -0
  171. package/browser/query-builder/QueryBuilder.d.ts +3 -2
  172. package/browser/query-builder/QueryBuilder.js +2 -1
  173. package/browser/query-builder/QueryBuilder.js.map +1 -1
  174. package/browser/query-builder/RelationLoader.js +11 -6
  175. package/browser/query-builder/RelationLoader.js.map +1 -1
  176. package/browser/query-builder/RelationQueryBuilder.d.ts +1 -1
  177. package/browser/query-builder/RelationQueryBuilder.js +1 -1
  178. package/browser/query-builder/RelationQueryBuilder.js.map +1 -1
  179. package/browser/query-builder/SelectQueryBuilder.d.ts +10 -1
  180. package/browser/query-builder/SelectQueryBuilder.js +28 -21
  181. package/browser/query-builder/SelectQueryBuilder.js.map +1 -1
  182. package/browser/query-builder/SoftDeleteQueryBuilder.d.ts +1 -1
  183. package/browser/query-builder/SoftDeleteQueryBuilder.js +45 -31
  184. package/browser/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
  185. package/browser/query-builder/UpdateQueryBuilder.d.ts +4 -2
  186. package/browser/query-builder/UpdateQueryBuilder.js +11 -6
  187. package/browser/query-builder/UpdateQueryBuilder.js.map +1 -1
  188. package/browser/query-builder/WhereExpressionBuilder.d.ts +3 -1
  189. package/browser/query-builder/WhereExpressionBuilder.js.map +1 -1
  190. package/browser/query-builder/relation-id/RelationIdLoader.js +9 -9
  191. package/browser/query-builder/relation-id/RelationIdLoader.js.map +1 -1
  192. package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.d.ts +13 -0
  193. package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.js +94 -50
  194. package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.js.map +1 -1
  195. package/browser/query-runner/BaseQueryRunner.d.ts +10 -2
  196. package/browser/query-runner/BaseQueryRunner.js +23 -3
  197. package/browser/query-runner/BaseQueryRunner.js.map +1 -1
  198. package/browser/query-runner/QueryRunner.d.ts +8 -0
  199. package/browser/query-runner/QueryRunner.js.map +1 -1
  200. package/browser/repository/AbstractRepository.d.ts +2 -2
  201. package/browser/repository/AbstractRepository.js +2 -2
  202. package/browser/repository/AbstractRepository.js.map +1 -1
  203. package/browser/repository/BaseEntity.d.ts +1 -1
  204. package/browser/repository/BaseEntity.js +1 -1
  205. package/browser/repository/BaseEntity.js.map +1 -1
  206. package/browser/repository/Repository.d.ts +1 -1
  207. package/browser/repository/Repository.js +1 -1
  208. package/browser/repository/Repository.js.map +1 -1
  209. package/browser/repository/TreeRepository.js +3 -2
  210. package/browser/repository/TreeRepository.js.map +1 -1
  211. package/browser/schema-builder/RdbmsSchemaBuilder.js +37 -31
  212. package/browser/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
  213. package/browser/schema-builder/options/TableColumnOptions.d.ts +4 -0
  214. package/browser/schema-builder/options/TableColumnOptions.js.map +1 -1
  215. package/browser/schema-builder/options/TableUniqueOptions.d.ts +5 -0
  216. package/browser/schema-builder/options/TableUniqueOptions.js.map +1 -1
  217. package/browser/schema-builder/table/TableColumn.d.ts +4 -0
  218. package/browser/schema-builder/table/TableColumn.js +2 -0
  219. package/browser/schema-builder/table/TableColumn.js.map +1 -1
  220. package/browser/schema-builder/table/TableUnique.d.ts +5 -0
  221. package/browser/schema-builder/table/TableUnique.js +5 -2
  222. package/browser/schema-builder/table/TableUnique.js.map +1 -1
  223. package/browser/schema-builder/util/TableUtils.js +1 -0
  224. package/browser/schema-builder/util/TableUtils.js.map +1 -1
  225. package/browser/subscriber/Broadcaster.d.ts +40 -0
  226. package/browser/subscriber/Broadcaster.js +191 -31
  227. package/browser/subscriber/Broadcaster.js.map +1 -1
  228. package/browser/subscriber/EntitySubscriberInterface.d.ts +18 -0
  229. package/browser/subscriber/EntitySubscriberInterface.js.map +1 -1
  230. package/browser/subscriber/event/RecoverEvent.d.ts +6 -0
  231. package/browser/subscriber/event/RecoverEvent.js +3 -0
  232. package/browser/subscriber/event/RecoverEvent.js.map +1 -0
  233. package/browser/subscriber/event/SoftRemoveEvent.d.ts +6 -0
  234. package/browser/subscriber/event/SoftRemoveEvent.js +3 -0
  235. package/browser/subscriber/event/SoftRemoveEvent.js.map +1 -0
  236. package/browser/util/DirectoryExportedClassesLoader.d.ts +1 -1
  237. package/browser/util/DirectoryExportedClassesLoader.js +55 -31
  238. package/browser/util/DirectoryExportedClassesLoader.js.map +1 -1
  239. package/browser/util/ImportUtils.d.ts +1 -0
  240. package/browser/util/ImportUtils.js +90 -0
  241. package/browser/util/ImportUtils.js.map +1 -0
  242. package/browser/util/PathUtils.d.ts +10 -0
  243. package/browser/util/PathUtils.js +28 -0
  244. package/browser/util/PathUtils.js.map +1 -0
  245. package/browser/util/RandomGenerator.d.ts +0 -4
  246. package/browser/util/RandomGenerator.js +0 -9
  247. package/browser/util/RandomGenerator.js.map +1 -1
  248. package/cache/RedisQueryResultCache.js +39 -34
  249. package/cache/RedisQueryResultCache.js.map +1 -1
  250. package/commands/CacheClearCommand.js +3 -3
  251. package/commands/CacheClearCommand.js.map +1 -1
  252. package/commands/CommandUtils.d.ts +4 -0
  253. package/commands/CommandUtils.js +10 -0
  254. package/commands/CommandUtils.js.map +1 -1
  255. package/commands/EntityCreateCommand.js +2 -2
  256. package/commands/EntityCreateCommand.js.map +1 -1
  257. package/commands/InitCommand.d.ts +9 -7
  258. package/commands/InitCommand.js +74 -45
  259. package/commands/InitCommand.js.map +1 -1
  260. package/commands/MigrationCreateCommand.d.ts +2 -0
  261. package/commands/MigrationCreateCommand.js +9 -3
  262. package/commands/MigrationCreateCommand.js.map +1 -1
  263. package/commands/MigrationGenerateCommand.d.ts +2 -0
  264. package/commands/MigrationGenerateCommand.js +9 -3
  265. package/commands/MigrationGenerateCommand.js.map +1 -1
  266. package/commands/MigrationRevertCommand.js +2 -3
  267. package/commands/MigrationRevertCommand.js.map +1 -1
  268. package/commands/MigrationRunCommand.js +2 -3
  269. package/commands/MigrationRunCommand.js.map +1 -1
  270. package/commands/MigrationShowCommand.js +5 -7
  271. package/commands/MigrationShowCommand.js.map +1 -1
  272. package/commands/QueryCommand.d.ts +1 -1
  273. package/commands/QueryCommand.js +2 -3
  274. package/commands/QueryCommand.js.map +1 -1
  275. package/commands/SchemaDropCommand.js +2 -2
  276. package/commands/SchemaDropCommand.js.map +1 -1
  277. package/commands/SchemaLogCommand.js +2 -2
  278. package/commands/SchemaLogCommand.js.map +1 -1
  279. package/commands/SchemaSyncCommand.js +2 -2
  280. package/commands/SchemaSyncCommand.js.map +1 -1
  281. package/commands/SubscriberCreateCommand.js +3 -3
  282. package/commands/SubscriberCreateCommand.js.map +1 -1
  283. package/common/DeepPartial.d.ts +3 -3
  284. package/common/DeepPartial.js.map +1 -1
  285. package/common/RelationType.d.ts +14 -0
  286. package/common/RelationType.js +4 -0
  287. package/common/RelationType.js.map +1 -0
  288. package/connection/BaseConnectionOptions.d.ts +5 -0
  289. package/connection/BaseConnectionOptions.js.map +1 -1
  290. package/connection/Connection.d.ts +7 -3
  291. package/connection/Connection.js +80 -55
  292. package/connection/Connection.js.map +1 -1
  293. package/connection/ConnectionMetadataBuilder.d.ts +3 -3
  294. package/connection/ConnectionMetadataBuilder.js +53 -21
  295. package/connection/ConnectionMetadataBuilder.js.map +1 -1
  296. package/connection/ConnectionOptionsReader.js +35 -28
  297. package/connection/ConnectionOptionsReader.js.map +1 -1
  298. package/connection/options-reader/ConnectionOptionsEnvReader.js +1 -0
  299. package/connection/options-reader/ConnectionOptionsEnvReader.js.map +1 -1
  300. package/decorator/Unique.d.ts +5 -4
  301. package/decorator/Unique.js +7 -3
  302. package/decorator/Unique.js.map +1 -1
  303. package/decorator/columns/PrimaryGeneratedColumn.d.ts +2 -1
  304. package/decorator/columns/PrimaryGeneratedColumn.js.map +1 -1
  305. package/decorator/listeners/AfterRecover.d.ts +4 -0
  306. package/decorator/listeners/AfterRecover.js +20 -0
  307. package/decorator/listeners/AfterRecover.js.map +1 -0
  308. package/decorator/listeners/AfterSoftRemove.d.ts +4 -0
  309. package/decorator/listeners/AfterSoftRemove.js +20 -0
  310. package/decorator/listeners/AfterSoftRemove.js.map +1 -0
  311. package/decorator/listeners/BeforeRecover.d.ts +4 -0
  312. package/decorator/listeners/BeforeRecover.js +20 -0
  313. package/decorator/listeners/BeforeRecover.js.map +1 -0
  314. package/decorator/listeners/BeforeSoftRemove.d.ts +4 -0
  315. package/decorator/listeners/BeforeSoftRemove.js +20 -0
  316. package/decorator/listeners/BeforeSoftRemove.js.map +1 -0
  317. package/decorator/options/ColumnOptions.d.ts +4 -0
  318. package/decorator/options/ColumnOptions.js.map +1 -1
  319. package/decorator/options/PrimaryGeneratedColumnIdentityOptions.d.ts +22 -0
  320. package/decorator/options/PrimaryGeneratedColumnIdentityOptions.js +4 -0
  321. package/decorator/options/PrimaryGeneratedColumnIdentityOptions.js.map +1 -0
  322. package/decorator/options/RelationOptions.d.ts +1 -1
  323. package/decorator/options/RelationOptions.js.map +1 -1
  324. package/decorator/options/UniqueOptions.d.ts +10 -0
  325. package/decorator/options/UniqueOptions.js +4 -0
  326. package/decorator/options/UniqueOptions.js.map +1 -0
  327. package/driver/aurora-data-api/AuroraDataApiQueryRunner.js +2 -2
  328. package/driver/aurora-data-api/AuroraDataApiQueryRunner.js.map +1 -1
  329. package/driver/better-sqlite3/BetterSqlite3Driver.d.ts +14 -1
  330. package/driver/better-sqlite3/BetterSqlite3Driver.js +93 -8
  331. package/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -1
  332. package/driver/better-sqlite3/BetterSqlite3QueryRunner.d.ts +10 -0
  333. package/driver/better-sqlite3/BetterSqlite3QueryRunner.js +63 -0
  334. package/driver/better-sqlite3/BetterSqlite3QueryRunner.js.map +1 -1
  335. package/driver/capacitor/CapacitorQueryRunner.d.ts +8 -0
  336. package/driver/capacitor/CapacitorQueryRunner.js +30 -0
  337. package/driver/capacitor/CapacitorQueryRunner.js.map +1 -1
  338. package/driver/cockroachdb/CockroachQueryRunner.js +1 -1
  339. package/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  340. package/driver/cordova/CordovaQueryRunner.d.ts +8 -0
  341. package/driver/cordova/CordovaQueryRunner.js +30 -0
  342. package/driver/cordova/CordovaQueryRunner.js.map +1 -1
  343. package/driver/expo/ExpoQueryRunner.d.ts +8 -0
  344. package/driver/expo/ExpoQueryRunner.js +30 -0
  345. package/driver/expo/ExpoQueryRunner.js.map +1 -1
  346. package/driver/mongodb/MongoConnectionOptions.d.ts +1 -1
  347. package/driver/mongodb/MongoConnectionOptions.js.map +1 -1
  348. package/driver/mongodb/MongoQueryRunner.d.ts +8 -0
  349. package/driver/mongodb/MongoQueryRunner.js +20 -0
  350. package/driver/mongodb/MongoQueryRunner.js.map +1 -1
  351. package/driver/mysql/MysqlQueryRunner.js +1 -1
  352. package/driver/mysql/MysqlQueryRunner.js.map +1 -1
  353. package/driver/nativescript/NativescriptQueryRunner.d.ts +8 -0
  354. package/driver/nativescript/NativescriptQueryRunner.js +30 -0
  355. package/driver/nativescript/NativescriptQueryRunner.js.map +1 -1
  356. package/driver/oracle/OracleQueryRunner.js +1 -1
  357. package/driver/oracle/OracleQueryRunner.js.map +1 -1
  358. package/driver/postgres/PostgresQueryRunner.js +52 -19
  359. package/driver/postgres/PostgresQueryRunner.js.map +1 -1
  360. package/driver/react-native/ReactNativeQueryRunner.d.ts +8 -0
  361. package/driver/react-native/ReactNativeQueryRunner.js +30 -0
  362. package/driver/react-native/ReactNativeQueryRunner.js.map +1 -1
  363. package/driver/sap/SapQueryRunner.js +1 -1
  364. package/driver/sap/SapQueryRunner.js.map +1 -1
  365. package/driver/sqlite/SqliteDriver.d.ts +13 -0
  366. package/driver/sqlite/SqliteDriver.js +94 -10
  367. package/driver/sqlite/SqliteDriver.js.map +1 -1
  368. package/driver/sqlite/SqliteQueryRunner.d.ts +8 -0
  369. package/driver/sqlite/SqliteQueryRunner.js +30 -0
  370. package/driver/sqlite/SqliteQueryRunner.js.map +1 -1
  371. package/driver/sqlite-abstract/AbstractSqliteDriver.d.ts +13 -0
  372. package/driver/sqlite-abstract/AbstractSqliteDriver.js +25 -2
  373. package/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
  374. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.d.ts +11 -1
  375. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +119 -58
  376. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  377. package/driver/sqljs/SqljsQueryRunner.d.ts +8 -0
  378. package/driver/sqljs/SqljsQueryRunner.js +30 -0
  379. package/driver/sqljs/SqljsQueryRunner.js.map +1 -1
  380. package/entity-manager/EntityManager.d.ts +2 -2
  381. package/entity-manager/EntityManager.js +2 -12
  382. package/entity-manager/EntityManager.js.map +1 -1
  383. package/entity-manager/MongoEntityManager.d.ts +2 -0
  384. package/entity-manager/MongoEntityManager.js +37 -5
  385. package/entity-manager/MongoEntityManager.js.map +1 -1
  386. package/entity-schema/EntitySchemaOptions.d.ts +6 -0
  387. package/entity-schema/EntitySchemaOptions.js.map +1 -1
  388. package/entity-schema/EntitySchemaRelationOptions.d.ts +7 -1
  389. package/entity-schema/EntitySchemaRelationOptions.js.map +1 -1
  390. package/entity-schema/EntitySchemaTransformer.js +4 -1
  391. package/entity-schema/EntitySchemaTransformer.js.map +1 -1
  392. package/entity-schema/EntitySchemaUniqueOptions.d.ts +5 -0
  393. package/entity-schema/EntitySchemaUniqueOptions.js.map +1 -1
  394. package/find-options/FindOneOptions.d.ts +6 -0
  395. package/find-options/FindOneOptions.js.map +1 -1
  396. package/find-options/FindOptionsUtils.js +4 -0
  397. package/find-options/FindOptionsUtils.js.map +1 -1
  398. package/find-options/operator/Like.d.ts +1 -1
  399. package/find-options/operator/Like.js +1 -1
  400. package/find-options/operator/Like.js.map +1 -1
  401. package/find-options/operator/Not.d.ts +1 -1
  402. package/find-options/operator/Not.js +1 -1
  403. package/find-options/operator/Not.js.map +1 -1
  404. package/globals.js +33 -6
  405. package/globals.js.map +1 -1
  406. package/index.d.ts +6 -0
  407. package/index.js +8 -1
  408. package/index.js.map +1 -1
  409. package/index.mjs +360 -0
  410. package/metadata/ColumnMetadata.d.ts +4 -0
  411. package/metadata/ColumnMetadata.js +2 -0
  412. package/metadata/ColumnMetadata.js.map +1 -1
  413. package/metadata/EntityMetadata.d.ts +16 -0
  414. package/metadata/EntityMetadata.js +16 -0
  415. package/metadata/EntityMetadata.js.map +1 -1
  416. package/metadata/RelationMetadata.d.ts +1 -1
  417. package/metadata/RelationMetadata.js.map +1 -1
  418. package/metadata/UniqueMetadata.d.ts +5 -0
  419. package/metadata/UniqueMetadata.js +1 -0
  420. package/metadata/UniqueMetadata.js.map +1 -1
  421. package/metadata/types/EventListenerTypes.d.ts +5 -1
  422. package/metadata/types/EventListenerTypes.js +4 -0
  423. package/metadata/types/EventListenerTypes.js.map +1 -1
  424. package/metadata-args/UniqueMetadataArgs.d.ts +5 -0
  425. package/metadata-args/UniqueMetadataArgs.js.map +1 -1
  426. package/metadata-builder/EntityMetadataBuilder.js +4 -0
  427. package/metadata-builder/EntityMetadataBuilder.js.map +1 -1
  428. package/metadata-builder/EntityMetadataValidator.js +2 -1
  429. package/metadata-builder/EntityMetadataValidator.js.map +1 -1
  430. package/migration/MigrationExecutor.js +38 -26
  431. package/migration/MigrationExecutor.js.map +1 -1
  432. package/package.json +1 -1
  433. package/persistence/SubjectExecutor.d.ts +4 -2
  434. package/persistence/SubjectExecutor.js +105 -13
  435. package/persistence/SubjectExecutor.js.map +1 -1
  436. package/persistence/subject-builder/OneToManySubjectBuilder.js +3 -0
  437. package/persistence/subject-builder/OneToManySubjectBuilder.js.map +1 -1
  438. package/persistence/tree/MaterializedPathSubjectExecutor.js +1 -1
  439. package/persistence/tree/MaterializedPathSubjectExecutor.js.map +1 -1
  440. package/platform/PlatformTools.d.ts +1 -0
  441. package/platform/PlatformTools.js +5 -0
  442. package/platform/PlatformTools.js.map +1 -1
  443. package/query-builder/DeleteQueryBuilder.d.ts +4 -2
  444. package/query-builder/DeleteQueryBuilder.js +4 -2
  445. package/query-builder/DeleteQueryBuilder.js.map +1 -1
  446. package/query-builder/InsertQueryBuilder.d.ts +1 -1
  447. package/query-builder/InsertQueryBuilder.js +12 -3
  448. package/query-builder/InsertQueryBuilder.js.map +1 -1
  449. package/query-builder/NotBrackets.d.ts +7 -0
  450. package/query-builder/NotBrackets.js +19 -0
  451. package/query-builder/NotBrackets.js.map +1 -0
  452. package/query-builder/QueryBuilder.d.ts +3 -2
  453. package/query-builder/QueryBuilder.js +2 -1
  454. package/query-builder/QueryBuilder.js.map +1 -1
  455. package/query-builder/RelationLoader.js +11 -6
  456. package/query-builder/RelationLoader.js.map +1 -1
  457. package/query-builder/RelationQueryBuilder.d.ts +1 -1
  458. package/query-builder/RelationQueryBuilder.js +1 -1
  459. package/query-builder/RelationQueryBuilder.js.map +1 -1
  460. package/query-builder/SelectQueryBuilder.d.ts +10 -1
  461. package/query-builder/SelectQueryBuilder.js +28 -21
  462. package/query-builder/SelectQueryBuilder.js.map +1 -1
  463. package/query-builder/SoftDeleteQueryBuilder.d.ts +1 -1
  464. package/query-builder/SoftDeleteQueryBuilder.js +45 -31
  465. package/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
  466. package/query-builder/UpdateQueryBuilder.d.ts +4 -2
  467. package/query-builder/UpdateQueryBuilder.js +11 -6
  468. package/query-builder/UpdateQueryBuilder.js.map +1 -1
  469. package/query-builder/WhereExpressionBuilder.d.ts +3 -1
  470. package/query-builder/WhereExpressionBuilder.js.map +1 -1
  471. package/query-builder/relation-id/RelationIdLoader.js +9 -9
  472. package/query-builder/relation-id/RelationIdLoader.js.map +1 -1
  473. package/query-builder/transformer/RawSqlResultsToEntityTransformer.d.ts +13 -0
  474. package/query-builder/transformer/RawSqlResultsToEntityTransformer.js +94 -50
  475. package/query-builder/transformer/RawSqlResultsToEntityTransformer.js.map +1 -1
  476. package/query-runner/BaseQueryRunner.d.ts +10 -2
  477. package/query-runner/BaseQueryRunner.js +23 -3
  478. package/query-runner/BaseQueryRunner.js.map +1 -1
  479. package/query-runner/QueryRunner.d.ts +8 -0
  480. package/query-runner/QueryRunner.js.map +1 -1
  481. package/repository/AbstractRepository.d.ts +2 -2
  482. package/repository/AbstractRepository.js +2 -2
  483. package/repository/AbstractRepository.js.map +1 -1
  484. package/repository/BaseEntity.d.ts +1 -1
  485. package/repository/BaseEntity.js +1 -1
  486. package/repository/BaseEntity.js.map +1 -1
  487. package/repository/Repository.d.ts +1 -1
  488. package/repository/Repository.js +1 -1
  489. package/repository/Repository.js.map +1 -1
  490. package/repository/TreeRepository.js +3 -2
  491. package/repository/TreeRepository.js.map +1 -1
  492. package/schema-builder/RdbmsSchemaBuilder.js +37 -31
  493. package/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
  494. package/schema-builder/options/TableColumnOptions.d.ts +4 -0
  495. package/schema-builder/options/TableColumnOptions.js.map +1 -1
  496. package/schema-builder/options/TableUniqueOptions.d.ts +5 -0
  497. package/schema-builder/options/TableUniqueOptions.js.map +1 -1
  498. package/schema-builder/table/TableColumn.d.ts +4 -0
  499. package/schema-builder/table/TableColumn.js +2 -0
  500. package/schema-builder/table/TableColumn.js.map +1 -1
  501. package/schema-builder/table/TableUnique.d.ts +5 -0
  502. package/schema-builder/table/TableUnique.js +5 -2
  503. package/schema-builder/table/TableUnique.js.map +1 -1
  504. package/schema-builder/util/TableUtils.js +1 -0
  505. package/schema-builder/util/TableUtils.js.map +1 -1
  506. package/subscriber/Broadcaster.d.ts +40 -0
  507. package/subscriber/Broadcaster.js +191 -31
  508. package/subscriber/Broadcaster.js.map +1 -1
  509. package/subscriber/EntitySubscriberInterface.d.ts +18 -0
  510. package/subscriber/EntitySubscriberInterface.js.map +1 -1
  511. package/subscriber/event/RecoverEvent.d.ts +6 -0
  512. package/subscriber/event/RecoverEvent.js +4 -0
  513. package/subscriber/event/RecoverEvent.js.map +1 -0
  514. package/subscriber/event/SoftRemoveEvent.d.ts +6 -0
  515. package/subscriber/event/SoftRemoveEvent.js +4 -0
  516. package/subscriber/event/SoftRemoveEvent.js.map +1 -0
  517. package/typeorm-class-transformer-shim.js +20 -0
  518. package/typeorm-model-shim.js +20 -0
  519. package/util/DirectoryExportedClassesLoader.d.ts +1 -1
  520. package/util/DirectoryExportedClassesLoader.js +54 -31
  521. package/util/DirectoryExportedClassesLoader.js.map +1 -1
  522. package/util/ImportUtils.d.ts +1 -0
  523. package/util/ImportUtils.js +94 -0
  524. package/util/ImportUtils.js.map +1 -0
  525. package/util/PathUtils.d.ts +10 -0
  526. package/util/PathUtils.js +34 -0
  527. package/util/PathUtils.js.map +1 -0
  528. package/util/RandomGenerator.d.ts +0 -4
  529. package/util/RandomGenerator.js +0 -9
  530. package/util/RandomGenerator.js.map +1 -1
@@ -31,6 +31,11 @@ export declare class SqliteDriver extends AbstractSqliteDriver {
31
31
  precision?: number | null;
32
32
  scale?: number;
33
33
  }): string;
34
+ afterConnect(): Promise<void>;
35
+ /**
36
+ * For SQLite, the database may be added in the decorator metadata. It will be a filepath to a database file.
37
+ */
38
+ buildTableName(tableName: string, _schema?: string, database?: string): string;
34
39
  /**
35
40
  * Creates connection with the database.
36
41
  */
@@ -43,4 +48,12 @@ export declare class SqliteDriver extends AbstractSqliteDriver {
43
48
  * Auto creates database directory if it does not exist.
44
49
  */
45
50
  protected createDatabaseDirectory(fullPath: string): Promise<void>;
51
+ /**
52
+ * Performs the attaching of the database files. The attachedDatabase should have been populated during calls to #buildTableName
53
+ * during EntityMetadata production (see EntityMetadata#buildTablePath)
54
+ *
55
+ * https://sqlite.org/lang_attach.html
56
+ */
57
+ protected attachDatabases(): Promise<void>;
58
+ protected getMainDatabasePath(): string;
46
59
  }
@@ -9,6 +9,7 @@ var SqliteQueryRunner_1 = require("./SqliteQueryRunner");
9
9
  var DriverOptionNotSetError_1 = require("../../error/DriverOptionNotSetError");
10
10
  var PlatformTools_1 = require("../../platform/PlatformTools");
11
11
  var AbstractSqliteDriver_1 = require("../sqlite-abstract/AbstractSqliteDriver");
12
+ var PathUtils_1 = require("../../util/PathUtils");
12
13
  /**
13
14
  * Organizes communication with sqlite DBMS.
14
15
  */
@@ -60,6 +61,34 @@ var SqliteDriver = /** @class */ (function (_super) {
60
61
  }
61
62
  return _super.prototype.normalizeType.call(this, column);
62
63
  };
64
+ SqliteDriver.prototype.afterConnect = function () {
65
+ return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
66
+ return (0, tslib_1.__generator)(this, function (_a) {
67
+ return [2 /*return*/, this.attachDatabases()];
68
+ });
69
+ });
70
+ };
71
+ /**
72
+ * For SQLite, the database may be added in the decorator metadata. It will be a filepath to a database file.
73
+ */
74
+ SqliteDriver.prototype.buildTableName = function (tableName, _schema, database) {
75
+ if (!database)
76
+ return tableName;
77
+ if (this.getAttachedDatabaseHandleByRelativePath(database))
78
+ return this.getAttachedDatabaseHandleByRelativePath(database) + "." + tableName;
79
+ if (database === this.options.database)
80
+ return tableName;
81
+ // we use the decorated name as supplied when deriving attach handle (ideally without non-portable absolute path)
82
+ var identifierHash = (0, PathUtils_1.filepathToName)(database);
83
+ // decorated name will be assumed relative to main database file when non absolute. Paths supplied as absolute won't be portable
84
+ var absFilepath = (0, PathUtils_1.isAbsolute)(database) ? database : path_1.default.join(this.getMainDatabasePath(), database);
85
+ this.attachedDatabases[database] = {
86
+ attachFilepathAbsolute: absFilepath,
87
+ attachFilepathRelative: database,
88
+ attachHandle: identifierHash,
89
+ };
90
+ return identifierHash + "." + tableName;
91
+ };
63
92
  // -------------------------------------------------------------------------
64
93
  // Protected Methods
65
94
  // -------------------------------------------------------------------------
@@ -94,25 +123,26 @@ var SqliteDriver = /** @class */ (function (_super) {
94
123
  })];
95
124
  case 2:
96
125
  databaseConnection = _a.sent();
97
- if (!this.options.enableWAL) return [3 /*break*/, 4];
98
- return [4 /*yield*/, run("PRAGMA journal_mode = WAL;")];
126
+ if (!this.options.key) return [3 /*break*/, 4];
127
+ return [4 /*yield*/, run("PRAGMA key = " + JSON.stringify(this.options.key) + ";")];
99
128
  case 3:
100
129
  _a.sent();
101
130
  _a.label = 4;
102
- case 4:
131
+ case 4:
132
+ if (!this.options.enableWAL) return [3 /*break*/, 6];
133
+ return [4 /*yield*/, run("PRAGMA journal_mode = WAL;")];
134
+ case 5:
135
+ _a.sent();
136
+ _a.label = 6;
137
+ case 6:
103
138
  // we need to enable foreign keys in sqlite to make sure all foreign key related features
104
139
  // working properly. this also makes onDelete to work with sqlite.
105
140
  return [4 /*yield*/, run("PRAGMA foreign_keys = ON;")];
106
- case 5:
141
+ case 7:
107
142
  // we need to enable foreign keys in sqlite to make sure all foreign key related features
108
143
  // working properly. this also makes onDelete to work with sqlite.
109
144
  _a.sent();
110
- if (!this.options.key) return [3 /*break*/, 7];
111
- return [4 /*yield*/, run("PRAGMA key = " + JSON.stringify(this.options.key) + ";")];
112
- case 6:
113
- _a.sent();
114
- _a.label = 7;
115
- case 7: return [2 /*return*/, databaseConnection];
145
+ return [2 /*return*/, databaseConnection];
116
146
  }
117
147
  });
118
148
  });
@@ -144,6 +174,60 @@ var SqliteDriver = /** @class */ (function (_super) {
144
174
  });
145
175
  });
146
176
  };
177
+ /**
178
+ * Performs the attaching of the database files. The attachedDatabase should have been populated during calls to #buildTableName
179
+ * during EntityMetadata production (see EntityMetadata#buildTablePath)
180
+ *
181
+ * https://sqlite.org/lang_attach.html
182
+ */
183
+ SqliteDriver.prototype.attachDatabases = function () {
184
+ var e_1, _a;
185
+ return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
186
+ var _b, _c, _d, attachHandle, attachFilepathAbsolute, e_1_1;
187
+ return (0, tslib_1.__generator)(this, function (_e) {
188
+ switch (_e.label) {
189
+ case 0:
190
+ _e.trys.push([0, 7, 8, 13]);
191
+ _b = (0, tslib_1.__asyncValues)(Object.values(this.attachedDatabases));
192
+ _e.label = 1;
193
+ case 1: return [4 /*yield*/, _b.next()];
194
+ case 2:
195
+ if (!(_c = _e.sent(), !_c.done)) return [3 /*break*/, 6];
196
+ _d = _c.value, attachHandle = _d.attachHandle, attachFilepathAbsolute = _d.attachFilepathAbsolute;
197
+ return [4 /*yield*/, this.createDatabaseDirectory(attachFilepathAbsolute)];
198
+ case 3:
199
+ _e.sent();
200
+ return [4 /*yield*/, this.connection.query("ATTACH \"" + attachFilepathAbsolute + "\" AS \"" + attachHandle + "\"")];
201
+ case 4:
202
+ _e.sent();
203
+ _e.label = 5;
204
+ case 5: return [3 /*break*/, 1];
205
+ case 6: return [3 /*break*/, 13];
206
+ case 7:
207
+ e_1_1 = _e.sent();
208
+ e_1 = { error: e_1_1 };
209
+ return [3 /*break*/, 13];
210
+ case 8:
211
+ _e.trys.push([8, , 11, 12]);
212
+ if (!(_c && !_c.done && (_a = _b.return))) return [3 /*break*/, 10];
213
+ return [4 /*yield*/, _a.call(_b)];
214
+ case 9:
215
+ _e.sent();
216
+ _e.label = 10;
217
+ case 10: return [3 /*break*/, 12];
218
+ case 11:
219
+ if (e_1) throw e_1.error;
220
+ return [7 /*endfinally*/];
221
+ case 12: return [7 /*endfinally*/];
222
+ case 13: return [2 /*return*/];
223
+ }
224
+ });
225
+ });
226
+ };
227
+ SqliteDriver.prototype.getMainDatabasePath = function () {
228
+ var optionsDb = this.options.database;
229
+ return path_1.default.dirname((0, PathUtils_1.isAbsolute)(optionsDb) ? optionsDb : path_1.default.join(process.cwd(), optionsDb));
230
+ };
147
231
  return SqliteDriver;
148
232
  }(AbstractSqliteDriver_1.AbstractSqliteDriver));
149
233
  exports.SqliteDriver = SqliteDriver;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/driver/sqlite/SqliteDriver.ts"],"names":[],"mappings":"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","file":"SqliteDriver.js","sourcesContent":["import mkdirp from \"mkdirp\";\nimport path from \"path\";\nimport { DriverPackageNotInstalledError } from \"../../error/DriverPackageNotInstalledError\";\nimport { SqliteQueryRunner } from \"./SqliteQueryRunner\";\nimport { DriverOptionNotSetError } from \"../../error/DriverOptionNotSetError\";\nimport { PlatformTools } from \"../../platform/PlatformTools\";\nimport { Connection } from \"../../connection/Connection\";\nimport { SqliteConnectionOptions } from \"./SqliteConnectionOptions\";\nimport { ColumnType } from \"../types/ColumnTypes\";\nimport { QueryRunner } from \"../../query-runner/QueryRunner\";\nimport { AbstractSqliteDriver } from \"../sqlite-abstract/AbstractSqliteDriver\";\nimport {ReplicationMode} from \"../types/ReplicationMode\";\n\n/**\n * Organizes communication with sqlite DBMS.\n */\nexport class SqliteDriver extends AbstractSqliteDriver {\n\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * Connection options.\n */\n options: SqliteConnectionOptions;\n\n /**\n * SQLite underlying library.\n */\n sqlite: any;\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(connection: Connection) {\n super(connection);\n\n this.connection = connection;\n this.options = connection.options as SqliteConnectionOptions;\n this.database = this.options.database;\n\n // validate options to make sure everything is set\n if (!this.options.database)\n throw new DriverOptionNotSetError(\"database\");\n\n // load sqlite package\n this.loadDependencies();\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Closes connection with database.\n */\n async disconnect(): Promise<void> {\n return new Promise<void>((ok, fail) => {\n this.queryRunner = undefined;\n this.databaseConnection.close((err: any) => err ? fail(err) : ok());\n });\n }\n\n /**\n * Creates a query runner used to execute database queries.\n */\n createQueryRunner(mode: ReplicationMode): QueryRunner {\n if (!this.queryRunner)\n this.queryRunner = new SqliteQueryRunner(this);\n\n return this.queryRunner;\n }\n\n normalizeType(column: { type?: ColumnType, length?: number | string, precision?: number | null, scale?: number }): string {\n if ((column.type as any) === Buffer) {\n return \"blob\";\n }\n\n return super.normalizeType(column);\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates connection with the database.\n */\n protected async createDatabaseConnection() {\n await this.createDatabaseDirectory(this.options.database);\n\n const databaseConnection: any = await new Promise((ok, fail) => {\n const connection = new this.sqlite.Database(this.options.database, (err: any) => {\n if (err) return fail(err);\n ok(connection);\n });\n });\n\n // Internal function to run a command on the connection and fail if an error occured.\n function run(line: string): Promise<void> {\n return new Promise((ok, fail) => {\n databaseConnection.run(line, (err: any) => {\n if (err) return fail(err);\n ok();\n });\n });\n }\n\n if (this.options.enableWAL) {\n await run(`PRAGMA journal_mode = WAL;`);\n }\n\n // we need to enable foreign keys in sqlite to make sure all foreign key related features\n // working properly. this also makes onDelete to work with sqlite.\n await run(`PRAGMA foreign_keys = ON;`);\n\n // in the options, if encryption key for SQLCipher is setted.\n if (this.options.key) {\n await run(`PRAGMA key = ${JSON.stringify(this.options.key)};`);\n }\n\n return databaseConnection;\n }\n\n /**\n * If driver dependency is not given explicitly, then try to load it via \"require\".\n */\n protected loadDependencies(): void {\n try {\n const sqlite = this.options.driver || PlatformTools.load(\"sqlite3\");\n this.sqlite = sqlite.verbose();\n\n } catch (e) {\n throw new DriverPackageNotInstalledError(\"SQLite\", \"sqlite3\");\n }\n }\n\n /**\n * Auto creates database directory if it does not exist.\n */\n protected async createDatabaseDirectory(fullPath: string): Promise<void> {\n await mkdirp(path.dirname(fullPath));\n }\n\n}\n"],"sourceRoot":"../.."}
1
+ {"version":3,"sources":["../../src/driver/sqlite/SqliteDriver.ts"],"names":[],"mappings":"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","file":"SqliteDriver.js","sourcesContent":["import mkdirp from \"mkdirp\";\nimport path from \"path\";\nimport { DriverPackageNotInstalledError } from \"../../error/DriverPackageNotInstalledError\";\nimport { SqliteQueryRunner } from \"./SqliteQueryRunner\";\nimport { DriverOptionNotSetError } from \"../../error/DriverOptionNotSetError\";\nimport { PlatformTools } from \"../../platform/PlatformTools\";\nimport { Connection } from \"../../connection/Connection\";\nimport { SqliteConnectionOptions } from \"./SqliteConnectionOptions\";\nimport { ColumnType } from \"../types/ColumnTypes\";\nimport { QueryRunner } from \"../../query-runner/QueryRunner\";\nimport { AbstractSqliteDriver } from \"../sqlite-abstract/AbstractSqliteDriver\";\nimport {ReplicationMode} from \"../types/ReplicationMode\";\nimport {filepathToName, isAbsolute} from \"../../util/PathUtils\";\n\n\n/**\n * Organizes communication with sqlite DBMS.\n */\nexport class SqliteDriver extends AbstractSqliteDriver {\n\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * Connection options.\n */\n options: SqliteConnectionOptions;\n\n /**\n * SQLite underlying library.\n */\n sqlite: any;\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(connection: Connection) {\n super(connection);\n\n this.connection = connection;\n this.options = connection.options as SqliteConnectionOptions;\n this.database = this.options.database;\n\n // validate options to make sure everything is set\n if (!this.options.database)\n throw new DriverOptionNotSetError(\"database\");\n\n // load sqlite package\n this.loadDependencies();\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Closes connection with database.\n */\n async disconnect(): Promise<void> {\n return new Promise<void>((ok, fail) => {\n this.queryRunner = undefined;\n this.databaseConnection.close((err: any) => err ? fail(err) : ok());\n });\n }\n\n /**\n * Creates a query runner used to execute database queries.\n */\n createQueryRunner(mode: ReplicationMode): QueryRunner {\n if (!this.queryRunner)\n this.queryRunner = new SqliteQueryRunner(this);\n\n return this.queryRunner;\n }\n\n normalizeType(column: { type?: ColumnType, length?: number | string, precision?: number | null, scale?: number }): string {\n if ((column.type as any) === Buffer) {\n return \"blob\";\n }\n\n return super.normalizeType(column);\n }\n\n async afterConnect(): Promise<void> {\n return this.attachDatabases();\n }\n\n /**\n * For SQLite, the database may be added in the decorator metadata. It will be a filepath to a database file.\n */\n buildTableName(tableName: string, _schema?: string, database?: string): string {\n\n if (!database) return tableName;\n if (this.getAttachedDatabaseHandleByRelativePath(database)) return `${this.getAttachedDatabaseHandleByRelativePath(database)}.${tableName}`;\n\n if (database === this.options.database) return tableName;\n\n // we use the decorated name as supplied when deriving attach handle (ideally without non-portable absolute path)\n const identifierHash = filepathToName(database);\n // decorated name will be assumed relative to main database file when non absolute. Paths supplied as absolute won't be portable\n const absFilepath = isAbsolute(database) ? database : path.join(this.getMainDatabasePath(), database);\n\n this.attachedDatabases[database] = {\n attachFilepathAbsolute: absFilepath,\n attachFilepathRelative: database,\n attachHandle: identifierHash,\n };\n\n return `${identifierHash}.${tableName}`;\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates connection with the database.\n */\n protected async createDatabaseConnection() {\n await this.createDatabaseDirectory(this.options.database);\n\n const databaseConnection: any = await new Promise((ok, fail) => {\n const connection = new this.sqlite.Database(this.options.database, (err: any) => {\n if (err) return fail(err);\n ok(connection);\n });\n });\n\n // Internal function to run a command on the connection and fail if an error occured.\n function run(line: string): Promise<void> {\n return new Promise((ok, fail) => {\n databaseConnection.run(line, (err: any) => {\n if (err) return fail(err);\n ok();\n });\n });\n }\n // in the options, if encryption key for SQLCipher is setted.\n // Must invoke key pragma before trying to do any other interaction with the database.\n if (this.options.key) {\n await run(`PRAGMA key = ${JSON.stringify(this.options.key)};`);\n }\n\n if (this.options.enableWAL) {\n await run(`PRAGMA journal_mode = WAL;`);\n }\n\n // we need to enable foreign keys in sqlite to make sure all foreign key related features\n // working properly. this also makes onDelete to work with sqlite.\n await run(`PRAGMA foreign_keys = ON;`);\n\n return databaseConnection;\n }\n\n /**\n * If driver dependency is not given explicitly, then try to load it via \"require\".\n */\n protected loadDependencies(): void {\n try {\n const sqlite = this.options.driver || PlatformTools.load(\"sqlite3\");\n this.sqlite = sqlite.verbose();\n\n } catch (e) {\n throw new DriverPackageNotInstalledError(\"SQLite\", \"sqlite3\");\n }\n }\n\n /**\n * Auto creates database directory if it does not exist.\n */\n protected async createDatabaseDirectory(fullPath: string): Promise<void> {\n await mkdirp(path.dirname(fullPath));\n }\n\n /**\n * Performs the attaching of the database files. The attachedDatabase should have been populated during calls to #buildTableName\n * during EntityMetadata production (see EntityMetadata#buildTablePath)\n *\n * https://sqlite.org/lang_attach.html\n */\n protected async attachDatabases() {\n\n // @todo - possibly check number of databases (but unqueriable at runtime sadly) - https://www.sqlite.org/limits.html#max_attached\n for await (const {attachHandle, attachFilepathAbsolute} of Object.values(this.attachedDatabases)) {\n await this.createDatabaseDirectory(attachFilepathAbsolute);\n await this.connection.query(`ATTACH \"${attachFilepathAbsolute}\" AS \"${attachHandle}\"`);\n }\n }\n\n protected getMainDatabasePath(): string {\n const optionsDb = this.options.database;\n return path.dirname(isAbsolute(optionsDb) ? optionsDb : path.join(process.cwd(), optionsDb));\n }\n\n}\n"],"sourceRoot":"../.."}
@@ -12,6 +12,14 @@ export declare class SqliteQueryRunner extends AbstractSqliteQueryRunner {
12
12
  */
13
13
  driver: SqliteDriver;
14
14
  constructor(driver: SqliteDriver);
15
+ /**
16
+ * Called before migrations are run.
17
+ */
18
+ beforeMigration(): Promise<void>;
19
+ /**
20
+ * Called after migrations are run.
21
+ */
22
+ afterMigration(): Promise<void>;
15
23
  /**
16
24
  * Executes a given SQL query.
17
25
  */
@@ -26,6 +26,36 @@ var SqliteQueryRunner = /** @class */ (function (_super) {
26
26
  _this.broadcaster = new Broadcaster_1.Broadcaster(_this);
27
27
  return _this;
28
28
  }
29
+ /**
30
+ * Called before migrations are run.
31
+ */
32
+ SqliteQueryRunner.prototype.beforeMigration = function () {
33
+ return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
34
+ return (0, tslib_1.__generator)(this, function (_a) {
35
+ switch (_a.label) {
36
+ case 0: return [4 /*yield*/, this.query("PRAGMA foreign_keys = OFF")];
37
+ case 1:
38
+ _a.sent();
39
+ return [2 /*return*/];
40
+ }
41
+ });
42
+ });
43
+ };
44
+ /**
45
+ * Called after migrations are run.
46
+ */
47
+ SqliteQueryRunner.prototype.afterMigration = function () {
48
+ return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
49
+ return (0, tslib_1.__generator)(this, function (_a) {
50
+ switch (_a.label) {
51
+ case 0: return [4 /*yield*/, this.query("PRAGMA foreign_keys = ON")];
52
+ case 1:
53
+ _a.sent();
54
+ return [2 /*return*/];
55
+ }
56
+ });
57
+ });
58
+ };
29
59
  /**
30
60
  * Executes a given SQL query.
31
61
  */
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/driver/sqlite/SqliteQueryRunner.ts"],"names":[],"mappings":"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","file":"SqliteQueryRunner.js","sourcesContent":["import {QueryRunnerAlreadyReleasedError} from \"../../error/QueryRunnerAlreadyReleasedError\";\nimport {QueryFailedError} from \"../../error/QueryFailedError\";\nimport {AbstractSqliteQueryRunner} from \"../sqlite-abstract/AbstractSqliteQueryRunner\";\nimport {SqliteConnectionOptions} from \"./SqliteConnectionOptions\";\nimport {SqliteDriver} from \"./SqliteDriver\";\nimport {Broadcaster} from \"../../subscriber/Broadcaster\";\nimport { ConnectionIsNotSetError } from '../../error/ConnectionIsNotSetError';\nimport { QueryResult } from \"../../query-runner/QueryResult\";\n\n/**\n * Runs queries on a single sqlite database connection.\n *\n * Does not support compose primary keys with autoincrement field.\n * todo: need to throw exception for this case.\n */\nexport class SqliteQueryRunner extends AbstractSqliteQueryRunner {\n\n /**\n * Database driver used by connection.\n */\n driver: SqliteDriver;\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(driver: SqliteDriver) {\n super();\n this.driver = driver;\n this.connection = driver.connection;\n this.broadcaster = new Broadcaster(this);\n }\n\n /**\n * Executes a given SQL query.\n */\n query(query: string, parameters?: any[], useStructuredResult = false): Promise<any> {\n if (this.isReleased)\n throw new QueryRunnerAlreadyReleasedError();\n\n const connection = this.driver.connection;\n const options = connection.options as SqliteConnectionOptions;\n const maxQueryExecutionTime = this.driver.options.maxQueryExecutionTime;\n\n if (!connection.isConnected){\n throw new ConnectionIsNotSetError('sqlite')\n }\n\n return new Promise(async (ok, fail) => {\n\n const databaseConnection = await this.connect();\n this.driver.connection.logger.logQuery(query, parameters, this);\n const queryStartTime = +new Date();\n const isInsertQuery = query.startsWith(\"INSERT \");\n const isDeleteQuery = query.startsWith(\"DELETE \");\n const isUpdateQuery = query.startsWith(\"UPDATE \");\n\n const execute = async () => {\n if (isInsertQuery || isDeleteQuery || isUpdateQuery) {\n await databaseConnection.run(query, parameters, handler);\n } else {\n await databaseConnection.all(query, parameters, handler);\n }\n };\n\n const handler = function (err: any, rows: any) {\n if (err && err.toString().indexOf(\"SQLITE_BUSY:\") !== -1) {\n if (typeof options.busyErrorRetry === \"number\" && options.busyErrorRetry > 0) {\n setTimeout(execute, options.busyErrorRetry);\n return;\n }\n }\n\n // log slow queries if maxQueryExecution time is set\n const queryEndTime = +new Date();\n const queryExecutionTime = queryEndTime - queryStartTime;\n if (maxQueryExecutionTime && queryExecutionTime > maxQueryExecutionTime)\n connection.logger.logQuerySlow(queryExecutionTime, query, parameters, this);\n\n if (err) {\n connection.logger.logQueryError(err, query, parameters, this);\n fail(new QueryFailedError(query, parameters, err));\n } else {\n const result = new QueryResult();\n\n if (isInsertQuery) {\n result.raw = this[\"lastID\"];\n } else {\n result.raw = rows;\n }\n\n if (Array.isArray(rows)) {\n\n result.records = rows;\n }\n\n result.affected = this[\"changes\"];\n\n if (useStructuredResult) {\n ok(result);\n } else {\n ok(result.raw);\n }\n }\n };\n\n await execute();\n });\n }\n}\n"],"sourceRoot":"../.."}
1
+ {"version":3,"sources":["../../src/driver/sqlite/SqliteQueryRunner.ts"],"names":[],"mappings":"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","file":"SqliteQueryRunner.js","sourcesContent":["import {QueryRunnerAlreadyReleasedError} from \"../../error/QueryRunnerAlreadyReleasedError\";\nimport {QueryFailedError} from \"../../error/QueryFailedError\";\nimport {AbstractSqliteQueryRunner} from \"../sqlite-abstract/AbstractSqliteQueryRunner\";\nimport {SqliteConnectionOptions} from \"./SqliteConnectionOptions\";\nimport {SqliteDriver} from \"./SqliteDriver\";\nimport {Broadcaster} from \"../../subscriber/Broadcaster\";\nimport { ConnectionIsNotSetError } from '../../error/ConnectionIsNotSetError';\nimport { QueryResult } from \"../../query-runner/QueryResult\";\n\n/**\n * Runs queries on a single sqlite database connection.\n *\n * Does not support compose primary keys with autoincrement field.\n * todo: need to throw exception for this case.\n */\nexport class SqliteQueryRunner extends AbstractSqliteQueryRunner {\n\n /**\n * Database driver used by connection.\n */\n driver: SqliteDriver;\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(driver: SqliteDriver) {\n super();\n this.driver = driver;\n this.connection = driver.connection;\n this.broadcaster = new Broadcaster(this);\n }\n\n /**\n * Called before migrations are run.\n */\n async beforeMigration(): Promise<void> {\n await this.query(`PRAGMA foreign_keys = OFF`);\n }\n\n /**\n * Called after migrations are run.\n */\n async afterMigration(): Promise<void> {\n await this.query(`PRAGMA foreign_keys = ON`);\n }\n\n /**\n * Executes a given SQL query.\n */\n query(query: string, parameters?: any[], useStructuredResult = false): Promise<any> {\n if (this.isReleased)\n throw new QueryRunnerAlreadyReleasedError();\n\n const connection = this.driver.connection;\n const options = connection.options as SqliteConnectionOptions;\n const maxQueryExecutionTime = this.driver.options.maxQueryExecutionTime;\n\n if (!connection.isConnected){\n throw new ConnectionIsNotSetError('sqlite')\n }\n\n return new Promise(async (ok, fail) => {\n\n const databaseConnection = await this.connect();\n this.driver.connection.logger.logQuery(query, parameters, this);\n const queryStartTime = +new Date();\n const isInsertQuery = query.startsWith(\"INSERT \");\n const isDeleteQuery = query.startsWith(\"DELETE \");\n const isUpdateQuery = query.startsWith(\"UPDATE \");\n\n const execute = async () => {\n if (isInsertQuery || isDeleteQuery || isUpdateQuery) {\n await databaseConnection.run(query, parameters, handler);\n } else {\n await databaseConnection.all(query, parameters, handler);\n }\n };\n\n const handler = function (err: any, rows: any) {\n if (err && err.toString().indexOf(\"SQLITE_BUSY:\") !== -1) {\n if (typeof options.busyErrorRetry === \"number\" && options.busyErrorRetry > 0) {\n setTimeout(execute, options.busyErrorRetry);\n return;\n }\n }\n\n // log slow queries if maxQueryExecution time is set\n const queryEndTime = +new Date();\n const queryExecutionTime = queryEndTime - queryStartTime;\n if (maxQueryExecutionTime && queryExecutionTime > maxQueryExecutionTime)\n connection.logger.logQuerySlow(queryExecutionTime, query, parameters, this);\n\n if (err) {\n connection.logger.logQueryError(err, query, parameters, this);\n fail(new QueryFailedError(query, parameters, err));\n } else {\n const result = new QueryResult();\n\n if (isInsertQuery) {\n result.raw = this[\"lastID\"];\n } else {\n result.raw = rows;\n }\n\n if (Array.isArray(rows)) {\n\n result.records = rows;\n }\n\n result.affected = this[\"changes\"];\n\n if (useStructuredResult) {\n ok(result);\n } else {\n ok(result.raw);\n }\n }\n };\n\n await execute();\n });\n }\n}\n"],"sourceRoot":"../.."}
@@ -14,6 +14,11 @@ import { ReplicationMode } from "../types/ReplicationMode";
14
14
  import { Table } from "../../schema-builder/table/Table";
15
15
  import { View } from "../../schema-builder/view/View";
16
16
  import { TableForeignKey } from "../../schema-builder/table/TableForeignKey";
17
+ declare type DatabasesMap = Record<string, {
18
+ attachFilepathAbsolute: string;
19
+ attachFilepathRelative: string;
20
+ attachHandle: string;
21
+ }>;
17
22
  /**
18
23
  * Organizes communication with sqlite DBMS.
19
24
  */
@@ -92,6 +97,10 @@ export declare abstract class AbstractSqliteDriver implements Driver {
92
97
  * for SQLite.
93
98
  */
94
99
  maxAliasLength?: number;
100
+ /**
101
+ * Any attached databases (excepting default 'main')
102
+ */
103
+ attachedDatabases: DatabasesMap;
95
104
  constructor(connection: Connection);
96
105
  /**
97
106
  * Creates a query runner used to execute database queries.
@@ -109,6 +118,9 @@ export declare abstract class AbstractSqliteDriver implements Driver {
109
118
  * Closes connection with database.
110
119
  */
111
120
  disconnect(): Promise<void>;
121
+ hasAttachedDatabases(): boolean;
122
+ getAttachedDatabaseHandleByRelativePath(path: string): string | undefined;
123
+ getAttachedDatabasePathRelativeByHandle(handle: string): string | undefined;
112
124
  /**
113
125
  * Creates a schema builder used to build and sync a schema.
114
126
  */
@@ -216,3 +228,4 @@ export declare abstract class AbstractSqliteDriver implements Driver {
216
228
  */
217
229
  protected loadDependencies(): void;
218
230
  }
231
+ export {};
@@ -145,6 +145,13 @@ var AbstractSqliteDriver = /** @class */ (function () {
145
145
  metadataName: "varchar",
146
146
  metadataValue: "text",
147
147
  };
148
+ // -------------------------------------------------------------------------
149
+ // Protected Properties
150
+ // -------------------------------------------------------------------------
151
+ /**
152
+ * Any attached databases (excepting default 'main')
153
+ */
154
+ this.attachedDatabases = {};
148
155
  this.connection = connection;
149
156
  this.options = connection.options;
150
157
  this.database = DriverUtils_1.DriverUtils.buildDriverOptions(this.options).database;
@@ -190,6 +197,20 @@ var AbstractSqliteDriver = /** @class */ (function () {
190
197
  });
191
198
  });
192
199
  };
200
+ AbstractSqliteDriver.prototype.hasAttachedDatabases = function () {
201
+ return !!Object.keys(this.attachedDatabases).length;
202
+ };
203
+ AbstractSqliteDriver.prototype.getAttachedDatabaseHandleByRelativePath = function (path) {
204
+ var _a, _b;
205
+ return (_b = (_a = this.attachedDatabases) === null || _a === void 0 ? void 0 : _a[path]) === null || _b === void 0 ? void 0 : _b.attachHandle;
206
+ };
207
+ AbstractSqliteDriver.prototype.getAttachedDatabasePathRelativeByHandle = function (handle) {
208
+ var _a;
209
+ return (_a = Object.values(this.attachedDatabases).find(function (_a) {
210
+ var attachHandle = _a.attachHandle;
211
+ return handle === attachHandle;
212
+ })) === null || _a === void 0 ? void 0 : _a.attachFilepathRelative;
213
+ };
193
214
  /**
194
215
  * Creates a schema builder used to build and sync a schema.
195
216
  */
@@ -335,10 +356,11 @@ var AbstractSqliteDriver = /** @class */ (function () {
335
356
  * Parse a target table name or other types and return a normalized table definition.
336
357
  */
337
358
  AbstractSqliteDriver.prototype.parseTableName = function (target) {
359
+ var _a;
338
360
  var driverDatabase = this.database;
339
361
  var driverSchema = undefined;
340
362
  if (target instanceof Table_1.Table || target instanceof View_1.View) {
341
- var parsed = this.parseTableName(target.name);
363
+ var parsed = this.parseTableName(target.schema ? "\"" + target.schema + "\".\"" + target.name + "\"" : target.name);
342
364
  return {
343
365
  database: target.database || parsed.database || driverDatabase,
344
366
  schema: target.schema || parsed.schema || driverSchema,
@@ -370,8 +392,9 @@ var AbstractSqliteDriver = /** @class */ (function () {
370
392
  };
371
393
  }
372
394
  else if (parts.length === 2) {
395
+ var database = (_a = this.getAttachedDatabasePathRelativeByHandle(parts[0])) !== null && _a !== void 0 ? _a : driverDatabase;
373
396
  return {
374
- database: driverDatabase,
397
+ database: database,
375
398
  schema: parts[0],
376
399
  tableName: parts[1]
377
400
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/driver/sqlite-abstract/AbstractSqliteDriver.ts"],"names":[],"mappings":"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","file":"AbstractSqliteDriver.js","sourcesContent":["import {Driver} from \"../Driver\";\nimport {ObjectLiteral} from \"../../common/ObjectLiteral\";\nimport {ColumnMetadata} from \"../../metadata/ColumnMetadata\";\nimport {DateUtils} from \"../../util/DateUtils\";\nimport {Connection} from \"../../connection/Connection\";\nimport {RdbmsSchemaBuilder} from \"../../schema-builder/RdbmsSchemaBuilder\";\nimport {MappedColumnTypes} from \"../types/MappedColumnTypes\";\nimport {ColumnType} from \"../types/ColumnTypes\";\nimport {QueryRunner} from \"../../query-runner/QueryRunner\";\nimport {DataTypeDefaults} from \"../types/DataTypeDefaults\";\nimport {TableColumn} from \"../../schema-builder/table/TableColumn\";\nimport {BaseConnectionOptions} from \"../../connection/BaseConnectionOptions\";\nimport {EntityMetadata} from \"../../metadata/EntityMetadata\";\nimport {OrmUtils} from \"../../util/OrmUtils\";\nimport {ApplyValueTransformers} from \"../../util/ApplyValueTransformers\";\nimport {ReplicationMode} from \"../types/ReplicationMode\";\nimport {DriverUtils} from \"../DriverUtils\";\nimport { TypeORMError } from \"../../error\";\nimport { Table } from \"../../schema-builder/table/Table\";\nimport { View } from \"../../schema-builder/view/View\";\nimport { TableForeignKey } from \"../../schema-builder/table/TableForeignKey\";\n\n/**\n * Organizes communication with sqlite DBMS.\n */\nexport abstract class AbstractSqliteDriver implements Driver {\n\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * Connection used by driver.\n */\n connection: Connection;\n\n /**\n * Sqlite has a single QueryRunner because it works on a single database connection.\n */\n queryRunner?: QueryRunner;\n\n /**\n * Real database connection with sqlite database.\n */\n databaseConnection: any;\n\n // -------------------------------------------------------------------------\n // Public Implemented Properties\n // -------------------------------------------------------------------------\n\n /**\n * Connection options.\n */\n options: BaseConnectionOptions;\n\n /**\n * Master database used to perform all write queries.\n */\n database?: string;\n\n /**\n * Indicates if replication is enabled.\n */\n isReplicated: boolean = false;\n\n /**\n * SQLite underlying library.\n */\n sqlite: any;\n\n /**\n * Indicates if tree tables are supported by this driver.\n */\n treeSupport = true;\n\n /**\n * Gets list of supported column data types by a driver.\n *\n * @see https://www.tutorialspoint.com/sqlite/sqlite_data_types.htm\n * @see https://sqlite.org/datatype3.html\n */\n supportedDataTypes: ColumnType[] = [\n \"int\",\n \"integer\",\n \"tinyint\",\n \"smallint\",\n \"mediumint\",\n \"bigint\",\n \"unsigned big int\",\n \"int2\",\n \"int8\",\n \"integer\",\n \"character\",\n \"varchar\",\n \"varying character\",\n \"nchar\",\n \"native character\",\n \"nvarchar\",\n \"text\",\n \"clob\",\n \"text\",\n \"blob\",\n \"real\",\n \"double\",\n \"double precision\",\n \"float\",\n \"real\",\n \"numeric\",\n \"decimal\",\n \"boolean\",\n \"date\",\n \"time\",\n \"datetime\"\n ];\n\n /**\n * Returns type of upsert supported by driver if any\n */\n readonly supportedUpsertType = \"on-conflict-do-update\";\n\n /**\n * Gets list of column data types that support length by a driver.\n */\n withLengthColumnTypes: ColumnType[] = [\n \"character\",\n \"varchar\",\n \"varying character\",\n \"nchar\",\n \"native character\",\n \"nvarchar\",\n \"text\",\n \"blob\",\n \"clob\"\n ];\n\n /**\n * Gets list of spatial column data types.\n */\n spatialTypes: ColumnType[] = [];\n\n /**\n * Gets list of column data types that support precision by a driver.\n */\n withPrecisionColumnTypes: ColumnType[] = [\n \"real\",\n \"double\",\n \"double precision\",\n \"float\",\n \"real\",\n \"numeric\",\n \"decimal\",\n \"date\",\n \"time\",\n \"datetime\"\n ];\n\n /**\n * Gets list of column data types that support scale by a driver.\n */\n withScaleColumnTypes: ColumnType[] = [\n \"real\",\n \"double\",\n \"double precision\",\n \"float\",\n \"real\",\n \"numeric\",\n \"decimal\",\n ];\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: \"datetime\",\n createDateDefault: \"datetime('now')\",\n updateDate: \"datetime\",\n updateDateDefault: \"datetime('now')\",\n deleteDate: \"datetime\",\n deleteDateNullable: true,\n version: \"integer\",\n treeLevel: \"integer\",\n migrationId: \"integer\",\n migrationName: \"varchar\",\n migrationTimestamp: \"bigint\",\n cacheId: \"int\",\n cacheIdentifier: \"varchar\",\n cacheTime: \"bigint\",\n cacheDuration: \"int\",\n cacheQuery: \"text\",\n cacheResult: \"text\",\n metadataType: \"varchar\",\n metadataDatabase: \"varchar\",\n metadataSchema: \"varchar\",\n metadataTable: \"varchar\",\n metadataName: \"varchar\",\n metadataValue: \"text\",\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\n /**\n * No documentation specifying a maximum length for identifiers could be found\n * for SQLite.\n */\n maxAliasLength?: number;\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(connection: Connection) {\n this.connection = connection;\n this.options = connection.options as BaseConnectionOptions;\n\n this.database = DriverUtils.buildDriverOptions(this.options).database;\n }\n\n // -------------------------------------------------------------------------\n // Public Abstract\n // -------------------------------------------------------------------------\n\n /**\n * Creates a query runner used to execute database queries.\n */\n abstract createQueryRunner(mode: ReplicationMode): QueryRunner;\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Performs connection to the database.\n */\n async connect(): Promise<void> {\n this.databaseConnection = await this.createDatabaseConnection();\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 database.\n */\n async disconnect(): Promise<void> {\n return new Promise<void>((ok, fail) => {\n this.queryRunner = undefined;\n this.databaseConnection.close((err: any) => err ? fail(err) : ok());\n });\n }\n\n /**\n * Creates a schema builder used to build and sync a schema.\n */\n createSchemaBuilder() {\n return new RdbmsSchemaBuilder(this.connection);\n }\n\n /**\n * Prepares given value to a value to be persisted, based on its column type and metadata.\n */\n preparePersistentValue(value: any, columnMetadata: ColumnMetadata): any {\n if (columnMetadata.transformer)\n value = ApplyValueTransformers.transformTo(columnMetadata.transformer, value);\n\n if (value === null || value === undefined)\n return value;\n\n if (columnMetadata.type === Boolean || columnMetadata.type === \"boolean\") {\n return value === true ? 1 : 0;\n\n } else if (columnMetadata.type === \"date\") {\n return DateUtils.mixedDateToDateString(value);\n\n } else if (columnMetadata.type === \"time\") {\n return DateUtils.mixedDateToTimeString(value);\n\n } else if (columnMetadata.type === \"datetime\" || columnMetadata.type === Date) {\n // to string conversation needs because SQLite stores date as integer number, when date came as Object\n // TODO: think about `toUTC` conversion\n return DateUtils.mixedDateToUtcDatetimeString(value);\n\n } else if (columnMetadata.type === \"simple-array\") {\n return DateUtils.simpleArrayToString(value);\n\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 }\n\n return value;\n }\n\n /**\n * Prepares given value to a value to be hydrated, based on its column type or metadata.\n */\n prepareHydratedValue(value: any, columnMetadata: ColumnMetadata): any {\n if (value === null || value === undefined)\n return columnMetadata.transformer ? ApplyValueTransformers.transformFrom(columnMetadata.transformer, value) : value;\n\n if (columnMetadata.type === Boolean || columnMetadata.type === \"boolean\") {\n value = value ? true : false;\n\n } else if (columnMetadata.type === \"datetime\" || columnMetadata.type === Date) {\n /**\n * Fix date conversion issue\n *\n * If the format of the date string is \"2018-03-14 02:33:33.906\", Safari (and iOS WKWebView) will convert it to an invalid date object.\n * We need to modify the date string to \"2018-03-14T02:33:33.906Z\" and Safari will convert it correctly.\n *\n * ISO 8601\n * https://www.w3.org/TR/NOTE-datetime\n */\n if (value && typeof value === \"string\") {\n // There are various valid time string formats a sqlite time string might have:\n // https://www.sqlite.org/lang_datefunc.html\n // There are two separate fixes we may need to do:\n // 1) Add 'T' separator if space is used instead\n // 2) Add 'Z' UTC suffix if no timezone or offset specified\n\n if (/^\\d\\d\\d\\d-\\d\\d-\\d\\d \\d\\d:\\d\\d/.test(value)) {\n value = value.replace(\" \", \"T\");\n }\n if (/^\\d\\d\\d\\d-\\d\\d-\\d\\dT\\d\\d:\\d\\d(:\\d\\d(\\.\\d\\d\\d)?)?$/.test(value)) {\n value += \"Z\";\n }\n }\n\n value = DateUtils.normalizeHydratedDate(value);\n\n } else if (columnMetadata.type === \"date\") {\n value = DateUtils.mixedDateToDateString(value);\n\n } else if (columnMetadata.type === \"time\") {\n value = DateUtils.mixedTimeToString(value);\n\n } else if (columnMetadata.type === \"simple-array\") {\n value = DateUtils.stringToSimpleArray(value);\n\n } else if (columnMetadata.type === \"simple-json\") {\n value = DateUtils.stringToSimpleJson(value);\n\n } else if ( columnMetadata.type === \"simple-enum\" ) {\n value = DateUtils.stringToSimpleEnum(value, columnMetadata);\n\n }\n\n if (columnMetadata.transformer)\n value = ApplyValueTransformers.transformFrom(columnMetadata.transformer, value);\n\n return value;\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 escapeQueryWithParameters(sql: string, parameters: ObjectLiteral, nativeParameters: ObjectLiteral): [string, any[]] {\n const escapedParameters: any[] = Object.keys(nativeParameters).map(key => {\n // Mapping boolean values to their numeric representation\n if (typeof nativeParameters[key] === \"boolean\") {\n return nativeParameters[key] === true ? 1 : 0;\n }\n\n return nativeParameters[key];\n });\n\n if (!parameters || !Object.keys(parameters).length)\n return [sql, escapedParameters];\n\n sql = sql.replace(/:(\\.\\.\\.)?([A-Za-z0-9_.]+)/g, (full, isArray: string, key: string): string => {\n if (!parameters.hasOwnProperty(key)) {\n return full;\n }\n\n let value: any = parameters[key];\n\n if (isArray) {\n return value.map((v: any) => {\n escapedParameters.push(v);\n return this.createParameter(key, escapedParameters.length - 1);\n }).join(\", \");\n\n }\n\n if (value instanceof Function) {\n return value();\n\n }\n\n escapedParameters.push(value);\n return this.createParameter(key, escapedParameters.length - 1);\n }); // todo: make replace only in value statements, otherwise problems\n return [sql, escapedParameters];\n }\n\n /**\n * Escapes a column name.\n */\n escape(columnName: string): string {\n return \"\\\"\" + columnName + \"\\\"\";\n }\n\n /**\n * Build full table name with database name, schema name and table name.\n * E.g. myDB.mySchema.myTable\n *\n * Returns only simple table name because all inherited drivers does not supports schema and database.\n */\n buildTableName(tableName: string, schema?: string, database?: string): string {\n return tableName;\n }\n\n\n /**\n * Parse a target table name or other types and return a normalized table definition.\n */\n parseTableName(target: EntityMetadata | Table | View | TableForeignKey | string): { database?: string, schema?: string, tableName: string } {\n const driverDatabase = this.database;\n const driverSchema = undefined\n\n if (target instanceof Table || target instanceof View) {\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 (target instanceof TableForeignKey) {\n const parsed = this.parseTableName(target.referencedTableName);\n\n return {\n database: target.referencedDatabase || parsed.database || driverDatabase,\n schema: target.referencedSchema || parsed.schema || driverSchema,\n tableName: parsed.tableName\n };\n }\n\n if (target instanceof EntityMetadata) {\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\n const parts = target.split(\".\");\n\n if (parts.length === 3) {\n return {\n database: parts[0] || driverDatabase,\n schema: parts[1] || driverSchema,\n tableName: parts[2]\n };\n } else if (parts.length === 2) {\n return {\n database: driverDatabase,\n schema: parts[0],\n tableName: parts[1]\n };\n } else {\n return {\n database: driverDatabase,\n schema: driverSchema,\n tableName: target\n };\n }\n }\n\n /**\n * Creates a database type from a given column metadata.\n */\n normalizeType(column: { type?: ColumnType, length?: number | string, precision?: number|null, scale?: number }): string {\n if (column.type === Number || column.type === \"int\") {\n return \"integer\";\n\n } else if (column.type === String) {\n return \"varchar\";\n\n } else if (column.type === Date) {\n return \"datetime\";\n\n } else if (column.type === Boolean) {\n return \"boolean\";\n\n } else if (column.type === \"uuid\") {\n return \"varchar\";\n\n } else if (column.type === \"simple-array\") {\n return \"text\";\n\n } else if (column.type === \"simple-json\") {\n return \"text\";\n\n } else if (column.type === \"simple-enum\") {\n return \"varchar\";\n\n } else {\n return column.type as string || \"\";\n }\n }\n\n /**\n * Normalizes \"default\" value of the column.\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 ? \"1\" : \"0\";\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 normalizeIsUnique(column: ColumnMetadata): boolean {\n return column.entityMetadata.uniques.some(uq => uq.columns.length === 1 && uq.columns[0] === column);\n }\n\n /**\n * Calculates column length taking into account the default length values.\n */\n getColumnLength(column: ColumnMetadata): string {\n return column.length ? column.length.toString() : \"\";\n }\n\n /**\n * Normalizes \"default\" value of the column.\n */\n createFullType(column: TableColumn): string {\n let type = column.type;\n if (column.enum) {\n return \"varchar\";\n }\n if (column.length) {\n type += \"(\" + column.length + \")\";\n\n } else if (column.precision !== null && column.precision !== undefined && column.scale !== null && column.scale !== undefined) {\n type += \"(\" + column.precision + \",\" + column.scale + \")\";\n\n } else if (column.precision !== null && column.precision !== undefined) {\n type += \"(\" + column.precision + \")\";\n }\n\n if (column.isArray)\n type += \" array\";\n\n return type;\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 obtainMasterConnection(): Promise<any> {\n return Promise.resolve();\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 obtainSlaveConnection(): Promise<any> {\n return Promise.resolve();\n }\n\n /**\n * Creates generated map of values generated or returned by database after INSERT query.\n */\n createGeneratedMap(metadata: EntityMetadata, insertResult: any, entityIndex: number, entityNum: number) {\n const generatedMap = metadata.generatedColumns.reduce((map, generatedColumn) => {\n let value: any;\n if (generatedColumn.generationStrategy === \"increment\" && insertResult) {\n // NOTE: When INSERT statement is successfully completed, the last inserted row ID is returned.\n // see also: SqliteQueryRunner.query()\n value = insertResult - entityNum + entityIndex + 1;\n // } else if (generatedColumn.generationStrategy === \"uuid\") {\n // value = insertValue[generatedColumn.databaseName];\n }\n\n if (!value) return map;\n return OrmUtils.mergeDeep(map, generatedColumn.createValueMap(value));\n }, {} as ObjectLiteral);\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 findChangedColumns(tableColumns: TableColumn[], columnMetadatas: ColumnMetadata[]): ColumnMetadata[] {\n return columnMetadatas.filter(columnMetadata => {\n const tableColumn = tableColumns.find(c => c.name === columnMetadata.databaseName);\n if (!tableColumn)\n return false; // we don't need new columns, we only need exist and changed\n\n // console.log(\"table:\", columnMetadata.entityMetadata.tableName);\n // console.log(\"name:\", tableColumn.name, columnMetadata.databaseName);\n // console.log(\"type:\", tableColumn.type, this.normalizeType(columnMetadata));\n // console.log(\"length:\", tableColumn.length, columnMetadata.length);\n // console.log(\"precision:\", tableColumn.precision, columnMetadata.precision);\n // console.log(\"scale:\", tableColumn.scale, columnMetadata.scale);\n // console.log(\"comment:\", tableColumn.comment, columnMetadata.comment);\n // console.log(\"default:\", this.normalizeDefault(columnMetadata), columnMetadata.default);\n // console.log(\"isPrimary:\", tableColumn.isPrimary, columnMetadata.isPrimary);\n // console.log(\"isNullable:\", tableColumn.isNullable, columnMetadata.isNullable);\n // console.log(\"isUnique:\", tableColumn.isUnique, this.normalizeIsUnique(columnMetadata));\n // console.log(\"isGenerated:\", tableColumn.isGenerated, columnMetadata.isGenerated);\n // console.log(\"==========================================\");\n\n return tableColumn.name !== columnMetadata.databaseName\n || tableColumn.type !== this.normalizeType(columnMetadata)\n || tableColumn.length !== columnMetadata.length\n || tableColumn.precision !== columnMetadata.precision\n || tableColumn.scale !== columnMetadata.scale\n // || tableColumn.comment !== columnMetadata.comment || // todo\n || this.normalizeDefault(columnMetadata) !== tableColumn.default\n || tableColumn.isPrimary !== columnMetadata.isPrimary\n || tableColumn.isNullable !== columnMetadata.isNullable\n || tableColumn.isUnique !== this.normalizeIsUnique(columnMetadata)\n || (columnMetadata.generationStrategy !== \"uuid\" && tableColumn.isGenerated !== columnMetadata.isGenerated);\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 false;\n }\n\n /**\n * Creates an escaped parameter.\n */\n createParameter(parameterName: string, index: number): string {\n // return \"$\" + (index + 1);\n return \"?\";\n // return \"$\" + parameterName;\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates connection with the database.\n */\n protected createDatabaseConnection() {\n throw new TypeORMError(\"Do not use AbstractSqlite directly, it has to be used with one of the sqlite drivers\");\n }\n\n /**\n * If driver dependency is not given explicitly, then try to load it via \"require\".\n */\n protected loadDependencies(): void {\n // dependencies have to be loaded in the specific driver\n }\n\n}\n"],"sourceRoot":"../.."}
1
+ {"version":3,"sources":["../../src/driver/sqlite-abstract/AbstractSqliteDriver.ts"],"names":[],"mappings":"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","file":"AbstractSqliteDriver.js","sourcesContent":["import {Driver} from \"../Driver\";\nimport {ObjectLiteral} from \"../../common/ObjectLiteral\";\nimport {ColumnMetadata} from \"../../metadata/ColumnMetadata\";\nimport {DateUtils} from \"../../util/DateUtils\";\nimport {Connection} from \"../../connection/Connection\";\nimport {RdbmsSchemaBuilder} from \"../../schema-builder/RdbmsSchemaBuilder\";\nimport {MappedColumnTypes} from \"../types/MappedColumnTypes\";\nimport {ColumnType} from \"../types/ColumnTypes\";\nimport {QueryRunner} from \"../../query-runner/QueryRunner\";\nimport {DataTypeDefaults} from \"../types/DataTypeDefaults\";\nimport {TableColumn} from \"../../schema-builder/table/TableColumn\";\nimport {BaseConnectionOptions} from \"../../connection/BaseConnectionOptions\";\nimport {EntityMetadata} from \"../../metadata/EntityMetadata\";\nimport {OrmUtils} from \"../../util/OrmUtils\";\nimport {ApplyValueTransformers} from \"../../util/ApplyValueTransformers\";\nimport {ReplicationMode} from \"../types/ReplicationMode\";\nimport {DriverUtils} from \"../DriverUtils\";\nimport { TypeORMError } from \"../../error\";\nimport { Table } from \"../../schema-builder/table/Table\";\nimport { View } from \"../../schema-builder/view/View\";\nimport { TableForeignKey } from \"../../schema-builder/table/TableForeignKey\";\n\n\ntype DatabasesMap = Record<string, {\n attachFilepathAbsolute: string\n attachFilepathRelative: string\n attachHandle: string\n}>;\n\n/**\n * Organizes communication with sqlite DBMS.\n */\nexport abstract class AbstractSqliteDriver implements Driver {\n\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * Connection used by driver.\n */\n connection: Connection;\n\n /**\n * Sqlite has a single QueryRunner because it works on a single database connection.\n */\n queryRunner?: QueryRunner;\n\n /**\n * Real database connection with sqlite database.\n */\n databaseConnection: any;\n\n // -------------------------------------------------------------------------\n // Public Implemented Properties\n // -------------------------------------------------------------------------\n\n /**\n * Connection options.\n */\n options: BaseConnectionOptions;\n\n /**\n * Master database used to perform all write queries.\n */\n database?: string;\n\n /**\n * Indicates if replication is enabled.\n */\n isReplicated: boolean = false;\n\n /**\n * SQLite underlying library.\n */\n sqlite: any;\n\n /**\n * Indicates if tree tables are supported by this driver.\n */\n treeSupport = true;\n\n /**\n * Gets list of supported column data types by a driver.\n *\n * @see https://www.tutorialspoint.com/sqlite/sqlite_data_types.htm\n * @see https://sqlite.org/datatype3.html\n */\n supportedDataTypes: ColumnType[] = [\n \"int\",\n \"integer\",\n \"tinyint\",\n \"smallint\",\n \"mediumint\",\n \"bigint\",\n \"unsigned big int\",\n \"int2\",\n \"int8\",\n \"integer\",\n \"character\",\n \"varchar\",\n \"varying character\",\n \"nchar\",\n \"native character\",\n \"nvarchar\",\n \"text\",\n \"clob\",\n \"text\",\n \"blob\",\n \"real\",\n \"double\",\n \"double precision\",\n \"float\",\n \"real\",\n \"numeric\",\n \"decimal\",\n \"boolean\",\n \"date\",\n \"time\",\n \"datetime\"\n ];\n\n /**\n * Returns type of upsert supported by driver if any\n */\n readonly supportedUpsertType = \"on-conflict-do-update\";\n\n /**\n * Gets list of column data types that support length by a driver.\n */\n withLengthColumnTypes: ColumnType[] = [\n \"character\",\n \"varchar\",\n \"varying character\",\n \"nchar\",\n \"native character\",\n \"nvarchar\",\n \"text\",\n \"blob\",\n \"clob\"\n ];\n\n /**\n * Gets list of spatial column data types.\n */\n spatialTypes: ColumnType[] = [];\n\n /**\n * Gets list of column data types that support precision by a driver.\n */\n withPrecisionColumnTypes: ColumnType[] = [\n \"real\",\n \"double\",\n \"double precision\",\n \"float\",\n \"real\",\n \"numeric\",\n \"decimal\",\n \"date\",\n \"time\",\n \"datetime\"\n ];\n\n /**\n * Gets list of column data types that support scale by a driver.\n */\n withScaleColumnTypes: ColumnType[] = [\n \"real\",\n \"double\",\n \"double precision\",\n \"float\",\n \"real\",\n \"numeric\",\n \"decimal\",\n ];\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: \"datetime\",\n createDateDefault: \"datetime('now')\",\n updateDate: \"datetime\",\n updateDateDefault: \"datetime('now')\",\n deleteDate: \"datetime\",\n deleteDateNullable: true,\n version: \"integer\",\n treeLevel: \"integer\",\n migrationId: \"integer\",\n migrationName: \"varchar\",\n migrationTimestamp: \"bigint\",\n cacheId: \"int\",\n cacheIdentifier: \"varchar\",\n cacheTime: \"bigint\",\n cacheDuration: \"int\",\n cacheQuery: \"text\",\n cacheResult: \"text\",\n metadataType: \"varchar\",\n metadataDatabase: \"varchar\",\n metadataSchema: \"varchar\",\n metadataTable: \"varchar\",\n metadataName: \"varchar\",\n metadataValue: \"text\",\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\n /**\n * No documentation specifying a maximum length for identifiers could be found\n * for SQLite.\n */\n maxAliasLength?: number;\n\n // -------------------------------------------------------------------------\n // Protected Properties\n // -------------------------------------------------------------------------\n\n /**\n * Any attached databases (excepting default 'main')\n */\n attachedDatabases: DatabasesMap = {};\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(connection: Connection) {\n this.connection = connection;\n this.options = connection.options as BaseConnectionOptions;\n\n this.database = DriverUtils.buildDriverOptions(this.options).database;\n }\n\n // -------------------------------------------------------------------------\n // Public Abstract\n // -------------------------------------------------------------------------\n\n /**\n * Creates a query runner used to execute database queries.\n */\n abstract createQueryRunner(mode: ReplicationMode): QueryRunner;\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Performs connection to the database.\n */\n async connect(): Promise<void> {\n this.databaseConnection = await this.createDatabaseConnection();\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 database.\n */\n async disconnect(): Promise<void> {\n return new Promise<void>((ok, fail) => {\n this.queryRunner = undefined;\n this.databaseConnection.close((err: any) => err ? fail(err) : ok());\n });\n }\n\n hasAttachedDatabases(): boolean {\n return !!Object.keys(this.attachedDatabases).length;\n }\n\n getAttachedDatabaseHandleByRelativePath(path: string): string | undefined {\n return this.attachedDatabases?.[path]?.attachHandle\n }\n\n getAttachedDatabasePathRelativeByHandle(handle: string): string | undefined {\n return Object.values(this.attachedDatabases).find(({attachHandle}) => handle === attachHandle)?.attachFilepathRelative\n }\n\n /**\n * Creates a schema builder used to build and sync a schema.\n */\n createSchemaBuilder() {\n return new RdbmsSchemaBuilder(this.connection);\n }\n\n /**\n * Prepares given value to a value to be persisted, based on its column type and metadata.\n */\n preparePersistentValue(value: any, columnMetadata: ColumnMetadata): any {\n if (columnMetadata.transformer)\n value = ApplyValueTransformers.transformTo(columnMetadata.transformer, value);\n\n if (value === null || value === undefined)\n return value;\n\n if (columnMetadata.type === Boolean || columnMetadata.type === \"boolean\") {\n return value === true ? 1 : 0;\n\n } else if (columnMetadata.type === \"date\") {\n return DateUtils.mixedDateToDateString(value);\n\n } else if (columnMetadata.type === \"time\") {\n return DateUtils.mixedDateToTimeString(value);\n\n } else if (columnMetadata.type === \"datetime\" || columnMetadata.type === Date) {\n // to string conversation needs because SQLite stores date as integer number, when date came as Object\n // TODO: think about `toUTC` conversion\n return DateUtils.mixedDateToUtcDatetimeString(value);\n\n } else if (columnMetadata.type === \"simple-array\") {\n return DateUtils.simpleArrayToString(value);\n\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 }\n\n return value;\n }\n\n /**\n * Prepares given value to a value to be hydrated, based on its column type or metadata.\n */\n prepareHydratedValue(value: any, columnMetadata: ColumnMetadata): any {\n if (value === null || value === undefined)\n return columnMetadata.transformer ? ApplyValueTransformers.transformFrom(columnMetadata.transformer, value) : value;\n\n if (columnMetadata.type === Boolean || columnMetadata.type === \"boolean\") {\n value = value ? true : false;\n\n } else if (columnMetadata.type === \"datetime\" || columnMetadata.type === Date) {\n /**\n * Fix date conversion issue\n *\n * If the format of the date string is \"2018-03-14 02:33:33.906\", Safari (and iOS WKWebView) will convert it to an invalid date object.\n * We need to modify the date string to \"2018-03-14T02:33:33.906Z\" and Safari will convert it correctly.\n *\n * ISO 8601\n * https://www.w3.org/TR/NOTE-datetime\n */\n if (value && typeof value === \"string\") {\n // There are various valid time string formats a sqlite time string might have:\n // https://www.sqlite.org/lang_datefunc.html\n // There are two separate fixes we may need to do:\n // 1) Add 'T' separator if space is used instead\n // 2) Add 'Z' UTC suffix if no timezone or offset specified\n\n if (/^\\d\\d\\d\\d-\\d\\d-\\d\\d \\d\\d:\\d\\d/.test(value)) {\n value = value.replace(\" \", \"T\");\n }\n if (/^\\d\\d\\d\\d-\\d\\d-\\d\\dT\\d\\d:\\d\\d(:\\d\\d(\\.\\d\\d\\d)?)?$/.test(value)) {\n value += \"Z\";\n }\n }\n\n value = DateUtils.normalizeHydratedDate(value);\n\n } else if (columnMetadata.type === \"date\") {\n value = DateUtils.mixedDateToDateString(value);\n\n } else if (columnMetadata.type === \"time\") {\n value = DateUtils.mixedTimeToString(value);\n\n } else if (columnMetadata.type === \"simple-array\") {\n value = DateUtils.stringToSimpleArray(value);\n\n } else if (columnMetadata.type === \"simple-json\") {\n value = DateUtils.stringToSimpleJson(value);\n\n } else if ( columnMetadata.type === \"simple-enum\" ) {\n value = DateUtils.stringToSimpleEnum(value, columnMetadata);\n\n }\n\n if (columnMetadata.transformer)\n value = ApplyValueTransformers.transformFrom(columnMetadata.transformer, value);\n\n return value;\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 escapeQueryWithParameters(sql: string, parameters: ObjectLiteral, nativeParameters: ObjectLiteral): [string, any[]] {\n const escapedParameters: any[] = Object.keys(nativeParameters).map(key => {\n // Mapping boolean values to their numeric representation\n if (typeof nativeParameters[key] === \"boolean\") {\n return nativeParameters[key] === true ? 1 : 0;\n }\n\n return nativeParameters[key];\n });\n\n if (!parameters || !Object.keys(parameters).length)\n return [sql, escapedParameters];\n\n sql = sql.replace(/:(\\.\\.\\.)?([A-Za-z0-9_.]+)/g, (full, isArray: string, key: string): string => {\n if (!parameters.hasOwnProperty(key)) {\n return full;\n }\n\n let value: any = parameters[key];\n\n if (isArray) {\n return value.map((v: any) => {\n escapedParameters.push(v);\n return this.createParameter(key, escapedParameters.length - 1);\n }).join(\", \");\n\n }\n\n if (value instanceof Function) {\n return value();\n\n }\n\n escapedParameters.push(value);\n return this.createParameter(key, escapedParameters.length - 1);\n }); // todo: make replace only in value statements, otherwise problems\n return [sql, escapedParameters];\n }\n\n /**\n * Escapes a column name.\n */\n escape(columnName: string): string {\n return \"\\\"\" + columnName + \"\\\"\";\n }\n\n /**\n * Build full table name with database name, schema name and table name.\n * E.g. myDB.mySchema.myTable\n *\n * Returns only simple table name because all inherited drivers does not supports schema and database.\n */\n buildTableName(tableName: string, schema?: string, database?: string): string {\n return tableName;\n }\n\n\n /**\n * Parse a target table name or other types and return a normalized table definition.\n */\n parseTableName(target: EntityMetadata | Table | View | TableForeignKey | string): { database?: string, schema?: string, tableName: string } {\n const driverDatabase = this.database;\n const driverSchema = undefined\n\n if (target instanceof Table || target instanceof View) {\n const parsed = this.parseTableName(target.schema ? `\"${target.schema}\".\"${target.name}\"` : 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 (target instanceof TableForeignKey) {\n const parsed = this.parseTableName(target.referencedTableName);\n\n return {\n database: target.referencedDatabase || parsed.database || driverDatabase,\n schema: target.referencedSchema || parsed.schema || driverSchema,\n tableName: parsed.tableName\n };\n }\n\n if (target instanceof EntityMetadata) {\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\n const parts = target.split(\".\");\n\n if (parts.length === 3) {\n return {\n database: parts[0] || driverDatabase,\n schema: parts[1] || driverSchema,\n tableName: parts[2]\n };\n } else if (parts.length === 2) {\n const database = this.getAttachedDatabasePathRelativeByHandle(parts[0]) ?? driverDatabase\n return {\n database: database,\n schema: parts[0],\n tableName: parts[1]\n };\n } else {\n return {\n database: driverDatabase,\n schema: driverSchema,\n tableName: target\n };\n }\n }\n\n /**\n * Creates a database type from a given column metadata.\n */\n normalizeType(column: { type?: ColumnType, length?: number | string, precision?: number|null, scale?: number }): string {\n if (column.type === Number || column.type === \"int\") {\n return \"integer\";\n\n } else if (column.type === String) {\n return \"varchar\";\n\n } else if (column.type === Date) {\n return \"datetime\";\n\n } else if (column.type === Boolean) {\n return \"boolean\";\n\n } else if (column.type === \"uuid\") {\n return \"varchar\";\n\n } else if (column.type === \"simple-array\") {\n return \"text\";\n\n } else if (column.type === \"simple-json\") {\n return \"text\";\n\n } else if (column.type === \"simple-enum\") {\n return \"varchar\";\n\n } else {\n return column.type as string || \"\";\n }\n }\n\n /**\n * Normalizes \"default\" value of the column.\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 ? \"1\" : \"0\";\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 normalizeIsUnique(column: ColumnMetadata): boolean {\n return column.entityMetadata.uniques.some(uq => uq.columns.length === 1 && uq.columns[0] === column);\n }\n\n /**\n * Calculates column length taking into account the default length values.\n */\n getColumnLength(column: ColumnMetadata): string {\n return column.length ? column.length.toString() : \"\";\n }\n\n /**\n * Normalizes \"default\" value of the column.\n */\n createFullType(column: TableColumn): string {\n let type = column.type;\n if (column.enum) {\n return \"varchar\";\n }\n if (column.length) {\n type += \"(\" + column.length + \")\";\n\n } else if (column.precision !== null && column.precision !== undefined && column.scale !== null && column.scale !== undefined) {\n type += \"(\" + column.precision + \",\" + column.scale + \")\";\n\n } else if (column.precision !== null && column.precision !== undefined) {\n type += \"(\" + column.precision + \")\";\n }\n\n if (column.isArray)\n type += \" array\";\n\n return type;\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 obtainMasterConnection(): Promise<any> {\n return Promise.resolve();\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 obtainSlaveConnection(): Promise<any> {\n return Promise.resolve();\n }\n\n /**\n * Creates generated map of values generated or returned by database after INSERT query.\n */\n createGeneratedMap(metadata: EntityMetadata, insertResult: any, entityIndex: number, entityNum: number) {\n const generatedMap = metadata.generatedColumns.reduce((map, generatedColumn) => {\n let value: any;\n if (generatedColumn.generationStrategy === \"increment\" && insertResult) {\n // NOTE: When INSERT statement is successfully completed, the last inserted row ID is returned.\n // see also: SqliteQueryRunner.query()\n value = insertResult - entityNum + entityIndex + 1;\n // } else if (generatedColumn.generationStrategy === \"uuid\") {\n // value = insertValue[generatedColumn.databaseName];\n }\n\n if (!value) return map;\n return OrmUtils.mergeDeep(map, generatedColumn.createValueMap(value));\n }, {} as ObjectLiteral);\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 findChangedColumns(tableColumns: TableColumn[], columnMetadatas: ColumnMetadata[]): ColumnMetadata[] {\n return columnMetadatas.filter(columnMetadata => {\n const tableColumn = tableColumns.find(c => c.name === columnMetadata.databaseName);\n if (!tableColumn)\n return false; // we don't need new columns, we only need exist and changed\n\n // console.log(\"table:\", columnMetadata.entityMetadata.tableName);\n // console.log(\"name:\", tableColumn.name, columnMetadata.databaseName);\n // console.log(\"type:\", tableColumn.type, this.normalizeType(columnMetadata));\n // console.log(\"length:\", tableColumn.length, columnMetadata.length);\n // console.log(\"precision:\", tableColumn.precision, columnMetadata.precision);\n // console.log(\"scale:\", tableColumn.scale, columnMetadata.scale);\n // console.log(\"comment:\", tableColumn.comment, columnMetadata.comment);\n // console.log(\"default:\", this.normalizeDefault(columnMetadata), columnMetadata.default);\n // console.log(\"isPrimary:\", tableColumn.isPrimary, columnMetadata.isPrimary);\n // console.log(\"isNullable:\", tableColumn.isNullable, columnMetadata.isNullable);\n // console.log(\"isUnique:\", tableColumn.isUnique, this.normalizeIsUnique(columnMetadata));\n // console.log(\"isGenerated:\", tableColumn.isGenerated, columnMetadata.isGenerated);\n // console.log(\"==========================================\");\n\n return tableColumn.name !== columnMetadata.databaseName\n || tableColumn.type !== this.normalizeType(columnMetadata)\n || tableColumn.length !== columnMetadata.length\n || tableColumn.precision !== columnMetadata.precision\n || tableColumn.scale !== columnMetadata.scale\n // || tableColumn.comment !== columnMetadata.comment || // todo\n || this.normalizeDefault(columnMetadata) !== tableColumn.default\n || tableColumn.isPrimary !== columnMetadata.isPrimary\n || tableColumn.isNullable !== columnMetadata.isNullable\n || tableColumn.isUnique !== this.normalizeIsUnique(columnMetadata)\n || (columnMetadata.generationStrategy !== \"uuid\" && tableColumn.isGenerated !== columnMetadata.isGenerated);\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 false;\n }\n\n /**\n * Creates an escaped parameter.\n */\n createParameter(parameterName: string, index: number): string {\n // return \"$\" + (index + 1);\n return \"?\";\n // return \"$\" + parameterName;\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates connection with the database.\n */\n protected createDatabaseConnection() {\n throw new TypeORMError(\"Do not use AbstractSqlite directly, it has to be used with one of the sqlite drivers\");\n }\n\n /**\n * If driver dependency is not given explicitly, then try to load it via \"require\".\n */\n protected loadDependencies(): void {\n // dependencies have to be loaded in the specific driver\n }\n\n}\n"],"sourceRoot":"../.."}
@@ -251,8 +251,10 @@ export declare abstract class AbstractSqliteQueryRunner extends BaseQueryRunner
251
251
  /**
252
252
  * Removes all tables from the currently connected database.
253
253
  */
254
- clearDatabase(): Promise<void>;
254
+ clearDatabase(database?: string): Promise<void>;
255
255
  protected loadViews(viewNames?: string[]): Promise<View[]>;
256
+ protected loadTableRecords(tablePath: string, tableOrIndex: "table" | "index"): Promise<any>;
257
+ protected loadPragmaRecords(tablePath: string, pragma: string): Promise<any>;
256
258
  /**
257
259
  * Loads all tables (with given names) from the database and creates a Table from them.
258
260
  */
@@ -288,4 +290,12 @@ export declare abstract class AbstractSqliteQueryRunner extends BaseQueryRunner
288
290
  */
289
291
  protected buildCreateColumnSql(column: TableColumn, skipPrimary?: boolean): string;
290
292
  protected recreateTable(newTable: Table, oldTable: Table, migrateData?: boolean): Promise<void>;
293
+ /**
294
+ * tablePath e.g. "myDB.myTable", "myTable"
295
+ */
296
+ protected splitTablePath(tablePath: string): [string | undefined, string];
297
+ /**
298
+ * Escapes given table or view path. Tolerates leading/trailing dots
299
+ */
300
+ protected escapePath(target: Table | View | string, disableEscape?: boolean): string;
291
301
  }