import { quoteIdentifier } from "./sql-identifier"; import sqlValuePlaceholder from "./sql-value-placeholder"; import grabTableFields from "./grab-table-fields"; /** * # SQL Insert Generator */ export default function sqlInsertGenerator({ tableName, data, dbFullName, }) { const finalDbName = dbFullName ? `${quoteIdentifier(dbFullName)}.` : ""; try { if (Array.isArray(data) && data?.[0]) { let insertKeys = []; data.forEach((dt) => { const kys = Object.keys(dt); kys.forEach((ky) => { if (!insertKeys.includes(ky)) { insertKeys.push(ky); } }); }); const fieldsMap = new Map(grabTableFields(tableName).map((f) => [f.fieldName, f])); let queryBatches = []; let queryValues = []; data.forEach((item) => { queryBatches.push(`(${insertKeys .map((ky) => { const { placeholder, value } = sqlValuePlaceholder({ value: item[ky], field: fieldsMap.get(ky), }); queryValues.push(value); return placeholder; }) .join(",")})`); }); const insertColumns = insertKeys.map(quoteIdentifier).join(","); let query = `INSERT INTO ${finalDbName}${quoteIdentifier(tableName)} (${insertColumns}) VALUES ${queryBatches.join(",")}`; return { query: query, values: queryValues, }; } else { return undefined; } } catch ( /** @type {any} */error) { console.log(`SQL insert gen ERROR: ${error.message}`); return undefined; } }