Skip to content

Commit a554c7e

Browse files
authored
Merge pull request #1083 from rocket-admin/backend_bulk_rows_delete_rework
Backend bulk rows delete rework
2 parents 000a6cd + f96cfb7 commit a554c7e

File tree

11 files changed

+61
-46
lines changed

11 files changed

+61
-46
lines changed

backend/src/entities/table/use-cases/delete-rows-from-table.use.case.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,6 @@ export class DeleteRowsFromTableUseCase
110110
);
111111
}
112112
});
113-
// todo need improve
114113
let oldRowsData: Array<Record<string, unknown>>;
115114
try {
116115
oldRowsData = await dao.bulkGetRowsFromTableByPrimaryKeys(tableName, primaryKeys, tableSettings, userEmail);

shared-code/src/data-access-layer/data-access-objects/data-access-object-agent.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -461,9 +461,9 @@ export class DataAccessObjectAgent implements IDataAccessObjectAgent {
461461
public async bulkUpdateRowsInTable(
462462
tableName: string,
463463
newValues: Record<string, unknown>,
464-
primaryKeys: Record<string, unknown>[],
464+
primaryKeys: Array<Record<string, unknown>>,
465465
userEmail: string,
466-
): Promise<Record<string, unknown>> {
466+
): Promise<Array<Record<string, unknown>>> {
467467
const jwtAuthToken = this.generateJWT(this.connection.token);
468468
axios.defaults.headers.common['Authorization'] = `Bearer ${jwtAuthToken}`;
469469

shared-code/src/data-access-layer/data-access-objects/data-access-object-dynamodb.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -519,7 +519,7 @@ export class DataAccessObjectDynamoDB extends BasicDataAccessObject implements I
519519
tableName: string,
520520
newValues: Record<string, unknown>,
521521
primaryKeys: Array<Record<string, unknown>>,
522-
): Promise<Record<string, unknown>> {
522+
): Promise<Array<Record<string, unknown>>> {
523523
const { documentClient } = this.getDynamoDb();
524524
const structure = await this.getTableStructure(tableName);
525525
newValues = this.convertHexDataToBinaryInBinarySets(newValues, structure);

shared-code/src/data-access-layer/data-access-objects/data-access-object-ibmdb2.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -492,10 +492,10 @@ WHERE
492492
public async bulkUpdateRowsInTable(
493493
tableName: string,
494494
newValues: Record<string, unknown>,
495-
primaryKeys: Record<string, unknown>[],
496-
): Promise<Record<string, unknown>> {
495+
primaryKeys: Array<Record<string, unknown>>,
496+
): Promise<Array<Record<string, unknown>>> {
497497
await Promise.allSettled(primaryKeys.map((key) => this.updateRowInTable(tableName, newValues, key)));
498-
return newValues;
498+
return primaryKeys;
499499
}
500500

501501
public async bulkDeleteRowsInTable(tableName: string, primaryKeys: Array<Record<string, unknown>>): Promise<number> {

shared-code/src/data-access-layer/data-access-objects/data-access-object-mongodb.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -375,12 +375,12 @@ export class DataAccessObjectMongo extends BasicDataAccessObject implements IDat
375375
tableName: string,
376376
newValues: Record<string, unknown>,
377377
primaryKeys: Record<string, unknown>[],
378-
): Promise<Record<string, unknown>> {
378+
): Promise<Array<Record<string, unknown>>> {
379379
const db = await this.getConnectionToDatabase();
380380
const collection = db.collection(tableName);
381381
const objectIds = primaryKeys.map((primaryKey) => this.createObjectIdFromSting(primaryKey._id as string));
382382
await collection.updateMany({ _id: { $in: objectIds } }, { $set: newValues });
383-
return { _id: objectIds.map((objectId) => this.processMongoIdField(objectId)) };
383+
return primaryKeys;
384384
}
385385

386386
public async bulkDeleteRowsInTable(tableName: string, primaryKeys: Array<Record<string, unknown>>): Promise<number> {

shared-code/src/data-access-layer/data-access-objects/data-access-object-mssql.ts

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -410,17 +410,22 @@ WHERE TABLE_TYPE = 'VIEW'
410410
public async bulkUpdateRowsInTable(
411411
tableName: string,
412412
newValues: Record<string, unknown>,
413-
primaryKeys: Record<string, unknown>[],
414-
): Promise<Record<string, unknown>> {
413+
primaryKeys: Array<Record<string, unknown>>,
414+
): Promise<Array<Record<string, unknown>>> {
415415
const [knex, schemaName] = await Promise.all([this.configureKnex(), this.getSchemaName(tableName)]);
416416
const tableWithSchema = `${schemaName}.[${tableName}]`;
417-
const primaryKeysNames = Object.keys(primaryKeys[0]);
418-
const primaryKeysValues = primaryKeys.map(Object.values);
419417

420-
return knex(tableWithSchema)
421-
.returning(primaryKeysNames)
422-
.whereIn(primaryKeysNames, primaryKeysValues)
423-
.update(newValues);
418+
return await knex.transaction(async (trx) => {
419+
const results = [];
420+
for (const primaryKey of primaryKeys) {
421+
const result = await trx(tableWithSchema)
422+
.returning(Object.keys(primaryKey))
423+
.where(primaryKey)
424+
.update(newValues);
425+
results.push(result[0]);
426+
}
427+
return results;
428+
});
424429
}
425430

426431
public async bulkDeleteRowsInTable(tableName: string, primaryKeys: Array<Record<string, unknown>>): Promise<number> {

shared-code/src/data-access-layer/data-access-objects/data-access-object-mysql.ts

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -469,8 +469,8 @@ export class DataAccessObjectMysql extends BasicDataAccessObject implements IDat
469469
public async bulkUpdateRowsInTable(
470470
tableName: string,
471471
newValues: Record<string, unknown>,
472-
primaryKeys: Record<string, unknown>[],
473-
): Promise<Record<string, unknown>> {
472+
primaryKeys: Array<Record<string, unknown>>,
473+
): Promise<Array<Record<string, unknown>>> {
474474
const knex = await this.configureKnex();
475475
await knex.raw('SET SQL_SAFE_UPDATES = 1;');
476476

@@ -486,12 +486,14 @@ export class DataAccessObjectMysql extends BasicDataAccessObject implements IDat
486486
}
487487
});
488488

489-
const primaryKeysNames = Object.keys(primaryKeys[0]);
490-
491-
return await knex(tableName)
492-
.returning(primaryKeysNames)
493-
.whereIn(primaryKeysNames, primaryKeys.map(Object.values))
494-
.update(newValues);
489+
return await knex.transaction(async (trx) => {
490+
const results = [];
491+
for (const primaryKey of primaryKeys) {
492+
const result = await trx(tableName).returning(Object.keys(primaryKey)).where(primaryKey).update(newValues);
493+
results.push(result[0]);
494+
}
495+
return results;
496+
});
495497
}
496498

497499
public async bulkDeleteRowsInTable(tableName: string, primaryKeys: Array<Record<string, unknown>>): Promise<number> {

shared-code/src/data-access-layer/data-access-objects/data-access-object-oracle.ts

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -575,19 +575,23 @@ export class DataAccessObjectOracle extends BasicDataAccessObject implements IDa
575575
public async bulkUpdateRowsInTable(
576576
tableName: string,
577577
newValues: Record<string, unknown>,
578-
primaryKeys: Record<string, unknown>[],
579-
): Promise<Record<string, unknown>> {
578+
primaryKeys: Array<Record<string, unknown>>,
579+
): Promise<Array<Record<string, unknown>>> {
580580
const knex = await this.configureKnex();
581581
const schema = this.connection.schema ?? this.connection.username.toUpperCase();
582582

583-
const primaryKeysNames = Object.keys(primaryKeys[0]);
584-
const primaryKeysValues = primaryKeys.map(Object.values);
585-
586-
return await knex(tableName)
587-
.withSchema(schema)
588-
.returning(primaryKeysNames)
589-
.whereIn(primaryKeysNames, primaryKeysValues)
590-
.update(newValues);
583+
return await knex.transaction(async (trx) => {
584+
const results = [];
585+
for (const primaryKey of primaryKeys) {
586+
const result = await trx(tableName)
587+
.withSchema(schema)
588+
.returning(Object.keys(primaryKey))
589+
.where(primaryKey)
590+
.update(newValues);
591+
results.push(result[0]);
592+
}
593+
return results;
594+
});
591595
}
592596

593597
public async bulkDeleteRowsInTable(tableName: string, primaryKeys: Array<Record<string, unknown>>): Promise<number> {

shared-code/src/data-access-layer/data-access-objects/data-access-object-postgres.ts

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -460,7 +460,7 @@ export class DataAccessObjectPostgres extends BasicDataAccessObject implements I
460460
tableName: string,
461461
newValues: Record<string, unknown>,
462462
primaryKeys: Array<Record<string, unknown>>,
463-
): Promise<Record<string, unknown>> {
463+
): Promise<Record<string, unknown>[]> {
464464
const tableStructure = await this.getTableStructure(tableName);
465465
const jsonColumnNames = tableStructure
466466
.filter(({ data_type }) => data_type.toLowerCase() === 'json')
@@ -473,15 +473,20 @@ export class DataAccessObjectPostgres extends BasicDataAccessObject implements I
473473
}
474474
});
475475

476-
const primaryKeysNames = Object.keys(primaryKeys[0]);
477-
const primaryKeysValues = primaryKeys.map(Object.values);
478-
479476
const knex = await this.configureKnex();
480-
return await knex(tableName)
481-
.withSchema(this.connection.schema ?? 'public')
482-
.returning(primaryKeysNames)
483-
.whereIn(primaryKeysNames, primaryKeysValues)
484-
.update(updatedValues);
477+
478+
return await knex.transaction(async (trx) => {
479+
const results = [];
480+
for (const primaryKey of primaryKeys) {
481+
const result = await trx(tableName)
482+
.withSchema(this.connection.schema ?? 'public')
483+
.returning(Object.keys(primaryKey))
484+
.where(primaryKey)
485+
.update(updatedValues);
486+
results.push(result[0]);
487+
}
488+
return results;
489+
});
485490
}
486491

487492
public async bulkDeleteRowsInTable(tableName: string, primaryKeys: Array<Record<string, unknown>>): Promise<number> {

shared-code/src/data-access-layer/shared/interfaces/data-access-object-agent.interface.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ export interface IDataAccessObjectAgent {
7979
newValues: Record<string, unknown>,
8080
primaryKeys: Array<Record<string, unknown>>,
8181
userEmail: string,
82-
): Promise<Record<string, unknown>>;
82+
): Promise<Array<Record<string, unknown>>>;
8383

8484
bulkDeleteRowsInTable(
8585
tableName: string,

0 commit comments

Comments
 (0)