mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-17 18:12:04 +00:00
fix(Postgres Node): Accommodate null values in query parameters for expressions (#13544)
This commit is contained in:
@@ -363,6 +363,26 @@ describe('Test PostgresV2, executeQuery operation', () => {
|
||||
);
|
||||
});
|
||||
|
||||
it('should execute queries with null key/value pairs', async () => {
|
||||
const nodeParameters: IDataObject = {
|
||||
operation: 'executeQuery',
|
||||
query: 'SELECT *\nFROM users\nWHERE username IN ($1, $2)',
|
||||
options: {
|
||||
queryReplacement: '"={{ betty }}, {{ null }}"',
|
||||
},
|
||||
};
|
||||
const nodeOptions = nodeParameters.options as IDataObject;
|
||||
|
||||
expect(async () => {
|
||||
await executeQuery.execute.call(
|
||||
createMockExecuteFunction(nodeParameters),
|
||||
runQueries,
|
||||
items,
|
||||
nodeOptions,
|
||||
);
|
||||
}).not.toThrow();
|
||||
});
|
||||
|
||||
it('should execute queries with multiple json key/value pairs', async () => {
|
||||
const nodeParameters: IDataObject = {
|
||||
operation: 'executeQuery',
|
||||
|
||||
@@ -17,6 +17,7 @@ import {
|
||||
isJSON,
|
||||
convertValuesToJsonWithPgp,
|
||||
hasJsonDataTypeInSchema,
|
||||
evaluateExpression,
|
||||
} from '../../v2/helpers/utils';
|
||||
|
||||
const node: INode = {
|
||||
@@ -39,6 +40,25 @@ describe('Test PostgresV2, isJSON', () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('Test PostgresV2, evaluateExpression', () => {
|
||||
it('should evaluate undefined to an empty string', () => {
|
||||
expect(evaluateExpression(undefined)).toEqual('');
|
||||
});
|
||||
it('should evaluate null to a string with value null', () => {
|
||||
expect(evaluateExpression(null)).toEqual('null');
|
||||
});
|
||||
it('should evaluate object to a string', () => {
|
||||
expect(evaluateExpression({ key: '' })).toEqual('{"key":""}');
|
||||
expect(evaluateExpression([])).toEqual('[]');
|
||||
expect(evaluateExpression([1, 2, 4])).toEqual('[1,2,4]');
|
||||
});
|
||||
it('should evaluate everything else to a string', () => {
|
||||
expect(evaluateExpression(1)).toEqual('1');
|
||||
expect(evaluateExpression('string')).toEqual('string');
|
||||
expect(evaluateExpression(true)).toEqual('true');
|
||||
});
|
||||
});
|
||||
|
||||
describe('Test PostgresV2, wrapData', () => {
|
||||
it('should wrap object in json', () => {
|
||||
const data = {
|
||||
|
||||
@@ -14,7 +14,12 @@ import type {
|
||||
QueriesRunner,
|
||||
QueryWithValues,
|
||||
} from '../../helpers/interfaces';
|
||||
import { isJSON, replaceEmptyStringsByNulls, stringToArray } from '../../helpers/utils';
|
||||
import {
|
||||
evaluateExpression,
|
||||
isJSON,
|
||||
replaceEmptyStringsByNulls,
|
||||
stringToArray,
|
||||
} from '../../helpers/utils';
|
||||
import { optionsCollection } from '../common.descriptions';
|
||||
|
||||
const properties: INodeProperties[] = [
|
||||
@@ -84,8 +89,9 @@ export async function execute(
|
||||
const resolvables = getResolvables(rawValues);
|
||||
if (resolvables.length) {
|
||||
for (const resolvable of resolvables) {
|
||||
const evaluatedExpression =
|
||||
this.evaluateExpression(`${resolvable}`, index)?.toString() ?? '';
|
||||
const evaluatedExpression = evaluateExpression(
|
||||
this.evaluateExpression(`${resolvable}`, index),
|
||||
);
|
||||
const evaluatedValues = isJSON(evaluatedExpression)
|
||||
? [evaluatedExpression]
|
||||
: stringToArray(evaluatedExpression);
|
||||
|
||||
@@ -30,6 +30,16 @@ export function isJSON(str: string) {
|
||||
}
|
||||
}
|
||||
|
||||
export function evaluateExpression(expression: NodeParameterValueType) {
|
||||
if (expression === undefined) {
|
||||
return '';
|
||||
} else if (expression === null) {
|
||||
return 'null';
|
||||
} else {
|
||||
return typeof expression === 'object' ? JSON.stringify(expression) : expression.toString();
|
||||
}
|
||||
}
|
||||
|
||||
export function stringToArray(str: NodeParameterValueType | undefined) {
|
||||
if (str === undefined) return [];
|
||||
return String(str)
|
||||
|
||||
Reference in New Issue
Block a user