Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions adminforth/dataConnectors/clickhouse.ts
Original file line number Diff line number Diff line change
Expand Up @@ -499,6 +499,21 @@ class ClickhouseConnector extends AdminForthBaseConnector implements IAdminForth
return res;
}

async deleteMany({ resource, recordIds }: { resource: AdminForthResource; recordIds: any[] }): Promise<number> {
const pkColumn = resource.dataSourceColumns.find((col) => col.primaryKey);
if (!pkColumn || !recordIds || recordIds.length === 0) {
return 0;
}
const paramNames = recordIds.map((_, idx) => `id${idx}`);
const conditions = paramNames.map((name) => `${pkColumn.name} = {${name}:${pkColumn._underlineType}}`).join(' OR ');
const queryParams = paramNames.reduce((acc, name, idx) => {acc[name] = recordIds[idx]; return acc;}, {} as Record<string, any>);
await this.client.command({
query: `ALTER TABLE ${this.dbName}.${resource.table} DELETE WHERE ${conditions}`,
query_params: queryParams,
});
return recordIds.length ?? 0;
}

close() {
this.client.disconnect();
}
Expand Down
6 changes: 6 additions & 0 deletions adminforth/dataConnectors/mongo.ts
Original file line number Diff line number Diff line change
Expand Up @@ -397,6 +397,12 @@ class MongoConnector extends AdminForthBaseConnector implements IAdminForthDataS
return res.deletedCount > 0;
}

async deleteMany({ resource, recordIds }: { resource: AdminForthResource; recordIds: any[] }): Promise<number> {
const collection = this.client.db().collection(resource.table);
const res = await collection.deleteMany({[this.getPrimaryKey(resource)]: { $in: recordIds }});
return res.deletedCount ?? 0;
}

async close() {
await this.client.close()
}
Expand Down
7 changes: 7 additions & 0 deletions adminforth/dataConnectors/mysql.ts
Original file line number Diff line number Diff line change
Expand Up @@ -420,6 +420,13 @@ class MysqlConnector extends AdminForthBaseConnector implements IAdminForthDataS
return res.rowCount > 0;
}

async deleteMany({ resource, recordIds }: { resource: AdminForthResource; recordIds: any[] }): Promise<number> {
const placeholders = recordIds.map(() => '?').join(',');
const query = `DELETE FROM ${resource.table} WHERE ${this.getPrimaryKey(resource)} IN (${placeholders})`;
const [result] = await this.client.execute(query, recordIds);
return result.affectedRows ?? 0;
}

async close() {
await this.client.end();
}
Expand Down
7 changes: 7 additions & 0 deletions adminforth/dataConnectors/postgres.ts
Original file line number Diff line number Diff line change
Expand Up @@ -455,6 +455,13 @@ class PostgresConnector extends AdminForthBaseConnector implements IAdminForthDa
return res.rowCount > 0;
}

async deleteMany({ resource, recordIds }: { resource: AdminForthResource; recordIds: any[] }): Promise<number> {
const placeholders = recordIds.map((_, idx) => `$${idx + 1}`).join(', ');
const query = `DELETE FROM "${resource.table}" WHERE "${this.getPrimaryKey(resource)}" IN (${placeholders})`;
const res = await this.client.query(query, recordIds);
return res.rowCount ?? 0;
}

async close() {
await this.client.end();
}
Expand Down
7 changes: 7 additions & 0 deletions adminforth/dataConnectors/sqlite.ts
Original file line number Diff line number Diff line change
Expand Up @@ -382,6 +382,13 @@ class SQLiteConnector extends AdminForthBaseConnector implements IAdminForthData
return res.changes > 0;
}

async deleteMany({ resource, recordIds }: { resource: AdminForthResource, recordIds: any[] }): Promise<number> {
const placeholders = recordIds.map(() => '?').join(',');
const q = this.client.prepare(`DELETE FROM ${resource.table} WHERE ${this.getPrimaryKey(resource)} IN (${placeholders})`);
const res = await q.run(...recordIds);
return res.changes ?? 0;
}

close() {
this.client.close();
}
Expand Down
2 changes: 2 additions & 0 deletions adminforth/types/Back.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1760,6 +1760,8 @@ export interface IOperationalResource {
update: (primaryKey: any, record: any) => Promise<any>;

delete: (primaryKey: any) => Promise<boolean>;

deleteMany?(recordIds: any[]): Promise<number>;

dataConnector: IAdminForthDataSourceConnectorBase;
}
Expand Down
1 change: 1 addition & 0 deletions dev-demo/Taskfile.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ vars:
- "adminforth-quick-filters"
- "adminforth-many2many"
- "adminforth-background-jobs"
- "adminforth-auto-remove"

ADAPTERS:
- "adminforth-completion-adapter-open-ai-chat-gpt"
Expand Down