mirror of
https://github.com/stfrigerio/sqliteDB.git
synced 2026-07-22 05:38:02 +00:00
multiple filters
This commit is contained in:
parent
c8539fadaf
commit
387a1bb751
5 changed files with 51 additions and 34 deletions
|
|
@ -4,8 +4,6 @@ export function buildSqlQuery(params: SqlParams): { query: string; queryParams:
|
||||||
const {
|
const {
|
||||||
table,
|
table,
|
||||||
columns,
|
columns,
|
||||||
keyColumn,
|
|
||||||
value,
|
|
||||||
dateColumn,
|
dateColumn,
|
||||||
startDate,
|
startDate,
|
||||||
endDate,
|
endDate,
|
||||||
|
|
@ -23,10 +21,19 @@ export function buildSqlQuery(params: SqlParams): { query: string; queryParams:
|
||||||
const queryParams: any[] = [];
|
const queryParams: any[] = [];
|
||||||
const conditions: string[] = [];
|
const conditions: string[] = [];
|
||||||
|
|
||||||
// Add key-value condition if provided
|
// Handle multiple filters
|
||||||
if (keyColumn && value !== undefined) {
|
if (filterColumn && filterValue) {
|
||||||
conditions.push(`"${keyColumn}" = ?`);
|
const filterColumns = Array.isArray(filterColumn) ? filterColumn : [filterColumn];
|
||||||
queryParams.push(value);
|
const filterValues = Array.isArray(filterValue) ? filterValue : [filterValue];
|
||||||
|
|
||||||
|
if (filterColumns.length !== filterValues.length) {
|
||||||
|
throw new Error('Number of filter columns must match number of filter values');
|
||||||
|
}
|
||||||
|
|
||||||
|
filterColumns.forEach((col, index) => {
|
||||||
|
conditions.push(`"${col}" = ?`);
|
||||||
|
queryParams.push(filterValues[index]);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add date range conditions if provided
|
// Add date range conditions if provided
|
||||||
|
|
@ -40,13 +47,7 @@ export function buildSqlQuery(params: SqlParams): { query: string; queryParams:
|
||||||
queryParams.push(endDate);
|
queryParams.push(endDate);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add filter condition if provided
|
|
||||||
if (filterColumn && filterValue !== undefined) {
|
|
||||||
conditions.push(`"${filterColumn}" = ?`);
|
|
||||||
queryParams.push(filterValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Build the query
|
// Build the query
|
||||||
let query = `SELECT ${selectCols} FROM "${table}"`;
|
let query = `SELECT ${selectCols} FROM "${table}"`;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,10 @@ export function parseSqlParams(source: string): SqlParams | null {
|
||||||
case 'columns':
|
case 'columns':
|
||||||
params.columns = val.split(',').map(c => c.trim()).join(', ');
|
params.columns = val.split(',').map(c => c.trim()).join(', ');
|
||||||
break;
|
break;
|
||||||
|
case 'filterColumn':
|
||||||
|
case 'filterValue':
|
||||||
|
params[key] = val.split(',').map(v => v.trim());
|
||||||
|
break;
|
||||||
case 'limit':
|
case 'limit':
|
||||||
const limitNum = parseInt(val);
|
const limitNum = parseInt(val);
|
||||||
if (!isNaN(limitNum)) params.limit = limitNum;
|
if (!isNaN(limitNum)) params.limit = limitNum;
|
||||||
|
|
@ -27,15 +31,19 @@ export function parseSqlParams(source: string): SqlParams | null {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'table':
|
case 'table':
|
||||||
case 'keyColumn':
|
params.table = val;
|
||||||
case 'value':
|
break;
|
||||||
case 'dateColumn':
|
case 'dateColumn':
|
||||||
|
params.dateColumn = val;
|
||||||
|
break;
|
||||||
case 'startDate':
|
case 'startDate':
|
||||||
|
params.startDate = val;
|
||||||
|
break;
|
||||||
case 'endDate':
|
case 'endDate':
|
||||||
case 'filterColumn':
|
params.endDate = val;
|
||||||
case 'filterValue':
|
break;
|
||||||
case 'orderBy':
|
case 'orderBy':
|
||||||
params[key] = val;
|
params.orderBy = val;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -33,11 +33,19 @@ export async function validateTable(db: any, params: SqlParams) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Validate filterColumn if specified
|
// Validate filterColumn if specified
|
||||||
if (params.filterColumn && !availableColumns.includes(params.filterColumn)) {
|
if (params.filterColumn) {
|
||||||
return {
|
const filterColumns = Array.isArray(params.filterColumn)
|
||||||
message: `Filter column "${params.filterColumn}" does not exist in table "${params.table}".`,
|
? params.filterColumn
|
||||||
availableColumns
|
: [params.filterColumn];
|
||||||
};
|
|
||||||
|
for (const col of filterColumns) {
|
||||||
|
if (!availableColumns.includes(col)) {
|
||||||
|
return {
|
||||||
|
message: `Filter column "${col}" does not exist in table "${params.table}".`,
|
||||||
|
availableColumns
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Validate orderBy if specified
|
// Validate orderBy if specified
|
||||||
|
|
|
||||||
|
|
@ -16,15 +16,15 @@ export async function processSqlBlock(dbService: DBService, source: string, el:
|
||||||
el.createEl("p", { text: "Example usage:" });
|
el.createEl("p", { text: "Example usage:" });
|
||||||
el.createEl("pre", {
|
el.createEl("pre", {
|
||||||
text: `table: tasks
|
text: `table: tasks
|
||||||
columns: title, status, dueDate
|
columns: title, status
|
||||||
dateColumn: dueDate
|
filterColumn: status, priority
|
||||||
startDate: 2024-01-01
|
filterValue: active, high
|
||||||
endDate: 2024-12-31
|
dateColumn: dueDate
|
||||||
filterColumn: status
|
startDate: 2024-01-01
|
||||||
filterValue: active
|
endDate: 2024-12-31
|
||||||
limit: 10
|
limit: 10
|
||||||
orderBy: dueDate
|
orderBy: dueDate
|
||||||
orderDirection: asc`
|
orderDirection: asc`
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,8 +6,8 @@ export interface SqlParams {
|
||||||
dateColumn?: string;
|
dateColumn?: string;
|
||||||
startDate?: string;
|
startDate?: string;
|
||||||
endDate?: string;
|
endDate?: string;
|
||||||
filterColumn?: string;
|
filterColumn?: string | string[];
|
||||||
filterValue?: string;
|
filterValue?: string | string[];
|
||||||
orderBy?: string;
|
orderBy?: string;
|
||||||
orderDirection?: string;
|
orderDirection?: string;
|
||||||
limit?: number;
|
limit?: number;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue