fix(Microsoft SQL Node): Correctly resolve expressions with dollar signs (#18411)

Co-authored-by: Your Name <you@example.com>
This commit is contained in:
Elias Meire
2025-08-21 05:43:59 +02:00
committed by GitHub
parent 604b936d8f
commit f49f2cb59e
2 changed files with 27 additions and 2 deletions

View File

@@ -276,7 +276,7 @@ export class MicrosoftSql implements INodeType {
for (const resolvable of getResolvables(rawQuery)) {
rawQuery = rawQuery.replace(
resolvable,
this.evaluateExpression(resolvable, i) as string,
() => this.evaluateExpression(resolvable, i) as string,
);
}
const results = await executeSqlQueryAndPrepareResults(pool, rawQuery, i);

View File

@@ -22,7 +22,7 @@ function getMockedExecuteFunctions(overrides: Partial<IExecuteFunctions> = {}) {
requestTimeout: 10000,
}),
getInputData: jest.fn().mockReturnValue([{ json: {} }]),
getNode: jest.fn().mockReturnValue({ typeVersion: 1 }),
getNode: jest.fn().mockReturnValue({ typeVersion: 1.1 }),
continueOnFail: jest.fn().mockReturnValue(true),
helpers: {
constructExecutionMetaData,
@@ -80,4 +80,29 @@ describe('MicrosoftSql Node', () => {
expect(mockRequest.query).toHaveBeenCalledWith('SELECT 1 AS value');
expect(mockPool.close).toHaveBeenCalled();
});
test('correctly resolves expressions (does not remove $ characters)', async () => {
const queryResult = { recordsets: [[{ value: 1 }]] };
const mockRequest = { query: jest.fn().mockResolvedValue(queryResult) };
const mockPool = mock<mssql.ConnectionPool>({
connect: jest.fn().mockResolvedValue(undefined),
close: jest.fn(),
request: jest.fn().mockReturnValue(mockRequest),
});
mockedConnectionPool.mockReturnValue(mockPool);
const node = new MicrosoftSql();
const context = getMockedExecuteFunctions({
getNodeParameter: jest
.fn()
.mockReturnValueOnce('executeQuery')
.mockReturnValueOnce("SELECT '{{ '$$$' }}'"),
});
context.evaluateExpression.mockReturnValue('$$$');
await node.execute.call(context);
expect(mockRequest.query).toHaveBeenCalledWith("SELECT '$$$'");
});
});