* Convert a MERGE clause into a MergeStep.
(mergeClause: MergeClause)
| 748 | * Convert a MERGE clause into a MergeStep. |
| 749 | */ |
| 750 | function convertMergeClause(mergeClause: MergeClause): MergeStep { |
| 751 | let pattern: MergePatternConfig; |
| 752 | |
| 753 | if (mergeClause.pattern.type === "NodePattern") { |
| 754 | const nodePattern = mergeClause.pattern as NodePattern; |
| 755 | pattern = { |
| 756 | type: "node", |
| 757 | variable: nodePattern.variable, |
| 758 | labels: nodePattern.labels, |
| 759 | properties: convertPropertyMap(nodePattern.properties), |
| 760 | }; |
| 761 | } else if (mergeClause.pattern.type === "MergeRelationshipPattern") { |
| 762 | const relPattern = mergeClause.pattern as MergeRelationshipPattern; |
| 763 | pattern = { |
| 764 | type: "edge", |
| 765 | variable: relPattern.edge.variable, |
| 766 | label: relPattern.edge.label, |
| 767 | direction: relPattern.edge.direction, |
| 768 | properties: convertPropertyMap(relPattern.edge.properties), |
| 769 | startVariable: relPattern.startVariable, |
| 770 | endVariable: relPattern.endVariable, |
| 771 | }; |
| 772 | } else { |
| 773 | throw new Error(`Unknown MERGE pattern type: ${(mergeClause.pattern as any).type}`); |
| 774 | } |
| 775 | |
| 776 | return new MergeStep({ |
| 777 | pattern, |
| 778 | onCreate: mergeClause.onCreate |
| 779 | ? mergeClause.onCreate.assignments.map((a) => ({ |
| 780 | variable: a.variable, |
| 781 | property: a.property, |
| 782 | value: convertSetValue(a.value), |
| 783 | })) |
| 784 | : undefined, |
| 785 | onMatch: mergeClause.onMatch |
| 786 | ? mergeClause.onMatch.assignments.map((a) => ({ |
| 787 | variable: a.variable, |
| 788 | property: a.property, |
| 789 | value: convertSetValue(a.value), |
| 790 | })) |
| 791 | : undefined, |
| 792 | }); |
| 793 | } |
| 794 | |
| 795 | /** |
| 796 | * Convert a WITH clause into a WithStep. |
no test coverage detected