typeorm 0.3.6-dev.9d331b1 → 0.3.6-dev.bbdc20f

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 (370) hide show
  1. package/README.md +34 -14
  2. package/browser/cache/DbQueryResultCache.js +9 -1
  3. package/browser/cache/DbQueryResultCache.js.map +1 -1
  4. package/browser/cache/RedisQueryResultCache.js +3 -0
  5. package/browser/cache/RedisQueryResultCache.js.map +1 -1
  6. package/browser/data-source/DataSourceOptions.d.ts +2 -1
  7. package/browser/data-source/DataSourceOptions.js.map +1 -1
  8. package/browser/decorator/Index.js +1 -0
  9. package/browser/decorator/Index.js.map +1 -1
  10. package/browser/decorator/columns/PrimaryColumn.js +4 -1
  11. package/browser/decorator/columns/PrimaryColumn.js.map +1 -1
  12. package/browser/decorator/options/ColumnOptions.d.ts +10 -2
  13. package/browser/decorator/options/ColumnOptions.js.map +1 -1
  14. package/browser/decorator/options/IndexOptions.d.ts +8 -0
  15. package/browser/decorator/options/IndexOptions.js.map +1 -1
  16. package/browser/decorator/options/JoinColumnOptions.d.ts +4 -0
  17. package/browser/decorator/options/JoinColumnOptions.js.map +1 -1
  18. package/browser/decorator/options/PrimaryGeneratedColumnIdentityOptions.d.ts +4 -0
  19. package/browser/decorator/options/PrimaryGeneratedColumnIdentityOptions.js.map +1 -1
  20. package/browser/decorator/options/PrimaryGeneratedColumnNumericOptions.d.ts +4 -0
  21. package/browser/decorator/options/PrimaryGeneratedColumnNumericOptions.js.map +1 -1
  22. package/browser/decorator/options/PrimaryGeneratedColumnUUIDOptions.d.ts +4 -0
  23. package/browser/decorator/options/PrimaryGeneratedColumnUUIDOptions.js.map +1 -1
  24. package/browser/decorator/relations/JoinColumn.js +1 -0
  25. package/browser/decorator/relations/JoinColumn.js.map +1 -1
  26. package/browser/driver/DriverFactory.js +4 -0
  27. package/browser/driver/DriverFactory.js.map +1 -1
  28. package/browser/driver/aurora-mysql/AuroraMysqlDriver.d.ts +1 -1
  29. package/browser/driver/aurora-mysql/AuroraMysqlDriver.js.map +1 -1
  30. package/browser/driver/cockroachdb/CockroachDriver.js +4 -1
  31. package/browser/driver/cockroachdb/CockroachDriver.js.map +1 -1
  32. package/browser/driver/cockroachdb/CockroachQueryRunner.d.ts +3 -3
  33. package/browser/driver/cockroachdb/CockroachQueryRunner.js +233 -33
  34. package/browser/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  35. package/browser/driver/mongodb/typings.d.ts +5 -5
  36. package/browser/driver/mongodb/typings.js.map +1 -1
  37. package/browser/driver/mysql/MysqlDriver.d.ts +1 -0
  38. package/browser/driver/mysql/MysqlDriver.js +94 -23
  39. package/browser/driver/mysql/MysqlDriver.js.map +1 -1
  40. package/browser/driver/mysql/MysqlQueryRunner.js +219 -24
  41. package/browser/driver/mysql/MysqlQueryRunner.js.map +1 -1
  42. package/browser/driver/oracle/OracleDriver.js +79 -15
  43. package/browser/driver/oracle/OracleDriver.js.map +1 -1
  44. package/browser/driver/oracle/OracleQueryRunner.d.ts +3 -3
  45. package/browser/driver/oracle/OracleQueryRunner.js +216 -42
  46. package/browser/driver/oracle/OracleQueryRunner.js.map +1 -1
  47. package/browser/driver/postgres/PostgresDriver.js +95 -18
  48. package/browser/driver/postgres/PostgresDriver.js.map +1 -1
  49. package/browser/driver/postgres/PostgresQueryRunner.d.ts +3 -3
  50. package/browser/driver/postgres/PostgresQueryRunner.js +159 -59
  51. package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
  52. package/browser/driver/spanner/SpannerConnectionCredentialsOptions.d.ts +17 -0
  53. package/browser/driver/spanner/SpannerConnectionCredentialsOptions.js +3 -0
  54. package/browser/driver/spanner/SpannerConnectionCredentialsOptions.js.map +1 -0
  55. package/browser/driver/spanner/SpannerConnectionOptions.d.ts +120 -0
  56. package/browser/driver/spanner/SpannerConnectionOptions.js +3 -0
  57. package/browser/driver/spanner/SpannerConnectionOptions.js.map +1 -0
  58. package/browser/driver/spanner/SpannerDriver.d.ts +241 -0
  59. package/browser/driver/spanner/SpannerDriver.js +604 -0
  60. package/browser/driver/spanner/SpannerDriver.js.map +1 -0
  61. package/browser/driver/spanner/SpannerQueryRunner.d.ts +350 -0
  62. package/browser/driver/spanner/SpannerQueryRunner.js +1445 -0
  63. package/browser/driver/spanner/SpannerQueryRunner.js.map +1 -0
  64. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js +65 -16
  65. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
  66. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +218 -32
  67. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  68. package/browser/driver/sqlserver/SqlServerDriver.d.ts +3 -1
  69. package/browser/driver/sqlserver/SqlServerDriver.js +99 -26
  70. package/browser/driver/sqlserver/SqlServerDriver.js.map +1 -1
  71. package/browser/driver/sqlserver/SqlServerQueryRunner.d.ts +3 -3
  72. package/browser/driver/sqlserver/SqlServerQueryRunner.js +251 -37
  73. package/browser/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  74. package/browser/driver/sqlserver/authentication/AzureActiveDirectoryAccessTokenAuthentication.d.ts +1 -1
  75. package/browser/driver/sqlserver/authentication/AzureActiveDirectoryAccessTokenAuthentication.js.map +1 -1
  76. package/browser/driver/sqlserver/authentication/AzureActiveDirectoryMsiAppServiceAuthentication.d.ts +2 -2
  77. package/browser/driver/sqlserver/authentication/AzureActiveDirectoryMsiAppServiceAuthentication.js.map +1 -1
  78. package/browser/driver/sqlserver/authentication/AzureActiveDirectoryMsiVmAuthentication.d.ts +2 -2
  79. package/browser/driver/sqlserver/authentication/AzureActiveDirectoryMsiVmAuthentication.js.map +1 -1
  80. package/browser/driver/sqlserver/authentication/AzureActiveDirectoryPasswordAuthentication.d.ts +2 -2
  81. package/browser/driver/sqlserver/authentication/AzureActiveDirectoryPasswordAuthentication.js.map +1 -1
  82. package/browser/driver/types/ColumnTypes.d.ts +1 -1
  83. package/browser/driver/types/ColumnTypes.js.map +1 -1
  84. package/browser/driver/types/DatabaseType.d.ts +1 -1
  85. package/browser/driver/types/DatabaseType.js.map +1 -1
  86. package/browser/entity-manager/EntityManager.js +1 -1
  87. package/browser/entity-manager/EntityManager.js.map +1 -1
  88. package/browser/entity-schema/EntitySchemaColumnOptions.d.ts +6 -2
  89. package/browser/entity-schema/EntitySchemaColumnOptions.js.map +1 -1
  90. package/browser/entity-schema/EntitySchemaIndexOptions.d.ts +8 -0
  91. package/browser/entity-schema/EntitySchemaIndexOptions.js.map +1 -1
  92. package/browser/entity-schema/EntitySchemaTransformer.js +3 -0
  93. package/browser/entity-schema/EntitySchemaTransformer.js.map +1 -1
  94. package/browser/find-options/FindOneOptions.d.ts +1 -1
  95. package/browser/find-options/FindOneOptions.js.map +1 -1
  96. package/browser/find-options/FindOptionsUtils.d.ts +2 -1
  97. package/browser/find-options/FindOptionsUtils.js +2 -1
  98. package/browser/find-options/FindOptionsUtils.js.map +1 -1
  99. package/browser/logger/AdvancedConsoleLogger.d.ts +1 -1
  100. package/browser/logger/AdvancedConsoleLogger.js +1 -1
  101. package/browser/logger/AdvancedConsoleLogger.js.map +1 -1
  102. package/browser/metadata/ColumnMetadata.d.ts +10 -2
  103. package/browser/metadata/ColumnMetadata.js +8 -0
  104. package/browser/metadata/ColumnMetadata.js.map +1 -1
  105. package/browser/metadata/EntityMetadata.js +1 -1
  106. package/browser/metadata/EntityMetadata.js.map +1 -1
  107. package/browser/metadata/ForeignKeyMetadata.d.ts +7 -0
  108. package/browser/metadata/ForeignKeyMetadata.js +4 -1
  109. package/browser/metadata/ForeignKeyMetadata.js.map +1 -1
  110. package/browser/metadata/IndexMetadata.d.ts +8 -0
  111. package/browser/metadata/IndexMetadata.js +9 -0
  112. package/browser/metadata/IndexMetadata.js.map +1 -1
  113. package/browser/metadata-args/IndexMetadataArgs.d.ts +8 -0
  114. package/browser/metadata-args/IndexMetadataArgs.js.map +1 -1
  115. package/browser/metadata-args/JoinColumnMetadataArgs.d.ts +4 -0
  116. package/browser/metadata-args/JoinColumnMetadataArgs.js.map +1 -1
  117. package/browser/metadata-builder/EntityMetadataBuilder.js +13 -6
  118. package/browser/metadata-builder/EntityMetadataBuilder.js.map +1 -1
  119. package/browser/metadata-builder/EntityMetadataValidator.js +17 -0
  120. package/browser/metadata-builder/EntityMetadataValidator.js.map +1 -1
  121. package/browser/metadata-builder/JunctionEntityMetadataBuilder.js +18 -6
  122. package/browser/metadata-builder/JunctionEntityMetadataBuilder.js.map +1 -1
  123. package/browser/metadata-builder/RelationJoinColumnBuilder.js +2 -0
  124. package/browser/metadata-builder/RelationJoinColumnBuilder.js.map +1 -1
  125. package/browser/migration/MigrationExecutor.js +1 -1
  126. package/browser/migration/MigrationExecutor.js.map +1 -1
  127. package/browser/persistence/SubjectDatabaseEntityLoader.d.ts +1 -1
  128. package/browser/persistence/SubjectDatabaseEntityLoader.js +1 -1
  129. package/browser/persistence/SubjectDatabaseEntityLoader.js.map +1 -1
  130. package/browser/persistence/SubjectExecutor.js +1 -1
  131. package/browser/persistence/SubjectExecutor.js.map +1 -1
  132. package/browser/persistence/subject-builder/CascadesSubjectBuilder.d.ts +1 -1
  133. package/browser/persistence/subject-builder/CascadesSubjectBuilder.js +1 -1
  134. package/browser/persistence/subject-builder/CascadesSubjectBuilder.js.map +1 -1
  135. package/browser/persistence/subject-builder/ManyToManySubjectBuilder.js +1 -1
  136. package/browser/persistence/subject-builder/ManyToManySubjectBuilder.js.map +1 -1
  137. package/browser/persistence/subject-builder/OneToOneInverseSideSubjectBuilder.js +1 -1
  138. package/browser/persistence/subject-builder/OneToOneInverseSideSubjectBuilder.js.map +1 -1
  139. package/browser/platform/PlatformTools.js +5 -0
  140. package/browser/platform/PlatformTools.js.map +1 -1
  141. package/browser/query-builder/InsertQueryBuilder.js +15 -3
  142. package/browser/query-builder/InsertQueryBuilder.js.map +1 -1
  143. package/browser/query-builder/QueryBuilder.d.ts +1 -1
  144. package/browser/query-builder/QueryBuilder.js +15 -15
  145. package/browser/query-builder/QueryBuilder.js.map +1 -1
  146. package/browser/query-builder/QueryExpressionMap.d.ts +2 -2
  147. package/browser/query-builder/QueryExpressionMap.js +1 -1
  148. package/browser/query-builder/QueryExpressionMap.js.map +1 -1
  149. package/browser/query-builder/ReturningResultsEntityUpdator.js +2 -2
  150. package/browser/query-builder/ReturningResultsEntityUpdator.js.map +1 -1
  151. package/browser/query-builder/SelectQueryBuilder.d.ts +1 -1
  152. package/browser/query-builder/SelectQueryBuilder.js +25 -4
  153. package/browser/query-builder/SelectQueryBuilder.js.map +1 -1
  154. package/browser/query-builder/UpdateQueryBuilder.js +18 -7
  155. package/browser/query-builder/UpdateQueryBuilder.js.map +1 -1
  156. package/browser/query-runner/BaseQueryRunner.d.ts +10 -0
  157. package/browser/query-runner/BaseQueryRunner.js +25 -1
  158. package/browser/query-runner/BaseQueryRunner.js.map +1 -1
  159. package/browser/query-runner/QueryRunner.d.ts +2 -2
  160. package/browser/query-runner/QueryRunner.js.map +1 -1
  161. package/browser/schema-builder/RdbmsSchemaBuilder.d.ts +6 -2
  162. package/browser/schema-builder/RdbmsSchemaBuilder.js +26 -6
  163. package/browser/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
  164. package/browser/schema-builder/options/TableColumnOptions.d.ts +10 -2
  165. package/browser/schema-builder/options/TableColumnOptions.js.map +1 -1
  166. package/browser/schema-builder/options/TableForeignKeyOptions.d.ts +1 -1
  167. package/browser/schema-builder/options/TableForeignKeyOptions.js.map +1 -1
  168. package/browser/schema-builder/options/TableIndexOptions.d.ts +8 -0
  169. package/browser/schema-builder/options/TableIndexOptions.js.map +1 -1
  170. package/browser/schema-builder/table/TableColumn.d.ts +6 -2
  171. package/browser/schema-builder/table/TableColumn.js +2 -0
  172. package/browser/schema-builder/table/TableColumn.js.map +1 -1
  173. package/browser/schema-builder/table/TableIndex.d.ts +8 -0
  174. package/browser/schema-builder/table/TableIndex.js +3 -0
  175. package/browser/schema-builder/table/TableIndex.js.map +1 -1
  176. package/browser/schema-builder/util/TableUtils.js +1 -0
  177. package/browser/schema-builder/util/TableUtils.js.map +1 -1
  178. package/browser/util/OrmUtils.d.ts +1 -1
  179. package/browser/util/OrmUtils.js +4 -4
  180. package/browser/util/OrmUtils.js.map +1 -1
  181. package/browser/util/escapeRegExp.d.ts +1 -0
  182. package/browser/util/escapeRegExp.js +6 -0
  183. package/browser/util/escapeRegExp.js.map +1 -0
  184. package/cache/DbQueryResultCache.js +9 -1
  185. package/cache/DbQueryResultCache.js.map +1 -1
  186. package/cache/RedisQueryResultCache.js +3 -0
  187. package/cache/RedisQueryResultCache.js.map +1 -1
  188. package/commands/InitCommand.js +1 -1
  189. package/commands/InitCommand.js.map +1 -1
  190. package/commands/MigrationGenerateCommand.js +3 -2
  191. package/commands/MigrationGenerateCommand.js.map +1 -1
  192. package/data-source/DataSourceOptions.d.ts +2 -1
  193. package/data-source/DataSourceOptions.js.map +1 -1
  194. package/decorator/Index.js +1 -0
  195. package/decorator/Index.js.map +1 -1
  196. package/decorator/columns/PrimaryColumn.js +4 -1
  197. package/decorator/columns/PrimaryColumn.js.map +1 -1
  198. package/decorator/options/ColumnOptions.d.ts +10 -2
  199. package/decorator/options/ColumnOptions.js.map +1 -1
  200. package/decorator/options/IndexOptions.d.ts +8 -0
  201. package/decorator/options/IndexOptions.js.map +1 -1
  202. package/decorator/options/JoinColumnOptions.d.ts +4 -0
  203. package/decorator/options/JoinColumnOptions.js.map +1 -1
  204. package/decorator/options/PrimaryGeneratedColumnIdentityOptions.d.ts +4 -0
  205. package/decorator/options/PrimaryGeneratedColumnIdentityOptions.js.map +1 -1
  206. package/decorator/options/PrimaryGeneratedColumnNumericOptions.d.ts +4 -0
  207. package/decorator/options/PrimaryGeneratedColumnNumericOptions.js.map +1 -1
  208. package/decorator/options/PrimaryGeneratedColumnUUIDOptions.d.ts +4 -0
  209. package/decorator/options/PrimaryGeneratedColumnUUIDOptions.js.map +1 -1
  210. package/decorator/relations/JoinColumn.js +1 -0
  211. package/decorator/relations/JoinColumn.js.map +1 -1
  212. package/driver/DriverFactory.js +4 -0
  213. package/driver/DriverFactory.js.map +1 -1
  214. package/driver/aurora-mysql/AuroraMysqlDriver.d.ts +1 -1
  215. package/driver/aurora-mysql/AuroraMysqlDriver.js.map +1 -1
  216. package/driver/cockroachdb/CockroachDriver.js +4 -1
  217. package/driver/cockroachdb/CockroachDriver.js.map +1 -1
  218. package/driver/cockroachdb/CockroachQueryRunner.d.ts +3 -3
  219. package/driver/cockroachdb/CockroachQueryRunner.js +233 -33
  220. package/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  221. package/driver/mongodb/typings.d.ts +5 -5
  222. package/driver/mongodb/typings.js.map +1 -1
  223. package/driver/mysql/MysqlDriver.d.ts +1 -0
  224. package/driver/mysql/MysqlDriver.js +94 -23
  225. package/driver/mysql/MysqlDriver.js.map +1 -1
  226. package/driver/mysql/MysqlQueryRunner.js +219 -24
  227. package/driver/mysql/MysqlQueryRunner.js.map +1 -1
  228. package/driver/oracle/OracleDriver.js +79 -15
  229. package/driver/oracle/OracleDriver.js.map +1 -1
  230. package/driver/oracle/OracleQueryRunner.d.ts +3 -3
  231. package/driver/oracle/OracleQueryRunner.js +216 -42
  232. package/driver/oracle/OracleQueryRunner.js.map +1 -1
  233. package/driver/postgres/PostgresDriver.js +95 -18
  234. package/driver/postgres/PostgresDriver.js.map +1 -1
  235. package/driver/postgres/PostgresQueryRunner.d.ts +3 -3
  236. package/driver/postgres/PostgresQueryRunner.js +159 -59
  237. package/driver/postgres/PostgresQueryRunner.js.map +1 -1
  238. package/driver/spanner/SpannerConnectionCredentialsOptions.d.ts +17 -0
  239. package/driver/spanner/SpannerConnectionCredentialsOptions.js +4 -0
  240. package/driver/spanner/SpannerConnectionCredentialsOptions.js.map +1 -0
  241. package/driver/spanner/SpannerConnectionOptions.d.ts +120 -0
  242. package/driver/spanner/SpannerConnectionOptions.js +4 -0
  243. package/driver/spanner/SpannerConnectionOptions.js.map +1 -0
  244. package/driver/spanner/SpannerDriver.d.ts +241 -0
  245. package/driver/spanner/SpannerDriver.js +608 -0
  246. package/driver/spanner/SpannerDriver.js.map +1 -0
  247. package/driver/spanner/SpannerQueryRunner.d.ts +350 -0
  248. package/driver/spanner/SpannerQueryRunner.js +1449 -0
  249. package/driver/spanner/SpannerQueryRunner.js.map +1 -0
  250. package/driver/sqlite-abstract/AbstractSqliteDriver.js +65 -16
  251. package/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
  252. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +218 -32
  253. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  254. package/driver/sqlserver/SqlServerDriver.d.ts +3 -1
  255. package/driver/sqlserver/SqlServerDriver.js +99 -26
  256. package/driver/sqlserver/SqlServerDriver.js.map +1 -1
  257. package/driver/sqlserver/SqlServerQueryRunner.d.ts +3 -3
  258. package/driver/sqlserver/SqlServerQueryRunner.js +251 -37
  259. package/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  260. package/driver/sqlserver/authentication/AzureActiveDirectoryAccessTokenAuthentication.d.ts +1 -1
  261. package/driver/sqlserver/authentication/AzureActiveDirectoryAccessTokenAuthentication.js.map +1 -1
  262. package/driver/sqlserver/authentication/AzureActiveDirectoryMsiAppServiceAuthentication.d.ts +2 -2
  263. package/driver/sqlserver/authentication/AzureActiveDirectoryMsiAppServiceAuthentication.js.map +1 -1
  264. package/driver/sqlserver/authentication/AzureActiveDirectoryMsiVmAuthentication.d.ts +2 -2
  265. package/driver/sqlserver/authentication/AzureActiveDirectoryMsiVmAuthentication.js.map +1 -1
  266. package/driver/sqlserver/authentication/AzureActiveDirectoryPasswordAuthentication.d.ts +2 -2
  267. package/driver/sqlserver/authentication/AzureActiveDirectoryPasswordAuthentication.js.map +1 -1
  268. package/driver/types/ColumnTypes.d.ts +1 -1
  269. package/driver/types/ColumnTypes.js.map +1 -1
  270. package/driver/types/DatabaseType.d.ts +1 -1
  271. package/driver/types/DatabaseType.js.map +1 -1
  272. package/entity-manager/EntityManager.js +1 -1
  273. package/entity-manager/EntityManager.js.map +1 -1
  274. package/entity-schema/EntitySchemaColumnOptions.d.ts +6 -2
  275. package/entity-schema/EntitySchemaColumnOptions.js.map +1 -1
  276. package/entity-schema/EntitySchemaIndexOptions.d.ts +8 -0
  277. package/entity-schema/EntitySchemaIndexOptions.js.map +1 -1
  278. package/entity-schema/EntitySchemaTransformer.js +3 -0
  279. package/entity-schema/EntitySchemaTransformer.js.map +1 -1
  280. package/find-options/FindOneOptions.d.ts +1 -1
  281. package/find-options/FindOneOptions.js.map +1 -1
  282. package/find-options/FindOptionsUtils.d.ts +2 -1
  283. package/find-options/FindOptionsUtils.js +2 -1
  284. package/find-options/FindOptionsUtils.js.map +1 -1
  285. package/logger/AdvancedConsoleLogger.d.ts +1 -1
  286. package/logger/AdvancedConsoleLogger.js +1 -1
  287. package/logger/AdvancedConsoleLogger.js.map +1 -1
  288. package/metadata/ColumnMetadata.d.ts +10 -2
  289. package/metadata/ColumnMetadata.js +8 -0
  290. package/metadata/ColumnMetadata.js.map +1 -1
  291. package/metadata/EntityMetadata.js +1 -1
  292. package/metadata/EntityMetadata.js.map +1 -1
  293. package/metadata/ForeignKeyMetadata.d.ts +7 -0
  294. package/metadata/ForeignKeyMetadata.js +4 -1
  295. package/metadata/ForeignKeyMetadata.js.map +1 -1
  296. package/metadata/IndexMetadata.d.ts +8 -0
  297. package/metadata/IndexMetadata.js +9 -0
  298. package/metadata/IndexMetadata.js.map +1 -1
  299. package/metadata-args/IndexMetadataArgs.d.ts +8 -0
  300. package/metadata-args/IndexMetadataArgs.js.map +1 -1
  301. package/metadata-args/JoinColumnMetadataArgs.d.ts +4 -0
  302. package/metadata-args/JoinColumnMetadataArgs.js.map +1 -1
  303. package/metadata-builder/EntityMetadataBuilder.js +13 -6
  304. package/metadata-builder/EntityMetadataBuilder.js.map +1 -1
  305. package/metadata-builder/EntityMetadataValidator.js +17 -0
  306. package/metadata-builder/EntityMetadataValidator.js.map +1 -1
  307. package/metadata-builder/JunctionEntityMetadataBuilder.js +18 -6
  308. package/metadata-builder/JunctionEntityMetadataBuilder.js.map +1 -1
  309. package/metadata-builder/RelationJoinColumnBuilder.js +2 -0
  310. package/metadata-builder/RelationJoinColumnBuilder.js.map +1 -1
  311. package/migration/MigrationExecutor.js +1 -1
  312. package/migration/MigrationExecutor.js.map +1 -1
  313. package/package.json +1 -1
  314. package/persistence/SubjectDatabaseEntityLoader.d.ts +1 -1
  315. package/persistence/SubjectDatabaseEntityLoader.js +1 -1
  316. package/persistence/SubjectDatabaseEntityLoader.js.map +1 -1
  317. package/persistence/SubjectExecutor.js +1 -1
  318. package/persistence/SubjectExecutor.js.map +1 -1
  319. package/persistence/subject-builder/CascadesSubjectBuilder.d.ts +1 -1
  320. package/persistence/subject-builder/CascadesSubjectBuilder.js +1 -1
  321. package/persistence/subject-builder/CascadesSubjectBuilder.js.map +1 -1
  322. package/persistence/subject-builder/ManyToManySubjectBuilder.js +1 -1
  323. package/persistence/subject-builder/ManyToManySubjectBuilder.js.map +1 -1
  324. package/persistence/subject-builder/OneToOneInverseSideSubjectBuilder.js +1 -1
  325. package/persistence/subject-builder/OneToOneInverseSideSubjectBuilder.js.map +1 -1
  326. package/platform/PlatformTools.js +5 -0
  327. package/platform/PlatformTools.js.map +1 -1
  328. package/query-builder/InsertQueryBuilder.js +15 -3
  329. package/query-builder/InsertQueryBuilder.js.map +1 -1
  330. package/query-builder/QueryBuilder.d.ts +1 -1
  331. package/query-builder/QueryBuilder.js +15 -15
  332. package/query-builder/QueryBuilder.js.map +1 -1
  333. package/query-builder/QueryExpressionMap.d.ts +2 -2
  334. package/query-builder/QueryExpressionMap.js +1 -1
  335. package/query-builder/QueryExpressionMap.js.map +1 -1
  336. package/query-builder/ReturningResultsEntityUpdator.js +2 -2
  337. package/query-builder/ReturningResultsEntityUpdator.js.map +1 -1
  338. package/query-builder/SelectQueryBuilder.d.ts +1 -1
  339. package/query-builder/SelectQueryBuilder.js +25 -4
  340. package/query-builder/SelectQueryBuilder.js.map +1 -1
  341. package/query-builder/UpdateQueryBuilder.js +18 -7
  342. package/query-builder/UpdateQueryBuilder.js.map +1 -1
  343. package/query-runner/BaseQueryRunner.d.ts +10 -0
  344. package/query-runner/BaseQueryRunner.js +25 -1
  345. package/query-runner/BaseQueryRunner.js.map +1 -1
  346. package/query-runner/QueryRunner.d.ts +2 -2
  347. package/query-runner/QueryRunner.js.map +1 -1
  348. package/schema-builder/RdbmsSchemaBuilder.d.ts +6 -2
  349. package/schema-builder/RdbmsSchemaBuilder.js +26 -6
  350. package/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
  351. package/schema-builder/options/TableColumnOptions.d.ts +10 -2
  352. package/schema-builder/options/TableColumnOptions.js.map +1 -1
  353. package/schema-builder/options/TableForeignKeyOptions.d.ts +1 -1
  354. package/schema-builder/options/TableForeignKeyOptions.js.map +1 -1
  355. package/schema-builder/options/TableIndexOptions.d.ts +8 -0
  356. package/schema-builder/options/TableIndexOptions.js.map +1 -1
  357. package/schema-builder/table/TableColumn.d.ts +6 -2
  358. package/schema-builder/table/TableColumn.js +2 -0
  359. package/schema-builder/table/TableColumn.js.map +1 -1
  360. package/schema-builder/table/TableIndex.d.ts +8 -0
  361. package/schema-builder/table/TableIndex.js +3 -0
  362. package/schema-builder/table/TableIndex.js.map +1 -1
  363. package/schema-builder/util/TableUtils.js +1 -0
  364. package/schema-builder/util/TableUtils.js.map +1 -1
  365. package/util/OrmUtils.d.ts +1 -1
  366. package/util/OrmUtils.js +4 -4
  367. package/util/OrmUtils.js.map +1 -1
  368. package/util/escapeRegExp.d.ts +1 -0
  369. package/util/escapeRegExp.js +10 -0
  370. package/util/escapeRegExp.js.map +1 -0
@@ -0,0 +1,608 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SpannerDriver = void 0;
4
+ const DriverPackageNotInstalledError_1 = require("../../error/DriverPackageNotInstalledError");
5
+ const SpannerQueryRunner_1 = require("./SpannerQueryRunner");
6
+ const DateUtils_1 = require("../../util/DateUtils");
7
+ const PlatformTools_1 = require("../../platform/PlatformTools");
8
+ const RdbmsSchemaBuilder_1 = require("../../schema-builder/RdbmsSchemaBuilder");
9
+ const EntityMetadata_1 = require("../../metadata/EntityMetadata");
10
+ const OrmUtils_1 = require("../../util/OrmUtils");
11
+ const ApplyValueTransformers_1 = require("../../util/ApplyValueTransformers");
12
+ const Table_1 = require("../../schema-builder/table/Table");
13
+ const View_1 = require("../../schema-builder/view/View");
14
+ const TableForeignKey_1 = require("../../schema-builder/table/TableForeignKey");
15
+ /**
16
+ * Organizes communication with Spanner DBMS.
17
+ */
18
+ class SpannerDriver {
19
+ // -------------------------------------------------------------------------
20
+ // Constructor
21
+ // -------------------------------------------------------------------------
22
+ constructor(connection) {
23
+ /**
24
+ * Indicates if replication is enabled.
25
+ */
26
+ this.isReplicated = false;
27
+ /**
28
+ * Indicates if tree tables are supported by this driver.
29
+ */
30
+ this.treeSupport = true;
31
+ /**
32
+ * Represent transaction support by this driver
33
+ */
34
+ this.transactionSupport = "none";
35
+ /**
36
+ * Gets list of supported column data types by a driver.
37
+ *
38
+ * @see https://cloud.google.com/spanner/docs/reference/standard-sql/data-types
39
+ */
40
+ this.supportedDataTypes = [
41
+ "bool",
42
+ "int64",
43
+ "float64",
44
+ "numeric",
45
+ "string",
46
+ "json",
47
+ "bytes",
48
+ "date",
49
+ "timestamp",
50
+ "array",
51
+ ];
52
+ /**
53
+ * Returns type of upsert supported by driver if any
54
+ */
55
+ this.supportedUpsertType = undefined;
56
+ /**
57
+ * Gets list of spatial column data types.
58
+ */
59
+ this.spatialTypes = [];
60
+ /**
61
+ * Gets list of column data types that support length by a driver.
62
+ */
63
+ this.withLengthColumnTypes = ["string", "bytes"];
64
+ /**
65
+ * Gets list of column data types that support length by a driver.
66
+ */
67
+ this.withWidthColumnTypes = [];
68
+ /**
69
+ * Gets list of column data types that support precision by a driver.
70
+ */
71
+ this.withPrecisionColumnTypes = [];
72
+ /**
73
+ * Gets list of column data types that supports scale by a driver.
74
+ */
75
+ this.withScaleColumnTypes = [];
76
+ /**
77
+ * ORM has special columns and we need to know what database column types should be for those columns.
78
+ * Column types are driver dependant.
79
+ */
80
+ this.mappedDataTypes = {
81
+ createDate: "timestamp",
82
+ createDateDefault: "",
83
+ updateDate: "timestamp",
84
+ updateDateDefault: "",
85
+ deleteDate: "timestamp",
86
+ deleteDateNullable: true,
87
+ version: "int64",
88
+ treeLevel: "int64",
89
+ migrationId: "int64",
90
+ migrationName: "string",
91
+ migrationTimestamp: "int64",
92
+ cacheId: "string",
93
+ cacheIdentifier: "string",
94
+ cacheTime: "int64",
95
+ cacheDuration: "int64",
96
+ cacheQuery: "string",
97
+ cacheResult: "string",
98
+ metadataType: "string",
99
+ metadataDatabase: "string",
100
+ metadataSchema: "string",
101
+ metadataTable: "string",
102
+ metadataName: "string",
103
+ metadataValue: "string",
104
+ };
105
+ /**
106
+ * Default values of length, precision and scale depends on column data type.
107
+ * Used in the cases when length/precision/scale is not specified by user.
108
+ */
109
+ this.dataTypeDefaults = {};
110
+ /**
111
+ * Max length allowed by MySQL for aliases.
112
+ * @see https://dev.mysql.com/doc/refman/5.5/en/identifiers.html
113
+ */
114
+ this.maxAliasLength = 63;
115
+ this.cteCapabilities = {
116
+ enabled: true,
117
+ };
118
+ /**
119
+ * Supported returning types
120
+ */
121
+ this._isReturningSqlSupported = {
122
+ delete: false,
123
+ insert: false,
124
+ update: false,
125
+ };
126
+ this.connection = connection;
127
+ this.options = connection.options;
128
+ this.isReplicated = this.options.replication ? true : false;
129
+ // load mysql package
130
+ this.loadDependencies();
131
+ }
132
+ // -------------------------------------------------------------------------
133
+ // Public Methods
134
+ // -------------------------------------------------------------------------
135
+ /**
136
+ * Performs connection to the database.
137
+ */
138
+ async connect() {
139
+ this.instance = this.spanner.instance(this.options.instanceId);
140
+ this.instanceDatabase = this.instance.database(this.options.databaseId);
141
+ }
142
+ /**
143
+ * Makes any action after connection (e.g. create extensions in Postgres driver).
144
+ */
145
+ afterConnect() {
146
+ return Promise.resolve();
147
+ }
148
+ /**
149
+ * Closes connection with the database.
150
+ */
151
+ async disconnect() {
152
+ this.instanceDatabase.close();
153
+ }
154
+ /**
155
+ * Creates a schema builder used to build and sync a schema.
156
+ */
157
+ createSchemaBuilder() {
158
+ return new RdbmsSchemaBuilder_1.RdbmsSchemaBuilder(this.connection);
159
+ }
160
+ /**
161
+ * Creates a query runner used to execute database queries.
162
+ */
163
+ createQueryRunner(mode) {
164
+ return new SpannerQueryRunner_1.SpannerQueryRunner(this, mode);
165
+ }
166
+ /**
167
+ * Replaces parameters in the given sql with special escaping character
168
+ * and an array of parameter names to be passed to a query.
169
+ */
170
+ escapeQueryWithParameters(sql, parameters, nativeParameters) {
171
+ const escapedParameters = Object.keys(nativeParameters).map((key) => nativeParameters[key]);
172
+ if (!parameters || !Object.keys(parameters).length)
173
+ return [sql, escapedParameters];
174
+ sql = sql.replace(/:(\.\.\.)?([A-Za-z0-9_.]+)/g, (full, isArray, key) => {
175
+ if (!parameters.hasOwnProperty(key)) {
176
+ return full;
177
+ }
178
+ let value = parameters[key];
179
+ if (value === null) {
180
+ return full;
181
+ }
182
+ if (isArray) {
183
+ return value
184
+ .map((v) => {
185
+ escapedParameters.push(v);
186
+ return this.createParameter(key, escapedParameters.length - 1);
187
+ })
188
+ .join(", ");
189
+ }
190
+ if (value instanceof Function) {
191
+ return value();
192
+ }
193
+ escapedParameters.push(value);
194
+ return this.createParameter(key, escapedParameters.length - 1);
195
+ }); // todo: make replace only in value statements, otherwise problems
196
+ sql = sql.replace(/([ ]+)?=([ ]+)?:(\.\.\.)?([A-Za-z0-9_.]+)/g, (full, emptySpaceBefore, emptySpaceAfter, isArray, key) => {
197
+ if (!parameters.hasOwnProperty(key)) {
198
+ return full;
199
+ }
200
+ let value = parameters[key];
201
+ if (value === null) {
202
+ return " IS NULL";
203
+ }
204
+ return full;
205
+ });
206
+ return [sql, escapedParameters];
207
+ }
208
+ /**
209
+ * Escapes a column name.
210
+ */
211
+ escape(columnName) {
212
+ return `\`${columnName}\``;
213
+ }
214
+ /**
215
+ * Build full table name with database name, schema name and table name.
216
+ * E.g. myDB.mySchema.myTable
217
+ */
218
+ buildTableName(tableName, schema, database) {
219
+ let tablePath = [tableName];
220
+ if (database) {
221
+ tablePath.unshift(database);
222
+ }
223
+ return tablePath.join(".");
224
+ }
225
+ /**
226
+ * Parse a target table name or other types and return a normalized table definition.
227
+ */
228
+ parseTableName(target) {
229
+ const driverDatabase = this.database;
230
+ const driverSchema = undefined;
231
+ if (target instanceof Table_1.Table || target instanceof View_1.View) {
232
+ const parsed = this.parseTableName(target.name);
233
+ return {
234
+ database: target.database || parsed.database || driverDatabase,
235
+ schema: target.schema || parsed.schema || driverSchema,
236
+ tableName: parsed.tableName,
237
+ };
238
+ }
239
+ if (target instanceof TableForeignKey_1.TableForeignKey) {
240
+ const parsed = this.parseTableName(target.referencedTableName);
241
+ return {
242
+ database: target.referencedDatabase ||
243
+ parsed.database ||
244
+ driverDatabase,
245
+ schema: target.referencedSchema || parsed.schema || driverSchema,
246
+ tableName: parsed.tableName,
247
+ };
248
+ }
249
+ if (target instanceof EntityMetadata_1.EntityMetadata) {
250
+ // EntityMetadata tableName is never a path
251
+ return {
252
+ database: target.database || driverDatabase,
253
+ schema: target.schema || driverSchema,
254
+ tableName: target.tableName,
255
+ };
256
+ }
257
+ const parts = target.split(".");
258
+ return {
259
+ database: (parts.length > 1 ? parts[0] : undefined) || driverDatabase,
260
+ schema: driverSchema,
261
+ tableName: parts.length > 1 ? parts[1] : parts[0],
262
+ };
263
+ }
264
+ /**
265
+ * Prepares given value to a value to be persisted, based on its column type and metadata.
266
+ */
267
+ preparePersistentValue(value, columnMetadata) {
268
+ if (columnMetadata.transformer)
269
+ value = ApplyValueTransformers_1.ApplyValueTransformers.transformTo(columnMetadata.transformer, value);
270
+ if (value === null || value === undefined)
271
+ return value;
272
+ if (columnMetadata.type === "numeric") {
273
+ const lib = this.options.driver || PlatformTools_1.PlatformTools.load("spanner");
274
+ return lib.Spanner.numeric(value);
275
+ }
276
+ else if (columnMetadata.type === "date") {
277
+ return DateUtils_1.DateUtils.mixedDateToDateString(value);
278
+ }
279
+ else if (columnMetadata.type === "json") {
280
+ return value;
281
+ }
282
+ else if (columnMetadata.type === "timestamp" ||
283
+ columnMetadata.type === Date) {
284
+ return DateUtils_1.DateUtils.mixedDateToDate(value);
285
+ }
286
+ return value;
287
+ }
288
+ /**
289
+ * Prepares given value to a value to be persisted, based on its column type or metadata.
290
+ */
291
+ prepareHydratedValue(value, columnMetadata) {
292
+ if (value === null || value === undefined)
293
+ return columnMetadata.transformer
294
+ ? ApplyValueTransformers_1.ApplyValueTransformers.transformFrom(columnMetadata.transformer, value)
295
+ : value;
296
+ if (columnMetadata.type === Boolean || columnMetadata.type === "bool") {
297
+ value = value ? true : false;
298
+ }
299
+ else if (columnMetadata.type === "timestamp" ||
300
+ columnMetadata.type === Date) {
301
+ value = new Date(value);
302
+ }
303
+ else if (columnMetadata.type === "numeric") {
304
+ value = value.value;
305
+ }
306
+ else if (columnMetadata.type === "date") {
307
+ value = DateUtils_1.DateUtils.mixedDateToDateString(value);
308
+ }
309
+ else if (columnMetadata.type === "json") {
310
+ value = typeof value === "string" ? JSON.parse(value) : value;
311
+ }
312
+ if (columnMetadata.transformer)
313
+ value = ApplyValueTransformers_1.ApplyValueTransformers.transformFrom(columnMetadata.transformer, value);
314
+ return value;
315
+ }
316
+ /**
317
+ * Creates a database type from a given column metadata.
318
+ */
319
+ normalizeType(column) {
320
+ if (column.type === Number) {
321
+ return "int64";
322
+ }
323
+ else if (column.type === String || column.type === "uuid") {
324
+ return "string";
325
+ }
326
+ else if (column.type === Date) {
327
+ return "timestamp";
328
+ }
329
+ else if (column.type === Buffer) {
330
+ return "bytes";
331
+ }
332
+ else if (column.type === Boolean) {
333
+ return "bool";
334
+ }
335
+ else {
336
+ return column.type || "";
337
+ }
338
+ }
339
+ /**
340
+ * Normalizes "default" value of the column.
341
+ *
342
+ * Spanner does not support default values.
343
+ */
344
+ normalizeDefault(columnMetadata) {
345
+ return columnMetadata.default === ""
346
+ ? `"${columnMetadata.default}"`
347
+ : `${columnMetadata.default}`;
348
+ }
349
+ /**
350
+ * Normalizes "isUnique" value of the column.
351
+ */
352
+ normalizeIsUnique(column) {
353
+ return column.entityMetadata.indices.some((idx) => idx.isUnique &&
354
+ idx.columns.length === 1 &&
355
+ idx.columns[0] === column);
356
+ }
357
+ /**
358
+ * Returns default column lengths, which is required on column creation.
359
+ */
360
+ getColumnLength(column) {
361
+ if (column.length)
362
+ return column.length.toString();
363
+ if (column.generationStrategy === "uuid")
364
+ return "36";
365
+ switch (column.type) {
366
+ case String:
367
+ case "string":
368
+ case "bytes":
369
+ return "max";
370
+ default:
371
+ return "";
372
+ }
373
+ }
374
+ /**
375
+ * Creates column type definition including length, precision and scale
376
+ */
377
+ createFullType(column) {
378
+ let type = column.type;
379
+ // used 'getColumnLength()' method, because Spanner requires column length for `string` and `bytes` data types
380
+ if (this.getColumnLength(column)) {
381
+ type += `(${this.getColumnLength(column)})`;
382
+ }
383
+ else if (column.width) {
384
+ type += `(${column.width})`;
385
+ }
386
+ else if (column.precision !== null &&
387
+ column.precision !== undefined &&
388
+ column.scale !== null &&
389
+ column.scale !== undefined) {
390
+ type += `(${column.precision},${column.scale})`;
391
+ }
392
+ else if (column.precision !== null &&
393
+ column.precision !== undefined) {
394
+ type += `(${column.precision})`;
395
+ }
396
+ if (column.isArray)
397
+ type = `array<${type}>`;
398
+ return type;
399
+ }
400
+ /**
401
+ * Obtains a new database connection to a master server.
402
+ * Used for replication.
403
+ * If replication is not setup then returns default connection's database connection.
404
+ */
405
+ obtainMasterConnection() {
406
+ return this.instanceDatabase;
407
+ }
408
+ /**
409
+ * Obtains a new database connection to a slave server.
410
+ * Used for replication.
411
+ * If replication is not setup then returns master (default) connection's database connection.
412
+ */
413
+ obtainSlaveConnection() {
414
+ return this.instanceDatabase;
415
+ }
416
+ /**
417
+ * Creates generated map of values generated or returned by database after INSERT query.
418
+ */
419
+ createGeneratedMap(metadata, insertResult, entityIndex) {
420
+ if (!insertResult) {
421
+ return undefined;
422
+ }
423
+ if (insertResult.insertId === undefined) {
424
+ return Object.keys(insertResult).reduce((map, key) => {
425
+ const column = metadata.findColumnWithDatabaseName(key);
426
+ if (column) {
427
+ OrmUtils_1.OrmUtils.mergeDeep(map, column.createValueMap(insertResult[key]));
428
+ // OrmUtils.mergeDeep(map, column.createValueMap(this.prepareHydratedValue(insertResult[key], column))); // TODO: probably should be like there, but fails on enums, fix later
429
+ }
430
+ return map;
431
+ }, {});
432
+ }
433
+ const generatedMap = metadata.generatedColumns.reduce((map, generatedColumn) => {
434
+ let value;
435
+ if (generatedColumn.generationStrategy === "increment" &&
436
+ insertResult.insertId) {
437
+ // NOTE: When multiple rows is inserted by a single INSERT statement,
438
+ // `insertId` is the value generated for the first inserted row only.
439
+ value = insertResult.insertId + entityIndex;
440
+ // } else if (generatedColumn.generationStrategy === "uuid") {
441
+ // console.log("getting db value:", generatedColumn.databaseName);
442
+ // value = generatedColumn.getEntityValue(uuidMap);
443
+ }
444
+ return OrmUtils_1.OrmUtils.mergeDeep(map, generatedColumn.createValueMap(value));
445
+ }, {});
446
+ return Object.keys(generatedMap).length > 0 ? generatedMap : undefined;
447
+ }
448
+ /**
449
+ * Differentiate columns of this table and columns from the given column metadatas columns
450
+ * and returns only changed.
451
+ */
452
+ findChangedColumns(tableColumns, columnMetadatas) {
453
+ return columnMetadatas.filter((columnMetadata) => {
454
+ const tableColumn = tableColumns.find((c) => c.name === columnMetadata.databaseName);
455
+ if (!tableColumn)
456
+ return false; // we don't need new columns, we only need exist and changed
457
+ const isColumnChanged = tableColumn.name !== columnMetadata.databaseName ||
458
+ tableColumn.type !== this.normalizeType(columnMetadata) ||
459
+ tableColumn.length !== this.getColumnLength(columnMetadata) ||
460
+ tableColumn.asExpression !== columnMetadata.asExpression ||
461
+ tableColumn.generatedType !== columnMetadata.generatedType ||
462
+ tableColumn.isPrimary !== columnMetadata.isPrimary ||
463
+ !this.compareNullableValues(columnMetadata, tableColumn) ||
464
+ tableColumn.isUnique !== this.normalizeIsUnique(columnMetadata);
465
+ // DEBUG SECTION
466
+ // if (isColumnChanged) {
467
+ // console.log("table:", columnMetadata.entityMetadata.tableName)
468
+ // console.log(
469
+ // "name:",
470
+ // tableColumn.name,
471
+ // columnMetadata.databaseName,
472
+ // )
473
+ // console.log(
474
+ // "type:",
475
+ // tableColumn.type,
476
+ // this.normalizeType(columnMetadata),
477
+ // )
478
+ // console.log(
479
+ // "length:",
480
+ // tableColumn.length,
481
+ // this.getColumnLength(columnMetadata),
482
+ // )
483
+ // console.log(
484
+ // "asExpression:",
485
+ // tableColumn.asExpression,
486
+ // columnMetadata.asExpression,
487
+ // )
488
+ // console.log(
489
+ // "generatedType:",
490
+ // tableColumn.generatedType,
491
+ // columnMetadata.generatedType,
492
+ // )
493
+ // console.log(
494
+ // "isPrimary:",
495
+ // tableColumn.isPrimary,
496
+ // columnMetadata.isPrimary,
497
+ // )
498
+ // console.log(
499
+ // "isNullable:",
500
+ // tableColumn.isNullable,
501
+ // columnMetadata.isNullable,
502
+ // )
503
+ // console.log(
504
+ // "isUnique:",
505
+ // tableColumn.isUnique,
506
+ // this.normalizeIsUnique(columnMetadata),
507
+ // )
508
+ // console.log("==========================================")
509
+ // }
510
+ return isColumnChanged;
511
+ });
512
+ }
513
+ /**
514
+ * Returns true if driver supports RETURNING / OUTPUT statement.
515
+ */
516
+ isReturningSqlSupported(returningType) {
517
+ return this._isReturningSqlSupported[returningType];
518
+ }
519
+ /**
520
+ * Returns true if driver supports uuid values generation on its own.
521
+ */
522
+ isUUIDGenerationSupported() {
523
+ return false;
524
+ }
525
+ /**
526
+ * Returns true if driver supports fulltext indices.
527
+ */
528
+ isFullTextColumnTypeSupported() {
529
+ return false;
530
+ }
531
+ /**
532
+ * Creates an escaped parameter.
533
+ */
534
+ createParameter(parameterName, index) {
535
+ return "@param" + index;
536
+ }
537
+ // -------------------------------------------------------------------------
538
+ // Protected Methods
539
+ // -------------------------------------------------------------------------
540
+ /**
541
+ * Loads all driver dependencies.
542
+ */
543
+ loadDependencies() {
544
+ try {
545
+ const lib = this.options.driver || PlatformTools_1.PlatformTools.load("spanner");
546
+ this.spanner = new lib.Spanner({
547
+ projectId: this.options.projectId,
548
+ });
549
+ }
550
+ catch (e) {
551
+ console.error(e);
552
+ throw new DriverPackageNotInstalledError_1.DriverPackageNotInstalledError("Spanner", "@google-cloud/spanner");
553
+ }
554
+ }
555
+ compareNullableValues(columnMetadata, tableColumn) {
556
+ // Spanner does not support NULL/NOT NULL expressions for generated columns
557
+ if (columnMetadata.generatedType) {
558
+ return true;
559
+ }
560
+ return columnMetadata.isNullable === tableColumn.isNullable;
561
+ }
562
+ /**
563
+ * Checks if "DEFAULT" values in the column metadata and in the database are equal.
564
+ */
565
+ compareDefaultValues(columnMetadataValue, databaseValue) {
566
+ if (typeof columnMetadataValue === "string" &&
567
+ typeof databaseValue === "string") {
568
+ // we need to cut out "'" because in mysql we can understand returned value is a string or a function
569
+ // as result compare cannot understand if default is really changed or not
570
+ columnMetadataValue = columnMetadataValue.replace(/^'+|'+$/g, "");
571
+ databaseValue = databaseValue.replace(/^'+|'+$/g, "");
572
+ }
573
+ return columnMetadataValue === databaseValue;
574
+ }
575
+ /**
576
+ * If parameter is a datetime function, e.g. "CURRENT_TIMESTAMP", normalizes it.
577
+ * Otherwise returns original input.
578
+ */
579
+ normalizeDatetimeFunction(value) {
580
+ if (!value)
581
+ return value;
582
+ // check if input is datetime function
583
+ const isDatetimeFunction = value.toUpperCase().indexOf("CURRENT_TIMESTAMP") !== -1 ||
584
+ value.toUpperCase().indexOf("NOW") !== -1;
585
+ if (isDatetimeFunction) {
586
+ // extract precision, e.g. "(3)"
587
+ const precision = value.match(/\(\d+\)/);
588
+ return precision
589
+ ? `CURRENT_TIMESTAMP${precision[0]}`
590
+ : "CURRENT_TIMESTAMP";
591
+ }
592
+ else {
593
+ return value;
594
+ }
595
+ }
596
+ /**
597
+ * Escapes a given comment.
598
+ */
599
+ escapeComment(comment) {
600
+ if (!comment)
601
+ return comment;
602
+ comment = comment.replace(/\u0000/g, ""); // Null bytes aren't allowed in comments
603
+ return comment;
604
+ }
605
+ }
606
+ exports.SpannerDriver = SpannerDriver;
607
+
608
+ //# sourceMappingURL=SpannerDriver.js.map