@proteinjs/db 1.0.15 → 1.0.17
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 +4 -0
- package/.prettierrc +8 -0
- package/CHANGELOG.md +16 -26
- 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.map +1 -1
- package/dist/test/CrudTests.js +13 -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 +48 -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 +43 -30
- package/test/TableManagerTests.ts +329 -154
- package/tsconfig.json +18 -22
|
@@ -9,190 +9,200 @@ export interface ColumnTypeFactory {
|
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
export class TableManager {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
12
|
+
private logger = new Logger(this.constructor.name);
|
|
13
|
+
public columnTypeFactory: ColumnTypeFactory;
|
|
14
|
+
public schemaOperations: SchemaOperations;
|
|
15
|
+
public schemaMetadata: SchemaMetadata;
|
|
16
|
+
|
|
17
|
+
constructor(
|
|
18
|
+
dbDriver: DbDriver,
|
|
19
|
+
columnTypeFactory: ColumnTypeFactory,
|
|
20
|
+
schemaOperations: SchemaOperations,
|
|
21
|
+
schemaMetadata?: SchemaMetadata
|
|
22
|
+
) {
|
|
23
|
+
this.columnTypeFactory = columnTypeFactory;
|
|
24
|
+
this.schemaOperations = schemaOperations;
|
|
25
|
+
this.schemaMetadata = schemaMetadata ? schemaMetadata : new SchemaMetadata(dbDriver);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
async tableExists(table: Table<any>) {
|
|
29
|
+
return await this.schemaMetadata.tableExists(table);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
async loadTables(): Promise<void> {
|
|
33
|
+
const tables = getTables();
|
|
34
|
+
for (const table of tables) {
|
|
35
|
+
await this.loadTable(table);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
async loadTable(table: Table<any>): Promise<void> {
|
|
40
|
+
if (await this.tableExists(table)) {
|
|
41
|
+
const tableChanges = await this.getTableChanges(table);
|
|
42
|
+
if (this.shouldAlterTable(tableChanges)) {
|
|
43
|
+
this.logger.info(`Altering table: ${table.name}`);
|
|
44
|
+
await this.schemaOperations.alterTable(table, tableChanges);
|
|
45
|
+
this.logger.info(`Finished altering table: ${table.name}`);
|
|
46
|
+
}
|
|
47
|
+
} else {
|
|
48
|
+
this.logger.info(`Creating table: ${table.name}`);
|
|
49
|
+
await this.schemaOperations.createTable(table);
|
|
50
|
+
this.logger.info(`Finished creating table: ${table.name}`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
private shouldAlterTable(tableChanges: TableChanges) {
|
|
55
|
+
if (
|
|
56
|
+
tableChanges.columnsToCreate.length == 0 &&
|
|
57
|
+
tableChanges.columnsToRename.length == 0 &&
|
|
58
|
+
tableChanges.columnsToAlter.length == 0 &&
|
|
59
|
+
tableChanges.columnsWithForeignKeysToDrop.length == 0 &&
|
|
60
|
+
tableChanges.columnsWithUniqueConstraintsToDrop.length == 0 &&
|
|
61
|
+
tableChanges.indexesToCreate.length == 0 &&
|
|
62
|
+
tableChanges.indexesToDrop.length == 0
|
|
63
|
+
) {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
private async getTableChanges(table: Table<any>) {
|
|
71
|
+
const { indexesToCreate, indexesToDrop } = await this.getIndexOperations(table);
|
|
72
|
+
const tableChanges: TableChanges = {
|
|
73
|
+
columnsToCreate: [],
|
|
74
|
+
columnsToRename: [],
|
|
75
|
+
columnsToAlter: [],
|
|
76
|
+
columnTypeChanges: [],
|
|
77
|
+
columnNullableChanges: [],
|
|
78
|
+
columnsWithForeignKeysToCreate: [],
|
|
79
|
+
foreignKeysToCreate: [],
|
|
80
|
+
columnsWithForeignKeysToDrop: [],
|
|
81
|
+
foreignKeysToDrop: [],
|
|
82
|
+
columnsWithUniqueConstraintsToCreate: [],
|
|
83
|
+
columnsWithUniqueConstraintsToDrop: [],
|
|
84
|
+
indexesToCreate,
|
|
85
|
+
indexesToDrop,
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
const columnMetadata = await this.schemaMetadata.getColumnMetadata(table);
|
|
89
|
+
const uniqueColumns = await this.schemaMetadata.getUniqueColumns(table);
|
|
90
|
+
const foreignKeys = await this.schemaMetadata.getForeignKeys(table);
|
|
91
|
+
for (const columnPropertyName in table.columns) {
|
|
92
|
+
const column = table.columns[columnPropertyName];
|
|
93
|
+
if (columnMetadata[column.name]) {
|
|
94
|
+
let alter = false;
|
|
95
|
+
const columnType = this.columnTypeFactory.getType(column);
|
|
96
|
+
const existingColumnType = columnMetadata[column.name].type;
|
|
97
|
+
if (columnType != existingColumnType) {
|
|
98
|
+
// console.log(`columnType != existingColumnType`);
|
|
99
|
+
tableChanges.columnTypeChanges.push({ name: column.name, newType: columnType });
|
|
100
|
+
alter = true;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
if (
|
|
104
|
+
(column.options?.nullable && !columnMetadata[column.name].isNullable) ||
|
|
105
|
+
(column.options?.nullable === false && columnMetadata[column.name].isNullable)
|
|
106
|
+
) {
|
|
107
|
+
// console.log(`column.options?.nullable`)
|
|
108
|
+
tableChanges.columnNullableChanges.push({ name: column.name, nullable: column.options.nullable === true });
|
|
109
|
+
alter = true;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
if (column.options?.unique?.unique === false && uniqueColumns.includes(column.name)) {
|
|
113
|
+
// console.log(`column.options?.unique?.unique`)
|
|
114
|
+
tableChanges.columnsWithUniqueConstraintsToDrop.push(column.name);
|
|
115
|
+
alter = true;
|
|
116
|
+
} else if (column.options?.unique?.unique && !uniqueColumns.includes(column.name)) {
|
|
117
|
+
tableChanges.columnsWithUniqueConstraintsToCreate.push(column.name);
|
|
118
|
+
alter = true;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
if (
|
|
122
|
+
(!column.options?.references && foreignKeys[column.name]) ||
|
|
123
|
+
(column.options?.references &&
|
|
124
|
+
foreignKeys[column.name] &&
|
|
125
|
+
foreignKeys[column.name].referencedTableName != column.options.references.table)
|
|
126
|
+
) {
|
|
127
|
+
// console.log(`column.options?.references`)
|
|
128
|
+
tableChanges.columnsWithForeignKeysToDrop.push(column.name);
|
|
129
|
+
tableChanges.foreignKeysToDrop.push({
|
|
130
|
+
table: foreignKeys[column.name].referencedTableName,
|
|
131
|
+
column: foreignKeys[column.name].referencedColumnName,
|
|
132
|
+
referencedByColumn: column.name,
|
|
133
|
+
});
|
|
134
|
+
alter = true;
|
|
135
|
+
} else if (column.options?.references && !foreignKeys[column.name]) {
|
|
136
|
+
tableChanges.columnsWithForeignKeysToCreate.push(column.name);
|
|
137
|
+
tableChanges.foreignKeysToCreate.push({
|
|
138
|
+
table: column.options.references.table,
|
|
139
|
+
column: 'id',
|
|
140
|
+
referencedByColumn: column.name,
|
|
141
|
+
});
|
|
142
|
+
alter = true;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
if (alter) {
|
|
146
|
+
tableChanges.columnsToAlter.push(columnPropertyName);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
if (column.oldName && columnMetadata[column.oldName]) {
|
|
153
|
+
tableChanges.columnsToRename.push(columnPropertyName);
|
|
154
|
+
continue;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
tableChanges.columnsToCreate.push(columnPropertyName);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
return tableChanges;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
private async getIndexOperations(table: Table<any>) {
|
|
157
164
|
const existingIndexes = await this.schemaMetadata.getIndexes(table);
|
|
158
165
|
const indexesToDrop: {
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
166
|
+
name?: string;
|
|
167
|
+
columns: string | string[];
|
|
168
|
+
unique?: boolean;
|
|
169
|
+
}[] = [];
|
|
163
170
|
const indexesToCreate: {
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
const currentIndexMap: {[serializedColumns: string]: boolean} = {};
|
|
169
|
-
const existingIndexMap: {[serializedColumns: string]: boolean} = {};
|
|
170
|
-
|
|
171
|
+
name?: string;
|
|
172
|
+
columns: string | string[];
|
|
173
|
+
unique?: boolean;
|
|
174
|
+
}[] = [];
|
|
175
|
+
const currentIndexMap: { [serializedColumns: string]: boolean } = {};
|
|
176
|
+
const existingIndexMap: { [serializedColumns: string]: boolean } = {};
|
|
177
|
+
for (const keyName in existingIndexes) {
|
|
171
178
|
existingIndexMap[JSON.stringify(existingIndexes[keyName])] = true;
|
|
172
|
-
|
|
179
|
+
}
|
|
180
|
+
|
|
173
181
|
if (table.indexes) {
|
|
174
182
|
for (const index of table.indexes) {
|
|
175
183
|
const serializedColumns = JSON.stringify(index.columns);
|
|
176
184
|
currentIndexMap[serializedColumns] = true;
|
|
177
|
-
if (!existingIndexMap[serializedColumns])
|
|
185
|
+
if (!existingIndexMap[serializedColumns]) {
|
|
178
186
|
indexesToCreate.push({ name: index.name, columns: index.columns as string[] });
|
|
187
|
+
}
|
|
179
188
|
}
|
|
180
189
|
}
|
|
181
|
-
|
|
190
|
+
|
|
182
191
|
for (const keyName in existingIndexes) {
|
|
183
192
|
const existingIndex = existingIndexes[keyName];
|
|
184
193
|
const serializedColumns = JSON.stringify(existingIndex);
|
|
185
194
|
if (
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
195
|
+
!currentIndexMap[serializedColumns] &&
|
|
196
|
+
keyName != 'PRIMARY' &&
|
|
197
|
+
keyName != 'PRIMARY_KEY' &&
|
|
198
|
+
!keyName.endsWith('_unique') &&
|
|
199
|
+
!keyName.endsWith('_foreign') &&
|
|
200
|
+
!keyName.startsWith('IDX_')
|
|
201
|
+
) {
|
|
193
202
|
indexesToDrop.push({ name: keyName, columns: existingIndex });
|
|
203
|
+
}
|
|
194
204
|
}
|
|
195
|
-
|
|
205
|
+
|
|
196
206
|
return { indexesToCreate, indexesToDrop };
|
|
197
207
|
}
|
|
198
|
-
}
|
|
208
|
+
}
|
|
@@ -2,12 +2,12 @@ import { ThirdPartyLibCustomSerializer } from '@proteinjs/serializer';
|
|
|
2
2
|
import { graphSerializer, Graph, isInstanceOf } from '@proteinjs/util';
|
|
3
3
|
|
|
4
4
|
type SerializedGraph = {
|
|
5
|
-
value: string
|
|
6
|
-
}
|
|
5
|
+
value: string;
|
|
6
|
+
};
|
|
7
7
|
|
|
8
8
|
export class GraphSerializer implements ThirdPartyLibCustomSerializer {
|
|
9
9
|
id = '@proteinjs/serializer/GraphSerializer';
|
|
10
|
-
|
|
10
|
+
|
|
11
11
|
matches(obj: any) {
|
|
12
12
|
return isInstanceOf(obj, Graph);
|
|
13
13
|
}
|
|
@@ -19,4 +19,4 @@ export class GraphSerializer implements ThirdPartyLibCustomSerializer {
|
|
|
19
19
|
deserialize(serializedGraph: SerializedGraph): Graph {
|
|
20
20
|
return graphSerializer.deserialize(serializedGraph.value);
|
|
21
21
|
}
|
|
22
|
-
}
|
|
22
|
+
}
|
|
@@ -3,21 +3,21 @@ import { Graph } from '@proteinjs/util';
|
|
|
3
3
|
import { QueryBuilder } from '@proteinjs/db-query';
|
|
4
4
|
|
|
5
5
|
type SerializedQueryBuilder = {
|
|
6
|
-
tableName: string
|
|
7
|
-
graph: Graph
|
|
8
|
-
idCounter: number
|
|
9
|
-
rootId: string
|
|
10
|
-
currentContextIds: string[]
|
|
11
|
-
paginationNodeId?: string
|
|
12
|
-
}
|
|
6
|
+
tableName: string;
|
|
7
|
+
graph: Graph;
|
|
8
|
+
idCounter: number;
|
|
9
|
+
rootId: string;
|
|
10
|
+
currentContextIds: string[];
|
|
11
|
+
paginationNodeId?: string;
|
|
12
|
+
};
|
|
13
13
|
|
|
14
14
|
export const QueryBuilderSerializerId = '@proteinjs/db/QueryBuilderSerializer';
|
|
15
15
|
|
|
16
16
|
export class QueryBuilderSerializer implements CustomSerializer {
|
|
17
17
|
id = QueryBuilderSerializerId;
|
|
18
|
-
|
|
18
|
+
|
|
19
19
|
serialize(qb: QueryBuilder<any>): SerializedQueryBuilder {
|
|
20
|
-
return {
|
|
20
|
+
return {
|
|
21
21
|
tableName: qb.tableName,
|
|
22
22
|
graph: qb.graph,
|
|
23
23
|
idCounter: qb.idCounter,
|
|
@@ -26,7 +26,7 @@ export class QueryBuilderSerializer implements CustomSerializer {
|
|
|
26
26
|
paginationNodeId: qb.paginationNodeId,
|
|
27
27
|
};
|
|
28
28
|
}
|
|
29
|
-
|
|
29
|
+
|
|
30
30
|
deserialize(serializedQb: SerializedQueryBuilder): QueryBuilder<any> {
|
|
31
31
|
const qb = new QueryBuilder(serializedQb.tableName);
|
|
32
32
|
qb.graph = serializedQb.graph;
|
|
@@ -36,4 +36,4 @@ export class QueryBuilderSerializer implements CustomSerializer {
|
|
|
36
36
|
qb.paginationNodeId = serializedQb.paginationNodeId;
|
|
37
37
|
return qb;
|
|
38
38
|
}
|
|
39
|
-
}
|
|
39
|
+
}
|
|
@@ -2,16 +2,16 @@ import { CustomSerializer } from '@proteinjs/serializer';
|
|
|
2
2
|
import { ReferenceArray } from '../reference/ReferenceArray';
|
|
3
3
|
|
|
4
4
|
type SerializedReferenceArray = {
|
|
5
|
-
_table: string
|
|
6
|
-
_ids: string[]
|
|
7
|
-
_objects: any
|
|
8
|
-
}
|
|
5
|
+
_table: string;
|
|
6
|
+
_ids: string[];
|
|
7
|
+
_objects: any;
|
|
8
|
+
};
|
|
9
9
|
|
|
10
10
|
export const ReferenceArraySerializerId = '@proteinjs/db/ReferenceArraySerializer';
|
|
11
11
|
|
|
12
12
|
export class ReferenceArraySerializer implements CustomSerializer {
|
|
13
13
|
id = ReferenceArraySerializerId;
|
|
14
|
-
|
|
14
|
+
|
|
15
15
|
serialize(referenceArray: ReferenceArray<any>): SerializedReferenceArray {
|
|
16
16
|
return {
|
|
17
17
|
_table: referenceArray._table,
|
|
@@ -19,8 +19,12 @@ export class ReferenceArraySerializer implements CustomSerializer {
|
|
|
19
19
|
_objects: referenceArray._objects,
|
|
20
20
|
};
|
|
21
21
|
}
|
|
22
|
-
|
|
22
|
+
|
|
23
23
|
deserialize(serializedReferenceArray: SerializedReferenceArray): ReferenceArray<any> {
|
|
24
|
-
return new ReferenceArray(
|
|
24
|
+
return new ReferenceArray(
|
|
25
|
+
serializedReferenceArray._table,
|
|
26
|
+
serializedReferenceArray._ids,
|
|
27
|
+
serializedReferenceArray._objects
|
|
28
|
+
);
|
|
25
29
|
}
|
|
26
|
-
}
|
|
30
|
+
}
|
|
@@ -2,16 +2,16 @@ import { CustomSerializer } from '@proteinjs/serializer';
|
|
|
2
2
|
import { Reference } from '../reference/Reference';
|
|
3
3
|
|
|
4
4
|
type SerializedReference = {
|
|
5
|
-
_table: string
|
|
6
|
-
_id?: string
|
|
7
|
-
_object?: any
|
|
8
|
-
}
|
|
5
|
+
_table: string;
|
|
6
|
+
_id?: string;
|
|
7
|
+
_object?: any;
|
|
8
|
+
};
|
|
9
9
|
|
|
10
10
|
export const ReferenceSerializerId = '@proteinjs/db/ReferenceSerializer';
|
|
11
11
|
|
|
12
12
|
export class ReferenceSerializer implements CustomSerializer {
|
|
13
13
|
id = ReferenceSerializerId;
|
|
14
|
-
|
|
14
|
+
|
|
15
15
|
serialize(reference: Reference<any>): SerializedReference {
|
|
16
16
|
return {
|
|
17
17
|
_table: reference._table,
|
|
@@ -19,8 +19,8 @@ export class ReferenceSerializer implements CustomSerializer {
|
|
|
19
19
|
_object: reference._object,
|
|
20
20
|
};
|
|
21
21
|
}
|
|
22
|
-
|
|
22
|
+
|
|
23
23
|
deserialize(serializedReference: SerializedReference): Reference<any> {
|
|
24
24
|
return new Reference(serializedReference._table, serializedReference._id, serializedReference._object);
|
|
25
25
|
}
|
|
26
|
-
}
|
|
26
|
+
}
|
|
@@ -2,19 +2,19 @@ import { CustomSerializer } from '@proteinjs/serializer';
|
|
|
2
2
|
import { Table, tableByName } from '../Table';
|
|
3
3
|
|
|
4
4
|
type SerializedTable = {
|
|
5
|
-
tableName: string
|
|
6
|
-
}
|
|
5
|
+
tableName: string;
|
|
6
|
+
};
|
|
7
7
|
|
|
8
8
|
export const TableSerializerId = '@proteinjs/db/TableSerializer';
|
|
9
9
|
|
|
10
10
|
export class TableSerializer implements CustomSerializer {
|
|
11
11
|
id = TableSerializerId;
|
|
12
|
-
|
|
12
|
+
|
|
13
13
|
serialize(table: Table<any>): SerializedTable {
|
|
14
14
|
return { tableName: table.name };
|
|
15
15
|
}
|
|
16
|
-
|
|
16
|
+
|
|
17
17
|
deserialize(serializedTable: SerializedTable): Table<any> {
|
|
18
18
|
return tableByName(serializedTable.tableName);
|
|
19
19
|
}
|
|
20
|
-
}
|
|
20
|
+
}
|
|
@@ -5,8 +5,8 @@ import { QueryBuilder } from '@proteinjs/db-query';
|
|
|
5
5
|
|
|
6
6
|
export const getDbService = serviceFactory<DbService>('@proteinjs/db/DbService');
|
|
7
7
|
|
|
8
|
-
export type Query<T> = ObjectQuery<T> | QueryBuilder<T
|
|
9
|
-
export type ObjectQuery<T> = Partial<{[P in keyof T]: any}
|
|
8
|
+
export type Query<T> = ObjectQuery<T> | QueryBuilder<T>;
|
|
9
|
+
export type ObjectQuery<T> = Partial<{ [P in keyof T]: any }>;
|
|
10
10
|
|
|
11
11
|
export interface DbService<R extends Record = Record> extends Service {
|
|
12
12
|
tableExists<T extends R>(table: Table<T>): Promise<boolean>;
|
|
@@ -16,4 +16,4 @@ export interface DbService<R extends Record = Record> extends Service {
|
|
|
16
16
|
delete<T extends R>(table: Table<T>, query: Query<T>): Promise<number>;
|
|
17
17
|
query<T extends R>(table: Table<T>, query: Query<T>): Promise<T[]>;
|
|
18
18
|
getRowCount<T extends R>(table: Table<T>, query?: Query<T>): Promise<number>;
|
|
19
|
-
}
|
|
19
|
+
}
|