68 lines
2.0 KiB
TypeScript
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;
|
|
}
|
|
}
|