@Override public void visit(OpExtend opExtend) { Element e = asElement(opExtend.getSubOp()) ; // If (extend ... (table unit)), and first in group, don't add the empty group. insertIntoGroup(currentGroup(), e) ; processExtends(Arrays.asList(opExtend), (var,expr)->{ currentGroup().addElement(new ElementBind(var,expr)) ; }) ; }
@Override public void visit(OpAssign opAssign) { Element e = asElement(opAssign.getSubOp()) ; // If (assign ... (table unit)), and first in group, don't add the empty group. insertIntoGroup(currentGroup(), e) ; processAssigns(Arrays.asList(opAssign), (var,expr)->{ currentGroup().addElement(new ElementAssign(var,expr)) ; }) ; }
@Override public void visit(OpJoin opJoin) { Element eLeft = asElement(opJoin.getLeft()) ; ElementGroup eRightGroup = asElementGroup(opJoin.getRight()) ; Element eRight = eRightGroup ; // Very special case. If the RHS is not something that risks // reparsing into a combined element of a group, strip the group-of-one. // See also ElementTransformCleanGroupsOfOne if ( eRightGroup.size() == 1 ) { // This always was a {} around it but it's unnecessary in a group of one. if ( eRightGroup.get(0) instanceof ElementSubQuery ) eRight = eRightGroup.get(0) ; } ElementGroup g = currentGroup() ; insertIntoGroup(g, eLeft) ; insertIntoGroup(g, eRight) ; return ; }
@Override public void visit(OpSequence opSequence) { ElementGroup g = currentGroup() ; boolean nestGroup = !g.isEmpty() ; if ( nestGroup ) { startSubGroup() ; g = currentGroup() ; } for ( Op op : opSequence.getElements() ) { Element e = asElement(op) ; insertIntoGroup(g, e) ; } if ( nestGroup ) endSubGroup() ; return ; }