@Override public void visit(EvalNode node) { if (node.type == EvalType.FIELD) { FieldEval field = (FieldEval) node; if (field.getColumnName().equals(findColumn) || field.getName().equals(findColumn)) { field.replaceColumnRef(toBeChanged); } } } }
@Override public void visit(EvalNode node) { if (node.type == EvalType.FIELD) { FieldEval field = (FieldEval) node; if (field.getColumnName().equals(findColumn) || field.getName().equals(findColumn)) { field.replaceColumnRef(toBeChanged); } } } }
/** * Adds an expression without any name. It returns an automatically * generated name. It can be also used for referring this expression. */ public String add(EvalNode evalNode) throws DuplicateColumnException { String name; if (evalNode.getType() == EvalType.FIELD) { FieldEval fieldEval = (FieldEval) evalNode; if (nameToIdBiMap.containsKey(fieldEval.getName())) { int refId = nameToIdBiMap.get(fieldEval.getName()); return getPrimaryName(refId); } } if (idToEvalBiMap.inverse().containsKey(evalNode)) { int refId = idToEvalBiMap.inverse().get(evalNode); return getPrimaryName(refId); } if (evalNode.getType() == EvalType.FIELD) { FieldEval fieldEval = (FieldEval) evalNode; name = fieldEval.getName(); } else { name = plan.generateUniqueColumnName(evalNode); } return add(name, evalNode); }
/** * Adds an expression without any name. It returns an automatically * generated name. It can be also used for referring this expression. */ public String add(EvalNode evalNode) throws DuplicateColumnException { String name; if (evalNode.getType() == EvalType.FIELD) { FieldEval fieldEval = (FieldEval) evalNode; if (nameToIdBiMap.containsKey(fieldEval.getName())) { int refId = nameToIdBiMap.get(fieldEval.getName()); return getPrimaryName(refId); } } if (idToEvalBiMap.inverse().containsKey(evalNode)) { int refId = idToEvalBiMap.inverse().get(evalNode); return getPrimaryName(refId); } if (evalNode.getType() == EvalType.FIELD) { FieldEval fieldEval = (FieldEval) evalNode; name = fieldEval.getName(); } else { name = plan.generateUniqueColumnName(evalNode); } return add(name, evalNode); }
@Override public EvalNode optimize(LogicalPlanner.PlanContext context, EvalNode evalNode) { if (evalNode.getType() == EvalType.FIELD) { FieldEval fieldEval = (FieldEval) evalNode; // if a reference points to a const value if (context.getQueryBlock().isConstReference(fieldEval.getName())) { return context.getQueryBlock().getConstByReference(fieldEval.getName()); } else { return evalNode; // otherwise, it just returns. } } else { return visit(context, evalNode, new Stack<>()); } }
@Override public EvalNode optimize(LogicalPlanner.PlanContext context, EvalNode evalNode) { if (evalNode.getType() == EvalType.FIELD) { FieldEval fieldEval = (FieldEval) evalNode; // if a reference points to a const value if (context.getQueryBlock().isConstReference(fieldEval.getName())) { return context.getQueryBlock().getConstByReference(fieldEval.getName()); } else { return evalNode; // otherwise, it just returns. } } else { return visit(context, evalNode, new Stack<EvalNode>()); } }
@Override public EvalNode visitUnaryEval(LogicalPlanner.PlanContext context, UnaryEval unaryEval, Stack<EvalNode> stack) { stack.push(unaryEval); if (unaryEval.getChild().getType() == EvalType.FIELD) { FieldEval fieldEval = (FieldEval) unaryEval.getChild(); if (context.getQueryBlock().isConstReference(fieldEval.getName())) { unaryEval.setChild(context.getQueryBlock().getConstByReference(fieldEval.getName())); stack.pop(); return unaryEval; } } visit(context, unaryEval.getChild(), stack); stack.pop(); return unaryEval; }
@Override public EvalNode visitUnaryEval(LogicalPlanner.PlanContext context, UnaryEval unaryEval, Stack<EvalNode> stack) { stack.push(unaryEval); if (unaryEval.getChild().getType() == EvalType.FIELD) { FieldEval fieldEval = (FieldEval) unaryEval.getChild(); if (context.getQueryBlock().isConstReference(fieldEval.getName())) { unaryEval.setChild(context.getQueryBlock().getConstByReference(fieldEval.getName())); stack.pop(); return unaryEval; } } visit(context, unaryEval.getChild(), stack); stack.pop(); return unaryEval; }
@Override public EvalNode visitBinaryEval(LogicalPlanner.PlanContext context, Stack<EvalNode> stack, BinaryEval binaryEval) { stack.push(binaryEval); for (int i = 0; i < 2; i++) { if (binaryEval.getChild(i).getType() == EvalType.FIELD) { FieldEval fieldEval = (FieldEval) binaryEval.getChild(i); if (context.getQueryBlock().isConstReference(fieldEval.getName())) { binaryEval.setChild(i, context.getQueryBlock().getConstByReference(fieldEval.getName())); continue; } } visit(context, binaryEval.getChild(i), stack); } stack.pop(); return binaryEval; }
@Override public EvalNode visitBinaryEval(LogicalPlanner.PlanContext context, Stack<EvalNode> stack, BinaryEval binaryEval) { stack.push(binaryEval); for (int i = 0; i < 2; i++) { if (binaryEval.getChild(i).getType() == EvalType.FIELD) { FieldEval fieldEval = (FieldEval) binaryEval.getChild(i); if (context.getQueryBlock().isConstReference(fieldEval.getName())) { binaryEval.setChild(i, context.getQueryBlock().getConstByReference(fieldEval.getName())); continue; } } visit(context, binaryEval.getChild(i), stack); } stack.pop(); return binaryEval; }
@Override public EvalNode visitFuncCall(LogicalPlanner.PlanContext context, FunctionEval function, Stack<EvalNode> stack) { stack.push(function); for (int i = 0; i < function.getArgs().length; i++) { if (function.getArgs()[i].getType() == EvalType.FIELD) { FieldEval fieldEval = (FieldEval) function.getArgs()[i]; if (context.getQueryBlock().isConstReference(fieldEval.getName())) { function.setArg(i, context.getQueryBlock().getConstByReference(fieldEval.getName())); continue; } } visit(context, function.getArgs()[i], stack); } stack.pop(); return function; } }
@Override public EvalNode visitFuncCall(LogicalPlanner.PlanContext context, FunctionEval function, Stack<EvalNode> stack) { stack.push(function); for (int i = 0; i < function.getArgs().length; i++) { if (function.getArgs()[i].getType() == EvalType.FIELD) { FieldEval fieldEval = (FieldEval) function.getArgs()[i]; if (context.getQueryBlock().isConstReference(fieldEval.getName())) { function.setArg(i, context.getQueryBlock().getConstByReference(fieldEval.getName())); continue; } } visit(context, function.getArgs()[i], stack); } stack.pop(); return function; } }
public static DataType getDomainByExpr(Schema inputSchema, EvalNode expr) { switch (expr.getType()) { case AND: case OR: case EQUAL: case NOT_EQUAL: case LTH: case LEQ: case GTH: case GEQ: case PLUS: case MINUS: case MULTIPLY: case DIVIDE: case CONST: case FUNCTION: return expr.getValueType(); case FIELD: FieldEval fieldEval = (FieldEval) expr; return inputSchema.getColumn(fieldEval.getName()).getDataType(); default: throw new TajoInternalError("Unknown expr type: " + expr.getType().toString()); } }
public static DataType getDomainByExpr(Schema inputSchema, EvalNode expr) { switch (expr.getType()) { case AND: case OR: case EQUAL: case NOT_EQUAL: case LTH: case LEQ: case GTH: case GEQ: case PLUS: case MINUS: case MULTIPLY: case DIVIDE: case CONST: case FUNCTION: return TypeConverter.convert(expr.getValueType()).getDataType(); case FIELD: FieldEval fieldEval = (FieldEval) expr; return inputSchema.getColumn(fieldEval.getName()).getDataType(); default: throw new TajoInternalError("Unknown expr type: " + expr.getType().toString()); } }
FieldEval grpKeyEvalNode = target.getEvalTree(); if (!groupbyNode.getInSchema().contains(grpKeyEvalNode.getColumnRef())) { throwCannotEvaluateException(projectable, grpKeyEvalNode.getName());
FieldEval grpKeyEvalNode = target.getEvalTree(); if (!groupbyNode.getInSchema().contains(grpKeyEvalNode.getColumnRef())) { throwCannotEvaluateException(projectable, grpKeyEvalNode.getName());