taon-type-sql 18.0.9

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 (325) hide show
  1. package/assets/shared/shared_folder_info.txt +7 -0
  2. package/browser/README.md +24 -0
  3. package/browser/esm2022/lib/builder/column/basic-column.mjs +13 -0
  4. package/browser/esm2022/lib/builder/column/boolean-column.mjs +14 -0
  5. package/browser/esm2022/lib/builder/column/comparable-column.mjs +41 -0
  6. package/browser/esm2022/lib/builder/column/date-column.mjs +14 -0
  7. package/browser/esm2022/lib/builder/column/number-column.mjs +19 -0
  8. package/browser/esm2022/lib/builder/column/query-column.mjs +21 -0
  9. package/browser/esm2022/lib/builder/column/string-column.mjs +36 -0
  10. package/browser/esm2022/lib/builder/column/value-column.mjs +30 -0
  11. package/browser/esm2022/lib/builder/condition/query-column-condition.mjs +19 -0
  12. package/browser/esm2022/lib/builder/condition/query-condition-chain.mjs +28 -0
  13. package/browser/esm2022/lib/builder/condition/query-condition.mjs +6 -0
  14. package/browser/esm2022/lib/builder/condition/query-join-condition.mjs +19 -0
  15. package/browser/esm2022/lib/builder/helpers/generics-helper.mjs +5 -0
  16. package/browser/esm2022/lib/builder/helpers/internal-types.mjs +4 -0
  17. package/browser/esm2022/lib/builder/join/joined-tables-chain.mjs +14 -0
  18. package/browser/esm2022/lib/builder/join/joined-tables.mjs +22 -0
  19. package/browser/esm2022/lib/builder/other/query-ordering.mjs +17 -0
  20. package/browser/esm2022/lib/builder/query/select-query.mjs +48 -0
  21. package/browser/esm2022/lib/builder/query/table-condition-query.mjs +25 -0
  22. package/browser/esm2022/lib/builder/query/table-query.mjs +54 -0
  23. package/browser/esm2022/lib/builder/query-source.mjs +20 -0
  24. package/browser/esm2022/lib/builder/query-table.mjs +24 -0
  25. package/browser/esm2022/lib/client/mysql.mjs +10 -0
  26. package/browser/esm2022/lib/client/query-processor.mjs +45 -0
  27. package/browser/esm2022/lib/converter/param-converter.mjs +27 -0
  28. package/browser/esm2022/lib/converter/parameterized-converter.mjs +17 -0
  29. package/browser/esm2022/lib/converter/query-converter.mjs +282 -0
  30. package/browser/esm2022/lib/converter/result-converter.mjs +88 -0
  31. package/browser/esm2022/lib/converter/sql-converter.mjs +8 -0
  32. package/browser/esm2022/lib/converter/type-converter.mjs +39 -0
  33. package/browser/esm2022/lib/converter/types.mjs +4 -0
  34. package/browser/esm2022/lib/index.mjs +23 -0
  35. package/browser/esm2022/public-api.mjs +2 -0
  36. package/browser/esm2022/taon-type-sql.mjs +5 -0
  37. package/browser/fesm2022/taon-type-sql.mjs +877 -0
  38. package/browser/fesm2022/taon-type-sql.mjs.map +1 -0
  39. package/browser/index.d.ts +6 -0
  40. package/browser/lib/builder/column/basic-column.d.ts +9 -0
  41. package/browser/lib/builder/column/boolean-column.d.ts +10 -0
  42. package/browser/lib/builder/column/comparable-column.d.ts +19 -0
  43. package/browser/lib/builder/column/date-column.d.ts +10 -0
  44. package/browser/lib/builder/column/number-column.d.ts +11 -0
  45. package/browser/lib/builder/column/query-column.d.ts +19 -0
  46. package/browser/lib/builder/column/string-column.d.ts +18 -0
  47. package/browser/lib/builder/column/value-column.d.ts +16 -0
  48. package/browser/lib/builder/condition/query-column-condition.d.ts +14 -0
  49. package/browser/lib/builder/condition/query-condition-chain.d.ts +18 -0
  50. package/browser/lib/builder/condition/query-condition.d.ts +8 -0
  51. package/browser/lib/builder/condition/query-join-condition.d.ts +13 -0
  52. package/browser/lib/builder/helpers/generics-helper.d.ts +3 -0
  53. package/browser/lib/builder/helpers/internal-types.d.ts +16 -0
  54. package/browser/lib/builder/join/joined-tables-chain.d.ts +12 -0
  55. package/browser/lib/builder/join/joined-tables.d.ts +13 -0
  56. package/browser/lib/builder/other/query-ordering.d.ts +11 -0
  57. package/browser/lib/builder/query/select-query.d.ts +30 -0
  58. package/browser/lib/builder/query/table-condition-query.d.ts +17 -0
  59. package/browser/lib/builder/query/table-query.d.ts +24 -0
  60. package/browser/lib/builder/query-source.d.ts +15 -0
  61. package/browser/lib/builder/query-table.d.ts +16 -0
  62. package/browser/lib/client/mysql.d.ts +6 -0
  63. package/browser/lib/client/query-processor.d.ts +11 -0
  64. package/browser/lib/converter/param-converter.d.ts +3 -0
  65. package/browser/lib/converter/parameterized-converter.d.ts +6 -0
  66. package/browser/lib/converter/query-converter.d.ts +3 -0
  67. package/browser/lib/converter/result-converter.d.ts +3 -0
  68. package/browser/lib/converter/sql-converter.d.ts +3 -0
  69. package/browser/lib/converter/type-converter.d.ts +5 -0
  70. package/browser/lib/converter/types.d.ts +6 -0
  71. package/browser/lib/index.d.ts +26 -0
  72. package/browser/package.json +25 -0
  73. package/browser/public-api.d.ts +2 -0
  74. package/client/README.md +24 -0
  75. package/client/esm2022/lib/builder/column/basic-column.mjs +13 -0
  76. package/client/esm2022/lib/builder/column/boolean-column.mjs +14 -0
  77. package/client/esm2022/lib/builder/column/comparable-column.mjs +41 -0
  78. package/client/esm2022/lib/builder/column/date-column.mjs +14 -0
  79. package/client/esm2022/lib/builder/column/number-column.mjs +19 -0
  80. package/client/esm2022/lib/builder/column/query-column.mjs +21 -0
  81. package/client/esm2022/lib/builder/column/string-column.mjs +36 -0
  82. package/client/esm2022/lib/builder/column/value-column.mjs +30 -0
  83. package/client/esm2022/lib/builder/condition/query-column-condition.mjs +19 -0
  84. package/client/esm2022/lib/builder/condition/query-condition-chain.mjs +28 -0
  85. package/client/esm2022/lib/builder/condition/query-condition.mjs +6 -0
  86. package/client/esm2022/lib/builder/condition/query-join-condition.mjs +19 -0
  87. package/client/esm2022/lib/builder/helpers/generics-helper.mjs +5 -0
  88. package/client/esm2022/lib/builder/helpers/internal-types.mjs +4 -0
  89. package/client/esm2022/lib/builder/join/joined-tables-chain.mjs +14 -0
  90. package/client/esm2022/lib/builder/join/joined-tables.mjs +22 -0
  91. package/client/esm2022/lib/builder/other/query-ordering.mjs +17 -0
  92. package/client/esm2022/lib/builder/query/select-query.mjs +48 -0
  93. package/client/esm2022/lib/builder/query/table-condition-query.mjs +25 -0
  94. package/client/esm2022/lib/builder/query/table-query.mjs +54 -0
  95. package/client/esm2022/lib/builder/query-source.mjs +20 -0
  96. package/client/esm2022/lib/builder/query-table.mjs +24 -0
  97. package/client/esm2022/lib/client/mysql.mjs +10 -0
  98. package/client/esm2022/lib/client/query-processor.mjs +45 -0
  99. package/client/esm2022/lib/converter/param-converter.mjs +27 -0
  100. package/client/esm2022/lib/converter/parameterized-converter.mjs +17 -0
  101. package/client/esm2022/lib/converter/query-converter.mjs +282 -0
  102. package/client/esm2022/lib/converter/result-converter.mjs +88 -0
  103. package/client/esm2022/lib/converter/sql-converter.mjs +8 -0
  104. package/client/esm2022/lib/converter/type-converter.mjs +39 -0
  105. package/client/esm2022/lib/converter/types.mjs +4 -0
  106. package/client/esm2022/lib/index.mjs +23 -0
  107. package/client/esm2022/public-api.mjs +2 -0
  108. package/client/esm2022/taon-type-sql.mjs +5 -0
  109. package/client/fesm2022/taon-type-sql.mjs +877 -0
  110. package/client/fesm2022/taon-type-sql.mjs.map +1 -0
  111. package/client/index.d.ts +6 -0
  112. package/client/lib/builder/column/basic-column.d.ts +9 -0
  113. package/client/lib/builder/column/boolean-column.d.ts +10 -0
  114. package/client/lib/builder/column/comparable-column.d.ts +19 -0
  115. package/client/lib/builder/column/date-column.d.ts +10 -0
  116. package/client/lib/builder/column/number-column.d.ts +11 -0
  117. package/client/lib/builder/column/query-column.d.ts +19 -0
  118. package/client/lib/builder/column/string-column.d.ts +18 -0
  119. package/client/lib/builder/column/value-column.d.ts +16 -0
  120. package/client/lib/builder/condition/query-column-condition.d.ts +14 -0
  121. package/client/lib/builder/condition/query-condition-chain.d.ts +18 -0
  122. package/client/lib/builder/condition/query-condition.d.ts +8 -0
  123. package/client/lib/builder/condition/query-join-condition.d.ts +13 -0
  124. package/client/lib/builder/helpers/generics-helper.d.ts +3 -0
  125. package/client/lib/builder/helpers/internal-types.d.ts +16 -0
  126. package/client/lib/builder/join/joined-tables-chain.d.ts +12 -0
  127. package/client/lib/builder/join/joined-tables.d.ts +13 -0
  128. package/client/lib/builder/other/query-ordering.d.ts +11 -0
  129. package/client/lib/builder/query/select-query.d.ts +30 -0
  130. package/client/lib/builder/query/table-condition-query.d.ts +17 -0
  131. package/client/lib/builder/query/table-query.d.ts +24 -0
  132. package/client/lib/builder/query-source.d.ts +15 -0
  133. package/client/lib/builder/query-table.d.ts +16 -0
  134. package/client/lib/client/mysql.d.ts +6 -0
  135. package/client/lib/client/query-processor.d.ts +11 -0
  136. package/client/lib/converter/param-converter.d.ts +3 -0
  137. package/client/lib/converter/parameterized-converter.d.ts +6 -0
  138. package/client/lib/converter/query-converter.d.ts +3 -0
  139. package/client/lib/converter/result-converter.d.ts +3 -0
  140. package/client/lib/converter/sql-converter.d.ts +3 -0
  141. package/client/lib/converter/type-converter.d.ts +5 -0
  142. package/client/lib/converter/types.d.ts +6 -0
  143. package/client/lib/index.d.ts +26 -0
  144. package/client/public-api.d.ts +2 -0
  145. package/index.d.ts +1 -0
  146. package/index.js +7 -0
  147. package/index.js.map +1 -0
  148. package/lib/build-info._auto-generated_.d.ts +1 -0
  149. package/lib/build-info._auto-generated_.js +5 -0
  150. package/lib/build-info._auto-generated_.js.map +1 -0
  151. package/lib/builder/column/basic-column.d.ts +8 -0
  152. package/lib/builder/column/basic-column.js +19 -0
  153. package/lib/builder/column/basic-column.js.map +1 -0
  154. package/lib/builder/column/boolean-column.d.ts +9 -0
  155. package/lib/builder/column/boolean-column.js +20 -0
  156. package/lib/builder/column/boolean-column.js.map +1 -0
  157. package/lib/builder/column/comparable-column.d.ts +18 -0
  158. package/lib/builder/column/comparable-column.js +46 -0
  159. package/lib/builder/column/comparable-column.js.map +1 -0
  160. package/lib/builder/column/date-column.d.ts +9 -0
  161. package/lib/builder/column/date-column.js +20 -0
  162. package/lib/builder/column/date-column.js.map +1 -0
  163. package/lib/builder/column/number-column.d.ts +10 -0
  164. package/lib/builder/column/number-column.js +25 -0
  165. package/lib/builder/column/number-column.js.map +1 -0
  166. package/lib/builder/column/query-column.d.ts +18 -0
  167. package/lib/builder/column/query-column.js +23 -0
  168. package/lib/builder/column/query-column.js.map +1 -0
  169. package/lib/builder/column/string-column.d.ts +17 -0
  170. package/lib/builder/column/string-column.js +42 -0
  171. package/lib/builder/column/string-column.js.map +1 -0
  172. package/lib/builder/column/value-column.d.ts +15 -0
  173. package/lib/builder/column/value-column.js +34 -0
  174. package/lib/builder/column/value-column.js.map +1 -0
  175. package/lib/builder/condition/query-column-condition.d.ts +13 -0
  176. package/lib/builder/condition/query-column-condition.js +28 -0
  177. package/lib/builder/condition/query-column-condition.js.map +1 -0
  178. package/lib/builder/condition/query-condition-chain.d.ts +17 -0
  179. package/lib/builder/condition/query-condition-chain.js +34 -0
  180. package/lib/builder/condition/query-condition-chain.js.map +1 -0
  181. package/lib/builder/condition/query-condition.d.ts +7 -0
  182. package/lib/builder/condition/query-condition.js +10 -0
  183. package/lib/builder/condition/query-condition.js.map +1 -0
  184. package/lib/builder/condition/query-join-condition.d.ts +12 -0
  185. package/lib/builder/condition/query-join-condition.js +24 -0
  186. package/lib/builder/condition/query-join-condition.js.map +1 -0
  187. package/lib/builder/helpers/generics-helper.d.ts +2 -0
  188. package/lib/builder/helpers/generics-helper.js +10 -0
  189. package/lib/builder/helpers/generics-helper.js.map +1 -0
  190. package/lib/builder/helpers/internal-types.d.ts +15 -0
  191. package/lib/builder/helpers/internal-types.js +4 -0
  192. package/lib/builder/helpers/internal-types.js.map +1 -0
  193. package/lib/builder/join/joined-tables-chain.d.ts +11 -0
  194. package/lib/builder/join/joined-tables-chain.js +16 -0
  195. package/lib/builder/join/joined-tables-chain.js.map +1 -0
  196. package/lib/builder/join/joined-tables.d.ts +12 -0
  197. package/lib/builder/join/joined-tables.js +24 -0
  198. package/lib/builder/join/joined-tables.js.map +1 -0
  199. package/lib/builder/other/query-ordering.d.ts +10 -0
  200. package/lib/builder/other/query-ordering.js +19 -0
  201. package/lib/builder/other/query-ordering.js.map +1 -0
  202. package/lib/builder/query/select-query.d.ts +29 -0
  203. package/lib/builder/query/select-query.js +70 -0
  204. package/lib/builder/query/select-query.js.map +1 -0
  205. package/lib/builder/query/table-condition-query.d.ts +16 -0
  206. package/lib/builder/query/table-condition-query.js +27 -0
  207. package/lib/builder/query/table-condition-query.js.map +1 -0
  208. package/lib/builder/query/table-query.d.ts +23 -0
  209. package/lib/builder/query/table-query.js +63 -0
  210. package/lib/builder/query/table-query.js.map +1 -0
  211. package/lib/builder/query-source.d.ts +14 -0
  212. package/lib/builder/query-source.js +22 -0
  213. package/lib/builder/query-source.js.map +1 -0
  214. package/lib/builder/query-table.d.ts +15 -0
  215. package/lib/builder/query-table.js +26 -0
  216. package/lib/builder/query-table.js.map +1 -0
  217. package/lib/client/mysql.d.ts +5 -0
  218. package/lib/client/mysql.js +15 -0
  219. package/lib/client/mysql.js.map +1 -0
  220. package/lib/client/pg.d.ts +5 -0
  221. package/lib/client/pg.js +15 -0
  222. package/lib/client/pg.js.map +1 -0
  223. package/lib/client/query-processor.d.ts +10 -0
  224. package/lib/client/query-processor.js +75 -0
  225. package/lib/client/query-processor.js.map +1 -0
  226. package/lib/converter/param-converter.d.ts +2 -0
  227. package/lib/converter/param-converter.js +31 -0
  228. package/lib/converter/param-converter.js.map +1 -0
  229. package/lib/converter/parameterized-converter.d.ts +5 -0
  230. package/lib/converter/parameterized-converter.js +18 -0
  231. package/lib/converter/parameterized-converter.js.map +1 -0
  232. package/lib/converter/query-converter.d.ts +2 -0
  233. package/lib/converter/query-converter.js +286 -0
  234. package/lib/converter/query-converter.js.map +1 -0
  235. package/lib/converter/result-converter.d.ts +2 -0
  236. package/lib/converter/result-converter.js +89 -0
  237. package/lib/converter/result-converter.js.map +1 -0
  238. package/lib/converter/sql-converter.d.ts +2 -0
  239. package/lib/converter/sql-converter.js +9 -0
  240. package/lib/converter/sql-converter.js.map +1 -0
  241. package/lib/converter/type-converter.d.ts +4 -0
  242. package/lib/converter/type-converter.js +43 -0
  243. package/lib/converter/type-converter.js.map +1 -0
  244. package/lib/converter/types.d.ts +5 -0
  245. package/lib/converter/types.js +3 -0
  246. package/lib/converter/types.js.map +1 -0
  247. package/lib/index.d.ts +25 -0
  248. package/lib/index.js +48 -0
  249. package/lib/index.js.map +1 -0
  250. package/package.json +38 -0
  251. package/src.d.ts +6 -0
  252. package/taon.jsonc +23 -0
  253. package/tmp-environment.json +359 -0
  254. package/websql/README.md +24 -0
  255. package/websql/esm2022/lib/builder/column/basic-column.mjs +13 -0
  256. package/websql/esm2022/lib/builder/column/boolean-column.mjs +14 -0
  257. package/websql/esm2022/lib/builder/column/comparable-column.mjs +41 -0
  258. package/websql/esm2022/lib/builder/column/date-column.mjs +14 -0
  259. package/websql/esm2022/lib/builder/column/number-column.mjs +19 -0
  260. package/websql/esm2022/lib/builder/column/query-column.mjs +21 -0
  261. package/websql/esm2022/lib/builder/column/string-column.mjs +36 -0
  262. package/websql/esm2022/lib/builder/column/value-column.mjs +30 -0
  263. package/websql/esm2022/lib/builder/condition/query-column-condition.mjs +19 -0
  264. package/websql/esm2022/lib/builder/condition/query-condition-chain.mjs +28 -0
  265. package/websql/esm2022/lib/builder/condition/query-condition.mjs +6 -0
  266. package/websql/esm2022/lib/builder/condition/query-join-condition.mjs +19 -0
  267. package/websql/esm2022/lib/builder/helpers/generics-helper.mjs +5 -0
  268. package/websql/esm2022/lib/builder/helpers/internal-types.mjs +4 -0
  269. package/websql/esm2022/lib/builder/join/joined-tables-chain.mjs +14 -0
  270. package/websql/esm2022/lib/builder/join/joined-tables.mjs +22 -0
  271. package/websql/esm2022/lib/builder/other/query-ordering.mjs +17 -0
  272. package/websql/esm2022/lib/builder/query/select-query.mjs +48 -0
  273. package/websql/esm2022/lib/builder/query/table-condition-query.mjs +25 -0
  274. package/websql/esm2022/lib/builder/query/table-query.mjs +54 -0
  275. package/websql/esm2022/lib/builder/query-source.mjs +20 -0
  276. package/websql/esm2022/lib/builder/query-table.mjs +24 -0
  277. package/websql/esm2022/lib/client/mysql.mjs +10 -0
  278. package/websql/esm2022/lib/client/query-processor.mjs +45 -0
  279. package/websql/esm2022/lib/converter/param-converter.mjs +27 -0
  280. package/websql/esm2022/lib/converter/parameterized-converter.mjs +17 -0
  281. package/websql/esm2022/lib/converter/query-converter.mjs +282 -0
  282. package/websql/esm2022/lib/converter/result-converter.mjs +88 -0
  283. package/websql/esm2022/lib/converter/sql-converter.mjs +8 -0
  284. package/websql/esm2022/lib/converter/type-converter.mjs +39 -0
  285. package/websql/esm2022/lib/converter/types.mjs +4 -0
  286. package/websql/esm2022/lib/index.mjs +23 -0
  287. package/websql/esm2022/public-api.mjs +2 -0
  288. package/websql/esm2022/taon-type-sql.mjs +5 -0
  289. package/websql/fesm2022/taon-type-sql.mjs +877 -0
  290. package/websql/fesm2022/taon-type-sql.mjs.map +1 -0
  291. package/websql/index.d.ts +6 -0
  292. package/websql/lib/builder/column/basic-column.d.ts +9 -0
  293. package/websql/lib/builder/column/boolean-column.d.ts +10 -0
  294. package/websql/lib/builder/column/comparable-column.d.ts +19 -0
  295. package/websql/lib/builder/column/date-column.d.ts +10 -0
  296. package/websql/lib/builder/column/number-column.d.ts +11 -0
  297. package/websql/lib/builder/column/query-column.d.ts +19 -0
  298. package/websql/lib/builder/column/string-column.d.ts +18 -0
  299. package/websql/lib/builder/column/value-column.d.ts +16 -0
  300. package/websql/lib/builder/condition/query-column-condition.d.ts +14 -0
  301. package/websql/lib/builder/condition/query-condition-chain.d.ts +18 -0
  302. package/websql/lib/builder/condition/query-condition.d.ts +8 -0
  303. package/websql/lib/builder/condition/query-join-condition.d.ts +13 -0
  304. package/websql/lib/builder/helpers/generics-helper.d.ts +3 -0
  305. package/websql/lib/builder/helpers/internal-types.d.ts +16 -0
  306. package/websql/lib/builder/join/joined-tables-chain.d.ts +12 -0
  307. package/websql/lib/builder/join/joined-tables.d.ts +13 -0
  308. package/websql/lib/builder/other/query-ordering.d.ts +11 -0
  309. package/websql/lib/builder/query/select-query.d.ts +30 -0
  310. package/websql/lib/builder/query/table-condition-query.d.ts +17 -0
  311. package/websql/lib/builder/query/table-query.d.ts +24 -0
  312. package/websql/lib/builder/query-source.d.ts +15 -0
  313. package/websql/lib/builder/query-table.d.ts +16 -0
  314. package/websql/lib/client/mysql.d.ts +6 -0
  315. package/websql/lib/client/query-processor.d.ts +11 -0
  316. package/websql/lib/converter/param-converter.d.ts +3 -0
  317. package/websql/lib/converter/parameterized-converter.d.ts +6 -0
  318. package/websql/lib/converter/query-converter.d.ts +3 -0
  319. package/websql/lib/converter/result-converter.d.ts +3 -0
  320. package/websql/lib/converter/sql-converter.d.ts +3 -0
  321. package/websql/lib/converter/type-converter.d.ts +5 -0
  322. package/websql/lib/converter/types.d.ts +6 -0
  323. package/websql/lib/index.d.ts +26 -0
  324. package/websql/package.json +25 -0
  325. package/websql/public-api.d.ts +2 -0
@@ -0,0 +1,54 @@
1
+ import TableConditionQuery from "./table-condition-query";
2
+ import ValueColumn from "../column/value-column";
3
+ export default class TableQuery {
4
+ constructor(_queryProcessor, _table) {
5
+ this._queryProcessor = _queryProcessor;
6
+ this._table = _table;
7
+ this._columns = [];
8
+ }
9
+ where(...conditions) {
10
+ return new TableConditionQuery(this._queryProcessor, this._table, conditions);
11
+ }
12
+ insert(param) {
13
+ this._entity = param;
14
+ this._action = 'insert';
15
+ return this._queryProcessor(this);
16
+ }
17
+ deleteAll() {
18
+ this._action = 'delete';
19
+ return this._queryProcessor(this);
20
+ }
21
+ updateAll(entity) {
22
+ this._entity = entity;
23
+ this._action = 'update';
24
+ return this._queryProcessor(this);
25
+ }
26
+ countAll() {
27
+ this._columns = [this._table.$all.count()];
28
+ this._action = 'select';
29
+ return this._queryProcessor(this).then((rows) => rows[0]);
30
+ }
31
+ delete(id) {
32
+ return this._whereId(id).delete().then(count => count > 0);
33
+ }
34
+ update(id, entity) {
35
+ return this._whereId(id).update(entity).then(count => count > 0);
36
+ }
37
+ get(id) {
38
+ let query = this._whereId(id);
39
+ return this._queryProcessor({ _action: 'select', ...query })
40
+ .then((rows) => rows[0]);
41
+ }
42
+ _whereId(id) {
43
+ let $id = this._table.$id;
44
+ if ($id instanceof ValueColumn) {
45
+ return this.where($id.eq(id));
46
+ }
47
+ else {
48
+ return this.where(...Object.keys($id).map(key => this._table[key].eq(id[key])));
49
+ }
50
+ }
51
+ }
52
+ ;
53
+ ({}); // @--end-of-file-for-module=taon-type-sql lib/builder/query/table-query.ts
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtcXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90bXAtbGlicy1mb3ItZGlzdC90YW9uLXR5cGUtc3FsL3Byb2plY3RzL3Rhb24tdHlwZS1zcWwvc3JjL2xpYi9idWlsZGVyL3F1ZXJ5L3RhYmxlLXF1ZXJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sbUJBQW1CLE1BQU0seUJBQXlCLENBQUM7QUFFMUQsT0FBTyxXQUFXLE1BQU0sd0JBQXdCLENBQUM7QUFLakQsTUFBTSxDQUFDLE9BQU8sT0FBTyxVQUFVO0lBRTNCLFlBQ2MsZUFBK0IsRUFDL0IsTUFBYTtRQURiLG9CQUFlLEdBQWYsZUFBZSxDQUFnQjtRQUMvQixXQUFNLEdBQU4sTUFBTSxDQUFPO1FBS2pCLGFBQVEsR0FBOEIsRUFBRSxDQUFDO0lBSmhELENBQUM7SUFNSixLQUFLLENBQUMsR0FBRyxVQUFtQztRQUN4QyxPQUFPLElBQUksbUJBQW1CLENBQWdCLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNqRyxDQUFDO0lBSUQsTUFBTSxDQUFDLEtBQVU7UUFDYixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNyQixJQUFJLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQztRQUN4QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELFNBQVM7UUFDTCxJQUFJLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQztRQUN4QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELFNBQVMsQ0FBQyxNQUF1QjtRQUM3QixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUN0QixJQUFJLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQztRQUN4QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQztRQUN4QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBVyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsTUFBTSxDQUFDLEVBQU07UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxNQUFNLENBQUMsRUFBTSxFQUFFLE1BQXVCO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFRCxHQUFHLENBQUMsRUFBTTtRQUNOLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFDO2FBQ3ZELElBQUksQ0FBQyxDQUFDLElBQWMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELFFBQVEsQ0FBQyxFQUFNO1FBRVgsSUFBSSxHQUFHLEdBQUksSUFBSSxDQUFDLE1BQWMsQ0FBQyxHQUFHLENBQUM7UUFDbkMsSUFBSSxHQUFHLFlBQVksV0FBVyxFQUFFLENBQUM7WUFDN0IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNsQyxDQUFDO2FBQU0sQ0FBQztZQUNKLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUcsSUFBSSxDQUFDLE1BQWMsQ0FBQyxHQUFHLENBQTZCLENBQUMsRUFBRSxDQUFFLEVBQVUsQ0FBQyxHQUFHLENBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxSSxDQUFDO0lBQ0wsQ0FBQztDQUNKO0FBRUEsQ0FBQztBQUFBLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQywyRUFBMkUiLCJzb3VyY2VzQ29udGVudCI6WyJcblxuaW1wb3J0IFF1ZXJ5VGFibGUgZnJvbSBcIi4uL3F1ZXJ5LXRhYmxlXCI7XG5pbXBvcnQgVGFibGVDb25kaXRpb25RdWVyeSBmcm9tIFwiLi90YWJsZS1jb25kaXRpb24tcXVlcnlcIjtcbmltcG9ydCBRdWVyeUNvbmRpdGlvbiBmcm9tIFwiLi4vY29uZGl0aW9uL3F1ZXJ5LWNvbmRpdGlvblwiO1xuaW1wb3J0IFZhbHVlQ29sdW1uIGZyb20gXCIuLi9jb2x1bW4vdmFsdWUtY29sdW1uXCI7XG5pbXBvcnQgUXVlcnlDb2x1bW4gZnJvbSBcIi4uL2NvbHVtbi9xdWVyeS1jb2x1bW5cIjtcbmltcG9ydCB7IFF1ZXJ5UHJvY2Vzc29yLCBRdWVyeUFjdGlvbiB9IGZyb20gXCIuLi9oZWxwZXJzL2ludGVybmFsLXR5cGVzXCI7XG5cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGFibGVRdWVyeTxFbnRpdHksIElkLCBUYWJsZSBleHRlbmRzIFF1ZXJ5VGFibGU8RW50aXR5LCBJZD4+IHtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgX3F1ZXJ5UHJvY2Vzc29yOiBRdWVyeVByb2Nlc3NvcixcbiAgICAgICAgcHJvdGVjdGVkIF90YWJsZTogVGFibGVcbiAgICApIHt9XG5cbiAgICBwcm90ZWN0ZWQgX2VudGl0eTogRW50aXR5IHwgRW50aXR5W10gfCBQYXJ0aWFsPEVudGl0eT47XG4gICAgcHJvdGVjdGVkIF9hY3Rpb246IFF1ZXJ5QWN0aW9uO1xuICAgIHByb3RlY3RlZCBfY29sdW1uczogUXVlcnlDb2x1bW48VGFibGUsIGFueT5bXSA9IFtdO1xuXG4gICAgd2hlcmUoLi4uY29uZGl0aW9uczogUXVlcnlDb25kaXRpb248VGFibGU+W10pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBUYWJsZUNvbmRpdGlvblF1ZXJ5PEVudGl0eSwgVGFibGU+KHRoaXMuX3F1ZXJ5UHJvY2Vzc29yLCB0aGlzLl90YWJsZSwgY29uZGl0aW9ucyk7XG4gICAgfVxuXG4gICAgaW5zZXJ0KGVudGl0eTogRW50aXR5KTogUHJvbWlzZTxhbnk+IC8vIHJldHVybnMgdGhlIGdlbmVyYXRlZCBJRCwgYnV0IG5vdCBvdGhlciBraW5kcyBvZiBJRHMsIHNvIHRoZSB0eXBlIGlzIHVua25vd24gKG15c3FsIGxpbWl0YXRpb25zKVxuICAgIGluc2VydChlbnRpdGllczogRW50aXR5W10pOiBQcm9taXNlPHZvaWQ+XG4gICAgaW5zZXJ0KHBhcmFtOiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICB0aGlzLl9lbnRpdHkgPSBwYXJhbTtcbiAgICAgICAgdGhpcy5fYWN0aW9uID0gJ2luc2VydCc7XG4gICAgICAgIHJldHVybiB0aGlzLl9xdWVyeVByb2Nlc3Nvcih0aGlzKTtcbiAgICB9XG5cbiAgICBkZWxldGVBbGwoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICAgICAgdGhpcy5fYWN0aW9uID0gJ2RlbGV0ZSc7XG4gICAgICAgIHJldHVybiB0aGlzLl9xdWVyeVByb2Nlc3Nvcih0aGlzKTtcbiAgICB9XG5cbiAgICB1cGRhdGVBbGwoZW50aXR5OiBQYXJ0aWFsPEVudGl0eT4pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgICAgICB0aGlzLl9lbnRpdHkgPSBlbnRpdHk7XG4gICAgICAgIHRoaXMuX2FjdGlvbiA9ICd1cGRhdGUnO1xuICAgICAgICByZXR1cm4gdGhpcy5fcXVlcnlQcm9jZXNzb3IodGhpcyk7XG4gICAgfVxuXG4gICAgY291bnRBbGwoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICAgICAgdGhpcy5fY29sdW1ucyA9IFt0aGlzLl90YWJsZS4kYWxsLmNvdW50KCldO1xuICAgICAgICB0aGlzLl9hY3Rpb24gPSAnc2VsZWN0JztcbiAgICAgICAgcmV0dXJuIHRoaXMuX3F1ZXJ5UHJvY2Vzc29yKHRoaXMpLnRoZW4oKHJvd3M6IGFueVtdKSA9PiByb3dzWzBdKTtcbiAgICB9XG5cbiAgICBkZWxldGUoaWQ6IElkKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl93aGVyZUlkKGlkKS5kZWxldGUoKS50aGVuKGNvdW50ID0+IGNvdW50ID4gMCk7XG4gICAgfVxuXG4gICAgdXBkYXRlKGlkOiBJZCwgZW50aXR5OiBQYXJ0aWFsPEVudGl0eT4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3doZXJlSWQoaWQpLnVwZGF0ZShlbnRpdHkpLnRoZW4oY291bnQgPT4gY291bnQgPiAwKTtcbiAgICB9XG5cbiAgICBnZXQoaWQ6IElkKTogUHJvbWlzZTxFbnRpdHkgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5fd2hlcmVJZChpZCk7XG4gICAgICAgIHJldHVybiB0aGlzLl9xdWVyeVByb2Nlc3Nvcih7IF9hY3Rpb246ICdzZWxlY3QnLCAuLi5xdWVyeSB9KVxuICAgICAgICAgICAgLnRoZW4oKHJvd3M6IEVudGl0eVtdKSA9PiByb3dzWzBdKTtcbiAgICB9XG5cbiAgICBfd2hlcmVJZChpZDogSWQpOiBUYWJsZUNvbmRpdGlvblF1ZXJ5PEVudGl0eSwgVGFibGU+IHtcblxuICAgICAgICBsZXQgJGlkID0gKHRoaXMuX3RhYmxlIGFzIGFueSkuJGlkO1xuICAgICAgICBpZiAoJGlkIGluc3RhbmNlb2YgVmFsdWVDb2x1bW4pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLndoZXJlKCRpZC5lcShpZCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMud2hlcmUoLi4uT2JqZWN0LmtleXMoJGlkKS5tYXAoa2V5ID0+ICgodGhpcy5fdGFibGUgYXMgYW55KVtrZXldIGFzIFZhbHVlQ29sdW1uPFRhYmxlLCBhbnk+KS5lcSgoaWQgYXMgYW55KVtrZXldIGFzIGFueSkpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuIDsoe30pOyAvLyBALS1lbmQtb2YtZmlsZS1mb3ItbW9kdWxlPXRhb24tdHlwZS1zcWwgbGliL2J1aWxkZXIvcXVlcnkvdGFibGUtcXVlcnkudHMiXX0=
@@ -0,0 +1,20 @@
1
+ import SelectQuery from './query/select-query';
2
+ import TableQuery from "./query/table-query";
3
+ export default class QuerySource {
4
+ constructor(_queryProcessor) {
5
+ this._queryProcessor = _queryProcessor;
6
+ }
7
+ from(table1, table2, table3) {
8
+ if (table3 != null)
9
+ return new SelectQuery(this._queryProcessor, [table1, table2, table3]);
10
+ else if (table2 != null)
11
+ return new SelectQuery(this._queryProcessor, [table1, table2]);
12
+ return new SelectQuery(this._queryProcessor, [table1]);
13
+ }
14
+ table(table) {
15
+ return new TableQuery(this._queryProcessor, table);
16
+ }
17
+ }
18
+ ;
19
+ ({}); // @--end-of-file-for-module=taon-type-sql lib/builder/query-source.ts
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktc291cmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdG1wLWxpYnMtZm9yLWRpc3QvdGFvbi10eXBlLXNxbC9wcm9qZWN0cy90YW9uLXR5cGUtc3FsL3NyYy9saWIvYnVpbGRlci9xdWVyeS1zb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxXQUFXLE1BQU0sc0JBQXNCLENBQUM7QUFHL0MsT0FBTyxVQUFVLE1BQU0scUJBQXFCLENBQUM7QUFHN0MsTUFBTSxDQUFDLE9BQU8sT0FBTyxXQUFXO0lBRTVCLFlBQXNCLGVBQStCO1FBQS9CLG9CQUFlLEdBQWYsZUFBZSxDQUFnQjtJQUFHLENBQUM7SUFNekQsSUFBSSxDQUF3SCxNQUFXLEVBQUUsTUFBWSxFQUFFLE1BQVk7UUFDL0osSUFBSSxNQUFNLElBQUksSUFBSTtZQUFFLE9BQU8sSUFBSSxXQUFXLENBQWdDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7YUFDckgsSUFBSSxNQUFNLElBQUksSUFBSTtZQUFFLE9BQU8sSUFBSSxXQUFXLENBQXVCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUM5RyxPQUFPLElBQUksV0FBVyxDQUFpQixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQsS0FBSyxDQUFtRCxLQUFxQztRQUN6RixPQUFPLElBQUksVUFBVSxDQUFvQixJQUFJLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzFFLENBQUM7Q0FDSjtBQUVBLENBQUM7QUFBQSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsc0VBQXNFIiwic291cmNlc0NvbnRlbnQiOlsiXG5cbmltcG9ydCBRdWVyeVRhYmxlIGZyb20gJy4vcXVlcnktdGFibGUnO1xuaW1wb3J0IFNlbGVjdFF1ZXJ5IGZyb20gJy4vcXVlcnkvc2VsZWN0LXF1ZXJ5JztcbmltcG9ydCB7IFF1ZXJ5UHJvY2Vzc29yIH0gZnJvbSBcIi4vaGVscGVycy9pbnRlcm5hbC10eXBlc1wiO1xuaW1wb3J0IEpvaW5lZFRhYmxlcyBmcm9tIFwiLi9qb2luL2pvaW5lZC10YWJsZXNcIjtcbmltcG9ydCBUYWJsZVF1ZXJ5IGZyb20gXCIuL3F1ZXJ5L3RhYmxlLXF1ZXJ5XCI7XG5cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUXVlcnlTb3VyY2Uge1xuXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIF9xdWVyeVByb2Nlc3NvcjogUXVlcnlQcm9jZXNzb3IpIHt9XG5cbiAgICBmcm9tPEVudGl0eSwgVGFibGUxIGV4dGVuZHMgUXVlcnlUYWJsZTxFbnRpdHksIGFueT4+KHRhYmxlMTogVGFibGUxICYgUXVlcnlUYWJsZTxFbnRpdHksIGFueT4pOiBTZWxlY3RRdWVyeTxFbnRpdHksIFRhYmxlMT5cbiAgICBmcm9tPFRhYmxlcyBleHRlbmRzIFF1ZXJ5VGFibGU8YW55LCBhbnk+Pih0YWJsZXM6IEpvaW5lZFRhYmxlczxUYWJsZXM+KTogU2VsZWN0UXVlcnk8YW55LCBUYWJsZXM+XG4gICAgZnJvbTxUYWJsZTEgZXh0ZW5kcyBRdWVyeVRhYmxlPGFueSwgYW55PiwgVGFibGUyIGV4dGVuZHMgUXVlcnlUYWJsZTxhbnksIGFueT4+KHRhYmxlMTogVGFibGUxLCB0YWJsZTI6IFRhYmxlMik6IFNlbGVjdFF1ZXJ5PGFueSwgVGFibGUxIHwgVGFibGUyPlxuICAgIGZyb208VGFibGUxIGV4dGVuZHMgUXVlcnlUYWJsZTxhbnksIGFueT4sIFRhYmxlMiBleHRlbmRzIFF1ZXJ5VGFibGU8YW55LCBhbnk+LCBUYWJsZTMgZXh0ZW5kcyBRdWVyeVRhYmxlPGFueSwgYW55Pj4odGFibGUxOiBUYWJsZTEsIHRhYmxlMjogVGFibGUyLCB0YWJsZTM6IFRhYmxlMyk6IFNlbGVjdFF1ZXJ5PGFueSwgVGFibGUxIHwgVGFibGUyIHwgVGFibGUzPlxuICAgIGZyb208RW50aXR5LCBUYWJsZTEgZXh0ZW5kcyBRdWVyeVRhYmxlPGFueSwgYW55PiwgVGFibGUyIGV4dGVuZHMgUXVlcnlUYWJsZTxhbnksIGFueT4sIFRhYmxlMyBleHRlbmRzIFF1ZXJ5VGFibGU8YW55LCBhbnk+Pih0YWJsZTE6IGFueSwgdGFibGUyPzogYW55LCB0YWJsZTM/OiBhbnkpIHtcbiAgICAgICAgaWYgKHRhYmxlMyAhPSBudWxsKSByZXR1cm4gbmV3IFNlbGVjdFF1ZXJ5PGFueSwgVGFibGUxIHwgVGFibGUyIHwgVGFibGUzPih0aGlzLl9xdWVyeVByb2Nlc3NvciwgW3RhYmxlMSwgdGFibGUyLCB0YWJsZTNdKTtcbiAgICAgICAgZWxzZSBpZiAodGFibGUyICE9IG51bGwpIHJldHVybiBuZXcgU2VsZWN0UXVlcnk8YW55LCBUYWJsZTEgfCBUYWJsZTI+KHRoaXMuX3F1ZXJ5UHJvY2Vzc29yLCBbdGFibGUxLCB0YWJsZTJdKTtcbiAgICAgICAgcmV0dXJuIG5ldyBTZWxlY3RRdWVyeTxFbnRpdHksIFRhYmxlMT4odGhpcy5fcXVlcnlQcm9jZXNzb3IsIFt0YWJsZTFdKTtcbiAgICB9XG5cbiAgICB0YWJsZTxFbnRpdHksIElkLCBUYWJsZSBleHRlbmRzIFF1ZXJ5VGFibGU8RW50aXR5LCBJZD4+KHRhYmxlOiBUYWJsZSAmIFF1ZXJ5VGFibGU8RW50aXR5LCBJZD4pOiBUYWJsZVF1ZXJ5PEVudGl0eSwgSWQsIFRhYmxlPiB7XG4gICAgICAgIHJldHVybiBuZXcgVGFibGVRdWVyeTxFbnRpdHksIElkLCBUYWJsZT4odGhpcy5fcXVlcnlQcm9jZXNzb3IsIHRhYmxlKTtcbiAgICB9XG59XG5cbiA7KHt9KTsgLy8gQC0tZW5kLW9mLWZpbGUtZm9yLW1vZHVsZT10YW9uLXR5cGUtc3FsIGxpYi9idWlsZGVyL3F1ZXJ5LXNvdXJjZS50cyJdfQ==
@@ -0,0 +1,24 @@
1
+ import BasicColumn from "./column/basic-column";
2
+ import JoinedTablesChain from "./join/joined-tables-chain";
3
+ class QueryTable {
4
+ constructor(_$name) {
5
+ this._$name = _$name;
6
+ this.$all = new BasicColumn(this, '*');
7
+ }
8
+ innerJoin(table) {
9
+ return new JoinedTablesChain(table, 'inner', this);
10
+ }
11
+ leftJoin(table) {
12
+ return new JoinedTablesChain(table, 'left', this);
13
+ }
14
+ rightJoin(table) {
15
+ return new JoinedTablesChain(table, 'right', this);
16
+ }
17
+ fullJoin(table) {
18
+ return new JoinedTablesChain(table, 'full', this);
19
+ }
20
+ }
21
+ export default QueryTable;
22
+ ;
23
+ ({}); // @--end-of-file-for-module=taon-type-sql lib/builder/query-table.ts
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktdGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90bXAtbGlicy1mb3ItZGlzdC90YW9uLXR5cGUtc3FsL3Byb2plY3RzL3Rhb24tdHlwZS1zcWwvc3JjL2xpYi9idWlsZGVyL3F1ZXJ5LXRhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sV0FBVyxNQUFNLHVCQUF1QixDQUFDO0FBRWhELE9BQU8saUJBQWlCLE1BQU0sNEJBQTRCLENBQUM7QUFHM0QsTUFBZSxVQUFVO0lBRXJCLFlBQXNCLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBT3BDLFNBQUksR0FBRyxJQUFJLFdBQVcsQ0FBZSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFQVCxDQUFDO0lBU3hDLFNBQVMsQ0FBeUMsS0FBZ0I7UUFDOUQsT0FBTyxJQUFJLGlCQUFpQixDQUFtQixLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCxRQUFRLENBQXlDLEtBQWdCO1FBQzdELE9BQU8sSUFBSSxpQkFBaUIsQ0FBbUIsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQsU0FBUyxDQUF5QyxLQUFnQjtRQUM5RCxPQUFPLElBQUksaUJBQWlCLENBQW1CLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVELFFBQVEsQ0FBeUMsS0FBZ0I7UUFDN0QsT0FBTyxJQUFJLGlCQUFpQixDQUFtQixLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3hFLENBQUM7Q0FDSjtBQUVELGVBQWUsVUFBVSxDQUFDO0FBRXpCLENBQUM7QUFBQSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMscUVBQXFFIiwic291cmNlc0NvbnRlbnQiOlsiXG5cbmltcG9ydCBCYXNpY0NvbHVtbiBmcm9tIFwiLi9jb2x1bW4vYmFzaWMtY29sdW1uXCI7XG5pbXBvcnQgR2VuZXJpY3NIZWxwZXIgZnJvbSBcIi4vaGVscGVycy9nZW5lcmljcy1oZWxwZXJcIjtcbmltcG9ydCBKb2luZWRUYWJsZXNDaGFpbiBmcm9tIFwiLi9qb2luL2pvaW5lZC10YWJsZXMtY2hhaW5cIjtcblxuXG5hYnN0cmFjdCBjbGFzcyBRdWVyeVRhYmxlPEVudGl0eSwgSWQ+IHtcblxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBfJG5hbWU6IHN0cmluZykge31cblxuICAgIHByb3RlY3RlZCBfJHR5cGU6IEdlbmVyaWNzSGVscGVyPEVudGl0eT47XG4gICAgcHJvdGVjdGVkIF8kaWRUeXBlOiBHZW5lcmljc0hlbHBlcjxJZD47XG5cblxuXG4gICAgJGFsbCA9IG5ldyBCYXNpY0NvbHVtbjx0aGlzLCBFbnRpdHk+KHRoaXMsICcqJyk7XG5cbiAgICBpbm5lckpvaW48Sm9pblRhYmxlIGV4dGVuZHMgUXVlcnlUYWJsZTxhbnksIGFueT4+KHRhYmxlOiBKb2luVGFibGUpOiBKb2luZWRUYWJsZXNDaGFpbjx0aGlzIHwgSm9pblRhYmxlPiB7XG4gICAgICAgIHJldHVybiBuZXcgSm9pbmVkVGFibGVzQ2hhaW48dGhpcyB8IEpvaW5UYWJsZT4odGFibGUsICdpbm5lcicsIHRoaXMpO1xuICAgIH1cblxuICAgIGxlZnRKb2luPEpvaW5UYWJsZSBleHRlbmRzIFF1ZXJ5VGFibGU8YW55LCBhbnk+Pih0YWJsZTogSm9pblRhYmxlKTogSm9pbmVkVGFibGVzQ2hhaW48dGhpcyB8IEpvaW5UYWJsZT4ge1xuICAgICAgICByZXR1cm4gbmV3IEpvaW5lZFRhYmxlc0NoYWluPHRoaXMgfCBKb2luVGFibGU+KHRhYmxlLCAnbGVmdCcsIHRoaXMpO1xuICAgIH1cblxuICAgIHJpZ2h0Sm9pbjxKb2luVGFibGUgZXh0ZW5kcyBRdWVyeVRhYmxlPGFueSwgYW55Pj4odGFibGU6IEpvaW5UYWJsZSk6IEpvaW5lZFRhYmxlc0NoYWluPHRoaXMgfCBKb2luVGFibGU+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBKb2luZWRUYWJsZXNDaGFpbjx0aGlzIHwgSm9pblRhYmxlPih0YWJsZSwgJ3JpZ2h0JywgdGhpcyk7XG4gICAgfVxuXG4gICAgZnVsbEpvaW48Sm9pblRhYmxlIGV4dGVuZHMgUXVlcnlUYWJsZTxhbnksIGFueT4+KHRhYmxlOiBKb2luVGFibGUpOiBKb2luZWRUYWJsZXNDaGFpbjx0aGlzIHwgSm9pblRhYmxlPiB7XG4gICAgICAgIHJldHVybiBuZXcgSm9pbmVkVGFibGVzQ2hhaW48dGhpcyB8IEpvaW5UYWJsZT4odGFibGUsICdmdWxsJywgdGhpcyk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBRdWVyeVRhYmxlO1xuXG4gOyh7fSk7IC8vIEAtLWVuZC1vZi1maWxlLWZvci1tb2R1bGU9dGFvbi10eXBlLXNxbCBsaWIvYnVpbGRlci9xdWVyeS10YWJsZS50cyJdfQ==
@@ -0,0 +1,10 @@
1
+ import QuerySource from "../builder/query-source";
2
+ import { createQueryProcessor } from "./query-processor";
3
+ export default class MySqlQuerySource extends QuerySource {
4
+ constructor(client, options = {}) {
5
+ super(createQueryProcessor(client, options, 'mysql'));
6
+ }
7
+ }
8
+ ;
9
+ ({}); // @--end-of-file-for-module=taon-type-sql lib/client/mysql.ts
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXlzcWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90bXAtbGlicy1mb3ItZGlzdC90YW9uLXR5cGUtc3FsL3Byb2plY3RzL3Rhb24tdHlwZS1zcWwvc3JjL2xpYi9jbGllbnQvbXlzcWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxXQUFXLE1BQU0seUJBQXlCLENBQUM7QUFDbEQsT0FBTyxFQUF3QixvQkFBb0IsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBRTlFLE1BQU0sQ0FBQyxPQUFPLE9BQU8sZ0JBQWlCLFNBQVEsV0FBVztJQUVyRCxZQUFZLE1BQVcsRUFBRSxVQUFpQyxFQUFFO1FBQ3hELEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDMUQsQ0FBQztDQUNKO0FBRUEsQ0FBQztBQUFBLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyw4REFBOEQiLCJzb3VyY2VzQ29udGVudCI6WyJcblxuaW1wb3J0IFF1ZXJ5U291cmNlIGZyb20gXCIuLi9idWlsZGVyL3F1ZXJ5LXNvdXJjZVwiO1xuaW1wb3J0IHtRdWVyeVByb2Nlc3Nvck9wdGlvbnMsIGNyZWF0ZVF1ZXJ5UHJvY2Vzc29yfSBmcm9tIFwiLi9xdWVyeS1wcm9jZXNzb3JcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTXlTcWxRdWVyeVNvdXJjZSBleHRlbmRzIFF1ZXJ5U291cmNlIHtcblxuICAgIGNvbnN0cnVjdG9yKGNsaWVudDogYW55LCBvcHRpb25zOiBRdWVyeVByb2Nlc3Nvck9wdGlvbnMgPSB7fSkge1xuICAgICAgICBzdXBlcihjcmVhdGVRdWVyeVByb2Nlc3NvcihjbGllbnQsIG9wdGlvbnMsICdteXNxbCcpKTtcbiAgICB9XG59XG5cbiA7KHt9KTsgLy8gQC0tZW5kLW9mLWZpbGUtZm9yLW1vZHVsZT10YW9uLXR5cGUtc3FsIGxpYi9jbGllbnQvbXlzcWwudHMiXX0=
@@ -0,0 +1,45 @@
1
+ import { Log } from 'ng2-logger/browser';
2
+ import { convertQueryToParameterizedSQL } from '../converter/parameterized-converter';
3
+ import { convertQueryToSQL } from '../converter/sql-converter';
4
+ const log = Log.create('query processor');
5
+ const DEFAULT_OPTIONS = {
6
+ lineBreaks: false,
7
+ parameterized: true,
8
+ logging: true,
9
+ identifierQuote: '"'
10
+ };
11
+ function mySqlTypeCast(field, next) {
12
+ if (field.type == 'TINY' && field.length == 1) { // Boolean
13
+ let value = field.string();
14
+ if (value == '1')
15
+ return true;
16
+ if (value == '0')
17
+ return false;
18
+ return null;
19
+ }
20
+ else if (field.type == 'JSON') {
21
+ let value = field.string();
22
+ return value == null ? null : JSON.parse(value);
23
+ }
24
+ return next();
25
+ }
26
+ export function createQueryProcessor(client, _options = {}, engine = 'pg') {
27
+ let options = Object.assign({}, DEFAULT_OPTIONS, _options);
28
+ let queryOptions = {
29
+ lineBreak: options.lineBreaks ? '\n' : ' ',
30
+ nameEscape: _options.identifierQuote || (engine === 'mysql' ? '`' : '"')
31
+ };
32
+ return (query) => {
33
+ if (options.parameterized) {
34
+ let { sql, params } = convertQueryToParameterizedSQL(query, queryOptions, engine);
35
+ return client.query(sql, params);
36
+ }
37
+ else {
38
+ let sql = convertQueryToSQL(query, queryOptions, engine);
39
+ return client.query(sql, undefined);
40
+ }
41
+ };
42
+ }
43
+ ;
44
+ ({}); // @--end-of-file-for-module=taon-type-sql lib/client/query-processor.ts
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktcHJvY2Vzc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdG1wLWxpYnMtZm9yLWRpc3QvdGFvbi10eXBlLXNxbC9wcm9qZWN0cy90YW9uLXR5cGUtc3FsL3NyYy9saWIvY2xpZW50L3F1ZXJ5LXByb2Nlc3Nvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsR0FBRyxFQUFTLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFNL0QsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FFdkMsQ0FBQTtBQVVELE1BQU0sZUFBZSxHQUEwQjtJQUM3QyxVQUFVLEVBQUUsS0FBSztJQUNqQixhQUFhLEVBQUUsSUFBSTtJQUNuQixPQUFPLEVBQUUsSUFBSTtJQUNiLGVBQWUsRUFBRSxHQUFHO0NBQ3JCLENBQUM7QUFFRixTQUFTLGFBQWEsQ0FBQyxLQUFVLEVBQUUsSUFBUztJQUMxQyxJQUFJLEtBQUssQ0FBQyxJQUFJLElBQUksTUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVO1FBQ3pELElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMzQixJQUFJLEtBQUssSUFBSSxHQUFHO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDOUIsSUFBSSxLQUFLLElBQUksR0FBRztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQy9CLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztTQUFNLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUNoQyxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDM0IsT0FBTyxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUNELE9BQU8sSUFBSSxFQUFFLENBQUM7QUFDaEIsQ0FBQztBQUVELE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxNQUFXLEVBQUUsV0FBa0MsRUFBRSxFQUFFLFNBQXNCLElBQUk7SUFFaEgsSUFBSSxPQUFPLEdBQTBCLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLGVBQWUsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUVsRixJQUFJLFlBQVksR0FBcUI7UUFDbkMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRztRQUMxQyxVQUFVLEVBQUUsUUFBUSxDQUFDLGVBQWUsSUFBSSxDQUFDLE1BQU0sS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0tBQ3pFLENBQUM7SUEwQkYsT0FBTyxDQUFDLEtBQVUsRUFBRSxFQUFFO1FBQ3BCLElBQUksT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzFCLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsOEJBQThCLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztZQUVsRixPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBR25DLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxHQUFHLEdBQUcsaUJBQWlCLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztZQUV6RCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBR3RDLENBQUM7SUFDSCxDQUFDLENBQUM7QUFDSixDQUFDO0FBR0EsQ0FBQztBQUFBLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyx3RUFBd0UiLCJzb3VyY2VzQ29udGVudCI6WyJcblxuaW1wb3J0IHsgTG9nLCBMZXZlbCB9IGZyb20gJ25nMi1sb2dnZXIvYnJvd3Nlcic7XG5pbXBvcnQgeyBjb252ZXJ0UXVlcnlUb1BhcmFtZXRlcml6ZWRTUUwgfSBmcm9tICcuLi9jb252ZXJ0ZXIvcGFyYW1ldGVyaXplZC1jb252ZXJ0ZXInO1xuaW1wb3J0IHsgY29udmVydFF1ZXJ5VG9TUUwgfSBmcm9tICcuLi9jb252ZXJ0ZXIvc3FsLWNvbnZlcnRlcic7XG5pbXBvcnQgeyBjb252ZXJ0UmVzdWx0IH0gZnJvbSBcIi4uL2NvbnZlcnRlci9yZXN1bHQtY29udmVydGVyXCI7XG5pbXBvcnQgeyBRdWVyeUVuZ2luZSwgQ29udmVydGVyT3B0aW9ucyB9IGZyb20gJy4uL2NvbnZlcnRlci90eXBlcyc7XG5pbXBvcnQgeyBRdWVyeVByb2Nlc3NvciB9IGZyb20gJy4uL2J1aWxkZXIvaGVscGVycy9pbnRlcm5hbC10eXBlcyc7XG5pbXBvcnQgeyBIZWxwZXJzIH0gZnJvbSAndG5wLWNvcmUvYnJvd3Nlcic7XG5cbmNvbnN0IGxvZyA9IExvZy5jcmVhdGUoJ3F1ZXJ5IHByb2Nlc3NvcicsXG5cbilcblxuZXhwb3J0IGludGVyZmFjZSBRdWVyeVByb2Nlc3Nvck9wdGlvbnMge1xuICBsaW5lQnJlYWtzPzogYm9vbGVhbixcbiAgcGFyYW1ldGVyaXplZD86IGJvb2xlYW4sXG4gIGxvZ2dpbmc/OiBib29sZWFuLFxuICBsb2dnZXI/OiAoc3FsOiBzdHJpbmcsIHBhcmFtcz86IGFueVtdKSA9PiB2b2lkLFxuICBpZGVudGlmaWVyUXVvdGU/OiBzdHJpbmdcbn1cblxuY29uc3QgREVGQVVMVF9PUFRJT05TOiBRdWVyeVByb2Nlc3Nvck9wdGlvbnMgPSB7XG4gIGxpbmVCcmVha3M6IGZhbHNlLFxuICBwYXJhbWV0ZXJpemVkOiB0cnVlLFxuICBsb2dnaW5nOiB0cnVlLFxuICBpZGVudGlmaWVyUXVvdGU6ICdcIidcbn07XG5cbmZ1bmN0aW9uIG15U3FsVHlwZUNhc3QoZmllbGQ6IGFueSwgbmV4dDogYW55KSB7XG4gIGlmIChmaWVsZC50eXBlID09ICdUSU5ZJyAmJiBmaWVsZC5sZW5ndGggPT0gMSkgeyAvLyBCb29sZWFuXG4gICAgbGV0IHZhbHVlID0gZmllbGQuc3RyaW5nKCk7XG4gICAgaWYgKHZhbHVlID09ICcxJykgcmV0dXJuIHRydWU7XG4gICAgaWYgKHZhbHVlID09ICcwJykgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBudWxsO1xuICB9IGVsc2UgaWYgKGZpZWxkLnR5cGUgPT0gJ0pTT04nKSB7XG4gICAgbGV0IHZhbHVlID0gZmllbGQuc3RyaW5nKCk7XG4gICAgcmV0dXJuIHZhbHVlID09IG51bGwgPyBudWxsIDogSlNPTi5wYXJzZSh2YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIG5leHQoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVF1ZXJ5UHJvY2Vzc29yKGNsaWVudDogYW55LCBfb3B0aW9uczogUXVlcnlQcm9jZXNzb3JPcHRpb25zID0ge30sIGVuZ2luZTogUXVlcnlFbmdpbmUgPSAncGcnKTogUXVlcnlQcm9jZXNzb3Ige1xuXG4gIGxldCBvcHRpb25zOiBRdWVyeVByb2Nlc3Nvck9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBERUZBVUxUX09QVElPTlMsIF9vcHRpb25zKTtcblxuICBsZXQgcXVlcnlPcHRpb25zOiBDb252ZXJ0ZXJPcHRpb25zID0ge1xuICAgIGxpbmVCcmVhazogb3B0aW9ucy5saW5lQnJlYWtzID8gJ1xcbicgOiAnICcsXG4gICAgbmFtZUVzY2FwZTogX29wdGlvbnMuaWRlbnRpZmllclF1b3RlIHx8IChlbmdpbmUgPT09ICdteXNxbCcgPyAnYCcgOiAnXCInKVxuICB9O1xuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gIHJldHVybiAocXVlcnk6IGFueSkgPT4ge1xuICAgIGlmIChvcHRpb25zLnBhcmFtZXRlcml6ZWQpIHtcbiAgICAgIGxldCB7IHNxbCwgcGFyYW1zIH0gPSBjb252ZXJ0UXVlcnlUb1BhcmFtZXRlcml6ZWRTUUwocXVlcnksIHF1ZXJ5T3B0aW9ucywgZW5naW5lKTtcblxuICAgICAgcmV0dXJuIGNsaWVudC5xdWVyeShzcWwsIHBhcmFtcyk7XG5cblxuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgc3FsID0gY29udmVydFF1ZXJ5VG9TUUwocXVlcnksIHF1ZXJ5T3B0aW9ucywgZW5naW5lKTtcblxuICAgICAgcmV0dXJuIGNsaWVudC5xdWVyeShzcWwsIHVuZGVmaW5lZCk7XG5cblxuICAgIH1cbiAgfTtcbn1cblxuXG4gOyh7fSk7IC8vIEAtLWVuZC1vZi1maWxlLWZvci1tb2R1bGU9dGFvbi10eXBlLXNxbCBsaWIvY2xpZW50L3F1ZXJ5LXByb2Nlc3Nvci50cyJdfQ==
@@ -0,0 +1,27 @@
1
+ export function convertSubstitutionParam(param) {
2
+ if (param == null)
3
+ return 'NULL';
4
+ if (typeof param === 'string' || param instanceof String) {
5
+ return `'${String(param)}'`;
6
+ }
7
+ else if (typeof param === 'boolean' || param instanceof Boolean) {
8
+ return String(param).toUpperCase();
9
+ }
10
+ else if (param instanceof Date) {
11
+ return `'${param.toISOString()}'`;
12
+ }
13
+ else if (typeof param === 'number' || param instanceof Number) {
14
+ return String(param);
15
+ }
16
+ return `'${JSON.stringify(param)}'`;
17
+ }
18
+ export function convertEscapedParam(param) {
19
+ if (typeof param === 'object' && !(param == null || param instanceof String || param instanceof Number ||
20
+ param instanceof Boolean || param instanceof Date)) {
21
+ return JSON.stringify(param);
22
+ }
23
+ return param;
24
+ }
25
+ ;
26
+ ({}); // @--end-of-file-for-module=taon-type-sql lib/converter/param-converter.ts
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW0tY29udmVydGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdG1wLWxpYnMtZm9yLWRpc3QvdGFvbi10eXBlLXNxbC9wcm9qZWN0cy90YW9uLXR5cGUtc3FsL3NyYy9saWIvY29udmVydGVyL3BhcmFtLWNvbnZlcnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxNQUFNLFVBQVUsd0JBQXdCLENBQUMsS0FBVTtJQUMvQyxJQUFJLEtBQUssSUFBSSxJQUFJO1FBQUUsT0FBTyxNQUFNLENBQUM7SUFDakMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxZQUFZLE1BQU0sRUFBRSxDQUFDO1FBQ3ZELE9BQU8sSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztJQUNoQyxDQUFDO1NBQU0sSUFBSSxPQUFPLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxZQUFZLE9BQU8sRUFBRSxDQUFDO1FBQ2hFLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7U0FBTSxJQUFJLEtBQUssWUFBWSxJQUFJLEVBQUUsQ0FBQztRQUMvQixPQUFPLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUM7SUFDdEMsQ0FBQztTQUFNLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssWUFBWSxNQUFNLEVBQUUsQ0FBQztRQUM5RCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBQ0QsT0FBTyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztBQUN4QyxDQUFDO0FBSUQsTUFBTSxVQUFVLG1CQUFtQixDQUFDLEtBQVU7SUFDMUMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxZQUFZLE1BQU0sSUFBSSxLQUFLLFlBQVksTUFBTTtRQUNsRyxLQUFLLFlBQVksT0FBTyxJQUFJLEtBQUssWUFBWSxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3JELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQztBQUVBLENBQUM7QUFBQSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsMkVBQTJFIiwic291cmNlc0NvbnRlbnQiOlsiXG5cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRTdWJzdGl0dXRpb25QYXJhbShwYXJhbTogYW55KTogc3RyaW5nIHtcbiAgICBpZiAocGFyYW0gPT0gbnVsbCkgcmV0dXJuICdOVUxMJztcbiAgICBpZiAodHlwZW9mIHBhcmFtID09PSAnc3RyaW5nJyB8fCBwYXJhbSBpbnN0YW5jZW9mIFN0cmluZykge1xuICAgICAgICByZXR1cm4gYCcke1N0cmluZyhwYXJhbSl9J2A7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcGFyYW0gPT09ICdib29sZWFuJyB8fCBwYXJhbSBpbnN0YW5jZW9mIEJvb2xlYW4pIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZyhwYXJhbSkudG9VcHBlckNhc2UoKTtcbiAgICB9IGVsc2UgaWYgKHBhcmFtIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICByZXR1cm4gYCcke3BhcmFtLnRvSVNPU3RyaW5nKCl9J2A7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcGFyYW0gPT09ICdudW1iZXInIHx8IHBhcmFtIGluc3RhbmNlb2YgTnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcocGFyYW0pO1xuICAgIH1cbiAgICByZXR1cm4gYCcke0pTT04uc3RyaW5naWZ5KHBhcmFtKX0nYDtcbn1cblxuXG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0RXNjYXBlZFBhcmFtKHBhcmFtOiBhbnkpIHtcbiAgICBpZiAodHlwZW9mIHBhcmFtID09PSAnb2JqZWN0JyAmJiAhKHBhcmFtID09IG51bGwgfHwgcGFyYW0gaW5zdGFuY2VvZiBTdHJpbmcgfHwgcGFyYW0gaW5zdGFuY2VvZiBOdW1iZXIgfHxcbiAgICAgICAgcGFyYW0gaW5zdGFuY2VvZiBCb29sZWFuIHx8IHBhcmFtIGluc3RhbmNlb2YgRGF0ZSkpIHtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHBhcmFtKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcmFtO1xufVxuXG4gOyh7fSk7IC8vIEAtLWVuZC1vZi1maWxlLWZvci1tb2R1bGU9dGFvbi10eXBlLXNxbCBsaWIvY29udmVydGVyL3BhcmFtLWNvbnZlcnRlci50cyJdfQ==
@@ -0,0 +1,17 @@
1
+ import { createQueryConverter } from "./query-converter";
2
+ import { convertEscapedParam } from './param-converter';
3
+ let pgParamConverter = (index) => '$' + index;
4
+ let mySqlParamConverter = (index) => '?';
5
+ function convertSingleParam(param, params, paramConverter) {
6
+ params.push(convertEscapedParam(param));
7
+ return paramConverter(params.length);
8
+ }
9
+ export function convertQueryToParameterizedSQL(query, options, engine) {
10
+ let params = [];
11
+ let paramConverter = engine === 'mysql' ? mySqlParamConverter : pgParamConverter;
12
+ let sql = createQueryConverter((param) => convertSingleParam(param, params, paramConverter), options, engine)(query);
13
+ return { sql, params };
14
+ }
15
+ ;
16
+ ({}); // @--end-of-file-for-module=taon-type-sql lib/converter/parameterized-converter.ts
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1ldGVyaXplZC1jb252ZXJ0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90bXAtbGlicy1mb3ItZGlzdC90YW9uLXR5cGUtc3FsL3Byb2plY3RzL3Rhb24tdHlwZS1zcWwvc3JjL2xpYi9jb252ZXJ0ZXIvcGFyYW1ldGVyaXplZC1jb252ZXJ0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDdkQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFHdEQsSUFBSSxnQkFBZ0IsR0FBRyxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQztBQUN0RCxJQUFJLG1CQUFtQixHQUFHLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUM7QUFFakQsU0FBUyxrQkFBa0IsQ0FBQyxLQUFVLEVBQUUsTUFBYSxFQUFFLGNBQXNDO0lBQ3pGLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN4QyxPQUFPLGNBQWMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDekMsQ0FBQztBQUVELE1BQU0sVUFBVSw4QkFBOEIsQ0FBQyxLQUFVLEVBQUUsT0FBeUIsRUFBRSxNQUFtQjtJQUNyRyxJQUFJLE1BQU0sR0FBVSxFQUFFLENBQUM7SUFFdkIsSUFBSSxjQUFjLEdBQUcsTUFBTSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDO0lBQ2pGLElBQUksR0FBRyxHQUFHLG9CQUFvQixDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLGNBQWMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUUxSCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQzNCLENBQUM7QUFFQSxDQUFDO0FBQUEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLG1GQUFtRiIsInNvdXJjZXNDb250ZW50IjpbIlxuXG5pbXBvcnQge2NyZWF0ZVF1ZXJ5Q29udmVydGVyfSBmcm9tIFwiLi9xdWVyeS1jb252ZXJ0ZXJcIjtcbmltcG9ydCB7Y29udmVydEVzY2FwZWRQYXJhbX0gZnJvbSAnLi9wYXJhbS1jb252ZXJ0ZXInO1xuaW1wb3J0IHtRdWVyeUVuZ2luZSwgQ29udmVydGVyT3B0aW9uc30gZnJvbSBcIi4vdHlwZXNcIjtcblxubGV0IHBnUGFyYW1Db252ZXJ0ZXIgPSAoaW5kZXg6IG51bWJlcikgPT4gJyQnICsgaW5kZXg7XG5sZXQgbXlTcWxQYXJhbUNvbnZlcnRlciA9IChpbmRleDogbnVtYmVyKSA9PiAnPyc7XG5cbmZ1bmN0aW9uIGNvbnZlcnRTaW5nbGVQYXJhbShwYXJhbTogYW55LCBwYXJhbXM6IGFueVtdLCBwYXJhbUNvbnZlcnRlcjogKHBhcmFtOiBhbnkpID0+IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcGFyYW1zLnB1c2goY29udmVydEVzY2FwZWRQYXJhbShwYXJhbSkpO1xuICAgIHJldHVybiBwYXJhbUNvbnZlcnRlcihwYXJhbXMubGVuZ3RoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRRdWVyeVRvUGFyYW1ldGVyaXplZFNRTChxdWVyeTogYW55LCBvcHRpb25zOiBDb252ZXJ0ZXJPcHRpb25zLCBlbmdpbmU6IFF1ZXJ5RW5naW5lKSB7XG4gICAgbGV0IHBhcmFtczogYW55W10gPSBbXTtcblxuICAgIGxldCBwYXJhbUNvbnZlcnRlciA9IGVuZ2luZSA9PT0gJ215c3FsJyA/IG15U3FsUGFyYW1Db252ZXJ0ZXIgOiBwZ1BhcmFtQ29udmVydGVyO1xuICAgIGxldCBzcWwgPSBjcmVhdGVRdWVyeUNvbnZlcnRlcigocGFyYW06IGFueSkgPT4gY29udmVydFNpbmdsZVBhcmFtKHBhcmFtLCBwYXJhbXMsIHBhcmFtQ29udmVydGVyKSwgb3B0aW9ucywgZW5naW5lKShxdWVyeSk7XG5cbiAgICByZXR1cm4geyBzcWwsIHBhcmFtcyB9O1xufVxuXG4gOyh7fSk7IC8vIEAtLWVuZC1vZi1maWxlLWZvci1tb2R1bGU9dGFvbi10eXBlLXNxbCBsaWIvY29udmVydGVyL3BhcmFtZXRlcml6ZWQtY29udmVydGVyLnRzIl19
@@ -0,0 +1,282 @@
1
+ import { string, number, date, boolean } from './type-converter';
2
+ export function createQueryConverter(paramConverter, options, engine) {
3
+ return convertQuery;
4
+ function convertQuery(query) {
5
+ if (query._action === 'select')
6
+ return convertSelectQuery(query);
7
+ if (query._action === 'delete')
8
+ return convertDeleteQuery(query);
9
+ if (query._action === 'update')
10
+ return convertUpdateQuery(query);
11
+ if (query._action === 'insert')
12
+ return convertInsertQuery(query);
13
+ throw new Error('Unknown query type:' + query._action);
14
+ }
15
+ function convertDeleteQuery(query) {
16
+ let s = 'DELETE FROM ' + convertTable(query._table);
17
+ s += convertConditions(query._conditions);
18
+ return s;
19
+ }
20
+ function convertUpdateQuery(query) {
21
+ let s = 'UPDATE ' + convertTable(query._table) + ' SET ';
22
+ s += convertUpdateSetters(query._table, query._entity);
23
+ s += convertConditions(query._conditions);
24
+ return s;
25
+ }
26
+ function convertUpdateSetters(table, entity) {
27
+ return Object.keys(entity).sort().map(key => {
28
+ let value = entity[key];
29
+ let column = table[key];
30
+ return convertColumnName(column) + ' = ' + convertParam(column, value);
31
+ }).join(', ');
32
+ }
33
+ function convertInsertQuery(query) {
34
+ let items = Array.isArray(query._entity) ? query._entity : [query._entity];
35
+ let keySet = items.reduce((set, item) => {
36
+ Object.keys(item).forEach(key => set.add(key));
37
+ return set;
38
+ }, new Set());
39
+ let keys = Array.from(keySet).sort();
40
+ let s = 'INSERT INTO ' + convertTable(query._table) + ' ';
41
+ s += '(' + keys.map(key => convertColumnName(query._table[key])).join(', ') + ')';
42
+ s += options.lineBreak + 'VALUES ';
43
+ s += items.map(item => convertInsertItem(query._table, item, keys))
44
+ .map((row) => '(' + row + ')').join(', ');
45
+ s += getPgInsertReturningIfNeeded(query);
46
+ return s;
47
+ }
48
+ function getPgInsertReturningIfNeeded(query) {
49
+ if (engine === 'pg' && query._action === 'insert' && !Array.isArray(query._entity) &&
50
+ query._table.$id && query._table.$id._table && query._table.$id._name) {
51
+ return ' RETURNING ' + convertColumnName(query._table.$id);
52
+ }
53
+ return '';
54
+ }
55
+ function convertInsertItem(table, entity, keys) {
56
+ return keys.map(key => {
57
+ let value = entity[key];
58
+ let column = table[key];
59
+ return convertParam(column, value);
60
+ }).join(', ');
61
+ }
62
+ function convertSelectQuery(query) {
63
+ let s = 'SELECT ';
64
+ if (query._distinct) {
65
+ s += 'DISTINCT ';
66
+ }
67
+ if (query._columns == null || query._columns.length === 0) {
68
+ s += '*';
69
+ }
70
+ else {
71
+ s += query._columns.map((column) => convertColumn(column)).join(', ');
72
+ }
73
+ s += options.lineBreak + 'FROM ';
74
+ if (query._tables) {
75
+ s += query._tables.map((table) => table._parent ? convertJoin(table) : convertTable(table)).join(', ');
76
+ }
77
+ else {
78
+ s += convertTable(query._table);
79
+ }
80
+ s += convertConditions(query._conditions);
81
+ if (query._groupBy && query._groupBy.length > 0) {
82
+ s += options.lineBreak + 'GROUP BY ';
83
+ s += query._groupBy.map((column) => convertColumn(column)).join(', ');
84
+ }
85
+ s += convertConditions(query._having, 'HAVING');
86
+ if (query._orderings && query._orderings.length > 0) {
87
+ s += options.lineBreak + 'ORDER BY ';
88
+ s += query._orderings.map((ordering) => convertOrdering(ordering)).join(', ');
89
+ }
90
+ if (query._limit != null) {
91
+ s += options.lineBreak + 'LIMIT ' + number(query._limit);
92
+ }
93
+ if (query._offset != null) {
94
+ s += options.lineBreak + 'OFFSET ' + number(query._offset);
95
+ }
96
+ return s;
97
+ }
98
+ function convertConditions(conditions, keyword = 'WHERE') {
99
+ let s = '';
100
+ if (conditions && conditions.length > 0) {
101
+ s += options.lineBreak + keyword + ' ';
102
+ preprocessConditions(conditions);
103
+ s += conditions.map(condition => convertCondition(condition, true)).join(' AND ');
104
+ }
105
+ return s;
106
+ }
107
+ function convertJoin(joinChain) {
108
+ let items = [];
109
+ while (joinChain) {
110
+ items.push(joinChain);
111
+ joinChain = joinChain._parent;
112
+ }
113
+ let root = items[items.length - 1];
114
+ let s = convertTable(root);
115
+ for (let i = items.length - 2; i >= 0; i -= 2) {
116
+ let table = items[i]._table;
117
+ let modifier = items[i]._modifier;
118
+ let condition = items[i - 1]._condition;
119
+ let param = convertColumn(condition._otherColumn);
120
+ s += ' ' + modifier.toUpperCase() + ' JOIN ' + convertTable(table) + ' ON ' +
121
+ convertColumnCondition(condition, param);
122
+ }
123
+ return s;
124
+ }
125
+ function convertOrdering(ordering) {
126
+ if (ordering._column) {
127
+ let s = convertColumn(ordering._column);
128
+ if (ordering._nullsPosition != null) { // "NULLS FIRST" only exists in PG, this is the general solution
129
+ s += ' IS NULL ' + (ordering._nullsPosition === 'FIRST' ? 'DESC' : 'ASC') + ', ' + s;
130
+ }
131
+ if (ordering._direction === 'ASC')
132
+ s += ' ASC';
133
+ if (ordering._direction === 'DESC')
134
+ s += ' DESC';
135
+ return s;
136
+ }
137
+ else {
138
+ return convertColumn(ordering);
139
+ }
140
+ }
141
+ function convertTable(table) {
142
+ return options.nameEscape + table._$name + options.nameEscape;
143
+ }
144
+ function convertColumn(column) {
145
+ let s = '';
146
+ if (!(column._name === '*' && column._modifiers.length > 0 && column._modifiers[0].name === 'count')) {
147
+ s += convertTable(column._table) + '.';
148
+ }
149
+ s += convertColumnName(column);
150
+ return convertColumnModifiers(s, column);
151
+ }
152
+ function convertColumnModifiers(s, column) {
153
+ if (column._modifiers) {
154
+ column._modifiers.forEach((modifier) => {
155
+ let name = modifier.name;
156
+ if (name === 'lower')
157
+ s = 'LOWER(' + s + ')';
158
+ else if (name === 'upper')
159
+ s = 'UPPER(' + s + ')';
160
+ else if (name === 'count')
161
+ s = 'COUNT(' + s + ')';
162
+ else if (name === 'sum')
163
+ s = 'SUM(' + s + ')';
164
+ else if (name === 'avg')
165
+ s = 'AVG(' + s + ')';
166
+ else if (name === 'min')
167
+ s = 'MIN(' + s + ')';
168
+ else if (name === 'max')
169
+ s = 'MAX(' + s + ')';
170
+ else if (name === 'as')
171
+ s = s + ' AS ' + options.nameEscape + modifier.params + options.nameEscape;
172
+ });
173
+ }
174
+ return s + '';
175
+ }
176
+ function convertColumnName(column) {
177
+ if (column._name === '*')
178
+ return column._name;
179
+ let name = typeof column._name === 'string' ? column._name : column._name.name;
180
+ return options.nameEscape + name + options.nameEscape;
181
+ }
182
+ function preprocessConditions(conditions) {
183
+ conditions.forEach(condition => {
184
+ if (conditions.length > 1 && condition._sibling) {
185
+ condition._parenthesis = true;
186
+ }
187
+ preprocessParams(condition);
188
+ });
189
+ }
190
+ function preprocessParams(condition) {
191
+ if (condition._sibling) {
192
+ preprocessParams(condition._sibling);
193
+ }
194
+ if (!condition._sibling && !condition._child) {
195
+ condition.__param = getConditionParam(condition);
196
+ }
197
+ if (condition._child) {
198
+ preprocessParams(condition._child);
199
+ }
200
+ }
201
+ function convertCondition(condition, root = false) {
202
+ if (!condition._sibling && !condition._child) {
203
+ return convertColumnCondition(condition, condition.__param);
204
+ }
205
+ let s = '';
206
+ if (condition._child) {
207
+ s += convertCondition(condition._child);
208
+ }
209
+ if (condition._sibling) {
210
+ s = convertCondition(condition._sibling, root) + ' ' + condition._chainType.toUpperCase() + ' ' + s;
211
+ }
212
+ if (condition._parenthesis || ((!root || condition._negation) && condition._child)) {
213
+ s = '( ' + s + ' )';
214
+ }
215
+ if (condition._negation) {
216
+ s = 'NOT ' + s;
217
+ }
218
+ return s;
219
+ }
220
+ function convertColumnCondition(condition, param) {
221
+ let s = convertColumn(condition._column);
222
+ s += getConditionString(condition, param);
223
+ return s;
224
+ }
225
+ function getConditionString(condition, param) {
226
+ switch (condition._type) {
227
+ case 'eq': return ' = ' + param;
228
+ case 'ne': return ' <> ' + param;
229
+ case 'lt': return ' < ' + param;
230
+ case 'gt': return ' > ' + param;
231
+ case 'lte': return ' <= ' + param;
232
+ case 'gte': return ' >= ' + param;
233
+ case 'is-null': return ' IS NULL';
234
+ case 'is-not-null': return ' IS NOT NULL';
235
+ case 'like': return ' LIKE ' + param;
236
+ case 'not-like': return ' NOT LIKE ' + param;
237
+ case 'in': return ' IN (' + param + ')';
238
+ case 'not-in': return ' NOT IN (' + param + ')';
239
+ case 'between': return ' BETWEEN ' + param;
240
+ case 'not-between': return ' NOT BETWEEN ' + param;
241
+ default: return '';
242
+ }
243
+ }
244
+ function getConditionParam(condition) {
245
+ let param = '';
246
+ if (condition._otherColumn) {
247
+ param = convertColumn(condition._otherColumn);
248
+ }
249
+ else {
250
+ let _convertParam = (param) => convertParam(condition._column, param);
251
+ if (condition._type === 'in' || condition._type === 'not-in') {
252
+ param = condition._values.map((value) => _convertParam(value)).join(', ');
253
+ }
254
+ else if (condition._type === 'between' || condition._type === 'not-between') {
255
+ param = _convertParam(condition._values[0]) + ' AND ' + _convertParam(condition._values[1]);
256
+ }
257
+ else if (condition._type !== 'is-null' && condition._type !== 'is-not-null') {
258
+ param = _convertParam(condition._values[0]);
259
+ }
260
+ }
261
+ return param;
262
+ }
263
+ function convertParam(column, param) {
264
+ if (param == null)
265
+ return 'NULL';
266
+ return paramConverter(getTypedParam(column._type, param));
267
+ }
268
+ function getTypedParam(type, param) {
269
+ if (type === 'number')
270
+ return number(param);
271
+ else if (type === 'boolean')
272
+ return boolean(param);
273
+ else if (type === 'date')
274
+ return date(param);
275
+ else if (type === 'string')
276
+ return string(param);
277
+ return param;
278
+ }
279
+ }
280
+ ;
281
+ ({}); // @--end-of-file-for-module=taon-type-sql lib/converter/query-converter.ts
282
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktY29udmVydGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdG1wLWxpYnMtZm9yLWRpc3QvdGFvbi10eXBlLXNxbC9wcm9qZWN0cy90YW9uLXR5cGUtc3FsL3NyYy9saWIvY29udmVydGVyL3F1ZXJ5LWNvbnZlcnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFJakUsTUFBTSxVQUFVLG9CQUFvQixDQUFDLGNBQXNDLEVBQUUsT0FBeUIsRUFBRSxNQUFtQjtJQUV2SCxPQUFPLFlBQVksQ0FBQztJQUVwQixTQUFTLFlBQVksQ0FBQyxLQUFVO1FBQzVCLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxRQUFRO1lBQUUsT0FBTyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqRSxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssUUFBUTtZQUFFLE9BQU8sa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakUsSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLFFBQVE7WUFBRSxPQUFPLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pFLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxRQUFRO1lBQUUsT0FBTyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqRSxNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsU0FBUyxrQkFBa0IsQ0FBQyxLQUFVO1FBQ2xDLElBQUksQ0FBQyxHQUFHLGNBQWMsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BELENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDMUMsT0FBTyxD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RCxDQUFDO0lBRUQsU0FBUyxhQUFhLENBQUMsSUFBWSxFQUFFLEtBQVU7UUFDM0MsSUFBSSxJQUFJLEtBQUssUUFBUTtZQUFFLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3ZDLElBQUksSUFBSSxLQUFLLFNBQVM7WUFBRSxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUM5QyxJQUFJLElBQUksS0FBSyxNQUFNO1lBQUUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDeEMsSUFBSSxJQUFJLEtBQUssUUFBUTtZQUFFLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7QUFDTCxDQUFDO0FBRUEsQ0FBQztBQUFBLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQywyRUFBMkUiLCJzb3VyY2VzQ29udGVudCI6WyJcblxuaW1wb3J0IHsgc3RyaW5nLCBudW1iZXIsIGRhdGUsIGJvb2xlYW4gfSBmcm9tICcuL3R5cGUtY29udmVydGVyJztcbmltcG9ydCB7IFF1ZXJ5RW5naW5lLCBDb252ZXJ0ZXJPcHRpb25zIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUXVlcnlDb252ZXJ0ZXIocGFyYW1Db252ZXJ0ZXI6IChwYXJhbTogYW55KSA9PiBzdHJpbmcsIG9wdGlvbnM6IENvbnZlcnRlck9wdGlvbnMsIGVuZ2luZTogUXVlcnlFbmdpbmUpIHtcblxuICAgIHJldHVybiBjb252ZXJ0UXVlcnk7XG5cbiAgICBmdW5jdGlvbiBjb252ZXJ0UXVlcnkocXVlcnk6IGFueSk6IHN0cmluZyB7XG4gICAgICAgIGlmIChxdWVyeS5fYWN0aW9uID09PSAnc2VsZWN0JykgcmV0dXJuIGNvbnZlcnRTZWxlY3RRdWVyeShxdWVyeSk7XG4gICAgICAgIGlmIChxdWVyeS5fYWN0aW9uID09PSAnZGVsZXRlJykgcmV0dXJuIGNvbnZlcnREZWxldGVRdWVyeShxdWVyeSk7XG4gICAgICAgIGlmIChxdWVyeS5fYWN0aW9uID09PSAndXBkYXRlJykgcmV0dXJuIGNvbnZlcnRVcGRhdGVRdWVyeShxdWVyeSk7XG4gICAgICAgIGlmIChxdWVyeS5fYWN0aW9uID09PSAnaW5zZXJ0JykgcmV0dXJuIGNvbnZlcnRJbnNlcnRRdWVyeShxdWVyeSk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBxdWVyeSB0eXBlOicgKyBxdWVyeS5fYWN0aW9uKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb252ZXJ0RGVsZXRlUXVlcnkocXVlcnk6IGFueSk6IHN0cmluZyB7XG4gICAgICAgIGxldCBzID0gJ0RFTEVURSBGUk9NICcgKyBjb252ZXJ0VGFibGUocXVlcnkuX3RhYmxlKTtcbiAgICAgICAgcyArPSBjb252ZXJ0Q29uZGl0aW9ucyhxdWVyeS5fY29uZGl0aW9ucyk7XG4gICAgICAgIHJldHVybiBzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbnZlcnRVcGRhdGVRdWVyeShxdWVyeTogYW55KTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHMgPSAnVVBEQVRFICcgKyBjb252ZXJ0VGFibGUocXVlcnkuX3RhYmxlKSArICcgU0VUICc7XG4gICAgICAgIHMgKz0gY29udmVydFVwZGF0ZVNldHRlcnMocXVlcnkuX3RhYmxlLCBxdWVyeS5fZW50aXR5KTtcbiAgICAgICAgcyArPSBjb252ZXJ0Q29uZGl0aW9ucyhxdWVyeS5fY29uZGl0aW9ucyk7XG4gICAgICAgIHJldHVybiBzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbnZlcnRVcGRhdGVTZXR0ZXJzKHRhYmxlOiBhbnksIGVudGl0eTogYW55KTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGVudGl0eSkuc29ydCgpLm1hcChrZXkgPT4ge1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gZW50aXR5W2tleV07XG4gICAgICAgICAgICBsZXQgY29sdW1uID0gdGFibGVba2V5XTtcbiAgICAgICAgICAgIHJldHVybiBjb252ZXJ0Q29sdW1uTmFtZShjb2x1bW4pICsgJyA9ICcgKyBjb252ZXJ0UGFyYW0oY29sdW1uLCB2YWx1ZSk7XG4gICAgICAgIH0pLmpvaW4oJywgJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29udmVydEluc2VydFF1ZXJ5KHF1ZXJ5OiBhbnkpOiBzdHJpbmcge1xuICAgICAgICBsZXQgaXRlbXM6IGFueVtdID0gQXJyYXkuaXNBcnJheShxdWVyeS5fZW50aXR5KSA/IHF1ZXJ5Ll9lbnRpdHkgOiBbcXVlcnkuX2VudGl0eV07XG4gICAgICAgIGxldCBrZXlTZXQ6IFNldDxzdHJpbmc+ID0gaXRlbXMucmVkdWNlKChzZXQ6IFNldDxzdHJpbmc+LCBpdGVtKSA9PiB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhpdGVtKS5mb3JFYWNoKGtleSA9PiBzZXQuYWRkKGtleSkpOyByZXR1cm4gc2V0O1xuICAgICAgICB9LCBuZXcgU2V0PHN0cmluZz4oKSk7XG4gICAgICAgIGxldCBrZXlzID0gQXJyYXkuZnJvbShrZXlTZXQpLnNvcnQoKTtcblxuICAgICAgICBsZXQgcyA9ICdJTlNFUlQgSU5UTyAnICsgY29udmVydFRhYmxlKHF1ZXJ5Ll90YWJsZSkgKyAnICc7XG4gICAgICAgIHMgKz0gJygnICsga2V5cy5tYXAoa2V5ID0+IGNvbnZlcnRDb2x1bW5OYW1lKHF1ZXJ5Ll90YWJsZVtrZXldKSkuam9pbignLCAnKSArICcpJztcbiAgICAgICAgcyArPSBvcHRpb25zLmxpbmVCcmVhayArICdWQUxVRVMgJztcbiAgICAgICAgcyArPSBpdGVtcy5tYXAoaXRlbSA9PiBjb252ZXJ0SW5zZXJ0SXRlbShxdWVyeS5fdGFibGUsIGl0ZW0sIGtleXMpKVxuICAgICAgICAgICAgLm1hcCgocm93OiBzdHJpbmcpID0+ICcoJyArIHJvdyArICcpJykuam9pbignLCAnKTtcblxuICAgICAgICBzICs9IGdldFBnSW5zZXJ0UmV0dXJuaW5nSWZOZWVkZWQocXVlcnkpO1xuICAgICAgICByZXR1cm4gcztcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGdldFBnSW5zZXJ0UmV0dXJuaW5nSWZOZWVkZWQocXVlcnk6IGFueSk6IHN0cmluZyB7XG4gICAgICAgIGlmIChlbmdpbmUgPT09ICdwZycgJiYgcXVlcnkuX2FjdGlvbiA9PT0gJ2luc2VydCcgJiYgIUFycmF5LmlzQXJyYXkocXVlcnkuX2VudGl0eSkgJiZcbiAgICAgICAgICAgIHF1ZXJ5Ll90YWJsZS4kaWQgJiYgcXVlcnkuX3RhYmxlLiRpZC5fdGFibGUgJiYgcXVlcnkuX3RhYmxlLiRpZC5fbmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuICcgUkVUVVJOSU5HICcgKyBjb252ZXJ0Q29sdW1uTmFtZShxdWVyeS5fdGFibGUuJGlkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29udmVydEluc2VydEl0ZW0odGFibGU6IGFueSwgZW50aXR5OiBhbnksIGtleXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGtleXMubWFwKGtleSA9PiB7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBlbnRpdHlba2V5XTtcbiAgICAgICAgICAgIGxldCBjb2x1bW4gPSB0YWJsZVtrZXldO1xuICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRQYXJhbShjb2x1bW4sIHZhbHVlKTtcbiAgICAgICAgfSkuam9pbignLCAnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb252ZXJ0U2VsZWN0UXVlcnkocXVlcnk6IGFueSk6IHN0cmluZyB7XG4gICAgICAgIGxldCBzID0gJ1NFTEVDVCAnO1xuICAgICAgICBpZiAocXVlcnkuX2Rpc3RpbmN0KSB7XG4gICAgICAgICAgICBzICs9ICdESVNUSU5DVCAnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHF1ZXJ5Ll9jb2x1bW5zID09IG51bGwgfHwgcXVlcnkuX2NvbHVtbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBzICs9ICcqJ1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcyArPSBxdWVyeS5fY29sdW1ucy5tYXAoKGNvbHVtbjogYW55KSA9PiBjb252ZXJ0Q29sdW1uKGNvbHVtbikpLmpvaW4oJywgJyk7XG4gICAgICAgIH1cblxuICAgICAgICBzICs9IG9wdGlvbnMubGluZUJyZWFrICsgJ0ZST00gJztcbiAgICAgICAgaWYgKHF1ZXJ5Ll90YWJsZXMpIHtcbiAgICAgICAgICAgIHMrPSBxdWVyeS5fdGFibGVzLm1hcCgodGFibGU6IGFueSkgPT4gdGFibGUuX3BhcmVudCA/IGNvbnZlcnRKb2luKHRhYmxlKSA6IGNvbnZlcnRUYWJsZSh0YWJsZSkpLmpvaW4oJywgJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzKz0gY29udmVydFRhYmxlKHF1ZXJ5Ll90YWJsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBzICs9IGNvbnZlcnRDb25kaXRpb25zKHF1ZXJ5Ll9jb25kaXRpb25zKTtcblxuICAgICAgICBpZiAocXVlcnkuX2dyb3VwQnkgJiYgcXVlcnkuX2dyb3VwQnkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcyArPSBvcHRpb25zLmxpbmVCcmVhayArICdHUk9VUCBCWSAnO1xuICAgICAgICAgICAgcyArPSBxdWVyeS5fZ3JvdXBCeS5tYXAoKGNvbHVtbjogYW55KSA9PiBjb252ZXJ0Q29sdW1uKGNvbHVtbikpLmpvaW4oJywgJyk7XG4gICAgICAgIH1cbiAgICAgICAgcyArPSBjb252ZXJ0Q29uZGl0aW9ucyhxdWVyeS5faGF2aW5nLCAnSEFWSU5HJyk7XG5cbiAgICAgICAgaWYgKHF1ZXJ5Ll9vcmRlcmluZ3MgJiYgcXVlcnkuX29yZGVyaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBzICs9IG9wdGlvbnMubGluZUJyZWFrICsgJ09SREVSIEJZICc7XG4gICAgICAgICAgICBzICs9IHF1ZXJ5Ll9vcmRlcmluZ3MubWFwKChvcmRlcmluZzogYW55KSA9PiBjb252ZXJ0T3JkZXJpbmcob3JkZXJpbmcpKS5qb2luKCcsICcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChxdWVyeS5fbGltaXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgcyArPSBvcHRpb25zLmxpbmVCcmVhayArICdMSU1JVCAnICsgbnVtYmVyKHF1ZXJ5Ll9saW1pdCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHF1ZXJ5Ll9vZmZzZXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgcyArPSBvcHRpb25zLmxpbmVCcmVhayArICdPRkZTRVQgJyArIG51bWJlcihxdWVyeS5fb2Zmc2V0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb252ZXJ0Q29uZGl0aW9ucyhjb25kaXRpb25zOiBhbnlbXSwga2V5d29yZCA9ICdXSEVSRScpOiBzdHJpbmcge1xuICAgICAgICBsZXQgcyA9ICcnO1xuICAgICAgICBpZiAoY29uZGl0aW9ucyAmJiBjb25kaXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHMgKz0gb3B0aW9ucy5saW5lQnJlYWsgKyBrZXl3b3JkICsgJyAnO1xuICAgICAgICAgICAgcHJlcHJvY2Vzc0NvbmRpdGlvbnMoY29uZGl0aW9ucyk7XG4gICAgICAgICAgICBzICs9IGNvbmRpdGlvbnMubWFwKGNvbmRpdGlvbiA9PiBjb252ZXJ0Q29uZGl0aW9uKGNvbmRpdGlvbiwgdHJ1ZSkpLmpvaW4oJyBBTkQgJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29udmVydEpvaW4oam9pbkNoYWluOiBhbnkpOiBzdHJpbmcge1xuICAgICAgICBsZXQgaXRlbXM6IGFueVtdID0gW107XG4gICAgICAgIHdoaWxlIChqb2luQ2hhaW4pIHtcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goam9pbkNoYWluKTtcbiAgICAgICAgICAgIGpvaW5DaGFpbiA9IGpvaW5DaGFpbi5fcGFyZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJvb3QgPSBpdGVtc1tpdGVtcy5sZW5ndGggLSAxXTtcbiAgICAgICAgbGV0IHMgPSBjb252ZXJ0VGFibGUocm9vdCk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IGl0ZW1zLmxlbmd0aCAtIDI7IGkgPj0gMDsgaS09IDIpIHtcbiAgICAgICAgICAgIGxldCB0YWJsZSA9IGl0ZW1zW2ldLl90YWJsZTtcbiAgICAgICAgICAgIGxldCBtb2RpZmllciA9IGl0ZW1zW2ldLl9tb2RpZmllcjtcbiAgICAgICAgICAgIGxldCBjb25kaXRpb24gPSBpdGVtc1tpIC0gMV0uX2NvbmRpdGlvbjtcbiAgICAgICAgICAgIGxldCBwYXJhbSA9IGNvbnZlcnRDb2x1bW4oY29uZGl0aW9uLl9vdGhlckNvbHVtbik7XG4gICAgICAgICAgICBzICs9ICcgJyArIG1vZGlmaWVyLnRvVXBwZXJDYXNlKCkgKyAnIEpPSU4gJyArIGNvbnZlcnRUYWJsZSh0YWJsZSkgKyAnIE9OICcgK1xuICAgICAgICAgICAgICAgIGNvbnZlcnRDb2x1bW5Db25kaXRpb24oY29uZGl0aW9uLCBwYXJhbSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb252ZXJ0T3JkZXJpbmcob3JkZXJpbmc6IGFueSk6IHN0cmluZyB7XG4gICAgICAgIGlmIChvcmRlcmluZy5fY29sdW1uKSB7XG4gICAgICAgICAgICBsZXQgcyA9IGNvbnZlcnRDb2x1bW4ob3JkZXJpbmcuX2NvbHVtbik7XG5cbiAgICAgICAgICAgIGlmIChvcmRlcmluZy5fbnVsbHNQb3NpdGlvbiAhPSBudWxsKSB7IC8vIFwiTlVMTFMgRklSU1RcIiBvbmx5IGV4aXN0cyBpbiBQRywgdGhpcyBpcyB0aGUgZ2VuZXJhbCBzb2x1dGlvblxuICAgICAgICAgICAgICAgIHMgKz0gJyBJUyBOVUxMICcgKyAob3JkZXJpbmcuX251bGxzUG9zaXRpb24gPT09ICdGSVJTVCcgPyAnREVTQycgOiAnQVNDJykgKyAnLCAnICsgcztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG9yZGVyaW5nLl9kaXJlY3Rpb24gPT09ICdBU0MnKSBzICs9ICcgQVNDJztcbiAgICAgICAgICAgIGlmIChvcmRlcmluZy5fZGlyZWN0aW9uID09PSAnREVTQycpIHMgKz0gJyBERVNDJztcblxuICAgICAgICAgICAgcmV0dXJuIHM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gY29udmVydENvbHVtbihvcmRlcmluZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb252ZXJ0VGFibGUodGFibGU6IGFueSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLm5hbWVFc2NhcGUgKyB0YWJsZS5fJG5hbWUgKyBvcHRpb25zLm5hbWVFc2NhcGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29udmVydENvbHVtbihjb2x1bW46IGFueSk6IHN0cmluZyB7XG4gICAgICAgIGxldCBzID0gJyc7XG4gICAgICAgIGlmICghKGNvbHVtbi5fbmFtZSA9PT0gJyonICYmIGNvbHVtbi5fbW9kaWZpZXJzLmxlbmd0aCA+IDAgJiYgY29sdW1uLl9tb2RpZmllcnNbMF0ubmFtZSA9PT0gJ2NvdW50JykpIHtcbiAgICAgICAgICAgIHMgKz0gY29udmVydFRhYmxlKGNvbHVtbi5fdGFibGUpICsgJy4nO1xuICAgICAgICB9XG4gICAgICAgIHMgKz0gY29udmVydENvbHVtbk5hbWUoY29sdW1uKTtcbiAgICAgICAgcmV0dXJuIGNvbnZlcnRDb2x1bW5Nb2RpZmllcnMocywgY29sdW1uKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb252ZXJ0Q29sdW1uTW9kaWZpZXJzKHM6IHN0cmluZywgY29sdW1uOiBhbnkpOiBzdHJpbmcge1xuICAgICAgICBpZiAoY29sdW1uLl9tb2RpZmllcnMpIHtcbiAgICAgICAgICAgIGNvbHVtbi5fbW9kaWZpZXJzLmZvckVhY2goKG1vZGlmaWVyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbmFtZSA9IG1vZGlmaWVyLm5hbWU7XG4gICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdsb3dlcicpIHMgPSAnTE9XRVIoJyArIHMgKyAnKSc7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PT0gJ3VwcGVyJykgcyA9ICdVUFBFUignICsgcyArICcpJztcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09PSAnY291bnQnKSBzID0gJ0NPVU5UKCcgKyBzICsgJyknO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT09ICdzdW0nKSBzID0gJ1NVTSgnICsgcyArICcpJztcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09PSAnYXZnJykgcyA9ICdBVkcoJyArIHMgKyAnKSc7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAobmFtZSA9PT0gJ21pbicpIHMgPSAnTUlOKCcgKyBzICsgJyknO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5hbWUgPT09ICdtYXgnKSBzID0gJ01BWCgnICsgcyArICcpJztcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChuYW1lID09PSAnYXMnKSBzID0gcyArICcgQVMgJyArIG9wdGlvbnMubmFtZUVzY2FwZSArIG1vZGlmaWVyLnBhcmFtcyArIG9wdGlvbnMubmFtZUVzY2FwZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzICsgJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29udmVydENvbHVtbk5hbWUoY29sdW1uOiBhbnkpOiBzdHJpbmcge1xuICAgICAgICBpZiAoY29sdW1uLl9uYW1lID09PSAnKicpIHJldHVybiBjb2x1bW4uX25hbWU7XG4gICAgICAgIGxldCBuYW1lID0gdHlwZW9mIGNvbHVtbi5fbmFtZSA9PT0gJ3N0cmluZycgPyBjb2x1bW4uX25hbWUgOiBjb2x1bW4uX25hbWUubmFtZTtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMubmFtZUVzY2FwZSArIG5hbWUgKyBvcHRpb25zLm5hbWVFc2NhcGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlcHJvY2Vzc0NvbmRpdGlvbnMoY29uZGl0aW9uczogYW55W10pOiB2b2lkIHtcbiAgICAgICAgY29uZGl0aW9ucy5mb3JFYWNoKGNvbmRpdGlvbiA9PiB7XG4gICAgICAgICAgICBpZiAoY29uZGl0aW9ucy5sZW5ndGggPiAxICYmIGNvbmRpdGlvbi5fc2libGluZykge1xuICAgICAgICAgICAgICAgIGNvbmRpdGlvbi5fcGFyZW50aGVzaXMgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcHJlcHJvY2Vzc1BhcmFtcyhjb25kaXRpb24pO1xuICAgICAgICB9KTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIHByZXByb2Nlc3NQYXJhbXMoY29uZGl0aW9uOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNvbmRpdGlvbi5fc2libGluZykge1xuICAgICAgICAgICAgcHJlcHJvY2Vzc1BhcmFtcyhjb25kaXRpb24uX3NpYmxpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY29uZGl0aW9uLl9zaWJsaW5nICYmICFjb25kaXRpb24uX2NoaWxkKSB7XG4gICAgICAgICAgICBjb25kaXRpb24uX19wYXJhbSA9IGdldENvbmRpdGlvblBhcmFtKGNvbmRpdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmRpdGlvbi5fY2hpbGQpIHtcbiAgICAgICAgICAgIHByZXByb2Nlc3NQYXJhbXMoY29uZGl0aW9uLl9jaGlsZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb252ZXJ0Q29uZGl0aW9uKGNvbmRpdGlvbjogYW55LCByb290ID0gZmFsc2UpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIWNvbmRpdGlvbi5fc2libGluZyAmJiAhY29uZGl0aW9uLl9jaGlsZCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRDb2x1bW5Db25kaXRpb24oY29uZGl0aW9uLCBjb25kaXRpb24uX19wYXJhbSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcyA9ICcnO1xuICAgICAgICBpZiAoY29uZGl0aW9uLl9jaGlsZCkge1xuICAgICAgICAgICAgcyArPSBjb252ZXJ0Q29uZGl0aW9uKGNvbmRpdGlvbi5fY2hpbGQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25kaXRpb24uX3NpYmxpbmcpIHtcbiAgICAgICAgICAgIHMgPSBjb252ZXJ0Q29uZGl0aW9uKGNvbmRpdGlvbi5fc2libGluZywgcm9vdCkgKyAnICcgKyBjb25kaXRpb24uX2NoYWluVHlwZS50b1VwcGVyQ2FzZSgpICsgJyAnICsgcztcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZGl0aW9uLl9wYXJlbnRoZXNpcyB8fCAoKCFyb290IHx8IGNvbmRpdGlvbi5fbmVnYXRpb24pICYmIGNvbmRpdGlvbi5fY2hpbGQpKSB7XG4gICAgICAgICAgICBzID0gJyggJyArIHMgKyAnICknO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25kaXRpb24uX25lZ2F0aW9uKSB7XG4gICAgICAgICAgICBzID0gJ05PVCAnICsgcztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb252ZXJ0Q29sdW1uQ29uZGl0aW9uKGNvbmRpdGlvbjogYW55LCBwYXJhbTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHMgPSBjb252ZXJ0Q29sdW1uKGNvbmRpdGlvbi5fY29sdW1uKTtcbiAgICAgICAgcyArPSBnZXRDb25kaXRpb25TdHJpbmcoY29uZGl0aW9uLCBwYXJhbSk7XG4gICAgICAgIHJldHVybiBzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldENvbmRpdGlvblN0cmluZyhjb25kaXRpb246IGFueSwgcGFyYW06IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHN3aXRjaCAoY29uZGl0aW9uLl90eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdlcSc6IHJldHVybiAnID0gJyArIHBhcmFtO1xuICAgICAgICAgICAgY2FzZSAnbmUnOiByZXR1cm4gJyA8PiAnICsgcGFyYW07XG4gICAgICAgICAgICBjYXNlICdsdCc6IHJldHVybiAnIDwgJyArIHBhcmFtO1xuICAgICAgICAgICAgY2FzZSAnZ3QnOiByZXR1cm4gJyA+ICcgKyBwYXJhbTtcbiAgICAgICAgICAgIGNhc2UgJ2x0ZSc6IHJldHVybiAnIDw9ICcgKyBwYXJhbTtcbiAgICAgICAgICAgIGNhc2UgJ2d0ZSc6IHJldHVybiAnID49ICcgKyBwYXJhbTtcbiAgICAgICAgICAgIGNhc2UgJ2lzLW51bGwnOiByZXR1cm4gJyBJUyBOVUxMJztcbiAgICAgICAgICAgIGNhc2UgJ2lzLW5vdC1udWxsJzogcmV0dXJuICcgSVMgTk9UIE5VTEwnO1xuICAgICAgICAgICAgY2FzZSAnbGlrZSc6IHJldHVybiAnIExJS0UgJyArIHBhcmFtO1xuICAgICAgICAgICAgY2FzZSAnbm90LWxpa2UnOiByZXR1cm4gJyBOT1QgTElLRSAnICsgcGFyYW07XG4gICAgICAgICAgICBjYXNlICdpbic6IHJldHVybiAnIElOICgnICsgcGFyYW0gKyAnKSc7XG4gICAgICAgICAgICBjYXNlICdub3QtaW4nOiByZXR1cm4gJyBOT1QgSU4gKCcgKyBwYXJhbSArICcpJztcbiAgICAgICAgICAgIGNhc2UgJ2JldHdlZW4nOiByZXR1cm4gJyBCRVRXRUVOICcgKyBwYXJhbTtcbiAgICAgICAgICAgIGNhc2UgJ25vdC1iZXR3ZWVuJzogcmV0dXJuICcgTk9UIEJFVFdFRU4gJyArIHBhcmFtO1xuICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Q29uZGl0aW9uUGFyYW0oY29uZGl0aW9uOiBhbnkpOiBzdHJpbmcge1xuICAgICAgICBsZXQgcGFyYW0gPSAnJztcbiAgICAgICAgaWYgKGNvbmRpdGlvbi5fb3RoZXJDb2x1bW4pIHtcbiAgICAgICAgICAgIHBhcmFtID0gY29udmVydENvbHVtbihjb25kaXRpb24uX290aGVyQ29sdW1uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBfY29udmVydFBhcmFtID0gKHBhcmFtOiBhbnkpID0+IGNvbnZlcnRQYXJhbShjb25kaXRpb24uX2NvbHVtbiwgcGFyYW0pO1xuXG4gICAgICAgICAgICBpZiAoY29uZGl0aW9uLl90eXBlID09PSAnaW4nIHx8IGNvbmRpdGlvbi5fdHlwZSA9PT0gJ25vdC1pbicpIHtcbiAgICAgICAgICAgICAgICBwYXJhbSA9IGNvbmRpdGlvbi5fdmFsdWVzLm1hcCgodmFsdWU6IGFueSkgPT4gX2NvbnZlcnRQYXJhbSh2YWx1ZSkpLmpvaW4oJywgJyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbmRpdGlvbi5fdHlwZSA9PT0gJ2JldHdlZW4nIHx8IGNvbmRpdGlvbi5fdHlwZSA9PT0gJ25vdC1iZXR3ZWVuJykge1xuICAgICAgICAgICAgICAgIHBhcmFtID0gX2NvbnZlcnRQYXJhbShjb25kaXRpb24uX3ZhbHVlc1swXSkgKyAnIEFORCAnICsgX2NvbnZlcnRQYXJhbShjb25kaXRpb24uX3ZhbHVlc1sxXSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbmRpdGlvbi5fdHlwZSAhPT0gJ2lzLW51bGwnICYmIGNvbmRpdGlvbi5fdHlwZSAhPT0gJ2lzLW5vdC1udWxsJykge1xuICAgICAgICAgICAgICAgIHBhcmFtID0gX2NvbnZlcnRQYXJhbShjb25kaXRpb24uX3ZhbHVlc1swXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcmFtO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbnZlcnRQYXJhbShjb2x1bW46IGFueSwgcGFyYW06IGFueSk6IHN0cmluZyB7XG4gICAgICAgIGlmIChwYXJhbSA9PSBudWxsKSByZXR1cm4gJ05VTEwnO1xuICAgICAgICByZXR1cm4gcGFyYW1Db252ZXJ0ZXIoZ2V0VHlwZWRQYXJhbShjb2x1bW4uX3R5cGUsIHBhcmFtKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0VHlwZWRQYXJhbSh0eXBlOiBzdHJpbmcsIHBhcmFtOiBhbnkpOiBhbnkge1xuICAgICAgICBpZiAodHlwZSA9PT0gJ251bWJlcicpIHJldHVybiBudW1iZXIocGFyYW0pO1xuICAgICAgICBlbHNlIGlmICh0eXBlID09PSAnYm9vbGVhbicpIHJldHVybiBib29sZWFuKHBhcmFtKTtcbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gJ2RhdGUnKSByZXR1cm4gZGF0ZShwYXJhbSk7XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT09ICdzdHJpbmcnKSByZXR1cm4gc3RyaW5nKHBhcmFtKTtcbiAgICAgICAgcmV0dXJuIHBhcmFtO1xuICAgIH1cbn1cblxuIDsoe30pOyAvLyBALS1lbmQtb2YtZmlsZS1mb3ItbW9kdWxlPXRhb24tdHlwZS1zcWwgbGliL2NvbnZlcnRlci9xdWVyeS1jb252ZXJ0ZXIudHMiXX0=