@Override public Expr visitNon_join_query_term(Non_join_query_termContext ctx) { Expr current = visitNon_join_query_primary(ctx.non_join_query_primary()); Expr left; for (int i = 1; i < ctx.getChildCount(); ) { int idx = i; boolean distinct = true; if (ctx.getChild(idx) instanceof TerminalNode) { if (((TerminalNode) ctx.getChild(idx)).getSymbol().getType() == INTERSECT) { idx++; } if (ctx.getChild(idx) instanceof TerminalNode) { if (((TerminalNode) ctx.getChild(idx)).getSymbol().getType() == ALL) { distinct = false; idx++; } } Query_primaryContext queryPrimaryContext = (Query_primaryContext) ctx.getChild(idx); Expr right = visitQuery_primary(queryPrimaryContext); left = current; current = new SetOperation(OpType.Intersect, left, right, distinct); i += idx; } } return current; }
@Override public Expr visitNon_join_query_term(Non_join_query_termContext ctx) { Expr current = visitNon_join_query_primary(ctx.non_join_query_primary()); Expr left; for (int i = 1; i < ctx.getChildCount(); ) { int idx = i; boolean distinct = true; if (ctx.getChild(idx) instanceof TerminalNode) { if (((TerminalNode) ctx.getChild(idx)).getSymbol().getType() == INTERSECT) { idx++; } if (ctx.getChild(idx) instanceof TerminalNode) { if (((TerminalNode) ctx.getChild(idx)).getSymbol().getType() == ALL) { distinct = false; idx++; } } Query_primaryContext queryPrimaryContext = (Query_primaryContext) ctx.getChild(idx); Expr right = visitQuery_primary(queryPrimaryContext); left = current; current = new SetOperation(OpType.Intersect, left, right, distinct); i += idx; } } return current; }
current = new SetOperation(operatorType, left, right, distinct);
current = new SetOperation(operatorType, left, right, distinct);