datasquirel/package-shared/functions/dsql/sql/sql-delete-generator.ts
Benjamin Toby 7e8bb37c09 Updates
2025-07-05 14:59:30 +01:00

68 lines
2.0 KiB
TypeScript

import { SQLDeleteGeneratorParams } from "../../../types";
import sqlEqualityParser from "../../../utils/sql-equality-parser";
interface SQLDeleteGenReturn {
query: string;
values: string[];
}
/**
* # SQL Delete Generator
*/
export default function sqlDeleteGenerator({
tableName,
deleteKeyValues,
dbFullName,
data,
}: SQLDeleteGeneratorParams): SQLDeleteGenReturn | undefined {
const finalDbName = dbFullName ? `${dbFullName}.` : "";
try {
let queryStr = `DELETE FROM ${finalDbName}${tableName}`;
let deleteBatch: string[] = [];
let queryArr: string[] = [];
if (data) {
Object.keys(data).forEach((ky) => {
let value = data[ky] as string | number | null | undefined;
const parsedValue =
typeof value == "number" ? String(value) : value;
if (!parsedValue) return;
if (parsedValue.match(/%/)) {
deleteBatch.push(`${ky} LIKE ?`);
queryArr.push(parsedValue);
} else {
deleteBatch.push(`${ky}=?`);
queryArr.push(parsedValue);
}
});
} else if (deleteKeyValues) {
deleteKeyValues.forEach((ky) => {
let value = ky.value as string | number | null | undefined;
const parsedValue =
typeof value == "number" ? String(value) : value;
if (!parsedValue) return;
const operator = sqlEqualityParser(ky.operator || "EQUAL");
deleteBatch.push(`${ky.key} ${operator} ?`);
queryArr.push(parsedValue);
});
}
queryStr += ` WHERE ${deleteBatch.join(" AND ")}`;
return {
query: queryStr,
values: queryArr,
};
} catch (error: any) {
console.log(`SQL delete gen ERROR: ${error.message}`);
return undefined;
}
}