kds_mysql_query_writer
Version:
A beginner-friendly node for writing SQL queries via input fields
77 lines (69 loc) • 2.78 kB
JavaScript
module.exports = function (RED) {
function QueryWriterNode(config) {
RED.nodes.createNode(this, config);
var node = this;
function parsePayloadString(str, msg) {
if (typeof str === "string") {
return str.replace(/\{msg\.payload\.(\w+)\}/g, function (_, key) {
return msg.payload[key] || ""; // payload 값이 없을 경우 빈 문자열 반환
});
}
return str; // 문자열이 아닐 경우 원래 값 반환
}
node.on("input", function (msg) {
var operation = config.operation; // 작업 유형
var table = parsePayloadString(config.table, msg); // 테이블명
var fieldsValues = Array.isArray(config.fields_values)
? config.fields_values.map((item) => ({
field: parsePayloadString(item.field, msg),
value: parsePayloadString(item.value, msg),
}))
: [];
var fields = fieldsValues.map((item) => item.field);
var values = fieldsValues.map((item) => {
const value = item.value.trim();
return isNaN(value) ? `'${value}'` : value; // 숫자면 그대로, 문자열이면 따옴표 추가
});
var condition = parsePayloadString(config.condition, msg);
var query = "";
switch (operation) {
case "SELECT":
const selectedFields = fields.length > 0 ? fields.join(", ") : "*";
query = `SELECT ${selectedFields} FROM ${table}`;
if (condition) query += ` WHERE ${condition}`;
break;
case "INSERT":
if (fields.length === values.length && fields.length > 0) {
query = `INSERT INTO ${table} (${fields.join(
", "
)}) VALUES (${values.join(", ")})`;
} else {
node.error("Field and value count do not match for INSERT.");
return;
}
break;
case "UPDATE":
if (fields.length === values.length && fields.length > 0) {
let fieldValuePairs = fields.map(
(field, index) => `${field}=${values[index]}`
);
query = `UPDATE ${table} SET ${fieldValuePairs.join(", ")}`;
if (condition) query += ` WHERE ${condition}`;
} else {
node.error("Field and value count do not match for UPDATE.");
return;
}
break;
case "DELETE":
query = `DELETE FROM ${table}`;
if (condition) query += ` WHERE ${condition}`;
break;
default:
node.error("Invalid operation type");
}
msg.topic = query;
node.send(msg);
});
}
RED.nodes.registerType("kds mysql query writer", QueryWriterNode);
};