UNPKG

kds_mysql_query_writer

Version:

A beginner-friendly node for writing SQL queries via input fields

77 lines (69 loc) 2.78 kB
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); };