@proteinjs/db 1.17.1 → 1.18.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/src/Db.ts CHANGED
@@ -167,7 +167,7 @@ export class Db<R extends Record = Record> implements DbService<R> {
167
167
  let recordCopy = Object.assign({}, record);
168
168
  await addUpdateFieldValues(table, recordCopy);
169
169
  const qb = new QueryBuilderFactory().getQueryBuilder(table, query);
170
- await this.addColumnQueries(table, qb);
170
+ await this.addColumnQueries(table, qb, 'write');
171
171
  if (!query) {
172
172
  qb.condition({ field: 'id', operator: '=', value: recordCopy.id as T[keyof T] });
173
173
  }
@@ -193,8 +193,23 @@ export class Db<R extends Record = Record> implements DbService<R> {
193
193
  this.auth.canDelete(table);
194
194
  }
195
195
 
196
+ const _query = async <T extends R>(table: Table<T>, query: Query<T>) => {
197
+ const qb = new QueryBuilderFactory().getQueryBuilder(table, query);
198
+ await this.addColumnQueries(table, qb, 'delete');
199
+
200
+ const generateQuery = (config: DbDriverQueryStatementConfig) =>
201
+ qb.toSql(this.statementConfigFactory.getStatementConfig(config));
202
+ const serializedRecords = await this.dbDriver.runQuery(generateQuery, this.currentTransaction);
203
+ const recordSerializer = new RecordSerializer(table);
204
+ const records = await Promise.all(
205
+ serializedRecords.map(async (serializedRecord) => recordSerializer.deserialize(serializedRecord))
206
+ );
207
+ await this.preloadReferences(records);
208
+ return records;
209
+ };
210
+
196
211
  const qb = new QueryBuilderFactory().getQueryBuilder(table, query);
197
- const recordsToDelete = await this.query(table, qb);
212
+ const recordsToDelete = await _query(table, qb);
198
213
  if (recordsToDelete.length == 0) {
199
214
  return 0;
200
215
  }
@@ -268,7 +283,9 @@ export class Db<R extends Record = Record> implements DbService<R> {
268
283
  }
269
284
 
270
285
  const qb = new QueryBuilderFactory().getQueryBuilder(table, query);
286
+
271
287
  await this.addColumnQueries(table, qb);
288
+
272
289
  const generateQuery = (config: DbDriverQueryStatementConfig) =>
273
290
  qb.toSql(this.statementConfigFactory.getStatementConfig(config));
274
291
  const serializedRecords = await this.dbDriver.runQuery(generateQuery, this.currentTransaction);
@@ -318,11 +335,15 @@ export class Db<R extends Record = Record> implements DbService<R> {
318
335
  return result[0]['count'];
319
336
  }
320
337
 
321
- private async addColumnQueries<T extends R>(table: Table<T>, qb: QueryBuilder<T>) {
338
+ private async addColumnQueries<T extends R>(
339
+ table: Table<T>,
340
+ qb: QueryBuilder<T>,
341
+ operation: 'read' | 'write' | 'delete' = 'read'
342
+ ) {
322
343
  for (const columnPropertyName in table.columns) {
323
344
  const column = (table.columns as any)[columnPropertyName] as Column<any, any>;
324
345
  if (column.options?.addToQuery) {
325
- await column.options.addToQuery(qb, this.runAsSystem);
346
+ await column.options.addToQuery(qb, this.runAsSystem, operation);
326
347
  }
327
348
  }
328
349
  }
package/src/Table.ts CHANGED
@@ -153,7 +153,7 @@ export type ColumnOptions = {
153
153
  /** Value stored on update */
154
154
  updateValue?: (table: Table<any>, updateObj: any) => Promise<any>;
155
155
  /** Add conditions to query; called on every query of this table */
156
- addToQuery?: (qb: QueryBuilder, runAsSystem: boolean) => Promise<void>;
156
+ addToQuery?: (qb: QueryBuilder, runAsSystem: boolean, operation: 'read' | 'write' | 'delete') => Promise<void>;
157
157
  onBeforeInsert?: (insertObj: any & Record, runAsSystem: boolean) => Promise<void>;
158
158
  ui?: {
159
159
  hidden?: boolean;