Skip to content

Commit 17144b5

Browse files
committed
fix: add raw sql filter support for clickhouse
1 parent 381c595 commit 17144b5

File tree

3 files changed

+28
-7
lines changed

3 files changed

+28
-7
lines changed

adminforth/dataConnectors/clickhouse.ts

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,9 +185,14 @@ class ClickhouseConnector extends AdminForthBaseConnector implements IAdminForth
185185
return `${field} ${operator} ${placeholder}`;
186186
}
187187

188+
// filter is a single insecure raw sql
189+
if ((filter as IAdminForthSingleFilter).insecureRawSQL) {
190+
return (filter as IAdminForthSingleFilter).insecureRawSQL;
191+
}
192+
188193
// filter is a AndOr filter
189194
return (filter as IAdminForthAndOrFilter).subFilters.map((f) => {
190-
if ((f as IAdminForthSingleFilter).field) {
195+
if ((f as IAdminForthSingleFilter).field || (f as IAdminForthSingleFilter).insecureRawSQL) {
191196
// subFilter is a Single filter
192197
return this.getFilterString(resource, f);
193198
}
@@ -209,6 +214,11 @@ class ClickhouseConnector extends AdminForthBaseConnector implements IAdminForth
209214
}
210215
}
211216

217+
// filter is a Single insecure raw sql
218+
if ((filter as IAdminForthSingleFilter).insecureRawSQL) {
219+
return [];
220+
}
221+
212222
// filter is a AndOrFilter
213223
return (filter as IAdminForthAndOrFilter).subFilters.reduce((params: any[], f: IAdminForthSingleFilter | IAdminForthAndOrFilter) => {
214224
return params.concat(this.getFilterParams(f));
@@ -310,6 +320,13 @@ class ClickhouseConnector extends AdminForthBaseConnector implements IAdminForth
310320
filters: IAdminForthAndOrFilter;
311321
}): Promise<number> {
312322
const tableName = resource.table;
323+
// validate and normalize in case this method is called from dataAPI
324+
if (filters) {
325+
const filterValidation = this.validateAndNormalizeFilters(filters, resource);
326+
if (!filterValidation.ok) {
327+
throw new Error(filterValidation.error);
328+
}
329+
}
313330
const { where, params } = this.whereClause(resource, filters);
314331

315332
const countQ = await this.client.query({

adminforth/dataConnectors/mysql.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -263,9 +263,11 @@ class MysqlConnector extends AdminForthBaseConnector implements IAdminForthDataS
263263
async getCount({ resource, filters }: { resource: AdminForthResource; filters: IAdminForthAndOrFilter; }): Promise<number> {
264264
const tableName = resource.table;
265265
// validate and normalize in case this method is called from dataAPI
266-
const filterValidation = this.validateAndNormalizeFilters(filters, resource);
267-
if (!filterValidation.ok) {
268-
throw new Error(filterValidation.error);
266+
if (filters) {
267+
const filterValidation = this.validateAndNormalizeFilters(filters, resource);
268+
if (!filterValidation.ok) {
269+
throw new Error(filterValidation.error);
270+
}
269271
}
270272
const { sql: where, values: filterValues } = this.whereClauseAndValues(filters);
271273
const q = `SELECT COUNT(*) FROM ${tableName} ${where}`;

adminforth/dataConnectors/postgres.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -302,9 +302,11 @@ class PostgresConnector extends AdminForthBaseConnector implements IAdminForthDa
302302
async getCount({ resource, filters }: { resource: AdminForthResource; filters: IAdminForthAndOrFilter; }): Promise<number> {
303303
const tableName = resource.table;
304304
// validate and normalize in case this method is called from dataAPI
305-
const filterValidation = this.validateAndNormalizeFilters(filters, resource);
306-
if (!filterValidation.ok) {
307-
throw new Error(filterValidation.error);
305+
if (filters) {
306+
const filterValidation = this.validateAndNormalizeFilters(filters, resource);
307+
if (!filterValidation.ok) {
308+
throw new Error(filterValidation.error);
309+
}
308310
}
309311
const { sql: where, values: filterValues } = this.whereClauseAndValues(resource, filters);
310312
const q = `SELECT COUNT(*) FROM "${tableName}" ${where}`;

0 commit comments

Comments
 (0)