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; } }