From b8458a53f66b79903f0fdb168f6febdefb36d13a Mon Sep 17 00:00:00 2001 From: Jan Oberhauser Date: Fri, 23 Jun 2023 12:07:52 +0200 Subject: [PATCH] feat(core)!: Change data processing for multi-input-nodes (#4238) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: कारतोफ्फेलस्क्रिप्ट™ --- packages/core/src/WorkflowExecute.ts | 372 ++- packages/core/test/WorkflowExecute.test.ts | 1 - packages/core/test/helpers/constants.ts | 1344 ++++++++- .../CompareDatasets/CompareDatasets.node.ts | 4 +- ...mpareDatasets.forceInputNodeExecution.json | 496 ++++ packages/nodes-base/nodes/Merge/Merge.node.ts | 1 + ...orkflow.mixed.forceInputNodeExecution.json | 2440 +++++++++++++++++ ...low.mixed.not.forceInputNodeExecution.json | 2376 ++++++++++++++++ .../nodes-base/nodes/Merge/v1/MergeV1.node.ts | 1 + .../nodes-base/nodes/Merge/v2/MergeV2.node.ts | 32 +- packages/workflow/src/Expression.ts | 4 +- packages/workflow/src/Interfaces.ts | 2 + packages/workflow/src/Workflow.ts | 26 +- 13 files changed, 7032 insertions(+), 67 deletions(-) create mode 100644 packages/nodes-base/nodes/CompareDatasets/test/node/workflow.compareDatasets.forceInputNodeExecution.json create mode 100644 packages/nodes-base/nodes/Merge/test/node/workflow.mixed.forceInputNodeExecution.json create mode 100644 packages/nodes-base/nodes/Merge/test/node/workflow.mixed.not.forceInputNodeExecution.json diff --git a/packages/core/src/WorkflowExecute.ts b/packages/core/src/WorkflowExecute.ts index dba3101684..597680a3e7 100644 --- a/packages/core/src/WorkflowExecute.ts +++ b/packages/core/src/WorkflowExecute.ts @@ -143,6 +143,26 @@ export class WorkflowExecute { return this.processRunExecutionData(workflow); } + forceInputNodeExecution(workflow: Workflow, node: INode): boolean { + const nodeType = workflow.nodeTypes.getByNameAndVersion(node.type, node.typeVersion); + + // Check if the incoming nodes should be forced to execute + let forceInputNodeExecution = nodeType.description.forceInputNodeExecution; + if (forceInputNodeExecution !== undefined) { + if (typeof forceInputNodeExecution === 'string') { + forceInputNodeExecution = !!workflow.expression.getSimpleParameterValue( + node, + forceInputNodeExecution, + this.mode, + this.additionalData.timezone, + { $version: node.typeVersion }, + ); + } + return forceInputNodeExecution; + } + return false; + } + /** * Executes the given workflow but only * @@ -329,6 +349,27 @@ export class WorkflowExecute { return true; } + prepareWaitingToExecution(nodeName: string, numberOfConnections: number, runIndex: number) { + if (!this.runExecutionData.executionData!.waitingExecutionSource) { + this.runExecutionData.executionData!.waitingExecutionSource = {}; + } + + this.runExecutionData.executionData!.waitingExecution[nodeName][runIndex] = { + main: [], + }; + this.runExecutionData.executionData!.waitingExecutionSource[nodeName][runIndex] = { + main: [], + }; + + for (let i = 0; i < numberOfConnections; i++) { + this.runExecutionData.executionData!.waitingExecution[nodeName][runIndex].main.push(null); + + this.runExecutionData.executionData!.waitingExecutionSource[nodeName][runIndex].main.push( + null, + ); + } + } + addNodeToBeExecuted( workflow: Workflow, connectionData: IConnection, @@ -338,6 +379,7 @@ export class WorkflowExecute { runIndex: number, ): void { let stillDataMissing = false; + let waitingNodeIndex: number | undefined; // Check if node has multiple inputs as then we have to wait for all input data // to be present before we can add it to the node-execution-stack @@ -358,47 +400,64 @@ export class WorkflowExecute { this.runExecutionData.executionData!.waitingExecutionSource[connectionData.node] = {}; nodeWasWaiting = false; } - if ( - this.runExecutionData.executionData!.waitingExecution[connectionData.node][runIndex] === - undefined - ) { - // Node does not have data for runIndex yet so create also empty one and init it - this.runExecutionData.executionData!.waitingExecution[connectionData.node][runIndex] = { - main: [], - }; - this.runExecutionData.executionData!.waitingExecutionSource[connectionData.node][runIndex] = - { - main: [], - }; - for ( - let i = 0; - i < workflow.connectionsByDestinationNode[connectionData.node].main.length; - i++ - ) { - this.runExecutionData.executionData!.waitingExecution[connectionData.node][ - runIndex - ].main.push(null); - this.runExecutionData.executionData!.waitingExecutionSource[connectionData.node][ - runIndex - ].main.push(null); + // Figure out if the node is already waiting with partial data to which to add the + // data to or if a new entry has to get created + let createNewWaitingEntry = true; + + if ( + Object.keys(this.runExecutionData.executionData!.waitingExecution[connectionData.node]) + .length > 0 + ) { + // Check if there is already data for the input on all of the waiting nodes + for (const index of Object.keys( + this.runExecutionData.executionData!.waitingExecution[connectionData.node], + )) { + if ( + !this.runExecutionData.executionData!.waitingExecution[connectionData.node][ + parseInt(index) + ].main[connectionData.index] + ) { + // Data for the input is missing so we can add it to the existing entry + createNewWaitingEntry = false; + waitingNodeIndex = parseInt(index); + break; + } } } + if (waitingNodeIndex === undefined) { + waitingNodeIndex = Object.values( + this.runExecutionData.executionData!.waitingExecution[connectionData.node], + ).length; + } + + if (createNewWaitingEntry) { + // There is currently no node waiting that does not already have data for + // the given input, so create a new entry + + this.prepareWaitingToExecution( + connectionData.node, + workflow.connectionsByDestinationNode[connectionData.node].main.length, + waitingNodeIndex, + ); + } + // Add the new data if (nodeSuccessData === null) { - this.runExecutionData.executionData!.waitingExecution[connectionData.node][runIndex].main[ - connectionData.index - ] = null; + this.runExecutionData.executionData!.waitingExecution[connectionData.node][ + waitingNodeIndex + ].main[connectionData.index] = null; this.runExecutionData.executionData!.waitingExecutionSource[connectionData.node][ - runIndex + waitingNodeIndex ].main[connectionData.index] = null; } else { - this.runExecutionData.executionData!.waitingExecution[connectionData.node][runIndex].main[ - connectionData.index - ] = nodeSuccessData[outputIndex]; + this.runExecutionData.executionData!.waitingExecution[connectionData.node][ + waitingNodeIndex + ].main[connectionData.index] = nodeSuccessData[outputIndex]; + this.runExecutionData.executionData!.waitingExecutionSource[connectionData.node][ - runIndex + waitingNodeIndex ].main[connectionData.index] = { previousNode: parentNodeName, previousNodeOutput: outputIndex || undefined, @@ -412,14 +471,14 @@ export class WorkflowExecute { for ( let i = 0; i < - this.runExecutionData.executionData!.waitingExecution[connectionData.node][runIndex].main - .length; + this.runExecutionData.executionData!.waitingExecution[connectionData.node][waitingNodeIndex] + .main.length; i++ ) { thisExecutionData = - this.runExecutionData.executionData!.waitingExecution[connectionData.node][runIndex].main[ - i - ]; + this.runExecutionData.executionData!.waitingExecution[connectionData.node][ + waitingNodeIndex + ].main[i]; if (thisExecutionData === null) { allDataFound = false; break; @@ -433,11 +492,11 @@ export class WorkflowExecute { const executionStackItem = { node: workflow.nodes[connectionData.node], data: this.runExecutionData.executionData!.waitingExecution[connectionData.node][ - runIndex + waitingNodeIndex ], source: this.runExecutionData.executionData!.waitingExecutionSource[connectionData.node][ - runIndex + waitingNodeIndex ], } as IExecuteData; @@ -447,16 +506,18 @@ export class WorkflowExecute { ) { executionStackItem.source = this.runExecutionData.executionData!.waitingExecutionSource[connectionData.node][ - runIndex + waitingNodeIndex ]; } this.runExecutionData.executionData!.nodeExecutionStack.unshift(executionStackItem); // Remove the data from waiting - delete this.runExecutionData.executionData!.waitingExecution[connectionData.node][runIndex]; + delete this.runExecutionData.executionData!.waitingExecution[connectionData.node][ + waitingNodeIndex + ]; delete this.runExecutionData.executionData!.waitingExecutionSource[connectionData.node][ - runIndex + waitingNodeIndex ]; if ( @@ -492,6 +553,10 @@ export class WorkflowExecute { // checked. So we have to go through all the inputs and check if they // are already on the list to be processed. // If that is not the case add it. + + const node = workflow.getNode(connectionData.node); + const forceInputNodeExecution = this.forceInputNodeExecution(workflow, node!); + for ( let inputIndex = 0; inputIndex < workflow.connectionsByDestinationNode[connectionData.node].main.length; @@ -540,6 +605,12 @@ export class WorkflowExecute { continue; } + if (!forceInputNodeExecution) { + // Do not automatically follow all incoming nodes and force them + // to execute + continue; + } + // Check if any of the parent nodes does not have any inputs. That // would mean that it has to get added to the list of nodes to process. const parentNodes = workflow.getParentNodes(inputData.node, 'main', -1); @@ -650,14 +721,26 @@ export class WorkflowExecute { } if (stillDataMissing) { + waitingNodeIndex = waitingNodeIndex!; + // Additional data is needed to run node so add it to waiting - if ( - !this.runExecutionData.executionData!.waitingExecution.hasOwnProperty(connectionData.node) - ) { - this.runExecutionData.executionData!.waitingExecution[connectionData.node] = {}; - } - this.runExecutionData.executionData!.waitingExecution[connectionData.node][runIndex] = { - main: connectionDataArray, + this.prepareWaitingToExecution( + connectionData.node, + workflow.connectionsByDestinationNode[connectionData.node].main.length, + waitingNodeIndex, + ); + + this.runExecutionData.executionData!.waitingExecution[connectionData.node][waitingNodeIndex] = + { + main: connectionDataArray, + }; + + this.runExecutionData.executionData!.waitingExecutionSource![connectionData.node][ + waitingNodeIndex + ].main[connectionData.index] = { + previousNode: parentNodeName, + previousNodeOutput: outputIndex || undefined, + previousNodeRun: runIndex || undefined, }; } else { // All data is there so add it directly to stack @@ -854,6 +937,8 @@ export class WorkflowExecute { continue; } + const node = workflow.getNode(executionNode.name); + // Check if all the data which is needed to run the node is available if (workflow.connectionsByDestinationNode.hasOwnProperty(executionNode.name)) { // Check if the node has incoming connections @@ -886,17 +971,20 @@ export class WorkflowExecute { continue executionLoop; } - // Check if it has the data for all the inputs - // The most nodes just have one but merge node for example has two and data - // of both inputs has to be available to be able to process the node. - if ( - executionData.data.main.length < connectionIndex || - executionData.data.main[connectionIndex] === null - ) { - // Does not have the data of the connections so add back to stack - this.runExecutionData.executionData!.nodeExecutionStack.push(executionData); - lastExecutionTry = currentExecutionTry; - continue executionLoop; + if (this.forceInputNodeExecution(workflow, node!)) { + // Check if it has the data for all the inputs + // The most nodes just have one but merge node for example has two and data + // of both inputs has to be available to be able to process the node. + if ( + executionData.data.main.length < connectionIndex || + executionData.data.main[connectionIndex] === null + ) { + // Does not have the data of the connections so add back to stack + this.runExecutionData.executionData!.nodeExecutionStack.push(executionData); + lastExecutionTry = currentExecutionTry; + + continue executionLoop; + } } } } @@ -1207,9 +1295,16 @@ export class WorkflowExecute { ); } + const connectionDestinationNode = workflow.getNode(connectionData.node); + const forceInputNodeExecution = this.forceInputNodeExecution( + workflow, + connectionDestinationNode!, + ); + if ( nodeSuccessData![outputIndex] && - (nodeSuccessData![outputIndex].length !== 0 || connectionData.index > 0) + (nodeSuccessData![outputIndex].length !== 0 || + (connectionData.index > 0 && forceInputNodeExecution)) ) { // Add the node only if it did execute or if connected to second "optional" input const nodeToAdd = workflow.getNode(connectionData.node); @@ -1260,6 +1355,163 @@ export class WorkflowExecute { taskData, this.runExecutionData, ]); + + let waitingNodes: string[] = Object.keys( + this.runExecutionData.executionData!.waitingExecution, + ); + + if ( + this.runExecutionData.executionData!.nodeExecutionStack.length === 0 && + waitingNodes.length + ) { + // There are no more nodes in the execution stack. Check if there are + // waiting nodes that do not require data on all inputs and execute them, + // one by one. + + // TODO: Should this also care about workflow position (top-left first?) + for (let i = 0; i < waitingNodes.length; i++) { + const nodeName = waitingNodes[i]; + + const checkNode = workflow.getNode(nodeName); + if (!checkNode) { + continue; + } + const nodeType = workflow.nodeTypes.getByNameAndVersion( + checkNode.type, + checkNode.typeVersion, + ); + + // Check if the node is only allowed execute if all inputs received data + let requiredInputs = nodeType.description.requiredInputs; + if (requiredInputs !== undefined) { + if (typeof requiredInputs === 'string') { + requiredInputs = workflow.expression.getSimpleParameterValue( + checkNode, + requiredInputs, + this.mode, + this.additionalData.timezone, + { $version: checkNode.typeVersion }, + undefined, + [], + ) as number[]; + } + + if ( + (requiredInputs !== undefined && + Array.isArray(requiredInputs) && + requiredInputs.length === nodeType.description.inputs.length) || + requiredInputs === nodeType.description.inputs.length + ) { + // All inputs are required, but not all have data so do not continue + continue; + } + } + + const parentNodes = workflow.getParentNodes(nodeName); + + // Check if input nodes (of same run) got already executed + // eslint-disable-next-line @typescript-eslint/no-loop-func + const parentIsWaiting = parentNodes.some((value) => waitingNodes.includes(value)); + if (parentIsWaiting) { + // Execute node later as one of its dependencies is still outstanding + continue; + } + + const runIndexes = Object.keys( + this.runExecutionData.executionData!.waitingExecution[nodeName], + ).sort(); + + // The run-index of the earliest outstanding one + const firstRunIndex = parseInt(runIndexes[0]); + + // Find all the inputs which received any kind of data, even if it was an empty + // array as this shows that the parent nodes executed but they did not have any + // data to pass on. + const inputsWithData = this.runExecutionData + .executionData!.waitingExecution[nodeName][firstRunIndex].main.map((data, index) => + data === null ? null : index, + ) + .filter((data) => data !== null); + + if (requiredInputs !== undefined) { + // Certain inputs are required that the node can execute + + if (Array.isArray(requiredInputs)) { + // Specific inputs are required (array of input indexes) + let inputDataMissing = false; + for (const requiredInput of requiredInputs) { + if (!inputsWithData.includes(requiredInput)) { + inputDataMissing = true; + break; + } + } + if (inputDataMissing) { + continue; + } + } else { + // A certain amout of inputs are required (amount of inputs) + if (inputsWithData.length < requiredInputs) { + continue; + } + } + } + + const taskDataMain = this.runExecutionData.executionData!.waitingExecution[nodeName][ + firstRunIndex + ].main.map((data) => { + // For the inputs for which never any data got received set it to an empty array + return data === null ? [] : data; + }); + + if (taskDataMain.filter((data) => data.length).length !== 0) { + // Add the node to be executed + + // Make sure that each input at least receives an empty array + if (taskDataMain.length < nodeType.description.inputs.length) { + for (; taskDataMain.length < nodeType.description.inputs.length; ) { + taskDataMain.push([]); + } + } + + this.runExecutionData.executionData!.nodeExecutionStack.push({ + node: workflow.nodes[nodeName], + data: { + main: taskDataMain, + }, + source: + this.runExecutionData.executionData!.waitingExecutionSource![nodeName][ + firstRunIndex + ], + }); + } + + // Remove the node from waiting + delete this.runExecutionData.executionData!.waitingExecution[nodeName][firstRunIndex]; + delete this.runExecutionData.executionData!.waitingExecutionSource![nodeName][ + firstRunIndex + ]; + + if ( + Object.keys(this.runExecutionData.executionData!.waitingExecution[nodeName]) + .length === 0 + ) { + // No more data left for the node so also delete that one + delete this.runExecutionData.executionData!.waitingExecution[nodeName]; + delete this.runExecutionData.executionData!.waitingExecutionSource![nodeName]; + } + + if (taskDataMain.filter((data) => data.length).length !== 0) { + // Node to execute got found and added to stop + break; + } else { + // Node to add did not get found, rather an empty one removed so continue with search + waitingNodes = Object.keys(this.runExecutionData.executionData!.waitingExecution); + // Set counter to start again from the beginning. Set it to -1 as it auto increments + // after run. So only like that will we end up again ot 0. + i = -1; + } + } + } } return; diff --git a/packages/core/test/WorkflowExecute.test.ts b/packages/core/test/WorkflowExecute.test.ts index 7fe484ea35..fca310f6c0 100644 --- a/packages/core/test/WorkflowExecute.test.ts +++ b/packages/core/test/WorkflowExecute.test.ts @@ -57,7 +57,6 @@ describe('WorkflowExecute', () => { return nodeData.data.main[0]!.map((entry) => entry.json); }); - // expect(resultData).toEqual(testData.output.nodeData[nodeName]); expect(resultData).toEqual(testData.output.nodeData[nodeName]); } diff --git a/packages/core/test/helpers/constants.ts b/packages/core/test/helpers/constants.ts index a73b75ab37..4d74e7108a 100644 --- a/packages/core/test/helpers/constants.ts +++ b/packages/core/test/helpers/constants.ts @@ -353,7 +353,9 @@ export const predefinedNodesTypes: INodeTypeData = { name: 'merge', icon: 'fa:clone', group: ['transform'], - version: 1, + version: [1, 2], + forceInputNodeExecution: '={{ $version === 1 }}', + requiredInputs: '={{ $version === 2 ? 1 : undefined }}', description: 'Merges data of multiple streams once data of both is available', defaults: { name: 'Merge', @@ -744,6 +746,1346 @@ export const predefinedNodesTypes: INodeTypeData = { }; export const predefinedWorkflowExecuteTests: WorkflowTestData[] = [ + { + description: + 'should run complicated multi node workflow where multiple Merge-Node have missing data and complex dependency structure (Old Merge-Node behavior - forceInputNodeExecution=true)', + input: { + workflowData: { + nodes: [ + { + parameters: { + conditions: { + string: [ + { + value1: '={{ $json["test"] }}', + value2: 'b', + }, + ], + }, + }, + id: '21593a8c-07c1-435b-93a6-75317ee3bf67', + name: 'IF4', + type: 'n8n-nodes-base.if', + typeVersion: 1, + position: [880, 1240], + }, + { + parameters: {}, + id: 'a9af6b9f-011c-4b34-a367-0cfa5ad4c865', + name: 'NoOp2', + type: 'n8n-nodes-base.noOp', + typeVersion: 1, + position: [1320, 1060], + }, + { + parameters: {}, + id: '429d1a51-65f0-4701-af76-b73611774952', + name: 'Merge3', + type: 'n8n-nodes-base.merge', + typeVersion: 1, + position: [1100, 1060], + }, + { + parameters: { + conditions: { + string: [ + { + value1: '={{ $json["test"] }}', + value2: 'b', + }, + ], + }, + }, + id: 'ed08db0f-f747-4f87-af62-051fc53f955c', + name: 'IF3', + type: 'n8n-nodes-base.if', + typeVersion: 1, + position: [620, 400], + }, + { + parameters: {}, + id: 'e80d2aac-cbd4-4e7c-9817-83db52a617d4', + name: 'Merge2', + type: 'n8n-nodes-base.merge', + typeVersion: 1, + position: [940, 900], + }, + { + parameters: { + conditions: { + string: [ + { + value1: '={{ $json["test"] }}', + value2: 'a', + }, + ], + }, + }, + id: '766dad6b-4326-41b5-a02a-0b3b7d879eb4', + name: 'IF2', + type: 'n8n-nodes-base.if', + typeVersion: 1, + position: [620, 900], + }, + { + parameters: {}, + id: '0c0cd5bb-eb44-48fe-b66a-54a3c541ea57', + name: 'Merge7', + type: 'n8n-nodes-base.merge', + typeVersion: 1, + position: [2180, 1180], + }, + { + parameters: {}, + id: '863a00e5-7be4-43f3-97da-07cf552d7c0e', + name: 'Merge6', + type: 'n8n-nodes-base.merge', + typeVersion: 1, + position: [1840, 1200], + }, + { + parameters: {}, + id: '8855d0ca-1deb-4ad8-958b-2379d3a87160', + name: 'Merge5', + type: 'n8n-nodes-base.merge', + typeVersion: 1, + position: [1600, 1040], + }, + { + parameters: {}, + id: 'ea37e388-c77a-4a2f-a527-4585f24371d5', + name: 'Merge4', + type: 'n8n-nodes-base.merge', + typeVersion: 1, + position: [1180, 880], + }, + { + parameters: {}, + id: 'e3c814e9-9a92-4e12-96d5-85634fe76dc9', + name: 'Merge1', + type: 'n8n-nodes-base.merge', + typeVersion: 1, + position: [940, 720], + }, + { + parameters: { + conditions: { + string: [ + { + value1: '={{ $json["test"] }}', + value2: 'b', + }, + ], + }, + }, + id: 'a21a3932-8a3f-464f-8393-309d3233433a', + name: 'IF1', + type: 'n8n-nodes-base.if', + typeVersion: 1, + position: [620, 720], + }, + { + parameters: { + values: { + string: [ + { + name: 'test', + value: 'a', + }, + ], + }, + options: {}, + }, + id: '12d33a38-baeb-41de-aea0-d8a7477f5aa6', + name: 'Set1', + type: 'n8n-nodes-base.set', + typeVersion: 1, + position: [400, 720], + }, + { + parameters: {}, + id: '41589b0b-0521-41ae-b0c6-80a016af803e', + name: 'Start', + type: 'n8n-nodes-base.start', + typeVersion: 1, + position: [160, 240], + }, + ], + connections: { + IF4: { + main: [ + [ + { + node: 'Merge3', + type: 'main', + index: 1, + }, + ], + [ + { + node: 'Merge6', + type: 'main', + index: 1, + }, + ], + ], + }, + NoOp2: { + main: [ + [ + { + node: 'Merge5', + type: 'main', + index: 1, + }, + ], + ], + }, + Merge3: { + main: [ + [ + { + node: 'NoOp2', + type: 'main', + index: 0, + }, + ], + ], + }, + IF3: { + main: [ + [ + { + node: 'Merge3', + type: 'main', + index: 0, + }, + ], + [ + { + node: 'IF4', + type: 'main', + index: 0, + }, + ], + ], + }, + Merge2: { + main: [ + [ + { + node: 'Merge4', + type: 'main', + index: 1, + }, + ], + ], + }, + IF2: { + main: [ + [ + { + node: 'Merge2', + type: 'main', + index: 0, + }, + ], + [ + { + node: 'Merge2', + type: 'main', + index: 1, + }, + ], + ], + }, + Merge6: { + main: [ + [ + { + node: 'Merge7', + type: 'main', + index: 1, + }, + ], + ], + }, + Merge5: { + main: [ + [ + { + node: 'Merge6', + type: 'main', + index: 0, + }, + ], + ], + }, + Merge4: { + main: [ + [ + { + node: 'Merge5', + type: 'main', + index: 0, + }, + ], + ], + }, + Merge1: { + main: [ + [ + { + node: 'Merge4', + type: 'main', + index: 0, + }, + ], + ], + }, + IF1: { + main: [ + [ + { + node: 'Merge1', + type: 'main', + index: 0, + }, + ], + [ + { + node: 'Merge1', + type: 'main', + index: 1, + }, + ], + ], + }, + Set1: { + main: [ + [ + { + node: 'IF1', + type: 'main', + index: 0, + }, + { + node: 'IF2', + type: 'main', + index: 0, + }, + { + node: 'IF3', + type: 'main', + index: 0, + }, + ], + ], + }, + Start: { + main: [ + [ + { + node: 'Set1', + type: 'main', + index: 0, + }, + ], + ], + }, + }, + }, + }, + output: { + nodeExecutionOrder: [ + 'Start', + 'Set1', + 'IF3', + 'IF4', + 'IF1', + 'IF2', + 'Merge2', + 'Merge1', + 'Merge4', + 'Merge3', + 'NoOp2', + 'Merge5', + 'Merge6', + ], + nodeData: { + Merge1: [[{}]], + Merge2: [ + [ + { + test: 'a', + }, + ], + ], + Merge3: [[{}]], + Merge4: [ + [ + {}, + { + test: 'a', + }, + ], + ], + Merge5: [ + [ + {}, + { + test: 'a', + }, + {}, + ], + ], + Merge6: [ + [ + {}, + { + test: 'a', + }, + {}, + { + test: 'a', + }, + ], + ], + }, + }, + }, + { + description: + 'should run keep on executing even if data from input 1 is missing (New Merge-Node behavior - No force execution)', + input: { + workflowData: { + nodes: [ + { + parameters: {}, + id: '9c0cb647-5d60-40dc-b791-4946ee260a5d', + name: 'Start', + type: 'n8n-nodes-base.start', + typeVersion: 1, + position: [180, 240], + }, + { + parameters: { + values: { + string: [ + { + name: 'test', + value: 'a', + }, + ], + }, + options: {}, + }, + id: '2bed3b26-0907-465b-a416-9dc993c2e302', + name: 'Set', + type: 'n8n-nodes-base.set', + typeVersion: 1, + position: [400, 240], + }, + { + parameters: { + conditions: { + string: [ + { + value1: '={{ $json["test"] }}', + value2: 'b', + }, + ], + }, + }, + id: 'eca22a12-fb0c-4a4f-ab97-74544c178714', + name: 'IF', + type: 'n8n-nodes-base.if', + typeVersion: 1, + position: [620, 240], + }, + { + parameters: {}, + id: '8d63caea-8d89-450e-87ae-6097b9821a70', + name: 'NoOp', + type: 'n8n-nodes-base.noOp', + typeVersion: 1, + position: [860, 160], + }, + { + parameters: {}, + id: 'bd0e79e4-7b7a-4016-ace3-6f54f46b41c3', + name: 'NoOp1', + type: 'n8n-nodes-base.noOp', + typeVersion: 1, + position: [860, 300], + }, + { + parameters: {}, + id: '975966f6-8e59-41d8-a69e-7223476a7c50', + name: 'Merge', + type: 'n8n-nodes-base.merge', + typeVersion: 2, + position: [1140, 220], + }, + ], + connections: { + Start: { + main: [ + [ + { + node: 'Set', + type: 'main', + index: 0, + }, + ], + ], + }, + Set: { + main: [ + [ + { + node: 'IF', + type: 'main', + index: 0, + }, + ], + ], + }, + IF: { + main: [ + [ + { + node: 'NoOp', + type: 'main', + index: 0, + }, + ], + [ + { + node: 'NoOp1', + type: 'main', + index: 0, + }, + ], + ], + }, + NoOp: { + main: [ + [ + { + node: 'Merge', + type: 'main', + index: 0, + }, + ], + ], + }, + NoOp1: { + main: [ + [ + { + node: 'Merge', + type: 'main', + index: 1, + }, + ], + ], + }, + }, + }, + }, + output: { + nodeExecutionOrder: ['Start', 'Set', 'IF', 'NoOp1', 'Merge'], + nodeData: { + Merge: [ + [ + { + test: 'a', + }, + ], + ], + }, + }, + }, + { + description: + 'should run complicated multi node workflow where multiple Merge-Node have missing data and complex dependency structure (New Merge-Node behavior - forceInputNodeExecution=false)', + input: { + workflowData: { + nodes: [ + { + parameters: { + conditions: { + string: [ + { + value1: '={{ $json["test"] }}', + value2: 'b', + }, + ], + }, + }, + id: '21593a8c-07c1-435b-93a6-75317ee3bf67', + name: 'IF4', + type: 'n8n-nodes-base.if', + typeVersion: 1, + position: [880, 1240], + }, + { + parameters: {}, + id: 'a9af6b9f-011c-4b34-a367-0cfa5ad4c865', + name: 'NoOp2', + type: 'n8n-nodes-base.noOp', + typeVersion: 1, + position: [1320, 1060], + }, + { + parameters: {}, + id: '429d1a51-65f0-4701-af76-b73611774952', + name: 'Merge3', + type: 'n8n-nodes-base.merge', + typeVersion: 2, + position: [1100, 1060], + }, + { + parameters: { + conditions: { + string: [ + { + value1: '={{ $json["test"] }}', + value2: 'b', + }, + ], + }, + }, + id: 'ed08db0f-f747-4f87-af62-051fc53f955c', + name: 'IF3', + type: 'n8n-nodes-base.if', + typeVersion: 1, + position: [620, 1060], + }, + { + parameters: {}, + id: 'e80d2aac-cbd4-4e7c-9817-83db52a617d4', + name: 'Merge2', + type: 'n8n-nodes-base.merge', + typeVersion: 2, + position: [940, 900], + }, + { + parameters: { + conditions: { + string: [ + { + value1: '={{ $json["test"] }}', + value2: 'a', + }, + ], + }, + }, + id: '766dad6b-4326-41b5-a02a-0b3b7d879eb4', + name: 'IF2', + type: 'n8n-nodes-base.if', + typeVersion: 1, + position: [620, 900], + }, + { + parameters: {}, + id: '0c0cd5bb-eb44-48fe-b66a-54a3c541ea57', + name: 'Merge7', + type: 'n8n-nodes-base.merge', + typeVersion: 2, + position: [2180, 1180], + }, + { + parameters: {}, + id: '863a00e5-7be4-43f3-97da-07cf552d7c0e', + name: 'Merge6', + type: 'n8n-nodes-base.merge', + typeVersion: 2, + position: [1840, 1200], + }, + { + parameters: {}, + id: '8855d0ca-1deb-4ad8-958b-2379d3a87160', + name: 'Merge5', + type: 'n8n-nodes-base.merge', + typeVersion: 2, + position: [1600, 1040], + }, + { + parameters: {}, + id: 'ea37e388-c77a-4a2f-a527-4585f24371d5', + name: 'Merge4', + type: 'n8n-nodes-base.merge', + typeVersion: 2, + position: [1180, 880], + }, + { + parameters: {}, + id: 'e3c814e9-9a92-4e12-96d5-85634fe76dc9', + name: 'Merge1', + type: 'n8n-nodes-base.merge', + typeVersion: 2, + position: [940, 720], + }, + { + parameters: { + conditions: { + string: [ + { + value1: '={{ $json["test"] }}', + value2: 'b', + }, + ], + }, + }, + id: 'a21a3932-8a3f-464f-8393-309d3233433a', + name: 'IF1', + type: 'n8n-nodes-base.if', + typeVersion: 1, + position: [620, 720], + }, + { + parameters: { + values: { + string: [ + { + name: 'test', + value: 'a', + }, + ], + }, + options: {}, + }, + id: '12d33a38-baeb-41de-aea0-d8a7477f5aa6', + name: 'Set1', + type: 'n8n-nodes-base.set', + typeVersion: 1, + position: [400, 720], + }, + { + parameters: {}, + id: '41589b0b-0521-41ae-b0c6-80a016af803e', + name: 'Start', + type: 'n8n-nodes-base.start', + typeVersion: 1, + position: [160, 240], + }, + ], + connections: { + IF4: { + main: [ + [ + { + node: 'Merge3', + type: 'main', + index: 1, + }, + ], + [ + { + node: 'Merge6', + type: 'main', + index: 1, + }, + ], + ], + }, + NoOp2: { + main: [ + [ + { + node: 'Merge5', + type: 'main', + index: 1, + }, + ], + ], + }, + Merge3: { + main: [ + [ + { + node: 'NoOp2', + type: 'main', + index: 0, + }, + ], + ], + }, + IF3: { + main: [ + [ + { + node: 'Merge3', + type: 'main', + index: 0, + }, + ], + [ + { + node: 'IF4', + type: 'main', + index: 0, + }, + ], + ], + }, + Merge2: { + main: [ + [ + { + node: 'Merge4', + type: 'main', + index: 1, + }, + ], + ], + }, + IF2: { + main: [ + [ + { + node: 'Merge2', + type: 'main', + index: 0, + }, + ], + [ + { + node: 'Merge2', + type: 'main', + index: 1, + }, + ], + ], + }, + Merge6: { + main: [ + [ + { + node: 'Merge7', + type: 'main', + index: 1, + }, + ], + ], + }, + Merge5: { + main: [ + [ + { + node: 'Merge6', + type: 'main', + index: 0, + }, + ], + ], + }, + Merge4: { + main: [ + [ + { + node: 'Merge5', + type: 'main', + index: 0, + }, + ], + ], + }, + Merge1: { + main: [ + [ + { + node: 'Merge4', + type: 'main', + index: 0, + }, + ], + ], + }, + IF1: { + main: [ + [ + { + node: 'Merge1', + type: 'main', + index: 0, + }, + ], + [ + { + node: 'Merge1', + type: 'main', + index: 1, + }, + ], + ], + }, + Set1: { + main: [ + [ + { + node: 'IF1', + type: 'main', + index: 0, + }, + { + node: 'IF2', + type: 'main', + index: 0, + }, + { + node: 'IF3', + type: 'main', + index: 0, + }, + ], + ], + }, + Start: { + main: [ + [ + { + node: 'Set1', + type: 'main', + index: 0, + }, + ], + ], + }, + }, + }, + }, + output: { + nodeExecutionOrder: [ + 'Start', + 'Set1', + 'IF1', + 'IF2', + 'IF3', + 'IF4', + 'Merge1', + 'Merge2', + 'Merge4', + 'Merge5', + 'Merge6', + 'Merge7', + ], + nodeData: { + Merge1: [ + [ + { + test: 'a', + }, + ], + ], + Merge2: [ + [ + { + test: 'a', + }, + ], + ], + Merge4: [ + [ + { + test: 'a', + }, + { + test: 'a', + }, + ], + ], + Merge5: [ + [ + { + test: 'a', + }, + { + test: 'a', + }, + ], + ], + Merge6: [ + [ + { + test: 'a', + }, + { + test: 'a', + }, + { + test: 'a', + }, + ], + ], + Merge7: [ + [ + { + test: 'a', + }, + { + test: 'a', + }, + { + test: 'a', + }, + ], + ], + }, + }, + }, + { + description: 'should simply execute the next multi-input-node (totally ignoring the runIndex)', + input: { + workflowData: { + nodes: [ + { + parameters: { + values: { + number: [ + { + name: 'counter', + value: '={{ ($input.first().json.counter || 0) + 1 }}', + }, + ], + }, + options: {}, + }, + id: '18191406-b56b-4388-9d4b-ff5b22fdc02c', + name: 'Set', + type: 'n8n-nodes-base.set', + typeVersion: 2, + position: [640, 660], + }, + { + parameters: { + conditions: { + number: [ + { + value1: '={{ $json.counter }}', + value2: 3, + }, + ], + }, + }, + id: '0c6f239b-f9f5-4a20-b554-c69e7bc692b1', + name: 'IF', + type: 'n8n-nodes-base.if', + typeVersion: 1, + position: [900, 660], + }, + { + parameters: {}, + id: '463194c3-4fcb-4da4-bba0-bc58462ac59a', + name: 'Merge', + type: 'n8n-nodes-base.merge', + typeVersion: 2.1, + position: [1180, 760], + }, + { + parameters: { + values: { + number: [ + { + name: 'counter', + value: '={{ ($input.first().json.counter || 0) + 1 }}', + }, + ], + }, + options: {}, + }, + id: '8b5177c1-34ab-468f-8cb1-ff1d253562dc', + name: 'Set1', + type: 'n8n-nodes-base.set', + typeVersion: 2, + position: [640, 320], + }, + { + parameters: { + conditions: { + number: [ + { + value1: '={{ $json.counter }}', + value2: 3, + }, + ], + }, + }, + id: '455663ab-bc3b-4674-9769-7428c85918c3', + name: 'IF1', + type: 'n8n-nodes-base.if', + typeVersion: 1, + position: [860, 320], + }, + { + parameters: {}, + id: 'ffc0d327-5cbc-4cf3-8fb0-77c087b391c1', + name: 'Merge1', + type: 'n8n-nodes-base.merge', + typeVersion: 2.1, + position: [1180, 420], + }, + { + parameters: {}, + id: '9a5b13a4-eba1-4a18-a4c6-36bedb07d975', + name: 'Merge2', + type: 'n8n-nodes-base.merge', + typeVersion: 2.1, + position: [1500, 600], + }, + { + parameters: {}, + id: '89a78e50-2ec6-48bf-be5f-3838600cd08a', + name: 'Start', + type: 'n8n-nodes-base.start', + typeVersion: 1, + position: [-20, 700], + }, + ], + connections: { + Set: { + main: [ + [ + { + node: 'IF', + type: 'main', + index: 0, + }, + ], + ], + }, + IF: { + main: [ + [ + { + node: 'Set', + type: 'main', + index: 0, + }, + { + node: 'Merge1', + type: 'main', + index: 1, + }, + ], + [ + { + node: 'Merge', + type: 'main', + index: 0, + }, + ], + ], + }, + Merge: { + main: [ + [ + { + node: 'Merge2', + type: 'main', + index: 1, + }, + ], + ], + }, + Set1: { + main: [ + [ + { + node: 'IF1', + type: 'main', + index: 0, + }, + ], + ], + }, + IF1: { + main: [ + [ + { + node: 'Set1', + type: 'main', + index: 0, + }, + { + node: 'Merge1', + type: 'main', + index: 0, + }, + ], + ], + }, + Merge1: { + main: [ + [ + { + node: 'Merge2', + type: 'main', + index: 0, + }, + ], + ], + }, + Start: { + main: [ + [ + { + node: 'Merge', + type: 'main', + index: 1, + }, + { + node: 'Set1', + type: 'main', + index: 0, + }, + { + node: 'Set', + type: 'main', + index: 0, + }, + ], + ], + }, + }, + }, + }, + output: { + nodeExecutionOrder: [ + 'Start', + 'Set1', + 'IF1', + 'Set1', + 'IF1', + 'Set1', + 'IF1', + 'Set', + 'IF', + 'Merge1', + 'Set', + 'IF', + 'Merge1', + 'Set', + 'IF', + 'Merge', + 'Merge2', + 'Merge2', + ], + nodeData: { + Start: [[{}]], + Set1: [ + [ + { + counter: 1, + }, + ], + [ + { + counter: 2, + }, + ], + [ + { + counter: 3, + }, + ], + ], + Set: [ + [ + { + counter: 1, + }, + ], + [ + { + counter: 2, + }, + ], + [ + { + counter: 3, + }, + ], + ], + IF1: [ + [ + { + counter: 1, + }, + ], + [ + { + counter: 2, + }, + ], + [], + ], + IF: [ + [ + { + counter: 1, + }, + ], + [ + { + counter: 2, + }, + ], + [], + ], + Merge1: [ + [ + { + counter: 1, + }, + { + counter: 1, + }, + ], + [ + { + counter: 2, + }, + { + counter: 2, + }, + ], + ], + Merge: [ + [ + { + counter: 3, + }, + {}, + ], + ], + Merge2: [ + [ + { + counter: 1, + }, + { + counter: 1, + }, + { + counter: 3, + }, + {}, + ], + [ + { + counter: 2, + }, + { + counter: 2, + }, + ], + ], + }, + }, + }, { description: 'should run basic two node workflow', input: { diff --git a/packages/nodes-base/nodes/CompareDatasets/CompareDatasets.node.ts b/packages/nodes-base/nodes/CompareDatasets/CompareDatasets.node.ts index 69cb9c633b..5947316c8c 100644 --- a/packages/nodes-base/nodes/CompareDatasets/CompareDatasets.node.ts +++ b/packages/nodes-base/nodes/CompareDatasets/CompareDatasets.node.ts @@ -18,12 +18,14 @@ export class CompareDatasets implements INodeType { name: 'compareDatasets', icon: 'file:compare.svg', group: ['transform'], - version: [1, 2, 2.1, 2.2], + version: [1, 2, 2.1, 2.2, 2.3], description: 'Compare two inputs for changes', defaults: { name: 'Compare Datasets' }, // eslint-disable-next-line n8n-nodes-base/node-class-description-inputs-wrong-regular-node inputs: ['main', 'main'], inputNames: ['Input A', 'Input B'], + forceInputNodeExecution: '={{ $version < 2.3 }}', + requiredInputs: '={{ $version < 2.3 ? undefined : 1 }}', // eslint-disable-next-line n8n-nodes-base/node-class-description-outputs-wrong outputs: ['main', 'main', 'main', 'main'], outputNames: ['In A only', 'Same', 'Different', 'In B only'], diff --git a/packages/nodes-base/nodes/CompareDatasets/test/node/workflow.compareDatasets.forceInputNodeExecution.json b/packages/nodes-base/nodes/CompareDatasets/test/node/workflow.compareDatasets.forceInputNodeExecution.json new file mode 100644 index 0000000000..b0c9bddcfb --- /dev/null +++ b/packages/nodes-base/nodes/CompareDatasets/test/node/workflow.compareDatasets.forceInputNodeExecution.json @@ -0,0 +1,496 @@ +{ + "name": "Compare Datasets Node Test", + "nodes": [ + { + "parameters": {}, + "id": "0312bddf-aae0-423c-9041-d54fb124934f", + "name": "When clicking \"Execute Workflow\"", + "type": "n8n-nodes-base.manualTrigger", + "typeVersion": 1, + "position": [480, 720] + }, + { + "parameters": { + "jsCode": "return [\n {\n json: {\n number: 0\n }\n },\n {\n json: {\n number: 1\n }\n },\n {\n json: {\n number: 2\n }\n }\n];" + }, + "id": "0542886d-6ab2-4695-b686-2cd60729ba9a", + "name": "Code", + "type": "n8n-nodes-base.code", + "typeVersion": 1, + "position": [900, 640] + }, + { + "parameters": { + "mergeByFields": { + "values": [ + { + "field1": "number", + "field2": "number" + } + ] + }, + "options": {} + }, + "id": "f3e5e43b-a3bf-46c7-acd7-ae3d7d19d9f9", + "name": "Compare Datasets 2.2 - Old", + "type": "n8n-nodes-base.compareDatasets", + "typeVersion": 2.2, + "position": [1260, 40] + }, + { + "parameters": { + "jsCode": "return [\n {\n json: {\n number: 0\n }\n },\n {\n json: {\n number: 1,\n k: 2,\n }\n },\n {\n json: {\n number: 10\n }\n },\n {\n json: {\n number: 11\n }\n },\n {\n json: {\n number: 12\n }\n }\n];" + }, + "id": "c62e90b3-f84a-48a5-94bf-3267a4c8b69e", + "name": "Code1", + "type": "n8n-nodes-base.code", + "typeVersion": 1, + "position": [900, 60] + }, + { + "parameters": { + "jsCode": "return [\n {\n json: {\n number: 0\n }\n },\n {\n json: {\n number: 1,\n k: 2,\n }\n },\n {\n json: {\n number: 10\n }\n },\n {\n json: {\n number: 11\n }\n },\n {\n json: {\n number: 12\n }\n }\n];" + }, + "id": "46320ca2-8e8e-4ecf-b4f6-5899807c1500", + "name": "Code2", + "type": "n8n-nodes-base.code", + "typeVersion": 1, + "position": [900, 840] + }, + { + "parameters": {}, + "id": "4ae12a83-5d3f-4d5b-845b-65c930d8ef5a", + "name": "Old - A only", + "type": "n8n-nodes-base.noOp", + "typeVersion": 1, + "position": [1520, -180] + }, + { + "parameters": {}, + "id": "d4f5fd94-4b46-4b8c-8b8a-073e8c32ad85", + "name": "New - A only", + "type": "n8n-nodes-base.noOp", + "typeVersion": 1, + "position": [1520, 440] + }, + { + "parameters": {}, + "id": "0939f79b-fd75-4d2f-b40b-50780114c3f2", + "name": "Old - Same", + "type": "n8n-nodes-base.noOp", + "typeVersion": 1, + "position": [1520, -40] + }, + { + "parameters": {}, + "id": "199ea52c-b30a-401d-a920-9db5c8e10d38", + "name": "Old - Different", + "type": "n8n-nodes-base.noOp", + "typeVersion": 1, + "position": [1520, 100] + }, + { + "parameters": {}, + "id": "1ebcb5bb-3061-47ef-8c79-847ae8bdb568", + "name": "Old - B only", + "type": "n8n-nodes-base.noOp", + "typeVersion": 1, + "position": [1520, 240] + }, + { + "parameters": {}, + "id": "38689dbf-49f2-4f3b-855b-abd821ec316f", + "name": "New - B only", + "type": "n8n-nodes-base.noOp", + "typeVersion": 1, + "position": [1520, 860] + }, + { + "parameters": {}, + "id": "dfcac903-95dc-4519-b49f-a6a65bf8fdb8", + "name": "New - Different", + "type": "n8n-nodes-base.noOp", + "typeVersion": 1, + "position": [1520, 720] + }, + { + "parameters": {}, + "id": "b8588ebc-4dc8-41f5-9a0a-64d151d7122e", + "name": "New - Same", + "type": "n8n-nodes-base.noOp", + "typeVersion": 1, + "position": [1520, 580] + }, + { + "parameters": { + "jsCode": "return [\n {\n json: {\n number: 0\n }\n },\n {\n json: {\n number: 1,\n k: 2,\n }\n },\n {\n json: {\n number: 10\n }\n },\n {\n json: {\n number: 11\n }\n },\n {\n json: {\n number: 12\n }\n }\n];" + }, + "id": "d35f3f52-c967-46e8-be3a-0bf709b20ef8", + "name": "Code3", + "type": "n8n-nodes-base.code", + "typeVersion": 1, + "position": [880, 1340] + }, + { + "parameters": {}, + "id": "75690ad6-c870-4950-9085-12fdd9c12ddd", + "name": "New - A only1", + "type": "n8n-nodes-base.noOp", + "typeVersion": 1, + "position": [1520, 1100] + }, + { + "parameters": {}, + "id": "9abb523f-349c-48b0-b36b-0c74064a6219", + "name": "New - B only1", + "type": "n8n-nodes-base.noOp", + "typeVersion": 1, + "position": [1520, 1520] + }, + { + "parameters": {}, + "id": "c4230d94-eaa6-420d-baff-288463722a03", + "name": "New - Different1", + "type": "n8n-nodes-base.noOp", + "typeVersion": 1, + "position": [1520, 1380] + }, + { + "parameters": {}, + "id": "58287181-dc90-4806-a053-83b3ef36e673", + "name": "New - Same1", + "type": "n8n-nodes-base.noOp", + "typeVersion": 1, + "position": [1520, 1240] + }, + { + "parameters": { + "mergeByFields": { + "values": [ + { + "field1": "number", + "field2": "number" + } + ] + }, + "options": {} + }, + "id": "5514c636-ee64-45f3-8832-77ad6652cc08", + "name": "Compare Datasets 2.3 - New - Connected", + "type": "n8n-nodes-base.compareDatasets", + "typeVersion": 2.3, + "position": [1260, 1320] + }, + { + "parameters": { + "mergeByFields": { + "values": [ + { + "field1": "number", + "field2": "number" + } + ] + }, + "options": {} + }, + "id": "a25f4766-9bb4-40a0-9ae2-ef0004f5938a", + "name": "Compare Datasets 2.3 - New - Not Connected", + "type": "n8n-nodes-base.compareDatasets", + "typeVersion": 2.3, + "position": [1260, 660] + } + ], + "pinData": { + "Old - A only": [ + { + "json": { + "number": 2 + } + } + ], + "Old - Same": [ + { + "json": { + "number": 0 + } + } + ], + "Old - Different": [ + { + "json": { + "keys": { + "number": 1 + }, + "same": { + "number": 1 + }, + "different": { + "k": { + "inputA": null, + "inputB": 2 + } + } + } + } + ], + "Old - B only": [ + { + "json": { + "number": 10 + } + }, + { + "json": { + "number": 11 + } + }, + { + "json": { + "number": 12 + } + } + ], + "New - A only": [ + { + "json": { + "number": 0 + } + }, + { + "json": { + "number": 1 + } + }, + { + "json": { + "number": 2 + } + } + ], + "New - A only1": [ + { + "json": { + "number": 2 + } + } + ], + "New - Same1": [ + { + "json": { + "number": 0 + } + } + ], + "New - Different1": [ + { + "json": { + "keys": { + "number": 1 + }, + "same": { + "number": 1 + }, + "different": { + "k": { + "inputA": null, + "inputB": 2 + } + } + } + } + ], + "New - B only1": [ + { + "json": { + "number": 10 + } + }, + { + "json": { + "number": 11 + } + }, + { + "json": { + "number": 12 + } + } + ] + }, + "connections": { + "When clicking \"Execute Workflow\"": { + "main": [ + [ + { + "node": "Code", + "type": "main", + "index": 0 + }, + { + "node": "Code3", + "type": "main", + "index": 0 + } + ] + ] + }, + "Code": { + "main": [ + [ + { + "node": "Compare Datasets 2.3 - New - Not Connected", + "type": "main", + "index": 0 + }, + { + "node": "Compare Datasets 2.2 - Old", + "type": "main", + "index": 0 + }, + { + "node": "Compare Datasets 2.3 - New - Connected", + "type": "main", + "index": 0 + } + ] + ] + }, + "Code1": { + "main": [ + [ + { + "node": "Compare Datasets 2.2 - Old", + "type": "main", + "index": 1 + } + ] + ] + }, + "Code2": { + "main": [ + [ + { + "node": "Compare Datasets 2.3 - New - Not Connected", + "type": "main", + "index": 1 + } + ] + ] + }, + "Compare Datasets 2.2 - Old": { + "main": [ + [ + { + "node": "Old - A only", + "type": "main", + "index": 0 + } + ], + [ + { + "node": "Old - Same", + "type": "main", + "index": 0 + } + ], + [ + { + "node": "Old - Different", + "type": "main", + "index": 0 + } + ], + [ + { + "node": "Old - B only", + "type": "main", + "index": 0 + } + ] + ] + }, + "Code3": { + "main": [ + [ + { + "node": "Compare Datasets 2.3 - New - Connected", + "type": "main", + "index": 1 + } + ] + ] + }, + "Compare Datasets 2.3 - New - Connected": { + "main": [ + [ + { + "node": "New - A only1", + "type": "main", + "index": 0 + } + ], + [ + { + "node": "New - Same1", + "type": "main", + "index": 0 + } + ], + [ + { + "node": "New - Different1", + "type": "main", + "index": 0 + } + ], + [ + { + "node": "New - B only1", + "type": "main", + "index": 0 + } + ] + ] + }, + "Compare Datasets 2.3 - New - Not Connected": { + "main": [ + [ + { + "node": "New - A only", + "type": "main", + "index": 0 + } + ], + [ + { + "node": "New - Same", + "type": "main", + "index": 0 + } + ], + [ + { + "node": "New - Different", + "type": "main", + "index": 0 + } + ], + [ + { + "node": "New - B only", + "type": "main", + "index": 0 + } + ] + ] + } + }, + "active": false, + "settings": {}, + "versionId": "d5c0f040-7406-4e69-bd5d-a362a739c8d8", + "id": "1114", + "meta": { + "instanceId": "021d3c82ba2d3bc090cbf4fc81c9312668bcc34297e022bb3438c5c88a43a5ff" + }, + "tags": [] +} diff --git a/packages/nodes-base/nodes/Merge/Merge.node.ts b/packages/nodes-base/nodes/Merge/Merge.node.ts index 9801b5838b..bb29606618 100644 --- a/packages/nodes-base/nodes/Merge/Merge.node.ts +++ b/packages/nodes-base/nodes/Merge/Merge.node.ts @@ -20,6 +20,7 @@ export class Merge extends VersionedNodeType { 1: new MergeV1(baseDescription), 2: new MergeV2(baseDescription), 2.1: new MergeV2(baseDescription), + 2.2: new MergeV2(baseDescription), }; super(nodeVersions, baseDescription); diff --git a/packages/nodes-base/nodes/Merge/test/node/workflow.mixed.forceInputNodeExecution.json b/packages/nodes-base/nodes/Merge/test/node/workflow.mixed.forceInputNodeExecution.json new file mode 100644 index 0000000000..c297880c19 --- /dev/null +++ b/packages/nodes-base/nodes/Merge/test/node/workflow.mixed.forceInputNodeExecution.json @@ -0,0 +1,2440 @@ +{ + "name": "Merge 2", + "nodes": [ + { + "parameters": {}, + "id": "8d0ffac0-dfbf-4407-91db-0756041b0894", + "name": "Start", + "type": "n8n-nodes-base.start", + "typeVersion": 1, + "position": [-320, 1640] + }, + { + "parameters": { + "conditions": { + "string": [ + { + "value1": "={{ $json[\"test\"] }}", + "value2": "b" + } + ] + } + }, + "id": "8bc8719a-4e79-4df0-bd34-e67b4aaa7823", + "name": "IF", + "type": "n8n-nodes-base.if", + "typeVersion": 1, + "position": [140, 1180] + }, + { + "parameters": {}, + "id": "26ceab02-97d2-4e4b-b27f-d5a5584e697e", + "name": "Merge", + "type": "n8n-nodes-base.merge", + "typeVersion": 2, + "position": [900, 1260] + }, + { + "parameters": {}, + "id": "2b3f9309-8c75-4dc6-bf02-ab19f17983d7", + "name": "Merge1", + "type": "n8n-nodes-base.merge", + "typeVersion": 2, + "position": [640, 1260] + }, + { + "parameters": { + "mode": "combine", + "combinationMode": "mergeByPosition", + "options": {} + }, + "id": "a0456576-8dbb-437f-81e5-5fe331eb45f6", + "name": "Merge3", + "type": "n8n-nodes-base.merge", + "typeVersion": 2, + "position": [640, 1100] + }, + { + "parameters": { + "mode": "combine", + "combinationMode": "mergeByPosition", + "options": {} + }, + "id": "66c801a7-c020-42b1-bedb-f5104a792e0c", + "name": "Merge4", + "type": "n8n-nodes-base.merge", + "typeVersion": 2, + "position": [900, 1100] + }, + { + "parameters": { + "operation": "getAllPeople" + }, + "id": "e8e83cef-c782-490c-9a0e-206435e3b71c", + "name": "Customer Datastore (n8n training)", + "type": "n8n-nodes-base.n8nTrainingCustomerDatastore", + "typeVersion": 1, + "position": [-100, 1640] + }, + { + "parameters": { + "mode": "chooseBranch" + }, + "id": "f8b779dc-992d-49db-9fc2-d8b76b0f3419", + "name": "Merge2", + "type": "n8n-nodes-base.merge", + "typeVersion": 2, + "position": [640, 1440] + }, + { + "parameters": { + "mode": "chooseBranch" + }, + "id": "e6136b98-ab2c-4c44-bc14-6af3fa39ed01", + "name": "Merge5", + "type": "n8n-nodes-base.merge", + "typeVersion": 2, + "position": [900, 1440] + }, + { + "parameters": { + "values": { + "string": [ + { + "name": "nameB", + "value": "B" + } + ] + }, + "options": {} + }, + "id": "c97cba6c-5a4e-4929-81d1-da20be216900", + "name": "Set1B", + "type": "n8n-nodes-base.set", + "typeVersion": 2, + "position": [380, 1260] + }, + { + "parameters": { + "values": { + "string": [ + { + "name": "nameA", + "value": "A" + } + ] + }, + "options": {} + }, + "id": "87fdfaf7-dafc-427e-ad89-3839ea9718aa", + "name": "Set1A", + "type": "n8n-nodes-base.set", + "typeVersion": 2, + "position": [380, 1120] + }, + { + "parameters": { + "mode": "combine", + "mergeByFields": { + "values": [ + { + "field1": "id", + "field2": "id" + } + ] + }, + "joinMode": "keepEverything", + "options": {} + }, + "id": "f5e4aabd-93f8-405c-804a-9487393467e6", + "name": "Merge6", + "type": "n8n-nodes-base.merge", + "typeVersion": 2, + "position": [900, 940], + "disabled": true + }, + { + "parameters": { + "mode": "combine", + "mergeByFields": { + "values": [ + { + "field1": "id", + "field2": "id" + } + ] + }, + "joinMode": "keepEverything", + "options": {} + }, + "id": "b713a005-f140-4565-b30a-3136d892a8c3", + "name": "Merge8", + "type": "n8n-nodes-base.merge", + "typeVersion": 2, + "position": [640, 940], + "disabled": true + }, + { + "parameters": { + "mode": "combine", + "combinationMode": "multiplex", + "options": {} + }, + "id": "868d4a27-7192-4252-826b-dcc20b42948a", + "name": "Merge9", + "type": "n8n-nodes-base.merge", + "typeVersion": 2, + "position": [900, 780] + }, + { + "parameters": { + "mode": "combine", + "combinationMode": "multiplex", + "options": {} + }, + "id": "b8e770e8-c0a0-413b-a887-4e6395787d76", + "name": "Merge10", + "type": "n8n-nodes-base.merge", + "typeVersion": 2, + "position": [640, 780] + }, + { + "parameters": { + "mode": "chooseBranch", + "output": "input2" + }, + "id": "925a9e9e-2628-4561-a7d7-89f55248e1d4", + "name": "Merge7", + "type": "n8n-nodes-base.merge", + "typeVersion": 2, + "position": [640, 1620] + }, + { + "parameters": { + "mode": "chooseBranch", + "output": "input2" + }, + "id": "fed3c762-9171-4d7e-85b9-c2c100eba9f9", + "name": "Merge11", + "type": "n8n-nodes-base.merge", + "typeVersion": 2, + "position": [900, 1620] + }, + { + "parameters": {}, + "id": "8f3b781a-c82b-40a0-a896-d459e25f9b79", + "name": "Merge12", + "type": "n8n-nodes-base.merge", + "typeVersion": 2, + "position": [900, 2360] + }, + { + "parameters": {}, + "id": "65c4b385-cf4c-4a6e-98bb-797dbfdf67a0", + "name": "Merge13", + "type": "n8n-nodes-base.merge", + "typeVersion": 2, + "position": [640, 2360] + }, + { + "parameters": { + "mode": "combine", + "combinationMode": "mergeByPosition", + "options": {} + }, + "id": "5260edf9-c448-4790-ac0a-6f1bc9845c56", + "name": "Merge14", + "type": "n8n-nodes-base.merge", + "typeVersion": 2, + "position": [640, 2200] + }, + { + "parameters": { + "mode": "combine", + "combinationMode": "mergeByPosition", + "options": {} + }, + "id": "1d60a9d0-cd9e-418e-85e7-19726f6dfc27", + "name": "Merge15", + "type": "n8n-nodes-base.merge", + "typeVersion": 2, + "position": [900, 2200] + }, + { + "parameters": { + "mode": "chooseBranch" + }, + "id": "0432532f-7ab6-428e-8a09-5473ea43da9e", + "name": "Merge16", + "type": "n8n-nodes-base.merge", + "typeVersion": 2, + "position": [640, 2540] + }, + { + "parameters": { + "mode": "chooseBranch" + }, + "id": "0ffc7240-3225-4223-a8c9-f76327dfbe02", + "name": "Merge17", + "type": "n8n-nodes-base.merge", + "typeVersion": 2, + "position": [900, 2540] + }, + { + "parameters": { + "mode": "combine", + "mergeByFields": { + "values": [ + { + "field1": "id", + "field2": "id" + } + ] + }, + "joinMode": "keepEverything", + "options": {} + }, + "id": "5b139ae2-f46d-4149-9e63-b50acaac2be7", + "name": "Merge18", + "type": "n8n-nodes-base.merge", + "typeVersion": 2, + "position": [900, 2040] + }, + { + "parameters": { + "mode": "combine", + "mergeByFields": { + "values": [ + { + "field1": "id", + "field2": "id" + } + ] + }, + "joinMode": "keepEverything", + "options": {} + }, + "id": "49132c5a-a0bb-4254-a693-9a243ef13ca8", + "name": "Merge19", + "type": "n8n-nodes-base.merge", + "typeVersion": 2, + "position": [640, 2040] + }, + { + "parameters": { + "mode": "combine", + "combinationMode": "multiplex", + "options": {} + }, + "id": "2856e67f-d640-45b6-8d2d-7264bf419b2f", + "name": "Merge20", + "type": "n8n-nodes-base.merge", + "typeVersion": 2, + "position": [900, 1880] + }, + { + "parameters": { + "mode": "combine", + "combinationMode": "multiplex", + "options": {} + }, + "id": "a8fb6c81-fdc0-4da3-a3d7-21f8d901d5f2", + "name": "Merge21", + "type": "n8n-nodes-base.merge", + "typeVersion": 2, + "position": [640, 1880] + }, + { + "parameters": { + "mode": "chooseBranch", + "output": "input2" + }, + "id": "922005a8-9d49-4e63-9b53-22aedcc5577d", + "name": "Merge22", + "type": "n8n-nodes-base.merge", + "typeVersion": 2, + "position": [640, 2720] + }, + { + "parameters": { + "mode": "chooseBranch", + "output": "input2" + }, + "id": "6d0d4e32-a7e8-447b-929f-7faaa3044a5f", + "name": "Merge23", + "type": "n8n-nodes-base.merge", + "typeVersion": 2, + "position": [900, 2720] + }, + { + "parameters": { + "values": { + "string": [ + { + "name": "nameA", + "value": "A" + } + ] + }, + "options": {} + }, + "id": "c60a9307-efbf-444e-899c-33002e80d9f0", + "name": "Set2A", + "type": "n8n-nodes-base.set", + "typeVersion": 2, + "position": [380, 2220] + }, + { + "parameters": { + "values": { + "string": [ + { + "name": "nameB", + "value": "B" + } + ] + }, + "options": {} + }, + "id": "df76be2b-5e4f-48bf-b779-aacfffb8c2ba", + "name": "Set2B", + "type": "n8n-nodes-base.set", + "typeVersion": 2, + "position": [380, 2360] + } + ], + "pinData": { + "Merge10": [ + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameB": "B", + "nameA": "A" + } + } + ], + "Merge9": [ + { + "json": { + "nameA": "A", + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameB": "B" + } + }, + { + "json": { + "nameA": "A", + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameB": "B" + } + }, + { + "json": { + "nameA": "A", + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameB": "B" + } + }, + { + "json": { + "nameA": "A", + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameB": "B" + } + }, + { + "json": { + "nameA": "A", + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameB": "B" + } + } + ], + "Merge3": [ + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameB": "B", + "nameA": "A" + } + } + ], + "Merge4": [ + { + "json": { + "nameA": "A", + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameB": "B" + } + } + ], + "Merge1": [ + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameB": "B" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameB": "B" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameB": "B" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameB": "B" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameB": "B" + } + }, + { + "json": { + "nameA": "A" + } + } + ], + "Merge": [ + { + "json": { + "nameA": "A" + } + }, + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameB": "B" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameB": "B" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameB": "B" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameB": "B" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameB": "B" + } + } + ], + "Merge2": [ + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameB": "B" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameB": "B" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameB": "B" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameB": "B" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameB": "B" + } + } + ], + "Merge5": [ + { + "json": { + "nameA": "A" + } + } + ], + "Merge7": [ + { + "json": { + "nameA": "A" + } + } + ], + "Merge11": [ + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameB": "B" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameB": "B" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameB": "B" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameB": "B" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameB": "B" + } + } + ], + "Merge21": [ + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameB": "B", + "nameA": "A" + } + } + ], + "Merge20": [ + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameA": "A", + "nameB": "B" + } + } + ], + "Merge19": [ + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameB": "B", + "nameA": "A" + } + } + ], + "Merge18": [ + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameA": "A", + "nameB": "B" + } + } + ], + "Merge14": [ + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameB": "B", + "nameA": "A" + } + } + ], + "Merge15": [ + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameA": "A", + "nameB": "B" + } + } + ], + "Merge13": [ + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameB": "B" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameB": "B" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameB": "B" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameB": "B" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameB": "B" + } + }, + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameA": "A" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameA": "A" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameA": "A" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameA": "A" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameA": "A" + } + } + ], + "Merge12": [ + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameA": "A" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameA": "A" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameA": "A" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameA": "A" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameA": "A" + } + }, + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameB": "B" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameB": "B" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameB": "B" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameB": "B" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameB": "B" + } + } + ], + "Merge16": [ + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameB": "B" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameB": "B" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameB": "B" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameB": "B" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameB": "B" + } + } + ], + "Merge17": [ + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameA": "A" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameA": "A" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameA": "A" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameA": "A" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameA": "A" + } + } + ], + "Merge22": [ + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameA": "A" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameA": "A" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameA": "A" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameA": "A" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameA": "A" + } + } + ], + "Merge23": [ + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameB": "B" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameB": "B" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameB": "B" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameB": "B" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameB": "B" + } + } + ] + }, + "connections": { + "Start": { + "main": [ + [ + { + "node": "Customer Datastore (n8n training)", + "type": "main", + "index": 0 + } + ] + ] + }, + "IF": { + "main": [ + [ + { + "node": "Set1A", + "type": "main", + "index": 0 + } + ], + [ + { + "node": "Set1B", + "type": "main", + "index": 0 + } + ] + ] + }, + "Customer Datastore (n8n training)": { + "main": [ + [ + { + "node": "IF", + "type": "main", + "index": 0 + }, + { + "node": "Set2A", + "type": "main", + "index": 0 + }, + { + "node": "Set2B", + "type": "main", + "index": 0 + } + ] + ] + }, + "Set1B": { + "main": [ + [ + { + "node": "Merge", + "type": "main", + "index": 1 + }, + { + "node": "Merge1", + "type": "main", + "index": 0 + }, + { + "node": "Merge4", + "type": "main", + "index": 1 + }, + { + "node": "Merge3", + "type": "main", + "index": 0 + }, + { + "node": "Merge2", + "type": "main", + "index": 0 + }, + { + "node": "Merge5", + "type": "main", + "index": 1 + }, + { + "node": "Merge6", + "type": "main", + "index": 1 + }, + { + "node": "Merge8", + "type": "main", + "index": 0 + }, + { + "node": "Merge10", + "type": "main", + "index": 0 + }, + { + "node": "Merge9", + "type": "main", + "index": 1 + }, + { + "node": "Merge7", + "type": "main", + "index": 0 + }, + { + "node": "Merge11", + "type": "main", + "index": 1 + } + ] + ] + }, + "Set1A": { + "main": [ + [ + { + "node": "Merge", + "type": "main", + "index": 0 + }, + { + "node": "Merge1", + "type": "main", + "index": 1 + }, + { + "node": "Merge3", + "type": "main", + "index": 1 + }, + { + "node": "Merge4", + "type": "main", + "index": 0 + }, + { + "node": "Merge2", + "type": "main", + "index": 1 + }, + { + "node": "Merge5", + "type": "main", + "index": 0 + }, + { + "node": "Merge6", + "type": "main", + "index": 0 + }, + { + "node": "Merge8", + "type": "main", + "index": 1 + }, + { + "node": "Merge10", + "type": "main", + "index": 1 + }, + { + "node": "Merge9", + "type": "main", + "index": 0 + }, + { + "node": "Merge7", + "type": "main", + "index": 1 + }, + { + "node": "Merge11", + "type": "main", + "index": 0 + } + ] + ] + }, + "Set2A": { + "main": [ + [ + { + "node": "Merge12", + "type": "main", + "index": 0 + }, + { + "node": "Merge13", + "type": "main", + "index": 1 + }, + { + "node": "Merge14", + "type": "main", + "index": 1 + }, + { + "node": "Merge15", + "type": "main", + "index": 0 + }, + { + "node": "Merge16", + "type": "main", + "index": 1 + }, + { + "node": "Merge17", + "type": "main", + "index": 0 + }, + { + "node": "Merge18", + "type": "main", + "index": 0 + }, + { + "node": "Merge19", + "type": "main", + "index": 1 + }, + { + "node": "Merge21", + "type": "main", + "index": 1 + }, + { + "node": "Merge20", + "type": "main", + "index": 0 + }, + { + "node": "Merge22", + "type": "main", + "index": 1 + }, + { + "node": "Merge23", + "type": "main", + "index": 0 + } + ] + ] + }, + "Set2B": { + "main": [ + [ + { + "node": "Merge12", + "type": "main", + "index": 1 + }, + { + "node": "Merge13", + "type": "main", + "index": 0 + }, + { + "node": "Merge15", + "type": "main", + "index": 1 + }, + { + "node": "Merge14", + "type": "main", + "index": 0 + }, + { + "node": "Merge16", + "type": "main", + "index": 0 + }, + { + "node": "Merge17", + "type": "main", + "index": 1 + }, + { + "node": "Merge18", + "type": "main", + "index": 1 + }, + { + "node": "Merge19", + "type": "main", + "index": 0 + }, + { + "node": "Merge21", + "type": "main", + "index": 0 + }, + { + "node": "Merge20", + "type": "main", + "index": 1 + }, + { + "node": "Merge22", + "type": "main", + "index": 0 + }, + { + "node": "Merge23", + "type": "main", + "index": 1 + } + ] + ] + } + }, + "active": false, + "settings": {}, + "versionId": "4548f6c2-c043-4184-946d-0a6a89112ef1", + "id": "1108", + "meta": { + "instanceId": "021d3c82ba2d3bc090cbf4fc81c9312668bcc34297e022bb3438c5c88a43a5ff" + }, + "tags": [] +} diff --git a/packages/nodes-base/nodes/Merge/test/node/workflow.mixed.not.forceInputNodeExecution.json b/packages/nodes-base/nodes/Merge/test/node/workflow.mixed.not.forceInputNodeExecution.json new file mode 100644 index 0000000000..7c252ecbdd --- /dev/null +++ b/packages/nodes-base/nodes/Merge/test/node/workflow.mixed.not.forceInputNodeExecution.json @@ -0,0 +1,2376 @@ +{ + "name": "My workflow 89", + "nodes": [ + { + "parameters": {}, + "id": "6a251178-c1c2-4377-9df0-08a5bb218f11", + "name": "Start", + "type": "n8n-nodes-base.start", + "typeVersion": 1, + "position": [-140, 480] + }, + { + "parameters": { + "conditions": { + "string": [ + { + "value1": "={{ $json[\"test\"] }}", + "value2": "b" + } + ] + } + }, + "id": "b8b9540e-d7e3-4e12-92b2-4bf124116217", + "name": "IF", + "type": "n8n-nodes-base.if", + "typeVersion": 1, + "position": [320, 20] + }, + { + "parameters": {}, + "id": "0cc8ce9e-6c16-4fc9-a1b4-589a33dca5e8", + "name": "Merge", + "type": "n8n-nodes-base.merge", + "typeVersion": 2.2, + "position": [1080, 100] + }, + { + "parameters": {}, + "id": "5ba18ff2-a5b4-4515-a055-1c26fe7e5c02", + "name": "Merge1", + "type": "n8n-nodes-base.merge", + "typeVersion": 2.2, + "position": [820, 100] + }, + { + "parameters": { + "mode": "combine", + "combinationMode": "mergeByPosition", + "options": {} + }, + "id": "cba07480-4ad6-4238-b786-61bacf7660f4", + "name": "Merge3", + "type": "n8n-nodes-base.merge", + "typeVersion": 2.2, + "position": [820, -60] + }, + { + "parameters": { + "mode": "combine", + "combinationMode": "mergeByPosition", + "options": {} + }, + "id": "6f6b87fa-2c63-46ab-9f50-d26a376fc4b4", + "name": "Merge4", + "type": "n8n-nodes-base.merge", + "typeVersion": 2.2, + "position": [1080, -60] + }, + { + "parameters": { + "operation": "getAllPeople" + }, + "id": "fa7d5e97-7809-4065-9b6e-d47892c47c91", + "name": "Customer Datastore (n8n training)", + "type": "n8n-nodes-base.n8nTrainingCustomerDatastore", + "typeVersion": 1, + "position": [80, 480] + }, + { + "parameters": { + "mode": "chooseBranch" + }, + "id": "e4aef8cb-3733-43c5-a615-0d1e64393316", + "name": "Merge2", + "type": "n8n-nodes-base.merge", + "typeVersion": 2.2, + "position": [820, 280] + }, + { + "parameters": { + "mode": "chooseBranch" + }, + "id": "10c4f897-503b-4fdc-93c8-577bad12d8f0", + "name": "Merge5", + "type": "n8n-nodes-base.merge", + "typeVersion": 2.2, + "position": [1080, 280] + }, + { + "parameters": { + "values": { + "string": [ + { + "name": "nameB", + "value": "B" + } + ] + }, + "options": {} + }, + "id": "cfbe8fe8-cc82-42b8-a24f-c584a83a274e", + "name": "Set1B", + "type": "n8n-nodes-base.set", + "typeVersion": 2, + "position": [560, 100] + }, + { + "parameters": { + "values": { + "string": [ + { + "name": "nameA", + "value": "A" + } + ] + }, + "options": {} + }, + "id": "a77facf7-c0fa-453b-a9a7-66c39d7bbe8c", + "name": "Set1A", + "type": "n8n-nodes-base.set", + "typeVersion": 2, + "position": [560, -40] + }, + { + "parameters": { + "mode": "combine", + "mergeByFields": { + "values": [ + { + "field1": "id", + "field2": "id" + } + ] + }, + "joinMode": "keepEverything", + "options": {} + }, + "id": "aafbba65-a18d-43b8-8150-88c300992f1d", + "name": "Merge6", + "type": "n8n-nodes-base.merge", + "typeVersion": 2.2, + "position": [1080, -220] + }, + { + "parameters": { + "mode": "combine", + "mergeByFields": { + "values": [ + { + "field1": "id", + "field2": "id" + } + ] + }, + "joinMode": "keepEverything", + "options": {} + }, + "id": "9098d926-6006-4aed-ad5d-8128128ce6dc", + "name": "Merge8", + "type": "n8n-nodes-base.merge", + "typeVersion": 2.2, + "position": [820, -220] + }, + { + "parameters": { + "mode": "combine", + "combinationMode": "multiplex", + "options": {} + }, + "id": "eeece670-291f-4c50-977a-6f3608e8b815", + "name": "Merge9", + "type": "n8n-nodes-base.merge", + "typeVersion": 2.2, + "position": [1080, -380] + }, + { + "parameters": { + "mode": "combine", + "combinationMode": "multiplex", + "options": {} + }, + "id": "c5ddf991-a05f-441d-9fdf-d4ba0db55894", + "name": "Merge10", + "type": "n8n-nodes-base.merge", + "typeVersion": 2.2, + "position": [820, -380] + }, + { + "parameters": { + "mode": "chooseBranch", + "output": "input2" + }, + "id": "2bbdfe57-5541-4634-922b-230b03394ee7", + "name": "Merge7", + "type": "n8n-nodes-base.merge", + "typeVersion": 2.2, + "position": [820, 460] + }, + { + "parameters": { + "mode": "chooseBranch", + "output": "input2" + }, + "id": "fbf20a2d-4d08-4302-8289-c0149d5d804f", + "name": "Merge11", + "type": "n8n-nodes-base.merge", + "typeVersion": 2.2, + "position": [1080, 460] + }, + { + "parameters": {}, + "id": "9729a369-5bc7-49c7-9156-1cef519c2744", + "name": "Merge12", + "type": "n8n-nodes-base.merge", + "typeVersion": 2.2, + "position": [1080, 1200] + }, + { + "parameters": {}, + "id": "068c9d3c-f186-4b00-9d96-1de60ce7a92a", + "name": "Merge13", + "type": "n8n-nodes-base.merge", + "typeVersion": 2.2, + "position": [820, 1200] + }, + { + "parameters": { + "mode": "combine", + "combinationMode": "mergeByPosition", + "options": {} + }, + "id": "6d2de385-9e01-416b-b9b9-948c1ba77e4f", + "name": "Merge14", + "type": "n8n-nodes-base.merge", + "typeVersion": 2.2, + "position": [820, 1040] + }, + { + "parameters": { + "mode": "combine", + "combinationMode": "mergeByPosition", + "options": {} + }, + "id": "d4b34831-3757-42b7-93e0-53630a46b734", + "name": "Merge15", + "type": "n8n-nodes-base.merge", + "typeVersion": 2.2, + "position": [1080, 1040] + }, + { + "parameters": { + "mode": "chooseBranch" + }, + "id": "c51a1ec8-d104-4803-9eb1-83630166c749", + "name": "Merge16", + "type": "n8n-nodes-base.merge", + "typeVersion": 2.2, + "position": [820, 1380] + }, + { + "parameters": { + "mode": "chooseBranch" + }, + "id": "af935dce-fc44-4075-b3c6-4629fe796f16", + "name": "Merge17", + "type": "n8n-nodes-base.merge", + "typeVersion": 2.2, + "position": [1080, 1380] + }, + { + "parameters": { + "mode": "combine", + "mergeByFields": { + "values": [ + { + "field1": "id", + "field2": "id" + } + ] + }, + "joinMode": "keepEverything", + "options": {} + }, + "id": "bf586064-63aa-4f0e-9fad-c5e97fa23fb8", + "name": "Merge18", + "type": "n8n-nodes-base.merge", + "typeVersion": 2.2, + "position": [1080, 880] + }, + { + "parameters": { + "mode": "combine", + "mergeByFields": { + "values": [ + { + "field1": "id", + "field2": "id" + } + ] + }, + "joinMode": "keepEverything", + "options": {} + }, + "id": "9908bca5-067a-4184-8333-2e48f74f34a1", + "name": "Merge19", + "type": "n8n-nodes-base.merge", + "typeVersion": 2.2, + "position": [820, 880] + }, + { + "parameters": { + "mode": "combine", + "combinationMode": "multiplex", + "options": {} + }, + "id": "5fcdc9b3-a0c6-424e-a325-d0e83e27e4f1", + "name": "Merge20", + "type": "n8n-nodes-base.merge", + "typeVersion": 2.2, + "position": [1080, 720] + }, + { + "parameters": { + "mode": "combine", + "combinationMode": "multiplex", + "options": {} + }, + "id": "5a8d7598-e88b-4e81-ac57-5c3b6eadfe5a", + "name": "Merge21", + "type": "n8n-nodes-base.merge", + "typeVersion": 2.2, + "position": [820, 720] + }, + { + "parameters": { + "mode": "chooseBranch", + "output": "input2" + }, + "id": "32797fb4-ed6d-4127-823f-982c72d859a8", + "name": "Merge22", + "type": "n8n-nodes-base.merge", + "typeVersion": 2.2, + "position": [820, 1560] + }, + { + "parameters": { + "mode": "chooseBranch", + "output": "input2" + }, + "id": "5299797d-2aa8-4f6b-a5d8-2a3c2bb0295d", + "name": "Merge23", + "type": "n8n-nodes-base.merge", + "typeVersion": 2.2, + "position": [1080, 1560] + }, + { + "parameters": { + "values": { + "string": [ + { + "name": "nameA", + "value": "A" + } + ] + }, + "options": {} + }, + "id": "eea959a8-3d62-47a8-a752-717302341f8c", + "name": "Set2A", + "type": "n8n-nodes-base.set", + "typeVersion": 2, + "position": [560, 1060] + }, + { + "parameters": { + "values": { + "string": [ + { + "name": "nameB", + "value": "B" + } + ] + }, + "options": {} + }, + "id": "cb4f703a-a027-4beb-8e47-81bf15875678", + "name": "Set2B", + "type": "n8n-nodes-base.set", + "typeVersion": 2, + "position": [560, 1200] + } + ], + "pinData": { + "Merge21": [ + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameB": "B", + "nameA": "A" + } + } + ], + "Merge20": [ + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameA": "A", + "nameB": "B" + } + } + ], + "Merge19": [ + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameB": "B", + "nameA": "A" + } + } + ], + "Merge18": [ + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameA": "A", + "nameB": "B" + } + } + ], + "Merge14": [ + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameB": "B", + "nameA": "A" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameB": "B", + "nameA": "A" + } + } + ], + "Merge15": [ + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameA": "A", + "nameB": "B" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameA": "A", + "nameB": "B" + } + } + ], + "Merge13": [ + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameB": "B" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameB": "B" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameB": "B" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameB": "B" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameB": "B" + } + }, + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameA": "A" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameA": "A" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameA": "A" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameA": "A" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameA": "A" + } + } + ], + "Merge12": [ + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameA": "A" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameA": "A" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameA": "A" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameA": "A" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameA": "A" + } + }, + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameB": "B" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameB": "B" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameB": "B" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameB": "B" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameB": "B" + } + } + ], + "Merge16": [ + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameB": "B" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameB": "B" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameB": "B" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameB": "B" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameB": "B" + } + } + ], + "Merge17": [ + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameA": "A" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameA": "A" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameA": "A" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameA": "A" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameA": "A" + } + } + ], + "Merge22": [ + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameA": "A" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameA": "A" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameA": "A" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameA": "A" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameA": "A" + } + } + ], + "Merge23": [ + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameB": "B" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameB": "B" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameB": "B" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameB": "B" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameB": "B" + } + } + ], + "Merge8": [ + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameB": "B" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameB": "B" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameB": "B" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameB": "B" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameB": "B" + } + } + ], + "Merge6": [ + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameB": "B" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameB": "B" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameB": "B" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameB": "B" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameB": "B" + } + } + ], + "Merge3": [ + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameB": "B" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameB": "B" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameB": "B" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameB": "B" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameB": "B" + } + } + ], + "Merge4": [ + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameB": "B" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameB": "B" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameB": "B" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameB": "B" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameB": "B" + } + } + ], + "Merge1": [ + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameB": "B" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameB": "B" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameB": "B" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameB": "B" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameB": "B" + } + } + ], + "Merge": [ + { + "json": { + "id": "23423532", + "name": "Jay Gatsby", + "email": "gatsby@west-egg.com", + "notes": "Keeps asking about a green light??", + "country": "US", + "created": "1925-04-10", + "nameB": "B" + } + }, + { + "json": { + "id": "23423533", + "name": "José Arcadio Buendía", + "email": "jab@macondo.co", + "notes": "Lots of people named after him. Very confusing", + "country": "CO", + "created": "1967-05-05", + "nameB": "B" + } + }, + { + "json": { + "id": "23423534", + "name": "Max Sendak", + "email": "info@in-and-out-of-weeks.org", + "notes": "Keeps rolling his terrible eyes", + "country": "US", + "created": "1963-04-09", + "nameB": "B" + } + }, + { + "json": { + "id": "23423535", + "name": "Zaphod Beeblebrox", + "email": "captain@heartofgold.com", + "notes": "Felt like I was talking to more than one person", + "country": null, + "created": "1979-10-12", + "nameB": "B" + } + }, + { + "json": { + "id": "23423536", + "name": "Edmund Pevensie", + "email": "edmund@narnia.gov", + "notes": "Passionate sailor", + "country": "UK", + "created": "1950-10-16", + "nameB": "B" + } + } + ] + }, + "connections": { + "Start": { + "main": [ + [ + { + "node": "Customer Datastore (n8n training)", + "type": "main", + "index": 0 + } + ] + ] + }, + "IF": { + "main": [ + [ + { + "node": "Set1A", + "type": "main", + "index": 0 + } + ], + [ + { + "node": "Set1B", + "type": "main", + "index": 0 + } + ] + ] + }, + "Customer Datastore (n8n training)": { + "main": [ + [ + { + "node": "IF", + "type": "main", + "index": 0 + }, + { + "node": "Set2A", + "type": "main", + "index": 0 + }, + { + "node": "Set2B", + "type": "main", + "index": 0 + } + ] + ] + }, + "Set1B": { + "main": [ + [ + { + "node": "Merge", + "type": "main", + "index": 1 + }, + { + "node": "Merge1", + "type": "main", + "index": 0 + }, + { + "node": "Merge4", + "type": "main", + "index": 1 + }, + { + "node": "Merge3", + "type": "main", + "index": 0 + }, + { + "node": "Merge2", + "type": "main", + "index": 0 + }, + { + "node": "Merge5", + "type": "main", + "index": 1 + }, + { + "node": "Merge6", + "type": "main", + "index": 1 + }, + { + "node": "Merge8", + "type": "main", + "index": 0 + }, + { + "node": "Merge10", + "type": "main", + "index": 0 + }, + { + "node": "Merge9", + "type": "main", + "index": 1 + }, + { + "node": "Merge7", + "type": "main", + "index": 0 + }, + { + "node": "Merge11", + "type": "main", + "index": 1 + } + ] + ] + }, + "Set1A": { + "main": [ + [ + { + "node": "Merge", + "type": "main", + "index": 0 + }, + { + "node": "Merge1", + "type": "main", + "index": 1 + }, + { + "node": "Merge3", + "type": "main", + "index": 1 + }, + { + "node": "Merge4", + "type": "main", + "index": 0 + }, + { + "node": "Merge2", + "type": "main", + "index": 1 + }, + { + "node": "Merge5", + "type": "main", + "index": 0 + }, + { + "node": "Merge6", + "type": "main", + "index": 0 + }, + { + "node": "Merge8", + "type": "main", + "index": 1 + }, + { + "node": "Merge10", + "type": "main", + "index": 1 + }, + { + "node": "Merge9", + "type": "main", + "index": 0 + }, + { + "node": "Merge7", + "type": "main", + "index": 1 + }, + { + "node": "Merge11", + "type": "main", + "index": 0 + } + ] + ] + }, + "Set2A": { + "main": [ + [ + { + "node": "Merge12", + "type": "main", + "index": 0 + }, + { + "node": "Merge13", + "type": "main", + "index": 1 + }, + { + "node": "Merge14", + "type": "main", + "index": 1 + }, + { + "node": "Merge15", + "type": "main", + "index": 0 + }, + { + "node": "Merge16", + "type": "main", + "index": 1 + }, + { + "node": "Merge17", + "type": "main", + "index": 0 + }, + { + "node": "Merge18", + "type": "main", + "index": 0 + }, + { + "node": "Merge19", + "type": "main", + "index": 1 + }, + { + "node": "Merge21", + "type": "main", + "index": 1 + }, + { + "node": "Merge20", + "type": "main", + "index": 0 + }, + { + "node": "Merge22", + "type": "main", + "index": 1 + }, + { + "node": "Merge23", + "type": "main", + "index": 0 + } + ] + ] + }, + "Set2B": { + "main": [ + [ + { + "node": "Merge12", + "type": "main", + "index": 1 + }, + { + "node": "Merge13", + "type": "main", + "index": 0 + }, + { + "node": "Merge15", + "type": "main", + "index": 1 + }, + { + "node": "Merge14", + "type": "main", + "index": 0 + }, + { + "node": "Merge16", + "type": "main", + "index": 0 + }, + { + "node": "Merge17", + "type": "main", + "index": 1 + }, + { + "node": "Merge18", + "type": "main", + "index": 1 + }, + { + "node": "Merge19", + "type": "main", + "index": 0 + }, + { + "node": "Merge21", + "type": "main", + "index": 0 + }, + { + "node": "Merge20", + "type": "main", + "index": 1 + }, + { + "node": "Merge22", + "type": "main", + "index": 0 + }, + { + "node": "Merge23", + "type": "main", + "index": 1 + } + ] + ] + } + }, + "active": false, + "settings": {}, + "versionId": "6b37555c-fd78-4135-9c59-4912a71e18db", + "id": "1107", + "meta": { + "instanceId": "021d3c82ba2d3bc090cbf4fc81c9312668bcc34297e022bb3438c5c88a43a5ff" + }, + "tags": [] +} diff --git a/packages/nodes-base/nodes/Merge/v1/MergeV1.node.ts b/packages/nodes-base/nodes/Merge/v1/MergeV1.node.ts index d0f10e29b2..b5cc9671cf 100644 --- a/packages/nodes-base/nodes/Merge/v1/MergeV1.node.ts +++ b/packages/nodes-base/nodes/Merge/v1/MergeV1.node.ts @@ -30,6 +30,7 @@ const versionDescription: INodeTypeDescription = { inputs: ['main', 'main'], outputs: ['main'], inputNames: ['Input 1', 'Input 2'], + forceInputNodeExecution: true, properties: [ oldVersionNotice, { diff --git a/packages/nodes-base/nodes/Merge/v2/MergeV2.node.ts b/packages/nodes-base/nodes/Merge/v2/MergeV2.node.ts index 8b05d98a70..5cf6ab28e4 100644 --- a/packages/nodes-base/nodes/Merge/v2/MergeV2.node.ts +++ b/packages/nodes-base/nodes/Merge/v2/MergeV2.node.ts @@ -35,7 +35,7 @@ const versionDescription: INodeTypeDescription = { name: 'merge', icon: 'fa:code-branch', group: ['transform'], - version: [2, 2.1], + version: [2, 2.1, 2.2], subtitle: '={{$parameter["mode"]}}', description: 'Merges data of multiple streams once data from both is available', defaults: { @@ -46,6 +46,11 @@ const versionDescription: INodeTypeDescription = { inputs: ['main', 'main'], outputs: ['main'], inputNames: ['Input 1', 'Input 2'], + // If the node is of version 2.2 or if mode is chooseBranch data from both branches is required + // to continue, else data from any input suffices + requiredInputs: + '={{ $version < 2.2 ? undefined : ($parameter["mode"] === "chooseBranch" ? [0, 1] : 1) }}', + forceInputNodeExecution: '={{ $version < 2.2 }}', properties: [ { displayName: 'Mode', @@ -374,6 +379,12 @@ export class MergeV2 implements INodeType { let input1 = this.getInputData(0); let input2 = this.getInputData(1); + if (input1.length === 0 || input2.length === 0) { + // If data of any input is missing, return the data of + // the input that contains data + return [[...input1, ...input2]]; + } + if (clashHandling.resolveClash === 'preferInput1') { [input1, input2] = [input2, input1]; } @@ -454,6 +465,7 @@ export class MergeV2 implements INodeType { let input1 = this.getInputData(0); let input2 = this.getInputData(1); + if (nodeVersion < 2.1) { input1 = checkInput( this.getInputData(0), @@ -473,6 +485,24 @@ export class MergeV2 implements INodeType { if (!input1) return [returnData]; } + if (input1.length === 0 || input2.length === 0) { + if (joinMode === 'keepMatches') { + // Stop the execution + return [[]]; + } else if (joinMode === 'enrichInput1' && input1.length === 0) { + // No data to enrich so stop + return [[]]; + } else if (joinMode === 'enrichInput2' && input2.length === 0) { + // No data to enrich so stop + return [[]]; + } else { + // Return the data of any of the inputs that contains data + return [[...input1, ...input2]]; + } + } + + if (!input1) return [returnData]; + if (!input2 || !matchFields.length) { if ( joinMode === 'keepMatches' || diff --git a/packages/workflow/src/Expression.ts b/packages/workflow/src/Expression.ts index 0e8842cf76..35cc4d9a44 100644 --- a/packages/workflow/src/Expression.ts +++ b/packages/workflow/src/Expression.ts @@ -358,8 +358,8 @@ export class Expression { timezone: string, additionalKeys: IWorkflowDataProxyAdditionalKeys, executeData?: IExecuteData, - defaultValue?: boolean | number | string, - ): boolean | number | string | undefined { + defaultValue?: boolean | number | string | unknown[], + ): boolean | number | string | undefined | unknown[] { if (parameterValue === undefined) { // Value is not set so return the default return defaultValue; diff --git a/packages/workflow/src/Interfaces.ts b/packages/workflow/src/Interfaces.ts index fd7b58387c..6e92e9ef7c 100644 --- a/packages/workflow/src/Interfaces.ts +++ b/packages/workflow/src/Interfaces.ts @@ -1429,6 +1429,8 @@ export interface INodeTypeDescription extends INodeTypeBaseDescription { eventTriggerDescription?: string; activationMessage?: string; inputs: string[]; + forceInputNodeExecution?: string | boolean; // TODO: This option should be deprecated after a while + requiredInputs?: string | number[] | number; inputNames?: string[]; outputs: string[]; outputNames?: string[]; diff --git a/packages/workflow/src/Workflow.ts b/packages/workflow/src/Workflow.ts index e2dc301bd0..eaa775e8d5 100644 --- a/packages/workflow/src/Workflow.ts +++ b/packages/workflow/src/Workflow.ts @@ -1186,11 +1186,35 @@ export class Workflow { // because then it is a trigger node. As they only pass data through and so the input-data // becomes output-data it has to be possible. - if (inputData.hasOwnProperty('main') && inputData.main.length > 0) { + if (inputData.main?.length > 0) { // We always use the data of main input and the first input for execute connectionInputData = inputData.main[0] as INodeExecutionData[]; } + let forceInputNodeExecution = nodeType.description.forceInputNodeExecution; + if (forceInputNodeExecution !== undefined) { + if (typeof forceInputNodeExecution === 'string') { + forceInputNodeExecution = !!this.expression.getSimpleParameterValue( + node, + forceInputNodeExecution, + mode, + additionalData.timezone, + { $version: node.typeVersion }, + ); + } + + if (!forceInputNodeExecution) { + // If the nodes do not get force executed data of some inputs may be missing + // for that reason do we use the data of the first one that contains any + for (const mainData of inputData.main) { + if (mainData?.length) { + connectionInputData = mainData; + break; + } + } + } + } + if (connectionInputData.length === 0) { // No data for node so return return { data: undefined };