76 lines
2.3 KiB
TypeScript
76 lines
2.3 KiB
TypeScript
import { SQLInsertGenParams, SQLInsertGenReturn } from "../../../types";
|
|
|
|
/**
|
|
* # SQL Insert Generator
|
|
*/
|
|
export default function sqlInsertGenerator({
|
|
tableName,
|
|
data,
|
|
dbFullName,
|
|
}: SQLInsertGenParams): SQLInsertGenReturn | undefined {
|
|
const finalDbName = dbFullName ? `${dbFullName}.` : "";
|
|
|
|
try {
|
|
if (Array.isArray(data) && data?.[0]) {
|
|
let insertKeys: string[] = [];
|
|
|
|
data.forEach((dt) => {
|
|
const kys = Object.keys(dt);
|
|
kys.forEach((ky) => {
|
|
if (!insertKeys.includes(ky)) {
|
|
insertKeys.push(ky);
|
|
}
|
|
});
|
|
});
|
|
|
|
let queryBatches: string[] = [];
|
|
let queryValues: string[] = [];
|
|
|
|
data.forEach((item) => {
|
|
queryBatches.push(
|
|
`(${insertKeys
|
|
.map((ky) => {
|
|
const value = item[ky];
|
|
|
|
const finalValue =
|
|
typeof value == "string" ||
|
|
typeof value == "number"
|
|
? String(value)
|
|
: value
|
|
? String(value().value)
|
|
: null;
|
|
|
|
if (!finalValue) {
|
|
return undefined;
|
|
}
|
|
|
|
queryValues.push(finalValue);
|
|
|
|
const placeholder =
|
|
typeof value == "function"
|
|
? value().placeholder
|
|
: "?";
|
|
|
|
return placeholder;
|
|
})
|
|
.filter((k) => Boolean(k))
|
|
.join(",")})`,
|
|
);
|
|
});
|
|
let query = `INSERT INTO ${finalDbName}${tableName} (${insertKeys.join(
|
|
",",
|
|
)}) VALUES ${queryBatches.join(",")}`;
|
|
|
|
return {
|
|
query: query,
|
|
values: queryValues,
|
|
};
|
|
} else {
|
|
return undefined;
|
|
}
|
|
} catch (/** @type {any} */ error: any) {
|
|
console.log(`SQL insert gen ERROR: ${error.message}`);
|
|
return undefined;
|
|
}
|
|
}
|