orcaq 1.0.20

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 (1018) hide show
  1. package/.output/nitro.json +15 -0
  2. package/.output/public/_nuxt/8qASMGdV.js +1 -0
  3. package/.output/public/_nuxt/9lJACZIQ.js +19 -0
  4. package/.output/public/_nuxt/B2DnNiWd.js +1 -0
  5. package/.output/public/_nuxt/B6E6ObS_.js +8 -0
  6. package/.output/public/_nuxt/BH83_dXo.js +39 -0
  7. package/.output/public/_nuxt/BIKqrFbQ.js +1 -0
  8. package/.output/public/_nuxt/BNjPC06x.js +1 -0
  9. package/.output/public/_nuxt/BPQ-Pz1w.js +39 -0
  10. package/.output/public/_nuxt/BRpgKkVT.js +51 -0
  11. package/.output/public/_nuxt/BTCLPbPY.js +4 -0
  12. package/.output/public/_nuxt/BUV-RarV.js +1 -0
  13. package/.output/public/_nuxt/Bh6RgYlO.js +1 -0
  14. package/.output/public/_nuxt/Bq3cyzOD.js +1 -0
  15. package/.output/public/_nuxt/Bt9sU68B.js +9 -0
  16. package/.output/public/_nuxt/BwpH2ZxJ.js +1 -0
  17. package/.output/public/_nuxt/C25Tmn1m.js +1 -0
  18. package/.output/public/_nuxt/C2HlI1ss.js +1 -0
  19. package/.output/public/_nuxt/CU3ZV9iV.js +1 -0
  20. package/.output/public/_nuxt/CbcyysXi.js +1 -0
  21. package/.output/public/_nuxt/CepyvMhE.js +1 -0
  22. package/.output/public/_nuxt/CrgoNCm2.js +2 -0
  23. package/.output/public/_nuxt/CuBKbBH_.js +1 -0
  24. package/.output/public/_nuxt/CulD8qYQ.js +193 -0
  25. package/.output/public/_nuxt/CustomEdge.BNBpjEHb.css +1 -0
  26. package/.output/public/_nuxt/CylkLpwm.js +1 -0
  27. package/.output/public/_nuxt/D-bWLYHw.js +1 -0
  28. package/.output/public/_nuxt/D-zecHND.js +1 -0
  29. package/.output/public/_nuxt/D8vj6kFe.js +160 -0
  30. package/.output/public/_nuxt/DIETYtCL.js +1 -0
  31. package/.output/public/_nuxt/DJ4vUzxS.js +1 -0
  32. package/.output/public/_nuxt/DK-itzXx.js +8 -0
  33. package/.output/public/_nuxt/DL3T5jYo.js +3867 -0
  34. package/.output/public/_nuxt/DUsuhY9i.js +1 -0
  35. package/.output/public/_nuxt/DXV2HFBA.js +224 -0
  36. package/.output/public/_nuxt/Dh2zppOR.js +1 -0
  37. package/.output/public/_nuxt/DlAUqK2U.js +1 -0
  38. package/.output/public/_nuxt/DlmSeCnw.js +5 -0
  39. package/.output/public/_nuxt/DswTpYG4.js +1 -0
  40. package/.output/public/_nuxt/DynamicTable.DJeANwbG.css +1 -0
  41. package/.output/public/_nuxt/G830WtVn.js +1 -0
  42. package/.output/public/_nuxt/ICwM1E4-.js +15 -0
  43. package/.output/public/_nuxt/QZbJy9YW.js +31 -0
  44. package/.output/public/_nuxt/QuickQueryTable.DS_ON57S.css +1 -0
  45. package/.output/public/_nuxt/UXhX8z2W.js +1 -0
  46. package/.output/public/_nuxt/WrapperErdDiagram.DwhUd9Wr.css +1 -0
  47. package/.output/public/_nuxt/_fileId_.DmPfwyyD.css +1 -0
  48. package/.output/public/_nuxt/_tabViewId_.9Axt3zoi.css +1 -0
  49. package/.output/public/_nuxt/builds/latest.json +1 -0
  50. package/.output/public/_nuxt/builds/meta/6364d5cf-4642-479f-ba12-6440c56702af.json +1 -0
  51. package/.output/public/_nuxt/default.DixIpIal.css +1 -0
  52. package/.output/public/_nuxt/entry.GqPNPe1e.css +1 -0
  53. package/.output/public/_nuxt/index.CrXmf4gr.css +1 -0
  54. package/.output/public/_nuxt/ivUnXl9B.js +1 -0
  55. package/.output/public/_nuxt/pAheHeBV.js +36 -0
  56. package/.output/public/_nuxt/s5fCn4j5.js +1 -0
  57. package/.output/public/favicon.ico +0 -0
  58. package/.output/public/logo.png +0 -0
  59. package/.output/public/manifest.json +25 -0
  60. package/.output/public/robots.txt +1 -0
  61. package/.output/public/vite.svg +1 -0
  62. package/.output/server/chunks/_/error-500.mjs +8 -0
  63. package/.output/server/chunks/_/error-500.mjs.map +1 -0
  64. package/.output/server/chunks/build/client.manifest.mjs +773 -0
  65. package/.output/server/chunks/build/client.manifest.mjs.map +1 -0
  66. package/.output/server/chunks/nitro/nitro.mjs +6432 -0
  67. package/.output/server/chunks/nitro/nitro.mjs.map +1 -0
  68. package/.output/server/chunks/routes/api/ai/chat.mjs +77 -0
  69. package/.output/server/chunks/routes/api/ai/chat.mjs.map +1 -0
  70. package/.output/server/chunks/routes/api/execute-bulk-delete.mjs +100 -0
  71. package/.output/server/chunks/routes/api/execute-bulk-delete.mjs.map +1 -0
  72. package/.output/server/chunks/routes/api/execute-bulk-update.mjs +105 -0
  73. package/.output/server/chunks/routes/api/execute-bulk-update.mjs.map +1 -0
  74. package/.output/server/chunks/routes/api/execute.mjs +47 -0
  75. package/.output/server/chunks/routes/api/execute.mjs.map +1 -0
  76. package/.output/server/chunks/routes/api/get-one-function.mjs +28 -0
  77. package/.output/server/chunks/routes/api/get-one-function.mjs.map +1 -0
  78. package/.output/server/chunks/routes/api/get-one-table.mjs +180 -0
  79. package/.output/server/chunks/routes/api/get-one-table.mjs.map +1 -0
  80. package/.output/server/chunks/routes/api/get-over-view-function.mjs +41 -0
  81. package/.output/server/chunks/routes/api/get-over-view-function.mjs.map +1 -0
  82. package/.output/server/chunks/routes/api/get-over-view-tables.mjs +53 -0
  83. package/.output/server/chunks/routes/api/get-over-view-tables.mjs.map +1 -0
  84. package/.output/server/chunks/routes/api/get-reverse-table-schemas.mjs +112 -0
  85. package/.output/server/chunks/routes/api/get-reverse-table-schemas.mjs.map +1 -0
  86. package/.output/server/chunks/routes/api/get-schema-meta-data.mjs +152 -0
  87. package/.output/server/chunks/routes/api/get-schema-meta-data.mjs.map +1 -0
  88. package/.output/server/chunks/routes/api/get-table-size.mjs +49 -0
  89. package/.output/server/chunks/routes/api/get-table-size.mjs.map +1 -0
  90. package/.output/server/chunks/routes/api/get-table-structure.mjs +111 -0
  91. package/.output/server/chunks/routes/api/get-table-structure.mjs.map +1 -0
  92. package/.output/server/chunks/routes/api/get-tables.mjs +287 -0
  93. package/.output/server/chunks/routes/api/get-tables.mjs.map +1 -0
  94. package/.output/server/chunks/routes/api/getMetricMonitor.mjs +46 -0
  95. package/.output/server/chunks/routes/api/getMetricMonitor.mjs.map +1 -0
  96. package/.output/server/chunks/routes/api/managment-connection/health-check.mjs +28 -0
  97. package/.output/server/chunks/routes/api/managment-connection/health-check.mjs.map +1 -0
  98. package/.output/server/chunks/routes/api/raw-execute.mjs +48 -0
  99. package/.output/server/chunks/routes/api/raw-execute.mjs.map +1 -0
  100. package/.output/server/chunks/routes/renderer.mjs +316 -0
  101. package/.output/server/chunks/routes/renderer.mjs.map +1 -0
  102. package/.output/server/chunks/virtual/_virtual_spa-template.mjs +4 -0
  103. package/.output/server/chunks/virtual/_virtual_spa-template.mjs.map +1 -0
  104. package/.output/server/index.mjs +14 -0
  105. package/.output/server/index.mjs.map +1 -0
  106. package/.output/server/node_modules/@ai-sdk/anthropic/dist/index.mjs +4374 -0
  107. package/.output/server/node_modules/@ai-sdk/anthropic/package.json +74 -0
  108. package/.output/server/node_modules/@ai-sdk/gateway/dist/index.mjs +1082 -0
  109. package/.output/server/node_modules/@ai-sdk/gateway/package.json +69 -0
  110. package/.output/server/node_modules/@ai-sdk/google/dist/index.mjs +2007 -0
  111. package/.output/server/node_modules/@ai-sdk/google/package.json +74 -0
  112. package/.output/server/node_modules/@ai-sdk/openai/dist/index.mjs +5956 -0
  113. package/.output/server/node_modules/@ai-sdk/openai/package.json +74 -0
  114. package/.output/server/node_modules/@ai-sdk/openai-compatible/dist/index.mjs +1551 -0
  115. package/.output/server/node_modules/@ai-sdk/openai-compatible/package.json +74 -0
  116. package/.output/server/node_modules/@ai-sdk/provider/dist/index.mjs +377 -0
  117. package/.output/server/node_modules/@ai-sdk/provider/package.json +57 -0
  118. package/.output/server/node_modules/@ai-sdk/provider-utils/dist/index.mjs +2549 -0
  119. package/.output/server/node_modules/@ai-sdk/provider-utils/package.json +75 -0
  120. package/.output/server/node_modules/@ai-sdk/xai/dist/index.mjs +2214 -0
  121. package/.output/server/node_modules/@ai-sdk/xai/package.json +68 -0
  122. package/.output/server/node_modules/@babel/parser/lib/index.js +14246 -0
  123. package/.output/server/node_modules/@babel/parser/package.json +50 -0
  124. package/.output/server/node_modules/@iconify/utils/lib/colors/index.mjs +350 -0
  125. package/.output/server/node_modules/@iconify/utils/lib/colors/keywords.mjs +188 -0
  126. package/.output/server/node_modules/@iconify/utils/lib/css/common.mjs +90 -0
  127. package/.output/server/node_modules/@iconify/utils/lib/css/format.mjs +38 -0
  128. package/.output/server/node_modules/@iconify/utils/lib/css/icon.mjs +76 -0
  129. package/.output/server/node_modules/@iconify/utils/lib/css/icons.mjs +168 -0
  130. package/.output/server/node_modules/@iconify/utils/lib/customisations/bool.mjs +22 -0
  131. package/.output/server/node_modules/@iconify/utils/lib/customisations/defaults.mjs +14 -0
  132. package/.output/server/node_modules/@iconify/utils/lib/customisations/flip.mjs +16 -0
  133. package/.output/server/node_modules/@iconify/utils/lib/customisations/merge.mjs +22 -0
  134. package/.output/server/node_modules/@iconify/utils/lib/customisations/rotate.mjs +33 -0
  135. package/.output/server/node_modules/@iconify/utils/lib/emoji/cleanup.mjs +51 -0
  136. package/.output/server/node_modules/@iconify/utils/lib/emoji/convert.mjs +84 -0
  137. package/.output/server/node_modules/@iconify/utils/lib/emoji/data.mjs +16 -0
  138. package/.output/server/node_modules/@iconify/utils/lib/emoji/format.mjs +44 -0
  139. package/.output/server/node_modules/@iconify/utils/lib/emoji/parse.mjs +58 -0
  140. package/.output/server/node_modules/@iconify/utils/lib/emoji/regex/base.mjs +231 -0
  141. package/.output/server/node_modules/@iconify/utils/lib/emoji/regex/create.mjs +31 -0
  142. package/.output/server/node_modules/@iconify/utils/lib/emoji/regex/numbers.mjs +164 -0
  143. package/.output/server/node_modules/@iconify/utils/lib/emoji/regex/similar.mjs +216 -0
  144. package/.output/server/node_modules/@iconify/utils/lib/emoji/regex/tree.mjs +113 -0
  145. package/.output/server/node_modules/@iconify/utils/lib/emoji/replace/find.mjs +104 -0
  146. package/.output/server/node_modules/@iconify/utils/lib/emoji/replace/replace.mjs +34 -0
  147. package/.output/server/node_modules/@iconify/utils/lib/emoji/test/components.mjs +75 -0
  148. package/.output/server/node_modules/@iconify/utils/lib/emoji/test/missing.mjs +97 -0
  149. package/.output/server/node_modules/@iconify/utils/lib/emoji/test/name.mjs +54 -0
  150. package/.output/server/node_modules/@iconify/utils/lib/emoji/test/parse.mjs +97 -0
  151. package/.output/server/node_modules/@iconify/utils/lib/emoji/test/similar.mjs +45 -0
  152. package/.output/server/node_modules/@iconify/utils/lib/emoji/test/tree.mjs +105 -0
  153. package/.output/server/node_modules/@iconify/utils/lib/emoji/test/variations.mjs +54 -0
  154. package/.output/server/node_modules/@iconify/utils/lib/icon/defaults.mjs +24 -0
  155. package/.output/server/node_modules/@iconify/utils/lib/icon/merge.mjs +20 -0
  156. package/.output/server/node_modules/@iconify/utils/lib/icon/name.mjs +53 -0
  157. package/.output/server/node_modules/@iconify/utils/lib/icon/square.mjs +23 -0
  158. package/.output/server/node_modules/@iconify/utils/lib/icon/transformations.mjs +16 -0
  159. package/.output/server/node_modules/@iconify/utils/lib/icon-set/convert-info.mjs +182 -0
  160. package/.output/server/node_modules/@iconify/utils/lib/icon-set/expand.mjs +22 -0
  161. package/.output/server/node_modules/@iconify/utils/lib/icon-set/get-icon.mjs +28 -0
  162. package/.output/server/node_modules/@iconify/utils/lib/icon-set/get-icons.mjs +46 -0
  163. package/.output/server/node_modules/@iconify/utils/lib/icon-set/minify.mjs +66 -0
  164. package/.output/server/node_modules/@iconify/utils/lib/icon-set/parse.mjs +51 -0
  165. package/.output/server/node_modules/@iconify/utils/lib/icon-set/tree.mjs +23 -0
  166. package/.output/server/node_modules/@iconify/utils/lib/icon-set/validate-basic.mjs +62 -0
  167. package/.output/server/node_modules/@iconify/utils/lib/icon-set/validate.mjs +161 -0
  168. package/.output/server/node_modules/@iconify/utils/lib/index.mjs +64 -0
  169. package/.output/server/node_modules/@iconify/utils/lib/loader/custom.mjs +50 -0
  170. package/.output/server/node_modules/@iconify/utils/lib/loader/loader.mjs +59 -0
  171. package/.output/server/node_modules/@iconify/utils/lib/loader/modern.mjs +80 -0
  172. package/.output/server/node_modules/@iconify/utils/lib/loader/utils.mjs +92 -0
  173. package/.output/server/node_modules/@iconify/utils/lib/misc/objects.mjs +30 -0
  174. package/.output/server/node_modules/@iconify/utils/lib/misc/strings.mjs +17 -0
  175. package/.output/server/node_modules/@iconify/utils/lib/misc/title.mjs +5 -0
  176. package/.output/server/node_modules/@iconify/utils/lib/svg/build.mjs +119 -0
  177. package/.output/server/node_modules/@iconify/utils/lib/svg/defs.mjs +30 -0
  178. package/.output/server/node_modules/@iconify/utils/lib/svg/encode-svg-for-css.mjs +20 -0
  179. package/.output/server/node_modules/@iconify/utils/lib/svg/html.mjs +9 -0
  180. package/.output/server/node_modules/@iconify/utils/lib/svg/id.mjs +28 -0
  181. package/.output/server/node_modules/@iconify/utils/lib/svg/inner-html.mjs +19 -0
  182. package/.output/server/node_modules/@iconify/utils/lib/svg/parse.mjs +83 -0
  183. package/.output/server/node_modules/@iconify/utils/lib/svg/pretty.mjs +70 -0
  184. package/.output/server/node_modules/@iconify/utils/lib/svg/size.mjs +40 -0
  185. package/.output/server/node_modules/@iconify/utils/lib/svg/trim.mjs +5 -0
  186. package/.output/server/node_modules/@iconify/utils/lib/svg/url.mjs +11 -0
  187. package/.output/server/node_modules/@iconify/utils/lib/svg/viewbox.mjs +8 -0
  188. package/.output/server/node_modules/@iconify/utils/package.json +447 -0
  189. package/.output/server/node_modules/@ioredis/commands/built/commands.json +2447 -0
  190. package/.output/server/node_modules/@ioredis/commands/built/index.js +208 -0
  191. package/.output/server/node_modules/@ioredis/commands/package.json +52 -0
  192. package/.output/server/node_modules/@opentelemetry/api/build/src/api/context.js +81 -0
  193. package/.output/server/node_modules/@opentelemetry/api/build/src/api/diag.js +93 -0
  194. package/.output/server/node_modules/@opentelemetry/api/build/src/api/metrics.js +61 -0
  195. package/.output/server/node_modules/@opentelemetry/api/build/src/api/propagation.js +89 -0
  196. package/.output/server/node_modules/@opentelemetry/api/build/src/api/trace.js +79 -0
  197. package/.output/server/node_modules/@opentelemetry/api/build/src/baggage/context-helpers.js +63 -0
  198. package/.output/server/node_modules/@opentelemetry/api/build/src/baggage/internal/baggage-impl.js +55 -0
  199. package/.output/server/node_modules/@opentelemetry/api/build/src/baggage/internal/symbol.js +23 -0
  200. package/.output/server/node_modules/@opentelemetry/api/build/src/baggage/utils.js +51 -0
  201. package/.output/server/node_modules/@opentelemetry/api/build/src/context/NoopContextManager.js +38 -0
  202. package/.output/server/node_modules/@opentelemetry/api/build/src/context/context.js +55 -0
  203. package/.output/server/node_modules/@opentelemetry/api/build/src/context-api.js +24 -0
  204. package/.output/server/node_modules/@opentelemetry/api/build/src/diag/ComponentLogger.js +59 -0
  205. package/.output/server/node_modules/@opentelemetry/api/build/src/diag/consoleLogger.js +57 -0
  206. package/.output/server/node_modules/@opentelemetry/api/build/src/diag/internal/logLevelLogger.js +45 -0
  207. package/.output/server/node_modules/@opentelemetry/api/build/src/diag/types.js +44 -0
  208. package/.output/server/node_modules/@opentelemetry/api/build/src/diag-api.js +29 -0
  209. package/.output/server/node_modules/@opentelemetry/api/build/src/index.js +81 -0
  210. package/.output/server/node_modules/@opentelemetry/api/build/src/internal/global-utils.js +64 -0
  211. package/.output/server/node_modules/@opentelemetry/api/build/src/internal/semver.js +122 -0
  212. package/.output/server/node_modules/@opentelemetry/api/build/src/metrics/Metric.js +25 -0
  213. package/.output/server/node_modules/@opentelemetry/api/build/src/metrics/NoopMeter.js +127 -0
  214. package/.output/server/node_modules/@opentelemetry/api/build/src/metrics/NoopMeterProvider.js +31 -0
  215. package/.output/server/node_modules/@opentelemetry/api/build/src/metrics-api.js +24 -0
  216. package/.output/server/node_modules/@opentelemetry/api/build/src/platform/index.js +29 -0
  217. package/.output/server/node_modules/@opentelemetry/api/build/src/platform/node/globalThis.js +22 -0
  218. package/.output/server/node_modules/@opentelemetry/api/build/src/platform/node/index.js +29 -0
  219. package/.output/server/node_modules/@opentelemetry/api/build/src/propagation/NoopTextMapPropagator.js +34 -0
  220. package/.output/server/node_modules/@opentelemetry/api/build/src/propagation/TextMapPropagator.js +41 -0
  221. package/.output/server/node_modules/@opentelemetry/api/build/src/propagation-api.js +24 -0
  222. package/.output/server/node_modules/@opentelemetry/api/build/src/trace/NonRecordingSpan.js +69 -0
  223. package/.output/server/node_modules/@opentelemetry/api/build/src/trace/NoopTracer.js +75 -0
  224. package/.output/server/node_modules/@opentelemetry/api/build/src/trace/NoopTracerProvider.js +32 -0
  225. package/.output/server/node_modules/@opentelemetry/api/build/src/trace/ProxyTracer.js +55 -0
  226. package/.output/server/node_modules/@opentelemetry/api/build/src/trace/ProxyTracerProvider.js +54 -0
  227. package/.output/server/node_modules/@opentelemetry/api/build/src/trace/SamplingResult.js +42 -0
  228. package/.output/server/node_modules/@opentelemetry/api/build/src/trace/context-utils.js +82 -0
  229. package/.output/server/node_modules/@opentelemetry/api/build/src/trace/internal/tracestate-impl.js +103 -0
  230. package/.output/server/node_modules/@opentelemetry/api/build/src/trace/internal/tracestate-validators.js +46 -0
  231. package/.output/server/node_modules/@opentelemetry/api/build/src/trace/internal/utils.js +24 -0
  232. package/.output/server/node_modules/@opentelemetry/api/build/src/trace/invalid-span-constants.js +27 -0
  233. package/.output/server/node_modules/@opentelemetry/api/build/src/trace/span_kind.js +46 -0
  234. package/.output/server/node_modules/@opentelemetry/api/build/src/trace/spancontext-utils.js +49 -0
  235. package/.output/server/node_modules/@opentelemetry/api/build/src/trace/status.js +23 -0
  236. package/.output/server/node_modules/@opentelemetry/api/build/src/trace/trace_flags.js +26 -0
  237. package/.output/server/node_modules/@opentelemetry/api/build/src/trace-api.js +24 -0
  238. package/.output/server/node_modules/@opentelemetry/api/build/src/version.js +21 -0
  239. package/.output/server/node_modules/@opentelemetry/api/package.json +113 -0
  240. package/.output/server/node_modules/@sqltools/formatter/lib/core/Formatter.js +234 -0
  241. package/.output/server/node_modules/@sqltools/formatter/lib/core/Indentation.js +42 -0
  242. package/.output/server/node_modules/@sqltools/formatter/lib/core/InlineBlock.js +60 -0
  243. package/.output/server/node_modules/@sqltools/formatter/lib/core/Params.js +21 -0
  244. package/.output/server/node_modules/@sqltools/formatter/lib/core/Tokenizer.js +272 -0
  245. package/.output/server/node_modules/@sqltools/formatter/lib/core/escapeRegExp.js +10 -0
  246. package/.output/server/node_modules/@sqltools/formatter/lib/core/last.js +7 -0
  247. package/.output/server/node_modules/@sqltools/formatter/lib/core/types.js +22 -0
  248. package/.output/server/node_modules/@sqltools/formatter/lib/languages/Db2Formatter.js +585 -0
  249. package/.output/server/node_modules/@sqltools/formatter/lib/languages/N1qlFormatter.js +257 -0
  250. package/.output/server/node_modules/@sqltools/formatter/lib/languages/PlSqlFormatter.js +459 -0
  251. package/.output/server/node_modules/@sqltools/formatter/lib/languages/StandardSqlFormatter.js +369 -0
  252. package/.output/server/node_modules/@sqltools/formatter/lib/languages/utils/abstract.js +23 -0
  253. package/.output/server/node_modules/@sqltools/formatter/lib/sqlFormatter.js +34 -0
  254. package/.output/server/node_modules/@sqltools/formatter/package.json +59 -0
  255. package/.output/server/node_modules/@standard-schema/spec/dist/index.js +0 -0
  256. package/.output/server/node_modules/@standard-schema/spec/package.json +52 -0
  257. package/.output/server/node_modules/@vercel/oidc/dist/auth-config.js +84 -0
  258. package/.output/server/node_modules/@vercel/oidc/dist/get-context.js +34 -0
  259. package/.output/server/node_modules/@vercel/oidc/dist/get-vercel-oidc-token.js +80 -0
  260. package/.output/server/node_modules/@vercel/oidc/dist/index.js +33 -0
  261. package/.output/server/node_modules/@vercel/oidc/dist/oauth.js +88 -0
  262. package/.output/server/node_modules/@vercel/oidc/dist/token-error.js +40 -0
  263. package/.output/server/node_modules/@vercel/oidc/dist/token-io.js +78 -0
  264. package/.output/server/node_modules/@vercel/oidc/dist/token-util.js +198 -0
  265. package/.output/server/node_modules/@vercel/oidc/dist/token.js +53 -0
  266. package/.output/server/node_modules/@vercel/oidc/package.json +52 -0
  267. package/.output/server/node_modules/@vue/compiler-core/dist/compiler-core.cjs.prod.js +6690 -0
  268. package/.output/server/node_modules/@vue/compiler-core/package.json +58 -0
  269. package/.output/server/node_modules/@vue/compiler-dom/dist/compiler-dom.cjs.prod.js +686 -0
  270. package/.output/server/node_modules/@vue/compiler-dom/package.json +57 -0
  271. package/.output/server/node_modules/@vue/compiler-ssr/dist/compiler-ssr.cjs.js +1404 -0
  272. package/.output/server/node_modules/@vue/compiler-ssr/package.json +34 -0
  273. package/.output/server/node_modules/@vue/reactivity/dist/reactivity.cjs.prod.js +1789 -0
  274. package/.output/server/node_modules/@vue/reactivity/package.json +55 -0
  275. package/.output/server/node_modules/@vue/runtime-core/dist/runtime-core.cjs.prod.js +6654 -0
  276. package/.output/server/node_modules/@vue/runtime-core/package.json +52 -0
  277. package/.output/server/node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.prod.js +1669 -0
  278. package/.output/server/node_modules/@vue/runtime-dom/package.json +60 -0
  279. package/.output/server/node_modules/@vue/server-renderer/dist/server-renderer.cjs.prod.js +857 -0
  280. package/.output/server/node_modules/@vue/server-renderer/package.json +55 -0
  281. package/.output/server/node_modules/@vue/shared/dist/shared.cjs.prod.js +594 -0
  282. package/.output/server/node_modules/@vue/shared/package.json +47 -0
  283. package/.output/server/node_modules/ai/dist/index.mjs +12363 -0
  284. package/.output/server/node_modules/ai/package.json +106 -0
  285. package/.output/server/node_modules/ansis/index.js +1 -0
  286. package/.output/server/node_modules/ansis/package.json +28 -0
  287. package/.output/server/node_modules/app-root-path/index.js +4 -0
  288. package/.output/server/node_modules/app-root-path/lib/app-root-path.js +30 -0
  289. package/.output/server/node_modules/app-root-path/lib/resolve.js +128 -0
  290. package/.output/server/node_modules/app-root-path/package.json +66 -0
  291. package/.output/server/node_modules/balanced-match/index.js +62 -0
  292. package/.output/server/node_modules/balanced-match/package.json +48 -0
  293. package/.output/server/node_modules/bindings/bindings.js +221 -0
  294. package/.output/server/node_modules/bindings/package.json +28 -0
  295. package/.output/server/node_modules/brace-expansion/index.js +203 -0
  296. package/.output/server/node_modules/brace-expansion/package.json +46 -0
  297. package/.output/server/node_modules/cluster-key-slot/lib/index.js +166 -0
  298. package/.output/server/node_modules/cluster-key-slot/package.json +56 -0
  299. package/.output/server/node_modules/consola/dist/chunks/prompt.mjs +280 -0
  300. package/.output/server/node_modules/consola/dist/core.mjs +512 -0
  301. package/.output/server/node_modules/consola/dist/index.mjs +651 -0
  302. package/.output/server/node_modules/consola/dist/shared/consola.DRwqZj3T.mjs +72 -0
  303. package/.output/server/node_modules/consola/dist/shared/consola.DXBYu-KD.mjs +288 -0
  304. package/.output/server/node_modules/consola/package.json +136 -0
  305. package/.output/server/node_modules/dayjs/dayjs.min.js +1 -0
  306. package/.output/server/node_modules/dayjs/package.json +84 -0
  307. package/.output/server/node_modules/debug/package.json +65 -0
  308. package/.output/server/node_modules/debug/src/browser.js +272 -0
  309. package/.output/server/node_modules/debug/src/common.js +292 -0
  310. package/.output/server/node_modules/debug/src/index.js +10 -0
  311. package/.output/server/node_modules/debug/src/node.js +263 -0
  312. package/.output/server/node_modules/dedent/dist/dedent.js +73 -0
  313. package/.output/server/node_modules/dedent/package.json +119 -0
  314. package/.output/server/node_modules/denque/index.js +481 -0
  315. package/.output/server/node_modules/denque/package.json +58 -0
  316. package/.output/server/node_modules/devalue/index.js +3 -0
  317. package/.output/server/node_modules/devalue/package.json +34 -0
  318. package/.output/server/node_modules/devalue/src/base64.js +110 -0
  319. package/.output/server/node_modules/devalue/src/constants.js +6 -0
  320. package/.output/server/node_modules/devalue/src/parse.js +160 -0
  321. package/.output/server/node_modules/devalue/src/stringify.js +232 -0
  322. package/.output/server/node_modules/devalue/src/uneval.js +351 -0
  323. package/.output/server/node_modules/devalue/src/utils.js +113 -0
  324. package/.output/server/node_modules/dotenv/lib/main.js +361 -0
  325. package/.output/server/node_modules/dotenv/package.json +61 -0
  326. package/.output/server/node_modules/entities/lib/decode.js +536 -0
  327. package/.output/server/node_modules/entities/lib/decode_codepoint.js +76 -0
  328. package/.output/server/node_modules/entities/lib/generated/decode-data-html.js +9 -0
  329. package/.output/server/node_modules/entities/lib/generated/decode-data-xml.js +9 -0
  330. package/.output/server/node_modules/entities/package.json +90 -0
  331. package/.output/server/node_modules/estree-walker/dist/umd/estree-walker.js +344 -0
  332. package/.output/server/node_modules/estree-walker/package.json +37 -0
  333. package/.output/server/node_modules/eventsource-parser/dist/index.js +106 -0
  334. package/.output/server/node_modules/eventsource-parser/dist/stream.js +29 -0
  335. package/.output/server/node_modules/eventsource-parser/package.json +115 -0
  336. package/.output/server/node_modules/file-uri-to-path/index.js +66 -0
  337. package/.output/server/node_modules/file-uri-to-path/package.json +32 -0
  338. package/.output/server/node_modules/glob/dist/commonjs/glob.js +247 -0
  339. package/.output/server/node_modules/glob/dist/commonjs/has-magic.js +27 -0
  340. package/.output/server/node_modules/glob/dist/commonjs/ignore.js +119 -0
  341. package/.output/server/node_modules/glob/dist/commonjs/index.js +68 -0
  342. package/.output/server/node_modules/glob/dist/commonjs/package.json +3 -0
  343. package/.output/server/node_modules/glob/dist/commonjs/pattern.js +219 -0
  344. package/.output/server/node_modules/glob/dist/commonjs/processor.js +301 -0
  345. package/.output/server/node_modules/glob/dist/commonjs/walker.js +387 -0
  346. package/.output/server/node_modules/glob/package.json +99 -0
  347. package/.output/server/node_modules/has-flag/index.js +8 -0
  348. package/.output/server/node_modules/has-flag/package.json +46 -0
  349. package/.output/server/node_modules/hookable/dist/index.mjs +290 -0
  350. package/.output/server/node_modules/hookable/package.json +49 -0
  351. package/.output/server/node_modules/inherits/inherits.js +9 -0
  352. package/.output/server/node_modules/inherits/inherits_browser.js +27 -0
  353. package/.output/server/node_modules/inherits/package.json +29 -0
  354. package/.output/server/node_modules/ioredis/built/Command.js +349 -0
  355. package/.output/server/node_modules/ioredis/built/DataHandler.js +220 -0
  356. package/.output/server/node_modules/ioredis/built/Pipeline.js +334 -0
  357. package/.output/server/node_modules/ioredis/built/Redis.js +697 -0
  358. package/.output/server/node_modules/ioredis/built/ScanStream.js +51 -0
  359. package/.output/server/node_modules/ioredis/built/Script.js +62 -0
  360. package/.output/server/node_modules/ioredis/built/SubscriptionSet.js +41 -0
  361. package/.output/server/node_modules/ioredis/built/autoPipelining.js +159 -0
  362. package/.output/server/node_modules/ioredis/built/cluster/ClusterOptions.js +22 -0
  363. package/.output/server/node_modules/ioredis/built/cluster/ClusterSubscriber.js +202 -0
  364. package/.output/server/node_modules/ioredis/built/cluster/ClusterSubscriberGroup.js +224 -0
  365. package/.output/server/node_modules/ioredis/built/cluster/ConnectionPool.js +154 -0
  366. package/.output/server/node_modules/ioredis/built/cluster/DelayQueue.js +53 -0
  367. package/.output/server/node_modules/ioredis/built/cluster/index.js +862 -0
  368. package/.output/server/node_modules/ioredis/built/cluster/util.js +100 -0
  369. package/.output/server/node_modules/ioredis/built/connectors/AbstractConnector.js +26 -0
  370. package/.output/server/node_modules/ioredis/built/connectors/SentinelConnector/FailoverDetector.js +45 -0
  371. package/.output/server/node_modules/ioredis/built/connectors/SentinelConnector/SentinelIterator.js +37 -0
  372. package/.output/server/node_modules/ioredis/built/connectors/SentinelConnector/index.js +305 -0
  373. package/.output/server/node_modules/ioredis/built/connectors/StandaloneConnector.js +69 -0
  374. package/.output/server/node_modules/ioredis/built/connectors/index.js +7 -0
  375. package/.output/server/node_modules/ioredis/built/constants/TLSProfiles.js +149 -0
  376. package/.output/server/node_modules/ioredis/built/errors/ClusterAllFailedError.js +15 -0
  377. package/.output/server/node_modules/ioredis/built/errors/MaxRetriesPerRequestError.js +14 -0
  378. package/.output/server/node_modules/ioredis/built/errors/index.js +5 -0
  379. package/.output/server/node_modules/ioredis/built/index.js +62 -0
  380. package/.output/server/node_modules/ioredis/built/redis/RedisOptions.js +55 -0
  381. package/.output/server/node_modules/ioredis/built/redis/event_handler.js +292 -0
  382. package/.output/server/node_modules/ioredis/built/transaction.js +93 -0
  383. package/.output/server/node_modules/ioredis/built/utils/Commander.js +117 -0
  384. package/.output/server/node_modules/ioredis/built/utils/applyMixin.js +8 -0
  385. package/.output/server/node_modules/ioredis/built/utils/debug.js +95 -0
  386. package/.output/server/node_modules/ioredis/built/utils/index.js +297 -0
  387. package/.output/server/node_modules/ioredis/built/utils/lodash.js +9 -0
  388. package/.output/server/node_modules/ioredis/package.json +100 -0
  389. package/.output/server/node_modules/lodash.defaults/index.js +668 -0
  390. package/.output/server/node_modules/lodash.defaults/package.json +19 -0
  391. package/.output/server/node_modules/lodash.isarguments/index.js +229 -0
  392. package/.output/server/node_modules/lodash.isarguments/package.json +19 -0
  393. package/.output/server/node_modules/lru-cache/dist/commonjs/index.js +1546 -0
  394. package/.output/server/node_modules/lru-cache/dist/commonjs/package.json +3 -0
  395. package/.output/server/node_modules/lru-cache/package.json +116 -0
  396. package/.output/server/node_modules/minimatch/dist/commonjs/assert-valid-pattern.js +14 -0
  397. package/.output/server/node_modules/minimatch/dist/commonjs/ast.js +592 -0
  398. package/.output/server/node_modules/minimatch/dist/commonjs/brace-expressions.js +152 -0
  399. package/.output/server/node_modules/minimatch/dist/commonjs/escape.js +22 -0
  400. package/.output/server/node_modules/minimatch/dist/commonjs/index.js +1017 -0
  401. package/.output/server/node_modules/minimatch/dist/commonjs/package.json +3 -0
  402. package/.output/server/node_modules/minimatch/dist/commonjs/unescape.js +24 -0
  403. package/.output/server/node_modules/minimatch/package.json +82 -0
  404. package/.output/server/node_modules/minipass/dist/commonjs/index.js +1028 -0
  405. package/.output/server/node_modules/minipass/dist/commonjs/package.json +3 -0
  406. package/.output/server/node_modules/minipass/package.json +82 -0
  407. package/.output/server/node_modules/ms/index.js +162 -0
  408. package/.output/server/node_modules/ms/package.json +38 -0
  409. package/.output/server/node_modules/path-scurry/dist/commonjs/index.js +2014 -0
  410. package/.output/server/node_modules/path-scurry/dist/commonjs/package.json +3 -0
  411. package/.output/server/node_modules/path-scurry/package.json +89 -0
  412. package/.output/server/node_modules/pg/lib/client.js +650 -0
  413. package/.output/server/node_modules/pg/lib/connection-parameters.js +167 -0
  414. package/.output/server/node_modules/pg/lib/connection.js +222 -0
  415. package/.output/server/node_modules/pg/lib/crypto/cert-signatures.js +121 -0
  416. package/.output/server/node_modules/pg/lib/crypto/sasl.js +212 -0
  417. package/.output/server/node_modules/pg/lib/crypto/utils-legacy.js +43 -0
  418. package/.output/server/node_modules/pg/lib/crypto/utils-webcrypto.js +88 -0
  419. package/.output/server/node_modules/pg/lib/crypto/utils.js +9 -0
  420. package/.output/server/node_modules/pg/lib/defaults.js +84 -0
  421. package/.output/server/node_modules/pg/lib/index.js +58 -0
  422. package/.output/server/node_modules/pg/lib/native/client.js +307 -0
  423. package/.output/server/node_modules/pg/lib/native/index.js +2 -0
  424. package/.output/server/node_modules/pg/lib/native/query.js +168 -0
  425. package/.output/server/node_modules/pg/lib/query.js +253 -0
  426. package/.output/server/node_modules/pg/lib/result.js +108 -0
  427. package/.output/server/node_modules/pg/lib/stream.js +81 -0
  428. package/.output/server/node_modules/pg/lib/type-overrides.js +35 -0
  429. package/.output/server/node_modules/pg/lib/utils.js +206 -0
  430. package/.output/server/node_modules/pg/package.json +62 -0
  431. package/.output/server/node_modules/pg-cloudflare/dist/empty.js +4 -0
  432. package/.output/server/node_modules/pg-cloudflare/package.json +32 -0
  433. package/.output/server/node_modules/pg-connection-string/index.js +112 -0
  434. package/.output/server/node_modules/pg-connection-string/package.json +40 -0
  435. package/.output/server/node_modules/pg-cursor/index.js +265 -0
  436. package/.output/server/node_modules/pg-cursor/package.json +38 -0
  437. package/.output/server/node_modules/pg-int8/index.js +100 -0
  438. package/.output/server/node_modules/pg-int8/package.json +24 -0
  439. package/.output/server/node_modules/pg-pool/index.js +471 -0
  440. package/.output/server/node_modules/pg-pool/package.json +41 -0
  441. package/.output/server/node_modules/pg-protocol/dist/buffer-reader.js +55 -0
  442. package/.output/server/node_modules/pg-protocol/dist/buffer-writer.js +81 -0
  443. package/.output/server/node_modules/pg-protocol/dist/index.js +15 -0
  444. package/.output/server/node_modules/pg-protocol/dist/messages.js +160 -0
  445. package/.output/server/node_modules/pg-protocol/dist/parser.js +304 -0
  446. package/.output/server/node_modules/pg-protocol/dist/serializer.js +189 -0
  447. package/.output/server/node_modules/pg-protocol/package.json +35 -0
  448. package/.output/server/node_modules/pg-query-stream/dist/index.js +48 -0
  449. package/.output/server/node_modules/pg-query-stream/package.json +60 -0
  450. package/.output/server/node_modules/pg-types/index.js +47 -0
  451. package/.output/server/node_modules/pg-types/lib/arrayParser.js +11 -0
  452. package/.output/server/node_modules/pg-types/lib/binaryParsers.js +257 -0
  453. package/.output/server/node_modules/pg-types/lib/builtins.js +73 -0
  454. package/.output/server/node_modules/pg-types/lib/textParsers.js +215 -0
  455. package/.output/server/node_modules/pg-types/package.json +42 -0
  456. package/.output/server/node_modules/pgpass/lib/helper.js +233 -0
  457. package/.output/server/node_modules/pgpass/lib/index.js +23 -0
  458. package/.output/server/node_modules/pgpass/package.json +41 -0
  459. package/.output/server/node_modules/postgres-array/index.js +97 -0
  460. package/.output/server/node_modules/postgres-array/package.json +35 -0
  461. package/.output/server/node_modules/postgres-bytea/index.js +31 -0
  462. package/.output/server/node_modules/postgres-bytea/package.json +34 -0
  463. package/.output/server/node_modules/postgres-date/index.js +116 -0
  464. package/.output/server/node_modules/postgres-date/package.json +33 -0
  465. package/.output/server/node_modules/postgres-interval/index.js +125 -0
  466. package/.output/server/node_modules/postgres-interval/package.json +36 -0
  467. package/.output/server/node_modules/redis-errors/index.js +7 -0
  468. package/.output/server/node_modules/redis-errors/lib/modern.js +59 -0
  469. package/.output/server/node_modules/redis-errors/lib/old.js +119 -0
  470. package/.output/server/node_modules/redis-errors/package.json +41 -0
  471. package/.output/server/node_modules/redis-parser/index.js +3 -0
  472. package/.output/server/node_modules/redis-parser/lib/parser.js +552 -0
  473. package/.output/server/node_modules/redis-parser/package.json +53 -0
  474. package/.output/server/node_modules/reflect-metadata/Reflect.js +1415 -0
  475. package/.output/server/node_modules/reflect-metadata/package.json +68 -0
  476. package/.output/server/node_modules/safe-buffer/index.js +65 -0
  477. package/.output/server/node_modules/safe-buffer/package.json +51 -0
  478. package/.output/server/node_modules/sha.js/hash.js +81 -0
  479. package/.output/server/node_modules/sha.js/index.js +15 -0
  480. package/.output/server/node_modules/sha.js/package.json +30 -0
  481. package/.output/server/node_modules/sha.js/sha.js +94 -0
  482. package/.output/server/node_modules/sha.js/sha1.js +99 -0
  483. package/.output/server/node_modules/sha.js/sha224.js +53 -0
  484. package/.output/server/node_modules/sha.js/sha256.js +135 -0
  485. package/.output/server/node_modules/sha.js/sha384.js +57 -0
  486. package/.output/server/node_modules/sha.js/sha512.js +260 -0
  487. package/.output/server/node_modules/source-map-js/lib/array-set.js +121 -0
  488. package/.output/server/node_modules/source-map-js/lib/base64-vlq.js +140 -0
  489. package/.output/server/node_modules/source-map-js/lib/base64.js +67 -0
  490. package/.output/server/node_modules/source-map-js/lib/binary-search.js +111 -0
  491. package/.output/server/node_modules/source-map-js/lib/mapping-list.js +79 -0
  492. package/.output/server/node_modules/source-map-js/lib/quick-sort.js +132 -0
  493. package/.output/server/node_modules/source-map-js/lib/source-map-consumer.js +1188 -0
  494. package/.output/server/node_modules/source-map-js/lib/source-map-generator.js +444 -0
  495. package/.output/server/node_modules/source-map-js/lib/source-node.js +413 -0
  496. package/.output/server/node_modules/source-map-js/lib/util.js +594 -0
  497. package/.output/server/node_modules/source-map-js/package.json +71 -0
  498. package/.output/server/node_modules/source-map-js/source-map.js +8 -0
  499. package/.output/server/node_modules/split2/index.js +141 -0
  500. package/.output/server/node_modules/split2/package.json +39 -0
  501. package/.output/server/node_modules/sql-highlight/lib/escapeHtml.js +59 -0
  502. package/.output/server/node_modules/sql-highlight/lib/index.js +85 -0
  503. package/.output/server/node_modules/sql-highlight/lib/keywords.js +145 -0
  504. package/.output/server/node_modules/sql-highlight/package.json +49 -0
  505. package/.output/server/node_modules/sqlite3/build/Release/node_sqlite3.node +0 -0
  506. package/.output/server/node_modules/sqlite3/build/Release/node_sqlite3.node.bak +0 -0
  507. package/.output/server/node_modules/sqlite3/lib/sqlite3-binding.js +1 -0
  508. package/.output/server/node_modules/sqlite3/lib/sqlite3.js +207 -0
  509. package/.output/server/node_modules/sqlite3/lib/trace.js +38 -0
  510. package/.output/server/node_modules/sqlite3/package.json +89 -0
  511. package/.output/server/node_modules/standard-as-callback/built/index.js +41 -0
  512. package/.output/server/node_modules/standard-as-callback/built/utils.js +23 -0
  513. package/.output/server/node_modules/standard-as-callback/package.json +40 -0
  514. package/.output/server/node_modules/supports-color/index.js +152 -0
  515. package/.output/server/node_modules/supports-color/package.json +58 -0
  516. package/.output/server/node_modules/tslib/package.json +47 -0
  517. package/.output/server/node_modules/tslib/tslib.js +484 -0
  518. package/.output/server/node_modules/typeorm/cache/DbQueryResultCache.js +264 -0
  519. package/.output/server/node_modules/typeorm/cache/QueryResultCacheFactory.js +42 -0
  520. package/.output/server/node_modules/typeorm/cache/RedisQueryResultCache.js +197 -0
  521. package/.output/server/node_modules/typeorm/common/DeepPartial.js +4 -0
  522. package/.output/server/node_modules/typeorm/common/EntityTarget.js +4 -0
  523. package/.output/server/node_modules/typeorm/common/MixedList.js +4 -0
  524. package/.output/server/node_modules/typeorm/common/ObjectLiteral.js +4 -0
  525. package/.output/server/node_modules/typeorm/common/ObjectType.js +4 -0
  526. package/.output/server/node_modules/typeorm/common/RelationType.js +4 -0
  527. package/.output/server/node_modules/typeorm/connection/Connection.js +16 -0
  528. package/.output/server/node_modules/typeorm/connection/ConnectionManager.js +66 -0
  529. package/.output/server/node_modules/typeorm/connection/ConnectionMetadataBuilder.js +74 -0
  530. package/.output/server/node_modules/typeorm/connection/ConnectionOptionsReader.js +198 -0
  531. package/.output/server/node_modules/typeorm/connection/options-reader/ConnectionOptionsEnvReader.js +111 -0
  532. package/.output/server/node_modules/typeorm/container.js +60 -0
  533. package/.output/server/node_modules/typeorm/data-source/DataSource.js +517 -0
  534. package/.output/server/node_modules/typeorm/decorator/Check.js +27 -0
  535. package/.output/server/node_modules/typeorm/decorator/EntityRepository.js +21 -0
  536. package/.output/server/node_modules/typeorm/decorator/Exclusion.js +27 -0
  537. package/.output/server/node_modules/typeorm/decorator/ForeignKey.js +44 -0
  538. package/.output/server/node_modules/typeorm/decorator/Generated.js +24 -0
  539. package/.output/server/node_modules/typeorm/decorator/Index.js +56 -0
  540. package/.output/server/node_modules/typeorm/decorator/Unique.js +50 -0
  541. package/.output/server/node_modules/typeorm/decorator/columns/Column.js +78 -0
  542. package/.output/server/node_modules/typeorm/decorator/columns/CreateDateColumn.js +21 -0
  543. package/.output/server/node_modules/typeorm/decorator/columns/DeleteDateColumn.js +20 -0
  544. package/.output/server/node_modules/typeorm/decorator/columns/ObjectIdColumn.js +27 -0
  545. package/.output/server/node_modules/typeorm/decorator/columns/PrimaryColumn.js +63 -0
  546. package/.output/server/node_modules/typeorm/decorator/columns/PrimaryGeneratedColumn.js +59 -0
  547. package/.output/server/node_modules/typeorm/decorator/columns/UpdateDateColumn.js +20 -0
  548. package/.output/server/node_modules/typeorm/decorator/columns/VersionColumn.js +21 -0
  549. package/.output/server/node_modules/typeorm/decorator/columns/ViewColumn.js +19 -0
  550. package/.output/server/node_modules/typeorm/decorator/columns/VirtualColumn.js +49 -0
  551. package/.output/server/node_modules/typeorm/decorator/entity/ChildEntity.js +25 -0
  552. package/.output/server/node_modules/typeorm/decorator/entity/Entity.js +31 -0
  553. package/.output/server/node_modules/typeorm/decorator/entity/TableInheritance.js +22 -0
  554. package/.output/server/node_modules/typeorm/decorator/entity-view/ViewEntity.js +32 -0
  555. package/.output/server/node_modules/typeorm/decorator/listeners/AfterInsert.js +19 -0
  556. package/.output/server/node_modules/typeorm/decorator/listeners/AfterLoad.js +19 -0
  557. package/.output/server/node_modules/typeorm/decorator/listeners/AfterRecover.js +19 -0
  558. package/.output/server/node_modules/typeorm/decorator/listeners/AfterRemove.js +19 -0
  559. package/.output/server/node_modules/typeorm/decorator/listeners/AfterSoftRemove.js +19 -0
  560. package/.output/server/node_modules/typeorm/decorator/listeners/AfterUpdate.js +19 -0
  561. package/.output/server/node_modules/typeorm/decorator/listeners/BeforeInsert.js +19 -0
  562. package/.output/server/node_modules/typeorm/decorator/listeners/BeforeRecover.js +19 -0
  563. package/.output/server/node_modules/typeorm/decorator/listeners/BeforeRemove.js +19 -0
  564. package/.output/server/node_modules/typeorm/decorator/listeners/BeforeSoftRemove.js +19 -0
  565. package/.output/server/node_modules/typeorm/decorator/listeners/BeforeUpdate.js +19 -0
  566. package/.output/server/node_modules/typeorm/decorator/listeners/EventSubscriber.js +17 -0
  567. package/.output/server/node_modules/typeorm/decorator/options/ColumnOptions.js +4 -0
  568. package/.output/server/node_modules/typeorm/decorator/options/EntityOptions.js +4 -0
  569. package/.output/server/node_modules/typeorm/decorator/options/IndexOptions.js +4 -0
  570. package/.output/server/node_modules/typeorm/decorator/options/JoinColumnOptions.js +4 -0
  571. package/.output/server/node_modules/typeorm/decorator/options/JoinTableOptions.js +4 -0
  572. package/.output/server/node_modules/typeorm/decorator/options/RelationOptions.js +4 -0
  573. package/.output/server/node_modules/typeorm/decorator/options/ValueTransformer.js +4 -0
  574. package/.output/server/node_modules/typeorm/decorator/relations/JoinColumn.js +27 -0
  575. package/.output/server/node_modules/typeorm/decorator/relations/JoinTable.js +34 -0
  576. package/.output/server/node_modules/typeorm/decorator/relations/ManyToMany.js +46 -0
  577. package/.output/server/node_modules/typeorm/decorator/relations/ManyToOne.js +46 -0
  578. package/.output/server/node_modules/typeorm/decorator/relations/OneToMany.js +37 -0
  579. package/.output/server/node_modules/typeorm/decorator/relations/OneToOne.js +45 -0
  580. package/.output/server/node_modules/typeorm/decorator/relations/RelationCount.js +23 -0
  581. package/.output/server/node_modules/typeorm/decorator/relations/RelationId.js +22 -0
  582. package/.output/server/node_modules/typeorm/decorator/tree/Tree.js +21 -0
  583. package/.output/server/node_modules/typeorm/decorator/tree/TreeChildren.js +34 -0
  584. package/.output/server/node_modules/typeorm/decorator/tree/TreeLevelColumn.js +19 -0
  585. package/.output/server/node_modules/typeorm/decorator/tree/TreeParent.js +33 -0
  586. package/.output/server/node_modules/typeorm/driver/DriverFactory.js +98 -0
  587. package/.output/server/node_modules/typeorm/driver/DriverUtils.js +228 -0
  588. package/.output/server/node_modules/typeorm/driver/Query.js +16 -0
  589. package/.output/server/node_modules/typeorm/driver/SqlInMemory.js +15 -0
  590. package/.output/server/node_modules/typeorm/driver/aurora-mysql/AuroraMysqlDriver.js +847 -0
  591. package/.output/server/node_modules/typeorm/driver/aurora-mysql/AuroraMysqlQueryRunner.js +1709 -0
  592. package/.output/server/node_modules/typeorm/driver/aurora-postgres/AuroraPostgresDriver.js +103 -0
  593. package/.output/server/node_modules/typeorm/driver/aurora-postgres/AuroraPostgresQueryRunner.js +146 -0
  594. package/.output/server/node_modules/typeorm/driver/better-sqlite3/BetterSqlite3Driver.js +153 -0
  595. package/.output/server/node_modules/typeorm/driver/better-sqlite3/BetterSqlite3QueryRunner.js +126 -0
  596. package/.output/server/node_modules/typeorm/driver/capacitor/CapacitorDriver.js +78 -0
  597. package/.output/server/node_modules/typeorm/driver/capacitor/CapacitorQueryRunner.js +98 -0
  598. package/.output/server/node_modules/typeorm/driver/cockroachdb/CockroachDriver.js +885 -0
  599. package/.output/server/node_modules/typeorm/driver/cockroachdb/CockroachQueryRunner.js +2453 -0
  600. package/.output/server/node_modules/typeorm/driver/cordova/CordovaDriver.js +76 -0
  601. package/.output/server/node_modules/typeorm/driver/cordova/CordovaQueryRunner.js +170 -0
  602. package/.output/server/node_modules/typeorm/driver/expo/ExpoDriver.js +29 -0
  603. package/.output/server/node_modules/typeorm/driver/expo/ExpoDriverFactory.js +22 -0
  604. package/.output/server/node_modules/typeorm/driver/expo/ExpoQueryRunner.js +65 -0
  605. package/.output/server/node_modules/typeorm/driver/expo/legacy/ExpoLegacyDriver.js +75 -0
  606. package/.output/server/node_modules/typeorm/driver/expo/legacy/ExpoLegacyQueryRunner.js +169 -0
  607. package/.output/server/node_modules/typeorm/driver/mongodb/MongoDriver.js +404 -0
  608. package/.output/server/node_modules/typeorm/driver/mongodb/MongoQueryRunner.js +701 -0
  609. package/.output/server/node_modules/typeorm/driver/mongodb/bson.typings.js +5 -0
  610. package/.output/server/node_modules/typeorm/driver/mongodb/typings.js +23 -0
  611. package/.output/server/node_modules/typeorm/driver/mysql/MysqlDriver.js +1105 -0
  612. package/.output/server/node_modules/typeorm/driver/mysql/MysqlQueryRunner.js +2139 -0
  613. package/.output/server/node_modules/typeorm/driver/nativescript/NativescriptDriver.js +94 -0
  614. package/.output/server/node_modules/typeorm/driver/nativescript/NativescriptQueryRunner.js +92 -0
  615. package/.output/server/node_modules/typeorm/driver/oracle/OracleDriver.js +869 -0
  616. package/.output/server/node_modules/typeorm/driver/oracle/OracleQueryRunner.js +1884 -0
  617. package/.output/server/node_modules/typeorm/driver/postgres/PostgresDriver.js +1259 -0
  618. package/.output/server/node_modules/typeorm/driver/postgres/PostgresQueryRunner.js +2729 -0
  619. package/.output/server/node_modules/typeorm/driver/react-native/ReactNativeDriver.js +728 -0
  620. package/.output/server/node_modules/typeorm/driver/react-native/ReactNativeQueryRunner.js +107 -0
  621. package/.output/server/node_modules/typeorm/driver/sap/SapDriver.js +681 -0
  622. package/.output/server/node_modules/typeorm/driver/sap/SapQueryRunner.js +2054 -0
  623. package/.output/server/node_modules/typeorm/driver/spanner/SpannerDriver.js +613 -0
  624. package/.output/server/node_modules/typeorm/driver/spanner/SpannerQueryRunner.js +1464 -0
  625. package/.output/server/node_modules/typeorm/driver/sqlite/SqliteDriver.js +174 -0
  626. package/.output/server/node_modules/typeorm/driver/sqlite/SqliteQueryRunner.js +124 -0
  627. package/.output/server/node_modules/typeorm/driver/sqlite-abstract/AbstractSqliteDriver.js +695 -0
  628. package/.output/server/node_modules/typeorm/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +1511 -0
  629. package/.output/server/node_modules/typeorm/driver/sqljs/SqljsDriver.js +250 -0
  630. package/.output/server/node_modules/typeorm/driver/sqljs/SqljsQueryRunner.js +123 -0
  631. package/.output/server/node_modules/typeorm/driver/sqlserver/MssqlParameter.js +23 -0
  632. package/.output/server/node_modules/typeorm/driver/sqlserver/SqlServerDriver.js +922 -0
  633. package/.output/server/node_modules/typeorm/driver/sqlserver/SqlServerQueryRunner.js +2484 -0
  634. package/.output/server/node_modules/typeorm/driver/types/DatabaseType.js +4 -0
  635. package/.output/server/node_modules/typeorm/driver/types/GeoJsonTypes.js +4 -0
  636. package/.output/server/node_modules/typeorm/driver/types/MetadataTableType.js +11 -0
  637. package/.output/server/node_modules/typeorm/driver/types/ReplicationMode.js +4 -0
  638. package/.output/server/node_modules/typeorm/entity-manager/EntityManager.js +853 -0
  639. package/.output/server/node_modules/typeorm/entity-manager/EntityManagerFactory.js +24 -0
  640. package/.output/server/node_modules/typeorm/entity-manager/MongoEntityManager.js +668 -0
  641. package/.output/server/node_modules/typeorm/entity-manager/SqljsEntityManager.js +44 -0
  642. package/.output/server/node_modules/typeorm/entity-schema/EntitySchema.js +15 -0
  643. package/.output/server/node_modules/typeorm/entity-schema/EntitySchemaEmbeddedColumnOptions.js +8 -0
  644. package/.output/server/node_modules/typeorm/entity-schema/EntitySchemaEmbeddedError.js +18 -0
  645. package/.output/server/node_modules/typeorm/entity-schema/EntitySchemaOptions.js +11 -0
  646. package/.output/server/node_modules/typeorm/entity-schema/EntitySchemaTransformer.js +333 -0
  647. package/.output/server/node_modules/typeorm/error/AlreadyHasActiveConnectionError.js +16 -0
  648. package/.output/server/node_modules/typeorm/error/CannotAttachTreeChildrenEntityError.js +16 -0
  649. package/.output/server/node_modules/typeorm/error/CannotConnectAlreadyConnectedError.js +15 -0
  650. package/.output/server/node_modules/typeorm/error/CannotCreateEntityIdMapError.js +21 -0
  651. package/.output/server/node_modules/typeorm/error/CannotDetermineEntityError.js +16 -0
  652. package/.output/server/node_modules/typeorm/error/CannotExecuteNotConnectedError.js +15 -0
  653. package/.output/server/node_modules/typeorm/error/CannotGetEntityManagerNotConnectedError.js +15 -0
  654. package/.output/server/node_modules/typeorm/error/CannotReflectMethodParameterTypeError.js +18 -0
  655. package/.output/server/node_modules/typeorm/error/CircularRelationsError.js +16 -0
  656. package/.output/server/node_modules/typeorm/error/ColumnTypeUndefinedError.js +19 -0
  657. package/.output/server/node_modules/typeorm/error/ConnectionIsNotSetError.js +15 -0
  658. package/.output/server/node_modules/typeorm/error/ConnectionNotFoundError.js +15 -0
  659. package/.output/server/node_modules/typeorm/error/CustomRepositoryCannotInheritRepositoryError.js +18 -0
  660. package/.output/server/node_modules/typeorm/error/CustomRepositoryDoesNotHaveEntityError.js +18 -0
  661. package/.output/server/node_modules/typeorm/error/CustomRepositoryNotFoundError.js +18 -0
  662. package/.output/server/node_modules/typeorm/error/DataTypeNotSupportedError.js +14 -0
  663. package/.output/server/node_modules/typeorm/error/DriverOptionNotSetError.js +16 -0
  664. package/.output/server/node_modules/typeorm/error/DriverPackageNotInstalledError.js +16 -0
  665. package/.output/server/node_modules/typeorm/error/EntityMetadataNotFoundError.js +29 -0
  666. package/.output/server/node_modules/typeorm/error/EntityNotFoundError.js +42 -0
  667. package/.output/server/node_modules/typeorm/error/EntityPropertyNotFoundError.js +17 -0
  668. package/.output/server/node_modules/typeorm/error/FindRelationsNotFoundError.js +23 -0
  669. package/.output/server/node_modules/typeorm/error/ForbiddenTransactionModeOverrideError.js +16 -0
  670. package/.output/server/node_modules/typeorm/error/InitializedRelationError.js +20 -0
  671. package/.output/server/node_modules/typeorm/error/InsertValuesMissingError.js +16 -0
  672. package/.output/server/node_modules/typeorm/error/LimitOnUpdateNotSupportedError.js +15 -0
  673. package/.output/server/node_modules/typeorm/error/LockNotSupportedOnGivenDriverError.js +15 -0
  674. package/.output/server/node_modules/typeorm/error/MetadataAlreadyExistsError.js +18 -0
  675. package/.output/server/node_modules/typeorm/error/MetadataWithSuchNameAlreadyExistsError.js +16 -0
  676. package/.output/server/node_modules/typeorm/error/MissingDeleteDateColumnError.js +12 -0
  677. package/.output/server/node_modules/typeorm/error/MissingDriverError.js +16 -0
  678. package/.output/server/node_modules/typeorm/error/MissingJoinColumnError.js +23 -0
  679. package/.output/server/node_modules/typeorm/error/MissingJoinTableError.js +23 -0
  680. package/.output/server/node_modules/typeorm/error/MissingPrimaryColumnError.js +13 -0
  681. package/.output/server/node_modules/typeorm/error/MustBeEntityError.js +15 -0
  682. package/.output/server/node_modules/typeorm/error/NestedSetMultipleRootError.js +12 -0
  683. package/.output/server/node_modules/typeorm/error/NoConnectionForRepositoryError.js +16 -0
  684. package/.output/server/node_modules/typeorm/error/NoConnectionOptionError.js +16 -0
  685. package/.output/server/node_modules/typeorm/error/NoNeedToReleaseEntityManagerError.js +17 -0
  686. package/.output/server/node_modules/typeorm/error/NoVersionOrUpdateDateColumnError.js +15 -0
  687. package/.output/server/node_modules/typeorm/error/OffsetWithoutLimitNotSupportedError.js +17 -0
  688. package/.output/server/node_modules/typeorm/error/OptimisticLockCanNotBeUsedError.js +15 -0
  689. package/.output/server/node_modules/typeorm/error/OptimisticLockVersionMismatchError.js +15 -0
  690. package/.output/server/node_modules/typeorm/error/PersistedEntityNotFoundError.js +15 -0
  691. package/.output/server/node_modules/typeorm/error/PessimisticLockTransactionRequiredError.js +15 -0
  692. package/.output/server/node_modules/typeorm/error/PrimaryColumnCannotBeNullableError.js +13 -0
  693. package/.output/server/node_modules/typeorm/error/QueryFailedError.js +30 -0
  694. package/.output/server/node_modules/typeorm/error/QueryRunnerAlreadyReleasedError.js +12 -0
  695. package/.output/server/node_modules/typeorm/error/QueryRunnerProviderAlreadyReleasedError.js +16 -0
  696. package/.output/server/node_modules/typeorm/error/RepositoryNotTreeError.js +32 -0
  697. package/.output/server/node_modules/typeorm/error/ReturningStatementNotSupportedError.js +16 -0
  698. package/.output/server/node_modules/typeorm/error/SubjectRemovedAndUpdatedError.js +16 -0
  699. package/.output/server/node_modules/typeorm/error/SubjectWithoutIdentifierError.js +17 -0
  700. package/.output/server/node_modules/typeorm/error/TransactionAlreadyStartedError.js +15 -0
  701. package/.output/server/node_modules/typeorm/error/TransactionNotStartedError.js +15 -0
  702. package/.output/server/node_modules/typeorm/error/TreeRepositoryNotSupportedError.js +12 -0
  703. package/.output/server/node_modules/typeorm/error/TypeORMError.js +23 -0
  704. package/.output/server/node_modules/typeorm/error/UpdateValuesMissingError.js +12 -0
  705. package/.output/server/node_modules/typeorm/error/UsingJoinColumnIsNotAllowedError.js +13 -0
  706. package/.output/server/node_modules/typeorm/error/UsingJoinColumnOnlyOnOneSideAllowedError.js +14 -0
  707. package/.output/server/node_modules/typeorm/error/UsingJoinTableIsNotAllowedError.js +14 -0
  708. package/.output/server/node_modules/typeorm/error/UsingJoinTableOnlyOnOneSideAllowedError.js +14 -0
  709. package/.output/server/node_modules/typeorm/error/index.js +66 -0
  710. package/.output/server/node_modules/typeorm/find-options/EqualOperator.js +13 -0
  711. package/.output/server/node_modules/typeorm/find-options/FindManyOptions.js +4 -0
  712. package/.output/server/node_modules/typeorm/find-options/FindOneOptions.js +4 -0
  713. package/.output/server/node_modules/typeorm/find-options/FindOperator.js +96 -0
  714. package/.output/server/node_modules/typeorm/find-options/FindOperatorType.js +4 -0
  715. package/.output/server/node_modules/typeorm/find-options/FindOptionsOrder.js +4 -0
  716. package/.output/server/node_modules/typeorm/find-options/FindOptionsRelations.js +4 -0
  717. package/.output/server/node_modules/typeorm/find-options/FindOptionsSelect.js +4 -0
  718. package/.output/server/node_modules/typeorm/find-options/FindOptionsUtils.js +350 -0
  719. package/.output/server/node_modules/typeorm/find-options/FindOptionsWhere.js +4 -0
  720. package/.output/server/node_modules/typeorm/find-options/FindTreeOptions.js +4 -0
  721. package/.output/server/node_modules/typeorm/find-options/JoinOptions.js +4 -0
  722. package/.output/server/node_modules/typeorm/find-options/OrderByCondition.js +4 -0
  723. package/.output/server/node_modules/typeorm/find-options/operator/And.js +9 -0
  724. package/.output/server/node_modules/typeorm/find-options/operator/Any.js +13 -0
  725. package/.output/server/node_modules/typeorm/find-options/operator/ArrayContainedBy.js +13 -0
  726. package/.output/server/node_modules/typeorm/find-options/operator/ArrayContains.js +13 -0
  727. package/.output/server/node_modules/typeorm/find-options/operator/ArrayOverlap.js +13 -0
  728. package/.output/server/node_modules/typeorm/find-options/operator/Between.js +13 -0
  729. package/.output/server/node_modules/typeorm/find-options/operator/Equal.js +17 -0
  730. package/.output/server/node_modules/typeorm/find-options/operator/ILike.js +13 -0
  731. package/.output/server/node_modules/typeorm/find-options/operator/In.js +13 -0
  732. package/.output/server/node_modules/typeorm/find-options/operator/IsNull.js +13 -0
  733. package/.output/server/node_modules/typeorm/find-options/operator/JsonContains.js +13 -0
  734. package/.output/server/node_modules/typeorm/find-options/operator/LessThan.js +13 -0
  735. package/.output/server/node_modules/typeorm/find-options/operator/LessThanOrEqual.js +13 -0
  736. package/.output/server/node_modules/typeorm/find-options/operator/Like.js +13 -0
  737. package/.output/server/node_modules/typeorm/find-options/operator/MoreThan.js +13 -0
  738. package/.output/server/node_modules/typeorm/find-options/operator/MoreThanOrEqual.js +13 -0
  739. package/.output/server/node_modules/typeorm/find-options/operator/Not.js +14 -0
  740. package/.output/server/node_modules/typeorm/find-options/operator/Or.js +9 -0
  741. package/.output/server/node_modules/typeorm/find-options/operator/Raw.js +12 -0
  742. package/.output/server/node_modules/typeorm/globals.js +182 -0
  743. package/.output/server/node_modules/typeorm/index.js +196 -0
  744. package/.output/server/node_modules/typeorm/index.mjs +422 -0
  745. package/.output/server/node_modules/typeorm/logger/AbstractLogger.js +238 -0
  746. package/.output/server/node_modules/typeorm/logger/AdvancedConsoleLogger.js +56 -0
  747. package/.output/server/node_modules/typeorm/logger/DebugLogger.js +78 -0
  748. package/.output/server/node_modules/typeorm/logger/FileLogger.js +88 -0
  749. package/.output/server/node_modules/typeorm/logger/FormattedConsoleLogger.js +59 -0
  750. package/.output/server/node_modules/typeorm/logger/Logger.js +4 -0
  751. package/.output/server/node_modules/typeorm/logger/LoggerFactory.js +39 -0
  752. package/.output/server/node_modules/typeorm/logger/LoggerOptions.js +4 -0
  753. package/.output/server/node_modules/typeorm/logger/SimpleConsoleLogger.js +57 -0
  754. package/.output/server/node_modules/typeorm/metadata/CheckMetadata.js +35 -0
  755. package/.output/server/node_modules/typeorm/metadata/ColumnMetadata.js +618 -0
  756. package/.output/server/node_modules/typeorm/metadata/EmbeddedMetadata.js +224 -0
  757. package/.output/server/node_modules/typeorm/metadata/EntityListenerMetadata.js +77 -0
  758. package/.output/server/node_modules/typeorm/metadata/EntityMetadata.js +692 -0
  759. package/.output/server/node_modules/typeorm/metadata/ExclusionMetadata.js +35 -0
  760. package/.output/server/node_modules/typeorm/metadata/ForeignKeyMetadata.js +57 -0
  761. package/.output/server/node_modules/typeorm/metadata/IndexMetadata.js +144 -0
  762. package/.output/server/node_modules/typeorm/metadata/RelationCountMetadata.js +39 -0
  763. package/.output/server/node_modules/typeorm/metadata/RelationIdMetadata.js +62 -0
  764. package/.output/server/node_modules/typeorm/metadata/RelationMetadata.js +440 -0
  765. package/.output/server/node_modules/typeorm/metadata/UniqueMetadata.js +101 -0
  766. package/.output/server/node_modules/typeorm/metadata/types/EventListenerTypes.js +22 -0
  767. package/.output/server/node_modules/typeorm/metadata-args/MetadataArgsStorage.js +236 -0
  768. package/.output/server/node_modules/typeorm/metadata-builder/ClosureJunctionEntityMetadataBuilder.js +145 -0
  769. package/.output/server/node_modules/typeorm/metadata-builder/EntityMetadataBuilder.js +838 -0
  770. package/.output/server/node_modules/typeorm/metadata-builder/EntityMetadataValidator.js +258 -0
  771. package/.output/server/node_modules/typeorm/metadata-builder/JunctionEntityMetadataBuilder.js +287 -0
  772. package/.output/server/node_modules/typeorm/metadata-builder/MetadataUtils.js +44 -0
  773. package/.output/server/node_modules/typeorm/metadata-builder/RelationJoinColumnBuilder.js +185 -0
  774. package/.output/server/node_modules/typeorm/migration/Migration.js +21 -0
  775. package/.output/server/node_modules/typeorm/migration/MigrationExecutor.js +534 -0
  776. package/.output/server/node_modules/typeorm/naming-strategy/DefaultNamingStrategy.js +145 -0
  777. package/.output/server/node_modules/typeorm/naming-strategy/LegacyOracleNamingStrategy.js +50 -0
  778. package/.output/server/node_modules/typeorm/package.json +268 -0
  779. package/.output/server/node_modules/typeorm/persistence/EntityPersistExecutor.js +170 -0
  780. package/.output/server/node_modules/typeorm/persistence/Subject.js +239 -0
  781. package/.output/server/node_modules/typeorm/persistence/SubjectChangedColumnsComputer.js +216 -0
  782. package/.output/server/node_modules/typeorm/persistence/SubjectDatabaseEntityLoader.js +135 -0
  783. package/.output/server/node_modules/typeorm/persistence/SubjectExecutor.js +760 -0
  784. package/.output/server/node_modules/typeorm/persistence/SubjectTopologicalSorter.js +174 -0
  785. package/.output/server/node_modules/typeorm/persistence/subject-builder/CascadesSubjectBuilder.js +107 -0
  786. package/.output/server/node_modules/typeorm/persistence/subject-builder/ManyToManySubjectBuilder.js +218 -0
  787. package/.output/server/node_modules/typeorm/persistence/subject-builder/OneToManySubjectBuilder.js +181 -0
  788. package/.output/server/node_modules/typeorm/persistence/subject-builder/OneToOneInverseSideSubjectBuilder.js +155 -0
  789. package/.output/server/node_modules/typeorm/persistence/tree/ClosureSubjectExecutor.js +241 -0
  790. package/.output/server/node_modules/typeorm/persistence/tree/MaterializedPathSubjectExecutor.js +125 -0
  791. package/.output/server/node_modules/typeorm/persistence/tree/NestedSetSubjectExecutor.js +271 -0
  792. package/.output/server/node_modules/typeorm/platform/PlatformTools.js +243 -0
  793. package/.output/server/node_modules/typeorm/query-builder/Alias.js +29 -0
  794. package/.output/server/node_modules/typeorm/query-builder/Brackets.js +19 -0
  795. package/.output/server/node_modules/typeorm/query-builder/DeleteQueryBuilder.js +200 -0
  796. package/.output/server/node_modules/typeorm/query-builder/InsertQueryBuilder.js +745 -0
  797. package/.output/server/node_modules/typeorm/query-builder/JoinAttribute.js +175 -0
  798. package/.output/server/node_modules/typeorm/query-builder/NotBrackets.js +17 -0
  799. package/.output/server/node_modules/typeorm/query-builder/QueryBuilder.js +1139 -0
  800. package/.output/server/node_modules/typeorm/query-builder/QueryBuilderUtils.js +32 -0
  801. package/.output/server/node_modules/typeorm/query-builder/QueryExpressionMap.js +328 -0
  802. package/.output/server/node_modules/typeorm/query-builder/RelationIdLoader.js +503 -0
  803. package/.output/server/node_modules/typeorm/query-builder/RelationLoader.js +283 -0
  804. package/.output/server/node_modules/typeorm/query-builder/RelationQueryBuilder.js +155 -0
  805. package/.output/server/node_modules/typeorm/query-builder/RelationRemover.js +143 -0
  806. package/.output/server/node_modules/typeorm/query-builder/RelationUpdater.js +152 -0
  807. package/.output/server/node_modules/typeorm/query-builder/ReturningResultsEntityUpdator.js +176 -0
  808. package/.output/server/node_modules/typeorm/query-builder/SelectQueryBuilder.js +2656 -0
  809. package/.output/server/node_modules/typeorm/query-builder/SoftDeleteQueryBuilder.js +368 -0
  810. package/.output/server/node_modules/typeorm/query-builder/UpdateQueryBuilder.js +498 -0
  811. package/.output/server/node_modules/typeorm/query-builder/index.js +20 -0
  812. package/.output/server/node_modules/typeorm/query-builder/relation-count/RelationCountAttribute.js +80 -0
  813. package/.output/server/node_modules/typeorm/query-builder/relation-count/RelationCountLoader.js +168 -0
  814. package/.output/server/node_modules/typeorm/query-builder/relation-count/RelationCountMetadataToAttributeTransformer.js +55 -0
  815. package/.output/server/node_modules/typeorm/query-builder/relation-id/RelationIdAttribute.js +88 -0
  816. package/.output/server/node_modules/typeorm/query-builder/relation-id/RelationIdLoader.js +275 -0
  817. package/.output/server/node_modules/typeorm/query-builder/relation-id/RelationIdMetadataToAttributeTransformer.js +55 -0
  818. package/.output/server/node_modules/typeorm/query-builder/result/DeleteResult.js +17 -0
  819. package/.output/server/node_modules/typeorm/query-builder/result/InsertResult.js +28 -0
  820. package/.output/server/node_modules/typeorm/query-builder/result/UpdateResult.js +29 -0
  821. package/.output/server/node_modules/typeorm/query-builder/transformer/DocumentToEntityTransformer.js +196 -0
  822. package/.output/server/node_modules/typeorm/query-builder/transformer/PlainObjectToDatabaseEntityTransformer.js +112 -0
  823. package/.output/server/node_modules/typeorm/query-builder/transformer/PlainObjectToNewEntityTransformer.js +92 -0
  824. package/.output/server/node_modules/typeorm/query-builder/transformer/RawSqlResultsToEntityTransformer.js +447 -0
  825. package/.output/server/node_modules/typeorm/query-runner/BaseQueryRunner.js +454 -0
  826. package/.output/server/node_modules/typeorm/query-runner/QueryLock.js +28 -0
  827. package/.output/server/node_modules/typeorm/query-runner/QueryResult.js +17 -0
  828. package/.output/server/node_modules/typeorm/repository/AbstractRepository.js +92 -0
  829. package/.output/server/node_modules/typeorm/repository/BaseEntity.js +328 -0
  830. package/.output/server/node_modules/typeorm/repository/MongoRepository.js +305 -0
  831. package/.output/server/node_modules/typeorm/repository/RemoveOptions.js +4 -0
  832. package/.output/server/node_modules/typeorm/repository/Repository.js +379 -0
  833. package/.output/server/node_modules/typeorm/repository/SaveOptions.js +4 -0
  834. package/.output/server/node_modules/typeorm/repository/TreeRepository.js +255 -0
  835. package/.output/server/node_modules/typeorm/schema-builder/MongoSchemaBuilder.js +66 -0
  836. package/.output/server/node_modules/typeorm/schema-builder/RdbmsSchemaBuilder.js +929 -0
  837. package/.output/server/node_modules/typeorm/schema-builder/options/TableCheckOptions.js +4 -0
  838. package/.output/server/node_modules/typeorm/schema-builder/options/TableColumnOptions.js +4 -0
  839. package/.output/server/node_modules/typeorm/schema-builder/options/TableExclusionOptions.js +4 -0
  840. package/.output/server/node_modules/typeorm/schema-builder/options/TableForeignKeyOptions.js +4 -0
  841. package/.output/server/node_modules/typeorm/schema-builder/options/TableIndexOptions.js +4 -0
  842. package/.output/server/node_modules/typeorm/schema-builder/options/TableOptions.js +4 -0
  843. package/.output/server/node_modules/typeorm/schema-builder/options/TableUniqueOptions.js +4 -0
  844. package/.output/server/node_modules/typeorm/schema-builder/options/ViewOptions.js +4 -0
  845. package/.output/server/node_modules/typeorm/schema-builder/table/Table.js +296 -0
  846. package/.output/server/node_modules/typeorm/schema-builder/table/TableCheck.js +49 -0
  847. package/.output/server/node_modules/typeorm/schema-builder/table/TableColumn.js +117 -0
  848. package/.output/server/node_modules/typeorm/schema-builder/table/TableExclusion.js +43 -0
  849. package/.output/server/node_modules/typeorm/schema-builder/table/TableForeignKey.js +72 -0
  850. package/.output/server/node_modules/typeorm/schema-builder/table/TableIndex.js +68 -0
  851. package/.output/server/node_modules/typeorm/schema-builder/table/TableUnique.js +50 -0
  852. package/.output/server/node_modules/typeorm/schema-builder/util/TableUtils.js +41 -0
  853. package/.output/server/node_modules/typeorm/schema-builder/util/ViewUtils.js +27 -0
  854. package/.output/server/node_modules/typeorm/schema-builder/view/View.js +71 -0
  855. package/.output/server/node_modules/typeorm/subscriber/Broadcaster.js +660 -0
  856. package/.output/server/node_modules/typeorm/subscriber/BroadcasterResult.js +30 -0
  857. package/.output/server/node_modules/typeorm/subscriber/event/QueryEvent.js +4 -0
  858. package/.output/server/node_modules/typeorm/util/ApplyValueTransformers.js +25 -0
  859. package/.output/server/node_modules/typeorm/util/DateUtils.js +229 -0
  860. package/.output/server/node_modules/typeorm/util/DepGraph.js +230 -0
  861. package/.output/server/node_modules/typeorm/util/DirectoryExportedClassesLoader.js +65 -0
  862. package/.output/server/node_modules/typeorm/util/ImportUtils.js +66 -0
  863. package/.output/server/node_modules/typeorm/util/InstanceChecker.js +104 -0
  864. package/.output/server/node_modules/typeorm/util/ObjectUtils.js +49 -0
  865. package/.output/server/node_modules/typeorm/util/OrmUtils.js +443 -0
  866. package/.output/server/node_modules/typeorm/util/PathUtils.js +33 -0
  867. package/.output/server/node_modules/typeorm/util/RandomGenerator.js +154 -0
  868. package/.output/server/node_modules/typeorm/util/SqlTagUtils.js +43 -0
  869. package/.output/server/node_modules/typeorm/util/StringUtils.js +113 -0
  870. package/.output/server/node_modules/typeorm/util/TreeRepositoryUtils.js +67 -0
  871. package/.output/server/node_modules/typeorm/util/VersionUtils.js +27 -0
  872. package/.output/server/node_modules/typeorm/util/escapeRegExp.js +10 -0
  873. package/.output/server/node_modules/ufo/dist/index.mjs +630 -0
  874. package/.output/server/node_modules/ufo/package.json +47 -0
  875. package/.output/server/node_modules/unhead/dist/plugins.mjs +94 -0
  876. package/.output/server/node_modules/unhead/dist/server.mjs +220 -0
  877. package/.output/server/node_modules/unhead/dist/shared/unhead.C13swrCa.mjs +48 -0
  878. package/.output/server/node_modules/unhead/dist/shared/unhead.CApf5sj3.mjs +148 -0
  879. package/.output/server/node_modules/unhead/dist/shared/unhead.Cp0iF6eN.mjs +177 -0
  880. package/.output/server/node_modules/unhead/dist/shared/unhead.DGkFBTYv.mjs +172 -0
  881. package/.output/server/node_modules/unhead/dist/shared/unhead.DQc16pHI.mjs +196 -0
  882. package/.output/server/node_modules/unhead/dist/shared/unhead.DZbvapt-.mjs +70 -0
  883. package/.output/server/node_modules/unhead/dist/shared/unhead.DeCxexjU.mjs +166 -0
  884. package/.output/server/node_modules/unhead/dist/shared/unhead.yem5I2v_.mjs +38 -0
  885. package/.output/server/node_modules/unhead/dist/utils.mjs +5 -0
  886. package/.output/server/node_modules/unhead/package.json +101 -0
  887. package/.output/server/node_modules/uuid/dist/cjs/index.js +31 -0
  888. package/.output/server/node_modules/uuid/dist/cjs/max.js +3 -0
  889. package/.output/server/node_modules/uuid/dist/cjs/md5.js +13 -0
  890. package/.output/server/node_modules/uuid/dist/cjs/native.js +4 -0
  891. package/.output/server/node_modules/uuid/dist/cjs/nil.js +3 -0
  892. package/.output/server/node_modules/uuid/dist/cjs/package.json +1 -0
  893. package/.output/server/node_modules/uuid/dist/cjs/parse.js +11 -0
  894. package/.output/server/node_modules/uuid/dist/cjs/regex.js +3 -0
  895. package/.output/server/node_modules/uuid/dist/cjs/rng.js +13 -0
  896. package/.output/server/node_modules/uuid/dist/cjs/sha1.js +13 -0
  897. package/.output/server/node_modules/uuid/dist/cjs/stringify.js +39 -0
  898. package/.output/server/node_modules/uuid/dist/cjs/v1.js +87 -0
  899. package/.output/server/node_modules/uuid/dist/cjs/v1ToV6.js +13 -0
  900. package/.output/server/node_modules/uuid/dist/cjs/v3.js +14 -0
  901. package/.output/server/node_modules/uuid/dist/cjs/v35.js +41 -0
  902. package/.output/server/node_modules/uuid/dist/cjs/v4.js +29 -0
  903. package/.output/server/node_modules/uuid/dist/cjs/v5.js +14 -0
  904. package/.output/server/node_modules/uuid/dist/cjs/v6.js +19 -0
  905. package/.output/server/node_modules/uuid/dist/cjs/v6ToV1.js +13 -0
  906. package/.output/server/node_modules/uuid/dist/cjs/v7.js +69 -0
  907. package/.output/server/node_modules/uuid/dist/cjs/validate.js +7 -0
  908. package/.output/server/node_modules/uuid/dist/cjs/version.js +10 -0
  909. package/.output/server/node_modules/uuid/package.json +132 -0
  910. package/.output/server/node_modules/vue/dist/vue.cjs.js +80 -0
  911. package/.output/server/node_modules/vue/dist/vue.cjs.prod.js +66 -0
  912. package/.output/server/node_modules/vue/index.js +7 -0
  913. package/.output/server/node_modules/vue/index.mjs +1 -0
  914. package/.output/server/node_modules/vue/package.json +112 -0
  915. package/.output/server/node_modules/vue/server-renderer/index.mjs +1 -0
  916. package/.output/server/node_modules/vue-bundle-renderer/dist/runtime.mjs +196 -0
  917. package/.output/server/node_modules/vue-bundle-renderer/package.json +50 -0
  918. package/.output/server/node_modules/xtend/mutable.js +17 -0
  919. package/.output/server/node_modules/xtend/package.json +55 -0
  920. package/.output/server/node_modules/zod/index.js +4 -0
  921. package/.output/server/node_modules/zod/package.json +135 -0
  922. package/.output/server/node_modules/zod/v3/ZodError.js +133 -0
  923. package/.output/server/node_modules/zod/v3/errors.js +9 -0
  924. package/.output/server/node_modules/zod/v3/external.js +6 -0
  925. package/.output/server/node_modules/zod/v3/helpers/errorUtil.js +6 -0
  926. package/.output/server/node_modules/zod/v3/helpers/parseUtil.js +109 -0
  927. package/.output/server/node_modules/zod/v3/helpers/typeAliases.js +1 -0
  928. package/.output/server/node_modules/zod/v3/helpers/util.js +133 -0
  929. package/.output/server/node_modules/zod/v3/index.js +4 -0
  930. package/.output/server/node_modules/zod/v3/locales/en.js +109 -0
  931. package/.output/server/node_modules/zod/v3/package.json +6 -0
  932. package/.output/server/node_modules/zod/v3/types.js +3695 -0
  933. package/.output/server/node_modules/zod/v4/classic/checks.js +1 -0
  934. package/.output/server/node_modules/zod/v4/classic/coerce.js +17 -0
  935. package/.output/server/node_modules/zod/v4/classic/compat.js +31 -0
  936. package/.output/server/node_modules/zod/v4/classic/errors.js +48 -0
  937. package/.output/server/node_modules/zod/v4/classic/external.js +20 -0
  938. package/.output/server/node_modules/zod/v4/classic/from-json-schema.js +584 -0
  939. package/.output/server/node_modules/zod/v4/classic/index.js +4 -0
  940. package/.output/server/node_modules/zod/v4/classic/iso.js +30 -0
  941. package/.output/server/node_modules/zod/v4/classic/package.json +6 -0
  942. package/.output/server/node_modules/zod/v4/classic/parse.js +15 -0
  943. package/.output/server/node_modules/zod/v4/classic/schemas.js +1157 -0
  944. package/.output/server/node_modules/zod/v4/core/api.js +1082 -0
  945. package/.output/server/node_modules/zod/v4/core/checks.js +575 -0
  946. package/.output/server/node_modules/zod/v4/core/core.js +76 -0
  947. package/.output/server/node_modules/zod/v4/core/doc.js +35 -0
  948. package/.output/server/node_modules/zod/v4/core/errors.js +182 -0
  949. package/.output/server/node_modules/zod/v4/core/index.js +16 -0
  950. package/.output/server/node_modules/zod/v4/core/json-schema-generator.js +95 -0
  951. package/.output/server/node_modules/zod/v4/core/json-schema-processors.js +605 -0
  952. package/.output/server/node_modules/zod/v4/core/json-schema.js +1 -0
  953. package/.output/server/node_modules/zod/v4/core/package.json +6 -0
  954. package/.output/server/node_modules/zod/v4/core/parse.js +93 -0
  955. package/.output/server/node_modules/zod/v4/core/regexes.js +133 -0
  956. package/.output/server/node_modules/zod/v4/core/registries.js +51 -0
  957. package/.output/server/node_modules/zod/v4/core/schemas.js +2095 -0
  958. package/.output/server/node_modules/zod/v4/core/to-json-schema.js +437 -0
  959. package/.output/server/node_modules/zod/v4/core/util.js +651 -0
  960. package/.output/server/node_modules/zod/v4/core/versions.js +5 -0
  961. package/.output/server/node_modules/zod/v4/index.js +3 -0
  962. package/.output/server/node_modules/zod/v4/locales/ar.js +106 -0
  963. package/.output/server/node_modules/zod/v4/locales/az.js +105 -0
  964. package/.output/server/node_modules/zod/v4/locales/be.js +156 -0
  965. package/.output/server/node_modules/zod/v4/locales/bg.js +120 -0
  966. package/.output/server/node_modules/zod/v4/locales/ca.js +107 -0
  967. package/.output/server/node_modules/zod/v4/locales/cs.js +111 -0
  968. package/.output/server/node_modules/zod/v4/locales/da.js +115 -0
  969. package/.output/server/node_modules/zod/v4/locales/de.js +108 -0
  970. package/.output/server/node_modules/zod/v4/locales/en.js +109 -0
  971. package/.output/server/node_modules/zod/v4/locales/eo.js +109 -0
  972. package/.output/server/node_modules/zod/v4/locales/es.js +132 -0
  973. package/.output/server/node_modules/zod/v4/locales/fa.js +114 -0
  974. package/.output/server/node_modules/zod/v4/locales/fi.js +112 -0
  975. package/.output/server/node_modules/zod/v4/locales/fr-CA.js +107 -0
  976. package/.output/server/node_modules/zod/v4/locales/fr.js +108 -0
  977. package/.output/server/node_modules/zod/v4/locales/he.js +214 -0
  978. package/.output/server/node_modules/zod/v4/locales/hu.js +108 -0
  979. package/.output/server/node_modules/zod/v4/locales/hy.js +147 -0
  980. package/.output/server/node_modules/zod/v4/locales/id.js +106 -0
  981. package/.output/server/node_modules/zod/v4/locales/index.js +49 -0
  982. package/.output/server/node_modules/zod/v4/locales/is.js +109 -0
  983. package/.output/server/node_modules/zod/v4/locales/it.js +108 -0
  984. package/.output/server/node_modules/zod/v4/locales/ja.js +107 -0
  985. package/.output/server/node_modules/zod/v4/locales/ka.js +112 -0
  986. package/.output/server/node_modules/zod/v4/locales/kh.js +5 -0
  987. package/.output/server/node_modules/zod/v4/locales/km.js +110 -0
  988. package/.output/server/node_modules/zod/v4/locales/ko.js +111 -0
  989. package/.output/server/node_modules/zod/v4/locales/lt.js +203 -0
  990. package/.output/server/node_modules/zod/v4/locales/mk.js +109 -0
  991. package/.output/server/node_modules/zod/v4/locales/ms.js +107 -0
  992. package/.output/server/node_modules/zod/v4/locales/nl.js +110 -0
  993. package/.output/server/node_modules/zod/v4/locales/no.js +108 -0
  994. package/.output/server/node_modules/zod/v4/locales/ota.js +109 -0
  995. package/.output/server/node_modules/zod/v4/locales/package.json +6 -0
  996. package/.output/server/node_modules/zod/v4/locales/pl.js +109 -0
  997. package/.output/server/node_modules/zod/v4/locales/ps.js +114 -0
  998. package/.output/server/node_modules/zod/v4/locales/pt.js +108 -0
  999. package/.output/server/node_modules/zod/v4/locales/ru.js +156 -0
  1000. package/.output/server/node_modules/zod/v4/locales/sl.js +109 -0
  1001. package/.output/server/node_modules/zod/v4/locales/sv.js +110 -0
  1002. package/.output/server/node_modules/zod/v4/locales/ta.js +110 -0
  1003. package/.output/server/node_modules/zod/v4/locales/th.js +110 -0
  1004. package/.output/server/node_modules/zod/v4/locales/tr.js +105 -0
  1005. package/.output/server/node_modules/zod/v4/locales/ua.js +5 -0
  1006. package/.output/server/node_modules/zod/v4/locales/uk.js +108 -0
  1007. package/.output/server/node_modules/zod/v4/locales/ur.js +110 -0
  1008. package/.output/server/node_modules/zod/v4/locales/uz.js +109 -0
  1009. package/.output/server/node_modules/zod/v4/locales/vi.js +108 -0
  1010. package/.output/server/node_modules/zod/v4/locales/yo.js +107 -0
  1011. package/.output/server/node_modules/zod/v4/locales/zh-CN.js +109 -0
  1012. package/.output/server/node_modules/zod/v4/locales/zh-TW.js +107 -0
  1013. package/.output/server/node_modules/zod/v4/package.json +6 -0
  1014. package/.output/server/package.json +95 -0
  1015. package/README.md +46 -0
  1016. package/bin/cli.mjs +113 -0
  1017. package/bin/entry.cjs +84 -0
  1018. package/package.json +48 -0
@@ -0,0 +1,2453 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CockroachQueryRunner = void 0;
4
+ const error_1 = require("../../error");
5
+ const QueryFailedError_1 = require("../../error/QueryFailedError");
6
+ const QueryRunnerAlreadyReleasedError_1 = require("../../error/QueryRunnerAlreadyReleasedError");
7
+ const TransactionNotStartedError_1 = require("../../error/TransactionNotStartedError");
8
+ const BaseQueryRunner_1 = require("../../query-runner/BaseQueryRunner");
9
+ const QueryResult_1 = require("../../query-runner/QueryResult");
10
+ const Table_1 = require("../../schema-builder/table/Table");
11
+ const TableCheck_1 = require("../../schema-builder/table/TableCheck");
12
+ const TableColumn_1 = require("../../schema-builder/table/TableColumn");
13
+ const TableExclusion_1 = require("../../schema-builder/table/TableExclusion");
14
+ const TableForeignKey_1 = require("../../schema-builder/table/TableForeignKey");
15
+ const TableIndex_1 = require("../../schema-builder/table/TableIndex");
16
+ const TableUnique_1 = require("../../schema-builder/table/TableUnique");
17
+ const View_1 = require("../../schema-builder/view/View");
18
+ const Broadcaster_1 = require("../../subscriber/Broadcaster");
19
+ const BroadcasterResult_1 = require("../../subscriber/BroadcasterResult");
20
+ const InstanceChecker_1 = require("../../util/InstanceChecker");
21
+ const OrmUtils_1 = require("../../util/OrmUtils");
22
+ const VersionUtils_1 = require("../../util/VersionUtils");
23
+ const Query_1 = require("../Query");
24
+ const MetadataTableType_1 = require("../types/MetadataTableType");
25
+ /**
26
+ * Runs queries on a single postgres database connection.
27
+ */
28
+ class CockroachQueryRunner extends BaseQueryRunner_1.BaseQueryRunner {
29
+ // -------------------------------------------------------------------------
30
+ // Constructor
31
+ // -------------------------------------------------------------------------
32
+ constructor(driver, mode) {
33
+ super();
34
+ /**
35
+ * Stores all executed queries to be able to run them again if transaction fails.
36
+ */
37
+ this.queries = [];
38
+ /**
39
+ * Indicates if running queries must be stored
40
+ */
41
+ this.storeQueries = false;
42
+ /**
43
+ * Current number of transaction retries in case of 40001 error.
44
+ */
45
+ this.transactionRetries = 0;
46
+ this.driver = driver;
47
+ this.connection = driver.connection;
48
+ this.mode = mode;
49
+ this.broadcaster = new Broadcaster_1.Broadcaster(this);
50
+ }
51
+ // -------------------------------------------------------------------------
52
+ // Public Methods
53
+ // -------------------------------------------------------------------------
54
+ /**
55
+ * Creates/uses database connection from the connection pool to perform further operations.
56
+ * Returns obtained database connection.
57
+ */
58
+ connect() {
59
+ if (this.databaseConnection)
60
+ return Promise.resolve(this.databaseConnection);
61
+ if (this.databaseConnectionPromise)
62
+ return this.databaseConnectionPromise;
63
+ if (this.mode === "slave" && this.driver.isReplicated) {
64
+ this.databaseConnectionPromise = this.driver
65
+ .obtainSlaveConnection()
66
+ .then(([connection, release]) => {
67
+ this.driver.connectedQueryRunners.push(this);
68
+ this.databaseConnection = connection;
69
+ const onErrorCallback = (err) => this.releaseConnection(err);
70
+ this.releaseCallback = (err) => {
71
+ this.databaseConnection.removeListener("error", onErrorCallback);
72
+ release(err);
73
+ };
74
+ this.databaseConnection.on("error", onErrorCallback);
75
+ return this.databaseConnection;
76
+ });
77
+ }
78
+ else {
79
+ // master
80
+ this.databaseConnectionPromise = this.driver
81
+ .obtainMasterConnection()
82
+ .then(([connection, release]) => {
83
+ this.driver.connectedQueryRunners.push(this);
84
+ this.databaseConnection = connection;
85
+ const onErrorCallback = (err) => this.releaseConnection(err);
86
+ this.releaseCallback = (err) => {
87
+ this.databaseConnection.removeListener("error", onErrorCallback);
88
+ release(err);
89
+ };
90
+ this.databaseConnection.on("error", onErrorCallback);
91
+ return this.databaseConnection;
92
+ });
93
+ }
94
+ return this.databaseConnectionPromise;
95
+ }
96
+ /**
97
+ * Release a connection back to the pool, optionally specifying an Error to release with.
98
+ * Per pg-pool documentation this will prevent the pool from re-using the broken connection.
99
+ */
100
+ async releaseConnection(err) {
101
+ if (this.isReleased) {
102
+ return;
103
+ }
104
+ this.isReleased = true;
105
+ if (this.releaseCallback) {
106
+ this.releaseCallback(err);
107
+ this.releaseCallback = undefined;
108
+ }
109
+ const index = this.driver.connectedQueryRunners.indexOf(this);
110
+ if (index !== -1) {
111
+ this.driver.connectedQueryRunners.splice(index, 1);
112
+ }
113
+ }
114
+ /**
115
+ * Releases used database connection.
116
+ * You cannot use query runner methods once its released.
117
+ */
118
+ release() {
119
+ return this.releaseConnection();
120
+ }
121
+ /**
122
+ * Starts transaction.
123
+ */
124
+ async startTransaction(isolationLevel) {
125
+ this.isTransactionActive = true;
126
+ this.transactionRetries = 0;
127
+ try {
128
+ await this.broadcaster.broadcast("BeforeTransactionStart");
129
+ }
130
+ catch (err) {
131
+ this.isTransactionActive = false;
132
+ throw err;
133
+ }
134
+ if (this.transactionDepth === 0) {
135
+ await this.query("START TRANSACTION");
136
+ await this.query("SAVEPOINT cockroach_restart");
137
+ if (isolationLevel) {
138
+ await this.query("SET TRANSACTION ISOLATION LEVEL " + isolationLevel);
139
+ }
140
+ }
141
+ else {
142
+ await this.query(`SAVEPOINT typeorm_${this.transactionDepth}`);
143
+ }
144
+ this.transactionDepth += 1;
145
+ this.storeQueries = true;
146
+ await this.broadcaster.broadcast("AfterTransactionStart");
147
+ }
148
+ /**
149
+ * Commits transaction.
150
+ * Error will be thrown if transaction was not started.
151
+ */
152
+ async commitTransaction() {
153
+ if (!this.isTransactionActive)
154
+ throw new TransactionNotStartedError_1.TransactionNotStartedError();
155
+ await this.broadcaster.broadcast("BeforeTransactionCommit");
156
+ if (this.transactionDepth > 1) {
157
+ await this.query(`RELEASE SAVEPOINT typeorm_${this.transactionDepth - 1}`);
158
+ this.transactionDepth -= 1;
159
+ }
160
+ else {
161
+ this.storeQueries = false;
162
+ await this.query("RELEASE SAVEPOINT cockroach_restart");
163
+ await this.query("COMMIT");
164
+ this.queries = [];
165
+ this.isTransactionActive = false;
166
+ this.transactionRetries = 0;
167
+ this.transactionDepth -= 1;
168
+ }
169
+ await this.broadcaster.broadcast("AfterTransactionCommit");
170
+ }
171
+ /**
172
+ * Rollbacks transaction.
173
+ * Error will be thrown if transaction was not started.
174
+ */
175
+ async rollbackTransaction() {
176
+ if (!this.isTransactionActive)
177
+ throw new TransactionNotStartedError_1.TransactionNotStartedError();
178
+ await this.broadcaster.broadcast("BeforeTransactionRollback");
179
+ if (this.transactionDepth > 1) {
180
+ await this.query(`ROLLBACK TO SAVEPOINT typeorm_${this.transactionDepth - 1}`);
181
+ }
182
+ else {
183
+ this.storeQueries = false;
184
+ await this.query("ROLLBACK");
185
+ this.queries = [];
186
+ this.isTransactionActive = false;
187
+ this.transactionRetries = 0;
188
+ }
189
+ this.transactionDepth -= 1;
190
+ await this.broadcaster.broadcast("AfterTransactionRollback");
191
+ }
192
+ /**
193
+ * Executes a given SQL query.
194
+ */
195
+ async query(query, parameters, useStructuredResult = false) {
196
+ if (this.isReleased)
197
+ throw new QueryRunnerAlreadyReleasedError_1.QueryRunnerAlreadyReleasedError();
198
+ const databaseConnection = await this.connect();
199
+ this.driver.connection.logger.logQuery(query, parameters, this);
200
+ await this.broadcaster.broadcast("BeforeQuery", query, parameters);
201
+ const broadcasterResult = new BroadcasterResult_1.BroadcasterResult();
202
+ const queryStartTime = Date.now();
203
+ if (this.isTransactionActive && this.storeQueries) {
204
+ this.queries.push({ query, parameters });
205
+ }
206
+ try {
207
+ const raw = await new Promise((ok, fail) => {
208
+ databaseConnection.query(query, parameters, (err, raw) => (err ? fail(err) : ok(raw)));
209
+ });
210
+ // log slow queries if maxQueryExecution time is set
211
+ const maxQueryExecutionTime = this.driver.options.maxQueryExecutionTime;
212
+ const queryEndTime = Date.now();
213
+ const queryExecutionTime = queryEndTime - queryStartTime;
214
+ if (maxQueryExecutionTime &&
215
+ queryExecutionTime > maxQueryExecutionTime) {
216
+ this.driver.connection.logger.logQuerySlow(queryExecutionTime, query, parameters, this);
217
+ }
218
+ const result = new QueryResult_1.QueryResult();
219
+ if (raw.hasOwnProperty("rowCount")) {
220
+ result.affected = raw.rowCount;
221
+ }
222
+ if (raw.hasOwnProperty("rows")) {
223
+ result.records = raw.rows;
224
+ }
225
+ switch (raw.command) {
226
+ case "DELETE":
227
+ // for DELETE query additionally return number of affected rows
228
+ result.raw = [raw.rows, raw.rowCount];
229
+ break;
230
+ default:
231
+ result.raw = raw.rows;
232
+ }
233
+ this.broadcaster.broadcastAfterQueryEvent(broadcasterResult, query, parameters, true, queryExecutionTime, raw, undefined);
234
+ if (useStructuredResult) {
235
+ return result;
236
+ }
237
+ else {
238
+ return result.raw;
239
+ }
240
+ }
241
+ catch (err) {
242
+ if (err.code === "40001" &&
243
+ this.isTransactionActive &&
244
+ this.transactionRetries <
245
+ (this.driver.options.maxTransactionRetries || 5)) {
246
+ this.transactionRetries += 1;
247
+ this.storeQueries = false;
248
+ await this.query("ROLLBACK TO SAVEPOINT cockroach_restart");
249
+ const sleepTime = 2 ** this.transactionRetries *
250
+ 0.1 *
251
+ (Math.random() + 0.5) *
252
+ 1000;
253
+ await new Promise((resolve) => setTimeout(resolve, sleepTime));
254
+ let result = undefined;
255
+ for (const q of this.queries) {
256
+ this.driver.connection.logger.logQuery(`Retrying transaction for query "${q.query}"`, q.parameters, this);
257
+ result = await this.query(q.query, q.parameters);
258
+ }
259
+ this.transactionRetries = 0;
260
+ this.storeQueries = true;
261
+ return result;
262
+ }
263
+ else {
264
+ this.driver.connection.logger.logQueryError(err, query, parameters, this);
265
+ this.broadcaster.broadcastAfterQueryEvent(broadcasterResult, query, parameters, false, undefined, undefined, err);
266
+ throw new QueryFailedError_1.QueryFailedError(query, parameters, err);
267
+ }
268
+ }
269
+ finally {
270
+ await broadcasterResult.wait();
271
+ }
272
+ }
273
+ /**
274
+ * Returns raw data stream.
275
+ */
276
+ async stream(query, parameters, onEnd, onError) {
277
+ const QueryStream = this.driver.loadStreamDependency();
278
+ if (this.isReleased) {
279
+ throw new QueryRunnerAlreadyReleasedError_1.QueryRunnerAlreadyReleasedError();
280
+ }
281
+ const databaseConnection = await this.connect();
282
+ this.driver.connection.logger.logQuery(query, parameters, this);
283
+ const stream = databaseConnection.query(new QueryStream(query, parameters));
284
+ if (onEnd) {
285
+ stream.on("end", onEnd);
286
+ }
287
+ if (onError) {
288
+ stream.on("error", onError);
289
+ }
290
+ return stream;
291
+ }
292
+ /**
293
+ * Returns all available database names including system databases.
294
+ */
295
+ async getDatabases() {
296
+ return Promise.resolve([]);
297
+ }
298
+ /**
299
+ * Returns all available schema names including system schemas.
300
+ * If database parameter specified, returns schemas of that database.
301
+ */
302
+ async getSchemas(database) {
303
+ return Promise.resolve([]);
304
+ }
305
+ /**
306
+ * Checks if database with the given name exist.
307
+ */
308
+ async hasDatabase(database) {
309
+ const result = await this.query(`SELECT * FROM "pg_database" WHERE "datname" = '${database}'`);
310
+ return result.length ? true : false;
311
+ }
312
+ /**
313
+ * Loads currently using database
314
+ */
315
+ async getCurrentDatabase() {
316
+ const query = await this.query(`SELECT * FROM current_database()`);
317
+ return query[0]["current_database"];
318
+ }
319
+ /**
320
+ * Checks if schema with the given name exist.
321
+ */
322
+ async hasSchema(schema) {
323
+ const result = await this.query(`SELECT * FROM "information_schema"."schemata" WHERE "schema_name" = '${schema}'`);
324
+ return result.length ? true : false;
325
+ }
326
+ /**
327
+ * Loads currently using database schema
328
+ */
329
+ async getCurrentSchema() {
330
+ const query = await this.query(`SELECT * FROM current_schema()`);
331
+ return query[0]["current_schema"];
332
+ }
333
+ /**
334
+ * Checks if table with the given name exist in the database.
335
+ */
336
+ async hasTable(tableOrName) {
337
+ const parsedTableName = this.driver.parseTableName(tableOrName);
338
+ if (!parsedTableName.schema) {
339
+ parsedTableName.schema = await this.getCurrentSchema();
340
+ }
341
+ const sql = `SELECT * FROM "information_schema"."tables" WHERE "table_schema" = '${parsedTableName.schema}' AND "table_name" = '${parsedTableName.tableName}'`;
342
+ const result = await this.query(sql);
343
+ return result.length ? true : false;
344
+ }
345
+ /**
346
+ * Checks if column with the given name exist in the given table.
347
+ */
348
+ async hasColumn(tableOrName, columnName) {
349
+ const parsedTableName = this.driver.parseTableName(tableOrName);
350
+ if (!parsedTableName.schema) {
351
+ parsedTableName.schema = await this.getCurrentSchema();
352
+ }
353
+ const sql = `SELECT * FROM "information_schema"."columns" WHERE "table_schema" = '${parsedTableName.schema}' AND "table_name" = '${parsedTableName.tableName}' AND "column_name" = '${columnName}'`;
354
+ const result = await this.query(sql);
355
+ return result.length ? true : false;
356
+ }
357
+ /**
358
+ * Creates a new database.
359
+ */
360
+ async createDatabase(database, ifNotExist) {
361
+ const up = `CREATE DATABASE ${ifNotExist ? "IF NOT EXISTS " : ""} "${database}"`;
362
+ const down = `DROP DATABASE "${database}"`;
363
+ await this.executeQueries(new Query_1.Query(up), new Query_1.Query(down));
364
+ }
365
+ /**
366
+ * Drops database.
367
+ */
368
+ async dropDatabase(database, ifExist) {
369
+ const up = `DROP DATABASE ${ifExist ? "IF EXISTS " : ""} "${database}"`;
370
+ const down = `CREATE DATABASE "${database}"`;
371
+ await this.executeQueries(new Query_1.Query(up), new Query_1.Query(down));
372
+ }
373
+ /**
374
+ * Creates a new table schema.
375
+ */
376
+ async createSchema(schemaPath, ifNotExist) {
377
+ const schema = schemaPath.indexOf(".") === -1
378
+ ? schemaPath
379
+ : schemaPath.split(".")[1];
380
+ const up = ifNotExist
381
+ ? `CREATE SCHEMA IF NOT EXISTS "${schema}"`
382
+ : `CREATE SCHEMA "${schema}"`;
383
+ const down = `DROP SCHEMA "${schema}" CASCADE`;
384
+ await this.executeQueries(new Query_1.Query(up), new Query_1.Query(down));
385
+ }
386
+ /**
387
+ * Drops table schema.
388
+ */
389
+ async dropSchema(schemaPath, ifExist, isCascade) {
390
+ const schema = schemaPath.indexOf(".") === -1
391
+ ? schemaPath
392
+ : schemaPath.split(".")[1];
393
+ const up = ifExist
394
+ ? `DROP SCHEMA IF EXISTS "${schema}" ${isCascade ? "CASCADE" : ""}`
395
+ : `DROP SCHEMA "${schema}" ${isCascade ? "CASCADE" : ""}`;
396
+ const down = `CREATE SCHEMA "${schema}"`;
397
+ await this.executeQueries(new Query_1.Query(up), new Query_1.Query(down));
398
+ }
399
+ /**
400
+ * Creates a new table.
401
+ */
402
+ async createTable(table, ifNotExist = false, createForeignKeys = true, createIndices = true) {
403
+ if (ifNotExist) {
404
+ const isTableExist = await this.hasTable(table);
405
+ if (isTableExist)
406
+ return Promise.resolve();
407
+ }
408
+ const upQueries = [];
409
+ const downQueries = [];
410
+ // if table have column with ENUM type, we must create this type in postgres.
411
+ const enumColumns = table.columns.filter((column) => column.type === "enum" || column.type === "simple-enum");
412
+ const createdEnumTypes = [];
413
+ for (const column of enumColumns) {
414
+ // TODO: Should also check if values of existing type matches expected ones
415
+ const hasEnum = await this.hasEnumType(table, column);
416
+ const enumName = this.buildEnumName(table, column);
417
+ // if enum with the same "enumName" is defined more then once, me must prevent double creation
418
+ if (!hasEnum && createdEnumTypes.indexOf(enumName) === -1) {
419
+ createdEnumTypes.push(enumName);
420
+ upQueries.push(this.createEnumTypeSql(table, column, enumName));
421
+ downQueries.push(this.dropEnumTypeSql(table, column, enumName));
422
+ }
423
+ }
424
+ table.columns
425
+ .filter((column) => column.isGenerated &&
426
+ column.generationStrategy === "increment")
427
+ .forEach((column) => {
428
+ upQueries.push(new Query_1.Query(`CREATE SEQUENCE ${this.escapePath(this.buildSequencePath(table, column))}`));
429
+ downQueries.push(new Query_1.Query(`DROP SEQUENCE ${this.escapePath(this.buildSequencePath(table, column))}`));
430
+ });
431
+ upQueries.push(this.createTableSql(table, createForeignKeys));
432
+ downQueries.push(this.dropTableSql(table));
433
+ // if createForeignKeys is true, we must drop created foreign keys in down query.
434
+ // createTable does not need separate method to create foreign keys, because it create fk's in the same query with table creation.
435
+ if (createForeignKeys)
436
+ table.foreignKeys.forEach((foreignKey) => downQueries.push(this.dropForeignKeySql(table, foreignKey)));
437
+ if (createIndices) {
438
+ table.indices
439
+ .filter((index) => !index.isUnique)
440
+ .forEach((index) => {
441
+ // new index may be passed without name. In this case we generate index name manually.
442
+ if (!index.name)
443
+ index.name = this.connection.namingStrategy.indexName(table, index.columnNames, index.where);
444
+ upQueries.push(this.createIndexSql(table, index));
445
+ downQueries.push(this.dropIndexSql(table, index));
446
+ });
447
+ }
448
+ // if table have column with generated type, we must add the expression to the metadata table
449
+ const generatedColumns = table.columns.filter((column) => column.generatedType && column.asExpression);
450
+ for (const column of generatedColumns) {
451
+ const currentSchema = await this.getCurrentSchema();
452
+ let { schema } = this.driver.parseTableName(table);
453
+ if (!schema) {
454
+ schema = currentSchema;
455
+ }
456
+ const insertQuery = this.insertTypeormMetadataSql({
457
+ schema: schema,
458
+ table: table.name,
459
+ type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
460
+ name: column.name,
461
+ value: column.asExpression,
462
+ });
463
+ const deleteQuery = this.deleteTypeormMetadataSql({
464
+ schema: schema,
465
+ table: table.name,
466
+ type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
467
+ name: column.name,
468
+ });
469
+ upQueries.push(insertQuery);
470
+ downQueries.push(deleteQuery);
471
+ }
472
+ await this.executeQueries(upQueries, downQueries);
473
+ }
474
+ /**
475
+ * Drops the table.
476
+ */
477
+ async dropTable(target, ifExist, dropForeignKeys = true, dropIndices = true) {
478
+ // It needs because if table does not exist and dropForeignKeys or dropIndices is true, we don't need
479
+ // to perform drop queries for foreign keys and indices.
480
+ if (ifExist) {
481
+ const isTableExist = await this.hasTable(target);
482
+ if (!isTableExist)
483
+ return Promise.resolve();
484
+ }
485
+ // if dropTable called with dropForeignKeys = true, we must create foreign keys in down query.
486
+ const createForeignKeys = dropForeignKeys;
487
+ const tablePath = this.getTablePath(target);
488
+ const table = await this.getCachedTable(tablePath);
489
+ const upQueries = [];
490
+ const downQueries = [];
491
+ // foreign keys must be dropped before indices, because fk's rely on indices
492
+ if (dropForeignKeys)
493
+ table.foreignKeys.forEach((foreignKey) => upQueries.push(this.dropForeignKeySql(table, foreignKey)));
494
+ if (dropIndices) {
495
+ table.indices.forEach((index) => {
496
+ upQueries.push(this.dropIndexSql(table, index));
497
+ downQueries.push(this.createIndexSql(table, index));
498
+ });
499
+ }
500
+ upQueries.push(this.dropTableSql(table));
501
+ downQueries.push(this.createTableSql(table, createForeignKeys));
502
+ table.columns
503
+ .filter((column) => column.isGenerated &&
504
+ column.generationStrategy === "increment")
505
+ .forEach((column) => {
506
+ upQueries.push(new Query_1.Query(`DROP SEQUENCE ${this.escapePath(this.buildSequencePath(table, column))}`));
507
+ downQueries.push(new Query_1.Query(`CREATE SEQUENCE ${this.escapePath(this.buildSequencePath(table, column))}`));
508
+ });
509
+ // if table had columns with generated type, we must remove the expression from the metadata table
510
+ const generatedColumns = table.columns.filter((column) => column.generatedType && column.asExpression);
511
+ for (const column of generatedColumns) {
512
+ const currentSchema = await this.getCurrentSchema();
513
+ let { schema } = this.driver.parseTableName(table);
514
+ if (!schema) {
515
+ schema = currentSchema;
516
+ }
517
+ const deleteQuery = this.deleteTypeormMetadataSql({
518
+ schema: schema,
519
+ table: table.name,
520
+ type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
521
+ name: column.name,
522
+ });
523
+ const insertQuery = this.insertTypeormMetadataSql({
524
+ schema: schema,
525
+ table: table.name,
526
+ type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
527
+ name: column.name,
528
+ value: column.asExpression,
529
+ });
530
+ upQueries.push(deleteQuery);
531
+ downQueries.push(insertQuery);
532
+ }
533
+ await this.executeQueries(upQueries, downQueries);
534
+ }
535
+ /**
536
+ * Creates a new view.
537
+ */
538
+ async createView(view, syncWithMetadata = false) {
539
+ const upQueries = [];
540
+ const downQueries = [];
541
+ upQueries.push(this.createViewSql(view));
542
+ if (syncWithMetadata)
543
+ upQueries.push(await this.insertViewDefinitionSql(view));
544
+ downQueries.push(this.dropViewSql(view));
545
+ if (syncWithMetadata)
546
+ downQueries.push(await this.deleteViewDefinitionSql(view));
547
+ await this.executeQueries(upQueries, downQueries);
548
+ }
549
+ /**
550
+ * Drops the view.
551
+ */
552
+ async dropView(target) {
553
+ const viewName = InstanceChecker_1.InstanceChecker.isView(target) ? target.name : target;
554
+ const view = await this.getCachedView(viewName);
555
+ const upQueries = [];
556
+ const downQueries = [];
557
+ upQueries.push(await this.deleteViewDefinitionSql(view));
558
+ upQueries.push(this.dropViewSql(view));
559
+ downQueries.push(await this.insertViewDefinitionSql(view));
560
+ downQueries.push(this.createViewSql(view));
561
+ await this.executeQueries(upQueries, downQueries);
562
+ }
563
+ /**
564
+ * Renames the given table.
565
+ */
566
+ async renameTable(oldTableOrName, newTableName) {
567
+ const upQueries = [];
568
+ const downQueries = [];
569
+ const oldTable = InstanceChecker_1.InstanceChecker.isTable(oldTableOrName)
570
+ ? oldTableOrName
571
+ : await this.getCachedTable(oldTableOrName);
572
+ const newTable = oldTable.clone();
573
+ const { schema: schemaName, tableName: oldTableName } = this.driver.parseTableName(oldTable);
574
+ newTable.name = schemaName
575
+ ? `${schemaName}.${newTableName}`
576
+ : newTableName;
577
+ upQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(oldTable)} RENAME TO "${newTableName}"`));
578
+ downQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(newTable)} RENAME TO "${oldTableName}"`));
579
+ // rename column primary key constraint
580
+ if (newTable.primaryColumns.length > 0 &&
581
+ !newTable.primaryColumns[0].primaryKeyConstraintName) {
582
+ const columnNames = newTable.primaryColumns.map((column) => column.name);
583
+ const oldPkName = this.connection.namingStrategy.primaryKeyName(oldTable, columnNames);
584
+ const newPkName = this.connection.namingStrategy.primaryKeyName(newTable, columnNames);
585
+ upQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(newTable)} RENAME CONSTRAINT "${oldPkName}" TO "${newPkName}"`));
586
+ downQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(newTable)} RENAME CONSTRAINT "${newPkName}" TO "${oldPkName}"`));
587
+ }
588
+ // rename unique constraints
589
+ newTable.uniques.forEach((unique) => {
590
+ const oldUniqueName = this.connection.namingStrategy.uniqueConstraintName(oldTable, unique.columnNames);
591
+ // Skip renaming if Unique has user defined constraint name
592
+ if (unique.name !== oldUniqueName)
593
+ return;
594
+ // build new constraint name
595
+ const newUniqueName = this.connection.namingStrategy.uniqueConstraintName(newTable, unique.columnNames);
596
+ // build queries
597
+ upQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(newTable)} RENAME CONSTRAINT "${unique.name}" TO "${newUniqueName}"`));
598
+ downQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(newTable)} RENAME CONSTRAINT "${newUniqueName}" TO "${unique.name}"`));
599
+ // replace constraint name
600
+ unique.name = newUniqueName;
601
+ });
602
+ // rename index constraints
603
+ newTable.indices.forEach((index) => {
604
+ const oldIndexName = this.connection.namingStrategy.indexName(oldTable, index.columnNames, index.where);
605
+ // Skip renaming if Index has user defined constraint name
606
+ if (index.name !== oldIndexName)
607
+ return;
608
+ // build new constraint name
609
+ const { schema } = this.driver.parseTableName(newTable);
610
+ const newIndexName = this.connection.namingStrategy.indexName(newTable, index.columnNames, index.where);
611
+ // build queries
612
+ const up = schema
613
+ ? `ALTER INDEX "${schema}"."${index.name}" RENAME TO "${newIndexName}"`
614
+ : `ALTER INDEX "${index.name}" RENAME TO "${newIndexName}"`;
615
+ const down = schema
616
+ ? `ALTER INDEX "${schema}"."${newIndexName}" RENAME TO "${index.name}"`
617
+ : `ALTER INDEX "${newIndexName}" RENAME TO "${index.name}"`;
618
+ upQueries.push(new Query_1.Query(up));
619
+ downQueries.push(new Query_1.Query(down));
620
+ // replace constraint name
621
+ index.name = newIndexName;
622
+ });
623
+ // rename foreign key constraints
624
+ newTable.foreignKeys.forEach((foreignKey) => {
625
+ const oldForeignKeyName = this.connection.namingStrategy.foreignKeyName(oldTable, foreignKey.columnNames, this.getTablePath(foreignKey), foreignKey.referencedColumnNames);
626
+ // Skip renaming if foreign key has user defined constraint name
627
+ if (foreignKey.name !== oldForeignKeyName)
628
+ return;
629
+ // build new constraint name
630
+ const newForeignKeyName = this.connection.namingStrategy.foreignKeyName(newTable, foreignKey.columnNames, this.getTablePath(foreignKey), foreignKey.referencedColumnNames);
631
+ // build queries
632
+ upQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(newTable)} RENAME CONSTRAINT "${foreignKey.name}" TO "${newForeignKeyName}"`));
633
+ downQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(newTable)} RENAME CONSTRAINT "${newForeignKeyName}" TO "${foreignKey.name}"`));
634
+ // replace constraint name
635
+ foreignKey.name = newForeignKeyName;
636
+ });
637
+ // rename ENUM types
638
+ const enumColumns = newTable.columns.filter((column) => column.type === "enum" || column.type === "simple-enum");
639
+ for (const column of enumColumns) {
640
+ // skip renaming for user-defined enum name
641
+ if (column.enumName)
642
+ continue;
643
+ const oldEnumType = await this.getUserDefinedTypeName(oldTable, column);
644
+ upQueries.push(new Query_1.Query(`ALTER TYPE "${oldEnumType.schema}"."${oldEnumType.name}" RENAME TO ${this.buildEnumName(newTable, column, false)}`));
645
+ downQueries.push(new Query_1.Query(`ALTER TYPE ${this.buildEnumName(newTable, column)} RENAME TO "${oldEnumType.name}"`));
646
+ }
647
+ await this.executeQueries(upQueries, downQueries);
648
+ }
649
+ /**
650
+ * Creates a new column from the column in the table.
651
+ */
652
+ async addColumn(tableOrName, column) {
653
+ const table = InstanceChecker_1.InstanceChecker.isTable(tableOrName)
654
+ ? tableOrName
655
+ : await this.getCachedTable(tableOrName);
656
+ const clonedTable = table.clone();
657
+ const upQueries = [];
658
+ const downQueries = [];
659
+ if (column.generationStrategy === "increment") {
660
+ throw new error_1.TypeORMError(`Adding sequential generated columns into existing table is not supported`);
661
+ }
662
+ if (column.type === "enum" || column.type === "simple-enum") {
663
+ const hasEnum = await this.hasEnumType(table, column);
664
+ if (!hasEnum) {
665
+ upQueries.push(this.createEnumTypeSql(table, column));
666
+ downQueries.push(this.dropEnumTypeSql(table, column));
667
+ }
668
+ }
669
+ upQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} ADD ${this.buildCreateColumnSql(table, column)}`));
670
+ downQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} DROP COLUMN "${column.name}"`));
671
+ // create or update primary key constraint
672
+ if (column.isPrimary) {
673
+ const primaryColumns = clonedTable.primaryColumns;
674
+ // if table already have primary key, me must drop it and recreate again
675
+ // todo: https://go.crdb.dev/issue-v/48026/v21.1
676
+ if (primaryColumns.length > 0) {
677
+ const pkName = primaryColumns[0].primaryKeyConstraintName
678
+ ? primaryColumns[0].primaryKeyConstraintName
679
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
680
+ const columnNames = primaryColumns
681
+ .map((column) => `"${column.name}"`)
682
+ .join(", ");
683
+ upQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT "${pkName}"`));
684
+ downQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT "${pkName}" PRIMARY KEY (${columnNames})`));
685
+ }
686
+ primaryColumns.push(column);
687
+ const pkName = primaryColumns[0].primaryKeyConstraintName
688
+ ? primaryColumns[0].primaryKeyConstraintName
689
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
690
+ const columnNames = primaryColumns
691
+ .map((column) => `"${column.name}"`)
692
+ .join(", ");
693
+ upQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT "${pkName}" PRIMARY KEY (${columnNames})`));
694
+ downQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT "${pkName}"`));
695
+ }
696
+ if (column.generatedType && column.asExpression) {
697
+ const currentSchema = await this.getCurrentSchema();
698
+ let { schema } = this.driver.parseTableName(table);
699
+ if (!schema) {
700
+ schema = currentSchema;
701
+ }
702
+ const insertQuery = this.insertTypeormMetadataSql({
703
+ schema: schema,
704
+ table: table.name,
705
+ type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
706
+ name: column.name,
707
+ value: column.asExpression,
708
+ });
709
+ const deleteQuery = this.deleteTypeormMetadataSql({
710
+ schema: schema,
711
+ table: table.name,
712
+ type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
713
+ name: column.name,
714
+ });
715
+ upQueries.push(insertQuery);
716
+ downQueries.push(deleteQuery);
717
+ }
718
+ // create column index
719
+ const columnIndex = clonedTable.indices.find((index) => index.columnNames.length === 1 &&
720
+ index.columnNames[0] === column.name);
721
+ if (columnIndex) {
722
+ // CockroachDB stores unique indices as UNIQUE constraints
723
+ if (columnIndex.isUnique) {
724
+ const unique = new TableUnique_1.TableUnique({
725
+ name: this.connection.namingStrategy.uniqueConstraintName(table, columnIndex.columnNames),
726
+ columnNames: columnIndex.columnNames,
727
+ });
728
+ upQueries.push(this.createUniqueConstraintSql(table, unique));
729
+ downQueries.push(this.dropIndexSql(table, unique));
730
+ clonedTable.uniques.push(unique);
731
+ }
732
+ else {
733
+ upQueries.push(this.createIndexSql(table, columnIndex));
734
+ downQueries.push(this.dropIndexSql(table, columnIndex));
735
+ }
736
+ }
737
+ // create unique constraint
738
+ if (column.isUnique) {
739
+ const uniqueConstraint = new TableUnique_1.TableUnique({
740
+ name: this.connection.namingStrategy.uniqueConstraintName(table, [column.name]),
741
+ columnNames: [column.name],
742
+ });
743
+ clonedTable.uniques.push(uniqueConstraint);
744
+ upQueries.push(this.createUniqueConstraintSql(table, uniqueConstraint));
745
+ downQueries.push(this.dropIndexSql(table, uniqueConstraint.name)); // CockroachDB creates indices for unique constraints
746
+ }
747
+ // create column's comment
748
+ if (column.comment) {
749
+ upQueries.push(new Query_1.Query(`COMMENT ON COLUMN ${this.escapePath(table)}."${column.name}" IS ${this.escapeComment(column.comment)}`));
750
+ downQueries.push(new Query_1.Query(`COMMENT ON COLUMN ${this.escapePath(table)}."${column.name}" IS ${this.escapeComment(column.comment)}`));
751
+ }
752
+ await this.executeQueries(upQueries, downQueries);
753
+ clonedTable.addColumn(column);
754
+ this.replaceCachedTable(table, clonedTable);
755
+ }
756
+ /**
757
+ * Creates a new columns from the column in the table.
758
+ */
759
+ async addColumns(tableOrName, columns) {
760
+ for (const column of columns) {
761
+ await this.addColumn(tableOrName, column);
762
+ }
763
+ }
764
+ /**
765
+ * Renames column in the given table.
766
+ */
767
+ async renameColumn(tableOrName, oldTableColumnOrName, newTableColumnOrName) {
768
+ const table = InstanceChecker_1.InstanceChecker.isTable(tableOrName)
769
+ ? tableOrName
770
+ : await this.getCachedTable(tableOrName);
771
+ const oldColumn = InstanceChecker_1.InstanceChecker.isTableColumn(oldTableColumnOrName)
772
+ ? oldTableColumnOrName
773
+ : table.columns.find((c) => c.name === oldTableColumnOrName);
774
+ if (!oldColumn)
775
+ throw new error_1.TypeORMError(`Column "${oldTableColumnOrName}" was not found in the "${table.name}" table.`);
776
+ let newColumn;
777
+ if (InstanceChecker_1.InstanceChecker.isTableColumn(newTableColumnOrName)) {
778
+ newColumn = newTableColumnOrName;
779
+ }
780
+ else {
781
+ newColumn = oldColumn.clone();
782
+ newColumn.name = newTableColumnOrName;
783
+ }
784
+ return this.changeColumn(table, oldColumn, newColumn);
785
+ }
786
+ /**
787
+ * Changes a column in the table.
788
+ */
789
+ async changeColumn(tableOrName, oldTableColumnOrName, newColumn) {
790
+ const table = InstanceChecker_1.InstanceChecker.isTable(tableOrName)
791
+ ? tableOrName
792
+ : await this.getCachedTable(tableOrName);
793
+ let clonedTable = table.clone();
794
+ const upQueries = [];
795
+ const downQueries = [];
796
+ let defaultValueChanged = false;
797
+ const oldColumn = InstanceChecker_1.InstanceChecker.isTableColumn(oldTableColumnOrName)
798
+ ? oldTableColumnOrName
799
+ : table.columns.find((column) => column.name === oldTableColumnOrName);
800
+ if (!oldColumn)
801
+ throw new error_1.TypeORMError(`Column "${oldTableColumnOrName}" was not found in the "${table.name}" table.`);
802
+ if (oldColumn.type !== newColumn.type ||
803
+ oldColumn.length !== newColumn.length ||
804
+ newColumn.isArray !== oldColumn.isArray ||
805
+ oldColumn.generatedType !== newColumn.generatedType ||
806
+ oldColumn.asExpression !== newColumn.asExpression) {
807
+ // To avoid data conversion, we just recreate column
808
+ await this.dropColumn(table, oldColumn);
809
+ await this.addColumn(table, newColumn);
810
+ // update cloned table
811
+ clonedTable = table.clone();
812
+ }
813
+ else {
814
+ if (oldColumn.name !== newColumn.name) {
815
+ // rename column
816
+ upQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} RENAME COLUMN "${oldColumn.name}" TO "${newColumn.name}"`));
817
+ downQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} RENAME COLUMN "${newColumn.name}" TO "${oldColumn.name}"`));
818
+ // rename ENUM type
819
+ if (oldColumn.type === "enum" ||
820
+ oldColumn.type === "simple-enum") {
821
+ const oldEnumType = await this.getUserDefinedTypeName(table, oldColumn);
822
+ upQueries.push(new Query_1.Query(`ALTER TYPE "${oldEnumType.schema}"."${oldEnumType.name}" RENAME TO ${this.buildEnumName(table, newColumn, false)}`));
823
+ downQueries.push(new Query_1.Query(`ALTER TYPE ${this.buildEnumName(table, newColumn)} RENAME TO "${oldEnumType.name}"`));
824
+ }
825
+ // rename column primary key constraint
826
+ if (oldColumn.isPrimary === true &&
827
+ !oldColumn.primaryKeyConstraintName) {
828
+ const primaryColumns = clonedTable.primaryColumns;
829
+ // build old primary constraint name
830
+ const columnNames = primaryColumns.map((column) => column.name);
831
+ const oldPkName = this.connection.namingStrategy.primaryKeyName(clonedTable, columnNames);
832
+ // replace old column name with new column name
833
+ columnNames.splice(columnNames.indexOf(oldColumn.name), 1);
834
+ columnNames.push(newColumn.name);
835
+ // build new primary constraint name
836
+ const newPkName = this.connection.namingStrategy.primaryKeyName(clonedTable, columnNames);
837
+ upQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} RENAME CONSTRAINT "${oldPkName}" TO "${newPkName}"`));
838
+ downQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} RENAME CONSTRAINT "${newPkName}" TO "${oldPkName}"`));
839
+ }
840
+ // rename unique constraints
841
+ clonedTable.findColumnUniques(oldColumn).forEach((unique) => {
842
+ const oldUniqueName = this.connection.namingStrategy.uniqueConstraintName(clonedTable, unique.columnNames);
843
+ // Skip renaming if Unique has user defined constraint name
844
+ if (unique.name !== oldUniqueName)
845
+ return;
846
+ // build new constraint name
847
+ unique.columnNames.splice(unique.columnNames.indexOf(oldColumn.name), 1);
848
+ unique.columnNames.push(newColumn.name);
849
+ const newUniqueName = this.connection.namingStrategy.uniqueConstraintName(clonedTable, unique.columnNames);
850
+ // build queries
851
+ upQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} RENAME CONSTRAINT "${unique.name}" TO "${newUniqueName}"`));
852
+ downQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} RENAME CONSTRAINT "${newUniqueName}" TO "${unique.name}"`));
853
+ // replace constraint name
854
+ unique.name = newUniqueName;
855
+ });
856
+ // rename index constraints
857
+ clonedTable.findColumnIndices(oldColumn).forEach((index) => {
858
+ const oldIndexName = this.connection.namingStrategy.indexName(clonedTable, index.columnNames, index.where);
859
+ // Skip renaming if Index has user defined constraint name
860
+ if (index.name !== oldIndexName)
861
+ return;
862
+ // build new constraint name
863
+ index.columnNames.splice(index.columnNames.indexOf(oldColumn.name), 1);
864
+ index.columnNames.push(newColumn.name);
865
+ const { schema } = this.driver.parseTableName(table);
866
+ const newIndexName = this.connection.namingStrategy.indexName(clonedTable, index.columnNames, index.where);
867
+ // build queries
868
+ const up = schema
869
+ ? `ALTER INDEX "${schema}"."${index.name}" RENAME TO "${newIndexName}"`
870
+ : `ALTER INDEX "${index.name}" RENAME TO "${newIndexName}"`;
871
+ const down = schema
872
+ ? `ALTER INDEX "${schema}"."${newIndexName}" RENAME TO "${index.name}"`
873
+ : `ALTER INDEX "${newIndexName}" RENAME TO "${index.name}"`;
874
+ upQueries.push(new Query_1.Query(up));
875
+ downQueries.push(new Query_1.Query(down));
876
+ // replace constraint name
877
+ index.name = newIndexName;
878
+ });
879
+ // rename foreign key constraints
880
+ clonedTable
881
+ .findColumnForeignKeys(oldColumn)
882
+ .forEach((foreignKey) => {
883
+ const foreignKeyName = this.connection.namingStrategy.foreignKeyName(clonedTable, foreignKey.columnNames, this.getTablePath(foreignKey), foreignKey.referencedColumnNames);
884
+ // Skip renaming if foreign key has user defined constraint name
885
+ if (foreignKey.name !== foreignKeyName)
886
+ return;
887
+ // build new constraint name
888
+ foreignKey.columnNames.splice(foreignKey.columnNames.indexOf(oldColumn.name), 1);
889
+ foreignKey.columnNames.push(newColumn.name);
890
+ const newForeignKeyName = this.connection.namingStrategy.foreignKeyName(clonedTable, foreignKey.columnNames, this.getTablePath(foreignKey), foreignKey.referencedColumnNames);
891
+ // build queries
892
+ upQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} RENAME CONSTRAINT "${foreignKey.name}" TO "${newForeignKeyName}"`));
893
+ downQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} RENAME CONSTRAINT "${newForeignKeyName}" TO "${foreignKey.name}"`));
894
+ // replace constraint name
895
+ foreignKey.name = newForeignKeyName;
896
+ });
897
+ // rename old column in the Table object
898
+ const oldTableColumn = clonedTable.columns.find((column) => column.name === oldColumn.name);
899
+ clonedTable.columns[clonedTable.columns.indexOf(oldTableColumn)].name = newColumn.name;
900
+ oldColumn.name = newColumn.name;
901
+ }
902
+ if (newColumn.precision !== oldColumn.precision ||
903
+ newColumn.scale !== oldColumn.scale) {
904
+ upQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} ALTER COLUMN "${newColumn.name}" TYPE ${this.driver.createFullType(newColumn)}`));
905
+ downQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} ALTER COLUMN "${newColumn.name}" TYPE ${this.driver.createFullType(oldColumn)}`));
906
+ }
907
+ if (oldColumn.isNullable !== newColumn.isNullable) {
908
+ if (newColumn.isNullable) {
909
+ upQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} ALTER COLUMN "${oldColumn.name}" DROP NOT NULL`));
910
+ downQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} ALTER COLUMN "${oldColumn.name}" SET NOT NULL`));
911
+ }
912
+ else {
913
+ upQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} ALTER COLUMN "${oldColumn.name}" SET NOT NULL`));
914
+ downQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} ALTER COLUMN "${oldColumn.name}" DROP NOT NULL`));
915
+ }
916
+ }
917
+ if (oldColumn.comment !== newColumn.comment) {
918
+ upQueries.push(new Query_1.Query(`COMMENT ON COLUMN ${this.escapePath(table)}."${oldColumn.name}" IS ${this.escapeComment(newColumn.comment)}`));
919
+ downQueries.push(new Query_1.Query(`COMMENT ON COLUMN ${this.escapePath(table)}."${newColumn.name}" IS ${this.escapeComment(oldColumn.comment)}`));
920
+ }
921
+ if (newColumn.isPrimary !== oldColumn.isPrimary) {
922
+ const primaryColumns = clonedTable.primaryColumns;
923
+ // if primary column state changed, we must always drop existed constraint.
924
+ if (primaryColumns.length > 0) {
925
+ const pkName = primaryColumns[0].primaryKeyConstraintName
926
+ ? primaryColumns[0].primaryKeyConstraintName
927
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
928
+ const columnNames = primaryColumns
929
+ .map((column) => `"${column.name}"`)
930
+ .join(", ");
931
+ upQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT "${pkName}"`));
932
+ downQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT "${pkName}" PRIMARY KEY (${columnNames})`));
933
+ }
934
+ if (newColumn.isPrimary === true) {
935
+ primaryColumns.push(newColumn);
936
+ // update column in table
937
+ const column = clonedTable.columns.find((column) => column.name === newColumn.name);
938
+ column.isPrimary = true;
939
+ const pkName = primaryColumns[0].primaryKeyConstraintName
940
+ ? primaryColumns[0].primaryKeyConstraintName
941
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
942
+ const columnNames = primaryColumns
943
+ .map((column) => `"${column.name}"`)
944
+ .join(", ");
945
+ upQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT "${pkName}" PRIMARY KEY (${columnNames})`));
946
+ downQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT "${pkName}"`));
947
+ }
948
+ else {
949
+ const primaryColumn = primaryColumns.find((c) => c.name === newColumn.name);
950
+ primaryColumns.splice(primaryColumns.indexOf(primaryColumn), 1);
951
+ // update column in table
952
+ const column = clonedTable.columns.find((column) => column.name === newColumn.name);
953
+ column.isPrimary = false;
954
+ // if we have another primary keys, we must recreate constraint.
955
+ if (primaryColumns.length > 0) {
956
+ const pkName = primaryColumns[0]
957
+ .primaryKeyConstraintName
958
+ ? primaryColumns[0].primaryKeyConstraintName
959
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
960
+ const columnNames = primaryColumns
961
+ .map((column) => `"${column.name}"`)
962
+ .join(", ");
963
+ upQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT "${pkName}" PRIMARY KEY (${columnNames})`));
964
+ downQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT "${pkName}"`));
965
+ }
966
+ }
967
+ }
968
+ if (newColumn.isUnique !== oldColumn.isUnique) {
969
+ if (newColumn.isUnique) {
970
+ const uniqueConstraint = new TableUnique_1.TableUnique({
971
+ name: this.connection.namingStrategy.uniqueConstraintName(table, [newColumn.name]),
972
+ columnNames: [newColumn.name],
973
+ });
974
+ clonedTable.uniques.push(uniqueConstraint);
975
+ upQueries.push(this.createUniqueConstraintSql(table, uniqueConstraint));
976
+ // CockroachDB creates index for UNIQUE constraint.
977
+ // We must use DROP INDEX ... CASCADE instead of DROP CONSTRAINT.
978
+ downQueries.push(this.dropIndexSql(table, uniqueConstraint));
979
+ }
980
+ else {
981
+ const uniqueConstraint = clonedTable.uniques.find((unique) => {
982
+ return (unique.columnNames.length === 1 &&
983
+ !!unique.columnNames.find((columnName) => columnName === newColumn.name));
984
+ });
985
+ clonedTable.uniques.splice(clonedTable.uniques.indexOf(uniqueConstraint), 1);
986
+ // CockroachDB creates index for UNIQUE constraint.
987
+ // We must use DROP INDEX ... CASCADE instead of DROP CONSTRAINT.
988
+ upQueries.push(this.dropIndexSql(table, uniqueConstraint));
989
+ downQueries.push(this.createUniqueConstraintSql(table, uniqueConstraint));
990
+ }
991
+ }
992
+ if ((newColumn.type === "enum" ||
993
+ newColumn.type === "simple-enum") &&
994
+ (oldColumn.type === "enum" ||
995
+ oldColumn.type === "simple-enum") &&
996
+ (!OrmUtils_1.OrmUtils.isArraysEqual(newColumn.enum, oldColumn.enum) ||
997
+ newColumn.enumName !== oldColumn.enumName)) {
998
+ const arraySuffix = newColumn.isArray ? "[]" : "";
999
+ // "public"."new_enum"
1000
+ const newEnumName = this.buildEnumName(table, newColumn);
1001
+ // "public"."old_enum"
1002
+ const oldEnumName = this.buildEnumName(table, oldColumn);
1003
+ // "old_enum"
1004
+ const oldEnumNameWithoutSchema = this.buildEnumName(table, oldColumn, false);
1005
+ //"public"."old_enum_old"
1006
+ const oldEnumNameWithSchema_old = this.buildEnumName(table, oldColumn, true, false, true);
1007
+ //"old_enum_old"
1008
+ const oldEnumNameWithoutSchema_old = this.buildEnumName(table, oldColumn, false, false, true);
1009
+ // rename old ENUM
1010
+ upQueries.push(new Query_1.Query(`ALTER TYPE ${oldEnumName} RENAME TO ${oldEnumNameWithoutSchema_old}`));
1011
+ downQueries.push(new Query_1.Query(`ALTER TYPE ${oldEnumNameWithSchema_old} RENAME TO ${oldEnumNameWithoutSchema}`));
1012
+ // create new ENUM
1013
+ upQueries.push(this.createEnumTypeSql(table, newColumn, newEnumName));
1014
+ downQueries.push(this.dropEnumTypeSql(table, newColumn, newEnumName));
1015
+ // if column have default value, we must drop it to avoid issues with type casting
1016
+ if (oldColumn.default !== null &&
1017
+ oldColumn.default !== undefined) {
1018
+ // mark default as changed to prevent double update
1019
+ defaultValueChanged = true;
1020
+ upQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} ALTER COLUMN "${oldColumn.name}" DROP DEFAULT`));
1021
+ downQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} ALTER COLUMN "${oldColumn.name}" SET DEFAULT ${oldColumn.default}`));
1022
+ }
1023
+ // build column types
1024
+ const upType = `${newEnumName}${arraySuffix} USING "${newColumn.name}"::"text"::${newEnumName}${arraySuffix}`;
1025
+ const downType = `${oldEnumNameWithSchema_old}${arraySuffix} USING "${newColumn.name}"::"text"::${oldEnumNameWithSchema_old}${arraySuffix}`;
1026
+ upQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} ALTER COLUMN "${newColumn.name}" TYPE ${upType}`));
1027
+ // we add a delay here since for some reason cockroachdb fails with
1028
+ // "cannot drop type because other objects still depend on it" error
1029
+ // if we are trying to drop type right after we altered it.
1030
+ upQueries.push(new Query_1.Query(`SELECT pg_sleep(0.1)`));
1031
+ downQueries.push(new Query_1.Query(`SELECT pg_sleep(0.1)`));
1032
+ downQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} ALTER COLUMN "${newColumn.name}" TYPE ${downType}`));
1033
+ // restore column default or create new one
1034
+ if (newColumn.default !== null &&
1035
+ newColumn.default !== undefined) {
1036
+ upQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} ALTER COLUMN "${newColumn.name}" SET DEFAULT ${newColumn.default}`));
1037
+ downQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} ALTER COLUMN "${newColumn.name}" DROP DEFAULT`));
1038
+ }
1039
+ // remove old ENUM
1040
+ upQueries.push(this.dropEnumTypeSql(table, oldColumn, oldEnumNameWithSchema_old));
1041
+ downQueries.push(this.createEnumTypeSql(table, oldColumn, oldEnumNameWithSchema_old));
1042
+ }
1043
+ if (oldColumn.isGenerated !== newColumn.isGenerated &&
1044
+ newColumn.generationStrategy !== "uuid") {
1045
+ if (newColumn.isGenerated) {
1046
+ if (newColumn.generationStrategy === "increment") {
1047
+ throw new error_1.TypeORMError(`Adding sequential generated columns into existing table is not supported`);
1048
+ }
1049
+ else if (newColumn.generationStrategy === "rowid") {
1050
+ upQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} ALTER COLUMN "${newColumn.name}" SET DEFAULT unique_rowid()`));
1051
+ downQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} ALTER COLUMN "${newColumn.name}" DROP DEFAULT`));
1052
+ }
1053
+ }
1054
+ else {
1055
+ upQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} ALTER COLUMN "${newColumn.name}" DROP DEFAULT`));
1056
+ downQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} ALTER COLUMN "${newColumn.name}" SET DEFAULT unique_rowid()`));
1057
+ }
1058
+ }
1059
+ if (newColumn.default !== oldColumn.default &&
1060
+ !defaultValueChanged) {
1061
+ if (newColumn.default !== null &&
1062
+ newColumn.default !== undefined) {
1063
+ upQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} ALTER COLUMN "${newColumn.name}" SET DEFAULT ${newColumn.default}`));
1064
+ if (oldColumn.default !== null &&
1065
+ oldColumn.default !== undefined) {
1066
+ downQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} ALTER COLUMN "${newColumn.name}" SET DEFAULT ${oldColumn.default}`));
1067
+ }
1068
+ else {
1069
+ downQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} ALTER COLUMN "${newColumn.name}" DROP DEFAULT`));
1070
+ }
1071
+ }
1072
+ else if (oldColumn.default !== null &&
1073
+ oldColumn.default !== undefined) {
1074
+ upQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} ALTER COLUMN "${newColumn.name}" DROP DEFAULT`));
1075
+ downQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} ALTER COLUMN "${newColumn.name}" SET DEFAULT ${oldColumn.default}`));
1076
+ }
1077
+ }
1078
+ }
1079
+ if ((newColumn.spatialFeatureType || "").toLowerCase() !==
1080
+ (oldColumn.spatialFeatureType || "").toLowerCase() ||
1081
+ newColumn.srid !== oldColumn.srid) {
1082
+ upQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} ALTER COLUMN "${newColumn.name}" TYPE ${this.driver.createFullType(newColumn)}`));
1083
+ downQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} ALTER COLUMN "${newColumn.name}" TYPE ${this.driver.createFullType(oldColumn)}`));
1084
+ }
1085
+ await this.executeQueries(upQueries, downQueries);
1086
+ this.replaceCachedTable(table, clonedTable);
1087
+ }
1088
+ /**
1089
+ * Changes a column in the table.
1090
+ */
1091
+ async changeColumns(tableOrName, changedColumns) {
1092
+ for (const { oldColumn, newColumn } of changedColumns) {
1093
+ await this.changeColumn(tableOrName, oldColumn, newColumn);
1094
+ }
1095
+ }
1096
+ /**
1097
+ * Drops column in the table.
1098
+ */
1099
+ async dropColumn(tableOrName, columnOrName) {
1100
+ const table = InstanceChecker_1.InstanceChecker.isTable(tableOrName)
1101
+ ? tableOrName
1102
+ : await this.getCachedTable(tableOrName);
1103
+ const column = InstanceChecker_1.InstanceChecker.isTableColumn(columnOrName)
1104
+ ? columnOrName
1105
+ : table.findColumnByName(columnOrName);
1106
+ if (!column)
1107
+ throw new error_1.TypeORMError(`Column "${columnOrName}" was not found in table "${table.name}"`);
1108
+ const clonedTable = table.clone();
1109
+ const upQueries = [];
1110
+ const downQueries = [];
1111
+ // drop primary key constraint
1112
+ // todo: https://go.crdb.dev/issue-v/48026/v21.1
1113
+ if (column.isPrimary) {
1114
+ const pkName = column.primaryKeyConstraintName
1115
+ ? column.primaryKeyConstraintName
1116
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, clonedTable.primaryColumns.map((column) => column.name));
1117
+ const columnNames = clonedTable.primaryColumns
1118
+ .map((primaryColumn) => `"${primaryColumn.name}"`)
1119
+ .join(", ");
1120
+ upQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(clonedTable)} DROP CONSTRAINT "${pkName}"`));
1121
+ downQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(clonedTable)} ADD CONSTRAINT "${pkName}" PRIMARY KEY (${columnNames})`));
1122
+ // update column in table
1123
+ const tableColumn = clonedTable.findColumnByName(column.name);
1124
+ tableColumn.isPrimary = false;
1125
+ // if primary key have multiple columns, we must recreate it without dropped column
1126
+ if (clonedTable.primaryColumns.length > 0) {
1127
+ const pkName = clonedTable.primaryColumns[0]
1128
+ .primaryKeyConstraintName
1129
+ ? clonedTable.primaryColumns[0].primaryKeyConstraintName
1130
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, clonedTable.primaryColumns.map((column) => column.name));
1131
+ const columnNames = clonedTable.primaryColumns
1132
+ .map((primaryColumn) => `"${primaryColumn.name}"`)
1133
+ .join(", ");
1134
+ upQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(clonedTable)} ADD CONSTRAINT "${pkName}" PRIMARY KEY (${columnNames})`));
1135
+ downQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(clonedTable)} DROP CONSTRAINT "${pkName}"`));
1136
+ }
1137
+ }
1138
+ // drop column index
1139
+ const columnIndex = clonedTable.indices.find((index) => index.columnNames.length === 1 &&
1140
+ index.columnNames[0] === column.name);
1141
+ if (columnIndex) {
1142
+ clonedTable.indices.splice(clonedTable.indices.indexOf(columnIndex), 1);
1143
+ upQueries.push(this.dropIndexSql(table, columnIndex));
1144
+ downQueries.push(this.createIndexSql(table, columnIndex));
1145
+ }
1146
+ // drop column check
1147
+ const columnCheck = clonedTable.checks.find((check) => !!check.columnNames &&
1148
+ check.columnNames.length === 1 &&
1149
+ check.columnNames[0] === column.name);
1150
+ if (columnCheck) {
1151
+ clonedTable.checks.splice(clonedTable.checks.indexOf(columnCheck), 1);
1152
+ upQueries.push(this.dropCheckConstraintSql(table, columnCheck));
1153
+ downQueries.push(this.createCheckConstraintSql(table, columnCheck));
1154
+ }
1155
+ // drop column unique
1156
+ const columnUnique = clonedTable.uniques.find((unique) => unique.columnNames.length === 1 &&
1157
+ unique.columnNames[0] === column.name);
1158
+ if (columnUnique) {
1159
+ clonedTable.uniques.splice(clonedTable.uniques.indexOf(columnUnique), 1);
1160
+ upQueries.push(this.dropIndexSql(table, columnUnique.name)); // CockroachDB creates indices for unique constraints
1161
+ downQueries.push(this.createUniqueConstraintSql(table, columnUnique));
1162
+ }
1163
+ upQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} DROP COLUMN "${column.name}"`));
1164
+ downQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} ADD ${this.buildCreateColumnSql(table, column)}`));
1165
+ if (column.generationStrategy === "increment") {
1166
+ upQueries.push(new Query_1.Query(`DROP SEQUENCE ${this.escapePath(this.buildSequencePath(table, column))}`));
1167
+ downQueries.push(new Query_1.Query(`CREATE SEQUENCE ${this.escapePath(this.buildSequencePath(table, column))}`));
1168
+ }
1169
+ if (column.generatedType && column.asExpression) {
1170
+ const currentSchema = await this.getCurrentSchema();
1171
+ let { schema } = this.driver.parseTableName(table);
1172
+ if (!schema) {
1173
+ schema = currentSchema;
1174
+ }
1175
+ const deleteQuery = this.deleteTypeormMetadataSql({
1176
+ schema: schema,
1177
+ table: table.name,
1178
+ type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
1179
+ name: column.name,
1180
+ });
1181
+ const insertQuery = this.insertTypeormMetadataSql({
1182
+ schema: schema,
1183
+ table: table.name,
1184
+ type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
1185
+ name: column.name,
1186
+ value: column.asExpression,
1187
+ });
1188
+ upQueries.push(deleteQuery);
1189
+ downQueries.push(insertQuery);
1190
+ }
1191
+ // drop enum type
1192
+ if (column.type === "enum" || column.type === "simple-enum") {
1193
+ const hasEnum = await this.hasEnumType(table, column);
1194
+ if (hasEnum) {
1195
+ const enumType = await this.getUserDefinedTypeName(table, column);
1196
+ const escapedEnumName = `"${enumType.schema}"."${enumType.name}"`;
1197
+ upQueries.push(this.dropEnumTypeSql(table, column, escapedEnumName));
1198
+ downQueries.push(this.createEnumTypeSql(table, column, escapedEnumName));
1199
+ }
1200
+ }
1201
+ await this.executeQueries(upQueries, downQueries);
1202
+ clonedTable.removeColumn(column);
1203
+ this.replaceCachedTable(table, clonedTable);
1204
+ }
1205
+ /**
1206
+ * Drops the columns in the table.
1207
+ */
1208
+ async dropColumns(tableOrName, columns) {
1209
+ for (const column of columns) {
1210
+ await this.dropColumn(tableOrName, column);
1211
+ }
1212
+ }
1213
+ /**
1214
+ * Creates a new primary key.
1215
+ */
1216
+ async createPrimaryKey(tableOrName, columnNames, constraintName) {
1217
+ const table = InstanceChecker_1.InstanceChecker.isTable(tableOrName)
1218
+ ? tableOrName
1219
+ : await this.getCachedTable(tableOrName);
1220
+ const clonedTable = table.clone();
1221
+ const up = this.createPrimaryKeySql(table, columnNames, constraintName);
1222
+ // mark columns as primary, because dropPrimaryKeySql build constraint name from table primary column names.
1223
+ clonedTable.columns.forEach((column) => {
1224
+ if (columnNames.find((columnName) => columnName === column.name))
1225
+ column.isPrimary = true;
1226
+ });
1227
+ const down = this.dropPrimaryKeySql(clonedTable);
1228
+ await this.executeQueries(up, down);
1229
+ this.replaceCachedTable(table, clonedTable);
1230
+ }
1231
+ /**
1232
+ * Updates composite primary keys.
1233
+ */
1234
+ async updatePrimaryKeys(tableOrName, columns) {
1235
+ const table = InstanceChecker_1.InstanceChecker.isTable(tableOrName)
1236
+ ? tableOrName
1237
+ : await this.getCachedTable(tableOrName);
1238
+ const clonedTable = table.clone();
1239
+ const columnNames = columns.map((column) => column.name);
1240
+ const upQueries = [];
1241
+ const downQueries = [];
1242
+ // if table already have primary columns, we must drop them.
1243
+ const primaryColumns = clonedTable.primaryColumns;
1244
+ if (primaryColumns.length > 0) {
1245
+ const pkName = primaryColumns[0].primaryKeyConstraintName
1246
+ ? primaryColumns[0].primaryKeyConstraintName
1247
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, primaryColumns.map((column) => column.name));
1248
+ const columnNamesString = primaryColumns
1249
+ .map((column) => `"${column.name}"`)
1250
+ .join(", ");
1251
+ upQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT "${pkName}"`));
1252
+ downQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT "${pkName}" PRIMARY KEY (${columnNamesString})`));
1253
+ }
1254
+ // update columns in table.
1255
+ clonedTable.columns
1256
+ .filter((column) => columnNames.indexOf(column.name) !== -1)
1257
+ .forEach((column) => (column.isPrimary = true));
1258
+ const pkName = primaryColumns[0].primaryKeyConstraintName
1259
+ ? primaryColumns[0].primaryKeyConstraintName
1260
+ : this.connection.namingStrategy.primaryKeyName(clonedTable, columnNames);
1261
+ const columnNamesString = columnNames
1262
+ .map((columnName) => `"${columnName}"`)
1263
+ .join(", ");
1264
+ upQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT "${pkName}" PRIMARY KEY (${columnNamesString})`));
1265
+ downQueries.push(new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT "${pkName}"`));
1266
+ await this.executeQueries(upQueries, downQueries);
1267
+ this.replaceCachedTable(table, clonedTable);
1268
+ }
1269
+ /**
1270
+ * Drops a primary key.
1271
+ */
1272
+ async dropPrimaryKey(tableOrName, constraintName) {
1273
+ const table = InstanceChecker_1.InstanceChecker.isTable(tableOrName)
1274
+ ? tableOrName
1275
+ : await this.getCachedTable(tableOrName);
1276
+ const up = this.dropPrimaryKeySql(table);
1277
+ const down = this.createPrimaryKeySql(table, table.primaryColumns.map((column) => column.name), constraintName);
1278
+ await this.executeQueries(up, down);
1279
+ table.primaryColumns.forEach((column) => {
1280
+ column.isPrimary = false;
1281
+ });
1282
+ }
1283
+ /**
1284
+ * Creates new unique constraint.
1285
+ */
1286
+ async createUniqueConstraint(tableOrName, uniqueConstraint) {
1287
+ const table = InstanceChecker_1.InstanceChecker.isTable(tableOrName)
1288
+ ? tableOrName
1289
+ : await this.getCachedTable(tableOrName);
1290
+ // new unique constraint may be passed without name. In this case we generate unique name manually.
1291
+ if (!uniqueConstraint.name)
1292
+ uniqueConstraint.name =
1293
+ this.connection.namingStrategy.uniqueConstraintName(table, uniqueConstraint.columnNames);
1294
+ const up = this.createUniqueConstraintSql(table, uniqueConstraint);
1295
+ // CockroachDB creates index for UNIQUE constraint.
1296
+ // We must use DROP INDEX ... CASCADE instead of DROP CONSTRAINT.
1297
+ const down = this.dropIndexSql(table, uniqueConstraint);
1298
+ await this.executeQueries(up, down);
1299
+ table.addUniqueConstraint(uniqueConstraint);
1300
+ }
1301
+ /**
1302
+ * Creates new unique constraints.
1303
+ */
1304
+ async createUniqueConstraints(tableOrName, uniqueConstraints) {
1305
+ for (const uniqueConstraint of uniqueConstraints) {
1306
+ await this.createUniqueConstraint(tableOrName, uniqueConstraint);
1307
+ }
1308
+ }
1309
+ /**
1310
+ * Drops unique constraint.
1311
+ */
1312
+ async dropUniqueConstraint(tableOrName, uniqueOrName) {
1313
+ const table = InstanceChecker_1.InstanceChecker.isTable(tableOrName)
1314
+ ? tableOrName
1315
+ : await this.getCachedTable(tableOrName);
1316
+ const uniqueConstraint = InstanceChecker_1.InstanceChecker.isTableUnique(uniqueOrName)
1317
+ ? uniqueOrName
1318
+ : table.uniques.find((u) => u.name === uniqueOrName);
1319
+ if (!uniqueConstraint)
1320
+ throw new error_1.TypeORMError(`Supplied unique constraint was not found in table ${table.name}`);
1321
+ // CockroachDB creates index for UNIQUE constraint.
1322
+ // We must use DROP INDEX ... CASCADE instead of DROP CONSTRAINT.
1323
+ const up = this.dropIndexSql(table, uniqueConstraint);
1324
+ const down = this.createUniqueConstraintSql(table, uniqueConstraint);
1325
+ await this.executeQueries(up, down);
1326
+ table.removeUniqueConstraint(uniqueConstraint);
1327
+ }
1328
+ /**
1329
+ * Drops unique constraints.
1330
+ */
1331
+ async dropUniqueConstraints(tableOrName, uniqueConstraints) {
1332
+ for (const uniqueConstraint of uniqueConstraints) {
1333
+ await this.dropUniqueConstraint(tableOrName, uniqueConstraint);
1334
+ }
1335
+ }
1336
+ /**
1337
+ * Creates new check constraint.
1338
+ */
1339
+ async createCheckConstraint(tableOrName, checkConstraint) {
1340
+ const table = InstanceChecker_1.InstanceChecker.isTable(tableOrName)
1341
+ ? tableOrName
1342
+ : await this.getCachedTable(tableOrName);
1343
+ // new unique constraint may be passed without name. In this case we generate unique name manually.
1344
+ if (!checkConstraint.name)
1345
+ checkConstraint.name =
1346
+ this.connection.namingStrategy.checkConstraintName(table, checkConstraint.expression);
1347
+ const up = this.createCheckConstraintSql(table, checkConstraint);
1348
+ const down = this.dropCheckConstraintSql(table, checkConstraint);
1349
+ await this.executeQueries(up, down);
1350
+ table.addCheckConstraint(checkConstraint);
1351
+ }
1352
+ /**
1353
+ * Creates new check constraints.
1354
+ */
1355
+ async createCheckConstraints(tableOrName, checkConstraints) {
1356
+ const promises = checkConstraints.map((checkConstraint) => this.createCheckConstraint(tableOrName, checkConstraint));
1357
+ await Promise.all(promises);
1358
+ }
1359
+ /**
1360
+ * Drops check constraint.
1361
+ */
1362
+ async dropCheckConstraint(tableOrName, checkOrName) {
1363
+ const table = InstanceChecker_1.InstanceChecker.isTable(tableOrName)
1364
+ ? tableOrName
1365
+ : await this.getCachedTable(tableOrName);
1366
+ const checkConstraint = InstanceChecker_1.InstanceChecker.isTableCheck(checkOrName)
1367
+ ? checkOrName
1368
+ : table.checks.find((c) => c.name === checkOrName);
1369
+ if (!checkConstraint)
1370
+ throw new error_1.TypeORMError(`Supplied check constraint was not found in table ${table.name}`);
1371
+ const up = this.dropCheckConstraintSql(table, checkConstraint);
1372
+ const down = this.createCheckConstraintSql(table, checkConstraint);
1373
+ await this.executeQueries(up, down);
1374
+ table.removeCheckConstraint(checkConstraint);
1375
+ }
1376
+ /**
1377
+ * Drops check constraints.
1378
+ */
1379
+ async dropCheckConstraints(tableOrName, checkConstraints) {
1380
+ const promises = checkConstraints.map((checkConstraint) => this.dropCheckConstraint(tableOrName, checkConstraint));
1381
+ await Promise.all(promises);
1382
+ }
1383
+ /**
1384
+ * Creates new exclusion constraint.
1385
+ */
1386
+ async createExclusionConstraint(tableOrName, exclusionConstraint) {
1387
+ throw new error_1.TypeORMError(`CockroachDB does not support exclusion constraints.`);
1388
+ }
1389
+ /**
1390
+ * Creates new exclusion constraints.
1391
+ */
1392
+ async createExclusionConstraints(tableOrName, exclusionConstraints) {
1393
+ throw new error_1.TypeORMError(`CockroachDB does not support exclusion constraints.`);
1394
+ }
1395
+ /**
1396
+ * Drops exclusion constraint.
1397
+ */
1398
+ async dropExclusionConstraint(tableOrName, exclusionOrName) {
1399
+ throw new error_1.TypeORMError(`CockroachDB does not support exclusion constraints.`);
1400
+ }
1401
+ /**
1402
+ * Drops exclusion constraints.
1403
+ */
1404
+ async dropExclusionConstraints(tableOrName, exclusionConstraints) {
1405
+ throw new error_1.TypeORMError(`CockroachDB does not support exclusion constraints.`);
1406
+ }
1407
+ /**
1408
+ * Creates a new foreign key.
1409
+ */
1410
+ async createForeignKey(tableOrName, foreignKey) {
1411
+ const table = InstanceChecker_1.InstanceChecker.isTable(tableOrName)
1412
+ ? tableOrName
1413
+ : await this.getCachedTable(tableOrName);
1414
+ // new FK may be passed without name. In this case we generate FK name manually.
1415
+ if (!foreignKey.name)
1416
+ foreignKey.name = this.connection.namingStrategy.foreignKeyName(table, foreignKey.columnNames, this.getTablePath(foreignKey), foreignKey.referencedColumnNames);
1417
+ const up = this.createForeignKeySql(table, foreignKey);
1418
+ const down = this.dropForeignKeySql(table, foreignKey);
1419
+ await this.executeQueries(up, down);
1420
+ table.addForeignKey(foreignKey);
1421
+ }
1422
+ /**
1423
+ * Creates a new foreign keys.
1424
+ */
1425
+ async createForeignKeys(tableOrName, foreignKeys) {
1426
+ for (const foreignKey of foreignKeys) {
1427
+ await this.createForeignKey(tableOrName, foreignKey);
1428
+ }
1429
+ }
1430
+ /**
1431
+ * Drops a foreign key from the table.
1432
+ */
1433
+ async dropForeignKey(tableOrName, foreignKeyOrName) {
1434
+ const table = InstanceChecker_1.InstanceChecker.isTable(tableOrName)
1435
+ ? tableOrName
1436
+ : await this.getCachedTable(tableOrName);
1437
+ const foreignKey = InstanceChecker_1.InstanceChecker.isTableForeignKey(foreignKeyOrName)
1438
+ ? foreignKeyOrName
1439
+ : table.foreignKeys.find((fk) => fk.name === foreignKeyOrName);
1440
+ if (!foreignKey)
1441
+ throw new error_1.TypeORMError(`Supplied foreign key was not found in table ${table.name}`);
1442
+ const up = this.dropForeignKeySql(table, foreignKey);
1443
+ const down = this.createForeignKeySql(table, foreignKey);
1444
+ await this.executeQueries(up, down);
1445
+ table.removeForeignKey(foreignKey);
1446
+ }
1447
+ /**
1448
+ * Drops a foreign keys from the table.
1449
+ */
1450
+ async dropForeignKeys(tableOrName, foreignKeys) {
1451
+ for (const foreignKey of foreignKeys) {
1452
+ await this.dropForeignKey(tableOrName, foreignKey);
1453
+ }
1454
+ }
1455
+ /**
1456
+ * Creates a new index.
1457
+ */
1458
+ async createIndex(tableOrName, index) {
1459
+ const table = InstanceChecker_1.InstanceChecker.isTable(tableOrName)
1460
+ ? tableOrName
1461
+ : await this.getCachedTable(tableOrName);
1462
+ // new index may be passed without name. In this case we generate index name manually.
1463
+ if (!index.name)
1464
+ index.name = this.generateIndexName(table, index);
1465
+ // CockroachDB stores unique indices and UNIQUE constraints
1466
+ if (index.isUnique) {
1467
+ const unique = new TableUnique_1.TableUnique({
1468
+ name: index.name,
1469
+ columnNames: index.columnNames,
1470
+ });
1471
+ const up = this.createUniqueConstraintSql(table, unique);
1472
+ // CockroachDB also creates index for UNIQUE constraints.
1473
+ // We can't drop UNIQUE constraint with DROP CONSTRAINT. We must use DROP INDEX ... CASCADE instead.
1474
+ const down = this.dropIndexSql(table, unique);
1475
+ await this.executeQueries(up, down);
1476
+ table.addUniqueConstraint(unique);
1477
+ }
1478
+ else {
1479
+ const up = this.createIndexSql(table, index);
1480
+ const down = this.dropIndexSql(table, index);
1481
+ await this.executeQueries(up, down);
1482
+ table.addIndex(index);
1483
+ }
1484
+ }
1485
+ /**
1486
+ * Creates a new indices
1487
+ */
1488
+ async createIndices(tableOrName, indices) {
1489
+ for (const index of indices) {
1490
+ await this.createIndex(tableOrName, index);
1491
+ }
1492
+ }
1493
+ /**
1494
+ * Drops an index from the table.
1495
+ */
1496
+ async dropIndex(tableOrName, indexOrName) {
1497
+ const table = InstanceChecker_1.InstanceChecker.isTable(tableOrName)
1498
+ ? tableOrName
1499
+ : await this.getCachedTable(tableOrName);
1500
+ const index = InstanceChecker_1.InstanceChecker.isTableIndex(indexOrName)
1501
+ ? indexOrName
1502
+ : table.indices.find((i) => i.name === indexOrName);
1503
+ if (!index)
1504
+ throw new error_1.TypeORMError(`Supplied index ${indexOrName} was not found in table ${table.name}`);
1505
+ // old index may be passed without name. In this case we generate index name manually.
1506
+ if (!index.name)
1507
+ index.name = this.generateIndexName(table, index);
1508
+ const up = this.dropIndexSql(table, index);
1509
+ const down = this.createIndexSql(table, index);
1510
+ await this.executeQueries(up, down);
1511
+ table.removeIndex(index);
1512
+ }
1513
+ /**
1514
+ * Drops an indices from the table.
1515
+ */
1516
+ async dropIndices(tableOrName, indices) {
1517
+ for (const index of indices) {
1518
+ await this.dropIndex(tableOrName, index);
1519
+ }
1520
+ }
1521
+ /**
1522
+ * Clears all table contents.
1523
+ * Note: this operation uses SQL's TRUNCATE query which cannot be reverted in transactions.
1524
+ */
1525
+ async clearTable(tableName) {
1526
+ await this.query(`TRUNCATE TABLE ${this.escapePath(tableName)}`);
1527
+ }
1528
+ /**
1529
+ * Removes all tables from the currently connected database.
1530
+ */
1531
+ async clearDatabase() {
1532
+ const schemas = [];
1533
+ this.connection.entityMetadatas
1534
+ .filter((metadata) => metadata.schema)
1535
+ .forEach((metadata) => {
1536
+ const isSchemaExist = !!schemas.find((schema) => schema === metadata.schema);
1537
+ if (!isSchemaExist)
1538
+ schemas.push(metadata.schema);
1539
+ });
1540
+ schemas.push(this.driver.options.schema || "current_schema()");
1541
+ const schemaNamesString = schemas
1542
+ .map((name) => {
1543
+ return name === "current_schema()" ? name : "'" + name + "'";
1544
+ })
1545
+ .join(", ");
1546
+ const isAnotherTransactionActive = this.isTransactionActive;
1547
+ if (!isAnotherTransactionActive)
1548
+ await this.startTransaction();
1549
+ try {
1550
+ const version = await this.getVersion();
1551
+ const selectViewDropsQuery = `SELECT 'DROP VIEW IF EXISTS "' || schemaname || '"."' || viewname || '" CASCADE;' as "query" ` +
1552
+ `FROM "pg_views" WHERE "schemaname" IN (${schemaNamesString})`;
1553
+ const dropViewQueries = await this.query(selectViewDropsQuery);
1554
+ await Promise.all(dropViewQueries.map((q) => this.query(q["query"])));
1555
+ const selectDropsQuery = `SELECT 'DROP TABLE IF EXISTS "' || table_schema || '"."' || table_name || '" CASCADE;' as "query" FROM "information_schema"."tables" WHERE "table_schema" IN (${schemaNamesString})`;
1556
+ const dropQueries = await this.query(selectDropsQuery);
1557
+ await Promise.all(dropQueries.map((q) => this.query(q["query"])));
1558
+ const selectSequenceDropsQuery = `SELECT 'DROP SEQUENCE "' || sequence_schema || '"."' || sequence_name || '";' as "query" FROM "information_schema"."sequences" WHERE "sequence_schema" IN (${schemaNamesString})`;
1559
+ const sequenceDropQueries = await this.query(selectSequenceDropsQuery);
1560
+ await Promise.all(sequenceDropQueries.map((q) => this.query(q["query"])));
1561
+ // drop enum types. Supported starting from v20.2.19.
1562
+ if (VersionUtils_1.VersionUtils.isGreaterOrEqual(version, "20.2.19")) {
1563
+ await this.dropEnumTypes(schemaNamesString);
1564
+ }
1565
+ if (!isAnotherTransactionActive)
1566
+ await this.commitTransaction();
1567
+ }
1568
+ catch (error) {
1569
+ try {
1570
+ // we throw original error even if rollback thrown an error
1571
+ if (!isAnotherTransactionActive)
1572
+ await this.rollbackTransaction();
1573
+ }
1574
+ catch {
1575
+ // no-op
1576
+ }
1577
+ throw error;
1578
+ }
1579
+ }
1580
+ // -------------------------------------------------------------------------
1581
+ // Protected Methods
1582
+ // -------------------------------------------------------------------------
1583
+ async loadViews(viewNames) {
1584
+ const hasTable = await this.hasTable(this.getTypeormMetadataTableName());
1585
+ if (!hasTable) {
1586
+ return [];
1587
+ }
1588
+ if (!viewNames) {
1589
+ viewNames = [];
1590
+ }
1591
+ const currentDatabase = await this.getCurrentDatabase();
1592
+ const currentSchema = await this.getCurrentSchema();
1593
+ const viewsCondition = viewNames
1594
+ .map((viewName) => {
1595
+ const { schema, tableName } = this.driver.parseTableName(viewName);
1596
+ return `("t"."schema" = '${schema || currentSchema}' AND "t"."name" = '${tableName}')`;
1597
+ })
1598
+ .join(" OR ");
1599
+ const query = `SELECT "t".*, "v"."check_option" FROM ${this.escapePath(this.getTypeormMetadataTableName())} "t" ` +
1600
+ `INNER JOIN "information_schema"."views" "v" ON "v"."table_schema" = "t"."schema" AND "v"."table_name" = "t"."name" WHERE "t"."type" = '${MetadataTableType_1.MetadataTableType.VIEW}' ${viewsCondition ? `AND (${viewsCondition})` : ""}`;
1601
+ const dbViews = await this.query(query);
1602
+ return dbViews.map((dbView) => {
1603
+ const view = new View_1.View();
1604
+ const schema = dbView["schema"] === currentSchema &&
1605
+ !this.driver.options.schema
1606
+ ? undefined
1607
+ : dbView["schema"];
1608
+ view.database = currentDatabase;
1609
+ view.schema = dbView["schema"];
1610
+ view.name = this.driver.buildTableName(dbView["name"], schema);
1611
+ view.expression = dbView["value"];
1612
+ return view;
1613
+ });
1614
+ }
1615
+ /**
1616
+ * Loads all tables (with given names) from the database and creates a Table from them.
1617
+ */
1618
+ async loadTables(tableNames) {
1619
+ // if no tables given then no need to proceed
1620
+ if (tableNames && tableNames.length === 0) {
1621
+ return [];
1622
+ }
1623
+ const currentSchema = await this.getCurrentSchema();
1624
+ const currentDatabase = await this.getCurrentDatabase();
1625
+ const dbTables = [];
1626
+ if (!tableNames) {
1627
+ const tablesSql = `SELECT "table_schema", "table_name" FROM "information_schema"."tables"`;
1628
+ dbTables.push(...(await this.query(tablesSql)));
1629
+ }
1630
+ else {
1631
+ const tablesCondition = tableNames
1632
+ .map((tableName) => this.driver.parseTableName(tableName))
1633
+ .map(({ schema, tableName }) => {
1634
+ return `("table_schema" = '${schema || currentSchema}' AND "table_name" = '${tableName}')`;
1635
+ })
1636
+ .join(" OR ");
1637
+ const tablesSql = `SELECT "table_schema", "table_name" FROM "information_schema"."tables" WHERE ` +
1638
+ tablesCondition;
1639
+ dbTables.push(...(await this.query(tablesSql)));
1640
+ }
1641
+ if (dbTables.length === 0) {
1642
+ return [];
1643
+ }
1644
+ const columnsCondiiton = dbTables
1645
+ .map(({ table_name, table_schema }) => {
1646
+ return `("table_schema" = '${table_schema}' AND "table_name" = '${table_name}')`;
1647
+ })
1648
+ .join(" OR ");
1649
+ const columnsSql = `SELECT "columns".*, "attr"."attgenerated" as "generated_type", ` +
1650
+ `pg_catalog.col_description(('"' || table_catalog || '"."' || table_schema || '"."' || table_name || '"')::regclass::oid, ordinal_position) as description ` +
1651
+ `FROM "information_schema"."columns" ` +
1652
+ `LEFT JOIN "pg_class" AS "cls" ON "cls"."relname" = "table_name" ` +
1653
+ `LEFT JOIN "pg_namespace" AS "ns" ON "ns"."oid" = "cls"."relnamespace" AND "ns"."nspname" = "table_schema" ` +
1654
+ `LEFT JOIN "pg_attribute" AS "attr" ON "attr"."attrelid" = "cls"."oid" AND "attr"."attname" = "column_name" AND "attr"."attnum" = "ordinal_position" ` +
1655
+ `WHERE "is_hidden" = 'NO' AND ` +
1656
+ columnsCondiiton;
1657
+ const constraintsCondition = dbTables
1658
+ .map(({ table_name, table_schema }) => {
1659
+ return `("ns"."nspname" = '${table_schema}' AND "t"."relname" = '${table_name}')`;
1660
+ })
1661
+ .join(" OR ");
1662
+ const constraintsSql = `SELECT "ns"."nspname" AS "table_schema", "t"."relname" AS "table_name", "cnst"."conname" AS "constraint_name", ` +
1663
+ `pg_get_constraintdef("cnst"."oid") AS "expression", ` +
1664
+ `CASE "cnst"."contype" WHEN 'p' THEN 'PRIMARY' WHEN 'u' THEN 'UNIQUE' WHEN 'c' THEN 'CHECK' WHEN 'x' THEN 'EXCLUDE' END AS "constraint_type", "a"."attname" AS "column_name" ` +
1665
+ `FROM "pg_constraint" "cnst" ` +
1666
+ `INNER JOIN "pg_class" "t" ON "t"."oid" = "cnst"."conrelid" ` +
1667
+ `INNER JOIN "pg_namespace" "ns" ON "ns"."oid" = "cnst"."connamespace" ` +
1668
+ `LEFT JOIN "pg_attribute" "a" ON "a"."attrelid" = "cnst"."conrelid" AND "a"."attnum" = ANY ("cnst"."conkey") ` +
1669
+ `WHERE "t"."relkind" = 'r' AND (${constraintsCondition})`;
1670
+ const indicesSql = `SELECT "ns"."nspname" AS "table_schema", "t"."relname" AS "table_name", "i"."relname" AS "constraint_name", "a"."attname" AS "column_name", ` +
1671
+ `CASE "ix"."indisunique" WHEN 't' THEN 'TRUE' ELSE'FALSE' END AS "is_unique", pg_get_expr("ix"."indpred", "ix"."indrelid") AS "condition", ` +
1672
+ `"types"."typname" AS "type_name" ` +
1673
+ `FROM "pg_class" "t" ` +
1674
+ `INNER JOIN "pg_index" "ix" ON "ix"."indrelid" = "t"."oid" ` +
1675
+ `INNER JOIN "pg_attribute" "a" ON "a"."attrelid" = "t"."oid" AND "a"."attnum" = ANY ("ix"."indkey") ` +
1676
+ `INNER JOIN "pg_namespace" "ns" ON "ns"."oid" = "t"."relnamespace" ` +
1677
+ `INNER JOIN "pg_class" "i" ON "i"."oid" = "ix"."indexrelid" ` +
1678
+ `INNER JOIN "pg_type" "types" ON "types"."oid" = "a"."atttypid" ` +
1679
+ `LEFT JOIN "pg_constraint" "cnst" ON "cnst"."conname" = "i"."relname" ` +
1680
+ `WHERE "t"."relkind" = 'r' AND "cnst"."contype" IS NULL AND (${constraintsCondition})`;
1681
+ const foreignKeysCondition = dbTables
1682
+ .map(({ table_name, table_schema }) => {
1683
+ return `("ns"."nspname" = '${table_schema}' AND "cl"."relname" = '${table_name}')`;
1684
+ })
1685
+ .join(" OR ");
1686
+ const foreignKeysSql = `SELECT "con"."conname" AS "constraint_name", "con"."nspname" AS "table_schema", "con"."relname" AS "table_name", "att2"."attname" AS "column_name", ` +
1687
+ `"ns"."nspname" AS "referenced_table_schema", "cl"."relname" AS "referenced_table_name", "att"."attname" AS "referenced_column_name", "con"."confdeltype" AS "on_delete", "con"."confupdtype" AS "on_update" ` +
1688
+ `FROM ( ` +
1689
+ `SELECT UNNEST ("con1"."conkey") AS "parent", UNNEST ("con1"."confkey") AS "child", "con1"."confrelid", "con1"."conrelid", "con1"."conname", "con1"."contype", "ns"."nspname", "cl"."relname", ` +
1690
+ `CASE "con1"."confdeltype" WHEN 'a' THEN 'NO ACTION' WHEN 'r' THEN 'RESTRICT' WHEN 'c' THEN 'CASCADE' WHEN 'n' THEN 'SET NULL' WHEN 'd' THEN 'SET DEFAULT' END as "confdeltype", ` +
1691
+ `CASE "con1"."confupdtype" WHEN 'a' THEN 'NO ACTION' WHEN 'r' THEN 'RESTRICT' WHEN 'c' THEN 'CASCADE' WHEN 'n' THEN 'SET NULL' WHEN 'd' THEN 'SET DEFAULT' END as "confupdtype" ` +
1692
+ `FROM "pg_class" "cl" ` +
1693
+ `INNER JOIN "pg_namespace" "ns" ON "cl"."relnamespace" = "ns"."oid" ` +
1694
+ `INNER JOIN "pg_constraint" "con1" ON "con1"."conrelid" = "cl"."oid" ` +
1695
+ `WHERE "con1"."contype" = 'f' AND (${foreignKeysCondition}) ` +
1696
+ `) "con" ` +
1697
+ `INNER JOIN "pg_attribute" "att" ON "att"."attrelid" = "con"."confrelid" AND "att"."attnum" = "con"."child" ` +
1698
+ `INNER JOIN "pg_class" "cl" ON "cl"."oid" = "con"."confrelid" ` +
1699
+ `INNER JOIN "pg_namespace" "ns" ON "cl"."relnamespace" = "ns"."oid" ` +
1700
+ `INNER JOIN "pg_attribute" "att2" ON "att2"."attrelid" = "con"."conrelid" AND "att2"."attnum" = "con"."parent"`;
1701
+ const tableSchemas = dbTables
1702
+ .map((dbTable) => `'${dbTable.table_schema}'`)
1703
+ .join(", ");
1704
+ const enumsSql = `SELECT "t"."typname" AS "name", string_agg("e"."enumlabel", '|') AS "value" ` +
1705
+ `FROM "pg_enum" "e" ` +
1706
+ `INNER JOIN "pg_type" "t" ON "t"."oid" = "e"."enumtypid" ` +
1707
+ `INNER JOIN "pg_namespace" "n" ON "n"."oid" = "t"."typnamespace" ` +
1708
+ `WHERE "n"."nspname" IN (${tableSchemas}) ` +
1709
+ `GROUP BY "t"."typname"`;
1710
+ const [dbColumns, dbConstraints, dbIndices, dbForeignKeys, dbEnums,] = await Promise.all([
1711
+ this.query(columnsSql),
1712
+ this.query(constraintsSql),
1713
+ this.query(indicesSql),
1714
+ this.query(foreignKeysSql),
1715
+ this.query(enumsSql),
1716
+ ]);
1717
+ // create tables for loaded tables
1718
+ return Promise.all(dbTables.map(async (dbTable) => {
1719
+ const table = new Table_1.Table();
1720
+ const getSchemaFromKey = (dbObject, key) => {
1721
+ return dbObject[key] === currentSchema &&
1722
+ (!this.driver.options.schema ||
1723
+ this.driver.options.schema === currentSchema)
1724
+ ? undefined
1725
+ : dbObject[key];
1726
+ };
1727
+ // We do not need to join schema name, when database is by default.
1728
+ const schema = getSchemaFromKey(dbTable, "table_schema");
1729
+ table.database = currentDatabase;
1730
+ table.schema = dbTable["table_schema"];
1731
+ table.name = this.driver.buildTableName(dbTable["table_name"], schema);
1732
+ // create columns from the loaded columns
1733
+ table.columns = await Promise.all(dbColumns
1734
+ .filter((dbColumn) => dbColumn["table_name"] ===
1735
+ dbTable["table_name"] &&
1736
+ dbColumn["table_schema"] ===
1737
+ dbTable["table_schema"])
1738
+ .map(async (dbColumn) => {
1739
+ const columnConstraints = dbConstraints.filter((dbConstraint) => {
1740
+ return (dbConstraint["table_name"] ===
1741
+ dbColumn["table_name"] &&
1742
+ dbConstraint["table_schema"] ===
1743
+ dbColumn["table_schema"] &&
1744
+ dbConstraint["column_name"] ===
1745
+ dbColumn["column_name"]);
1746
+ });
1747
+ const tableColumn = new TableColumn_1.TableColumn();
1748
+ tableColumn.name = dbColumn["column_name"];
1749
+ tableColumn.type =
1750
+ dbColumn["crdb_sql_type"].toLowerCase();
1751
+ if (dbColumn["crdb_sql_type"].indexOf("COLLATE") !==
1752
+ -1) {
1753
+ tableColumn.collation = dbColumn["crdb_sql_type"].substr(dbColumn["crdb_sql_type"].indexOf("COLLATE") +
1754
+ "COLLATE".length +
1755
+ 1, dbColumn["crdb_sql_type"].length);
1756
+ tableColumn.type = tableColumn.type.substr(0, dbColumn["crdb_sql_type"].indexOf("COLLATE") - 1);
1757
+ }
1758
+ if (tableColumn.type.indexOf("(") !== -1)
1759
+ tableColumn.type = tableColumn.type.substr(0, tableColumn.type.indexOf("("));
1760
+ if (tableColumn.type === "numeric" ||
1761
+ tableColumn.type === "decimal") {
1762
+ if (dbColumn["numeric_precision"] !== null &&
1763
+ !this.isDefaultColumnPrecision(table, tableColumn, dbColumn["numeric_precision"])) {
1764
+ tableColumn.precision = parseInt(dbColumn["numeric_precision"]);
1765
+ }
1766
+ else if (dbColumn["numeric_scale"] !== null &&
1767
+ !this.isDefaultColumnScale(table, tableColumn, dbColumn["numeric_scale"])) {
1768
+ tableColumn.precision = undefined;
1769
+ }
1770
+ if (dbColumn["numeric_scale"] !== null &&
1771
+ !this.isDefaultColumnScale(table, tableColumn, dbColumn["numeric_scale"])) {
1772
+ tableColumn.scale = parseInt(dbColumn["numeric_scale"]);
1773
+ }
1774
+ else if (dbColumn["numeric_precision"] !== null &&
1775
+ !this.isDefaultColumnPrecision(table, tableColumn, dbColumn["numeric_precision"])) {
1776
+ tableColumn.scale = undefined;
1777
+ }
1778
+ }
1779
+ // docs: https://www.postgresql.org/docs/current/xtypes.html
1780
+ // When you define a new base type, PostgreSQL automatically provides support for arrays of that type.
1781
+ // The array type typically has the same name as the base type with the underscore character (_) prepended.
1782
+ // ----
1783
+ // so, we must remove this underscore character from enum type name
1784
+ let udtName = dbColumn["udt_name"];
1785
+ if (udtName.indexOf("_") === 0) {
1786
+ udtName = udtName.substr(1, udtName.length);
1787
+ }
1788
+ const enumType = dbEnums.find((dbEnum) => {
1789
+ return dbEnum["name"] === udtName;
1790
+ });
1791
+ if (enumType) {
1792
+ // check if `enumName` is specified by user
1793
+ const builtEnumName = this.buildEnumName(table, tableColumn, false, true);
1794
+ const enumName = builtEnumName !== enumType["name"]
1795
+ ? enumType["name"]
1796
+ : undefined;
1797
+ tableColumn.type = "enum";
1798
+ tableColumn.enum = enumType["value"].split("|");
1799
+ tableColumn.enumName = enumName;
1800
+ }
1801
+ if (dbColumn["data_type"].toLowerCase() === "array") {
1802
+ tableColumn.isArray = true;
1803
+ if (!enumType) {
1804
+ const type = dbColumn["crdb_sql_type"]
1805
+ .replace("[]", "")
1806
+ .toLowerCase();
1807
+ tableColumn.type =
1808
+ this.connection.driver.normalizeType({
1809
+ type: type,
1810
+ });
1811
+ }
1812
+ }
1813
+ // check only columns that have length property
1814
+ if (this.driver.withLengthColumnTypes.indexOf(tableColumn.type) !== -1 &&
1815
+ dbColumn["character_maximum_length"]) {
1816
+ const length = dbColumn["character_maximum_length"].toString();
1817
+ tableColumn.length =
1818
+ !this.isDefaultColumnLength(table, tableColumn, length)
1819
+ ? length
1820
+ : "";
1821
+ }
1822
+ tableColumn.isNullable =
1823
+ dbColumn["is_nullable"] === "YES";
1824
+ const primaryConstraint = columnConstraints.find((constraint) => constraint["constraint_type"] === "PRIMARY");
1825
+ if (primaryConstraint) {
1826
+ tableColumn.isPrimary = true;
1827
+ // find another columns involved in primary key constraint
1828
+ const anotherPrimaryConstraints = dbConstraints.filter((constraint) => constraint["table_name"] ===
1829
+ dbColumn["table_name"] &&
1830
+ constraint["table_schema"] ===
1831
+ dbColumn["table_schema"] &&
1832
+ constraint["column_name"] !==
1833
+ dbColumn["column_name"] &&
1834
+ constraint["constraint_type"] ===
1835
+ "PRIMARY");
1836
+ // collect all column names
1837
+ const columnNames = anotherPrimaryConstraints.map((constraint) => constraint["column_name"]);
1838
+ columnNames.push(dbColumn["column_name"]);
1839
+ // build default primary key constraint name
1840
+ const pkName = this.connection.namingStrategy.primaryKeyName(table, columnNames);
1841
+ // if primary key has user-defined constraint name, write it in table column
1842
+ if (primaryConstraint["constraint_name"] !==
1843
+ pkName) {
1844
+ tableColumn.primaryKeyConstraintName =
1845
+ primaryConstraint["constraint_name"];
1846
+ }
1847
+ }
1848
+ const uniqueConstraints = columnConstraints.filter((constraint) => constraint["constraint_type"] === "UNIQUE");
1849
+ const isConstraintComposite = uniqueConstraints.every((uniqueConstraint) => {
1850
+ return dbConstraints.some((dbConstraint) => dbConstraint["constraint_type"] ===
1851
+ "UNIQUE" &&
1852
+ dbConstraint["constraint_name"] ===
1853
+ uniqueConstraint["constraint_name"] &&
1854
+ dbConstraint["column_name"] !==
1855
+ dbColumn["column_name"]);
1856
+ });
1857
+ tableColumn.isUnique =
1858
+ uniqueConstraints.length > 0 &&
1859
+ !isConstraintComposite;
1860
+ if (dbColumn["column_default"] !== null &&
1861
+ dbColumn["column_default"] !== undefined) {
1862
+ if (dbColumn["column_default"] ===
1863
+ "unique_rowid()") {
1864
+ tableColumn.isGenerated = true;
1865
+ tableColumn.generationStrategy = "rowid";
1866
+ }
1867
+ else if (dbColumn["column_default"].indexOf("nextval") !== -1) {
1868
+ tableColumn.isGenerated = true;
1869
+ tableColumn.generationStrategy = "increment";
1870
+ }
1871
+ else if (dbColumn["column_default"] ===
1872
+ "gen_random_uuid()") {
1873
+ tableColumn.isGenerated = true;
1874
+ tableColumn.generationStrategy = "uuid";
1875
+ }
1876
+ else {
1877
+ tableColumn.default = dbColumn["column_default"].replace(/:::[\w\s[\]"]+/g, "");
1878
+ tableColumn.default =
1879
+ tableColumn.default.replace(/^(-?[\d.]+)$/, "($1)");
1880
+ if (enumType) {
1881
+ tableColumn.default =
1882
+ tableColumn.default.replace(`.${enumType["name"]}`, "");
1883
+ }
1884
+ }
1885
+ }
1886
+ if ((dbColumn["is_generated"] === "YES" ||
1887
+ dbColumn["is_generated"] === "ALWAYS") &&
1888
+ dbColumn["generation_expression"]) {
1889
+ tableColumn.generatedType =
1890
+ dbColumn["generated_type"] === "s"
1891
+ ? "STORED"
1892
+ : "VIRTUAL";
1893
+ // We cannot relay on information_schema.columns.generation_expression, because it is formatted different.
1894
+ const asExpressionQuery = this.selectTypeormMetadataSql({
1895
+ schema: dbTable["table_schema"],
1896
+ table: dbTable["table_name"],
1897
+ type: MetadataTableType_1.MetadataTableType.GENERATED_COLUMN,
1898
+ name: tableColumn.name,
1899
+ });
1900
+ const results = await this.query(asExpressionQuery.query, asExpressionQuery.parameters);
1901
+ if (results[0] && results[0].value) {
1902
+ tableColumn.asExpression = results[0].value;
1903
+ }
1904
+ else {
1905
+ tableColumn.asExpression = "";
1906
+ }
1907
+ }
1908
+ tableColumn.comment =
1909
+ dbColumn["description"] == null
1910
+ ? undefined
1911
+ : dbColumn["description"];
1912
+ if (dbColumn["character_set_name"])
1913
+ tableColumn.charset =
1914
+ dbColumn["character_set_name"];
1915
+ if (tableColumn.type === "geometry" ||
1916
+ tableColumn.type === "geography") {
1917
+ const sql = `SELECT * FROM (` +
1918
+ `SELECT "f_table_schema" "table_schema", "f_table_name" "table_name", ` +
1919
+ `"f_${tableColumn.type}_column" "column_name", "srid", "type" ` +
1920
+ `FROM "${tableColumn.type}_columns"` +
1921
+ `) AS _ ` +
1922
+ `WHERE "column_name" = '${dbColumn["column_name"]}' AND ` +
1923
+ `"table_schema" = '${dbColumn["table_schema"]}' AND ` +
1924
+ `"table_name" = '${dbColumn["table_name"]}'`;
1925
+ const results = await this.query(sql);
1926
+ if (results.length > 0) {
1927
+ tableColumn.spatialFeatureType =
1928
+ results[0].type;
1929
+ tableColumn.srid = results[0].srid
1930
+ ? parseInt(results[0].srid)
1931
+ : undefined;
1932
+ }
1933
+ }
1934
+ return tableColumn;
1935
+ }));
1936
+ // find unique constraints of table, group them by constraint name and build TableUnique.
1937
+ const tableUniqueConstraints = OrmUtils_1.OrmUtils.uniq(dbConstraints.filter((dbConstraint) => {
1938
+ return (dbConstraint["table_name"] ===
1939
+ dbTable["table_name"] &&
1940
+ dbConstraint["table_schema"] ===
1941
+ dbTable["table_schema"] &&
1942
+ dbConstraint["constraint_type"] === "UNIQUE");
1943
+ }), (dbConstraint) => dbConstraint["constraint_name"]);
1944
+ table.uniques = tableUniqueConstraints.map((constraint) => {
1945
+ const uniques = dbConstraints.filter((dbC) => dbC["constraint_name"] ===
1946
+ constraint["constraint_name"]);
1947
+ return new TableUnique_1.TableUnique({
1948
+ name: constraint["constraint_name"],
1949
+ columnNames: uniques.map((u) => u["column_name"]),
1950
+ });
1951
+ });
1952
+ // find check constraints of table, group them by constraint name and build TableCheck.
1953
+ const tableCheckConstraints = OrmUtils_1.OrmUtils.uniq(dbConstraints.filter((dbConstraint) => {
1954
+ return (dbConstraint["table_name"] ===
1955
+ dbTable["table_name"] &&
1956
+ dbConstraint["table_schema"] ===
1957
+ dbTable["table_schema"] &&
1958
+ dbConstraint["constraint_type"] === "CHECK");
1959
+ }), (dbConstraint) => dbConstraint["constraint_name"]);
1960
+ table.checks = tableCheckConstraints.map((constraint) => {
1961
+ const checks = dbConstraints.filter((dbC) => dbC["constraint_name"] ===
1962
+ constraint["constraint_name"]);
1963
+ return new TableCheck_1.TableCheck({
1964
+ name: constraint["constraint_name"],
1965
+ columnNames: checks.map((c) => c["column_name"]),
1966
+ expression: constraint["expression"].replace(/^\s*CHECK\s*\((.*)\)\s*$/i, "$1"),
1967
+ });
1968
+ });
1969
+ // find exclusion constraints of table, group them by constraint name and build TableExclusion.
1970
+ const tableExclusionConstraints = OrmUtils_1.OrmUtils.uniq(dbConstraints.filter((dbConstraint) => {
1971
+ return (dbConstraint["table_name"] ===
1972
+ dbTable["table_name"] &&
1973
+ dbConstraint["table_schema"] ===
1974
+ dbTable["table_schema"] &&
1975
+ dbConstraint["constraint_type"] === "EXCLUDE");
1976
+ }), (dbConstraint) => dbConstraint["constraint_name"]);
1977
+ table.exclusions = tableExclusionConstraints.map((constraint) => {
1978
+ return new TableExclusion_1.TableExclusion({
1979
+ name: constraint["constraint_name"],
1980
+ expression: constraint["expression"].substring(8), // trim EXCLUDE from start of expression
1981
+ });
1982
+ });
1983
+ // find foreign key constraints of table, group them by constraint name and build TableForeignKey.
1984
+ const tableForeignKeyConstraints = OrmUtils_1.OrmUtils.uniq(dbForeignKeys.filter((dbForeignKey) => {
1985
+ return (dbForeignKey["table_name"] ===
1986
+ dbTable["table_name"] &&
1987
+ dbForeignKey["table_schema"] ===
1988
+ dbTable["table_schema"]);
1989
+ }), (dbForeignKey) => dbForeignKey["constraint_name"]);
1990
+ table.foreignKeys = tableForeignKeyConstraints.map((dbForeignKey) => {
1991
+ const foreignKeys = dbForeignKeys.filter((dbFk) => dbFk["constraint_name"] ===
1992
+ dbForeignKey["constraint_name"]);
1993
+ // if referenced table located in currently used schema, we don't need to concat schema name to table name.
1994
+ const schema = getSchemaFromKey(dbForeignKey, "referenced_table_schema");
1995
+ const referencedTableName = this.driver.buildTableName(dbForeignKey["referenced_table_name"], schema);
1996
+ return new TableForeignKey_1.TableForeignKey({
1997
+ name: dbForeignKey["constraint_name"],
1998
+ columnNames: foreignKeys.map((dbFk) => dbFk["column_name"]),
1999
+ referencedSchema: dbForeignKey["referenced_table_schema"],
2000
+ referencedTableName: referencedTableName,
2001
+ referencedColumnNames: foreignKeys.map((dbFk) => dbFk["referenced_column_name"]),
2002
+ onDelete: dbForeignKey["on_delete"],
2003
+ onUpdate: dbForeignKey["on_update"],
2004
+ });
2005
+ });
2006
+ // find index constraints of table, group them by constraint name and build TableIndex.
2007
+ const tableIndexConstraints = OrmUtils_1.OrmUtils.uniq(dbIndices.filter((dbIndex) => {
2008
+ return (dbIndex["table_name"] === dbTable["table_name"] &&
2009
+ dbIndex["table_schema"] === dbTable["table_schema"]);
2010
+ }), (dbIndex) => dbIndex["constraint_name"]);
2011
+ table.indices = tableIndexConstraints.map((constraint) => {
2012
+ const indices = dbIndices.filter((index) => index["constraint_name"] ===
2013
+ constraint["constraint_name"]);
2014
+ return new TableIndex_1.TableIndex({
2015
+ table: table,
2016
+ name: constraint["constraint_name"],
2017
+ columnNames: indices.map((i) => i["column_name"]),
2018
+ isUnique: constraint["is_unique"] === "TRUE",
2019
+ where: constraint["condition"],
2020
+ isSpatial: indices.every((i) => this.driver.spatialTypes.indexOf(i["type_name"]) >= 0),
2021
+ isFulltext: false,
2022
+ });
2023
+ });
2024
+ return table;
2025
+ }));
2026
+ }
2027
+ /**
2028
+ * Builds create table sql.
2029
+ */
2030
+ createTableSql(table, createForeignKeys) {
2031
+ const columnDefinitions = table.columns
2032
+ .map((column) => this.buildCreateColumnSql(table, column))
2033
+ .join(", ");
2034
+ let sql = `CREATE TABLE ${this.escapePath(table)} (${columnDefinitions}`;
2035
+ table.columns
2036
+ .filter((column) => column.isUnique)
2037
+ .forEach((column) => {
2038
+ const isUniqueExist = table.uniques.some((unique) => unique.columnNames.length === 1 &&
2039
+ unique.columnNames[0] === column.name);
2040
+ if (!isUniqueExist)
2041
+ table.uniques.push(new TableUnique_1.TableUnique({
2042
+ name: this.connection.namingStrategy.uniqueConstraintName(table, [column.name]),
2043
+ columnNames: [column.name],
2044
+ }));
2045
+ });
2046
+ table.indices
2047
+ .filter((index) => index.isUnique)
2048
+ .forEach((index) => {
2049
+ table.uniques.push(new TableUnique_1.TableUnique({
2050
+ name: this.connection.namingStrategy.uniqueConstraintName(table, index.columnNames),
2051
+ columnNames: index.columnNames,
2052
+ }));
2053
+ });
2054
+ if (table.uniques.length > 0) {
2055
+ const uniquesSql = table.uniques
2056
+ .map((unique) => {
2057
+ const uniqueName = unique.name
2058
+ ? unique.name
2059
+ : this.connection.namingStrategy.uniqueConstraintName(table, unique.columnNames);
2060
+ const columnNames = unique.columnNames
2061
+ .map((columnName) => `"${columnName}"`)
2062
+ .join(", ");
2063
+ return `CONSTRAINT "${uniqueName}" UNIQUE (${columnNames})`;
2064
+ })
2065
+ .join(", ");
2066
+ sql += `, ${uniquesSql}`;
2067
+ }
2068
+ if (table.checks.length > 0) {
2069
+ const checksSql = table.checks
2070
+ .map((check) => {
2071
+ const checkName = check.name
2072
+ ? check.name
2073
+ : this.connection.namingStrategy.checkConstraintName(table, check.expression);
2074
+ return `CONSTRAINT "${checkName}" CHECK (${check.expression})`;
2075
+ })
2076
+ .join(", ");
2077
+ sql += `, ${checksSql}`;
2078
+ }
2079
+ if (table.foreignKeys.length > 0 && createForeignKeys) {
2080
+ const foreignKeysSql = table.foreignKeys
2081
+ .map((fk) => {
2082
+ const columnNames = fk.columnNames
2083
+ .map((columnName) => `"${columnName}"`)
2084
+ .join(", ");
2085
+ if (!fk.name)
2086
+ fk.name = this.connection.namingStrategy.foreignKeyName(table, fk.columnNames, this.getTablePath(fk), fk.referencedColumnNames);
2087
+ const referencedColumnNames = fk.referencedColumnNames
2088
+ .map((columnName) => `"${columnName}"`)
2089
+ .join(", ");
2090
+ let constraint = `CONSTRAINT "${fk.name}" FOREIGN KEY (${columnNames}) REFERENCES ${this.escapePath(this.getTablePath(fk))} (${referencedColumnNames})`;
2091
+ if (fk.onDelete)
2092
+ constraint += ` ON DELETE ${fk.onDelete}`;
2093
+ if (fk.onUpdate)
2094
+ constraint += ` ON UPDATE ${fk.onUpdate}`;
2095
+ return constraint;
2096
+ })
2097
+ .join(", ");
2098
+ sql += `, ${foreignKeysSql}`;
2099
+ }
2100
+ const primaryColumns = table.columns.filter((column) => column.isPrimary);
2101
+ if (primaryColumns.length > 0) {
2102
+ const primaryKeyName = primaryColumns[0].primaryKeyConstraintName
2103
+ ? primaryColumns[0].primaryKeyConstraintName
2104
+ : this.connection.namingStrategy.primaryKeyName(table, primaryColumns.map((column) => column.name));
2105
+ const columnNames = primaryColumns
2106
+ .map((column) => `"${column.name}"`)
2107
+ .join(", ");
2108
+ sql += `, CONSTRAINT "${primaryKeyName}" PRIMARY KEY (${columnNames})`;
2109
+ }
2110
+ sql += `)`;
2111
+ table.columns
2112
+ .filter((it) => it.comment)
2113
+ .forEach((it) => (sql += `; COMMENT ON COLUMN ${this.escapePath(table)}."${it.name}" IS ${this.escapeComment(it.comment)}`));
2114
+ return new Query_1.Query(sql);
2115
+ }
2116
+ /**
2117
+ * Loads Cockroachdb version.
2118
+ */
2119
+ async getVersion() {
2120
+ const result = await this.query(`SELECT version() AS "version"`);
2121
+ const versionString = result[0].version;
2122
+ return versionString.replace(/^CockroachDB CCL v([\d.]+) .*$/, "$1");
2123
+ }
2124
+ /**
2125
+ * Builds drop table sql.
2126
+ */
2127
+ dropTableSql(tableOrPath) {
2128
+ return new Query_1.Query(`DROP TABLE ${this.escapePath(tableOrPath)}`);
2129
+ }
2130
+ createViewSql(view) {
2131
+ if (typeof view.expression === "string") {
2132
+ return new Query_1.Query(`CREATE VIEW ${this.escapePath(view)} AS ${view.expression}`);
2133
+ }
2134
+ else {
2135
+ return new Query_1.Query(`CREATE VIEW ${this.escapePath(view)} AS ${view
2136
+ .expression(this.connection)
2137
+ .getQuery()}`);
2138
+ }
2139
+ }
2140
+ async insertViewDefinitionSql(view) {
2141
+ const currentSchema = await this.getCurrentSchema();
2142
+ let { schema, tableName: name } = this.driver.parseTableName(view);
2143
+ if (!schema) {
2144
+ schema = currentSchema;
2145
+ }
2146
+ const expression = typeof view.expression === "string"
2147
+ ? view.expression.trim()
2148
+ : view.expression(this.connection).getQuery();
2149
+ return this.insertTypeormMetadataSql({
2150
+ type: MetadataTableType_1.MetadataTableType.VIEW,
2151
+ schema: schema,
2152
+ name: name,
2153
+ value: expression,
2154
+ });
2155
+ }
2156
+ /**
2157
+ * Builds drop view sql.
2158
+ */
2159
+ dropViewSql(viewOrPath) {
2160
+ return new Query_1.Query(`DROP VIEW ${this.escapePath(viewOrPath)}`);
2161
+ }
2162
+ /**
2163
+ * Builds remove view sql.
2164
+ */
2165
+ async deleteViewDefinitionSql(viewOrPath) {
2166
+ const currentSchema = await this.getCurrentSchema();
2167
+ let { schema, tableName: name } = this.driver.parseTableName(viewOrPath);
2168
+ if (!schema) {
2169
+ schema = currentSchema;
2170
+ }
2171
+ return this.deleteTypeormMetadataSql({
2172
+ type: MetadataTableType_1.MetadataTableType.VIEW,
2173
+ schema,
2174
+ name,
2175
+ });
2176
+ }
2177
+ /**
2178
+ * Drops ENUM type from given schemas.
2179
+ */
2180
+ async dropEnumTypes(schemaNames) {
2181
+ const selectDropsQuery = `SELECT 'DROP TYPE IF EXISTS "' || n.nspname || '"."' || t.typname || '";' as "query" FROM "pg_type" "t" ` +
2182
+ `INNER JOIN "pg_enum" "e" ON "e"."enumtypid" = "t"."oid" ` +
2183
+ `INNER JOIN "pg_namespace" "n" ON "n"."oid" = "t"."typnamespace" ` +
2184
+ `WHERE "n"."nspname" IN (${schemaNames}) GROUP BY "n"."nspname", "t"."typname"`;
2185
+ const dropQueries = await this.query(selectDropsQuery);
2186
+ await Promise.all(dropQueries.map((q) => this.query(q["query"])));
2187
+ }
2188
+ /**
2189
+ * Checks if enum with the given name exist in the database.
2190
+ */
2191
+ async hasEnumType(table, column) {
2192
+ let { schema } = this.driver.parseTableName(table);
2193
+ if (!schema) {
2194
+ schema = await this.getCurrentSchema();
2195
+ }
2196
+ const enumName = this.buildEnumName(table, column, false, true);
2197
+ const sql = `SELECT "n"."nspname", "t"."typname" FROM "pg_type" "t" ` +
2198
+ `INNER JOIN "pg_namespace" "n" ON "n"."oid" = "t"."typnamespace" ` +
2199
+ `WHERE "n"."nspname" = '${schema}' AND "t"."typname" = '${enumName}'`;
2200
+ const result = await this.query(sql);
2201
+ return result.length ? true : false;
2202
+ }
2203
+ /**
2204
+ * Builds create ENUM type sql.
2205
+ */
2206
+ createEnumTypeSql(table, column, enumName) {
2207
+ if (!enumName)
2208
+ enumName = this.buildEnumName(table, column);
2209
+ const enumValues = column
2210
+ .enum.map((value) => `'${value.replaceAll("'", "''")}'`)
2211
+ .join(", ");
2212
+ return new Query_1.Query(`CREATE TYPE ${enumName} AS ENUM(${enumValues})`);
2213
+ }
2214
+ /**
2215
+ * Builds create ENUM type sql.
2216
+ */
2217
+ dropEnumTypeSql(table, column, enumName) {
2218
+ if (!enumName)
2219
+ enumName = this.buildEnumName(table, column);
2220
+ return new Query_1.Query(`DROP TYPE ${enumName}`);
2221
+ }
2222
+ /**
2223
+ * Builds create index sql.
2224
+ * UNIQUE indices creates as UNIQUE constraints.
2225
+ */
2226
+ createIndexSql(table, index) {
2227
+ const columns = index.columnNames
2228
+ .map((columnName) => `"${columnName}"`)
2229
+ .join(", ");
2230
+ return new Query_1.Query(`CREATE ${index.isUnique ? "UNIQUE " : ""}INDEX "${index.name}" ON ${this.escapePath(table)} ${index.isSpatial ? "USING GiST " : ""}(${columns}) ${index.where ? "WHERE " + index.where : ""}`);
2231
+ }
2232
+ /**
2233
+ * Builds drop index sql.
2234
+ */
2235
+ dropIndexSql(table, indexOrName) {
2236
+ const indexName = InstanceChecker_1.InstanceChecker.isTableIndex(indexOrName) ||
2237
+ InstanceChecker_1.InstanceChecker.isTableUnique(indexOrName)
2238
+ ? indexOrName.name
2239
+ : indexOrName;
2240
+ return new Query_1.Query(`DROP INDEX ${this.escapePath(table)}@"${indexName}" CASCADE`);
2241
+ }
2242
+ /**
2243
+ * Builds create primary key sql.
2244
+ */
2245
+ createPrimaryKeySql(table, columnNames, constraintName) {
2246
+ const primaryKeyName = constraintName
2247
+ ? constraintName
2248
+ : this.connection.namingStrategy.primaryKeyName(table, columnNames);
2249
+ const columnNamesString = columnNames
2250
+ .map((columnName) => `"${columnName}"`)
2251
+ .join(", ");
2252
+ return new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT "${primaryKeyName}" PRIMARY KEY (${columnNamesString})`);
2253
+ }
2254
+ /**
2255
+ * Builds drop primary key sql.
2256
+ */
2257
+ dropPrimaryKeySql(table) {
2258
+ if (!table.primaryColumns.length)
2259
+ throw new error_1.TypeORMError(`Table ${table} has no primary keys.`);
2260
+ const columnNames = table.primaryColumns.map((column) => column.name);
2261
+ const constraintName = table.primaryColumns[0].primaryKeyConstraintName;
2262
+ const primaryKeyName = constraintName
2263
+ ? constraintName
2264
+ : this.connection.namingStrategy.primaryKeyName(table, columnNames);
2265
+ return new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT "${primaryKeyName}"`);
2266
+ }
2267
+ /**
2268
+ * Builds create unique constraint sql.
2269
+ */
2270
+ createUniqueConstraintSql(table, uniqueConstraint) {
2271
+ const columnNames = uniqueConstraint.columnNames
2272
+ .map((column) => `"` + column + `"`)
2273
+ .join(", ");
2274
+ return new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT "${uniqueConstraint.name}" UNIQUE (${columnNames})`);
2275
+ }
2276
+ /**
2277
+ * Builds drop unique constraint sql.
2278
+ */
2279
+ dropUniqueConstraintSql(table, uniqueOrName) {
2280
+ const uniqueName = InstanceChecker_1.InstanceChecker.isTableUnique(uniqueOrName)
2281
+ ? uniqueOrName.name
2282
+ : uniqueOrName;
2283
+ return new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT "${uniqueName}"`);
2284
+ }
2285
+ /**
2286
+ * Builds create check constraint sql.
2287
+ */
2288
+ createCheckConstraintSql(table, checkConstraint) {
2289
+ return new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT "${checkConstraint.name}" CHECK (${checkConstraint.expression})`);
2290
+ }
2291
+ /**
2292
+ * Builds drop check constraint sql.
2293
+ */
2294
+ dropCheckConstraintSql(table, checkOrName) {
2295
+ const checkName = InstanceChecker_1.InstanceChecker.isTableCheck(checkOrName)
2296
+ ? checkOrName.name
2297
+ : checkOrName;
2298
+ return new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT "${checkName}"`);
2299
+ }
2300
+ /**
2301
+ * Builds create foreign key sql.
2302
+ */
2303
+ createForeignKeySql(table, foreignKey) {
2304
+ const columnNames = foreignKey.columnNames
2305
+ .map((column) => `"` + column + `"`)
2306
+ .join(", ");
2307
+ const referencedColumnNames = foreignKey.referencedColumnNames
2308
+ .map((column) => `"` + column + `"`)
2309
+ .join(",");
2310
+ let sql = `ALTER TABLE ${this.escapePath(table)} ADD CONSTRAINT "${foreignKey.name}" FOREIGN KEY (${columnNames}) ` +
2311
+ `REFERENCES ${this.escapePath(this.getTablePath(foreignKey))}(${referencedColumnNames})`;
2312
+ if (foreignKey.onDelete)
2313
+ sql += ` ON DELETE ${foreignKey.onDelete}`;
2314
+ if (foreignKey.onUpdate)
2315
+ sql += ` ON UPDATE ${foreignKey.onUpdate}`;
2316
+ return new Query_1.Query(sql);
2317
+ }
2318
+ /**
2319
+ * Builds drop foreign key sql.
2320
+ */
2321
+ dropForeignKeySql(table, foreignKeyOrName) {
2322
+ const foreignKeyName = InstanceChecker_1.InstanceChecker.isTableForeignKey(foreignKeyOrName)
2323
+ ? foreignKeyOrName.name
2324
+ : foreignKeyOrName;
2325
+ return new Query_1.Query(`ALTER TABLE ${this.escapePath(table)} DROP CONSTRAINT "${foreignKeyName}"`);
2326
+ }
2327
+ /**
2328
+ * Builds sequence name from given table and column.
2329
+ */
2330
+ buildSequenceName(table, columnOrName) {
2331
+ const { tableName } = this.driver.parseTableName(table);
2332
+ const columnName = InstanceChecker_1.InstanceChecker.isTableColumn(columnOrName)
2333
+ ? columnOrName.name
2334
+ : columnOrName;
2335
+ return `${tableName}_${columnName}_seq`;
2336
+ }
2337
+ buildSequencePath(table, columnOrName) {
2338
+ const { schema } = this.driver.parseTableName(table);
2339
+ return schema
2340
+ ? `${schema}.${this.buildSequenceName(table, columnOrName)}`
2341
+ : this.buildSequenceName(table, columnOrName);
2342
+ }
2343
+ /**
2344
+ * Builds ENUM type name from given table and column.
2345
+ */
2346
+ buildEnumName(table, column, withSchema = true, disableEscape, toOld) {
2347
+ const { schema, tableName } = this.driver.parseTableName(table);
2348
+ let enumName = column.enumName
2349
+ ? column.enumName
2350
+ : `${tableName}_${column.name.toLowerCase()}_enum`;
2351
+ if (schema && withSchema)
2352
+ enumName = `${schema}.${enumName}`;
2353
+ if (toOld)
2354
+ enumName = enumName + "_old";
2355
+ return enumName
2356
+ .split(".")
2357
+ .map((i) => {
2358
+ return disableEscape ? i : `"${i}"`;
2359
+ })
2360
+ .join(".");
2361
+ }
2362
+ async getUserDefinedTypeName(table, column) {
2363
+ let { schema, tableName: name } = this.driver.parseTableName(table);
2364
+ if (!schema) {
2365
+ schema = await this.getCurrentSchema();
2366
+ }
2367
+ const result = await this.query(`SELECT "udt_schema", "udt_name" ` +
2368
+ `FROM "information_schema"."columns" WHERE "table_schema" = '${schema}' AND "table_name" = '${name}' AND "column_name"='${column.name}'`);
2369
+ // docs: https://www.postgresql.org/docs/current/xtypes.html
2370
+ // When you define a new base type, PostgreSQL automatically provides support for arrays of that type.
2371
+ // The array type typically has the same name as the base type with the underscore character (_) prepended.
2372
+ // ----
2373
+ // so, we must remove this underscore character from enum type name
2374
+ let udtName = result[0]["udt_name"];
2375
+ if (udtName.indexOf("_") === 0) {
2376
+ udtName = udtName.substr(1, udtName.length);
2377
+ }
2378
+ return {
2379
+ schema: result[0]["udt_schema"],
2380
+ name: udtName,
2381
+ };
2382
+ }
2383
+ /**
2384
+ * Escapes a given comment so it's safe to include in a query.
2385
+ */
2386
+ escapeComment(comment) {
2387
+ if (comment === undefined || comment.length === 0) {
2388
+ return "NULL";
2389
+ }
2390
+ comment = comment.replace(/'/g, "''").replace(/\u0000/g, ""); // Null bytes aren't allowed in comments
2391
+ return `'${comment}'`;
2392
+ }
2393
+ /**
2394
+ * Escapes given table or view path.
2395
+ */
2396
+ escapePath(target) {
2397
+ const { schema, tableName } = this.driver.parseTableName(target);
2398
+ if (schema && schema !== this.driver.searchSchema) {
2399
+ return `"${schema}"."${tableName}"`;
2400
+ }
2401
+ return `"${tableName}"`;
2402
+ }
2403
+ /**
2404
+ * Builds a query for create column.
2405
+ */
2406
+ buildCreateColumnSql(table, column) {
2407
+ let c = '"' + column.name + '"';
2408
+ if (column.isGenerated) {
2409
+ if (column.generationStrategy === "increment") {
2410
+ c += ` INT DEFAULT nextval('${this.escapePath(this.buildSequencePath(table, column))}')`;
2411
+ }
2412
+ else if (column.generationStrategy === "rowid") {
2413
+ c += " INT DEFAULT unique_rowid()";
2414
+ }
2415
+ else if (column.generationStrategy === "uuid") {
2416
+ c += " UUID DEFAULT gen_random_uuid()";
2417
+ }
2418
+ }
2419
+ if (column.type === "enum" || column.type === "simple-enum") {
2420
+ c += " " + this.buildEnumName(table, column);
2421
+ if (column.isArray)
2422
+ c += " array";
2423
+ }
2424
+ else if (!column.isGenerated) {
2425
+ c += " " + this.connection.driver.createFullType(column);
2426
+ }
2427
+ if (column.asExpression) {
2428
+ c += ` AS (${column.asExpression}) ${column.generatedType ? column.generatedType : "VIRTUAL"}`;
2429
+ }
2430
+ else {
2431
+ if (column.charset)
2432
+ c += ' CHARACTER SET "' + column.charset + '"';
2433
+ if (column.collation)
2434
+ c += ' COLLATE "' + column.collation + '"';
2435
+ }
2436
+ if (!column.isNullable)
2437
+ c += " NOT NULL";
2438
+ if (!column.isGenerated &&
2439
+ column.default !== undefined &&
2440
+ column.default !== null)
2441
+ c += " DEFAULT " + column.default;
2442
+ return c;
2443
+ }
2444
+ /**
2445
+ * Change table comment.
2446
+ */
2447
+ changeTableComment(tableOrName, comment) {
2448
+ throw new error_1.TypeORMError(`cockroachdb driver does not support change table comment.`);
2449
+ }
2450
+ }
2451
+ exports.CockroachQueryRunner = CockroachQueryRunner;
2452
+
2453
+ //# sourceMappingURL=CockroachQueryRunner.js.map