@iamkirbki/database-handler-core 4.1.6 → 4.3.0
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/Model.d.ts +24 -19
- package/dist/abstract/Model.d.ts.map +1 -1
- package/dist/abstract/Model.js +110 -25
- package/dist/base/Query.d.ts +15 -9
- package/dist/base/Query.d.ts.map +1 -1
- package/dist/base/Query.js +28 -12
- package/dist/base/Record.d.ts +5 -4
- package/dist/base/Record.d.ts.map +1 -1
- package/dist/base/Record.js +35 -13
- package/dist/base/Table.d.ts +7 -5
- package/dist/base/Table.d.ts.map +1 -1
- package/dist/base/Table.js +64 -29
- package/dist/helpers/QueryStatementBuilder.d.ts +11 -10
- package/dist/helpers/QueryStatementBuilder.d.ts.map +1 -1
- package/dist/helpers/QueryStatementBuilder.js +37 -14
- package/dist/interfaces/IDatabaseAdapter.d.ts +1 -0
- package/dist/interfaces/IDatabaseAdapter.d.ts.map +1 -1
- package/dist/runtime/Repository.d.ts +15 -8
- package/dist/runtime/Repository.d.ts.map +1 -1
- package/dist/runtime/Repository.js +90 -31
- package/dist/types/model.d.ts +12 -6
- package/dist/types/model.d.ts.map +1 -1
- package/dist/types/query.d.ts +7 -7
- package/dist/types/query.d.ts.map +1 -1
- package/dist/types/table.d.ts +4 -3
- package/dist/types/table.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/abstract/Model.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import Repository from "../runtime/Repository.js";
|
|
2
|
-
import { columnType,
|
|
2
|
+
import { columnType, QueryWhereCondition, QueryValues, ModelConfig, relation, ExtraQueryParameters, joinedEntity } from "../types/index.js";
|
|
3
3
|
/** Abstract Model class for ORM-style database interactions */
|
|
4
4
|
export default abstract class Model<ModelType extends columnType> {
|
|
5
5
|
private _repository?;
|
|
@@ -10,8 +10,8 @@ export default abstract class Model<ModelType extends columnType> {
|
|
|
10
10
|
protected attributes: Partial<ModelType>;
|
|
11
11
|
protected exists: boolean;
|
|
12
12
|
protected dirty: boolean;
|
|
13
|
-
protected queryScopes?:
|
|
14
|
-
protected queryOptions:
|
|
13
|
+
protected queryScopes?: QueryWhereCondition;
|
|
14
|
+
protected queryOptions: ExtraQueryParameters;
|
|
15
15
|
get primaryKeyColumn(): string;
|
|
16
16
|
get primaryKey(): QueryValues | undefined;
|
|
17
17
|
get values(): Partial<ModelType> | ModelType;
|
|
@@ -21,33 +21,38 @@ export default abstract class Model<ModelType extends columnType> {
|
|
|
21
21
|
offset(value: number): this;
|
|
22
22
|
static orderBy<ParamterModelType extends Model<columnType>>(this: new () => ParamterModelType, column: string, direction?: 'ASC' | 'DESC'): ParamterModelType;
|
|
23
23
|
orderBy(column: string, direction?: 'ASC' | 'DESC'): this;
|
|
24
|
-
static where<ParamterModelType extends Model<columnType>>(this: new () => ParamterModelType, conditions:
|
|
25
|
-
where(conditions:
|
|
24
|
+
static where<ParamterModelType extends Model<columnType>>(this: new () => ParamterModelType, conditions: QueryWhereCondition): ParamterModelType;
|
|
25
|
+
where(conditions: QueryWhereCondition): this;
|
|
26
26
|
static whereId<ParamterModelType extends Model<columnType>>(this: new () => ParamterModelType, id: QueryValues): ParamterModelType;
|
|
27
27
|
whereId(id: QueryValues): this;
|
|
28
28
|
static find<ParamterModelType extends Model<columnType>>(this: new () => ParamterModelType, primaryKeyValue: QueryValues): ParamterModelType;
|
|
29
29
|
find(primaryKeyValue: QueryValues): this;
|
|
30
|
-
static findOrFail<ParamterModelType extends Model<columnType>>(this: new () => ParamterModelType, primaryKeyValue: QueryValues):
|
|
31
|
-
findOrFail(primaryKeyValue?: QueryValues):
|
|
32
|
-
static first<ParamterModelType extends Model<columnType>>(this: new () => ParamterModelType, primaryKeyValue?: string | number): Promise<
|
|
33
|
-
first(primaryKeyValue?: string | number): Promise<
|
|
34
|
-
get(): Promise<
|
|
35
|
-
static all<ParamterModelType extends Model<columnType>>(this: new () => ParamterModelType): Promise<
|
|
36
|
-
all(): Promise<
|
|
30
|
+
static findOrFail<ParamterModelType extends Model<columnType>>(this: new () => ParamterModelType, primaryKeyValue: QueryValues): Promise<ParamterModelType>;
|
|
31
|
+
findOrFail(primaryKeyValue?: QueryValues): Promise<this>;
|
|
32
|
+
static first<ParamterModelType extends Model<columnType>>(this: new () => ParamterModelType, primaryKeyValue?: string | number): Promise<ParamterModelType>;
|
|
33
|
+
first(primaryKeyValue?: string | number): Promise<this>;
|
|
34
|
+
get(): Promise<this[]>;
|
|
35
|
+
static all<ParamterModelType extends Model<columnType>>(this: new () => ParamterModelType): Promise<ParamterModelType[]>;
|
|
36
|
+
all(): Promise<this[]>;
|
|
37
37
|
static set<ParamterModelType extends Model<columnType>>(this: new () => ParamterModelType, attributes: Partial<columnType>): ParamterModelType;
|
|
38
38
|
set(attributes: Partial<ModelType>): this;
|
|
39
39
|
save(): Promise<this>;
|
|
40
|
-
update(attributes: Partial<ModelType>): this
|
|
40
|
+
update(attributes: Partial<ModelType>): Promise<this>;
|
|
41
41
|
protected joinedEntities: joinedEntity[];
|
|
42
42
|
protected relations: relation[];
|
|
43
43
|
get JoinedEntities(): joinedEntity[];
|
|
44
44
|
get Relations(): relation[];
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
45
|
+
insertRecordIntoPivotTable(otherTable: string, foreignKey: string): Promise<void>;
|
|
46
|
+
protected ManyToMany<modelType extends Model<columnType>>(model: modelType, pivotTable?: string, localKey?: string, foreignKey?: string, pivotForeignKey?: string, pivotLocalKey?: string): Promise<this>;
|
|
47
|
+
protected hasMany<modelType extends Model<columnType>>(model: modelType, foreignKey?: string, localKey?: string): this;
|
|
48
|
+
protected hasOne<modelType extends Model<columnType>>(model: modelType, foreignKey?: string, localKey?: string): this;
|
|
49
|
+
protected belongsTo<modelType extends Model<columnType>>(model: modelType, foreignKey?: string, localKey?: string): this;
|
|
50
|
+
static with<ParamterModelType extends Model<columnType>>(this: new () => ParamterModelType, relation: string, queryScopes?: QueryWhereCondition): ParamterModelType;
|
|
51
|
+
with(relation: string, queryScopes?: QueryWhereCondition): this;
|
|
52
|
+
asyncWith(relation: string, queryScopes?: QueryWhereCondition): Promise<this>;
|
|
53
|
+
callRelationMethod(relation: string): void | Promise<void>;
|
|
51
54
|
private normalizeQueryScopes;
|
|
55
|
+
toJSON(): Partial<ModelType> | ModelType;
|
|
56
|
+
toObject(): Partial<ModelType> | ModelType;
|
|
52
57
|
}
|
|
53
58
|
//# sourceMappingURL=Model.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Model.d.ts","sourceRoot":"","sources":["../../src/abstract/Model.ts"],"names":[],"mappings":"AACA,OAAO,UAAU,MAAM,6BAA6B,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"Model.d.ts","sourceRoot":"","sources":["../../src/abstract/Model.ts"],"names":[],"mappings":"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"}
|
package/dist/abstract/Model.js
CHANGED
|
@@ -32,7 +32,7 @@ export default class Model {
|
|
|
32
32
|
}
|
|
33
33
|
get repository() {
|
|
34
34
|
if (!this._repository) {
|
|
35
|
-
this._repository = Repository.getInstance(this.constructor, this.Configuration.table);
|
|
35
|
+
this._repository = Repository.getInstance(this.constructor, this.Configuration.table, this.Configuration.customAdapter);
|
|
36
36
|
}
|
|
37
37
|
return this._repository;
|
|
38
38
|
}
|
|
@@ -43,7 +43,7 @@ export default class Model {
|
|
|
43
43
|
return this.configuration.primaryKey;
|
|
44
44
|
}
|
|
45
45
|
get primaryKey() {
|
|
46
|
-
return this.
|
|
46
|
+
return this.originalAttributes[this.configuration.primaryKey];
|
|
47
47
|
}
|
|
48
48
|
get values() {
|
|
49
49
|
return this.attributes;
|
|
@@ -100,22 +100,27 @@ export default class Model {
|
|
|
100
100
|
return this;
|
|
101
101
|
}
|
|
102
102
|
static findOrFail(primaryKeyValue) {
|
|
103
|
-
|
|
104
|
-
|
|
103
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
104
|
+
const instance = new this();
|
|
105
|
+
return yield instance.findOrFail(primaryKeyValue);
|
|
106
|
+
});
|
|
105
107
|
}
|
|
106
108
|
findOrFail(primaryKeyValue) {
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
109
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
110
|
+
var _a;
|
|
111
|
+
if (primaryKeyValue) {
|
|
112
|
+
this.queryScopes = { [this.primaryKeyColumn]: primaryKeyValue };
|
|
113
|
+
}
|
|
114
|
+
const query = this.queryScopes || {};
|
|
115
|
+
const record = yield ((_a = this.repository) === null || _a === void 0 ? void 0 : _a.first(query, this));
|
|
113
116
|
if (!record) {
|
|
114
117
|
throw new Error(`Record with primary key ${primaryKeyValue} not found.`);
|
|
115
118
|
}
|
|
116
|
-
this.
|
|
119
|
+
this.attributes = record;
|
|
120
|
+
this.originalAttributes = Object.assign({}, this.attributes);
|
|
121
|
+
this.exists = true;
|
|
122
|
+
return this;
|
|
117
123
|
});
|
|
118
|
-
return this.attributes;
|
|
119
124
|
}
|
|
120
125
|
static first(primaryKeyValue) {
|
|
121
126
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -126,13 +131,26 @@ export default class Model {
|
|
|
126
131
|
first(primaryKeyValue) {
|
|
127
132
|
return __awaiter(this, void 0, void 0, function* () {
|
|
128
133
|
var _a;
|
|
129
|
-
|
|
130
|
-
|
|
134
|
+
const attributes = yield ((_a = this.repository) === null || _a === void 0 ? void 0 : _a.first(primaryKeyValue ? { [this.configuration.primaryKey]: primaryKeyValue } : this.queryScopes || {}, this));
|
|
135
|
+
if (attributes) {
|
|
136
|
+
this.attributes = attributes;
|
|
137
|
+
this.originalAttributes = Object.assign({}, attributes);
|
|
138
|
+
this.exists = true;
|
|
139
|
+
}
|
|
140
|
+
return this;
|
|
131
141
|
});
|
|
132
142
|
}
|
|
133
143
|
get() {
|
|
134
144
|
return __awaiter(this, void 0, void 0, function* () {
|
|
135
|
-
|
|
145
|
+
const records = yield this.repository.get(this.queryScopes || {}, this.queryOptions, this);
|
|
146
|
+
return records.map(record => {
|
|
147
|
+
const instance = new this.constructor();
|
|
148
|
+
instance.set(record);
|
|
149
|
+
instance.exists = true;
|
|
150
|
+
instance.originalAttributes = Object.assign({}, record);
|
|
151
|
+
instance.attributes = Object.assign({}, record);
|
|
152
|
+
return instance;
|
|
153
|
+
});
|
|
136
154
|
});
|
|
137
155
|
}
|
|
138
156
|
static all() {
|
|
@@ -140,7 +158,17 @@ export default class Model {
|
|
|
140
158
|
return instance.all();
|
|
141
159
|
}
|
|
142
160
|
all() {
|
|
143
|
-
return
|
|
161
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
162
|
+
const records = yield this.repository.all(this, this.queryScopes, this.queryOptions);
|
|
163
|
+
return records.map(record => {
|
|
164
|
+
const instance = new this.constructor();
|
|
165
|
+
instance.set(record);
|
|
166
|
+
instance.exists = true;
|
|
167
|
+
instance.originalAttributes = Object.assign({}, record);
|
|
168
|
+
instance.attributes = Object.assign({}, record);
|
|
169
|
+
return instance;
|
|
170
|
+
});
|
|
171
|
+
});
|
|
144
172
|
}
|
|
145
173
|
static set(attributes) {
|
|
146
174
|
const instance = new this();
|
|
@@ -164,12 +192,21 @@ export default class Model {
|
|
|
164
192
|
});
|
|
165
193
|
}
|
|
166
194
|
update(attributes) {
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
195
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
196
|
+
var _a;
|
|
197
|
+
if (!this.exists) {
|
|
198
|
+
throw new Error("Cannot update a model that does not exist in the database.");
|
|
199
|
+
}
|
|
200
|
+
if (this.primaryKey === undefined) {
|
|
201
|
+
throw new Error("Primary key value is undefined. Cannot update record without a valid primary key.");
|
|
202
|
+
}
|
|
203
|
+
const newRecord = yield ((_a = this.repository) === null || _a === void 0 ? void 0 : _a.update({ [this.primaryKeyColumn]: this.primaryKey }, attributes));
|
|
204
|
+
if (newRecord) {
|
|
205
|
+
this.originalAttributes = newRecord.values;
|
|
206
|
+
this.exists = true;
|
|
207
|
+
}
|
|
208
|
+
return this;
|
|
209
|
+
});
|
|
173
210
|
}
|
|
174
211
|
get JoinedEntities() {
|
|
175
212
|
return this.joinedEntities;
|
|
@@ -177,6 +214,29 @@ export default class Model {
|
|
|
177
214
|
get Relations() {
|
|
178
215
|
return this.relations;
|
|
179
216
|
}
|
|
217
|
+
insertRecordIntoPivotTable(otherTable, foreignKey) {
|
|
218
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
219
|
+
yield this.callRelationMethod(otherTable);
|
|
220
|
+
const relation = this.relations[this.relations.length - 1];
|
|
221
|
+
this.relations.pop();
|
|
222
|
+
yield this.repository.insertRecordIntoPivotTable(foreignKey, this, relation);
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
ManyToMany(model_1) {
|
|
226
|
+
return __awaiter(this, arguments, void 0, function* (model, pivotTable = [this.Configuration.table, model.Configuration.table].sort().join('_'), localKey = this.Configuration.primaryKey, foreignKey = model.Configuration.primaryKey, pivotForeignKey = `${this.Configuration.table}_${localKey}`, pivotLocalKey = `${model.Configuration.table}_${foreignKey}`) {
|
|
227
|
+
const relation = yield this.repository.getManyToManyRelation({
|
|
228
|
+
type: 'manyToMany',
|
|
229
|
+
model: model,
|
|
230
|
+
pivotTable: pivotTable,
|
|
231
|
+
foreignKey: foreignKey,
|
|
232
|
+
pivotForeignKey: pivotForeignKey,
|
|
233
|
+
localKey: localKey,
|
|
234
|
+
pivotLocalKey: pivotLocalKey,
|
|
235
|
+
});
|
|
236
|
+
this.relations.push(relation);
|
|
237
|
+
return this;
|
|
238
|
+
});
|
|
239
|
+
}
|
|
180
240
|
hasMany(model, foreignKey = `${this.Configuration.table}_${this.Configuration.primaryKey}`, localKey = this.Configuration.primaryKey) {
|
|
181
241
|
this.relations.push({
|
|
182
242
|
type: 'hasMany',
|
|
@@ -209,7 +269,10 @@ export default class Model {
|
|
|
209
269
|
return instance.with(relation, queryScopes);
|
|
210
270
|
}
|
|
211
271
|
with(relation, queryScopes) {
|
|
212
|
-
this.callRelationMethod(relation);
|
|
272
|
+
const result = this.callRelationMethod(relation);
|
|
273
|
+
if (result instanceof Promise) {
|
|
274
|
+
throw new Error(`Relation method '${relation}' is asynchronous. Use asyncWith() instead of with().`);
|
|
275
|
+
}
|
|
213
276
|
const lastRelation = this.relations[this.relations.length - 1];
|
|
214
277
|
const tableName = lastRelation.model.Configuration.table;
|
|
215
278
|
const normalizedScopes = this.normalizeQueryScopes(queryScopes, tableName);
|
|
@@ -219,12 +282,28 @@ export default class Model {
|
|
|
219
282
|
});
|
|
220
283
|
return this;
|
|
221
284
|
}
|
|
285
|
+
asyncWith(relation, queryScopes) {
|
|
286
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
287
|
+
yield this.callRelationMethod(relation);
|
|
288
|
+
const lastRelation = this.relations[this.relations.length - 1];
|
|
289
|
+
const tableName = lastRelation.model.Configuration.table;
|
|
290
|
+
const normalizedScopes = this.normalizeQueryScopes(queryScopes, tableName);
|
|
291
|
+
this.joinedEntities.push({
|
|
292
|
+
relation: relation,
|
|
293
|
+
queryScopes: normalizedScopes
|
|
294
|
+
});
|
|
295
|
+
return this;
|
|
296
|
+
});
|
|
297
|
+
}
|
|
222
298
|
callRelationMethod(relation) {
|
|
223
299
|
const method = Reflect.get(this, relation);
|
|
224
300
|
if (typeof method !== 'function') {
|
|
225
|
-
throw new Error(`Relation method '${relation}' does not exist
|
|
301
|
+
throw new Error(`Relation method '${relation}' does not exist`);
|
|
226
302
|
}
|
|
227
|
-
method.call(this);
|
|
303
|
+
const result = method.call(this);
|
|
304
|
+
//@TODO: check if method is not static
|
|
305
|
+
// Only return promise if the method is actually async
|
|
306
|
+
return result instanceof Promise ? result : undefined;
|
|
228
307
|
}
|
|
229
308
|
normalizeQueryScopes(queryScopes, tableName) {
|
|
230
309
|
if (!queryScopes) {
|
|
@@ -239,4 +318,10 @@ export default class Model {
|
|
|
239
318
|
: Query.ConvertParamsToArray(queryScopes);
|
|
240
319
|
return scopesArray.map(scope => (Object.assign(Object.assign({}, scope), { column: `${tableName}.${scope.column}` })));
|
|
241
320
|
}
|
|
321
|
+
toJSON() {
|
|
322
|
+
return this.attributes;
|
|
323
|
+
}
|
|
324
|
+
toObject() {
|
|
325
|
+
return this.attributes;
|
|
326
|
+
}
|
|
242
327
|
}
|
package/dist/base/Query.d.ts
CHANGED
|
@@ -1,26 +1,32 @@
|
|
|
1
|
-
import { columnType,
|
|
1
|
+
import { columnType, QueryWhereCondition, QueryIsEqualParameter, TableColumnInfo, QueryComparisonParameters } from "../types/index.js";
|
|
2
2
|
import { Record } from "../index.js";
|
|
3
|
+
export type QueryConstructorType = {
|
|
4
|
+
tableName: string;
|
|
5
|
+
query?: string;
|
|
6
|
+
parameters?: QueryWhereCondition;
|
|
7
|
+
adapterName?: string;
|
|
8
|
+
};
|
|
3
9
|
/** Query class for executing custom SQL queries */
|
|
4
10
|
export default class Query {
|
|
5
11
|
readonly TableName: string;
|
|
6
12
|
private readonly _adapter;
|
|
7
|
-
private _query
|
|
13
|
+
private _query?;
|
|
8
14
|
private _parameters;
|
|
9
|
-
get Parameters():
|
|
10
|
-
|
|
11
|
-
constructor(TableName: string, Query: string);
|
|
15
|
+
get Parameters(): QueryWhereCondition;
|
|
16
|
+
constructor({ tableName, query, parameters, adapterName }: QueryConstructorType);
|
|
12
17
|
/** Execute a non-SELECT query (INSERT, UPDATE, DELETE, etc.) */
|
|
13
18
|
Run<Type>(): Promise<Type>;
|
|
14
19
|
/** Execute a SELECT query and return all matching rows */
|
|
15
20
|
All<Type extends columnType>(): Promise<Record<Type>[]>;
|
|
16
21
|
/** Execute a SELECT query and return the first matching row */
|
|
17
22
|
Get<Type extends columnType>(): Promise<Record<Type> | undefined>;
|
|
18
|
-
static
|
|
23
|
+
static TableColumnInformation(tableName: string, customAdapter?: string): Promise<TableColumnInfo[]>;
|
|
24
|
+
DoesTableExist(): Promise<boolean>;
|
|
19
25
|
Count(): Promise<number>;
|
|
20
|
-
static ConvertParamsToArray(params:
|
|
26
|
+
static ConvertParamsToArray(params: QueryWhereCondition): QueryComparisonParameters[];
|
|
21
27
|
/** Convert various parameter formats to a consistent object format */
|
|
22
|
-
static ConvertParamsToObject(params:
|
|
28
|
+
static ConvertParamsToObject(params: QueryWhereCondition): QueryIsEqualParameter;
|
|
23
29
|
/** Databases don't like numeric values when inserting with a query */
|
|
24
|
-
static ConvertValueToString(params:
|
|
30
|
+
static ConvertValueToString(params: QueryIsEqualParameter): QueryIsEqualParameter;
|
|
25
31
|
}
|
|
26
32
|
//# sourceMappingURL=Query.d.ts.map
|
package/dist/base/Query.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Query.d.ts","sourceRoot":"","sources":["../../src/base/Query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"Query.d.ts","sourceRoot":"","sources":["../../src/base/Query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAC1I,OAAO,EAAa,MAAM,EAAoB,MAAM,gBAAgB,CAAC;AAErE,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,mDAAmD;AACnD,MAAM,CAAC,OAAO,OAAO,KAAK;IACxB,SAAgB,SAAS,EAAE,MAAM,CAAC;IAElC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C,OAAO,CAAC,MAAM,CAAC,CAAc;IAC7B,OAAO,CAAC,WAAW,CAA2B;IAE9C,IAAW,UAAU,IAAI,mBAAmB,CAE3C;gBAEW,EACV,SAAS,EACT,KAAK,EACL,UAAU,EACV,WAAW,EACZ,EAAE,oBAAoB;IAUvB,gEAAgE;IACnD,GAAG,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC;IAQvC,0DAA0D;IAC7C,GAAG,CAAC,IAAI,SAAS,UAAU,KAAK,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;IAUpE,+DAA+D;IAClD,GAAG,CAAC,IAAI,SAAS,UAAU,KAAK,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;WAS1D,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAIpG,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAIlC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;WASvB,oBAAoB,CAAC,MAAM,EAAE,mBAAmB,GAAG,yBAAyB,EAAE;IAkB5F,sEAAsE;WACxD,qBAAqB,CAAC,MAAM,EAAE,mBAAmB,GAAG,qBAAqB;IAavF,sEAAsE;WACxD,oBAAoB,CAAC,MAAM,EAAE,qBAAqB,GAAG,qBAAqB;CAKzF"}
|
package/dist/base/Query.js
CHANGED
|
@@ -13,19 +13,21 @@ export default class Query {
|
|
|
13
13
|
get Parameters() {
|
|
14
14
|
return this._parameters;
|
|
15
15
|
}
|
|
16
|
-
|
|
17
|
-
this._parameters = Query.ConvertParamsToObject(value);
|
|
18
|
-
}
|
|
19
|
-
constructor(TableName, Query) {
|
|
20
|
-
this._adapter = Container.getInstance().getAdapter();
|
|
16
|
+
constructor({ tableName, query, parameters, adapterName }) {
|
|
21
17
|
this._query = "";
|
|
22
18
|
this._parameters = {};
|
|
23
|
-
this.TableName =
|
|
24
|
-
this._query =
|
|
19
|
+
this.TableName = tableName;
|
|
20
|
+
this._query = query;
|
|
21
|
+
if (parameters)
|
|
22
|
+
this._parameters = Query.ConvertParamsToObject(parameters);
|
|
23
|
+
this._adapter = Container.getInstance().getAdapter(adapterName);
|
|
25
24
|
}
|
|
26
25
|
/** Execute a non-SELECT query (INSERT, UPDATE, DELETE, etc.) */
|
|
27
26
|
Run() {
|
|
28
27
|
return __awaiter(this, void 0, void 0, function* () {
|
|
28
|
+
if (!this._query) {
|
|
29
|
+
throw new Error("No query defined to run.");
|
|
30
|
+
}
|
|
29
31
|
const stmt = yield this._adapter.prepare(this._query);
|
|
30
32
|
return yield stmt.run(this.Parameters);
|
|
31
33
|
});
|
|
@@ -33,26 +35,40 @@ export default class Query {
|
|
|
33
35
|
/** Execute a SELECT query and return all matching rows */
|
|
34
36
|
All() {
|
|
35
37
|
return __awaiter(this, void 0, void 0, function* () {
|
|
38
|
+
if (!this._query) {
|
|
39
|
+
throw new Error("No query defined to run.");
|
|
40
|
+
}
|
|
36
41
|
const stmt = yield this._adapter.prepare(this._query);
|
|
37
42
|
const results = yield stmt.all(this.Parameters);
|
|
38
|
-
return results.map(res => new Record(
|
|
43
|
+
return results.map(res => new Record(this.TableName, res));
|
|
39
44
|
});
|
|
40
45
|
}
|
|
41
46
|
/** Execute a SELECT query and return the first matching row */
|
|
42
47
|
Get() {
|
|
43
48
|
return __awaiter(this, void 0, void 0, function* () {
|
|
49
|
+
if (!this._query) {
|
|
50
|
+
throw new Error("No query defined to run.");
|
|
51
|
+
}
|
|
44
52
|
const stmt = yield this._adapter.prepare(this._query);
|
|
45
53
|
const results = yield stmt.get(this.Parameters);
|
|
46
|
-
return results ? new Record(
|
|
54
|
+
return results ? new Record(this.TableName, results) : undefined;
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
static TableColumnInformation(tableName, customAdapter) {
|
|
58
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
59
|
+
return Container.getInstance().getAdapter(customAdapter).tableColumnInformation(tableName);
|
|
47
60
|
});
|
|
48
61
|
}
|
|
49
|
-
|
|
62
|
+
DoesTableExist() {
|
|
50
63
|
return __awaiter(this, void 0, void 0, function* () {
|
|
51
|
-
return
|
|
64
|
+
return yield this._adapter.tableExists(this.TableName);
|
|
52
65
|
});
|
|
53
66
|
}
|
|
54
67
|
Count() {
|
|
55
68
|
return __awaiter(this, void 0, void 0, function* () {
|
|
69
|
+
if (!this._query) {
|
|
70
|
+
throw new Error("No query defined to run.");
|
|
71
|
+
}
|
|
56
72
|
const stmt = yield this._adapter.prepare(this._query);
|
|
57
73
|
const result = yield stmt.get(this.Parameters);
|
|
58
74
|
return parseInt(result.count) || 0;
|
|
@@ -90,7 +106,7 @@ export default class Query {
|
|
|
90
106
|
/** Databases don't like numeric values when inserting with a query */
|
|
91
107
|
static ConvertValueToString(params) {
|
|
92
108
|
return Object.entries(params).map(([key, value]) => {
|
|
93
|
-
return { [key]: value !== null && value !== undefined ? value.toString() : value };
|
|
109
|
+
return { [key]: value !== null && !(value instanceof Date) && value !== undefined ? value.toString() : value };
|
|
94
110
|
}).reduce((acc, curr) => (Object.assign(Object.assign({}, acc), curr)), {});
|
|
95
111
|
}
|
|
96
112
|
}
|
package/dist/base/Record.d.ts
CHANGED
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
import { inspect } from "util";
|
|
2
|
-
import { columnType } from "../types/index.js";
|
|
2
|
+
import { columnType, QueryIsEqualParameter } from "../types/index.js";
|
|
3
3
|
/** Record class represents a single database row */
|
|
4
4
|
export default class Record<ColumnValuesType extends columnType> {
|
|
5
5
|
private _values;
|
|
6
6
|
private readonly _tableName;
|
|
7
|
-
|
|
7
|
+
private readonly _customAdapter?;
|
|
8
|
+
constructor(table: string, values: ColumnValuesType, adapter?: string);
|
|
8
9
|
/** Get the raw values object for this record */
|
|
9
10
|
get values(): ColumnValuesType;
|
|
10
11
|
Insert(): Promise<this | undefined>;
|
|
11
12
|
/** Update this record in the database */
|
|
12
|
-
Update(newValues: Partial<ColumnValuesType
|
|
13
|
+
Update(newValues: Partial<ColumnValuesType>, whereParameters: QueryIsEqualParameter): Promise<this>;
|
|
13
14
|
/** Delete this record from the database */
|
|
14
|
-
Delete(): Promise<void>;
|
|
15
|
+
Delete(primaryKey?: QueryIsEqualParameter): Promise<void>;
|
|
15
16
|
/** Returns the values object for JSON.stringify() */
|
|
16
17
|
toJSON(): ColumnValuesType;
|
|
17
18
|
/** Convert record to pretty-printed JSON string */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Record.d.ts","sourceRoot":"","sources":["../../src/base/Record.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,OAAO,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"Record.d.ts","sourceRoot":"","sources":["../../src/base/Record.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,OAAO,EAAE,UAAU,EAAoC,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAG3G,oDAAoD;AACpD,MAAM,CAAC,OAAO,OAAO,MAAM,CAAC,gBAAgB,SAAS,UAAU;IAC3D,OAAO,CAAC,OAAO,CAA4C;IAC3D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAS;gBAE7B,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,MAAM;IAMrE,gDAAgD;IAChD,IAAW,MAAM,IAAI,gBAAgB,CAEpC;IAEY,MAAM,IAAI,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;IA+ChD,yCAAyC;IAC5B,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,gBAAgB,CAAC,EAAE,eAAe,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BhH,2CAA2C;IAC9B,MAAM,CAAC,UAAU,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBtE,qDAAqD;IAC9C,MAAM,IAAI,gBAAgB;IAIjC,mDAAmD;IAC5C,QAAQ,IAAI,MAAM;IAIzB,uCAAuC;IACvC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,gBAAgB;CAGvC"}
|
package/dist/base/Record.js
CHANGED
|
@@ -12,10 +12,11 @@ import Query from "./Query.js";
|
|
|
12
12
|
import QueryStatementBuilder from "../helpers/QueryStatementBuilder.js";
|
|
13
13
|
/** Record class represents a single database row */
|
|
14
14
|
export default class Record {
|
|
15
|
-
constructor(values,
|
|
15
|
+
constructor(table, values, adapter) {
|
|
16
16
|
this._values = {};
|
|
17
|
-
this._values = values;
|
|
18
17
|
this._tableName = table;
|
|
18
|
+
this._values = values;
|
|
19
|
+
this._customAdapter = adapter;
|
|
19
20
|
}
|
|
20
21
|
/** Get the raw values object for this record */
|
|
21
22
|
get values() {
|
|
@@ -30,8 +31,12 @@ export default class Record {
|
|
|
30
31
|
throw new Error("Cannot insert record with no columns");
|
|
31
32
|
}
|
|
32
33
|
const queryStr = QueryStatementBuilder.BuildInsert(this._tableName, this._values);
|
|
33
|
-
const query = new Query(
|
|
34
|
-
|
|
34
|
+
const query = new Query({
|
|
35
|
+
tableName: this._tableName,
|
|
36
|
+
query: queryStr,
|
|
37
|
+
parameters: this._values,
|
|
38
|
+
adapterName: this._customAdapter
|
|
39
|
+
});
|
|
35
40
|
const result = yield query.Run();
|
|
36
41
|
let recordId;
|
|
37
42
|
// For PostgreSQL compatibility: use 'id' from values if lastInsertRowid is undefined
|
|
@@ -45,8 +50,12 @@ export default class Record {
|
|
|
45
50
|
return undefined;
|
|
46
51
|
}
|
|
47
52
|
const queryStrSelect = QueryStatementBuilder.BuildSelect(this._tableName, { where: Object.assign({}, this._values) });
|
|
48
|
-
const querySelect = new Query(
|
|
49
|
-
|
|
53
|
+
const querySelect = new Query({
|
|
54
|
+
tableName: this._tableName,
|
|
55
|
+
query: queryStrSelect,
|
|
56
|
+
parameters: this._values,
|
|
57
|
+
adapterName: this._customAdapter
|
|
58
|
+
});
|
|
50
59
|
const insertedRecord = yield querySelect.All();
|
|
51
60
|
if (insertedRecord.length > 0) {
|
|
52
61
|
this._values = insertedRecord[insertedRecord.length - 1].values;
|
|
@@ -56,30 +65,43 @@ export default class Record {
|
|
|
56
65
|
});
|
|
57
66
|
}
|
|
58
67
|
/** Update this record in the database */
|
|
59
|
-
Update(newValues) {
|
|
68
|
+
Update(newValues, whereParameters) {
|
|
60
69
|
return __awaiter(this, void 0, void 0, function* () {
|
|
61
70
|
const originalValues = this._values;
|
|
62
71
|
if (originalValues.updated_at !== undefined) {
|
|
63
72
|
newValues.updated_at = new Date().toISOString();
|
|
64
73
|
}
|
|
65
|
-
const queryStr = QueryStatementBuilder.BuildUpdate(this._tableName, newValues,
|
|
66
|
-
const _query = new Query(this._tableName, queryStr);
|
|
74
|
+
const queryStr = QueryStatementBuilder.BuildUpdate(this._tableName, newValues, whereParameters);
|
|
67
75
|
// Merge newValues and originalValues for parameters (with 'where_' prefix for where clause)
|
|
68
76
|
const params = Object.assign({}, newValues);
|
|
69
77
|
Object.entries(originalValues).forEach(([key, value]) => {
|
|
70
78
|
params[`where_${key}`] = value;
|
|
71
79
|
});
|
|
72
|
-
_query
|
|
80
|
+
const _query = new Query({
|
|
81
|
+
tableName: this._tableName,
|
|
82
|
+
query: queryStr,
|
|
83
|
+
parameters: params,
|
|
84
|
+
adapterName: this._customAdapter
|
|
85
|
+
});
|
|
73
86
|
yield _query.Run();
|
|
74
87
|
this._values = Object.assign(Object.assign({}, this._values), newValues);
|
|
88
|
+
return this;
|
|
75
89
|
});
|
|
76
90
|
}
|
|
77
91
|
/** Delete this record from the database */
|
|
78
|
-
Delete() {
|
|
92
|
+
Delete(primaryKey) {
|
|
79
93
|
return __awaiter(this, void 0, void 0, function* () {
|
|
94
|
+
const originalValues = this._values;
|
|
95
|
+
if (originalValues.deleted_at !== undefined) {
|
|
96
|
+
this._values.deleted_at = new Date().toISOString();
|
|
97
|
+
yield this.Update(this._values, this._values.id ? { id: this._values.id } : primaryKey || {});
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
80
100
|
const queryStr = QueryStatementBuilder.BuildDelete(this._tableName, this._values);
|
|
81
|
-
const _query = new Query(
|
|
82
|
-
|
|
101
|
+
const _query = new Query({
|
|
102
|
+
tableName: this._tableName,
|
|
103
|
+
query: queryStr, parameters: this.values, adapterName: this._customAdapter
|
|
104
|
+
});
|
|
83
105
|
yield _query.Run();
|
|
84
106
|
});
|
|
85
107
|
}
|
package/dist/base/Table.d.ts
CHANGED
|
@@ -1,25 +1,27 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { DefaultQueryParameters, Join, ExtraQueryParameters, ReadableTableColumnInfo, TableColumnInfo, columnType } from "../types/index.js";
|
|
2
2
|
import { Record } from "../index.js";
|
|
3
3
|
/** Table class for interacting with a database table */
|
|
4
4
|
export default class Table {
|
|
5
|
+
private readonly _customAdapter?;
|
|
5
6
|
private readonly _name;
|
|
6
7
|
/** Private constructor - use Table.create() */
|
|
7
|
-
constructor(name: string);
|
|
8
|
+
constructor(name: string, customAdapter?: string);
|
|
8
9
|
/** Get raw column information */
|
|
9
10
|
TableColumnInformation(): Promise<TableColumnInfo[]>;
|
|
10
11
|
/** Get readable, formatted column information */
|
|
11
12
|
ReadableTableColumnInformation(): Promise<ReadableTableColumnInfo[]>;
|
|
12
13
|
Drop(): Promise<void>;
|
|
13
14
|
/** Fetch records with optional filtering, ordering, and pagination */
|
|
14
|
-
Records<Type extends columnType>(options?:
|
|
15
|
+
Records<Type extends columnType>(options?: DefaultQueryParameters & ExtraQueryParameters): Promise<Record<Type>[]>;
|
|
15
16
|
/** Fetch a single record from the table */
|
|
16
|
-
Record<Type extends columnType>(options?:
|
|
17
|
+
Record<Type extends columnType>(options?: DefaultQueryParameters & ExtraQueryParameters): Promise<Record<Type> | undefined>;
|
|
17
18
|
/** Get the total count of records */
|
|
18
19
|
RecordsCount(): Promise<number>;
|
|
20
|
+
exists(): Promise<boolean>;
|
|
19
21
|
/** Insert a record into the table */
|
|
20
22
|
Insert<Type extends columnType>(values: Type): Promise<Record<Type> | undefined>;
|
|
21
23
|
/** Perform JOIN operations with other tables */
|
|
22
|
-
Join<Type extends columnType>(Joins: Join | Join[], options?:
|
|
24
|
+
Join<Type extends columnType>(Joins: Join | Join[], options?: DefaultQueryParameters & ExtraQueryParameters): Promise<Record<Type>[]>;
|
|
23
25
|
private splitJoinValues;
|
|
24
26
|
}
|
|
25
27
|
//# sourceMappingURL=Table.d.ts.map
|
package/dist/base/Table.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Table.d.ts","sourceRoot":"","sources":["../../src/base/Table.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,
|
|
1
|
+
{"version":3,"file":"Table.d.ts","sourceRoot":"","sources":["../../src/base/Table.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,sBAAsB,EACtB,IAAI,EACJ,oBAAoB,EACpB,uBAAuB,EACvB,eAAe,EACf,UAAU,EACb,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,MAAM,EAAS,MAAM,gBAAgB,CAAC;AAE/C,wDAAwD;AACxD,MAAM,CAAC,OAAO,OAAO,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAE/B,+CAA+C;gBACnC,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM;IAKhD,iCAAiC;IACpB,sBAAsB,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAIjE,iDAAiD;IACpC,8BAA8B,IAAI,OAAO,CAAC,uBAAuB,EAAE,CAAC;IAWpE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAUlC,sEAAsE;IACzD,OAAO,CAAC,IAAI,SAAS,UAAU,EACxC,OAAO,CAAC,EAAE,sBAAsB,GAAG,oBAAoB,GACxD,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;IAsB1B,2CAA2C;IAC9B,MAAM,CAAC,IAAI,SAAS,UAAU,EACvC,OAAO,CAAC,EAAE,sBAAsB,GAAG,oBAAoB,GACxD,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;IAWpC,qCAAqC;IACxB,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAS/B,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IASvC,qCAAqC;IACxB,MAAM,CAAC,IAAI,SAAS,UAAU,EAAE,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;IAM7F,gDAAgD;IACnC,IAAI,CAAC,IAAI,SAAS,UAAU,EACrC,KAAK,EAAE,IAAI,GAAG,IAAI,EAAE,EACpB,OAAO,CAAC,EAAE,sBAAsB,GAAG,oBAAoB,GACxD,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAsBZ,eAAe;CAgChC"}
|