stfrigerio_sqliteDB/src/codeblocks/processSqlBlock/helpers/validateTable.ts
2025-02-04 17:20:26 +01:00

60 lines
No EOL
1.9 KiB
TypeScript

import { SqlParams, ValidationError } from "../types";
export async function validateTable(db: any, params: SqlParams) {
// Get table info
const tableInfo = db.exec(`PRAGMA table_info("${params.table}")`);
if (!tableInfo || tableInfo.length === 0) {
return {
message: `Table "${params.table}" does not exist.`
};
}
const availableColumns = tableInfo[0].values.map((row: any) => row[1] as string);
// Validate columns if specified
if (params.columns) {
const requestedColumns = params.columns.split(',').map(c => c.trim());
for (const col of requestedColumns) {
if (!availableColumns.includes(col)) {
return {
message: `Column "${col}" does not exist in table "${params.table}".`,
availableColumns
};
}
}
}
// Validate dateColumn if specified
if (params.dateColumn && !availableColumns.includes(params.dateColumn)) {
return {
message: `Date column "${params.dateColumn}" does not exist in table "${params.table}".`,
availableColumns
};
}
// Validate filterColumn if specified
if (params.filterColumn) {
const filterColumns = Array.isArray(params.filterColumn)
? params.filterColumn
: [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
if (params.orderBy && !availableColumns.includes(params.orderBy)) {
return {
message: `Order by column "${params.orderBy}" does not exist in table "${params.table}".`,
availableColumns
};
}
return null;
}