drizzle-orm 0.10.26 → 0.10.27

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 (240) hide show
  1. package/README.md +439 -0
  2. package/dist/builders/aggregators/abstractAggregator.d.ts +11 -0
  3. package/dist/builders/aggregators/abstractAggregator.js +35 -0
  4. package/dist/builders/aggregators/deleteAggregator.d.ts +16 -0
  5. package/dist/builders/aggregators/deleteAggregator.js +42 -0
  6. package/dist/builders/aggregators/insertAggregator.d.ts +22 -0
  7. package/dist/builders/aggregators/insertAggregator.js +106 -0
  8. package/dist/builders/aggregators/selectAggregator.d.ts +39 -0
  9. package/dist/builders/aggregators/selectAggregator.js +143 -0
  10. package/dist/builders/aggregators/updateAggregator.d.ts +19 -0
  11. package/dist/builders/aggregators/updateAggregator.js +50 -0
  12. package/dist/builders/highLvlBuilders/abstractRequestBuilder.d.ts +27 -0
  13. package/dist/builders/highLvlBuilders/abstractRequestBuilder.js +32 -0
  14. package/dist/builders/highLvlBuilders/deleteRequestBuilder.d.ts +19 -0
  15. package/dist/builders/highLvlBuilders/deleteRequestBuilder.js +61 -0
  16. package/dist/builders/highLvlBuilders/insertRequestBuilder.d.ts +20 -0
  17. package/dist/builders/highLvlBuilders/insertRequestBuilder.js +73 -0
  18. package/dist/builders/highLvlBuilders/order.d.ts +5 -0
  19. package/dist/builders/highLvlBuilders/order.js +8 -0
  20. package/dist/builders/highLvlBuilders/selectRequestBuilder.d.ts +47 -0
  21. package/dist/builders/highLvlBuilders/selectRequestBuilder.js +128 -0
  22. package/dist/builders/highLvlBuilders/updateRequestBuilder.d.ts +22 -0
  23. package/dist/builders/highLvlBuilders/updateRequestBuilder.js +80 -0
  24. package/dist/builders/index.d.ts +18 -0
  25. package/dist/builders/index.js +54 -0
  26. package/dist/builders/joinBuilders/builders/abstractJoinBuilder.d.ts +40 -0
  27. package/dist/builders/joinBuilders/builders/abstractJoinBuilder.js +78 -0
  28. package/dist/builders/joinBuilders/builders/selectWithFiveJoins.d.ts +35 -0
  29. package/dist/builders/joinBuilders/builders/selectWithFiveJoins.js +45 -0
  30. package/dist/builders/joinBuilders/builders/selectWithFourJoins.d.ts +55 -0
  31. package/dist/builders/joinBuilders/builders/selectWithFourJoins.js +78 -0
  32. package/dist/builders/joinBuilders/builders/selectWithJoin.d.ts +49 -0
  33. package/dist/builders/joinBuilders/builders/selectWithJoin.js +64 -0
  34. package/dist/builders/joinBuilders/builders/selectWithThreeJoins.d.ts +53 -0
  35. package/dist/builders/joinBuilders/builders/selectWithThreeJoins.js +73 -0
  36. package/dist/builders/joinBuilders/builders/selectWithTwoJoins.d.ts +51 -0
  37. package/dist/builders/joinBuilders/builders/selectWithTwoJoins.js +68 -0
  38. package/dist/builders/joinBuilders/join.d.ts +23 -0
  39. package/dist/builders/joinBuilders/join.js +28 -0
  40. package/dist/builders/joinBuilders/joinWith.d.ts +14 -0
  41. package/dist/builders/joinBuilders/joinWith.js +14 -0
  42. package/dist/builders/joinBuilders/responses/selectResponseFiveJoins.d.ts +20 -0
  43. package/dist/builders/joinBuilders/responses/selectResponseFiveJoins.js +35 -0
  44. package/dist/builders/joinBuilders/responses/selectResponseFourJoins.d.ts +19 -0
  45. package/dist/builders/joinBuilders/responses/selectResponseFourJoins.js +34 -0
  46. package/dist/builders/joinBuilders/responses/selectResponseThreeJoins.d.ts +18 -0
  47. package/dist/builders/joinBuilders/responses/selectResponseThreeJoins.js +33 -0
  48. package/dist/builders/joinBuilders/responses/selectResponseTwoJoins.d.ts +17 -0
  49. package/dist/builders/joinBuilders/responses/selectResponseTwoJoins.js +32 -0
  50. package/dist/builders/joinBuilders/responses/selectResponseWithJoin.d.ts +16 -0
  51. package/dist/builders/joinBuilders/responses/selectResponseWithJoin.js +31 -0
  52. package/dist/builders/joinBuilders/static.d.ts +5 -0
  53. package/dist/builders/joinBuilders/static.js +9 -0
  54. package/dist/builders/lowLvlBuilders/alter.d.ts +0 -0
  55. package/dist/builders/lowLvlBuilders/alter.js +1 -0
  56. package/dist/builders/lowLvlBuilders/create.d.ts +12 -0
  57. package/dist/builders/lowLvlBuilders/create.js +100 -0
  58. package/dist/builders/lowLvlBuilders/delets/delete.d.ts +5 -0
  59. package/dist/builders/lowLvlBuilders/delets/delete.js +15 -0
  60. package/dist/builders/lowLvlBuilders/delets/deleteFilter.d.ts +11 -0
  61. package/dist/builders/lowLvlBuilders/delets/deleteFilter.js +13 -0
  62. package/dist/builders/lowLvlBuilders/delets/deleteFrom.d.ts +12 -0
  63. package/dist/builders/lowLvlBuilders/delets/deleteFrom.js +14 -0
  64. package/dist/builders/lowLvlBuilders/inserts/insert.d.ts +5 -0
  65. package/dist/builders/lowLvlBuilders/inserts/insert.js +15 -0
  66. package/dist/builders/lowLvlBuilders/inserts/insertInto.d.ts +13 -0
  67. package/dist/builders/lowLvlBuilders/inserts/insertInto.js +16 -0
  68. package/dist/builders/lowLvlBuilders/inserts/onConflictInsert.d.ts +12 -0
  69. package/dist/builders/lowLvlBuilders/inserts/onConflictInsert.js +13 -0
  70. package/dist/builders/lowLvlBuilders/inserts/valuesInsert.d.ts +16 -0
  71. package/dist/builders/lowLvlBuilders/inserts/valuesInsert.js +19 -0
  72. package/dist/builders/lowLvlBuilders/selects/select.d.ts +9 -0
  73. package/dist/builders/lowLvlBuilders/selects/select.js +16 -0
  74. package/dist/builders/lowLvlBuilders/selects/selectFrom.d.ts +28 -0
  75. package/dist/builders/lowLvlBuilders/selects/selectFrom.js +34 -0
  76. package/dist/builders/lowLvlBuilders/selects/selectJoined.d.ts +26 -0
  77. package/dist/builders/lowLvlBuilders/selects/selectJoined.js +30 -0
  78. package/dist/builders/lowLvlBuilders/selects/whereSelect.d.ts +17 -0
  79. package/dist/builders/lowLvlBuilders/selects/whereSelect.js +25 -0
  80. package/dist/builders/lowLvlBuilders/updates/update.d.ts +5 -0
  81. package/dist/builders/lowLvlBuilders/updates/update.js +15 -0
  82. package/dist/builders/lowLvlBuilders/updates/updateIn.d.ts +13 -0
  83. package/dist/builders/lowLvlBuilders/updates/updateIn.js +15 -0
  84. package/dist/builders/lowLvlBuilders/updates/whereSelect.d.ts +11 -0
  85. package/dist/builders/lowLvlBuilders/updates/whereSelect.js +13 -0
  86. package/dist/builders/lowLvlBuilders/updates/whereSet.d.ts +14 -0
  87. package/dist/builders/lowLvlBuilders/updates/whereSet.js +18 -0
  88. package/dist/builders/requestBuilders/updates/combine.d.ts +9 -0
  89. package/dist/builders/requestBuilders/updates/combine.js +26 -0
  90. package/dist/builders/requestBuilders/updates/increment.d.ts +13 -0
  91. package/dist/builders/requestBuilders/updates/increment.js +18 -0
  92. package/dist/builders/requestBuilders/updates/setObjects.d.ts +12 -0
  93. package/dist/builders/requestBuilders/updates/setObjects.js +19 -0
  94. package/dist/builders/requestBuilders/updates/static.d.ts +7 -0
  95. package/dist/builders/requestBuilders/updates/static.js +15 -0
  96. package/dist/builders/requestBuilders/updates/updates.d.ts +9 -0
  97. package/dist/builders/requestBuilders/updates/updates.js +10 -0
  98. package/dist/builders/requestBuilders/where/and.d.ts +11 -0
  99. package/dist/builders/requestBuilders/where/and.js +31 -0
  100. package/dist/builders/requestBuilders/where/const.d.ts +9 -0
  101. package/dist/builders/requestBuilders/where/const.js +25 -0
  102. package/dist/builders/requestBuilders/where/constArray.d.ts +9 -0
  103. package/dist/builders/requestBuilders/where/constArray.js +39 -0
  104. package/dist/builders/requestBuilders/where/eqWhere.d.ts +12 -0
  105. package/dist/builders/requestBuilders/where/eqWhere.js +20 -0
  106. package/dist/builders/requestBuilders/where/greater.d.ts +15 -0
  107. package/dist/builders/requestBuilders/where/greater.js +20 -0
  108. package/dist/builders/requestBuilders/where/greaterEq.d.ts +15 -0
  109. package/dist/builders/requestBuilders/where/greaterEq.js +20 -0
  110. package/dist/builders/requestBuilders/where/in.d.ts +12 -0
  111. package/dist/builders/requestBuilders/where/in.js +20 -0
  112. package/dist/builders/requestBuilders/where/isNotNull.d.ts +11 -0
  113. package/dist/builders/requestBuilders/where/isNotNull.js +18 -0
  114. package/dist/builders/requestBuilders/where/isNull.d.ts +11 -0
  115. package/dist/builders/requestBuilders/where/isNull.js +18 -0
  116. package/dist/builders/requestBuilders/where/less.d.ts +15 -0
  117. package/dist/builders/requestBuilders/where/less.js +20 -0
  118. package/dist/builders/requestBuilders/where/lessEq.d.ts +15 -0
  119. package/dist/builders/requestBuilders/where/lessEq.js +20 -0
  120. package/dist/builders/requestBuilders/where/like.d.ts +12 -0
  121. package/dist/builders/requestBuilders/where/like.js +20 -0
  122. package/dist/builders/requestBuilders/where/notEqWhere.d.ts +12 -0
  123. package/dist/builders/requestBuilders/where/notEqWhere.js +20 -0
  124. package/dist/builders/requestBuilders/where/or.d.ts +11 -0
  125. package/dist/builders/requestBuilders/where/or.js +31 -0
  126. package/dist/builders/requestBuilders/where/rawWhere.d.ts +9 -0
  127. package/dist/builders/requestBuilders/where/rawWhere.js +15 -0
  128. package/dist/builders/requestBuilders/where/static.d.ts +17 -0
  129. package/dist/builders/requestBuilders/where/static.js +49 -0
  130. package/dist/builders/requestBuilders/where/var.d.ts +13 -0
  131. package/dist/builders/requestBuilders/where/var.js +18 -0
  132. package/dist/builders/requestBuilders/where/where.d.ts +8 -0
  133. package/dist/builders/requestBuilders/where/where.js +6 -0
  134. package/dist/builders/transaction/transaction.d.ts +8 -0
  135. package/dist/builders/transaction/transaction.js +20 -0
  136. package/dist/columns/column.d.ts +72 -0
  137. package/dist/columns/column.js +101 -0
  138. package/dist/columns/index.d.ts +10 -0
  139. package/dist/columns/index.js +27 -0
  140. package/dist/columns/types/columnType.d.ts +7 -0
  141. package/dist/columns/types/columnType.js +6 -0
  142. package/dist/columns/types/pgBigDecimal.d.ts +10 -0
  143. package/dist/columns/types/pgBigDecimal.js +31 -0
  144. package/dist/columns/types/pgBigInt.d.ts +15 -0
  145. package/dist/columns/types/pgBigInt.js +32 -0
  146. package/dist/columns/types/pgBigSerial.d.ts +15 -0
  147. package/dist/columns/types/pgBigSerial.js +32 -0
  148. package/dist/columns/types/pgBoolean.d.ts +8 -0
  149. package/dist/columns/types/pgBoolean.js +18 -0
  150. package/dist/columns/types/pgEnum.d.ts +9 -0
  151. package/dist/columns/types/pgEnum.js +18 -0
  152. package/dist/columns/types/pgInteger.d.ts +8 -0
  153. package/dist/columns/types/pgInteger.js +21 -0
  154. package/dist/columns/types/pgJsonb.d.ts +9 -0
  155. package/dist/columns/types/pgJsonb.js +20 -0
  156. package/dist/columns/types/pgSerial.d.ts +8 -0
  157. package/dist/columns/types/pgSerial.js +18 -0
  158. package/dist/columns/types/pgSmallInt.d.ts +8 -0
  159. package/dist/columns/types/pgSmallInt.js +18 -0
  160. package/dist/columns/types/pgText.d.ts +8 -0
  161. package/dist/columns/types/pgText.js +18 -0
  162. package/dist/columns/types/pgTime.d.ts +8 -0
  163. package/dist/columns/types/pgTime.js +18 -0
  164. package/dist/columns/types/pgTimestamp.d.ts +8 -0
  165. package/dist/columns/types/pgTimestamp.js +18 -0
  166. package/dist/columns/types/pgTimestamptz.d.ts +8 -0
  167. package/dist/columns/types/pgTimestamptz.js +18 -0
  168. package/dist/columns/types/pgVarChar.d.ts +9 -0
  169. package/dist/columns/types/pgVarChar.js +24 -0
  170. package/dist/db/db.d.ts +18 -0
  171. package/dist/db/db.js +25 -0
  172. package/dist/db/dbConnector.d.ts +9 -0
  173. package/dist/db/dbConnector.js +32 -0
  174. package/dist/db/dbStringConnector.d.ts +6 -0
  175. package/dist/db/dbStringConnector.js +29 -0
  176. package/dist/db/group_by.d.ts +0 -0
  177. package/dist/db/group_by.js +68 -0
  178. package/dist/db/index.d.ts +4 -0
  179. package/dist/db/index.js +14 -0
  180. package/dist/db/session.d.ts +9 -0
  181. package/dist/db/session.js +16 -0
  182. package/dist/docs/cases/simple_delete.d.ts +1 -0
  183. package/dist/docs/cases/simple_delete.js +35 -0
  184. package/dist/docs/cases/simple_insert.d.ts +1 -0
  185. package/dist/docs/cases/simple_insert.js +57 -0
  186. package/dist/docs/cases/simple_join.d.ts +1 -0
  187. package/dist/docs/cases/simple_join.js +115 -0
  188. package/dist/docs/cases/simple_select.d.ts +1 -0
  189. package/dist/docs/cases/simple_select.js +50 -0
  190. package/dist/docs/cases/simple_update.d.ts +1 -0
  191. package/dist/docs/cases/simple_update.js +39 -0
  192. package/dist/docs/tables/citiesTable.d.ts +14 -0
  193. package/dist/docs/tables/citiesTable.js +21 -0
  194. package/dist/docs/tables/userGroupsTable.d.ts +7 -0
  195. package/dist/docs/tables/userGroupsTable.js +18 -0
  196. package/dist/docs/tables/usersTable.d.ts +17 -0
  197. package/dist/docs/tables/usersTable.js +35 -0
  198. package/dist/docs/tables/usersToUserGroups.d.ts +7 -0
  199. package/dist/docs/tables/usersToUserGroups.js +20 -0
  200. package/dist/docs/types/rolesType.d.ts +1 -0
  201. package/dist/docs/types/rolesType.js +6 -0
  202. package/dist/errors/baseError.d.ts +22 -0
  203. package/dist/errors/baseError.js +35 -0
  204. package/dist/errors/builderError.d.ts +14 -0
  205. package/dist/errors/builderError.js +25 -0
  206. package/dist/errors/dbErrors.d.ts +12 -0
  207. package/dist/errors/dbErrors.js +28 -0
  208. package/dist/index.d.ts +11 -0
  209. package/dist/index.js +31 -0
  210. package/dist/indexes/tableIndex.d.ts +11 -0
  211. package/dist/indexes/tableIndex.js +17 -0
  212. package/dist/logger/abstractLogger.d.ts +4 -0
  213. package/dist/logger/abstractLogger.js +5 -0
  214. package/dist/logger/consoleLogger.d.ts +5 -0
  215. package/dist/logger/consoleLogger.js +15 -0
  216. package/dist/mappers/index.d.ts +0 -0
  217. package/dist/mappers/index.js +1 -0
  218. package/dist/mappers/responseMapper.d.ts +10 -0
  219. package/dist/mappers/responseMapper.js +35 -0
  220. package/dist/migrator/index.d.ts +0 -0
  221. package/dist/migrator/index.js +1 -0
  222. package/dist/migrator/migrator.d.ts +11 -0
  223. package/dist/migrator/migrator.js +105 -0
  224. package/dist/serializer/serializer.d.ts +47 -0
  225. package/dist/serializer/serializer.js +258 -0
  226. package/dist/tables/abstractTable.d.ts +68 -0
  227. package/dist/tables/abstractTable.js +151 -0
  228. package/dist/tables/index.d.ts +3 -0
  229. package/dist/tables/index.js +11 -0
  230. package/dist/tables/inferTypes.d.ts +39 -0
  231. package/dist/tables/inferTypes.js +2 -0
  232. package/dist/tables/migrationsTable.d.ts +7 -0
  233. package/dist/tables/migrationsTable.js +18 -0
  234. package/dist/test.d.ts +1 -0
  235. package/dist/test.js +65 -0
  236. package/dist/types/type.d.ts +10 -0
  237. package/dist/types/type.js +14 -0
  238. package/dist/utils/ecranate.d.ts +2 -0
  239. package/dist/utils/ecranate.js +8 -0
  240. package/package.json +3 -2
@@ -0,0 +1,258 @@
1
+ "use strict";
2
+ /* eslint-disable max-classes-per-file */
3
+ /* eslint-disable import/no-named-as-default-member */
4
+ /* eslint-disable import/no-named-as-default */
5
+ /* eslint-disable no-param-reassign */
6
+ /* eslint-disable no-restricted-syntax */
7
+ var __importDefault = (this && this.__importDefault) || function (mod) {
8
+ return (mod && mod.__esModule) ? mod : { "default": mod };
9
+ };
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ const columns_1 = require("../columns");
12
+ const tableIndex_1 = __importDefault(require("../indexes/tableIndex"));
13
+ const serialiseForeignKey = (fkName, table, column, onDelete, onUpdate) => {
14
+ return `${fkName};${table};${column};${onDelete !== null && onDelete !== void 0 ? onDelete : ''};${onUpdate !== null && onUpdate !== void 0 ? onUpdate : ''}`;
15
+ };
16
+ class MigrationSerializer {
17
+ constructor() {
18
+ this.generate = (tables, enums) => {
19
+ const result = {};
20
+ for (const table of tables) {
21
+ const tableEntries = Object.entries(table);
22
+ const columnToReturn = {};
23
+ const indexToReturn = {};
24
+ for (const properties of tableEntries) {
25
+ const value = properties[1];
26
+ if (value instanceof tableIndex_1.default) {
27
+ const columns = value.getColumns();
28
+ const name = value.indexName();
29
+ const indexColumnToReturn = {};
30
+ for (const column of columns) {
31
+ const columnName = column.getColumnName();
32
+ indexColumnToReturn[columnName] = {
33
+ name: columnName,
34
+ };
35
+ }
36
+ indexToReturn[name] = {
37
+ name,
38
+ columns: indexColumnToReturn,
39
+ isUnique: value.isUnique(),
40
+ };
41
+ }
42
+ if (value instanceof columns_1.Column) {
43
+ columnToReturn[value.getColumnName()] = {
44
+ name: value.getColumnName(),
45
+ type: value.getColumnType().getDbName(),
46
+ primaryKey: !!value.primaryKeyName,
47
+ // unique: !!value.uniqueKeyName,
48
+ // default: value.getDefaultValue() === null ? undefined : value.getDefaultValue(),
49
+ notNull: !value.isNullableFlag,
50
+ };
51
+ if (value.getDefaultValue() !== undefined && value.getDefaultValue() !== null) {
52
+ columnToReturn[value.getColumnName()].default = value.getDefaultValue();
53
+ }
54
+ if (value.uniqueKeyName) {
55
+ const indexName = `${value.getParent().tableName()}_${value.getColumnName()}_index`;
56
+ const indexColumnToReturn = {};
57
+ indexColumnToReturn[value.getColumnName()] = {
58
+ name: value.getColumnName(),
59
+ };
60
+ indexToReturn[indexName] = {
61
+ name: indexName,
62
+ columns: indexColumnToReturn,
63
+ isUnique: true,
64
+ };
65
+ }
66
+ const referenced = value.getReferenced();
67
+ if (referenced) {
68
+ const fkName = `${value.getParent().tableName()}_${value.getColumnName()}_fkey`;
69
+ const table = referenced.getParentName();
70
+ const column = referenced.getColumnName();
71
+ const onDelete = value.getOnDelete();
72
+ const onUpdate = value.getOnUpdate();
73
+ const referenceString = serialiseForeignKey(fkName, table, column, onDelete, onUpdate);
74
+ columnToReturn[value.getColumnName()].references = referenceString;
75
+ }
76
+ }
77
+ }
78
+ result[table.tableName()] = {
79
+ name: table.tableName(),
80
+ columns: columnToReturn,
81
+ indexes: indexToReturn,
82
+ };
83
+ }
84
+ const enumsToReturn = enums.reduce((map, obj) => {
85
+ const key = obj.name;
86
+ const newValues = obj.values.reduce((mapped, value) => {
87
+ mapped[value] = value;
88
+ return mapped;
89
+ }, {});
90
+ map[key] = { name: obj.name, values: newValues };
91
+ return map;
92
+ }, {});
93
+ return { version: '2', tables: result, enums: enumsToReturn };
94
+ };
95
+ this.fromDatabase = async (db) => {
96
+ var _a;
97
+ const result = {};
98
+ const allTables = await db.session().execute('SELECT table_schema, table_name FROM information_schema.tables WHERE table_schema != \'pg_catalog\' and table_schema != \'information_schema\';');
99
+ for await (const row of allTables.rows) {
100
+ try {
101
+ // const tableSchema = row.table_schema;
102
+ const tableName = row.table_name;
103
+ const columnToReturn = {};
104
+ const indexToReturn = {};
105
+ const tableResponse = await db.session().execute(`SELECT a.attrelid::regclass::text, a.attname
106
+ , CASE WHEN a.atttypid = ANY ('{int,int8,int2}'::regtype[])
107
+ AND EXISTS (
108
+ SELECT FROM pg_attrdef ad
109
+ WHERE ad.adrelid = a.attrelid
110
+ AND ad.adnum = a.attnum
111
+ AND pg_get_expr(ad.adbin, ad.adrelid)
112
+ = 'nextval('''
113
+ || (pg_get_serial_sequence (a.attrelid::regclass::text
114
+ , a.attname))::regclass
115
+ || '''::regclass)'
116
+ )
117
+ THEN CASE a.atttypid
118
+ WHEN 'int'::regtype THEN 'serial'
119
+ WHEN 'int8'::regtype THEN 'bigserial'
120
+ WHEN 'int2'::regtype THEN 'smallserial'
121
+ END
122
+ ELSE format_type(a.atttypid, a.atttypmod)
123
+ END AS data_type, INFORMATION_SCHEMA.COLUMNS.table_name, INFORMATION_SCHEMA.COLUMNS.column_name, INFORMATION_SCHEMA.COLUMNS.column_default
124
+ FROM pg_attribute a
125
+ JOIN INFORMATION_SCHEMA.COLUMNS ON INFORMATION_SCHEMA.COLUMNS.column_name = a.attname
126
+ WHERE a.attrelid = '${tableName}'::regclass and INFORMATION_SCHEMA.COLUMNS.table_name = '${tableName}'
127
+ AND a.attnum > 0
128
+ AND NOT a.attisdropped
129
+ ORDER BY a.attnum;`);
130
+ const tableConstraints = await db.session().execute(`SELECT c.column_name, c.data_type, constraint_type, constraint_name
131
+ FROM information_schema.table_constraints tc
132
+ JOIN information_schema.constraint_column_usage AS ccu USING (constraint_schema, constraint_name)
133
+ JOIN information_schema.columns AS c ON c.table_schema = tc.constraint_schema
134
+ AND tc.table_name = c.table_name AND ccu.column_name = c.column_name
135
+ WHERE tc.table_name = '${tableName}';`);
136
+ const tableForeignKeys = await db.session().execute(`SELECT
137
+ tc.table_schema,
138
+ tc.constraint_name,
139
+ tc.table_name,
140
+ kcu.column_name,
141
+ ccu.table_schema AS foreign_table_schema,
142
+ ccu.table_name AS foreign_table_name,
143
+ ccu.column_name AS foreign_column_name,
144
+ rc.delete_rule, rc.update_rule
145
+ FROM
146
+ information_schema.table_constraints AS tc
147
+ JOIN information_schema.key_column_usage AS kcu
148
+ ON tc.constraint_name = kcu.constraint_name
149
+ AND tc.table_schema = kcu.table_schema
150
+ JOIN information_schema.constraint_column_usage AS ccu
151
+ ON ccu.constraint_name = tc.constraint_name
152
+ AND ccu.table_schema = tc.table_schema
153
+ JOIN information_schema.referential_constraints AS rc
154
+ ON ccu.constraint_name = rc.constraint_name
155
+ WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_name='${tableName}';`);
156
+ const mappedRefernces = {};
157
+ for (const fk of tableForeignKeys.rows) {
158
+ // const tableFrom = fk.table_name;
159
+ const columnFrom = fk.column_name;
160
+ const tableTo = fk.foreign_table_name;
161
+ const columnTo = fk.foreign_column_name;
162
+ const foreignKeyName = fk.constraint_name;
163
+ const onUpdate = fk.update_rule;
164
+ const onDelete = fk.delete_rule;
165
+ const references = serialiseForeignKey(foreignKeyName, tableTo, columnTo, onDelete, onUpdate);
166
+ mappedRefernces[columnFrom] = references;
167
+ }
168
+ for (const columnResponse of tableResponse.rows) {
169
+ const columnName = columnResponse.attname;
170
+ const columnType = columnResponse.data_type;
171
+ const primaryKey = tableConstraints.rows.filter((mapRow) => columnName === mapRow.column_name && mapRow.constraint_type === 'PRIMARY KEY');
172
+ const uniqueKey = tableConstraints.rows.filter((mapRow) => columnName === mapRow.column_name && mapRow.constraint_type === 'UNIQUE');
173
+ const defaultValue = columnResponse.column_default === null
174
+ ? undefined : columnResponse.column_default;
175
+ const isSerial = columnType === 'serial';
176
+ columnToReturn[columnName] = {
177
+ name: columnName,
178
+ type: columnType,
179
+ primaryKey: !!primaryKey[0],
180
+ unique: !!uniqueKey[0],
181
+ default: isSerial ? undefined : defaultValue,
182
+ notNull: !columnResponse.is_nullable,
183
+ references: (_a = mappedRefernces[columnName]) !== null && _a !== void 0 ? _a : undefined,
184
+ };
185
+ }
186
+ const dbIndexes = await db.session().execute(`select
187
+ t.relname as table_name,
188
+ i.relname as index_name,
189
+ a.attname as column_name
190
+ from
191
+ pg_class t,
192
+ pg_class i,
193
+ pg_index ix,
194
+ pg_attribute a
195
+ where
196
+ t.oid = ix.indrelid
197
+ and i.oid = ix.indexrelid
198
+ and a.attrelid = t.oid
199
+ and a.attnum = ANY(ix.indkey)
200
+ and t.relkind = 'r'
201
+ and t.relname = '${tableName}'
202
+ order by
203
+ t.relname,
204
+ i.relname;`);
205
+ for (const dbIndex of dbIndexes.rows) {
206
+ const indexName = dbIndex.index_name;
207
+ const indexColumnName = dbIndex.column_name;
208
+ if (indexToReturn[indexName] !== undefined && indexToReturn[indexName] !== null) {
209
+ indexToReturn[indexName].columns[indexColumnName] = {
210
+ name: indexColumnName,
211
+ };
212
+ }
213
+ else {
214
+ indexToReturn[indexName] = {
215
+ name: indexName,
216
+ columns: {
217
+ [indexColumnName]: {
218
+ name: indexColumnName,
219
+ },
220
+ },
221
+ };
222
+ }
223
+ }
224
+ result[tableName] = {
225
+ name: tableName,
226
+ columns: columnToReturn,
227
+ indexes: indexToReturn,
228
+ };
229
+ }
230
+ catch (e) {
231
+ console.log(e);
232
+ }
233
+ }
234
+ const allEnums = await db.session().execute(`select n.nspname as enum_schema,
235
+ t.typname as enum_name,
236
+ e.enumlabel as enum_value
237
+ from pg_type t
238
+ join pg_enum e on t.oid = e.enumtypid
239
+ join pg_catalog.pg_namespace n ON n.oid = t.typnamespace;`);
240
+ const enumsToReturn = {};
241
+ for (const dbEnum of allEnums.rows) {
242
+ const enumName = dbEnum.enum_name;
243
+ const enumValue = dbEnum.enum_value;
244
+ if (enumsToReturn[enumName] !== undefined && enumsToReturn[enumName] !== null) {
245
+ enumsToReturn[enumName].values.push(enumValue);
246
+ }
247
+ else {
248
+ enumsToReturn[enumName] = {
249
+ name: enumName,
250
+ values: [enumValue],
251
+ };
252
+ }
253
+ }
254
+ return { version: '2', tables: result, enums: enumsToReturn };
255
+ };
256
+ }
257
+ }
258
+ exports.default = MigrationSerializer;
@@ -0,0 +1,68 @@
1
+ import PgVarChar from '../columns/types/pgVarChar';
2
+ import PgTimestamp from '../columns/types/pgTimestamp';
3
+ import PgInteger from '../columns/types/pgInteger';
4
+ import PgBigDecimal from '../columns/types/pgBigDecimal';
5
+ import PgTime from '../columns/types/pgTime';
6
+ import PgBoolean from '../columns/types/pgBoolean';
7
+ import PgText from '../columns/types/pgText';
8
+ import PgJsonb from '../columns/types/pgJsonb';
9
+ import ColumnType from '../columns/types/columnType';
10
+ import InsertTRB from '../builders/highLvlBuilders/insertRequestBuilder';
11
+ import DeleteTRB from '../builders/highLvlBuilders/deleteRequestBuilder';
12
+ import UpdateTRB from '../builders/highLvlBuilders/updateRequestBuilder';
13
+ import SelectTRB from '../builders/highLvlBuilders/selectRequestBuilder';
14
+ import PgBigInt53, { PgBigInt64 } from '../columns/types/pgBigInt';
15
+ import BaseLogger from '../logger/abstractLogger';
16
+ import PgEnum from '../columns/types/pgEnum';
17
+ import DB from '../db/db';
18
+ import { AbstractColumn, Column } from '../columns/column';
19
+ import TableIndex from '../indexes/tableIndex';
20
+ import { ExtractModel } from './inferTypes';
21
+ import Enum, { ExtractEnumValues } from '../types/type';
22
+ import PgSmallInt from '../columns/types/pgSmallInt';
23
+ import PgSerial from '../columns/types/pgSerial';
24
+ import PgTimestamptz from '../columns/types/pgTimestamptz';
25
+ import PgBigSerial53, { PgBigSerial64 } from '../columns/types/pgBigSerial';
26
+ export default abstract class AbstractTable<TTable extends AbstractTable<TTable>> {
27
+ db: DB;
28
+ private _session;
29
+ private _logger;
30
+ constructor(db: DB);
31
+ abstract tableName(): string;
32
+ withLogger: (logger: BaseLogger) => void;
33
+ select<TType extends ColumnType<any>, TColumn extends AbstractColumn<TType, boolean, boolean, TTable>, T extends {
34
+ [name: string]: TColumn;
35
+ } = {}>(partial?: T): SelectTRB<TTable, T>;
36
+ update: () => UpdateTRB<TTable>;
37
+ insert: (value: ExtractModel<TTable>) => InsertTRB<TTable>;
38
+ insertMany: (values: ExtractModel<TTable>[]) => InsertTRB<TTable>;
39
+ delete: () => DeleteTRB<TTable>;
40
+ mapServiceToDb(): {
41
+ [name in keyof ExtractModel<TTable>]: AbstractColumn<ColumnType>;
42
+ };
43
+ protected index(columns: Array<Column<ColumnType, boolean, boolean>>): TableIndex;
44
+ protected index(columns: Column<ColumnType, boolean, boolean>): TableIndex;
45
+ protected uniqueIndex(columns: Array<Column<ColumnType, boolean, boolean>>): TableIndex;
46
+ protected uniqueIndex(columns: Column<ColumnType, boolean, boolean>): TableIndex;
47
+ protected varchar(name: string, params?: {
48
+ size?: number;
49
+ }): Column<PgVarChar, true, false, this>;
50
+ protected int(name: string): Column<PgInteger, true, false, this>;
51
+ protected smallInt(name: string): Column<PgSmallInt, true, false, this>;
52
+ protected serial(name: string): Column<PgSerial, true, true, this>;
53
+ protected bigSerial(name: string, maxBytes: 'max_bytes_53'): Column<PgBigSerial53, true, true, this>;
54
+ protected bigSerial(name: string, maxBytes: 'max_bytes_64'): Column<PgBigSerial64, true, true, this>;
55
+ protected timestamp(name: string): Column<PgTimestamp, true, false, this>;
56
+ protected timestamptz(name: string): Column<PgTimestamptz, true, false, this>;
57
+ protected bigint(name: string, maxBytes: 'max_bytes_53'): Column<PgBigInt53, true, false, this>;
58
+ protected bigint(name: string, maxBytes: 'max_bytes_64'): Column<PgBigInt64, true, false, this>;
59
+ protected type<ETtype extends string>(typeEnum: Enum<ETtype>, name: string): Column<PgEnum<ExtractEnumValues<Enum<ETtype>>>, true, false, this>;
60
+ protected decimal(name: string, params?: {
61
+ precision?: number;
62
+ scale?: number;
63
+ }): Column<PgBigDecimal, true, false, this>;
64
+ protected time(name: string): Column<PgTime, true, false, this>;
65
+ protected bool(name: string): Column<PgBoolean, true, false, this>;
66
+ protected text(name: string): Column<PgText, true, false, this>;
67
+ protected jsonb<TSubType>(name: string): Column<PgJsonb<TSubType>, true, false, this>;
68
+ }
@@ -0,0 +1,151 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ var __importDefault = (this && this.__importDefault) || function (mod) {
22
+ return (mod && mod.__esModule) ? mod : { "default": mod };
23
+ };
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ const pgVarChar_1 = __importDefault(require("../columns/types/pgVarChar"));
26
+ const pgTimestamp_1 = __importDefault(require("../columns/types/pgTimestamp"));
27
+ const pgInteger_1 = __importDefault(require("../columns/types/pgInteger"));
28
+ const pgBigDecimal_1 = __importDefault(require("../columns/types/pgBigDecimal"));
29
+ const pgTime_1 = __importDefault(require("../columns/types/pgTime"));
30
+ const pgBoolean_1 = __importDefault(require("../columns/types/pgBoolean"));
31
+ const pgText_1 = __importDefault(require("../columns/types/pgText"));
32
+ const pgJsonb_1 = __importDefault(require("../columns/types/pgJsonb"));
33
+ const insertRequestBuilder_1 = __importDefault(require("../builders/highLvlBuilders/insertRequestBuilder"));
34
+ const deleteRequestBuilder_1 = __importDefault(require("../builders/highLvlBuilders/deleteRequestBuilder"));
35
+ const updateRequestBuilder_1 = __importDefault(require("../builders/highLvlBuilders/updateRequestBuilder"));
36
+ const selectRequestBuilder_1 = __importDefault(require("../builders/highLvlBuilders/selectRequestBuilder"));
37
+ const pgBigInt_1 = __importStar(require("../columns/types/pgBigInt"));
38
+ const pgEnum_1 = __importDefault(require("../columns/types/pgEnum"));
39
+ const column_1 = require("../columns/column");
40
+ const tableIndex_1 = __importDefault(require("../indexes/tableIndex"));
41
+ const pgSmallInt_1 = __importDefault(require("../columns/types/pgSmallInt"));
42
+ const pgSerial_1 = __importDefault(require("../columns/types/pgSerial"));
43
+ const pgTimestamptz_1 = __importDefault(require("../columns/types/pgTimestamptz"));
44
+ const pgBigSerial_1 = __importStar(require("../columns/types/pgBigSerial"));
45
+ class AbstractTable {
46
+ constructor(db) {
47
+ this.withLogger = (logger) => {
48
+ this._logger = logger;
49
+ };
50
+ this.update = () => {
51
+ if (!this._session) {
52
+ throw new Error(`Db was not provided in constructor, while ${this.constructor.name} class was creating. Please make sure, that you provided Db object to ${this.constructor.name} class. Should be -> new ${this.constructor.name}(db)`);
53
+ }
54
+ return new updateRequestBuilder_1.default(this, this._session, this.mapServiceToDb(), this._logger);
55
+ };
56
+ this.insert = (value) => {
57
+ if (!this._session) {
58
+ throw new Error(`Db was not provided in constructor, while ${this.constructor.name} class was creating. Please make sure, that you provided Db object to ${this.constructor.name} class. Should be -> new ${this.constructor.name}(db)`);
59
+ }
60
+ return new insertRequestBuilder_1.default([value], this._session, this.mapServiceToDb(), this, this._logger);
61
+ };
62
+ this.insertMany = (values) => {
63
+ if (!this._session) {
64
+ throw new Error(`Db was not provided in constructor, while ${this.constructor.name} class was creating. Please make sure, that you provided Db object to ${this.constructor.name} class. Should be -> new ${this.constructor.name}(db)`);
65
+ }
66
+ return new insertRequestBuilder_1.default(values, this._session, this.mapServiceToDb(), this, this._logger);
67
+ };
68
+ this.delete = () => {
69
+ if (!this._session) {
70
+ throw new Error(`Db was not provided in constructor, while ${this.constructor.name} class was creating. Please make sure, that you provided Db object to ${this.constructor.name} class. Should be -> new ${this.constructor.name}(db)`);
71
+ }
72
+ return new deleteRequestBuilder_1.default(this, this._session, this.mapServiceToDb(), this._logger);
73
+ };
74
+ this._session = db.session();
75
+ this._logger = db.logger();
76
+ this.db = db;
77
+ }
78
+ // eslint-disable-next-line max-len
79
+ select(partial) {
80
+ if (!this._session) {
81
+ throw new Error(`Db was not provided in constructor, while ${this.constructor.name} class was creating. Please make sure, that you provided Db object to ${this.constructor.name} class. Should be -> new ${this.constructor.name}(db)`);
82
+ }
83
+ return new selectRequestBuilder_1.default(this._session, this.mapServiceToDb(), {}, this, this._logger, partial);
84
+ }
85
+ mapServiceToDb() {
86
+ return Object.getOwnPropertyNames(this)
87
+ .reduce((res, fieldName) => {
88
+ const field = this[fieldName];
89
+ if (field instanceof column_1.AbstractColumn) {
90
+ res[fieldName] = field;
91
+ }
92
+ return res;
93
+ }, {});
94
+ }
95
+ index(columns) {
96
+ return new tableIndex_1.default(this.tableName(), columns instanceof Array ? columns : [columns]);
97
+ }
98
+ uniqueIndex(columns) {
99
+ return new tableIndex_1.default(this.tableName(), columns instanceof Array ? columns : [columns], true);
100
+ }
101
+ varchar(name, params = {}) {
102
+ return new column_1.Column(this, name, new pgVarChar_1.default(params.size));
103
+ }
104
+ int(name) {
105
+ return new column_1.Column(this, name, new pgInteger_1.default());
106
+ }
107
+ smallInt(name) {
108
+ return new column_1.Column(this, name, new pgSmallInt_1.default());
109
+ }
110
+ serial(name) {
111
+ return new column_1.Column(this, name, new pgSerial_1.default());
112
+ }
113
+ bigSerial(name, maxBytes) {
114
+ if (maxBytes === 'max_bytes_53') {
115
+ return new column_1.Column(this, name, new pgBigSerial_1.default());
116
+ }
117
+ return new column_1.Column(this, name, new pgBigSerial_1.PgBigSerial64());
118
+ }
119
+ timestamp(name) {
120
+ return new column_1.Column(this, name, new pgTimestamp_1.default());
121
+ }
122
+ timestamptz(name) {
123
+ return new column_1.Column(this, name, new pgTimestamptz_1.default());
124
+ }
125
+ bigint(name, maxBytes) {
126
+ if (maxBytes === 'max_bytes_53') {
127
+ return new column_1.Column(this, name, new pgBigInt_1.default());
128
+ }
129
+ return new column_1.Column(this, name, new pgBigInt_1.PgBigInt64());
130
+ }
131
+ type(typeEnum, name) {
132
+ const pgEnum = new pgEnum_1.default(typeEnum.name);
133
+ return new column_1.Column(this, name, pgEnum);
134
+ }
135
+ decimal(name, params = {}) {
136
+ return new column_1.Column(this, name, new pgBigDecimal_1.default(params.precision, params.scale));
137
+ }
138
+ time(name) {
139
+ return new column_1.Column(this, name, new pgTime_1.default());
140
+ }
141
+ bool(name) {
142
+ return new column_1.Column(this, name, new pgBoolean_1.default());
143
+ }
144
+ text(name) {
145
+ return new column_1.Column(this, name, new pgText_1.default());
146
+ }
147
+ jsonb(name) {
148
+ return new column_1.Column(this, name, new pgJsonb_1.default());
149
+ }
150
+ }
151
+ exports.default = AbstractTable;
@@ -0,0 +1,3 @@
1
+ export { default as MigrationsTable } from './migrationsTable';
2
+ export { default as AbstractTable } from './abstractTable';
3
+ export { ExtractModel } from './inferTypes';
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.AbstractTable = exports.MigrationsTable = void 0;
7
+ /* eslint-disable import/no-cycle */
8
+ var migrationsTable_1 = require("./migrationsTable");
9
+ Object.defineProperty(exports, "MigrationsTable", { enumerable: true, get: function () { return __importDefault(migrationsTable_1).default; } });
10
+ var abstractTable_1 = require("./abstractTable");
11
+ Object.defineProperty(exports, "AbstractTable", { enumerable: true, get: function () { return __importDefault(abstractTable_1).default; } });
@@ -0,0 +1,39 @@
1
+ import { UpdateCustomExpr } from '../builders/requestBuilders/updates/updates';
2
+ import { AbstractColumn, Column, IndexedColumn } from '../columns/column';
3
+ import ColumnType from '../columns/types/columnType';
4
+ import TableIndex from '../indexes/tableIndex';
5
+ import Type from '../types/type';
6
+ import AbstractTable from './abstractTable';
7
+ export declare type ExtractFieldNames<TTable> = {
8
+ [Key in keyof TTable]: TTable[Key] extends Function ? never : TTable[Key] extends Column<ColumnType, infer TNullable, infer TAutoIncrement> ? true extends TNullable ? never : Key : TTable[Key] extends IndexedColumn<ColumnType, infer TNullable, infer TAutoIncrement> ? true extends TNullable ? never : Key : never;
9
+ }[keyof TTable];
10
+ export declare type ExtractOptionalFieldNames<TTable> = {
11
+ [Key in keyof TTable]: TTable[Key] extends Function ? never : TTable[Key] extends Column<ColumnType, infer TNullable, infer TAutoIncrement> ? true extends TNullable ? Key : never : TTable[Key] extends IndexedColumn<ColumnType, infer TNullable, infer TAutoIncrement> ? true extends TNullable ? Key : never : never;
12
+ }[keyof TTable];
13
+ export declare type ExtractPartialObjectFromColumns<TTable> = {
14
+ [Key in ExtractFieldNames<TTable>]: TTable[Key];
15
+ } & {
16
+ [Key in ExtractOptionalFieldNames<TTable>]?: TTable[Key];
17
+ };
18
+ export declare type ExtractModel<TTable> = {
19
+ [Key in ExtractFieldNames<TTable>]: ExtractCodeType<TTable[Key]>;
20
+ } & {
21
+ [Key in ExtractOptionalFieldNames<TTable>]?: ExtractCodeType<TTable[Key]>;
22
+ };
23
+ export declare type ExtractUpdateModel<TTable> = {
24
+ [Key in ExtractFieldNames<TTable>]: ExtractCodeType<TTable[Key]> | UpdateCustomExpr<TTable[Key]>;
25
+ } & {
26
+ [Key in ExtractOptionalFieldNames<TTable>]?: ExtractCodeType<TTable[Key]> | UpdateCustomExpr<TTable[Key]>;
27
+ };
28
+ export declare type ExtractCodeType<T extends AbstractColumn<ColumnType<any>, boolean, boolean>> = T extends AbstractColumn<ColumnType<infer TCodeType>, infer TNullable, infer TAutoIncrement, any> ? TCodeType : never;
29
+ export declare type ExtractTypeEnum<T extends Type<any>> = T extends Type<infer TEnum> ? TEnum : never;
30
+ export declare type Indexing = IndexedColumn<ColumnType, boolean, boolean> | TableIndex;
31
+ export declare type AnyColumn = Column<ColumnType, boolean, boolean> | IndexedColumn<ColumnType, boolean, boolean>;
32
+ export declare type PartialFor<TTable extends AbstractTable<TTable>> = {
33
+ [name: string]: AbstractColumn<ColumnType<any>, boolean, boolean, TTable>;
34
+ };
35
+ export declare type FullOrPartial<TTable extends AbstractTable<TTable>, TPartial extends PartialFor<TTable>> = [keyof TPartial] extends [never] ? ExtractModel<TTable> : ExtractModel<TPartial>;
36
+ export declare type CheckTwoTypes<TInput, TTable extends AbstractTable<TTable>, TTable1 extends AbstractTable<TTable1>> = TInput extends AbstractTable<TTable> ? TTable : TInput extends AbstractTable<TTable1> ? TTable1 : never;
37
+ export declare type CheckThreeTypes<TInput, TTable extends AbstractTable<TTable>, TTable1 extends AbstractTable<TTable1>, TTable2 extends AbstractTable<TTable2>> = TInput extends AbstractTable<TTable> ? TTable : TInput extends AbstractTable<TTable1> ? TTable1 : TInput extends AbstractTable<TTable2> ? TTable2 : never;
38
+ export declare type CheckFourTypes<TInput, TTable extends AbstractTable<TTable>, TTable1 extends AbstractTable<TTable1>, TTable2 extends AbstractTable<TTable2>, TTable3 extends AbstractTable<TTable3>> = TInput extends AbstractTable<TTable> ? TTable : TInput extends AbstractTable<TTable1> ? TTable1 : TInput extends AbstractTable<TTable2> ? TTable2 : TInput extends AbstractTable<TTable3> ? TTable3 : never;
39
+ export declare type CheckFiveTypes<TInput, TTable extends AbstractTable<TTable>, TTable1 extends AbstractTable<TTable1>, TTable2 extends AbstractTable<TTable2>, TTable3 extends AbstractTable<TTable3>, TTable4 extends AbstractTable<TTable4>> = TInput extends AbstractTable<TTable> ? TTable : TInput extends AbstractTable<TTable1> ? TTable1 : TInput extends AbstractTable<TTable2> ? TTable2 : TInput extends AbstractTable<TTable3> ? TTable3 : TInput extends AbstractTable<TTable4> ? TTable4 : never;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,7 @@
1
+ import AbstractTable from './abstractTable';
2
+ export default class MigrationsTable extends AbstractTable<MigrationsTable> {
3
+ id: import("..").Column<import("../columns/types/pgSerial").default, true, true, this>;
4
+ hash: import("..").Column<import("..").PgText, false, false, this>;
5
+ createdAt: import("..").Column<import("..").PgBigInt, true, false, this>;
6
+ tableName(): string;
7
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const abstractTable_1 = __importDefault(require("./abstractTable"));
7
+ class MigrationsTable extends abstractTable_1.default {
8
+ constructor() {
9
+ super(...arguments);
10
+ this.id = this.serial('id').primaryKey();
11
+ this.hash = this.text('hash').notNull();
12
+ this.createdAt = this.bigint('created_at', 'max_bytes_53');
13
+ }
14
+ tableName() {
15
+ return 'drizzle_migrations';
16
+ }
17
+ }
18
+ exports.default = MigrationsTable;
package/dist/test.d.ts ADDED
@@ -0,0 +1 @@
1
+ export {};
package/dist/test.js ADDED
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const static_1 = require("./builders/requestBuilders/where/static");
7
+ const dbConnector_1 = __importDefault(require("./db/dbConnector"));
8
+ const citiesTable_1 = __importDefault(require("./docs/tables/citiesTable"));
9
+ const usersTable_1 = __importDefault(require("./docs/tables/usersTable"));
10
+ const consoleLogger_1 = __importDefault(require("./logger/consoleLogger"));
11
+ (async () => {
12
+ try {
13
+ const db = await new dbConnector_1.default()
14
+ .connectionString('postgresql://postgres@127.0.0.1/migrator')
15
+ .connect();
16
+ const usersTable = new usersTable_1.default(db);
17
+ const citiesTable = new citiesTable_1.default(db);
18
+ db.useLogger(new consoleLogger_1.default());
19
+ const phone = undefined;
20
+ const res = await usersTable.update()
21
+ // .groupBy((table, join1, join2, join3) => [table.id, join1.id, join1.phone])
22
+ .where(static_1.eq(usersTable.id, 16))
23
+ .set({
24
+ phone,
25
+ })
26
+ // .leftJoin(CitiesTable, UsersTable, (table) => table.userId, (table) => table.id)
27
+ // .leftJoin(UsersTable, UsersTable, (table) => table.id, (table) => table.id)
28
+ .execute();
29
+ // const ser = new MigrationSerializer();
30
+ // const res = ser.generate([usersTable as AbstractTable<UsersTable>], []);
31
+ // console.log(JSON.stringify(res, null, 2));
32
+ // const f = {
33
+ // id: count(usersTable.id),
34
+ // };
35
+ // type d = ExtractModel<typeof f>;
36
+ // const res = await usersTable.select({
37
+ // piska: count(),
38
+ // mongodibil: count(usersTable.phone),
39
+ // })
40
+ // .where({
41
+ // piska: eq(),
42
+ // mongodibil: eq(usersTable.phone),
43
+ // }).leftJoin(UsersTable, (table) => table.id, (table) => table.id)
44
+ // .leftJoin(UsersTable, UsersTable, (table) => table.id, (table) => table.id)
45
+ // .groupBy((table, join1, join2, join3) => [table.id, join1.id, join1.phone])
46
+ // .orderBy((table, join1, join2, join3) => [{table.id}, join1.id, join1.phone])
47
+ // .execute();
48
+ // const res = await usersTable.select()
49
+ // // .groupBy((table, join1, join2, join3) => [table.id, join1.id, join1.phone])
50
+ // .leftJoin(UsersTable, (table) => table.foundationDate, (table) => table.id)
51
+ // .leftJoin(UsersTable, UsersTable, (table) => table.role, (table) => table.id)
52
+ // .leftJoin(UsersTable, UsersTable, (table) => table.role, (table) => table.id)
53
+ // // .groupBy({
54
+ // // usersTable: usersTable.id,
55
+ // // firstJoin: [usersTable.id],
56
+ // // secondJoin: usersTable.id,
57
+ // // thirdJoin: usersTable.id,
58
+ // // })
59
+ // .execute();
60
+ // console.log(res);
61
+ }
62
+ catch (e) {
63
+ console.log(e);
64
+ }
65
+ })();
@@ -0,0 +1,10 @@
1
+ export default class Enum<T extends string> {
2
+ name: string;
3
+ values: T[];
4
+ constructor(name: string, values: T[]);
5
+ }
6
+ export declare type ExtractEnumValues<T> = T extends Enum<infer TValues> ? TValues : never;
7
+ export declare function createEnum<T extends string>({ alias, values }: {
8
+ alias: string;
9
+ values: T[];
10
+ }): Enum<T>;