@iamkirbki/database-handler-core 4.4.2 → 4.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/abstract/Controller.js +18 -39
- package/dist/abstract/Model.d.ts.map +1 -1
- package/dist/abstract/Model.js +100 -98
- package/dist/abstract/SchemaTableBuilder.js +4 -1
- package/dist/abstract/model/ModelRelation.js +34 -46
- package/dist/base/Query.js +56 -79
- package/dist/base/Record.js +75 -90
- package/dist/base/Table.js +128 -153
- package/dist/helpers/QueryBuilders/BaseQueryBuilders/BaseSelectQueryBuilder.js +7 -18
- package/dist/helpers/QueryBuilders/ExpressionBuilders/JsonAggregateExpression.js +5 -1
- package/dist/helpers/QueryBuilders/QueryDecorators/ExpressionDecorator.js +7 -18
- package/dist/helpers/QueryBuilders/QueryDecorators/GroupByDecorator.js +8 -19
- package/dist/helpers/QueryBuilders/QueryDecorators/JoinDecorator.js +26 -39
- package/dist/helpers/QueryBuilders/QueryDecorators/LimitDecorator.js +9 -20
- package/dist/helpers/QueryBuilders/QueryDecorators/OrderByDecorator.js +8 -19
- package/dist/helpers/QueryBuilders/QueryDecorators/WhereDecorator.js +9 -20
- package/dist/helpers/QueryBuilders/QueryStatementBuilder.js +87 -101
- package/dist/runtime/Repository.d.ts +1 -1
- package/dist/runtime/Repository.d.ts.map +1 -1
- package/dist/runtime/Repository.js +72 -97
- package/package.json +1 -1
|
@@ -1,12 +1,3 @@
|
|
|
1
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
1
|
import Table from "../base/Table.js";
|
|
11
2
|
class Repository {
|
|
12
3
|
constructor(tableName, ModelClass, customDatabaseAdapter, tableFactory = (name, adapter) => new Table(name, adapter)) {
|
|
@@ -40,38 +31,30 @@ class Repository {
|
|
|
40
31
|
[relation.pivotForeignKey]: isLocal ? modelOfOrigin.values[relation.foreignKey] : foreignKey
|
|
41
32
|
};
|
|
42
33
|
}
|
|
43
|
-
insertRecordIntoPivotTable(foreignKey, modelOfOrigin, relation) {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
yield table.Insert(this.generatePivotTableKeys(foreignKey, modelOfOrigin, relation));
|
|
47
|
-
});
|
|
34
|
+
async insertRecordIntoPivotTable(foreignKey, modelOfOrigin, relation) {
|
|
35
|
+
const table = this.tableFactory(relation.pivotTable, this.customDatabaseAdapter);
|
|
36
|
+
await table.Insert(this.generatePivotTableKeys(foreignKey, modelOfOrigin, relation));
|
|
48
37
|
}
|
|
49
|
-
deleteRecordFromPivotTable(foreignKey, modelOfOrigin, relation) {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
yield (record === null || record === void 0 ? void 0 : record.Delete());
|
|
54
|
-
});
|
|
38
|
+
async deleteRecordFromPivotTable(foreignKey, modelOfOrigin, relation) {
|
|
39
|
+
const table = this.tableFactory(relation.pivotTable, this.customDatabaseAdapter);
|
|
40
|
+
const record = await table.Record({ base: { where: this.generatePivotTableKeys(foreignKey, modelOfOrigin, relation) } });
|
|
41
|
+
await (record === null || record === void 0 ? void 0 : record.Delete());
|
|
55
42
|
}
|
|
56
|
-
getManyToManyRelation(relation) {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
}
|
|
68
|
-
});
|
|
43
|
+
async getManyToManyRelation(relation) {
|
|
44
|
+
if (relation.pivotTable && this.manyToManyRelations.has(relation.pivotTable)) {
|
|
45
|
+
return this.manyToManyRelations.get(relation.pivotTable);
|
|
46
|
+
}
|
|
47
|
+
if (await this.doesTableExist(relation.pivotTable)) {
|
|
48
|
+
this.manyToManyRelations.set(relation.pivotTable, relation);
|
|
49
|
+
return relation;
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
throw new Error(`Pivot table ${relation.pivotTable} does not exist. Create it in alphabetical order before using many-to-many relationships.`);
|
|
53
|
+
}
|
|
69
54
|
}
|
|
70
|
-
doesTableExist(name) {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
return yield table.exists();
|
|
74
|
-
});
|
|
55
|
+
async doesTableExist(name) {
|
|
56
|
+
const table = this.tableFactory(name, this.customDatabaseAdapter);
|
|
57
|
+
return await table.exists();
|
|
75
58
|
}
|
|
76
59
|
syncModel(model) {
|
|
77
60
|
var _a;
|
|
@@ -81,71 +64,63 @@ class Repository {
|
|
|
81
64
|
getModel(name) {
|
|
82
65
|
return this.models.get(name);
|
|
83
66
|
}
|
|
84
|
-
save(attributes) {
|
|
85
|
-
|
|
86
|
-
yield this.Table.Insert(attributes);
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
first(queryLayers, Model) {
|
|
90
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
91
|
-
let record;
|
|
92
|
-
if (Model.JoinedEntities.length > 0) {
|
|
93
|
-
const result = (yield this.join(Model, Object.assign(Object.assign({}, queryLayers), { final: Object.assign(Object.assign({}, queryLayers.final), { limit: 1 }) })))[0];
|
|
94
|
-
record = result ? { values: result } : undefined;
|
|
95
|
-
}
|
|
96
|
-
else {
|
|
97
|
-
record = yield this.Table.Record(queryLayers);
|
|
98
|
-
}
|
|
99
|
-
return record === null || record === void 0 ? void 0 : record.values;
|
|
100
|
-
});
|
|
67
|
+
async save(attributes) {
|
|
68
|
+
await this.Table.Insert(attributes);
|
|
101
69
|
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
70
|
+
async first(queryLayers, Model) {
|
|
71
|
+
let record;
|
|
72
|
+
if (Model.JoinedEntities.length > 0) {
|
|
73
|
+
const result = (await this.join(Model, { ...queryLayers, final: { ...queryLayers.final, limit: 1 } }))[0];
|
|
74
|
+
record = result ? { values: result } : undefined;
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
record = await this.Table.Record(queryLayers);
|
|
78
|
+
}
|
|
79
|
+
return record === null || record === void 0 ? void 0 : record.values;
|
|
112
80
|
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
return this.
|
|
116
|
-
}
|
|
81
|
+
async get(QueryLayers, Model) {
|
|
82
|
+
if (Model.JoinedEntities.length > 0) {
|
|
83
|
+
return await this.join(Model, QueryLayers);
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
const records = await this.Table.Records(QueryLayers);
|
|
87
|
+
return records.map(record => record.values);
|
|
88
|
+
}
|
|
117
89
|
}
|
|
118
|
-
|
|
119
|
-
return
|
|
120
|
-
const record = yield this.Table.Record({ base: { where: primaryKey } });
|
|
121
|
-
if (record) {
|
|
122
|
-
return yield record.Update(newAttributes, primaryKey);
|
|
123
|
-
}
|
|
124
|
-
});
|
|
90
|
+
async all(Model, QueryLayers) {
|
|
91
|
+
return this.get(QueryLayers, Model);
|
|
125
92
|
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
return records.map(record => record.values);
|
|
132
|
-
});
|
|
93
|
+
async update(primaryKey, newAttributes, table) {
|
|
94
|
+
const record = await this.Table.Record({ base: { from: table, where: primaryKey } });
|
|
95
|
+
if (record) {
|
|
96
|
+
return await record.Update(newAttributes, primaryKey);
|
|
97
|
+
}
|
|
133
98
|
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
99
|
+
async join(Model, queryLayers) {
|
|
100
|
+
const { joins, queryLayers: nextLayers } = this.buildJoinObject(Model, queryLayers);
|
|
101
|
+
nextLayers.base.joins = joins;
|
|
102
|
+
const records = await this.Table.Join(nextLayers);
|
|
103
|
+
return records.map(record => record.values);
|
|
104
|
+
}
|
|
105
|
+
async toSql(queryLayers, Model) {
|
|
106
|
+
let nextLayers = queryLayers;
|
|
107
|
+
if (Model.JoinedEntities.length > 0) {
|
|
108
|
+
const result = this.buildJoinObject(Model, queryLayers);
|
|
109
|
+
nextLayers = result.queryLayers;
|
|
110
|
+
nextLayers.base.joins = result.joins;
|
|
111
|
+
}
|
|
112
|
+
return this.Table.toSql(nextLayers);
|
|
144
113
|
}
|
|
145
114
|
buildJoinObject(Model, inputLayers) {
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
115
|
+
const queryLayers = {
|
|
116
|
+
...inputLayers,
|
|
117
|
+
base: {
|
|
118
|
+
...inputLayers.base,
|
|
119
|
+
},
|
|
120
|
+
final: inputLayers.final
|
|
121
|
+
? { ...inputLayers.final }
|
|
122
|
+
: undefined
|
|
123
|
+
};
|
|
149
124
|
const joins = Model.JoinedEntities.flatMap(join => {
|
|
150
125
|
var _a, _b;
|
|
151
126
|
var _c;
|
|
@@ -158,7 +133,7 @@ class Repository {
|
|
|
158
133
|
if (join.queryScopes && queryLayers.base.where) {
|
|
159
134
|
queryLayers.base.where = this.mergeQueryWhereConditions(queryLayers.base.where, join.queryScopes);
|
|
160
135
|
}
|
|
161
|
-
else {
|
|
136
|
+
else if (join.queryScopes) {
|
|
162
137
|
queryLayers.base.where = join.queryScopes;
|
|
163
138
|
}
|
|
164
139
|
if (relation.type !== 'manyToMany') {
|