@proteinjs/db 1.0.14 → 1.0.16

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 (105) hide show
  1. package/.eslintrc.js +20 -0
  2. package/.prettierignore +3 -0
  3. package/.prettierrc +8 -0
  4. package/CHANGELOG.md +14 -24
  5. package/LICENSE +21 -0
  6. package/dist/generated/index.js +1 -1
  7. package/dist/generated/index.js.map +1 -1
  8. package/dist/src/Columns.d.ts.map +1 -1
  9. package/dist/src/Columns.js +34 -17
  10. package/dist/src/Columns.js.map +1 -1
  11. package/dist/src/Db.d.ts.map +1 -1
  12. package/dist/src/Db.js +45 -18
  13. package/dist/src/Db.js.map +1 -1
  14. package/dist/src/MigrationRunner.d.ts.map +1 -1
  15. package/dist/src/MigrationRunner.js +15 -7
  16. package/dist/src/MigrationRunner.js.map +1 -1
  17. package/dist/src/QueryBuilderFactory.d.ts.map +1 -1
  18. package/dist/src/QueryBuilderFactory.js +5 -7
  19. package/dist/src/QueryBuilderFactory.js.map +1 -1
  20. package/dist/src/Record.d.ts.map +1 -1
  21. package/dist/src/Record.js +4 -2
  22. package/dist/src/Record.js.map +1 -1
  23. package/dist/src/StatementConfigFactory.d.ts.map +1 -1
  24. package/dist/src/StatementConfigFactory.js +3 -2
  25. package/dist/src/StatementConfigFactory.js.map +1 -1
  26. package/dist/src/Table.d.ts.map +1 -1
  27. package/dist/src/Table.js +6 -3
  28. package/dist/src/Table.js.map +1 -1
  29. package/dist/src/auth/TableAuth.d.ts.map +1 -1
  30. package/dist/src/auth/TableAuth.js +16 -11
  31. package/dist/src/auth/TableAuth.js.map +1 -1
  32. package/dist/src/auth/TableServiceAuth.d.ts.map +1 -1
  33. package/dist/src/auth/TableServiceAuth.js +12 -6
  34. package/dist/src/auth/TableServiceAuth.js.map +1 -1
  35. package/dist/src/reference/Reference.d.ts.map +1 -1
  36. package/dist/src/reference/Reference.js.map +1 -1
  37. package/dist/src/reference/ReferenceArray.d.ts.map +1 -1
  38. package/dist/src/reference/ReferenceArray.js.map +1 -1
  39. package/dist/src/schema/SchemaMetadata.d.ts.map +1 -1
  40. package/dist/src/schema/SchemaMetadata.js +18 -15
  41. package/dist/src/schema/SchemaMetadata.js.map +1 -1
  42. package/dist/src/schema/SchemaOperations.d.ts.map +1 -1
  43. package/dist/src/schema/TableManager.d.ts.map +1 -1
  44. package/dist/src/schema/TableManager.js +24 -9
  45. package/dist/src/schema/TableManager.js.map +1 -1
  46. package/dist/src/serializers/GraphSerializer.d.ts.map +1 -1
  47. package/dist/src/serializers/QueryBuilderSerializer.d.ts.map +1 -1
  48. package/dist/src/serializers/ReferenceArraySerializer.d.ts.map +1 -1
  49. package/dist/src/serializers/ReferenceArraySerializer.js.map +1 -1
  50. package/dist/src/serializers/ReferenceSerializer.d.ts.map +1 -1
  51. package/dist/src/serializers/TableSerializer.d.ts.map +1 -1
  52. package/dist/src/services/DbService.d.ts.map +1 -1
  53. package/dist/src/source/SourceRecord.d.ts.map +1 -1
  54. package/dist/src/source/SourceRecord.js +7 -3
  55. package/dist/src/source/SourceRecord.js.map +1 -1
  56. package/dist/src/source/SourceRecordLoader.d.ts.map +1 -1
  57. package/dist/src/source/SourceRecordLoader.js +11 -4
  58. package/dist/src/source/SourceRecordLoader.js.map +1 -1
  59. package/dist/src/source/SourceRecordRepo.d.ts.map +1 -1
  60. package/dist/src/source/SourceRecordRepo.js.map +1 -1
  61. package/dist/src/tables/MigrationTable.d.ts.map +1 -1
  62. package/dist/src/tables/MigrationTable.js.map +1 -1
  63. package/dist/src/tables/tables.d.ts.map +1 -1
  64. package/dist/src/tables/tables.js.map +1 -1
  65. package/dist/test/CrudTests.d.ts +2 -0
  66. package/dist/test/CrudTests.d.ts.map +1 -1
  67. package/dist/test/CrudTests.js +19 -4
  68. package/dist/test/CrudTests.js.map +1 -1
  69. package/dist/test/TableManagerTests.d.ts.map +1 -1
  70. package/dist/test/TableManagerTests.js +17 -9
  71. package/dist/test/TableManagerTests.js.map +1 -1
  72. package/generated/index.ts +15 -18
  73. package/index.ts +1 -1
  74. package/jest.config.js +8 -17
  75. package/package.json +49 -43
  76. package/src/Columns.ts +284 -241
  77. package/src/Db.ts +188 -147
  78. package/src/MigrationRunner.ts +24 -10
  79. package/src/QueryBuilderFactory.ts +6 -9
  80. package/src/Record.ts +35 -29
  81. package/src/StatementConfigFactory.ts +14 -16
  82. package/src/Table.ts +91 -88
  83. package/src/auth/TableAuth.ts +37 -27
  84. package/src/auth/TableServiceAuth.ts +11 -9
  85. package/src/opt/moment.ts +1 -1
  86. package/src/reference/Reference.ts +7 -7
  87. package/src/reference/ReferenceArray.ts +8 -8
  88. package/src/schema/SchemaMetadata.ts +84 -64
  89. package/src/schema/SchemaOperations.ts +2 -2
  90. package/src/schema/TableManager.ts +178 -168
  91. package/src/serializers/GraphSerializer.ts +4 -4
  92. package/src/serializers/QueryBuilderSerializer.ts +11 -11
  93. package/src/serializers/ReferenceArraySerializer.ts +12 -8
  94. package/src/serializers/ReferenceSerializer.ts +7 -7
  95. package/src/serializers/TableSerializer.ts +5 -5
  96. package/src/services/DbService.ts +3 -3
  97. package/src/services/MigrationRunnerService.ts +1 -1
  98. package/src/source/SourceRecord.ts +43 -24
  99. package/src/source/SourceRecordLoader.ts +29 -18
  100. package/src/source/SourceRecordRepo.ts +3 -3
  101. package/src/tables/MigrationTable.ts +5 -5
  102. package/src/tables/tables.ts +1 -1
  103. package/test/CrudTests.ts +46 -26
  104. package/test/TableManagerTests.ts +329 -154
  105. package/tsconfig.json +18 -22
@@ -1,86 +1,99 @@
1
- import { BinaryColumn, BooleanColumn, DateColumn, DateTimeColumn, DecimalColumn, FloatColumn, IntegerColumn, ObjectColumn, StringColumn, UuidColumn } from '../src/Columns'
2
- import { DbDriver } from '../src/Db'
3
- import { Record, withRecordColumns } from '../src/Record'
4
- import { Column, Table } from '../src/Table'
1
+ import {
2
+ BinaryColumn,
3
+ BooleanColumn,
4
+ DateColumn,
5
+ DateTimeColumn,
6
+ DecimalColumn,
7
+ FloatColumn,
8
+ IntegerColumn,
9
+ ObjectColumn,
10
+ StringColumn,
11
+ UuidColumn,
12
+ } from '../src/Columns';
13
+ import { DbDriver } from '../src/Db';
14
+ import { Record, withRecordColumns } from '../src/Record';
15
+ import { Column, Table } from '../src/Table';
5
16
 
6
17
  interface User extends Record {
7
- name: string,
8
- email: string,
9
- active: boolean,
10
- };
18
+ name: string;
19
+ email: string;
20
+ active: boolean;
21
+ }
11
22
 
12
23
  class UserTable extends Table<User> {
13
- name = 'db_test_user';
14
- columns = withRecordColumns<User>({
15
- name: new StringColumn('name'),
24
+ name = 'db_test_user';
25
+ columns = withRecordColumns<User>({
26
+ name: new StringColumn('name'),
16
27
  email: new StringColumn('email'),
17
- active: new BooleanColumn('active'),
18
- });
19
- indexes = [
20
- { name: 'db_test_user_email_index', columns: ['email'] as (keyof User)[] },
21
- { name: 'db_test_user_active_email_index', columns: ['active', 'email'] as (keyof User)[] },
22
- ]
23
- };
28
+ active: new BooleanColumn('active'),
29
+ });
30
+ indexes = [
31
+ { name: 'db_test_user_email_index', columns: ['email'] as (keyof User)[] },
32
+ { name: 'db_test_user_active_email_index', columns: ['active', 'email'] as (keyof User)[] },
33
+ ];
34
+ }
24
35
 
25
36
  interface ColumnTypes extends Record {
26
- integer: number;
27
- bigInteger: number;
28
- text: string;
29
- string: string;
30
- float: number;
31
- decimal: number;
32
- boolean: boolean;
33
- date: Date;
34
- dateTime: moment.Moment;
35
- binary: boolean;
36
- object: any;
37
- uuid: string;
37
+ integer: number;
38
+ bigInteger: number;
39
+ text: string;
40
+ string: string;
41
+ float: number;
42
+ decimal: number;
43
+ boolean: boolean;
44
+ date: Date;
45
+ dateTime: moment.Moment;
46
+ binary: boolean;
47
+ object: any;
48
+ uuid: string;
38
49
  }
39
50
 
40
51
  class ColumnTypesTable extends Table<ColumnTypes> {
41
- name = 'db_test_column_types';
42
- columns = withRecordColumns<ColumnTypes>({
43
- integer: new IntegerColumn('integer', { nullable: true }),
44
- bigInteger: new IntegerColumn('big_integer', { nullable: false }, true),
45
- string: new StringColumn('string', { references: { table: 'db_test_user' } }),
46
- text: new StringColumn('text', undefined, 'MAX'),
47
- float: new FloatColumn('float', { defaultValue: async () => 0.5 }),
48
- decimal: new DecimalColumn('decimal'),
49
- boolean: new BooleanColumn('boolean'),
50
- date: new DateColumn('date'),
51
- dateTime: new DateTimeColumn('date_time'),
52
- binary: new BinaryColumn('binary'),
53
- object: new ObjectColumn('object'),
54
- uuid: new UuidColumn('uuid', { unique: { unique: true } })
55
- });
52
+ name = 'db_test_column_types';
53
+ columns = withRecordColumns<ColumnTypes>({
54
+ integer: new IntegerColumn('integer', { nullable: true }),
55
+ bigInteger: new IntegerColumn('big_integer', { nullable: false }, true),
56
+ string: new StringColumn('string', { references: { table: 'db_test_user' } }),
57
+ text: new StringColumn('text', undefined, 'MAX'),
58
+ float: new FloatColumn('float', { defaultValue: async () => 0.5 }),
59
+ decimal: new DecimalColumn('decimal'),
60
+ boolean: new BooleanColumn('boolean'),
61
+ date: new DateColumn('date'),
62
+ dateTime: new DateTimeColumn('date_time'),
63
+ binary: new BinaryColumn('binary'),
64
+ object: new ObjectColumn('object'),
65
+ uuid: new UuidColumn('uuid', { unique: { unique: true } }),
66
+ });
56
67
  }
57
68
 
58
69
  export const tableManagerTests = (
59
- driver: DbDriver,
70
+ driver: DbDriver,
60
71
  dropTable: (table: Table<any>) => Promise<void>,
61
72
  getColumnType: (column: Column<any, any>) => string,
62
73
  excludedTests?: {
63
- alterColumnName?: boolean,
64
- alterColumnTypes?: boolean,
65
- alterNullableConstraint?: boolean,
74
+ alterColumnName?: boolean;
75
+ alterColumnTypes?: boolean;
76
+ alterNullableConstraint?: boolean;
66
77
  }
67
78
  ) => {
68
79
  return () => {
69
80
  const tableManager = driver.getTableManager();
70
81
 
71
82
  beforeAll(async () => {
72
- if (driver.start)
83
+ if (driver.start) {
73
84
  await driver.start();
74
- })
75
-
85
+ }
86
+ });
87
+
76
88
  afterEach(async () => {
77
89
  await dropTable(new ColumnTypesTable());
78
90
  await dropTable(new UserTable());
79
- })
80
-
91
+ });
92
+
81
93
  afterAll(async () => {
82
- if (driver.stop)
94
+ if (driver.stop) {
83
95
  await driver.stop();
96
+ }
84
97
  });
85
98
 
86
99
  test('create primary key', async () => {
@@ -91,7 +104,7 @@ export const tableManagerTests = (
91
104
  expect(primaryKey[0]).toBe('id');
92
105
  expect(primaryKey.length).toBe(1);
93
106
  });
94
-
107
+
95
108
  test('create columns', async () => {
96
109
  const userTable = new UserTable();
97
110
  await tableManager.loadTable(userTable);
@@ -100,7 +113,7 @@ export const tableManagerTests = (
100
113
  expect(await tableManager.schemaMetadata.columnExists(userTable.columns.email.name, userTable)).toBeTruthy();
101
114
  expect(await tableManager.schemaMetadata.columnExists(userTable.columns.active.name, userTable)).toBeTruthy();
102
115
  });
103
-
116
+
104
117
  test('add column via alter', async () => {
105
118
  const userTable = new UserTable();
106
119
  const dataColumn = new ObjectColumn('data');
@@ -118,7 +131,7 @@ export const tableManagerTests = (
118
131
  expect(await tableManager.schemaMetadata.columnExists(userTable.columns.active.name, userTable)).toBeTruthy();
119
132
  expect(await tableManager.schemaMetadata.columnExists(dataColumn.name, userTable)).toBeTruthy();
120
133
  });
121
-
134
+
122
135
  test('columns created with correct types', async () => {
123
136
  const userTable = new UserTable();
124
137
  const columnTypesTable = new ColumnTypesTable();
@@ -126,20 +139,44 @@ export const tableManagerTests = (
126
139
  await tableManager.loadTable(columnTypesTable);
127
140
  expect(await tableManager.tableExists(columnTypesTable)).toBeTruthy();
128
141
  const columnMetadata = await tableManager.schemaMetadata.getColumnMetadata(columnTypesTable);
129
- expect(columnMetadata[columnTypesTable.columns.integer.name].type).toBe(getColumnType(columnTypesTable.columns.integer));
130
- expect(columnMetadata[columnTypesTable.columns.bigInteger.name].type).toBe(getColumnType(columnTypesTable.columns.bigInteger));
131
- expect(columnMetadata[columnTypesTable.columns.text.name].type).toBe(getColumnType(columnTypesTable.columns.text));
132
- expect(columnMetadata[columnTypesTable.columns.string.name].type).toBe(getColumnType(columnTypesTable.columns.string));
133
- expect(columnMetadata[columnTypesTable.columns.float.name].type).toBe(getColumnType(columnTypesTable.columns.float));
134
- expect(columnMetadata[columnTypesTable.columns.decimal.name].type).toBe(getColumnType(columnTypesTable.columns.decimal));
135
- expect(columnMetadata[columnTypesTable.columns.boolean.name].type).toBe(getColumnType(columnTypesTable.columns.boolean));
136
- expect(columnMetadata[columnTypesTable.columns.date.name].type).toBe(getColumnType(columnTypesTable.columns.date));
137
- expect(columnMetadata[columnTypesTable.columns.dateTime.name].type).toBe(getColumnType(columnTypesTable.columns.dateTime));
138
- expect(columnMetadata[columnTypesTable.columns.binary.name].type).toBe(getColumnType(columnTypesTable.columns.binary));
139
- expect(columnMetadata[columnTypesTable.columns.object.name].type).toBe(getColumnType(columnTypesTable.columns.object));
140
- expect(columnMetadata[columnTypesTable.columns.uuid.name].type).toBe(getColumnType(columnTypesTable.columns.uuid));
142
+ expect(columnMetadata[columnTypesTable.columns.integer.name].type).toBe(
143
+ getColumnType(columnTypesTable.columns.integer)
144
+ );
145
+ expect(columnMetadata[columnTypesTable.columns.bigInteger.name].type).toBe(
146
+ getColumnType(columnTypesTable.columns.bigInteger)
147
+ );
148
+ expect(columnMetadata[columnTypesTable.columns.text.name].type).toBe(
149
+ getColumnType(columnTypesTable.columns.text)
150
+ );
151
+ expect(columnMetadata[columnTypesTable.columns.string.name].type).toBe(
152
+ getColumnType(columnTypesTable.columns.string)
153
+ );
154
+ expect(columnMetadata[columnTypesTable.columns.float.name].type).toBe(
155
+ getColumnType(columnTypesTable.columns.float)
156
+ );
157
+ expect(columnMetadata[columnTypesTable.columns.decimal.name].type).toBe(
158
+ getColumnType(columnTypesTable.columns.decimal)
159
+ );
160
+ expect(columnMetadata[columnTypesTable.columns.boolean.name].type).toBe(
161
+ getColumnType(columnTypesTable.columns.boolean)
162
+ );
163
+ expect(columnMetadata[columnTypesTable.columns.date.name].type).toBe(
164
+ getColumnType(columnTypesTable.columns.date)
165
+ );
166
+ expect(columnMetadata[columnTypesTable.columns.dateTime.name].type).toBe(
167
+ getColumnType(columnTypesTable.columns.dateTime)
168
+ );
169
+ expect(columnMetadata[columnTypesTable.columns.binary.name].type).toBe(
170
+ getColumnType(columnTypesTable.columns.binary)
171
+ );
172
+ expect(columnMetadata[columnTypesTable.columns.object.name].type).toBe(
173
+ getColumnType(columnTypesTable.columns.object)
174
+ );
175
+ expect(columnMetadata[columnTypesTable.columns.uuid.name].type).toBe(
176
+ getColumnType(columnTypesTable.columns.uuid)
177
+ );
141
178
  });
142
-
179
+
143
180
  test('columns created with correct options', async () => {
144
181
  const userTable = new UserTable();
145
182
  const columnTypesTable = new ColumnTypesTable();
@@ -147,23 +184,24 @@ export const tableManagerTests = (
147
184
  await tableManager.loadTable(columnTypesTable);
148
185
  expect(await tableManager.tableExists(userTable)).toBeTruthy();
149
186
  expect(await tableManager.tableExists(columnTypesTable)).toBeTruthy();
150
-
187
+
151
188
  const columnMetadata = await tableManager.schemaMetadata.getColumnMetadata(columnTypesTable);
152
189
  expect(columnMetadata[columnTypesTable.columns.integer.name].isNullable).toBeTruthy();
153
190
  expect(columnMetadata[columnTypesTable.columns.bigInteger.name].isNullable).toBeFalsy();
154
191
  // expect(parseFloat(columnMetadata[TestColumnTypesTable.columns.float.name]['COLUMN_DEFAULT'])).toBe(0.5);
155
-
192
+
156
193
  const foreignKeys = await tableManager.schemaMetadata.getForeignKeys(columnTypesTable);
157
194
  expect(foreignKeys[columnTypesTable.columns.string.name].referencedTableName).toBe(userTable.name);
158
195
  expect(foreignKeys[columnTypesTable.columns.string.name].referencedColumnName).toBe('id');
159
-
196
+
160
197
  const uniqueColumns = await tableManager.schemaMetadata.getUniqueColumns(columnTypesTable);
161
198
  expect(uniqueColumns.includes(columnTypesTable.columns.uuid.name)).toBeTruthy();
162
199
  });
163
-
200
+
164
201
  test('alter column name', async () => {
165
- if (excludedTests?.alterColumnName)
202
+ if (excludedTests?.alterColumnName) {
166
203
  return;
204
+ }
167
205
 
168
206
  const userTable = new UserTable();
169
207
  await tableManager.loadTable(userTable);
@@ -175,11 +213,12 @@ export const tableManagerTests = (
175
213
  expect(await tableManager.schemaMetadata.columnExists('namo', userTable)).toBeTruthy();
176
214
  expect(await tableManager.schemaMetadata.columnExists('name', userTable)).toBeFalsy();
177
215
  });
178
-
216
+
179
217
  test('alter column types', async () => {
180
- if (excludedTests?.alterColumnTypes)
218
+ if (excludedTests?.alterColumnTypes) {
181
219
  return;
182
-
220
+ }
221
+
183
222
  const userTable = new UserTable();
184
223
  const columnTypesTable = new ColumnTypesTable();
185
224
  await tableManager.loadTable(userTable);
@@ -201,18 +240,42 @@ export const tableManagerTests = (
201
240
  columnTypesTable.columns.uuid = new StringColumn('uuid', { unique: { unique: true } });
202
241
  await tableManager.loadTable(columnTypesTable);
203
242
  const columnMetadata = await tableManager.schemaMetadata.getColumnMetadata(columnTypesTable);
204
- expect(columnMetadata[columnTypesTable.columns.integer.name].type).toBe(getColumnType(columnTypesTable.columns.integer));
205
- expect(columnMetadata[columnTypesTable.columns.bigInteger.name].type).toBe(getColumnType(columnTypesTable.columns.bigInteger));
206
- expect(columnMetadata[columnTypesTable.columns.text.name].type).toBe(getColumnType(columnTypesTable.columns.text));
207
- expect(columnMetadata[columnTypesTable.columns.string.name].type).toBe(getColumnType(columnTypesTable.columns.string));
208
- expect(columnMetadata[columnTypesTable.columns.float.name].type).toBe(getColumnType(columnTypesTable.columns.float));
209
- expect(columnMetadata[columnTypesTable.columns.decimal.name].type).toBe(getColumnType(columnTypesTable.columns.decimal));
210
- expect(columnMetadata[columnTypesTable.columns.boolean.name].type).toBe(getColumnType(columnTypesTable.columns.boolean));
211
- expect(columnMetadata[columnTypesTable.columns.date.name].type).toBe(getColumnType(columnTypesTable.columns.date));
212
- expect(columnMetadata[columnTypesTable.columns.dateTime.name].type).toBe(getColumnType(columnTypesTable.columns.dateTime));
213
- expect(columnMetadata[columnTypesTable.columns.binary.name].type).toBe(getColumnType(columnTypesTable.columns.binary));
214
- expect(columnMetadata[columnTypesTable.columns.object.name].type).toBe(getColumnType(columnTypesTable.columns.object));
215
- expect(columnMetadata[columnTypesTable.columns.uuid.name].type).toBe(getColumnType(columnTypesTable.columns.uuid));
243
+ expect(columnMetadata[columnTypesTable.columns.integer.name].type).toBe(
244
+ getColumnType(columnTypesTable.columns.integer)
245
+ );
246
+ expect(columnMetadata[columnTypesTable.columns.bigInteger.name].type).toBe(
247
+ getColumnType(columnTypesTable.columns.bigInteger)
248
+ );
249
+ expect(columnMetadata[columnTypesTable.columns.text.name].type).toBe(
250
+ getColumnType(columnTypesTable.columns.text)
251
+ );
252
+ expect(columnMetadata[columnTypesTable.columns.string.name].type).toBe(
253
+ getColumnType(columnTypesTable.columns.string)
254
+ );
255
+ expect(columnMetadata[columnTypesTable.columns.float.name].type).toBe(
256
+ getColumnType(columnTypesTable.columns.float)
257
+ );
258
+ expect(columnMetadata[columnTypesTable.columns.decimal.name].type).toBe(
259
+ getColumnType(columnTypesTable.columns.decimal)
260
+ );
261
+ expect(columnMetadata[columnTypesTable.columns.boolean.name].type).toBe(
262
+ getColumnType(columnTypesTable.columns.boolean)
263
+ );
264
+ expect(columnMetadata[columnTypesTable.columns.date.name].type).toBe(
265
+ getColumnType(columnTypesTable.columns.date)
266
+ );
267
+ expect(columnMetadata[columnTypesTable.columns.dateTime.name].type).toBe(
268
+ getColumnType(columnTypesTable.columns.dateTime)
269
+ );
270
+ expect(columnMetadata[columnTypesTable.columns.binary.name].type).toBe(
271
+ getColumnType(columnTypesTable.columns.binary)
272
+ );
273
+ expect(columnMetadata[columnTypesTable.columns.object.name].type).toBe(
274
+ getColumnType(columnTypesTable.columns.object)
275
+ );
276
+ expect(columnMetadata[columnTypesTable.columns.uuid.name].type).toBe(
277
+ getColumnType(columnTypesTable.columns.uuid)
278
+ );
216
279
  const foreignKeys = await tableManager.schemaMetadata.getForeignKeys(columnTypesTable);
217
280
  const uniqueColumns = await tableManager.schemaMetadata.getUniqueColumns(columnTypesTable);
218
281
  expect(columnMetadata[columnTypesTable.columns.integer.name].isNullable).toBeTruthy();
@@ -222,31 +285,59 @@ export const tableManagerTests = (
222
285
  expect(foreignKeys[columnTypesTable.columns.string.name].referencedColumnName).toBe('id');
223
286
  expect(uniqueColumns.includes(columnTypesTable.columns.uuid.name)).toBeTruthy();
224
287
  });
225
-
288
+
226
289
  test('alter unique constraint', async () => {
227
290
  const userTable = new UserTable();
228
291
  const columnTypesTable = new ColumnTypesTable();
229
292
  await tableManager.loadTable(userTable);
230
293
  columnTypesTable.columns.text.options = { defaultValue: async () => 'asdf' };
231
- (columnTypesTable as Table<any>).columns['string2'] = new StringColumn('string2', { references: { table: userTable.name } });
294
+ (columnTypesTable as Table<any>).columns['string2'] = new StringColumn('string2', {
295
+ references: { table: userTable.name },
296
+ });
232
297
  await tableManager.loadTable(columnTypesTable);
233
298
  expect(await tableManager.tableExists(userTable)).toBeTruthy();
234
299
  expect(await tableManager.tableExists(columnTypesTable)).toBeTruthy();
235
300
  let columnMetadata = await tableManager.schemaMetadata.getColumnMetadata(columnTypesTable);
236
- expect(columnMetadata[columnTypesTable.columns.integer.name].type).toBe(getColumnType(columnTypesTable.columns.integer));
237
- expect(columnMetadata[columnTypesTable.columns.bigInteger.name].type).toBe(getColumnType(columnTypesTable.columns.bigInteger));
238
- expect(columnMetadata[columnTypesTable.columns.text.name].type).toBe(getColumnType(columnTypesTable.columns.text));
239
- expect(columnMetadata[columnTypesTable.columns.string.name].type).toBe(getColumnType(columnTypesTable.columns.string));
240
- expect(columnMetadata[columnTypesTable.columns.float.name].type).toBe(getColumnType(columnTypesTable.columns.float));
241
- expect(columnMetadata[columnTypesTable.columns.decimal.name].type).toBe(getColumnType(columnTypesTable.columns.decimal));
242
- expect(columnMetadata[columnTypesTable.columns.boolean.name].type).toBe(getColumnType(columnTypesTable.columns.boolean));
243
- expect(columnMetadata[columnTypesTable.columns.date.name].type).toBe(getColumnType(columnTypesTable.columns.date));
244
- expect(columnMetadata[columnTypesTable.columns.dateTime.name].type).toBe(getColumnType(columnTypesTable.columns.dateTime));
245
- expect(columnMetadata[columnTypesTable.columns.binary.name].type).toBe(getColumnType(columnTypesTable.columns.binary));
246
- expect(columnMetadata[columnTypesTable.columns.object.name].type).toBe(getColumnType(columnTypesTable.columns.object));
247
- expect(columnMetadata[columnTypesTable.columns.uuid.name].type).toBe(getColumnType(columnTypesTable.columns.uuid));
248
- expect(columnMetadata[(columnTypesTable as Table<any>).columns.string2.name].type).toBe(getColumnType((columnTypesTable as Table<any>).columns.string2));
249
- let foreignKeys = await tableManager.schemaMetadata.getForeignKeys(columnTypesTable);
301
+ expect(columnMetadata[columnTypesTable.columns.integer.name].type).toBe(
302
+ getColumnType(columnTypesTable.columns.integer)
303
+ );
304
+ expect(columnMetadata[columnTypesTable.columns.bigInteger.name].type).toBe(
305
+ getColumnType(columnTypesTable.columns.bigInteger)
306
+ );
307
+ expect(columnMetadata[columnTypesTable.columns.text.name].type).toBe(
308
+ getColumnType(columnTypesTable.columns.text)
309
+ );
310
+ expect(columnMetadata[columnTypesTable.columns.string.name].type).toBe(
311
+ getColumnType(columnTypesTable.columns.string)
312
+ );
313
+ expect(columnMetadata[columnTypesTable.columns.float.name].type).toBe(
314
+ getColumnType(columnTypesTable.columns.float)
315
+ );
316
+ expect(columnMetadata[columnTypesTable.columns.decimal.name].type).toBe(
317
+ getColumnType(columnTypesTable.columns.decimal)
318
+ );
319
+ expect(columnMetadata[columnTypesTable.columns.boolean.name].type).toBe(
320
+ getColumnType(columnTypesTable.columns.boolean)
321
+ );
322
+ expect(columnMetadata[columnTypesTable.columns.date.name].type).toBe(
323
+ getColumnType(columnTypesTable.columns.date)
324
+ );
325
+ expect(columnMetadata[columnTypesTable.columns.dateTime.name].type).toBe(
326
+ getColumnType(columnTypesTable.columns.dateTime)
327
+ );
328
+ expect(columnMetadata[columnTypesTable.columns.binary.name].type).toBe(
329
+ getColumnType(columnTypesTable.columns.binary)
330
+ );
331
+ expect(columnMetadata[columnTypesTable.columns.object.name].type).toBe(
332
+ getColumnType(columnTypesTable.columns.object)
333
+ );
334
+ expect(columnMetadata[columnTypesTable.columns.uuid.name].type).toBe(
335
+ getColumnType(columnTypesTable.columns.uuid)
336
+ );
337
+ expect(columnMetadata[(columnTypesTable as Table<any>).columns.string2.name].type).toBe(
338
+ getColumnType((columnTypesTable as Table<any>).columns.string2)
339
+ );
340
+ const foreignKeys = await tableManager.schemaMetadata.getForeignKeys(columnTypesTable);
250
341
  let uniqueColumns = await tableManager.schemaMetadata.getUniqueColumns(columnTypesTable);
251
342
  expect(columnMetadata[columnTypesTable.columns.integer.name].isNullable).toBeTruthy();
252
343
  expect(columnMetadata[columnTypesTable.columns.bigInteger.name].isNullable).toBeFalsy();
@@ -262,19 +353,45 @@ export const tableManagerTests = (
262
353
  columnTypesTable.columns.uuid = new UuidColumn('uuid', { unique: { unique: false } });
263
354
  await tableManager.loadTable(columnTypesTable);
264
355
  columnMetadata = await tableManager.schemaMetadata.getColumnMetadata(columnTypesTable);
265
- expect(columnMetadata[columnTypesTable.columns.integer.name].type).toBe(getColumnType(columnTypesTable.columns.integer));
266
- expect(columnMetadata[columnTypesTable.columns.bigInteger.name].type).toBe(getColumnType(columnTypesTable.columns.bigInteger));
267
- expect(columnMetadata[columnTypesTable.columns.text.name].type).toBe(getColumnType(columnTypesTable.columns.text));
268
- expect(columnMetadata[columnTypesTable.columns.string.name].type).toBe(getColumnType(columnTypesTable.columns.string));
269
- expect(columnMetadata[columnTypesTable.columns.float.name].type).toBe(getColumnType(columnTypesTable.columns.float));
270
- expect(columnMetadata[columnTypesTable.columns.decimal.name].type).toBe(getColumnType(columnTypesTable.columns.decimal));
271
- expect(columnMetadata[columnTypesTable.columns.boolean.name].type).toBe(getColumnType(columnTypesTable.columns.boolean));
272
- expect(columnMetadata[columnTypesTable.columns.date.name].type).toBe(getColumnType(columnTypesTable.columns.date));
273
- expect(columnMetadata[columnTypesTable.columns.dateTime.name].type).toBe(getColumnType(columnTypesTable.columns.dateTime));
274
- expect(columnMetadata[columnTypesTable.columns.binary.name].type).toBe(getColumnType(columnTypesTable.columns.binary));
275
- expect(columnMetadata[columnTypesTable.columns.object.name].type).toBe(getColumnType(columnTypesTable.columns.object));
276
- expect(columnMetadata[columnTypesTable.columns.uuid.name].type).toBe(getColumnType(columnTypesTable.columns.uuid));
277
- expect(columnMetadata[(columnTypesTable as Table<any>).columns.string2.name].type).toBe(getColumnType((columnTypesTable as Table<any>).columns.string2));
356
+ expect(columnMetadata[columnTypesTable.columns.integer.name].type).toBe(
357
+ getColumnType(columnTypesTable.columns.integer)
358
+ );
359
+ expect(columnMetadata[columnTypesTable.columns.bigInteger.name].type).toBe(
360
+ getColumnType(columnTypesTable.columns.bigInteger)
361
+ );
362
+ expect(columnMetadata[columnTypesTable.columns.text.name].type).toBe(
363
+ getColumnType(columnTypesTable.columns.text)
364
+ );
365
+ expect(columnMetadata[columnTypesTable.columns.string.name].type).toBe(
366
+ getColumnType(columnTypesTable.columns.string)
367
+ );
368
+ expect(columnMetadata[columnTypesTable.columns.float.name].type).toBe(
369
+ getColumnType(columnTypesTable.columns.float)
370
+ );
371
+ expect(columnMetadata[columnTypesTable.columns.decimal.name].type).toBe(
372
+ getColumnType(columnTypesTable.columns.decimal)
373
+ );
374
+ expect(columnMetadata[columnTypesTable.columns.boolean.name].type).toBe(
375
+ getColumnType(columnTypesTable.columns.boolean)
376
+ );
377
+ expect(columnMetadata[columnTypesTable.columns.date.name].type).toBe(
378
+ getColumnType(columnTypesTable.columns.date)
379
+ );
380
+ expect(columnMetadata[columnTypesTable.columns.dateTime.name].type).toBe(
381
+ getColumnType(columnTypesTable.columns.dateTime)
382
+ );
383
+ expect(columnMetadata[columnTypesTable.columns.binary.name].type).toBe(
384
+ getColumnType(columnTypesTable.columns.binary)
385
+ );
386
+ expect(columnMetadata[columnTypesTable.columns.object.name].type).toBe(
387
+ getColumnType(columnTypesTable.columns.object)
388
+ );
389
+ expect(columnMetadata[columnTypesTable.columns.uuid.name].type).toBe(
390
+ getColumnType(columnTypesTable.columns.uuid)
391
+ );
392
+ expect(columnMetadata[(columnTypesTable as Table<any>).columns.string2.name].type).toBe(
393
+ getColumnType((columnTypesTable as Table<any>).columns.string2)
394
+ );
278
395
  // expect(parseFloat(columnMetadata[TestColumnTypesTable.columns.float.name]['COLUMN_DEFAULT'])).toBe(1.5);
279
396
  // expect(parseFloat(columnMetadata[TestColumnTypesTable.columns.decimal.name]['COLUMN_DEFAULT'])).toBe(0);
280
397
  // foreignKeys = await tableManager.schemaMetadata.getForeignKeys(columnTypesTable);
@@ -288,33 +405,62 @@ export const tableManagerTests = (
288
405
  });
289
406
 
290
407
  test('alter column nullable constraint', async () => {
291
- if (excludedTests?.alterNullableConstraint)
408
+ if (excludedTests?.alterNullableConstraint) {
292
409
  return;
410
+ }
293
411
 
294
412
  const userTable = new UserTable();
295
413
  const columnTypesTable = new ColumnTypesTable();
296
414
  await tableManager.loadTable(userTable);
297
415
  columnTypesTable.columns.text.options = { defaultValue: async () => 'asdf' };
298
- (columnTypesTable as Table<any>).columns['string2'] = new StringColumn('string2', { references: { table: userTable.name } });
416
+ (columnTypesTable as Table<any>).columns['string2'] = new StringColumn('string2', {
417
+ references: { table: userTable.name },
418
+ });
299
419
  await tableManager.loadTable(columnTypesTable);
300
420
  expect(await tableManager.tableExists(userTable)).toBeTruthy();
301
421
  expect(await tableManager.tableExists(columnTypesTable)).toBeTruthy();
302
422
  let columnMetadata = await tableManager.schemaMetadata.getColumnMetadata(columnTypesTable);
303
- expect(columnMetadata[columnTypesTable.columns.integer.name].type).toBe(getColumnType(columnTypesTable.columns.integer));
304
- expect(columnMetadata[columnTypesTable.columns.bigInteger.name].type).toBe(getColumnType(columnTypesTable.columns.bigInteger));
305
- expect(columnMetadata[columnTypesTable.columns.text.name].type).toBe(getColumnType(columnTypesTable.columns.text));
306
- expect(columnMetadata[columnTypesTable.columns.string.name].type).toBe(getColumnType(columnTypesTable.columns.string));
307
- expect(columnMetadata[columnTypesTable.columns.float.name].type).toBe(getColumnType(columnTypesTable.columns.float));
308
- expect(columnMetadata[columnTypesTable.columns.decimal.name].type).toBe(getColumnType(columnTypesTable.columns.decimal));
309
- expect(columnMetadata[columnTypesTable.columns.boolean.name].type).toBe(getColumnType(columnTypesTable.columns.boolean));
310
- expect(columnMetadata[columnTypesTable.columns.date.name].type).toBe(getColumnType(columnTypesTable.columns.date));
311
- expect(columnMetadata[columnTypesTable.columns.dateTime.name].type).toBe(getColumnType(columnTypesTable.columns.dateTime));
312
- expect(columnMetadata[columnTypesTable.columns.binary.name].type).toBe(getColumnType(columnTypesTable.columns.binary));
313
- expect(columnMetadata[columnTypesTable.columns.object.name].type).toBe(getColumnType(columnTypesTable.columns.object));
314
- expect(columnMetadata[columnTypesTable.columns.uuid.name].type).toBe(getColumnType(columnTypesTable.columns.uuid));
315
- expect(columnMetadata[(columnTypesTable as Table<any>).columns.string2.name].type).toBe(getColumnType((columnTypesTable as Table<any>).columns.string2));
316
- let foreignKeys = await tableManager.schemaMetadata.getForeignKeys(columnTypesTable);
317
- let uniqueColumns = await tableManager.schemaMetadata.getUniqueColumns(columnTypesTable);
423
+ expect(columnMetadata[columnTypesTable.columns.integer.name].type).toBe(
424
+ getColumnType(columnTypesTable.columns.integer)
425
+ );
426
+ expect(columnMetadata[columnTypesTable.columns.bigInteger.name].type).toBe(
427
+ getColumnType(columnTypesTable.columns.bigInteger)
428
+ );
429
+ expect(columnMetadata[columnTypesTable.columns.text.name].type).toBe(
430
+ getColumnType(columnTypesTable.columns.text)
431
+ );
432
+ expect(columnMetadata[columnTypesTable.columns.string.name].type).toBe(
433
+ getColumnType(columnTypesTable.columns.string)
434
+ );
435
+ expect(columnMetadata[columnTypesTable.columns.float.name].type).toBe(
436
+ getColumnType(columnTypesTable.columns.float)
437
+ );
438
+ expect(columnMetadata[columnTypesTable.columns.decimal.name].type).toBe(
439
+ getColumnType(columnTypesTable.columns.decimal)
440
+ );
441
+ expect(columnMetadata[columnTypesTable.columns.boolean.name].type).toBe(
442
+ getColumnType(columnTypesTable.columns.boolean)
443
+ );
444
+ expect(columnMetadata[columnTypesTable.columns.date.name].type).toBe(
445
+ getColumnType(columnTypesTable.columns.date)
446
+ );
447
+ expect(columnMetadata[columnTypesTable.columns.dateTime.name].type).toBe(
448
+ getColumnType(columnTypesTable.columns.dateTime)
449
+ );
450
+ expect(columnMetadata[columnTypesTable.columns.binary.name].type).toBe(
451
+ getColumnType(columnTypesTable.columns.binary)
452
+ );
453
+ expect(columnMetadata[columnTypesTable.columns.object.name].type).toBe(
454
+ getColumnType(columnTypesTable.columns.object)
455
+ );
456
+ expect(columnMetadata[columnTypesTable.columns.uuid.name].type).toBe(
457
+ getColumnType(columnTypesTable.columns.uuid)
458
+ );
459
+ expect(columnMetadata[(columnTypesTable as Table<any>).columns.string2.name].type).toBe(
460
+ getColumnType((columnTypesTable as Table<any>).columns.string2)
461
+ );
462
+ const foreignKeys = await tableManager.schemaMetadata.getForeignKeys(columnTypesTable);
463
+ const uniqueColumns = await tableManager.schemaMetadata.getUniqueColumns(columnTypesTable);
318
464
  expect(columnMetadata[columnTypesTable.columns.integer.name].isNullable).toBeTruthy();
319
465
  expect(columnMetadata[columnTypesTable.columns.bigInteger.name].isNullable).toBeFalsy();
320
466
  // expect(parseFloat(columnMetadata[TestColumnTypesTable.columns.float.name]['COLUMN_DEFAULT'])).toBe(0.5);
@@ -330,19 +476,45 @@ export const tableManagerTests = (
330
476
  columnTypesTable.columns.decimal = new DecimalColumn('decimal', { defaultValue: async () => 0 });
331
477
  await tableManager.loadTable(columnTypesTable);
332
478
  columnMetadata = await tableManager.schemaMetadata.getColumnMetadata(columnTypesTable);
333
- expect(columnMetadata[columnTypesTable.columns.integer.name].type).toBe(getColumnType(columnTypesTable.columns.integer));
334
- expect(columnMetadata[columnTypesTable.columns.bigInteger.name].type).toBe(getColumnType(columnTypesTable.columns.bigInteger));
335
- expect(columnMetadata[columnTypesTable.columns.text.name].type).toBe(getColumnType(columnTypesTable.columns.text));
336
- expect(columnMetadata[columnTypesTable.columns.string.name].type).toBe(getColumnType(columnTypesTable.columns.string));
337
- expect(columnMetadata[columnTypesTable.columns.float.name].type).toBe(getColumnType(columnTypesTable.columns.float));
338
- expect(columnMetadata[columnTypesTable.columns.decimal.name].type).toBe(getColumnType(columnTypesTable.columns.decimal));
339
- expect(columnMetadata[columnTypesTable.columns.boolean.name].type).toBe(getColumnType(columnTypesTable.columns.boolean));
340
- expect(columnMetadata[columnTypesTable.columns.date.name].type).toBe(getColumnType(columnTypesTable.columns.date));
341
- expect(columnMetadata[columnTypesTable.columns.dateTime.name].type).toBe(getColumnType(columnTypesTable.columns.dateTime));
342
- expect(columnMetadata[columnTypesTable.columns.binary.name].type).toBe(getColumnType(columnTypesTable.columns.binary));
343
- expect(columnMetadata[columnTypesTable.columns.object.name].type).toBe(getColumnType(columnTypesTable.columns.object));
344
- expect(columnMetadata[columnTypesTable.columns.uuid.name].type).toBe(getColumnType(columnTypesTable.columns.uuid));
345
- expect(columnMetadata[(columnTypesTable as Table<any>).columns.string2.name].type).toBe(getColumnType((columnTypesTable as Table<any>).columns.string2));
479
+ expect(columnMetadata[columnTypesTable.columns.integer.name].type).toBe(
480
+ getColumnType(columnTypesTable.columns.integer)
481
+ );
482
+ expect(columnMetadata[columnTypesTable.columns.bigInteger.name].type).toBe(
483
+ getColumnType(columnTypesTable.columns.bigInteger)
484
+ );
485
+ expect(columnMetadata[columnTypesTable.columns.text.name].type).toBe(
486
+ getColumnType(columnTypesTable.columns.text)
487
+ );
488
+ expect(columnMetadata[columnTypesTable.columns.string.name].type).toBe(
489
+ getColumnType(columnTypesTable.columns.string)
490
+ );
491
+ expect(columnMetadata[columnTypesTable.columns.float.name].type).toBe(
492
+ getColumnType(columnTypesTable.columns.float)
493
+ );
494
+ expect(columnMetadata[columnTypesTable.columns.decimal.name].type).toBe(
495
+ getColumnType(columnTypesTable.columns.decimal)
496
+ );
497
+ expect(columnMetadata[columnTypesTable.columns.boolean.name].type).toBe(
498
+ getColumnType(columnTypesTable.columns.boolean)
499
+ );
500
+ expect(columnMetadata[columnTypesTable.columns.date.name].type).toBe(
501
+ getColumnType(columnTypesTable.columns.date)
502
+ );
503
+ expect(columnMetadata[columnTypesTable.columns.dateTime.name].type).toBe(
504
+ getColumnType(columnTypesTable.columns.dateTime)
505
+ );
506
+ expect(columnMetadata[columnTypesTable.columns.binary.name].type).toBe(
507
+ getColumnType(columnTypesTable.columns.binary)
508
+ );
509
+ expect(columnMetadata[columnTypesTable.columns.object.name].type).toBe(
510
+ getColumnType(columnTypesTable.columns.object)
511
+ );
512
+ expect(columnMetadata[columnTypesTable.columns.uuid.name].type).toBe(
513
+ getColumnType(columnTypesTable.columns.uuid)
514
+ );
515
+ expect(columnMetadata[(columnTypesTable as Table<any>).columns.string2.name].type).toBe(
516
+ getColumnType((columnTypesTable as Table<any>).columns.string2)
517
+ );
346
518
  expect(columnMetadata[columnTypesTable.columns.integer.name].isNullable).toBeFalsy();
347
519
  expect(columnMetadata[columnTypesTable.columns.bigInteger.name].isNullable).toBeTruthy();
348
520
  // expect(parseFloat(columnMetadata[TestColumnTypesTable.columns.float.name]['COLUMN_DEFAULT'])).toBe(1.5);
@@ -354,7 +526,7 @@ export const tableManagerTests = (
354
526
  // expect(foreignKeys[TestColumnTypesTable.columns.text.name]['REFERENCED_TABLE_NAME']).toBe('user');
355
527
  // expect(foreignKeys[TestColumnTypesTable.columns.text.name]['REFERENCED_COLUMN_NAME']).toBe('id');
356
528
  });
357
-
529
+
358
530
  test('create index', async () => {
359
531
  const userTable = new UserTable();
360
532
  await tableManager.loadTable(userTable);
@@ -363,7 +535,7 @@ export const tableManagerTests = (
363
535
  expect(JSON.stringify(indexes['db_test_user_email_index'])).toBe(JSON.stringify(['email']));
364
536
  expect(JSON.stringify(indexes['db_test_user_active_email_index'])).toBe(JSON.stringify(['active', 'email']));
365
537
  });
366
-
538
+
367
539
  test('alter index', async () => {
368
540
  const userTable = new UserTable();
369
541
  await tableManager.loadTable(userTable);
@@ -371,7 +543,10 @@ export const tableManagerTests = (
371
543
  let indexes = await tableManager.schemaMetadata.getIndexes(userTable);
372
544
  expect(JSON.stringify(indexes['db_test_user_email_index'])).toBe(JSON.stringify(['email']));
373
545
  expect(JSON.stringify(indexes['db_test_user_active_email_index'])).toBe(JSON.stringify(['active', 'email']));
374
- userTable.indexes = [{ name: 'db_test_user_email_index', columns: ['email'] }, { name: 'db_test_user_active_name_index', columns: ['active', 'name'] }];
546
+ userTable.indexes = [
547
+ { name: 'db_test_user_email_index', columns: ['email'] },
548
+ { name: 'db_test_user_active_name_index', columns: ['active', 'name'] },
549
+ ];
375
550
  await tableManager.loadTable(userTable);
376
551
  indexes = await tableManager.schemaMetadata.getIndexes(userTable);
377
552
  expect(JSON.stringify(indexes['db_test_user_email_index'])).toBe(JSON.stringify(['email']));
@@ -379,4 +554,4 @@ export const tableManagerTests = (
379
554
  expect(JSON.stringify(indexes['db_test_user_active_email_index'])).toBeFalsy();
380
555
  });
381
556
  };
382
- }
557
+ };