@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.
- package/.eslintrc.js +20 -0
- package/.prettierignore +3 -0
- package/.prettierrc +8 -0
- package/CHANGELOG.md +14 -24
- package/LICENSE +21 -0
- package/dist/generated/index.js +1 -1
- package/dist/generated/index.js.map +1 -1
- package/dist/src/Columns.d.ts.map +1 -1
- package/dist/src/Columns.js +34 -17
- package/dist/src/Columns.js.map +1 -1
- package/dist/src/Db.d.ts.map +1 -1
- package/dist/src/Db.js +45 -18
- package/dist/src/Db.js.map +1 -1
- package/dist/src/MigrationRunner.d.ts.map +1 -1
- package/dist/src/MigrationRunner.js +15 -7
- package/dist/src/MigrationRunner.js.map +1 -1
- package/dist/src/QueryBuilderFactory.d.ts.map +1 -1
- package/dist/src/QueryBuilderFactory.js +5 -7
- package/dist/src/QueryBuilderFactory.js.map +1 -1
- package/dist/src/Record.d.ts.map +1 -1
- package/dist/src/Record.js +4 -2
- package/dist/src/Record.js.map +1 -1
- package/dist/src/StatementConfigFactory.d.ts.map +1 -1
- package/dist/src/StatementConfigFactory.js +3 -2
- package/dist/src/StatementConfigFactory.js.map +1 -1
- package/dist/src/Table.d.ts.map +1 -1
- package/dist/src/Table.js +6 -3
- package/dist/src/Table.js.map +1 -1
- package/dist/src/auth/TableAuth.d.ts.map +1 -1
- package/dist/src/auth/TableAuth.js +16 -11
- package/dist/src/auth/TableAuth.js.map +1 -1
- package/dist/src/auth/TableServiceAuth.d.ts.map +1 -1
- package/dist/src/auth/TableServiceAuth.js +12 -6
- package/dist/src/auth/TableServiceAuth.js.map +1 -1
- package/dist/src/reference/Reference.d.ts.map +1 -1
- package/dist/src/reference/Reference.js.map +1 -1
- package/dist/src/reference/ReferenceArray.d.ts.map +1 -1
- package/dist/src/reference/ReferenceArray.js.map +1 -1
- package/dist/src/schema/SchemaMetadata.d.ts.map +1 -1
- package/dist/src/schema/SchemaMetadata.js +18 -15
- package/dist/src/schema/SchemaMetadata.js.map +1 -1
- package/dist/src/schema/SchemaOperations.d.ts.map +1 -1
- package/dist/src/schema/TableManager.d.ts.map +1 -1
- package/dist/src/schema/TableManager.js +24 -9
- package/dist/src/schema/TableManager.js.map +1 -1
- package/dist/src/serializers/GraphSerializer.d.ts.map +1 -1
- package/dist/src/serializers/QueryBuilderSerializer.d.ts.map +1 -1
- package/dist/src/serializers/ReferenceArraySerializer.d.ts.map +1 -1
- package/dist/src/serializers/ReferenceArraySerializer.js.map +1 -1
- package/dist/src/serializers/ReferenceSerializer.d.ts.map +1 -1
- package/dist/src/serializers/TableSerializer.d.ts.map +1 -1
- package/dist/src/services/DbService.d.ts.map +1 -1
- package/dist/src/source/SourceRecord.d.ts.map +1 -1
- package/dist/src/source/SourceRecord.js +7 -3
- package/dist/src/source/SourceRecord.js.map +1 -1
- package/dist/src/source/SourceRecordLoader.d.ts.map +1 -1
- package/dist/src/source/SourceRecordLoader.js +11 -4
- package/dist/src/source/SourceRecordLoader.js.map +1 -1
- package/dist/src/source/SourceRecordRepo.d.ts.map +1 -1
- package/dist/src/source/SourceRecordRepo.js.map +1 -1
- package/dist/src/tables/MigrationTable.d.ts.map +1 -1
- package/dist/src/tables/MigrationTable.js.map +1 -1
- package/dist/src/tables/tables.d.ts.map +1 -1
- package/dist/src/tables/tables.js.map +1 -1
- package/dist/test/CrudTests.d.ts +2 -0
- package/dist/test/CrudTests.d.ts.map +1 -1
- package/dist/test/CrudTests.js +19 -4
- package/dist/test/CrudTests.js.map +1 -1
- package/dist/test/TableManagerTests.d.ts.map +1 -1
- package/dist/test/TableManagerTests.js +17 -9
- package/dist/test/TableManagerTests.js.map +1 -1
- package/generated/index.ts +15 -18
- package/index.ts +1 -1
- package/jest.config.js +8 -17
- package/package.json +49 -43
- package/src/Columns.ts +284 -241
- package/src/Db.ts +188 -147
- package/src/MigrationRunner.ts +24 -10
- package/src/QueryBuilderFactory.ts +6 -9
- package/src/Record.ts +35 -29
- package/src/StatementConfigFactory.ts +14 -16
- package/src/Table.ts +91 -88
- package/src/auth/TableAuth.ts +37 -27
- package/src/auth/TableServiceAuth.ts +11 -9
- package/src/opt/moment.ts +1 -1
- package/src/reference/Reference.ts +7 -7
- package/src/reference/ReferenceArray.ts +8 -8
- package/src/schema/SchemaMetadata.ts +84 -64
- package/src/schema/SchemaOperations.ts +2 -2
- package/src/schema/TableManager.ts +178 -168
- package/src/serializers/GraphSerializer.ts +4 -4
- package/src/serializers/QueryBuilderSerializer.ts +11 -11
- package/src/serializers/ReferenceArraySerializer.ts +12 -8
- package/src/serializers/ReferenceSerializer.ts +7 -7
- package/src/serializers/TableSerializer.ts +5 -5
- package/src/services/DbService.ts +3 -3
- package/src/services/MigrationRunnerService.ts +1 -1
- package/src/source/SourceRecord.ts +43 -24
- package/src/source/SourceRecordLoader.ts +29 -18
- package/src/source/SourceRecordRepo.ts +3 -3
- package/src/tables/MigrationTable.ts +5 -5
- package/src/tables/tables.ts +1 -1
- package/test/CrudTests.ts +46 -26
- package/test/TableManagerTests.ts +329 -154
- package/tsconfig.json +18 -22
|
@@ -1,86 +1,99 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
}
|
|
18
|
+
name: string;
|
|
19
|
+
email: string;
|
|
20
|
+
active: boolean;
|
|
21
|
+
}
|
|
11
22
|
|
|
12
23
|
class UserTable extends Table<User> {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
24
|
+
name = 'db_test_user';
|
|
25
|
+
columns = withRecordColumns<User>({
|
|
26
|
+
name: new StringColumn('name'),
|
|
16
27
|
email: new StringColumn('email'),
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
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
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
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(
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
expect(columnMetadata[columnTypesTable.columns.
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
expect(columnMetadata[columnTypesTable.columns.
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
expect(columnMetadata[columnTypesTable.columns.
|
|
139
|
-
|
|
140
|
-
|
|
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(
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
expect(columnMetadata[columnTypesTable.columns.
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
expect(columnMetadata[columnTypesTable.columns.
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
expect(columnMetadata[columnTypesTable.columns.
|
|
214
|
-
|
|
215
|
-
|
|
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', {
|
|
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(
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
expect(columnMetadata[columnTypesTable.columns.
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
expect(columnMetadata[columnTypesTable.columns.
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
expect(columnMetadata[columnTypesTable.columns.
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
expect(columnMetadata[
|
|
249
|
-
|
|
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(
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
expect(columnMetadata[columnTypesTable.columns.
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
expect(columnMetadata[columnTypesTable.columns.
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
expect(columnMetadata[columnTypesTable.columns.
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
expect(columnMetadata[
|
|
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', {
|
|
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(
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
expect(columnMetadata[columnTypesTable.columns.
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
expect(columnMetadata[columnTypesTable.columns.
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
expect(columnMetadata[columnTypesTable.columns.
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
expect(columnMetadata[
|
|
316
|
-
|
|
317
|
-
|
|
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(
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
expect(columnMetadata[columnTypesTable.columns.
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
expect(columnMetadata[columnTypesTable.columns.
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
expect(columnMetadata[columnTypesTable.columns.
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
expect(columnMetadata[
|
|
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 = [
|
|
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
|
+
};
|