drizzle-orm 0.10.26 → 0.10.29

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 (363) hide show
  1. package/.eslintrc +28 -0
  2. package/.tslintignore +1 -0
  3. package/CHANGELOG.md +202 -0
  4. package/README.md +439 -0
  5. package/dist/builders/aggregators/abstractAggregator.d.ts +11 -0
  6. package/dist/builders/aggregators/abstractAggregator.js +35 -0
  7. package/dist/builders/aggregators/deleteAggregator.d.ts +16 -0
  8. package/dist/builders/aggregators/deleteAggregator.js +42 -0
  9. package/dist/builders/aggregators/insertAggregator.d.ts +22 -0
  10. package/dist/builders/aggregators/insertAggregator.js +106 -0
  11. package/dist/builders/aggregators/selectAggregator.d.ts +39 -0
  12. package/dist/builders/aggregators/selectAggregator.js +143 -0
  13. package/dist/builders/aggregators/updateAggregator.d.ts +19 -0
  14. package/dist/builders/aggregators/updateAggregator.js +50 -0
  15. package/dist/builders/highLvlBuilders/abstractRequestBuilder.d.ts +27 -0
  16. package/dist/builders/highLvlBuilders/abstractRequestBuilder.js +32 -0
  17. package/dist/builders/highLvlBuilders/deleteRequestBuilder.d.ts +19 -0
  18. package/dist/builders/highLvlBuilders/deleteRequestBuilder.js +61 -0
  19. package/dist/builders/highLvlBuilders/insertRequestBuilder.d.ts +20 -0
  20. package/dist/builders/highLvlBuilders/insertRequestBuilder.js +73 -0
  21. package/dist/builders/highLvlBuilders/order.d.ts +5 -0
  22. package/dist/builders/highLvlBuilders/order.js +8 -0
  23. package/dist/builders/highLvlBuilders/selectRequestBuilder.d.ts +47 -0
  24. package/dist/builders/highLvlBuilders/selectRequestBuilder.js +128 -0
  25. package/dist/builders/highLvlBuilders/updateRequestBuilder.d.ts +22 -0
  26. package/dist/builders/highLvlBuilders/updateRequestBuilder.js +80 -0
  27. package/dist/builders/index.d.ts +18 -0
  28. package/dist/builders/index.js +54 -0
  29. package/dist/builders/joinBuilders/builders/abstractJoinBuilder.d.ts +40 -0
  30. package/dist/builders/joinBuilders/builders/abstractJoinBuilder.js +78 -0
  31. package/dist/builders/joinBuilders/builders/selectWithFiveJoins.d.ts +35 -0
  32. package/dist/builders/joinBuilders/builders/selectWithFiveJoins.js +45 -0
  33. package/dist/builders/joinBuilders/builders/selectWithFourJoins.d.ts +55 -0
  34. package/dist/builders/joinBuilders/builders/selectWithFourJoins.js +78 -0
  35. package/dist/builders/joinBuilders/builders/selectWithJoin.d.ts +49 -0
  36. package/dist/builders/joinBuilders/builders/selectWithJoin.js +64 -0
  37. package/dist/builders/joinBuilders/builders/selectWithThreeJoins.d.ts +53 -0
  38. package/dist/builders/joinBuilders/builders/selectWithThreeJoins.js +73 -0
  39. package/dist/builders/joinBuilders/builders/selectWithTwoJoins.d.ts +51 -0
  40. package/dist/builders/joinBuilders/builders/selectWithTwoJoins.js +68 -0
  41. package/dist/builders/joinBuilders/join.d.ts +23 -0
  42. package/dist/builders/joinBuilders/join.js +28 -0
  43. package/dist/builders/joinBuilders/joinWith.d.ts +14 -0
  44. package/dist/builders/joinBuilders/joinWith.js +14 -0
  45. package/dist/builders/joinBuilders/responses/selectResponseFiveJoins.d.ts +20 -0
  46. package/dist/builders/joinBuilders/responses/selectResponseFiveJoins.js +35 -0
  47. package/dist/builders/joinBuilders/responses/selectResponseFourJoins.d.ts +19 -0
  48. package/dist/builders/joinBuilders/responses/selectResponseFourJoins.js +34 -0
  49. package/dist/builders/joinBuilders/responses/selectResponseThreeJoins.d.ts +18 -0
  50. package/dist/builders/joinBuilders/responses/selectResponseThreeJoins.js +33 -0
  51. package/dist/builders/joinBuilders/responses/selectResponseTwoJoins.d.ts +17 -0
  52. package/dist/builders/joinBuilders/responses/selectResponseTwoJoins.js +32 -0
  53. package/dist/builders/joinBuilders/responses/selectResponseWithJoin.d.ts +16 -0
  54. package/dist/builders/joinBuilders/responses/selectResponseWithJoin.js +31 -0
  55. package/dist/builders/joinBuilders/static.d.ts +5 -0
  56. package/dist/builders/joinBuilders/static.js +9 -0
  57. package/dist/builders/lowLvlBuilders/alter.d.ts +0 -0
  58. package/dist/builders/lowLvlBuilders/alter.js +1 -0
  59. package/dist/builders/lowLvlBuilders/create.d.ts +12 -0
  60. package/dist/builders/lowLvlBuilders/create.js +100 -0
  61. package/dist/builders/lowLvlBuilders/delets/delete.d.ts +5 -0
  62. package/dist/builders/lowLvlBuilders/delets/delete.js +15 -0
  63. package/dist/builders/lowLvlBuilders/delets/deleteFilter.d.ts +11 -0
  64. package/dist/builders/lowLvlBuilders/delets/deleteFilter.js +13 -0
  65. package/dist/builders/lowLvlBuilders/delets/deleteFrom.d.ts +12 -0
  66. package/dist/builders/lowLvlBuilders/delets/deleteFrom.js +14 -0
  67. package/dist/builders/lowLvlBuilders/inserts/insert.d.ts +5 -0
  68. package/dist/builders/lowLvlBuilders/inserts/insert.js +15 -0
  69. package/dist/builders/lowLvlBuilders/inserts/insertInto.d.ts +13 -0
  70. package/dist/builders/lowLvlBuilders/inserts/insertInto.js +16 -0
  71. package/dist/builders/lowLvlBuilders/inserts/onConflictInsert.d.ts +12 -0
  72. package/dist/builders/lowLvlBuilders/inserts/onConflictInsert.js +13 -0
  73. package/dist/builders/lowLvlBuilders/inserts/valuesInsert.d.ts +16 -0
  74. package/dist/builders/lowLvlBuilders/inserts/valuesInsert.js +19 -0
  75. package/dist/builders/lowLvlBuilders/selects/select.d.ts +9 -0
  76. package/dist/builders/lowLvlBuilders/selects/select.js +16 -0
  77. package/dist/builders/lowLvlBuilders/selects/selectFrom.d.ts +28 -0
  78. package/dist/builders/lowLvlBuilders/selects/selectFrom.js +34 -0
  79. package/dist/builders/lowLvlBuilders/selects/selectJoined.d.ts +26 -0
  80. package/dist/builders/lowLvlBuilders/selects/selectJoined.js +30 -0
  81. package/dist/builders/lowLvlBuilders/selects/whereSelect.d.ts +17 -0
  82. package/dist/builders/lowLvlBuilders/selects/whereSelect.js +25 -0
  83. package/dist/builders/lowLvlBuilders/updates/update.d.ts +5 -0
  84. package/dist/builders/lowLvlBuilders/updates/update.js +15 -0
  85. package/dist/builders/lowLvlBuilders/updates/updateIn.d.ts +13 -0
  86. package/dist/builders/lowLvlBuilders/updates/updateIn.js +15 -0
  87. package/dist/builders/lowLvlBuilders/updates/whereSelect.d.ts +11 -0
  88. package/dist/builders/lowLvlBuilders/updates/whereSelect.js +13 -0
  89. package/dist/builders/lowLvlBuilders/updates/whereSet.d.ts +14 -0
  90. package/dist/builders/lowLvlBuilders/updates/whereSet.js +18 -0
  91. package/dist/builders/requestBuilders/updates/combine.d.ts +9 -0
  92. package/dist/builders/requestBuilders/updates/combine.js +26 -0
  93. package/dist/builders/requestBuilders/updates/increment.d.ts +13 -0
  94. package/dist/builders/requestBuilders/updates/increment.js +18 -0
  95. package/dist/builders/requestBuilders/updates/setObjects.d.ts +12 -0
  96. package/dist/builders/requestBuilders/updates/setObjects.js +19 -0
  97. package/dist/builders/requestBuilders/updates/static.d.ts +7 -0
  98. package/dist/builders/requestBuilders/updates/static.js +15 -0
  99. package/dist/builders/requestBuilders/updates/updates.d.ts +9 -0
  100. package/dist/builders/requestBuilders/updates/updates.js +10 -0
  101. package/dist/builders/requestBuilders/where/and.d.ts +11 -0
  102. package/dist/builders/requestBuilders/where/and.js +31 -0
  103. package/dist/builders/requestBuilders/where/const.d.ts +9 -0
  104. package/dist/builders/requestBuilders/where/const.js +25 -0
  105. package/dist/builders/requestBuilders/where/constArray.d.ts +9 -0
  106. package/dist/builders/requestBuilders/where/constArray.js +39 -0
  107. package/dist/builders/requestBuilders/where/eqWhere.d.ts +12 -0
  108. package/dist/builders/requestBuilders/where/eqWhere.js +20 -0
  109. package/dist/builders/requestBuilders/where/greater.d.ts +15 -0
  110. package/dist/builders/requestBuilders/where/greater.js +20 -0
  111. package/dist/builders/requestBuilders/where/greaterEq.d.ts +15 -0
  112. package/dist/builders/requestBuilders/where/greaterEq.js +20 -0
  113. package/dist/builders/requestBuilders/where/in.d.ts +12 -0
  114. package/dist/builders/requestBuilders/where/in.js +20 -0
  115. package/dist/builders/requestBuilders/where/isNotNull.d.ts +11 -0
  116. package/dist/builders/requestBuilders/where/isNotNull.js +18 -0
  117. package/dist/builders/requestBuilders/where/isNull.d.ts +11 -0
  118. package/dist/builders/requestBuilders/where/isNull.js +18 -0
  119. package/dist/builders/requestBuilders/where/less.d.ts +15 -0
  120. package/dist/builders/requestBuilders/where/less.js +20 -0
  121. package/dist/builders/requestBuilders/where/lessEq.d.ts +15 -0
  122. package/dist/builders/requestBuilders/where/lessEq.js +20 -0
  123. package/dist/builders/requestBuilders/where/like.d.ts +12 -0
  124. package/dist/builders/requestBuilders/where/like.js +20 -0
  125. package/dist/builders/requestBuilders/where/notEqWhere.d.ts +12 -0
  126. package/dist/builders/requestBuilders/where/notEqWhere.js +20 -0
  127. package/dist/builders/requestBuilders/where/or.d.ts +11 -0
  128. package/dist/builders/requestBuilders/where/or.js +31 -0
  129. package/dist/builders/requestBuilders/where/rawWhere.d.ts +9 -0
  130. package/dist/builders/requestBuilders/where/rawWhere.js +15 -0
  131. package/dist/builders/requestBuilders/where/static.d.ts +17 -0
  132. package/dist/builders/requestBuilders/where/static.js +49 -0
  133. package/dist/builders/requestBuilders/where/var.d.ts +13 -0
  134. package/dist/builders/requestBuilders/where/var.js +18 -0
  135. package/dist/builders/requestBuilders/where/where.d.ts +8 -0
  136. package/dist/builders/requestBuilders/where/where.js +6 -0
  137. package/dist/builders/transaction/transaction.d.ts +8 -0
  138. package/dist/builders/transaction/transaction.js +20 -0
  139. package/dist/columns/column.d.ts +72 -0
  140. package/dist/columns/column.js +101 -0
  141. package/dist/columns/index.d.ts +10 -0
  142. package/dist/columns/index.js +27 -0
  143. package/dist/columns/types/columnType.d.ts +7 -0
  144. package/dist/columns/types/columnType.js +6 -0
  145. package/dist/columns/types/pgBigDecimal.d.ts +10 -0
  146. package/dist/columns/types/pgBigDecimal.js +31 -0
  147. package/dist/columns/types/pgBigInt.d.ts +15 -0
  148. package/dist/columns/types/pgBigInt.js +32 -0
  149. package/dist/columns/types/pgBigSerial.d.ts +15 -0
  150. package/dist/columns/types/pgBigSerial.js +32 -0
  151. package/dist/columns/types/pgBoolean.d.ts +8 -0
  152. package/dist/columns/types/pgBoolean.js +18 -0
  153. package/dist/columns/types/pgEnum.d.ts +9 -0
  154. package/dist/columns/types/pgEnum.js +18 -0
  155. package/dist/columns/types/pgInteger.d.ts +8 -0
  156. package/dist/columns/types/pgInteger.js +21 -0
  157. package/dist/columns/types/pgJsonb.d.ts +9 -0
  158. package/dist/columns/types/pgJsonb.js +20 -0
  159. package/dist/columns/types/pgSerial.d.ts +8 -0
  160. package/dist/columns/types/pgSerial.js +18 -0
  161. package/dist/columns/types/pgSmallInt.d.ts +8 -0
  162. package/dist/columns/types/pgSmallInt.js +18 -0
  163. package/dist/columns/types/pgText.d.ts +8 -0
  164. package/dist/columns/types/pgText.js +18 -0
  165. package/dist/columns/types/pgTime.d.ts +8 -0
  166. package/dist/columns/types/pgTime.js +18 -0
  167. package/dist/columns/types/pgTimestamp.d.ts +8 -0
  168. package/dist/columns/types/pgTimestamp.js +18 -0
  169. package/dist/columns/types/pgTimestamptz.d.ts +8 -0
  170. package/dist/columns/types/pgTimestamptz.js +18 -0
  171. package/dist/columns/types/pgVarChar.d.ts +9 -0
  172. package/dist/columns/types/pgVarChar.js +24 -0
  173. package/dist/db/db.d.ts +18 -0
  174. package/dist/db/db.js +25 -0
  175. package/dist/db/dbConnector.d.ts +9 -0
  176. package/dist/db/dbConnector.js +32 -0
  177. package/dist/db/dbStringConnector.d.ts +6 -0
  178. package/dist/db/dbStringConnector.js +29 -0
  179. package/dist/db/group_by.d.ts +0 -0
  180. package/dist/db/group_by.js +68 -0
  181. package/dist/db/index.d.ts +4 -0
  182. package/dist/db/index.js +14 -0
  183. package/dist/db/session.d.ts +9 -0
  184. package/dist/db/session.js +16 -0
  185. package/dist/docs/cases/simple_delete.d.ts +1 -0
  186. package/dist/docs/cases/simple_delete.js +35 -0
  187. package/dist/docs/cases/simple_insert.d.ts +1 -0
  188. package/dist/docs/cases/simple_insert.js +57 -0
  189. package/dist/docs/cases/simple_join.d.ts +1 -0
  190. package/dist/docs/cases/simple_join.js +115 -0
  191. package/dist/docs/cases/simple_select.d.ts +1 -0
  192. package/dist/docs/cases/simple_select.js +50 -0
  193. package/dist/docs/cases/simple_update.d.ts +1 -0
  194. package/dist/docs/cases/simple_update.js +39 -0
  195. package/dist/docs/tables/citiesTable.d.ts +14 -0
  196. package/dist/docs/tables/citiesTable.js +21 -0
  197. package/dist/docs/tables/userGroupsTable.d.ts +7 -0
  198. package/dist/docs/tables/userGroupsTable.js +18 -0
  199. package/dist/docs/tables/usersTable.d.ts +17 -0
  200. package/dist/docs/tables/usersTable.js +35 -0
  201. package/dist/docs/tables/usersToUserGroups.d.ts +7 -0
  202. package/dist/docs/tables/usersToUserGroups.js +20 -0
  203. package/dist/docs/types/rolesType.d.ts +1 -0
  204. package/dist/docs/types/rolesType.js +6 -0
  205. package/dist/errors/baseError.d.ts +22 -0
  206. package/dist/errors/baseError.js +35 -0
  207. package/dist/errors/builderError.d.ts +14 -0
  208. package/dist/errors/builderError.js +25 -0
  209. package/dist/errors/dbErrors.d.ts +12 -0
  210. package/dist/errors/dbErrors.js +28 -0
  211. package/dist/index.d.ts +11 -0
  212. package/dist/index.js +31 -0
  213. package/dist/indexes/tableIndex.d.ts +11 -0
  214. package/dist/indexes/tableIndex.js +17 -0
  215. package/dist/logger/abstractLogger.d.ts +4 -0
  216. package/dist/logger/abstractLogger.js +5 -0
  217. package/dist/logger/consoleLogger.d.ts +5 -0
  218. package/dist/logger/consoleLogger.js +15 -0
  219. package/dist/mappers/index.d.ts +0 -0
  220. package/dist/mappers/index.js +1 -0
  221. package/dist/mappers/responseMapper.d.ts +10 -0
  222. package/dist/mappers/responseMapper.js +35 -0
  223. package/dist/migrator/index.d.ts +0 -0
  224. package/dist/migrator/index.js +1 -0
  225. package/dist/migrator/migrator.d.ts +11 -0
  226. package/dist/migrator/migrator.js +105 -0
  227. package/dist/serializer/serializer.d.ts +47 -0
  228. package/dist/serializer/serializer.js +258 -0
  229. package/dist/tables/abstractTable.d.ts +68 -0
  230. package/dist/tables/abstractTable.js +151 -0
  231. package/dist/tables/index.d.ts +3 -0
  232. package/dist/tables/index.js +11 -0
  233. package/dist/tables/inferTypes.d.ts +39 -0
  234. package/dist/tables/inferTypes.js +2 -0
  235. package/dist/tables/migrationsTable.d.ts +7 -0
  236. package/dist/tables/migrationsTable.js +18 -0
  237. package/dist/test.d.ts +1 -0
  238. package/dist/test.js +65 -0
  239. package/dist/types/type.d.ts +10 -0
  240. package/dist/types/type.js +14 -0
  241. package/dist/utils/ecranate.d.ts +2 -0
  242. package/dist/utils/ecranate.js +8 -0
  243. package/package.json +3 -7
  244. package/pnpm-lock.yaml +1842 -0
  245. package/src/builders/aggregators/abstractAggregator.ts +41 -0
  246. package/src/builders/aggregators/deleteAggregator.ts +44 -0
  247. package/src/builders/aggregators/insertAggregator.ts +120 -0
  248. package/src/builders/aggregators/selectAggregator.ts +163 -0
  249. package/src/builders/aggregators/updateAggregator.ts +56 -0
  250. package/src/builders/highLvlBuilders/abstractRequestBuilder.ts +51 -0
  251. package/src/builders/highLvlBuilders/deleteRequestBuilder.ts +59 -0
  252. package/src/builders/highLvlBuilders/insertRequestBuilder.ts +75 -0
  253. package/src/builders/highLvlBuilders/order.ts +4 -0
  254. package/src/builders/highLvlBuilders/selectRequestBuilder.ts +229 -0
  255. package/src/builders/highLvlBuilders/updateRequestBuilder.ts +80 -0
  256. package/src/builders/index.ts +21 -0
  257. package/src/builders/joinBuilders/builders/abstractJoinBuilder.ts +98 -0
  258. package/src/builders/joinBuilders/builders/selectWithFiveJoins.ts +110 -0
  259. package/src/builders/joinBuilders/builders/selectWithFourJoins.ts +254 -0
  260. package/src/builders/joinBuilders/builders/selectWithJoin.ts +189 -0
  261. package/src/builders/joinBuilders/builders/selectWithThreeJoins.ts +231 -0
  262. package/src/builders/joinBuilders/builders/selectWithTwoJoins.ts +210 -0
  263. package/src/builders/joinBuilders/join.ts +40 -0
  264. package/src/builders/joinBuilders/joinWith.ts +21 -0
  265. package/src/builders/joinBuilders/responses/selectResponseFiveJoins.ts +82 -0
  266. package/src/builders/joinBuilders/responses/selectResponseFourJoins.ts +73 -0
  267. package/src/builders/joinBuilders/responses/selectResponseThreeJoins.ts +64 -0
  268. package/src/builders/joinBuilders/responses/selectResponseTwoJoins.ts +57 -0
  269. package/src/builders/joinBuilders/responses/selectResponseWithJoin.ts +49 -0
  270. package/src/builders/joinBuilders/static.ts +9 -0
  271. package/src/builders/lowLvlBuilders/alter.ts +0 -0
  272. package/src/builders/lowLvlBuilders/create.ts +115 -0
  273. package/src/builders/lowLvlBuilders/delets/delete.ts +13 -0
  274. package/src/builders/lowLvlBuilders/delets/deleteFilter.ts +17 -0
  275. package/src/builders/lowLvlBuilders/delets/deleteFrom.ts +15 -0
  276. package/src/builders/lowLvlBuilders/inserts/insert.ts +11 -0
  277. package/src/builders/lowLvlBuilders/inserts/insertInto.ts +16 -0
  278. package/src/builders/lowLvlBuilders/inserts/onConflictInsert.ts +19 -0
  279. package/src/builders/lowLvlBuilders/inserts/valuesInsert.ts +27 -0
  280. package/src/builders/lowLvlBuilders/selects/select.ts +14 -0
  281. package/src/builders/lowLvlBuilders/selects/selectFrom.ts +50 -0
  282. package/src/builders/lowLvlBuilders/selects/selectJoined.ts +44 -0
  283. package/src/builders/lowLvlBuilders/selects/whereSelect.ts +36 -0
  284. package/src/builders/lowLvlBuilders/updates/update.ts +13 -0
  285. package/src/builders/lowLvlBuilders/updates/updateIn.ts +17 -0
  286. package/src/builders/lowLvlBuilders/updates/whereSelect.ts +17 -0
  287. package/src/builders/lowLvlBuilders/updates/whereSet.ts +21 -0
  288. package/src/builders/requestBuilders/updates/combine.ts +34 -0
  289. package/src/builders/requestBuilders/updates/increment.ts +24 -0
  290. package/src/builders/requestBuilders/updates/setObjects.ts +27 -0
  291. package/src/builders/requestBuilders/updates/static.ts +15 -0
  292. package/src/builders/requestBuilders/updates/updates.ts +8 -0
  293. package/src/builders/requestBuilders/where/and.ts +35 -0
  294. package/src/builders/requestBuilders/where/const.ts +23 -0
  295. package/src/builders/requestBuilders/where/constArray.ts +37 -0
  296. package/src/builders/requestBuilders/where/eqWhere.ts +20 -0
  297. package/src/builders/requestBuilders/where/greater.ts +20 -0
  298. package/src/builders/requestBuilders/where/greaterEq.ts +20 -0
  299. package/src/builders/requestBuilders/where/in.ts +20 -0
  300. package/src/builders/requestBuilders/where/isNotNull.ts +17 -0
  301. package/src/builders/requestBuilders/where/isNull.ts +17 -0
  302. package/src/builders/requestBuilders/where/less.ts +20 -0
  303. package/src/builders/requestBuilders/where/lessEq.ts +20 -0
  304. package/src/builders/requestBuilders/where/like.ts +20 -0
  305. package/src/builders/requestBuilders/where/notEqWhere.ts +20 -0
  306. package/src/builders/requestBuilders/where/or.ts +35 -0
  307. package/src/builders/requestBuilders/where/rawWhere.ts +10 -0
  308. package/src/builders/requestBuilders/where/static.ts +60 -0
  309. package/src/builders/requestBuilders/where/var.ts +19 -0
  310. package/src/builders/requestBuilders/where/where.ts +5 -0
  311. package/src/builders/transaction/transaction.ts +21 -0
  312. package/src/columns/column.ts +195 -0
  313. package/src/columns/index.ts +10 -0
  314. package/src/columns/types/columnType.ts +8 -0
  315. package/src/columns/types/pgBigDecimal.ts +29 -0
  316. package/src/columns/types/pgBigInt.ts +36 -0
  317. package/src/columns/types/pgBigSerial.ts +36 -0
  318. package/src/columns/types/pgBoolean.ts +18 -0
  319. package/src/columns/types/pgEnum.ts +17 -0
  320. package/src/columns/types/pgInteger.ts +21 -0
  321. package/src/columns/types/pgJsonb.ts +21 -0
  322. package/src/columns/types/pgSerial.ts +18 -0
  323. package/src/columns/types/pgSmallInt.ts +18 -0
  324. package/src/columns/types/pgText.ts +18 -0
  325. package/src/columns/types/pgTime.ts +18 -0
  326. package/src/columns/types/pgTimestamp.ts +18 -0
  327. package/src/columns/types/pgTimestamptz.ts +18 -0
  328. package/src/columns/types/pgVarChar.ts +24 -0
  329. package/src/db/db.ts +43 -0
  330. package/src/db/dbConnector.ts +30 -0
  331. package/src/db/dbStringConnector.ts +29 -0
  332. package/src/db/group_by.ts +75 -0
  333. package/src/db/index.ts +4 -0
  334. package/src/db/session.ts +16 -0
  335. package/src/docs/cases/simple_delete.ts +35 -0
  336. package/src/docs/cases/simple_insert.ts +65 -0
  337. package/src/docs/cases/simple_join.ts +140 -0
  338. package/src/docs/cases/simple_select.ts +72 -0
  339. package/src/docs/cases/simple_update.ts +40 -0
  340. package/src/docs/tables/citiesTable.ts +22 -0
  341. package/src/docs/tables/userGroupsTable.ts +12 -0
  342. package/src/docs/tables/usersTable.ts +33 -0
  343. package/src/docs/tables/usersToUserGroups.ts +14 -0
  344. package/src/docs/types/rolesType.ts +4 -0
  345. package/src/errors/baseError.ts +47 -0
  346. package/src/errors/builderError.ts +31 -0
  347. package/src/errors/dbErrors.ts +24 -0
  348. package/src/index.ts +20 -0
  349. package/src/indexes/tableIndex.ts +25 -0
  350. package/src/logger/abstractLogger.ts +4 -0
  351. package/src/logger/consoleLogger.ts +11 -0
  352. package/src/mappers/index.ts +0 -0
  353. package/src/mappers/responseMapper.ts +46 -0
  354. package/src/migrator/index.ts +0 -0
  355. package/src/migrator/migrator.ts +97 -0
  356. package/src/serializer/serializer.ts +336 -0
  357. package/src/tables/abstractTable.ts +188 -0
  358. package/src/tables/index.ts +4 -0
  359. package/src/tables/inferTypes.ts +67 -0
  360. package/src/tables/migrationsTable.ts +11 -0
  361. package/src/types/type.ts +15 -0
  362. package/src/utils/ecranate.ts +4 -0
  363. package/tsconfig.json +14 -0
@@ -0,0 +1,37 @@
1
+ import { shouldEcranate } from '../../../utils/ecranate';
2
+ import Expr from './where';
3
+
4
+ export default class ConstArray extends Expr {
5
+ private values: Array<any>;
6
+
7
+ public constructor(values: Array<any>) {
8
+ super();
9
+ this.values = values;
10
+ }
11
+
12
+ public toQuery = (position?: number): { query: string, values: Array<any> } => {
13
+ let nextPosition = position || 1;
14
+
15
+ const finalArray: string[] = [];
16
+ const finalValues: string[] = [];
17
+ for (let i = 0; i < this.values.length; i += 1) {
18
+ const value = this.values[i];
19
+ if (value instanceof Date) {
20
+ finalArray.push(`$${nextPosition}`);
21
+ finalValues.push(`${value.toISOString()}`);
22
+ } else if (shouldEcranate(value)) {
23
+ finalArray.push(`$${nextPosition}`);
24
+ finalValues.push(`${value.toString()}`);
25
+ } else {
26
+ finalArray.push(`$${nextPosition}`);
27
+ finalValues.push(value);
28
+ }
29
+ if (i < this.values.length - 1) {
30
+ finalArray.push(',');
31
+ }
32
+
33
+ nextPosition += 1;
34
+ }
35
+ return { query: finalArray.join(''), values: finalValues };
36
+ };
37
+ }
@@ -0,0 +1,20 @@
1
+ /* eslint-disable max-len */
2
+ import Expr from './where';
3
+
4
+ export default class EqWhere extends Expr {
5
+ private left: Expr;
6
+ private right: Expr;
7
+
8
+ public constructor(left: Expr, right: Expr) {
9
+ super();
10
+ this.left = left;
11
+ this.right = right;
12
+ }
13
+
14
+ public toQuery = (position?: number, tableCache?: {[tableName: string]: string}): { query: string, values: Array<any>} => {
15
+ const rightPreparedValues = this.right.toQuery(position, tableCache);
16
+ const leftPreparedValues = this.left.toQuery(position, tableCache);
17
+
18
+ return { query: `${leftPreparedValues.query}=${rightPreparedValues.query}`, values: [...leftPreparedValues.values, ...rightPreparedValues.values] };
19
+ };
20
+ }
@@ -0,0 +1,20 @@
1
+ /* eslint-disable max-len */
2
+ import Expr from './where';
3
+
4
+ export default class Greater extends Expr {
5
+ private left: Expr;
6
+ private right: Expr;
7
+
8
+ public constructor({ left, right }: { left: Expr; right: Expr; }) {
9
+ super();
10
+ this.left = left;
11
+ this.right = right;
12
+ }
13
+
14
+ public toQuery = (position: number, tableCache?: {[tableName: string]: string}): { query: string, values: Array<any> } => {
15
+ const rightPreparedValues = this.right.toQuery(position, tableCache);
16
+ const leftPreparedValues = this.left.toQuery(position, tableCache);
17
+
18
+ return { query: `${leftPreparedValues.query} > ${rightPreparedValues.query}`, values: [...leftPreparedValues.values, ...rightPreparedValues.values] };
19
+ };
20
+ }
@@ -0,0 +1,20 @@
1
+ /* eslint-disable max-len */
2
+ import Expr from './where';
3
+
4
+ export default class GreaterEq extends Expr {
5
+ private left: Expr;
6
+ private right: Expr;
7
+
8
+ public constructor({ left, right }: { left: Expr; right: Expr; }) {
9
+ super();
10
+ this.left = left;
11
+ this.right = right;
12
+ }
13
+
14
+ public toQuery = (position: number, tableCache?: {[tableName: string]: string}): { query: string, values: Array<any> } => {
15
+ const rightPreparedValues = this.right.toQuery(position, tableCache);
16
+ const leftPreparedValues = this.left.toQuery(position, tableCache);
17
+
18
+ return { query: `${leftPreparedValues.query} >= ${rightPreparedValues.query}`, values: [...leftPreparedValues.values, ...rightPreparedValues.values] };
19
+ };
20
+ }
@@ -0,0 +1,20 @@
1
+ /* eslint-disable max-len */
2
+ import Expr from './where';
3
+
4
+ export default class In extends Expr {
5
+ private left: Expr;
6
+ private right: Expr;
7
+
8
+ public constructor(left: Expr, right: Expr) {
9
+ super();
10
+ this.left = left;
11
+ this.right = right;
12
+ }
13
+
14
+ public toQuery = (position?: number, tableCache?: {[tableName: string]: string}): { query: string, values: Array<any> } => {
15
+ const rightPreparedValues = this.right.toQuery(position, tableCache);
16
+ const leftPreparedValues = this.left.toQuery(position, tableCache);
17
+
18
+ return { query: `${leftPreparedValues.query} in (${rightPreparedValues.query})`, values: [...leftPreparedValues.values, ...rightPreparedValues.values] };
19
+ };
20
+ }
@@ -0,0 +1,17 @@
1
+ /* eslint-disable max-len */
2
+ import Expr from './where';
3
+
4
+ export default class IsNotNull extends Expr {
5
+ private left: Expr;
6
+
7
+ public constructor(left: Expr) {
8
+ super();
9
+ this.left = left;
10
+ }
11
+
12
+ public toQuery = (position?: number, tableCache?: {[tableName: string]: string}): { query: string, values: Array<any> } => {
13
+ const leftPreparedValues = this.left.toQuery(position, tableCache);
14
+
15
+ return { query: `${leftPreparedValues.query} is not null`, values: leftPreparedValues.values };
16
+ };
17
+ }
@@ -0,0 +1,17 @@
1
+ /* eslint-disable max-len */
2
+ import Expr from './where';
3
+
4
+ export default class IsNull extends Expr {
5
+ private left: Expr;
6
+
7
+ public constructor(left: Expr) {
8
+ super();
9
+ this.left = left;
10
+ }
11
+
12
+ public toQuery = (position?: number, tableCache?: {[tableName: string]: string}): { query: string, values: Array<any> } => {
13
+ const leftPreparedValues = this.left.toQuery(position, tableCache);
14
+
15
+ return { query: `${leftPreparedValues.query} is null`, values: leftPreparedValues.values };
16
+ };
17
+ }
@@ -0,0 +1,20 @@
1
+ /* eslint-disable max-len */
2
+ import Expr from './where';
3
+
4
+ export default class Less extends Expr {
5
+ private left: Expr;
6
+ private right: Expr;
7
+
8
+ public constructor({ left, right }: { left: Expr; right: Expr; }) {
9
+ super();
10
+ this.left = left;
11
+ this.right = right;
12
+ }
13
+
14
+ public toQuery = (position?: number, tableCache?: {[tableName: string]: string}): { query: string, values: Array<any> } => {
15
+ const rightPreparedValues = this.right.toQuery(position, tableCache);
16
+ const leftPreparedValues = this.left.toQuery(position, tableCache);
17
+
18
+ return { query: `${leftPreparedValues.query} < ${rightPreparedValues.query}`, values: [...leftPreparedValues.values, ...rightPreparedValues.values] };
19
+ };
20
+ }
@@ -0,0 +1,20 @@
1
+ /* eslint-disable max-len */
2
+ import Expr from './where';
3
+
4
+ export default class LessEq extends Expr {
5
+ private left: Expr;
6
+ private right: Expr;
7
+
8
+ public constructor({ left, right }: { left: Expr; right: Expr; }) {
9
+ super();
10
+ this.left = left;
11
+ this.right = right;
12
+ }
13
+
14
+ public toQuery = (position?: number, tableCache?: {[tableName: string]: string}): { query: string, values: Array<any> } => {
15
+ const rightPreparedValues = this.right.toQuery(position, tableCache);
16
+ const leftPreparedValues = this.left.toQuery(position, tableCache);
17
+
18
+ return { query: `${leftPreparedValues.query} <= ${rightPreparedValues.query}`, values: [...leftPreparedValues.values, ...rightPreparedValues.values] };
19
+ };
20
+ }
@@ -0,0 +1,20 @@
1
+ /* eslint-disable max-len */
2
+ import Expr from './where';
3
+
4
+ export default class Like extends Expr {
5
+ private left: Expr;
6
+ private right: Expr;
7
+
8
+ public constructor(left: Expr, right: Expr) {
9
+ super();
10
+ this.left = left;
11
+ this.right = right;
12
+ }
13
+
14
+ public toQuery = (position?: number, tableCache?: {[tableName: string]: string}): { query: string, values: Array<any> } => {
15
+ const rightPreparedValues = this.right.toQuery(position, tableCache);
16
+ const leftPreparedValues = this.left.toQuery(position, tableCache);
17
+
18
+ return { query: `${leftPreparedValues.query} like ${rightPreparedValues.query}`, values: [...leftPreparedValues.values, ...rightPreparedValues.values] };
19
+ };
20
+ }
@@ -0,0 +1,20 @@
1
+ /* eslint-disable max-len */
2
+ import Expr from './where';
3
+
4
+ export default class NotEqWhere extends Expr {
5
+ private left: Expr;
6
+ private right: Expr;
7
+
8
+ public constructor(left: Expr, right: Expr) {
9
+ super();
10
+ this.left = left;
11
+ this.right = right;
12
+ }
13
+
14
+ public toQuery = (position?: number, tableCache?: {[tableName: string]: string}): { query: string, values: Array<any> } => {
15
+ const rightPreparedValues = this.right.toQuery(position, tableCache);
16
+ const leftPreparedValues = this.left.toQuery(position, tableCache);
17
+
18
+ return { query: `${leftPreparedValues.query}!=${rightPreparedValues.query}`, values: [...leftPreparedValues.values, ...rightPreparedValues.values] };
19
+ };
20
+ }
@@ -0,0 +1,35 @@
1
+ /* eslint-disable max-len */
2
+ import Expr from './where';
3
+
4
+ export default class Or extends Expr {
5
+ private expressions: Expr[];
6
+
7
+ public constructor(expressions: Expr[]) {
8
+ super();
9
+ this.expressions = expressions;
10
+ }
11
+
12
+ public toQuery = (position?: number, tableCache?: {[tableName: string]: string}): { query: string, values: Array<any> } => {
13
+ let nextPosition = position || 1;
14
+
15
+ const result: string[] = ['('];
16
+ const valuesResult: Array<any> = [];
17
+ for (let i = 0; i < this.expressions.length; i += 1) {
18
+ const expression = this.expressions[i];
19
+
20
+ const expressionResult = expression.toQuery(nextPosition, tableCache);
21
+
22
+ valuesResult.push(...expressionResult.values);
23
+ result.push(expressionResult.query);
24
+
25
+ nextPosition += expressionResult.values.length;
26
+
27
+ if (i < this.expressions.length - 1) {
28
+ result.push(' or ');
29
+ }
30
+ }
31
+ result.push(')');
32
+
33
+ return { query: result.join(''), values: valuesResult };
34
+ };
35
+ }
@@ -0,0 +1,10 @@
1
+ /* eslint-disable max-len */
2
+ import Expr from './where';
3
+
4
+ export default class RawWhere extends Expr {
5
+ public constructor(private custom: string) {
6
+ super();
7
+ }
8
+
9
+ public toQuery = (): { query: string, values: Array<any> } => ({ query: this.custom, values: [] });
10
+ }
@@ -0,0 +1,60 @@
1
+ import { AbstractColumn } from '../../../columns/column';
2
+ import ColumnType from '../../../columns/types/columnType';
3
+ import { ExtractCodeType } from '../../../tables/inferTypes';
4
+ import And from './and';
5
+ import Const from './const';
6
+ import ConstArray from './constArray';
7
+ import EqWhere from './eqWhere';
8
+ import Greater from './greater';
9
+ import GreaterEq from './greaterEq';
10
+ import In from './in';
11
+ import IsNotNull from './isNotNull';
12
+ import IsNull from './isNull';
13
+ import Less from './less';
14
+ import LessEq from './lessEq';
15
+ import Like from './like';
16
+ import NotEqWhere from './notEqWhere';
17
+ import Or from './or';
18
+ import RawWhere from './rawWhere';
19
+ import Var from './var';
20
+ import Expr from './where';
21
+
22
+ // eslint-disable-next-line max-len
23
+ export const eq = <T extends AbstractColumn<ColumnType<any>, boolean, boolean>>(
24
+ left: T, value: ExtractCodeType<T>): Expr => new EqWhere(new Var<T>(left), new Const(value));
25
+
26
+ export const raw = (customQuery: string): Expr => new RawWhere(customQuery);
27
+
28
+ export const and = (expressions: Expr[]): Expr => new And(expressions);
29
+
30
+ export const or = (expressions: Expr[]): Expr => new Or(expressions);
31
+
32
+ export const like = <T extends AbstractColumn<ColumnType<any>, boolean, boolean>>(left: T,
33
+ value: ExtractCodeType<T>): Expr => new Like(new Var<T>(left), new Const(value));
34
+
35
+ export const inArray = <T extends AbstractColumn<ColumnType<any>, boolean, boolean>>(left: T,
36
+ value: ExtractCodeType<T>[]): Expr => new In(new Var<T>(left), new ConstArray(value));
37
+
38
+ export const greater = <T extends AbstractColumn<ColumnType<any>, boolean, boolean>>(left: T,
39
+ value: ExtractCodeType<T>)
40
+ : Expr => new Greater({ left: new Var<T>(left), right: new Const(value) });
41
+
42
+ export const less = <T extends AbstractColumn<ColumnType<any>, boolean, boolean>>(left: T,
43
+ value: ExtractCodeType<T>): Expr => new Less({ left: new Var<T>(left), right: new Const(value) });
44
+
45
+ export const greaterEq = <T extends AbstractColumn<ColumnType<any>, boolean, boolean>>(left: T,
46
+ value: ExtractCodeType<T>)
47
+ : Expr => new GreaterEq({ left: new Var<T>(left), right: new Const(value) });
48
+
49
+ export const lessEq = <T extends AbstractColumn<ColumnType<any>, boolean, boolean>>(left: T,
50
+ value: ExtractCodeType<T>)
51
+ : Expr => new LessEq({ left: new Var<T>(left), right: new Const(value) });
52
+
53
+ export const isNull = <T extends AbstractColumn<ColumnType<any>, boolean, boolean>>(
54
+ left: T): Expr => new IsNull(new Var<T>(left));
55
+
56
+ export const isNotNull = <T extends AbstractColumn<ColumnType<any>, boolean, boolean>>(
57
+ left: T): Expr => new IsNotNull(new Var<T>(left));
58
+
59
+ export const notEq = <T extends AbstractColumn<ColumnType<any>, boolean, boolean>>(
60
+ left: T, value: ExtractCodeType<T>): Expr => new NotEqWhere(new Var<T>(left), new Const(value));
@@ -0,0 +1,19 @@
1
+ /* eslint-disable max-len */
2
+ import { AbstractColumn } from '../../../columns/column';
3
+ import ColumnType from '../../../columns/types/columnType';
4
+ import { ecranate } from '../../../utils/ecranate';
5
+ import Expr from './where';
6
+
7
+ export default class Var<T extends AbstractColumn<ColumnType<any>, boolean, boolean>> extends Expr {
8
+ private column: T;
9
+
10
+ public constructor(column: T) {
11
+ super();
12
+ this.column = column;
13
+ }
14
+
15
+ public toQuery = (postition?: number, tableCache?: {[tableName: string]: string}): { query: string, values: Array<any> } => {
16
+ const tableName = tableCache && tableCache[this.column.getParentName()] ? tableCache[this.column.getParentName()] : this.column.getParentName();
17
+ return { query: `${tableName}.${ecranate(this.column.getColumnName())}`, values: [] };
18
+ };
19
+ }
@@ -0,0 +1,5 @@
1
+ /* eslint-disable max-classes-per-file */
2
+ export default abstract class Expr {
3
+ abstract toQuery(position?: number, tableCache?: {[tableName: string]: string})
4
+ : { query: string, values: Array<any> };
5
+ }
@@ -0,0 +1,21 @@
1
+ import { ISession } from '../../db/session';
2
+
3
+ export default class Transaction {
4
+ public constructor(private session: ISession) {
5
+ }
6
+
7
+ public begin = async (): Promise<Transaction> => {
8
+ await this.session.execute('BEGIN;');
9
+ return this;
10
+ };
11
+
12
+ public commit = async (): Promise<Transaction> => {
13
+ await this.session.execute('COMMIT;');
14
+ return this;
15
+ };
16
+
17
+ public rollback = async (): Promise<Transaction> => {
18
+ await this.session.execute('ROLLBACK;');
19
+ return this;
20
+ };
21
+ }
@@ -0,0 +1,195 @@
1
+ /* eslint-disable @typescript-eslint/no-unused-vars */
2
+ /* eslint-disable max-len */
3
+ /* eslint-disable max-classes-per-file */
4
+ import { PgTime, PgTimestamp } from '.';
5
+ import DB from '../db/db';
6
+ import CitiesTable from '../docs/tables/citiesTable';
7
+ import UsersTable from '../docs/tables/usersTable';
8
+ import { AbstractTable } from '../tables';
9
+ import { shouldEcranate } from '../utils/ecranate';
10
+ import ColumnType from './types/columnType';
11
+ import PgTimestamptz from './types/pgTimestamptz';
12
+
13
+ export enum Defaults {
14
+ CURRENT_TIMESTAMP = 'CURRENT_TIMESTAMP',
15
+ }
16
+
17
+ type PgTimes = PgTimestamptz | PgTime | PgTimestamp;
18
+
19
+ export type ExtractColumnType<T extends ColumnType> =
20
+ T extends ColumnType<infer TCodeType> ?
21
+ T extends PgTimes ? TCodeType | Defaults : TCodeType
22
+ : never;
23
+
24
+ // eslint-disable-next-line max-len
25
+ export abstract class AbstractColumn<T extends ColumnType, TNullable extends boolean = true, TAutoIncrement extends boolean = false, TParent extends AbstractTable<any> = any> {
26
+ public isNullableFlag: boolean = true;
27
+ public primaryKeyName?: string;
28
+ public uniqueKeyName?: string;
29
+
30
+ protected onDelete?: string;
31
+ protected onUpdate?: string;
32
+ protected parent: TParent;
33
+
34
+ protected parentTableName: string;
35
+ protected columnType: T;
36
+ protected columnName: string;
37
+ protected defaultParam: any = null;
38
+ protected referenced: AbstractColumn<T, boolean, boolean>;
39
+
40
+ public constructor(parent: TParent, columnName: string,
41
+ columnType: T) {
42
+ this.columnType = columnType;
43
+ this.columnName = columnName;
44
+ this.parentTableName = parent.tableName();
45
+ this.parent = parent;
46
+ }
47
+
48
+ public getOnDelete = (): string | undefined => this.onDelete;
49
+ public getOnUpdate = (): string | undefined => this.onUpdate;
50
+
51
+ public getAlias = (): string => `${this.parentTableName.replace('.', '_')}_${this.columnName}`;
52
+
53
+ public getParent = (): AbstractTable<any> => this.parent;
54
+
55
+ public getParentName = (): string => this.parentTableName;
56
+
57
+ public abstract foreignKey<ITable extends AbstractTable<ITable>>(
58
+ table: new (db: DB) => ITable,
59
+ callback: (table: ITable) => Column<any, boolean, boolean, ITable>,
60
+ onConstraint?: {
61
+ onDelete?: 'CASCADE' | 'RESTRICT' | 'SET NULL' | 'SET DEFAULT',
62
+ onUpdate?: 'CASCADE' | 'RESTRICT' | 'SET NULL' | 'SET DEFAULT'
63
+ },
64
+ ): AbstractColumn<T, TNullable, TAutoIncrement, TParent>;
65
+
66
+ public abstract selfForeignKey(
67
+ column: Column<any, boolean, boolean, TParent>,
68
+ onConstraint?: {
69
+ onDelete?: 'CASCADE' | 'RESTRICT' | 'SET NULL' | 'SET DEFAULT',
70
+ onUpdate?: 'CASCADE' | 'RESTRICT' | 'SET NULL' | 'SET DEFAULT'
71
+ },
72
+ ): AbstractColumn<T, TNullable, TAutoIncrement, TParent>;
73
+
74
+ public defaultValue = (value: ExtractColumnType<T>) => {
75
+ if (Defaults[value as Defaults] !== undefined) {
76
+ this.defaultParam = value;
77
+ } else if (typeof value === 'boolean' || typeof value === 'number' || typeof value === 'bigint') {
78
+ this.defaultParam = value;
79
+ } else {
80
+ this.defaultParam = `'${value}'`;
81
+ }
82
+ return this;
83
+ };
84
+
85
+ public abstract primaryKey(): AbstractColumn<T, boolean, boolean, TParent>;
86
+
87
+ public unique = () => {
88
+ this.uniqueKeyName = this.columnName;
89
+ return this;
90
+ };
91
+
92
+ public abstract notNull(): AbstractColumn<T, boolean, boolean, TParent>;
93
+
94
+ public getColumnName = (): string => this.columnName;
95
+
96
+ public getReferenced = (): AbstractColumn<T, boolean, boolean, TParent> => this.referenced;
97
+
98
+ public getColumnType = (): T => this.columnType;
99
+
100
+ public getDefaultValue = (): any => this.defaultParam;
101
+ }
102
+
103
+ // eslint-disable-next-line max-len
104
+ export class Column<T extends ColumnType, TNullable extends boolean = true, TAutoIncrement extends boolean = false, TParent extends AbstractTable<any> = any>
105
+ extends AbstractColumn<T, TNullable, TAutoIncrement, TParent> {
106
+ public constructor(parent: TParent, columnName: string,
107
+ columnType: T) {
108
+ super(parent, columnName, columnType);
109
+ }
110
+
111
+ public notNull(): Column<T, TAutoIncrement extends true ? true : TNullable extends true ? false : true, TAutoIncrement, TParent> {
112
+ this.isNullableFlag = false;
113
+ return this as Column<T, TAutoIncrement extends true ? true : TNullable extends true ? false : true, TAutoIncrement, TParent>;
114
+ }
115
+
116
+ public primaryKey(): Column<T, TAutoIncrement extends true ? true : false, TAutoIncrement, TParent> {
117
+ this.primaryKeyName = `${this.parentTableName}_${this.columnName}`;
118
+ return this as Column<T, TAutoIncrement extends true ? true : false, TAutoIncrement, TParent>;
119
+ }
120
+
121
+ public foreignKey<ITable extends AbstractTable<ITable>>(
122
+ table: new (db: DB) => ITable,
123
+ callback: (table: ITable) => Column<any, boolean, boolean, ITable>,
124
+ onConstraint?: {
125
+ onDelete?: 'CASCADE' | 'RESTRICT' | 'SET NULL' | 'SET DEFAULT',
126
+ onUpdate?: 'CASCADE' | 'RESTRICT' | 'SET NULL' | 'SET DEFAULT'
127
+ },
128
+ ): Column<T, TNullable, TAutoIncrement, TParent> {
129
+ const tableInstance: ITable = this.getParent().db.create(table);
130
+ this.referenced = callback(tableInstance);
131
+ this.onDelete = onConstraint?.onDelete ? `ON DELETE ${onConstraint.onDelete}` : undefined;
132
+ this.onUpdate = onConstraint?.onUpdate ? `ON UPDATE ${onConstraint.onUpdate}` : undefined;
133
+ return this;
134
+ }
135
+
136
+ public selfForeignKey(
137
+ column: Column<any, boolean, boolean, TParent>,
138
+ onConstraint?: {
139
+ onDelete?: 'CASCADE' | 'RESTRICT' | 'SET NULL' | 'SET DEFAULT',
140
+ onUpdate?: 'CASCADE' | 'RESTRICT' | 'SET NULL' | 'SET DEFAULT'
141
+ },
142
+ ): Column<T, TNullable, TAutoIncrement, TParent> {
143
+ this.referenced = column;
144
+ this.onDelete = onConstraint?.onDelete ? `ON DELETE ${onConstraint.onDelete}` : undefined;
145
+ this.onUpdate = onConstraint?.onUpdate ? `ON UPDATE ${onConstraint.onUpdate}` : undefined;
146
+ return this;
147
+ }
148
+ }
149
+
150
+ // eslint-disable-next-line max-len
151
+ export class IndexedColumn<T extends ColumnType, TNullable extends boolean = true, TAutoIncrement extends boolean = false, TParent extends AbstractTable<any> = any> extends AbstractColumn<T, TNullable, TAutoIncrement, TParent> {
152
+ public constructor(parent: TParent, columnName: string,
153
+ columnType: T, nullable: TNullable) {
154
+ super(parent, columnName, columnType);
155
+ }
156
+
157
+ public notNull(): IndexedColumn<T, TAutoIncrement extends true ? true : TNullable extends true? false : true, TAutoIncrement, TParent> {
158
+ this.isNullableFlag = false;
159
+ return this as IndexedColumn<T, TAutoIncrement extends true ? true : TNullable extends true? false : true, TAutoIncrement, TParent>;
160
+ }
161
+
162
+ public primaryKey(): IndexedColumn<T, TAutoIncrement extends true ? true : false, TAutoIncrement, TParent> {
163
+ this.primaryKeyName = `${this.parentTableName}_${this.columnName}`;
164
+ // eslint-disable-next-line max-len
165
+ return this as IndexedColumn<T, TAutoIncrement extends true ? true : false, TAutoIncrement, TParent>;
166
+ }
167
+
168
+ public foreignKey<ITable extends AbstractTable<ITable>>(
169
+ table: new (db: DB) => ITable,
170
+ callback: (table: ITable) => Column<any, boolean, boolean, ITable>,
171
+ onConstraint?: {
172
+ onDelete?: 'CASCADE' | 'RESTRICT' | 'SET NULL' | 'SET DEFAULT',
173
+ onUpdate?: 'CASCADE' | 'RESTRICT' | 'SET NULL' | 'SET DEFAULT'
174
+ },
175
+ ): IndexedColumn<T, TNullable, TAutoIncrement, TParent> {
176
+ // eslint-disable-next-line new-cap
177
+ this.referenced = callback(this.getParent().db.create(table));
178
+ this.onDelete = onConstraint?.onDelete ? `ON DELETE ${onConstraint.onDelete}` : undefined;
179
+ this.onUpdate = onConstraint?.onUpdate ? `ON UPDATE ${onConstraint.onUpdate}` : undefined;
180
+ return this;
181
+ }
182
+
183
+ public selfForeignKey<ITable extends AbstractTable<ITable>>(
184
+ column: Column<any, boolean, boolean, TParent>,
185
+ onConstraint?: {
186
+ onDelete?: 'CASCADE' | 'RESTRICT' | 'SET NULL' | 'SET DEFAULT',
187
+ onUpdate?: 'CASCADE' | 'RESTRICT' | 'SET NULL' | 'SET DEFAULT'
188
+ },
189
+ ): IndexedColumn<T, TNullable, TAutoIncrement, TParent> {
190
+ this.referenced = column;
191
+ this.onDelete = onConstraint?.onDelete ? `ON DELETE ${onConstraint.onDelete}` : undefined;
192
+ this.onUpdate = onConstraint?.onUpdate ? `ON UPDATE ${onConstraint.onUpdate}` : undefined;
193
+ return this;
194
+ }
195
+ }
@@ -0,0 +1,10 @@
1
+ export { Column, ExtractColumnType, Defaults } from './column';
2
+ export { default as PgBigDecimal } from './types/pgBigDecimal';
3
+ export { default as PgBigInt } from './types/pgBigInt';
4
+ export { default as PgBoolean } from './types/pgBoolean';
5
+ export { default as PgInteger } from './types/pgInteger';
6
+ export { default as PgJsonb } from './types/pgJsonb';
7
+ export { default as PgText } from './types/pgText';
8
+ export { default as PgTime } from './types/pgTime';
9
+ export { default as PgTimestamp } from './types/pgTimestamp';
10
+ export { default as PgVarChar } from './types/pgVarChar';
@@ -0,0 +1,8 @@
1
+ // eslint-disable-next-line max-classes-per-file
2
+ export default abstract class ColumnType<TCodeType = {}> {
3
+ public codeType: TCodeType;
4
+ protected abstract dbName: string;
5
+ abstract getDbName(): string;
6
+ abstract insertStrategy(value: TCodeType): string;
7
+ abstract selectStrategy(value: any): TCodeType | undefined;
8
+ }
@@ -0,0 +1,29 @@
1
+ import ColumnType from './columnType';
2
+
3
+ export default class PgBigDecimal extends ColumnType<number> {
4
+ public precision?: number;
5
+ public scale?: number;
6
+ public dbName: string;
7
+
8
+ public constructor(precision?: number, scale?: number) {
9
+ super();
10
+ this.precision = precision;
11
+ this.scale = scale;
12
+ if (this.scale && !this.precision) {
13
+ throw new Error('In numeric scale should be set up together with precision');
14
+ }
15
+ if (this.precision && !this.scale) {
16
+ this.dbName = `numeric(${this.precision})`;
17
+ } else if (this.precision && this.scale) {
18
+ this.dbName = `numeric(${this.precision},${this.scale})`;
19
+ } else { this.dbName = 'numeric'; }
20
+ }
21
+
22
+ public getDbName = (): string => this.dbName;
23
+
24
+ public insertStrategy = (value: number): string => `${value}`;
25
+
26
+ public selectStrategy(value: string): number | undefined {
27
+ return value ? parseFloat(value) : undefined;
28
+ }
29
+ }