fix(MySQL Node): Query to statements splitting fix (#9207)

This commit is contained in:
Michael Kret
2024-04-25 16:30:59 +03:00
committed by GitHub
parent 093dcefafc
commit dc844528f4
4 changed files with 61 additions and 8 deletions

View File

@@ -190,6 +190,14 @@ export function prepareOutput(
return returnData;
}
const END_OF_STATEMENT = /;(?=(?:[^'\\]|'[^']*?'|\\[\s\S])*?$)/g;
export const splitQueryToStatements = (query: string, filterOutEmpty = true) => {
const statements = query
.replace(/\n/g, '')
.split(END_OF_STATEMENT)
.map((statement) => statement.trim());
return filterOutEmpty ? statements.filter((statement) => statement !== '') : statements;
};
export function configureQueryRunner(
this: IExecuteFunctions,
@@ -225,10 +233,15 @@ export function configureQueryRunner(
if (!response) return [];
const statements = singleQuery
.replace(/\n/g, '')
.split(';')
.filter((statement) => statement !== '');
let statements;
if ((options?.nodeVersion as number) <= 2.3) {
statements = singleQuery
.replace(/\n/g, '')
.split(';')
.filter((statement) => statement !== '');
} else {
statements = splitQueryToStatements(singleQuery);
}
if (Array.isArray(response)) {
if (statements.length === 1) response = [response];
@@ -261,7 +274,13 @@ export function configureQueryRunner(
try {
const { query, values } = queryWithValues;
formatedQuery = connection.format(query, values);
const statements = formatedQuery.split(';').map((q) => q.trim());
let statements;
if ((options?.nodeVersion as number) <= 2.3) {
statements = formatedQuery.split(';').map((q) => q.trim());
} else {
statements = splitQueryToStatements(formatedQuery, false);
}
const responses: IDataObject[] = [];
for (const statement of statements) {
@@ -300,7 +319,13 @@ export function configureQueryRunner(
try {
const { query, values } = queryWithValues;
formatedQuery = connection.format(query, values);
const statements = formatedQuery.split(';').map((q) => q.trim());
let statements;
if ((options?.nodeVersion as number) <= 2.3) {
statements = formatedQuery.split(';').map((q) => q.trim());
} else {
statements = splitQueryToStatements(formatedQuery, false);
}
const responses: IDataObject[] = [];
for (const statement of statements) {