drizzle-orm 0.9.0 → 0.9.4

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/builders/aggregators/abstractAggregator.d.ts +9 -0
  2. package/builders/aggregators/abstractAggregator.js +28 -0
  3. package/builders/aggregators/deleteAggregator.d.ts +12 -0
  4. package/builders/aggregators/deleteAggregator.js +36 -0
  5. package/builders/aggregators/insertAggregator.d.ts +18 -0
  6. package/builders/aggregators/insertAggregator.js +94 -0
  7. package/builders/aggregators/selectAggregator.d.ts +26 -0
  8. package/builders/aggregators/selectAggregator.js +106 -0
  9. package/builders/aggregators/updateAggregator.d.ts +15 -0
  10. package/builders/aggregators/updateAggregator.js +41 -0
  11. package/builders/highLvlBuilders/abstractRequestBuilder.d.ts +21 -0
  12. package/builders/highLvlBuilders/abstractRequestBuilder.js +21 -0
  13. package/builders/highLvlBuilders/deleteRequestBuilder.d.ts +17 -0
  14. package/builders/highLvlBuilders/deleteRequestBuilder.js +43 -0
  15. package/builders/highLvlBuilders/insertRequestBuilder.d.ts +18 -0
  16. package/builders/highLvlBuilders/insertRequestBuilder.js +54 -0
  17. package/builders/highLvlBuilders/order.d.ts +5 -0
  18. package/builders/highLvlBuilders/order.js +8 -0
  19. package/builders/highLvlBuilders/selectRequestBuilder.d.ts +42 -0
  20. package/builders/highLvlBuilders/selectRequestBuilder.js +99 -0
  21. package/builders/highLvlBuilders/updateRequestBuilder.d.ts +20 -0
  22. package/builders/highLvlBuilders/updateRequestBuilder.js +54 -0
  23. package/{src/builders/index.ts → builders/index.d.ts} +2 -4
  24. package/builders/index.js +50 -0
  25. package/builders/joinBuilders/builders/abstractJoinBuilder.d.ts +27 -0
  26. package/builders/joinBuilders/builders/abstractJoinBuilder.js +42 -0
  27. package/builders/joinBuilders/builders/selectWithFiveJoins.d.ts +23 -0
  28. package/builders/joinBuilders/builders/selectWithFiveJoins.js +33 -0
  29. package/builders/joinBuilders/builders/selectWithFourJoins.d.ts +36 -0
  30. package/builders/joinBuilders/builders/selectWithFourJoins.js +65 -0
  31. package/builders/joinBuilders/builders/selectWithJoin.d.ts +33 -0
  32. package/builders/joinBuilders/builders/selectWithJoin.js +56 -0
  33. package/builders/joinBuilders/builders/selectWithThreeJoins.d.ts +35 -0
  34. package/builders/joinBuilders/builders/selectWithThreeJoins.js +62 -0
  35. package/builders/joinBuilders/builders/selectWithTwoJoins.d.ts +34 -0
  36. package/builders/joinBuilders/builders/selectWithTwoJoins.js +59 -0
  37. package/builders/joinBuilders/join.d.ts +23 -0
  38. package/builders/joinBuilders/join.js +28 -0
  39. package/builders/joinBuilders/joinWith.d.ts +14 -0
  40. package/builders/joinBuilders/joinWith.js +11 -0
  41. package/builders/joinBuilders/responses/selectResponseFiveJoins.d.ts +19 -0
  42. package/builders/joinBuilders/responses/selectResponseFiveJoins.js +35 -0
  43. package/builders/joinBuilders/responses/selectResponseFourJoins.d.ts +18 -0
  44. package/builders/joinBuilders/responses/selectResponseFourJoins.js +34 -0
  45. package/builders/joinBuilders/responses/selectResponseThreeJoins.d.ts +17 -0
  46. package/builders/joinBuilders/responses/selectResponseThreeJoins.js +33 -0
  47. package/builders/joinBuilders/responses/selectResponseTwoJoins.d.ts +16 -0
  48. package/builders/joinBuilders/responses/selectResponseTwoJoins.js +32 -0
  49. package/builders/joinBuilders/responses/selectResponseWithJoin.d.ts +15 -0
  50. package/builders/joinBuilders/responses/selectResponseWithJoin.js +31 -0
  51. package/builders/joinBuilders/static.d.ts +5 -0
  52. package/builders/joinBuilders/static.js +6 -0
  53. package/{src/builders/lowLvlBuilders/alter.ts → builders/lowLvlBuilders/alter.d.ts} +0 -0
  54. package/builders/lowLvlBuilders/alter.js +1 -0
  55. package/builders/lowLvlBuilders/create.d.ts +12 -0
  56. package/builders/lowLvlBuilders/create.js +97 -0
  57. package/builders/lowLvlBuilders/delets/delete.d.ts +5 -0
  58. package/builders/lowLvlBuilders/delets/delete.js +12 -0
  59. package/builders/lowLvlBuilders/delets/deleteFilter.d.ts +8 -0
  60. package/builders/lowLvlBuilders/delets/deleteFilter.js +13 -0
  61. package/builders/lowLvlBuilders/delets/deleteFrom.d.ts +9 -0
  62. package/builders/lowLvlBuilders/delets/deleteFrom.js +11 -0
  63. package/builders/lowLvlBuilders/inserts/insert.d.ts +5 -0
  64. package/builders/lowLvlBuilders/inserts/insert.js +12 -0
  65. package/builders/lowLvlBuilders/inserts/insertInto.d.ts +10 -0
  66. package/builders/lowLvlBuilders/inserts/insertInto.js +13 -0
  67. package/builders/lowLvlBuilders/inserts/onConflictInsert.d.ts +9 -0
  68. package/builders/lowLvlBuilders/inserts/onConflictInsert.js +13 -0
  69. package/builders/lowLvlBuilders/inserts/valuesInsert.d.ts +13 -0
  70. package/builders/lowLvlBuilders/inserts/valuesInsert.js +16 -0
  71. package/builders/lowLvlBuilders/selects/select.d.ts +5 -0
  72. package/builders/lowLvlBuilders/selects/select.js +12 -0
  73. package/builders/lowLvlBuilders/selects/selectFrom.d.ts +19 -0
  74. package/builders/lowLvlBuilders/selects/selectFrom.js +31 -0
  75. package/builders/lowLvlBuilders/selects/selectJoined.d.ts +17 -0
  76. package/builders/lowLvlBuilders/selects/selectJoined.js +27 -0
  77. package/builders/lowLvlBuilders/selects/whereSelect.d.ts +14 -0
  78. package/builders/lowLvlBuilders/selects/whereSelect.js +25 -0
  79. package/builders/lowLvlBuilders/updates/update.d.ts +5 -0
  80. package/builders/lowLvlBuilders/updates/update.js +12 -0
  81. package/builders/lowLvlBuilders/updates/updateIn.d.ts +10 -0
  82. package/builders/lowLvlBuilders/updates/updateIn.js +12 -0
  83. package/builders/lowLvlBuilders/updates/whereSelect.d.ts +8 -0
  84. package/builders/lowLvlBuilders/updates/whereSelect.js +13 -0
  85. package/builders/lowLvlBuilders/updates/whereSet.d.ts +11 -0
  86. package/builders/lowLvlBuilders/updates/whereSet.js +15 -0
  87. package/builders/requestBuilders/updates/combine.d.ts +6 -0
  88. package/builders/requestBuilders/updates/combine.js +21 -0
  89. package/builders/requestBuilders/updates/setObjects.d.ts +9 -0
  90. package/builders/requestBuilders/updates/setObjects.js +12 -0
  91. package/builders/requestBuilders/updates/static.d.ts +6 -0
  92. package/builders/requestBuilders/updates/static.js +9 -0
  93. package/{src/builders/requestBuilders/updates/updates.ts → builders/requestBuilders/updates/updates.d.ts} +1 -1
  94. package/builders/requestBuilders/updates/updates.js +5 -0
  95. package/builders/requestBuilders/where/and.d.ts +6 -0
  96. package/builders/requestBuilders/where/and.js +22 -0
  97. package/builders/requestBuilders/where/const.d.ts +6 -0
  98. package/builders/requestBuilders/where/const.js +17 -0
  99. package/builders/requestBuilders/where/constArray.d.ts +6 -0
  100. package/builders/requestBuilders/where/constArray.js +27 -0
  101. package/builders/requestBuilders/where/eqWhere.d.ts +7 -0
  102. package/builders/requestBuilders/where/eqWhere.js +12 -0
  103. package/builders/requestBuilders/where/greater.d.ts +10 -0
  104. package/builders/requestBuilders/where/greater.js +12 -0
  105. package/builders/requestBuilders/where/greaterEq.d.ts +10 -0
  106. package/builders/requestBuilders/where/greaterEq.js +12 -0
  107. package/builders/requestBuilders/where/in.d.ts +7 -0
  108. package/builders/requestBuilders/where/in.js +12 -0
  109. package/builders/requestBuilders/where/isNull.d.ts +6 -0
  110. package/builders/requestBuilders/where/isNull.js +11 -0
  111. package/builders/requestBuilders/where/less.d.ts +10 -0
  112. package/builders/requestBuilders/where/less.js +12 -0
  113. package/builders/requestBuilders/where/lessEq.d.ts +10 -0
  114. package/builders/requestBuilders/where/lessEq.js +12 -0
  115. package/builders/requestBuilders/where/like.d.ts +7 -0
  116. package/builders/requestBuilders/where/like.js +12 -0
  117. package/builders/requestBuilders/where/notEqWhere.d.ts +7 -0
  118. package/builders/requestBuilders/where/notEqWhere.js +12 -0
  119. package/builders/requestBuilders/where/or.d.ts +6 -0
  120. package/builders/requestBuilders/where/or.js +22 -0
  121. package/builders/requestBuilders/where/rawWhere.d.ts +6 -0
  122. package/builders/requestBuilders/where/rawWhere.js +11 -0
  123. package/builders/requestBuilders/where/static.d.ts +16 -0
  124. package/builders/requestBuilders/where/static.js +43 -0
  125. package/builders/requestBuilders/where/var.d.ts +8 -0
  126. package/builders/requestBuilders/where/var.js +12 -0
  127. package/{src/builders/requestBuilders/where/where.ts → builders/requestBuilders/where/where.d.ts} +1 -1
  128. package/builders/requestBuilders/where/where.js +5 -0
  129. package/builders/transaction/transaction.d.ts +8 -0
  130. package/builders/transaction/transaction.js +20 -0
  131. package/columns/column.d.ts +61 -0
  132. package/columns/column.js +98 -0
  133. package/{src/columns/index.ts → columns/index.d.ts} +0 -0
  134. package/columns/index.js +23 -0
  135. package/columns/types/columnType.d.ts +7 -0
  136. package/columns/types/columnType.js +6 -0
  137. package/columns/types/pgBigDecimal.d.ts +10 -0
  138. package/columns/types/pgBigDecimal.js +28 -0
  139. package/columns/types/pgBigInt.d.ts +8 -0
  140. package/columns/types/pgBigInt.js +17 -0
  141. package/columns/types/pgBoolean.d.ts +8 -0
  142. package/columns/types/pgBoolean.js +15 -0
  143. package/columns/types/pgEnum.d.ts +9 -0
  144. package/columns/types/pgEnum.js +15 -0
  145. package/columns/types/pgInteger.d.ts +8 -0
  146. package/columns/types/pgInteger.js +15 -0
  147. package/columns/types/pgJsonb.d.ts +9 -0
  148. package/columns/types/pgJsonb.js +15 -0
  149. package/columns/types/pgText.d.ts +8 -0
  150. package/columns/types/pgText.js +15 -0
  151. package/columns/types/pgTime.d.ts +8 -0
  152. package/columns/types/pgTime.js +15 -0
  153. package/columns/types/pgTimestamp.d.ts +8 -0
  154. package/columns/types/pgTimestamp.js +15 -0
  155. package/columns/types/pgVarChar.d.ts +9 -0
  156. package/columns/types/pgVarChar.js +21 -0
  157. package/db/db.d.ts +19 -0
  158. package/db/db.js +26 -0
  159. package/db/dbConnector.d.ts +9 -0
  160. package/db/dbConnector.js +28 -0
  161. package/db/dbStringConnector.d.ts +6 -0
  162. package/db/dbStringConnector.js +25 -0
  163. package/{src/mappers/index.ts → db/group_by.d.ts} +0 -0
  164. package/db/group_by.js +68 -0
  165. package/{src/db/index.ts → db/index.d.ts} +0 -0
  166. package/db/index.js +9 -0
  167. package/db/session.d.ts +7 -0
  168. package/db/session.js +20 -0
  169. package/docs/cases/simple_delete.d.ts +1 -0
  170. package/docs/cases/simple_delete.js +30 -0
  171. package/docs/cases/simple_insert.d.ts +1 -0
  172. package/docs/cases/simple_insert.js +51 -0
  173. package/docs/cases/simple_join.d.ts +1 -0
  174. package/docs/cases/simple_join.js +95 -0
  175. package/docs/cases/simple_select.d.ts +1 -0
  176. package/docs/cases/simple_select.js +39 -0
  177. package/docs/cases/simple_update.d.ts +1 -0
  178. package/docs/cases/simple_update.js +33 -0
  179. package/docs/tables/citiesTable.d.ts +14 -0
  180. package/docs/tables/citiesTable.js +19 -0
  181. package/docs/tables/citiesToUsers.d.ts +7 -0
  182. package/docs/tables/citiesToUsers.js +18 -0
  183. package/docs/tables/userGroupsTable.d.ts +7 -0
  184. package/docs/tables/userGroupsTable.js +15 -0
  185. package/docs/tables/usersTable.d.ts +17 -0
  186. package/docs/tables/usersTable.js +29 -0
  187. package/docs/tables/usersToUserGroups.d.ts +7 -0
  188. package/docs/tables/usersToUserGroups.js +18 -0
  189. package/docs/types/rolesType.d.ts +1 -0
  190. package/docs/types/rolesType.js +6 -0
  191. package/errors/baseError.d.ts +22 -0
  192. package/errors/baseError.js +35 -0
  193. package/errors/builderError.d.ts +14 -0
  194. package/errors/builderError.js +24 -0
  195. package/errors/dbErrors.d.ts +12 -0
  196. package/errors/dbErrors.js +28 -0
  197. package/index.d.ts +13 -0
  198. package/index.js +32 -0
  199. package/indexes/tableIndex.d.ts +11 -0
  200. package/indexes/tableIndex.js +17 -0
  201. package/logger/abstractLogger.d.ts +4 -0
  202. package/logger/abstractLogger.js +5 -0
  203. package/logger/consoleLogger.d.ts +5 -0
  204. package/logger/consoleLogger.js +12 -0
  205. package/{src/migrator/index.ts → mappers/index.d.ts} +0 -0
  206. package/mappers/index.js +1 -0
  207. package/mappers/responseMapper.d.ts +7 -0
  208. package/mappers/responseMapper.js +23 -0
  209. package/migrator/index.d.ts +0 -0
  210. package/migrator/index.js +1 -0
  211. package/migrator/migrator.d.ts +16 -0
  212. package/migrator/migrator.js +101 -0
  213. package/package.json +2 -2
  214. package/serializer/serializer.d.ts +40 -0
  215. package/serializer/serializer.js +74 -0
  216. package/tables/abstractTable.d.ts +118 -0
  217. package/tables/abstractTable.js +116 -0
  218. package/{src/tables/index.ts → tables/index.d.ts} +0 -0
  219. package/tables/index.js +8 -0
  220. package/tables/inferTypes.d.ts +19 -0
  221. package/tables/inferTypes.js +2 -0
  222. package/tables/migrationsTable.d.ts +8 -0
  223. package/tables/migrationsTable.js +16 -0
  224. package/test.d.ts +1 -0
  225. package/test.js +81 -0
  226. package/types/type.d.ts +10 -0
  227. package/types/type.js +14 -0
  228. package/utils/ecranate.d.ts +2 -0
  229. package/utils/ecranate.js +8 -0
  230. package/.eslintrc +0 -26
  231. package/.tslintignore +0 -1
  232. package/LICENSE +0 -674
  233. package/README.md +0 -147
  234. package/src/builders/aggregators/abstractAggregator.ts +0 -37
  235. package/src/builders/aggregators/deleteAggregator.ts +0 -34
  236. package/src/builders/aggregators/insertAggregator.ts +0 -116
  237. package/src/builders/aggregators/selectAggregator.ts +0 -102
  238. package/src/builders/aggregators/updateAggregator.ts +0 -45
  239. package/src/builders/highLvlBuilders/abstractRequestBuilder.ts +0 -37
  240. package/src/builders/highLvlBuilders/deleteRequestBuilder.ts +0 -59
  241. package/src/builders/highLvlBuilders/insertRequestBuilder.ts +0 -87
  242. package/src/builders/highLvlBuilders/order.ts +0 -4
  243. package/src/builders/highLvlBuilders/selectRequestBuilder.ts +0 -102
  244. package/src/builders/highLvlBuilders/updateRequestBuilder.ts +0 -63
  245. package/src/builders/joinBuilders/builders/abstractJoinBuilder.ts +0 -22
  246. package/src/builders/joinBuilders/builders/selectWithFourJoins.ts +0 -71
  247. package/src/builders/joinBuilders/builders/selectWithJoin.ts +0 -67
  248. package/src/builders/joinBuilders/builders/selectWithThreeJoins.ts +0 -78
  249. package/src/builders/joinBuilders/builders/selectWithTwoJoins.ts +0 -72
  250. package/src/builders/joinBuilders/join.ts +0 -37
  251. package/src/builders/joinBuilders/joinWith.ts +0 -19
  252. package/src/builders/joinBuilders/responses/selectResponseFourJoins.ts +0 -33
  253. package/src/builders/joinBuilders/responses/selectResponseThreeJoins.ts +0 -29
  254. package/src/builders/joinBuilders/responses/selectResponseTwoJoins.ts +0 -22
  255. package/src/builders/joinBuilders/responses/selectResponseWithJoin.ts +0 -28
  256. package/src/builders/joinBuilders/static.ts +0 -9
  257. package/src/builders/lowLvlBuilders/create.ts +0 -114
  258. package/src/builders/lowLvlBuilders/delets/delete.ts +0 -10
  259. package/src/builders/lowLvlBuilders/delets/deleteFilter.ts +0 -17
  260. package/src/builders/lowLvlBuilders/delets/deleteFrom.ts +0 -15
  261. package/src/builders/lowLvlBuilders/inserts/insert.ts +0 -12
  262. package/src/builders/lowLvlBuilders/inserts/insertInto.ts +0 -18
  263. package/src/builders/lowLvlBuilders/inserts/onConflictInsert.ts +0 -19
  264. package/src/builders/lowLvlBuilders/inserts/valuesInsert.ts +0 -30
  265. package/src/builders/lowLvlBuilders/selects/select.ts +0 -12
  266. package/src/builders/lowLvlBuilders/selects/selectFrom.ts +0 -38
  267. package/src/builders/lowLvlBuilders/selects/selectJoined.ts +0 -40
  268. package/src/builders/lowLvlBuilders/selects/whereSelect.ts +0 -35
  269. package/src/builders/lowLvlBuilders/updates/update.ts +0 -10
  270. package/src/builders/lowLvlBuilders/updates/updateIn.ts +0 -22
  271. package/src/builders/lowLvlBuilders/updates/whereSelect.ts +0 -17
  272. package/src/builders/lowLvlBuilders/updates/whereSet.ts +0 -21
  273. package/src/builders/requestBuilders/updates/combine.ts +0 -25
  274. package/src/builders/requestBuilders/updates/setObjects.ts +0 -18
  275. package/src/builders/requestBuilders/updates/static.ts +0 -11
  276. package/src/builders/requestBuilders/where/and.ts +0 -26
  277. package/src/builders/requestBuilders/where/const.ts +0 -18
  278. package/src/builders/requestBuilders/where/constArray.ts +0 -27
  279. package/src/builders/requestBuilders/where/eqWhere.ts +0 -14
  280. package/src/builders/requestBuilders/where/greater.ts +0 -14
  281. package/src/builders/requestBuilders/where/greaterEq.ts +0 -14
  282. package/src/builders/requestBuilders/where/in.ts +0 -14
  283. package/src/builders/requestBuilders/where/less.ts +0 -14
  284. package/src/builders/requestBuilders/where/lessEq.ts +0 -14
  285. package/src/builders/requestBuilders/where/like.ts +0 -14
  286. package/src/builders/requestBuilders/where/or.ts +0 -26
  287. package/src/builders/requestBuilders/where/static.ts +0 -42
  288. package/src/builders/requestBuilders/where/var.ts +0 -15
  289. package/src/builders/transaction/transaction.ts +0 -21
  290. package/src/columns/column.ts +0 -86
  291. package/src/columns/types/columnType.ts +0 -7
  292. package/src/columns/types/pgBigDecimal.ts +0 -29
  293. package/src/columns/types/pgBigInt.ts +0 -20
  294. package/src/columns/types/pgBoolean.ts +0 -18
  295. package/src/columns/types/pgEnum.ts +0 -22
  296. package/src/columns/types/pgInteger.ts +0 -18
  297. package/src/columns/types/pgJsonb.ts +0 -19
  298. package/src/columns/types/pgText.ts +0 -18
  299. package/src/columns/types/pgTime.ts +0 -18
  300. package/src/columns/types/pgTimestamp.ts +0 -18
  301. package/src/columns/types/pgVarChar.ts +0 -24
  302. package/src/db/db.ts +0 -29
  303. package/src/db/dbConnector.ts +0 -30
  304. package/src/db/dbStringConnector.ts +0 -28
  305. package/src/db/session.ts +0 -21
  306. package/src/errors/baseError.ts +0 -47
  307. package/src/errors/builderError.ts +0 -30
  308. package/src/errors/dbErrors.ts +0 -24
  309. package/src/examples/tables/authOtpTable.ts +0 -17
  310. package/src/examples/tables/cityTable.ts +0 -15
  311. package/src/examples/tables/usersTable.ts +0 -18
  312. package/src/examples/testEnum.ts +0 -6
  313. package/src/index.ts +0 -40
  314. package/src/indexes/tableIndex.ts +0 -19
  315. package/src/logger/abstractLogger.ts +0 -4
  316. package/src/logger/consoleLogger.ts +0 -11
  317. package/src/mappers/responseMapper.ts +0 -24
  318. package/src/migrator/migrator.ts +0 -110
  319. package/src/serializer/Untitled.js +0 -72
  320. package/src/serializer/out.json +0 -140
  321. package/src/tables/abstractTable.ts +0 -183
  322. package/src/tables/inferTypes.ts +0 -34
  323. package/src/tables/migrationsTable.ts +0 -12
  324. package/src/utils/ecranate.ts +0 -4
  325. package/tsconfig.json +0 -29
package/README.md DELETED
@@ -1,147 +0,0 @@
1
- # DrizzleORM
2
-
3
- **Drizzle ORM** is an ORM framework for
4
- [TypeScript](https://www.typescriptlang.org/).
5
- It offers you several levels of Database communication:
6
- * Typesafe Table View approach
7
- * Typesafe Query Builder
8
- * Simple SQL query execution
9
-
10
- Drizzle ORM is highly influenced by [Exposed](https://github.com/JetBrains/Exposed) and Jetbrains development methodology
11
-
12
- ## Supported Databases
13
-
14
- * PostgreSQL
15
-
16
- ## Links
17
-
18
- In Progress
19
-
20
- ## Installing
21
-
22
- ```bash
23
- npm install drizzle-orm drizzle-cli
24
- yarn add drizzle-orm drizzle-cli
25
- bower install drizzle-orm drizzle-cli
26
- ```
27
-
28
- ## Connecting to database
29
-
30
- ```tsx
31
- import { DbConnector } from "drizzle-orm";
32
-
33
- // connect via postgresql connection url
34
-
35
- // I would do import drizzle from 'drizzle-orm'
36
- // const db = await drizzle.connect(string|configobj);
37
- const db = await new DbConnector()
38
- .connectionString("postgres://user:password@host:port/db")
39
- .connect();
40
-
41
- // or by params
42
- const db = await new DbConnector()
43
- .params({
44
- host: '0.0.0.0',
45
- port: 5432,
46
- user: 'user',
47
- password: 'password',
48
- db: 'optional_db_name'
49
- }).connect();
50
- ```
51
-
52
- ## Creating your first table and first migration
53
-
54
- ```tsx
55
- class UsersTable extends AbstractTable<UsersTable> {
56
- public id = this.int("id").primaryKey().autoIncrement();
57
- public name = this.varchar("name", { size: 512 });
58
- public email = this.varchar("email", { size: 512 }).unique();
59
-
60
- public tableName(): string {
61
- return "users";
62
- }
63
- }
64
-
65
- // lets create your first SQL migration to create initial schema
66
- // > npx drizzle migrate
67
-
68
- const migrator = new Migrator(db);
69
- await migrator.runMigrations('./drizzle_orm/migrations')
70
- // That's it!! No metaprogramming, no black magic, everything's imperative
71
- ```
72
-
73
- ## Inserting into tables
74
- Returned entity is of type ExtractModel<UsersTable> which does have a set of typed fields
75
-
76
- ```tsx
77
- const email = 'email@example.com'
78
- const name = 'Full Name'
79
-
80
- // returns inserted user
81
- const user = await table.insert({ email, name }).first()
82
- ```
83
-
84
- ## Simple querying with/without filters
85
- __For more complex filtering - see `advanced querying`__
86
-
87
- ```tsx
88
- const email = 'email@example.com'
89
-
90
- const allUsers = await table.select().all()
91
- const firstUser = await table.select().first()
92
-
93
- const userWithEmail = await table.select(eq(table.email, email)).first()
94
-
95
- // If you need to declare type explicitely
96
- type User = ExtractModel<UsersTable>
97
-
98
- const user: User = await table.select().first()
99
- user.email
100
- user.id
101
-
102
- // Works perfectly!
103
- ```
104
-
105
- ## Joins
106
-
107
- ```tsx
108
- class ItemsTable extends AbstractTable<ItemsTable>{
109
- id = this.int("id").primaryKey().autoIncrement();
110
- name = this.varchar("name");
111
-
112
- // many to one relation
113
- ownerId = this.int("owner_id").foreignKey(UsersTable, (t) => t.id);
114
- }
115
-
116
- const query = usersTable.select().leftJoin(
117
- ItemsTable,
118
- (ut) => ut.id, // user id
119
- (it) => it.ownerId // item owner id
120
- );
121
-
122
- const result = (await query.execute()).map((user, item) => {
123
- return { user, item };
124
- });
125
-
126
- // result would be
127
- [{
128
- user: { id: 10, ... },
129
- item: { id: 1, ... }
130
- },
131
- {
132
- user: { id: 10, ... },
133
- item: { id: 2, ... }
134
- },
135
- {
136
- user: { id: 10, ... },
137
- item: { id: 3, ... }
138
- },
139
- {
140
- user: { id: 11, ... },
141
- item: { id: 4, ... }
142
- },
143
- {
144
- user: { id: 11, ... },
145
- item: { id: 5, ... }
146
- }]
147
- ```
@@ -1,37 +0,0 @@
1
- import { Column } from '../../columns/column';
2
- import ColumnType from '../../columns/types/columnType';
3
- import { ecranate } from '../../utils/ecranate';
4
-
5
- export default class Aggregator {
6
- protected _fields: Array<string> = [];
7
- protected _tableName: string;
8
- protected _columnsTypes: Column<ColumnType>[];
9
-
10
- public constructor(tableName: string) {
11
- this._tableName = tableName;
12
- }
13
-
14
- public appendFields = (columns: Column<ColumnType>[]) => {
15
- this._fields = this.generateSelectArray(this._tableName, columns);
16
- this._columnsTypes = columns;
17
- };
18
-
19
- protected generateSelectArray = (table: string, columns: Column<ColumnType>[]) => {
20
- const selectFields: string[] = [];
21
-
22
- columns.forEach((field: any) => {
23
- if (field instanceof Column) {
24
- selectFields.push(' ');
25
- selectFields.push(table);
26
- selectFields.push('.');
27
- selectFields.push(ecranate(field.columnName));
28
- selectFields.push(' AS ');
29
- selectFields.push(ecranate(`${table.replace('.', '_')}_${field.columnName}`));
30
- selectFields.push(',');
31
- }
32
- });
33
-
34
- selectFields.pop();
35
- return selectFields;
36
- };
37
- }
@@ -1,34 +0,0 @@
1
- import Expr from '../requestBuilders/where/where';
2
- import Aggregator from './abstractAggregator';
3
-
4
- export default class DeleteAggregator extends Aggregator {
5
- private _from: Array<string> = [];
6
- private _filters: Array<string> = [];
7
- private _delete: Array<string> = ['DELETE'];
8
-
9
- public constructor(tableName: string) {
10
- super(tableName);
11
- }
12
-
13
- public filters = (filters: Expr): DeleteAggregator => {
14
- this._filters.push('WHERE ');
15
- this._filters.push(filters.toQuery());
16
- return this;
17
- };
18
-
19
- public appendFrom = (tableName: string): DeleteAggregator => {
20
- this._from.push(' FROM ');
21
- this._from.push(tableName);
22
- return this;
23
- };
24
-
25
- public buildQuery = () => {
26
- // this._delete.push(this._fields.join(''));
27
- this._delete.push('\n');
28
- this._delete.push(this._from.join(''));
29
- this._delete.push('\n');
30
- this._delete.push(this._filters.join(''));
31
-
32
- return this._delete.join('');
33
- };
34
- }
@@ -1,116 +0,0 @@
1
- import { Column } from '../../columns/column';
2
- import ColumnType from '../../columns/types/columnType';
3
- import { Indexing } from '../../tables/inferTypes';
4
- import UpdateExpr from '../requestBuilders/updates/updates';
5
- import Aggregator from './abstractAggregator';
6
-
7
- export default class InsertAggregator extends Aggregator {
8
- private _onConflict: Array<string> = [];
9
- private _columns: Array<string> = [];
10
- private _values: Array<string> = [];
11
- private _from: Array<string> = [];
12
- private _insert: Array<string> = ['INSERT INTO'];
13
-
14
- public constructor(tableName: string) {
15
- super(tableName);
16
- }
17
-
18
- public appendFrom = (tableName: string): InsertAggregator => {
19
- this._from.push(' ');
20
- this._from.push(tableName);
21
- this._tableName = tableName;
22
- return this;
23
- };
24
-
25
- // @TODO refactor!!
26
- public appendColumns = <T>(values: Array<T>) => {
27
- // @TODO Check if values not empty
28
- const columns = Object.keys(values[0]);
29
-
30
- for (let i = 0; i < columns.length; i += 1) {
31
- const column = columns[i];
32
-
33
- this._columns.push('"');
34
- this._columns.push(column);
35
- this._columns.push('"');
36
-
37
- if (i < columns.length - 1) {
38
- this._columns.push(', ');
39
- }
40
- }
41
- };
42
-
43
- // @TODO refactor!!
44
- public appendValues = <T>(mapper: {[name in keyof T]: Column<ColumnType>},
45
- values: {[name: string]: any}[]) => {
46
- // @TODO Check if values not empty
47
- for (let i = 0; i < values.length; i += 1) {
48
- const value = values[i];
49
- const insertValues = Object.values(value);
50
- const insertKeys = Object.keys(value);
51
-
52
- this._values.push('(');
53
- for (let j = 0; j < insertValues.length; j += 1) {
54
- const insertValue = insertValues[j];
55
- const insertKey = insertKeys[j];
56
-
57
- const columnKey = Object.keys(mapper)
58
- .find((it) => mapper[it as keyof T].columnName === insertKey)!;
59
- const column = mapper[columnKey as keyof T];
60
- if (insertValue !== undefined && insertValue !== null) {
61
- this._values.push(column.columnType.insertStrategy(insertValue));
62
- } else {
63
- this._values.push('null');
64
- }
65
-
66
- if (j < insertValues.length - 1) {
67
- this._values.push(', ');
68
- }
69
- }
70
- if (i < values.length - 1) {
71
- this._values.push('),\n');
72
- } else {
73
- this._values.push(')\n');
74
- }
75
- }
76
- };
77
-
78
- public appendOnConflict = (column: Indexing,
79
- updates?: UpdateExpr) => {
80
- const indexName = column instanceof Column ? column.columnName : column.indexName();
81
-
82
- this._onConflict.push(`ON CONFLICT ON CONSTRAINT ${indexName}\n`);
83
- if (updates) {
84
- this._onConflict.push('DO UPDATE\n');
85
- this._onConflict.push(`SET ${updates.toQuery()}`);
86
- } else {
87
- this._onConflict.push('DO NOTHING\n');
88
- }
89
-
90
- return this;
91
- };
92
-
93
- public buildQuery = () => {
94
- this._insert.push(this._from.join(''));
95
- this._insert.push(' (');
96
- this._insert.push(this._columns.join(''));
97
- this._insert.push(') ');
98
- this._insert.push('VALUES\n');
99
- this._insert.push(this._values.join(''));
100
- this._insert.push('\n');
101
- this._insert.push('\n');
102
- this._insert.push('RETURNING');
103
- this._insert.push('\n');
104
- this._insert.push(this._fields.join(''));
105
- this._insert.push('\n');
106
- this._insert.push(this._onConflict.join(''));
107
- // this._insert.push("ON CONFLICT ON CONSTRAINT \"");
108
- // this._insert.push(this._table.tableName());
109
- // this._insert.push("_");
110
- // this._insert.push(this._table);
111
- // this._insert.push("\n");
112
- // this._insert.push(this._fields.join(''));
113
-
114
- return this._insert.join('');
115
- };
116
- }
@@ -1,102 +0,0 @@
1
- import { Column } from '../../columns';
2
- import ColumnType from '../../columns/types/columnType';
3
- import Order from '../highLvlBuilders/order';
4
- import Join from '../joinBuilders/join';
5
- import Expr from '../requestBuilders/where/where';
6
- import Aggregator from './abstractAggregator';
7
-
8
- export default class SelectAggregator extends Aggregator {
9
- private _from: Array<string> = [];
10
- private _filters: Array<string> = [];
11
- private _select: Array<string> = ['SELECT'];
12
- private _join: Array<string> = [];
13
- private _limit: Array<string> = [];
14
- private _offset: Array<string> = [];
15
- // private _groupBy: Array<string> = [];
16
- private _orderBy: Array<string> = [];
17
-
18
- public constructor(tableName: string) {
19
- super(tableName);
20
- }
21
-
22
- public filters = (filters: Expr): SelectAggregator => {
23
- this._filters.push('WHERE ');
24
- this._filters.push(filters.toQuery());
25
- return this;
26
- };
27
-
28
- public limit = (limit: number): SelectAggregator => {
29
- this._limit.push('LIMIT ');
30
- this._limit.push(limit.toString());
31
- return this;
32
- };
33
-
34
- public offset = (limit: number): SelectAggregator => {
35
- this._offset.push('OFFSET ');
36
- this._offset.push(limit.toString());
37
- return this;
38
- };
39
-
40
- public orderBy = (column: Column<ColumnType, boolean, boolean>, order: Order)
41
- : SelectAggregator => {
42
- this._orderBy.push('ORDER BY ');
43
- this._orderBy.push(`${column.columnName} `);
44
- this._orderBy.push(Order[order]);
45
- return this;
46
- };
47
-
48
- public appendFrom = (tableName: string): SelectAggregator => {
49
- this._from.push('FROM ');
50
- this._from.push(tableName);
51
- return this;
52
- };
53
-
54
- // Add select generator for second table also
55
- public join = <COLUMN extends ColumnType>(joins: Array<Join<COLUMN,
56
- {}>>): SelectAggregator => {
57
- joins.forEach((join: Join<COLUMN, {}>) => {
58
- const tableFrom = join.fromColumn.getParent();
59
- const tableTo = join.toColumn.getParent();
60
- const { type } = join;
61
-
62
- const selectString = this.generateSelectArray(tableTo, Object.values(join.mappedServiceToDb)).join('');
63
- this._fields.push(', ');
64
- this._fields.push(selectString);
65
- this._join.push('\n');
66
- this._join.push(type);
67
- this._join.push(' ');
68
- this._join.push(tableTo);
69
- this._join.push('\n');
70
- this._join.push('ON ');
71
- this._join.push(tableFrom);
72
- this._join.push('.');
73
- this._join.push(join.fromColumn.columnName);
74
- this._join.push(' = ');
75
- this._join.push(tableTo);
76
- this._join.push('.');
77
- this._join.push(join.toColumn.columnName);
78
- });
79
-
80
- return this;
81
- };
82
-
83
- public buildQuery = () => {
84
- this._select.push(this._fields.join(''));
85
- this._select.push('\n');
86
- this._select.push(this._from.join(''));
87
- this._select.push('\n');
88
- this._select.push(this._join.join(''));
89
- if (this._join.length > 0) {
90
- this._select.push('\n');
91
- }
92
- this._select.push(this._filters.join(''));
93
- this._select.push('\n');
94
- this._select.push(this._orderBy.join(''));
95
- this._select.push('\n');
96
- this._select.push(this._limit.join(''));
97
- this._select.push('\n');
98
- this._select.push(this._offset.join(''));
99
-
100
- return this._select.join('');
101
- };
102
- }
@@ -1,45 +0,0 @@
1
- import UpdateExpr from '../requestBuilders/updates/updates';
2
- import Expr from '../requestBuilders/where/where';
3
- import Aggregator from './abstractAggregator';
4
-
5
- export default class UpdateAggregator extends Aggregator {
6
- private _updates: Array<string> = [];
7
- private _filters: Array<string> = [];
8
- private _from: Array<string> = [];
9
- private _update: Array<string> = ['UPDATE'];
10
-
11
- public constructor(tableName: string) {
12
- super(tableName);
13
- }
14
-
15
- public where = (filters: Expr): UpdateAggregator => {
16
- this._filters.push('WHERE ');
17
- this._filters.push(filters.toQuery());
18
- return this;
19
- };
20
-
21
- public appendFrom = (tableName: string): UpdateAggregator => {
22
- this._from.push(' ');
23
- this._from.push(tableName);
24
- return this;
25
- };
26
-
27
- public set = (updates: UpdateExpr): UpdateAggregator => {
28
- this._updates.push(`\nSET ${updates.toQuery()}`);
29
- return this;
30
- };
31
-
32
- public buildQuery = () => {
33
- this._update.push(this._from.join(''));
34
- this._update.push('\n');
35
- this._update.push(this._updates.join(''));
36
- this._update.push('\n');
37
- this._update.push(this._filters.join(''));
38
- this._update.push('\n');
39
- this._update.push('RETURNING');
40
- this._update.push('\n');
41
- this._update.push(this._fields.join(''));
42
-
43
- return this._update.join('');
44
- };
45
- }
@@ -1,37 +0,0 @@
1
- import { Column } from '../../columns/column';
2
- import ColumnType from '../../columns/types/columnType';
3
- import Session from '../../db/session';
4
- import BaseLogger from '../../logger/abstractLogger';
5
- import { ExtractModel } from '../../tables/inferTypes';
6
-
7
- export default abstract class TableRequestBuilder<TTable> {
8
- protected _tableName: string;
9
- protected _session: Session;
10
- protected _mappedServiceToDb: { [name in keyof ExtractModel<TTable>]: Column<ColumnType>; };
11
- protected _columns: Column<ColumnType>[];
12
- protected _logger: BaseLogger;
13
-
14
- public constructor(tableName: string,
15
- session: Session,
16
- mappedServiceToDb: { [name in keyof ExtractModel<TTable>]: Column<ColumnType>; },
17
- logger: BaseLogger) {
18
- this._mappedServiceToDb = mappedServiceToDb;
19
- this._tableName = tableName;
20
- this._session = session;
21
- this._columns = Object.values(mappedServiceToDb);
22
- this._logger = logger;
23
- }
24
-
25
- public all = async (): Promise<ExtractModel<TTable>[]> => {
26
- const res = await this._execute();
27
- return res;
28
- };
29
-
30
- public first = async (): Promise<ExtractModel<TTable>> => {
31
- const executionRes = await this._execute();
32
- // TODO add checks for undefined or null
33
- return executionRes[0];
34
- };
35
-
36
- protected abstract _execute(): Promise<Array<ExtractModel<TTable>>>;
37
- }
@@ -1,59 +0,0 @@
1
- import { Column } from '../../columns/column';
2
- import ColumnType from '../../columns/types/columnType';
3
- import Session from '../../db/session';
4
- import BuilderError, { BuilderType } from '../../errors/builderError';
5
- import { DatabaseDeleteError } from '../../errors/dbErrors';
6
- import BaseLogger from '../../logger/abstractLogger';
7
- import QueryResponseMapper from '../../mappers/responseMapper';
8
- import { ExtractModel } from '../../tables/inferTypes';
9
- import Delete from '../lowLvlBuilders/delets/delete';
10
- import Expr from '../requestBuilders/where/where';
11
- import TableRequestBuilder from './abstractRequestBuilder';
12
-
13
- export default class DeleteTRB<TTable> extends TableRequestBuilder<TTable> {
14
- private _filter: Expr;
15
-
16
- public constructor(
17
- tableName: string,
18
- session: Session,
19
- mappedServiceToDb: { [name in keyof ExtractModel<TTable>]: Column<ColumnType>; },
20
- logger: BaseLogger,
21
- ) {
22
- super(tableName, session, mappedServiceToDb, logger);
23
- }
24
-
25
- public where = (expr: Expr): DeleteTRB<TTable> => {
26
- this._filter = expr;
27
- return this;
28
- };
29
-
30
- public execute = async () => {
31
- await this._execute();
32
- };
33
-
34
- protected _execute = async (): Promise<ExtractModel<TTable>[]> => {
35
- const queryBuilder = Delete.from(this._tableName);
36
- if (this._filter) {
37
- queryBuilder.filteredBy(this._filter);
38
- }
39
-
40
- let query = '';
41
- try {
42
- query = queryBuilder.build();
43
- } catch (e) {
44
- throw new BuilderError(BuilderType.DELETE, this._tableName, this._columns, e, this._filter);
45
- }
46
-
47
- if (this._logger) {
48
- this._logger.info(`Deleting from ${this._tableName} using query:\n ${query}`);
49
- }
50
-
51
- const result = await this._session.execute(query);
52
- if (result.isLeft()) {
53
- const { reason } = result.value;
54
- throw new DatabaseDeleteError(this._tableName, reason, query);
55
- } else {
56
- return QueryResponseMapper.map(this._mappedServiceToDb, result.value);
57
- }
58
- };
59
- }
@@ -1,87 +0,0 @@
1
- import { Column } from '../../columns/column';
2
- import ColumnType from '../../columns/types/columnType';
3
- import Session from '../../db/session';
4
- import BuilderError, { BuilderType } from '../../errors/builderError';
5
- import { DatabaseInsertError } from '../../errors/dbErrors';
6
- import BaseLogger from '../../logger/abstractLogger';
7
- import QueryResponseMapper from '../../mappers/responseMapper';
8
- import { AbstractTable } from '../../tables';
9
- import { ExtractModel, Indexing } from '../../tables/inferTypes';
10
- import Insert from '../lowLvlBuilders/inserts/insert';
11
- import UpdateExpr from '../requestBuilders/updates/updates';
12
- import TableRequestBuilder from './abstractRequestBuilder';
13
-
14
- export default class InsertTRB<TTable> extends TableRequestBuilder<TTable> {
15
- private _values: ExtractModel<TTable>[];
16
- private _onConflict: UpdateExpr;
17
- private _onConflictField: Indexing;
18
- private _table: TTable;
19
-
20
- public constructor(
21
- values: ExtractModel<TTable>[],
22
- tableName: string,
23
- session: Session,
24
- mappedServiceToDb: { [name in keyof ExtractModel<TTable>]: Column<ColumnType>; },
25
- logger: BaseLogger,
26
- table: AbstractTable<TTable>,
27
- ) {
28
- super(tableName, session, mappedServiceToDb, logger);
29
- this._values = values;
30
- this._table = table as unknown as TTable;
31
- }
32
-
33
- public execute = async () => {
34
- await this._execute();
35
- };
36
-
37
- public onConflict = (
38
- callback: (table: TTable) => Indexing,
39
- expr: UpdateExpr,
40
- ): InsertTRB<TTable> => {
41
- this._onConflictField = callback(this._table);
42
- this._onConflict = expr;
43
- return this;
44
- };
45
-
46
- protected _execute = async (): Promise<ExtractModel<TTable>[]> => {
47
- const queryBuilder = Insert.into(this._tableName, this._columns);
48
- if (!this._values) throw Error('Values should be provided firestly\nExample: table.values().execute()');
49
-
50
- const mappedRows: {[name: string]: any}[] = [];
51
- const mapper = this._mappedServiceToDb;
52
-
53
- this._values.forEach((valueToInsert) => {
54
- const mappedValue: {[name: string]: any} = {};
55
- Object.entries(valueToInsert).forEach(([key, value]) => {
56
- const column = mapper[key as keyof ExtractModel<TTable>];
57
- mappedValue[column.columnName] = value;
58
- });
59
- mappedRows.push(mappedValue);
60
- });
61
-
62
- const valuesQueryBiulder = queryBuilder.values(mappedRows, mapper);
63
- if (this._onConflict) {
64
- valuesQueryBiulder.onConflict(this._onConflict, this._onConflictField);
65
- }
66
-
67
- // @TODO refactor values() part!!
68
- let query = '';
69
- try {
70
- query = queryBuilder.build();
71
- } catch (e) {
72
- throw new BuilderError(BuilderType.INSERT, this._tableName, this._columns, e);
73
- }
74
-
75
- if (this._logger) {
76
- this._logger.info(`Inserting to ${this._tableName} using query:\n ${query}`);
77
- }
78
-
79
- const result = await this._session.execute(query);
80
- if (result.isLeft()) {
81
- const { reason } = result.value;
82
- throw new DatabaseInsertError(this._tableName, reason, query);
83
- } else {
84
- return QueryResponseMapper.map(this._mappedServiceToDb, result.value);
85
- }
86
- };
87
- }
@@ -1,4 +0,0 @@
1
- enum Order {
2
- ASC,
3
- DESC,
4
- } export default Order;