@dbnx/mysql
Version:
A powerful and enhanced ORM library for MySQL, offering query execution, model creation, and full relational management.
45 lines (44 loc) • 1.44 kB
JavaScript
import { escape } from "../utils/index.js";
export function insert(table, values, { onDuplicateUpdateFields = [], uniqueColumn }) {
if (!values) {
throw new Error("❌ Insert data array is empty");
}
let col = "";
let val = "";
const sanitizedValues = (values) => Object.values(values)
.map((value) => {
if (value === "CURRENT_TIMESTAMP") {
return value;
}
if (value == null || value == undefined) {
return "NULL";
}
if (typeof value === "string") {
return escape(value);
}
return value;
})
?.join(", ");
if (Array.isArray(values)) {
col = `(${Object.keys(values[0]).join(", ")})`;
val = values.map((row) => `(${sanitizedValues(row)})`).join(", ");
}
else {
col = `(${Object.keys(values).join(", ")})`;
val = `(${sanitizedValues(values)})`;
}
let sql = "";
if (uniqueColumn) {
sql = `INSERT IGNORE INTO ${table} ${col} VALUES ${val};`;
}
else if (onDuplicateUpdateFields.length > 0) {
const updateFields = onDuplicateUpdateFields
.map((field) => `${field} = VALUES(${field})`)
.join(", ");
sql = `INSERT INTO ${table} ${col} VALUES ${val} ON DUPLICATE KEY UPDATE ${updateFields};`;
}
else {
sql = `INSERT INTO ${table} ${col} VALUES ${val};`;
}
return sql;
}