diff --git a/packages/nodes-base/nodes/MySql/MySql.node.ts b/packages/nodes-base/nodes/MySql/MySql.node.ts index bb82d3e4caf04..aad3df9bdce8a 100644 --- a/packages/nodes-base/nodes/MySql/MySql.node.ts +++ b/packages/nodes-base/nodes/MySql/MySql.node.ts @@ -11,7 +11,7 @@ export class MySql extends VersionedNodeType { name: 'mySql', icon: 'file:mysql.svg', group: ['input'], - defaultVersion: 2.2, + defaultVersion: 2.3, description: 'Get, add and update data in MySQL', parameterPane: 'wide', }; @@ -21,6 +21,7 @@ export class MySql extends VersionedNodeType { 2: new MySqlV2(baseDescription), 2.1: new MySqlV2(baseDescription), 2.2: new MySqlV2(baseDescription), + 2.3: new MySqlV2(baseDescription), }; super(nodeVersions, baseDescription); diff --git a/packages/nodes-base/nodes/MySql/test/v2/operations.test.ts b/packages/nodes-base/nodes/MySql/test/v2/operations.test.ts index 599ff8f9ef4b7..359c21c465c2f 100644 --- a/packages/nodes-base/nodes/MySql/test/v2/operations.test.ts +++ b/packages/nodes-base/nodes/MySql/test/v2/operations.test.ts @@ -254,6 +254,47 @@ describe('Test MySql V2, operations', () => { ); expect(connectionQuerySpy).toBeCalledWith('select * from `test_table`'); }); + it('executeQuery, should parse numbers', async () => { + const nodeParameters: IDataObject = { + operation: 'executeQuery', + query: 'SELECT * FROM users LIMIT $1, $2', + options: { + queryBatching: 'independently', + queryReplacement: '2, 5', + nodeVersion: 2.3, + }, + }; + + const nodeOptions = nodeParameters.options as IDataObject; + + const fakeConnectionCopy = { ...fakeConnection }; + + fakeConnectionCopy.query = jest.fn(async (query?: string) => { + return [{ query }]; + }); + const pool = createFakePool(fakeConnectionCopy); + + const connectionQuerySpy = jest.spyOn(fakeConnectionCopy, 'query'); + + const fakeExecuteFunction = createMockExecuteFunction(nodeParameters, mySqlMockNode); + + const runQueries: QueryRunner = configureQueryRunner.call( + fakeExecuteFunction, + nodeOptions, + pool, + ); + + const result = await executeQuery.execute.call( + fakeExecuteFunction, + emptyInputItems, + runQueries, + nodeOptions, + ); + + expect(result).toBeDefined(); + + expect(connectionQuerySpy).toBeCalledWith('SELECT * FROM users LIMIT 2, 5'); + }); it('select, should call runQueries with', async () => { const nodeParameters: IDataObject = { diff --git a/packages/nodes-base/nodes/MySql/v2/actions/database/executeQuery.operation.ts b/packages/nodes-base/nodes/MySql/v2/actions/database/executeQuery.operation.ts index ee173f45aa7ff..9af1b9eaa3872 100644 --- a/packages/nodes-base/nodes/MySql/v2/actions/database/executeQuery.operation.ts +++ b/packages/nodes-base/nodes/MySql/v2/actions/database/executeQuery.operation.ts @@ -81,6 +81,13 @@ export async function execute( const preparedQuery = prepareQueryAndReplacements(rawQuery, values); + if ((nodeOptions.nodeVersion as number) >= 2.3) { + const parsedNumbers = preparedQuery.values.map((value) => { + return Number(value) ? Number(value) : value; + }); + preparedQuery.values = parsedNumbers; + } + queries.push(preparedQuery); } diff --git a/packages/nodes-base/nodes/MySql/v2/actions/versionDescription.ts b/packages/nodes-base/nodes/MySql/v2/actions/versionDescription.ts index 366e8fcaa8c8f..c1802bd063663 100644 --- a/packages/nodes-base/nodes/MySql/v2/actions/versionDescription.ts +++ b/packages/nodes-base/nodes/MySql/v2/actions/versionDescription.ts @@ -8,7 +8,7 @@ export const versionDescription: INodeTypeDescription = { name: 'mySql', icon: 'file:mysql.svg', group: ['input'], - version: [2, 2.1, 2.2], + version: [2, 2.1, 2.2, 2.3], subtitle: '={{ $parameter["operation"] }}', description: 'Get, add and update data in MySQL', defaults: {