private void synchronizeVariables()

in asterix-graphix/src/main/java/org/apache/asterix/graphix/lang/rewrite/visitor/GraphixLoweringVisitor.java [485:529]


    private void synchronizeVariables(LoweringEnvironment workingEnvironment, VertexPatternExpr branchVertex,
            Map<ElementLabel, VariableExpr> labelVariableMap) throws CompilationException {
        VariableExpr vertexVariable = branchVertex.getVariableExpr();
        VariableExpr iterationAlias = aliasLookupTable.getIterationAlias(vertexVariable);
        VariableExpr joinAlias = aliasLookupTable.getJoinAlias(vertexVariable);
        ElementLabel elementLabel = branchVertex.getLabels().iterator().next();
        if (labelVariableMap.containsKey(elementLabel)) {
            VariableExpr targetVertexVariable = labelVariableMap.get(elementLabel);
            VariableExpr targetIterationAlias = aliasLookupTable.getIterationAlias(targetVertexVariable);
            VariableExpr targetJoinAlias = aliasLookupTable.getJoinAlias(targetVertexVariable);
            variableRemapCloneVisitor.resetSubstitutions();
            variableRemapCloneVisitor.addSubstitution(iterationAlias, targetIterationAlias);
            variableRemapCloneVisitor.addSubstitution(joinAlias, targetJoinAlias);
            variableRemapCloneVisitor.addSubstitution(vertexVariable, targetVertexVariable);

            workingEnvironment.acceptTransformer(lowerList -> {
                // Transform our non-representative clauses.
                ListIterator<AbstractClause> nonRepresentativeIterator =
                        lowerList.getNonRepresentativeClauses().listIterator();
                while (nonRepresentativeIterator.hasNext()) {
                    AbstractClause workingClause = nonRepresentativeIterator.next();
                    nonRepresentativeIterator.set((AbstractClause) variableRemapCloneVisitor.substitute(workingClause));
                }

                // Transform our vertex bindings.
                ListIterator<LetClause> vertexBindingIterator =
                        lowerList.getRepresentativeVertexBindings().listIterator();
                while (vertexBindingIterator.hasNext()) {
                    LetClause vertexBinding = vertexBindingIterator.next();
                    vertexBindingIterator.set((LetClause) variableRemapCloneVisitor.substitute(vertexBinding));
                }

                // Transform our edge bindings.
                ListIterator<LetClause> edgeBindingIterator = lowerList.getRepresentativeEdgeBindings().listIterator();
                while (edgeBindingIterator.hasNext()) {
                    LetClause edgeBinding = edgeBindingIterator.next();
                    edgeBindingIterator.set((LetClause) variableRemapCloneVisitor.substitute(edgeBinding));
                }
            });
            branchVertex.setVariableExpr(targetVertexVariable);

        } else {
            labelVariableMap.put(elementLabel, vertexVariable);
        }
    }