Skip to content

Commit d8ece07

Browse files
author
Pavlo Kulyk
committed
feat: add deleteMany method to data source connectors for batch deletion
1 parent db21a6e commit d8ece07

File tree

6 files changed

+38
-0
lines changed

6 files changed

+38
-0
lines changed

adminforth/dataConnectors/clickhouse.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -499,6 +499,13 @@ class ClickhouseConnector extends AdminForthBaseConnector implements IAdminForth
499499
return res;
500500
}
501501

502+
async deleteMany({ resource, recordIds }: { resource: AdminForthResource; recordIds: any[] }): Promise<number> {
503+
const idsList = recordIds.map(id => `'${id}'`).join(', ');
504+
const query = `ALTER TABLE ${resource.table} DELETE WHERE ${this.getPrimaryKey(resource)} IN (${idsList})`;
505+
const res = await this.client.query({ query });
506+
return recordIds.length ?? 0;
507+
}
508+
502509
close() {
503510
this.client.disconnect();
504511
}

adminforth/dataConnectors/mongo.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -397,6 +397,12 @@ class MongoConnector extends AdminForthBaseConnector implements IAdminForthDataS
397397
return res.deletedCount > 0;
398398
}
399399

400+
async deleteMany({ resource, recordIds }: { resource: AdminForthResource; recordIds: any[] }): Promise<number> {
401+
const collection = this.client.db().collection(resource.table);
402+
const res = await collection.deleteMany({[this.getPrimaryKey(resource)]: { $in: recordIds }});
403+
return res.deletedCount ?? 0;
404+
}
405+
400406
async close() {
401407
await this.client.close()
402408
}

adminforth/dataConnectors/mysql.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -420,6 +420,13 @@ class MysqlConnector extends AdminForthBaseConnector implements IAdminForthDataS
420420
return res.rowCount > 0;
421421
}
422422

423+
async deleteMany({ resource, recordIds }: { resource: AdminForthResource; recordIds: any[] }): Promise<number> {
424+
const placeholders = recordIds.map(() => '?').join(',');
425+
const query = `DELETE FROM ${resource.table} WHERE ${this.getPrimaryKey(resource)} IN (${placeholders})`;
426+
const [result] = await this.client.execute(query, recordIds);
427+
return result.affectedRows ?? 0;
428+
}
429+
423430
async close() {
424431
await this.client.end();
425432
}

adminforth/dataConnectors/postgres.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -455,6 +455,13 @@ class PostgresConnector extends AdminForthBaseConnector implements IAdminForthDa
455455
return res.rowCount > 0;
456456
}
457457

458+
async deleteMany({ resource, recordIds }: { resource: AdminForthResource; recordIds: any[] }): Promise<number> {
459+
const placeholders = recordIds.map((_, idx) => `$${idx + 1}`).join(', ');
460+
const query = `DELETE FROM ${resource.table} WHERE ${this.getPrimaryKey(resource)} IN (${placeholders})`;
461+
const res = await this.client.query(query, recordIds);
462+
return res.rowCount ?? 0;
463+
}
464+
458465
async close() {
459466
await this.client.end();
460467
}

adminforth/dataConnectors/sqlite.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -382,6 +382,13 @@ class SQLiteConnector extends AdminForthBaseConnector implements IAdminForthData
382382
return res.changes > 0;
383383
}
384384

385+
async deleteMany({ resource, recordIds }: { resource: AdminForthResource, recordIds: any[] }): Promise<number> {
386+
const placeholders = recordIds.map(() => '?').join(',');
387+
const q = this.client.prepare(`DELETE FROM ${resource.table} WHERE ${this.getPrimaryKey(resource)} IN (${placeholders})`);
388+
const res = await q.run(...recordIds);
389+
return res.changes ?? 0;
390+
}
391+
385392
close() {
386393
this.client.close();
387394
}

adminforth/types/Back.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,8 @@ export interface IAdminForthDataSourceConnectorBase extends IAdminForthDataSourc
292292
}): Promise<{ok: boolean, error?: string}>;
293293

294294
getMinMaxForColumns({ resource, columns }: { resource: AdminForthResource, columns: AdminForthResourceColumn[] }): Promise<{ [key: string]: { min: any, max: any } }>;
295+
296+
deleteMany?(params: { resource: AdminForthResource; recordIds: any[] }): Promise<number>;
295297
}
296298

297299

@@ -1760,6 +1762,8 @@ export interface IOperationalResource {
17601762
update: (primaryKey: any, record: any) => Promise<any>;
17611763

17621764
delete: (primaryKey: any) => Promise<boolean>;
1765+
1766+
deleteMany?(params: { resource: AdminForthResource; recordIds: any[] }): Promise<number>;
17631767

17641768
dataConnector: IAdminForthDataSourceConnectorBase;
17651769
}

0 commit comments

Comments
 (0)