n8n-nodes-base
Version:
Base nodes of n8n
68 lines • 2.92 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.description = void 0;
exports.execute = execute;
const n8n_workflow_1 = require("n8n-workflow");
const utilities_1 = require("../../../../../utils/utilities");
const utils_1 = require("../../helpers/utils");
const common_descriptions_1 = require("../common.descriptions");
const properties = [
{
displayName: 'Query',
name: 'query',
type: 'string',
default: '',
placeholder: 'e.g. SELECT id, name FROM product WHERE id < 40',
required: true,
description: "The SQL query to execute. You can use n8n expressions and $1, $2, $3, etc to refer to the 'Query Parameters' set in options below.",
noDataExpression: true,
typeOptions: {
editor: 'sqlEditor',
sqlDialect: 'MySQL',
},
hint: 'Consider using query parameters to prevent SQL injection attacks. Add them in the options below',
},
common_descriptions_1.optionsCollection,
];
const displayOptions = {
show: {
resource: ['database'],
operation: ['executeQuery'],
},
};
exports.description = (0, utilities_1.updateDisplayOptions)(displayOptions, properties);
async function execute(inputItems, runQueries, nodeOptions) {
let returnData = [];
const items = (0, utils_1.replaceEmptyStringsByNulls)(inputItems, nodeOptions.replaceEmptyStrings);
const queries = [];
for (let i = 0; i < items.length; i++) {
let rawQuery = this.getNodeParameter('query', i);
for (const resolvable of (0, utilities_1.getResolvables)(rawQuery)) {
rawQuery = rawQuery.replace(resolvable, this.evaluateExpression(resolvable, i));
}
const options = this.getNodeParameter('options', i, {});
const nodeVersion = Number(nodeOptions.nodeVersion);
let values;
let queryReplacement = options.queryReplacement || [];
if (typeof queryReplacement === 'string') {
queryReplacement = queryReplacement.split(',').map((entry) => entry.trim());
}
if (Array.isArray(queryReplacement)) {
values = queryReplacement;
}
else {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Query Replacement must be a string of comma-separated values, or an array of values', { itemIndex: i });
}
const preparedQuery = (0, utils_1.prepareQueryAndReplacements)(rawQuery, nodeVersion, values);
if (nodeOptions.nodeVersion >= 2.3) {
const parsedNumbers = preparedQuery.values.map((value) => {
return Number(value) ? Number(value) : value;
});
preparedQuery.values = parsedNumbers;
}
queries.push(preparedQuery);
}
returnData = await runQueries(queries);
return returnData;
}
//# sourceMappingURL=executeQuery.operation.js.map