public Target(FieldEval fieldEval) { this.expr = fieldEval; this.column = fieldEval.getColumnRef(); }
public Target(FieldEval fieldEval) { this.expr = fieldEval; this.column = fieldEval.getColumnRef(); }
@Override public void visit(EvalNode node) { if (node.getType() == EvalType.FIELD) { field = (FieldEval) node; columnSet.add(field.getColumnRef()); } }
@Override public void visit(EvalNode node) { if (node.getType() == EvalType.FIELD) { field = (FieldEval) node; colList.add(field.getColumnRef()); } }
@Override public void visit(EvalNode node) { if (node.getType() == EvalType.FIELD) { field = (FieldEval) node; colList.add(field.getColumnRef()); } }
@Override public void visit(EvalNode node) { if (node.getType() == EvalType.FIELD) { field = (FieldEval) node; columnSet.add(field.getColumnRef()); } }
public Target(final EvalNode eval, final String alias) { this.expr = eval; // force lower case String normalized = alias; // If an expr is a column reference and its alias is equivalent to column name, ignore a given alias. if (eval instanceof FieldEval && eval.getName().equals(normalized)) { column = ((FieldEval) eval).getColumnRef(); } else { column = new Column(normalized, eval.getValueType()); setAlias(alias); } }
public Target(final EvalNode eval, final String alias) { this.expr = eval; // force lower case String normalized = alias; // If an expr is a column reference and its alias is equivalent to column name, ignore a given alias. if (eval instanceof FieldEval && eval.getName().equals(normalized)) { column = ((FieldEval) eval).getColumnRef(); } else { column = new Column(normalized, eval.getValueType()); setAlias(alias); } }
/** * It removes all table names from FieldEvals in targets * * @param sourceTargets The targets to be stripped * @return The stripped targets */ public static List<Target> stripTarget(List<Target> sourceTargets) { List<Target> copy = new ArrayList<>(); for (int i = 0; i < sourceTargets.size(); i++) { try { copy.add((Target) sourceTargets.get(i).clone()); } catch (CloneNotSupportedException e) { throw new InternalError(e.getMessage()); } if (copy.get(i).getEvalTree().getType().equals(EvalType.FIELD)) { FieldEval fieldEval = copy.get(i).getEvalTree(); if (fieldEval.getColumnRef().hasQualifier()) { fieldEval.replaceColumnRef(fieldEval.getColumnName()); } } } return copy; }
@Override public EvalNode visitField(EvalTreeProtoBuilderContext context, FieldEval field, Stack<EvalNode> stack) { PlanProto.EvalNode.Builder builder = createEvalBuilder(context, field); builder.setField(field.getColumnRef().getProto()); context.treeBuilder.addNodes(builder); return field; }
@Override public EvalNode visitField(EvalTreeProtoBuilderContext context, FieldEval field, Stack<EvalNode> stack) { PlanProto.EvalNode.Builder builder = createEvalBuilder(context, field); builder.setField(field.getColumnRef().getProto()); context.treeBuilder.addNodes(builder); return field; }
/** * It removes all table names from FieldEvals in targets * * @param sourceTargets The targets to be stripped * @return The stripped targets */ public static Target[] stripTarget(Target[] sourceTargets) { Target[] copy = new Target[sourceTargets.length]; for (int i = 0; i < sourceTargets.length; i++) { try { copy[i] = (Target) sourceTargets[i].clone(); } catch (CloneNotSupportedException e) { throw new InternalError(e.getMessage()); } if (copy[i].getEvalTree().getType() == EvalType.FIELD) { FieldEval fieldEval = copy[i].getEvalTree(); if (fieldEval.getColumnRef().hasQualifier()) { fieldEval.replaceColumnRef(fieldEval.getColumnName()); } } } return copy; }
protected void initializeProjector(Schema actualInSchema){ List<Target> realTargets; if (plan.getTargets() == null) { realTargets = PlannerUtil.schemaToTargets(outSchema); } else { realTargets = plan.getTargets(); } //if all column is selected and there is no have expression, projection can be skipped if (realTargets.size() == inSchema.size()) { for (int i = 0; i < inSchema.size(); i++) { if (realTargets.get(i).getEvalTree() instanceof FieldEval) { FieldEval f = realTargets.get(i).getEvalTree(); if(!f.getColumnRef().equals(inSchema.getColumn(i))) { needProjection = true; break; } } else { needProjection = true; break; } } } else { needProjection = true; } if(needProjection) { projector = new Projector(context, actualInSchema, outSchema, plan.getTargets()); } }
FieldEval rightJoinField = (FieldEval)entry.getKey().getRightExpr(); if (leftJoinField.getColumnRef().getQualifiedName().equals(leftField.getColumnRef().getQualifiedName()) && rightField.getColumnRef().getQualifiedName().equals(rightJoinField.getColumnRef().getQualifiedName())) { qualMap.put(entry.getKey(), Boolean.TRUE); ConstEval rightJoinField = (ConstEval)entry.getKey().getRightExpr(); if (leftJoinField.getColumnRef().getQualifiedName().equals(leftField.getColumnRef().getQualifiedName()) && rightField.getValue().equals(rightJoinField.getValue())) { qualMap.put(entry.getKey(), Boolean.TRUE); RowConstantEval rightJoinField = entry.getKey().getRightExpr(); if (leftJoinField.getColumnRef().getQualifiedName().equals(leftField.getColumnRef().getQualifiedName())) { assertEquals(rightField.getValues().length, rightJoinField.getValues().length); for (int i = 0; i < rightField.getValues().length; i++) {
Column c = ((FieldEval)target.getEvalTree()).getColumnRef(); SortSpec sortSpec = new SortSpec(c, node.getSortKeys()[i].isAscending(), node.getSortKeys()[i].isNullsFirst()); if (!sortSpecs.contains(sortSpec)) {
Column c = ((FieldEval)target.getEvalTree()).getColumnRef(); SortSpec sortSpec = new SortSpec(c, node.getSortKeys()[i].isAscending(), node.getSortKeys()[i].isNullsFirst()); if (!sortSpecs.contains(sortSpec)) {
protected void initializeProjector(Schema actualInSchema){ Target[] realTargets; if (plan.getTargets() == null) { realTargets = PlannerUtil.schemaToTargets(outSchema); } else { realTargets = plan.getTargets(); } //if all column is selected and there is no have expression, projection can be skipped if (realTargets.length == inSchema.size()) { for (int i = 0; i < inSchema.size(); i++) { if (realTargets[i].getEvalTree() instanceof FieldEval) { FieldEval f = realTargets[i].getEvalTree(); if(!f.getColumnRef().equals(inSchema.getColumn(i))) { needProjection = true; break; } } else { needProjection = true; break; } } } else { needProjection = true; } if(needProjection) { projector = new Projector(context, actualInSchema, outSchema, plan.getTargets()); } }
@Test public final void testGetCNF() throws TajoException { // "select score from people where score < 10 and 4 < score " EvalNode node = getRootSelection(QUERIES[5]); EvalNode [] cnf = AlgebraicUtil.toConjunctiveNormalFormArray(node); Column col1 = new Column("default.people.score", TajoDataTypes.Type.INT4); assertEquals(2, cnf.length); BinaryEval first = (BinaryEval) cnf[0]; BinaryEval second = (BinaryEval) cnf[1]; FieldEval field = first.getLeftExpr(); assertEquals(col1, field.getColumnRef()); assertEquals(EvalType.LTH, first.getType()); assertEquals(10, first.getRightExpr().bind(null, null).eval(null).asInt4()); field = second.getRightExpr(); assertEquals(col1, field.getColumnRef()); assertEquals(EvalType.LTH, second.getType()); assertEquals(4, second.getLeftExpr().bind(null, null).eval(null).asInt4()); }
@Test public final void testTranspose() throws TajoException { Column col1 = new Column("default.people.score", TajoDataTypes.Type.INT4); EvalNode node = getRootSelection(QUERIES[3]); // we expect that score < 3 BinaryEval transposed = (BinaryEval) AlgebraicUtil.transpose(node, col1); assertEquals(EvalType.GTH, transposed.getType()); FieldEval field = transposed.getLeftExpr(); assertEquals(col1, field.getColumnRef()); assertEquals(1, transposed.getRightExpr().bind(null, null).eval(null).asInt4()); node = getRootSelection(QUERIES[4]); // we expect that score < 3 transposed = (BinaryEval) AlgebraicUtil.transpose(node, col1); assertEquals(EvalType.LTH, transposed.getType()); field = transposed.getLeftExpr(); assertEquals(col1, field.getColumnRef()); assertEquals(2, transposed.getRightExpr().bind(null, null).eval(null).asInt4()); }
if (groupbyNode.getTargets()[i].getEvalTree().getType() == EvalType.FIELD) { FieldEval grpKeyEvalNode = target.getEvalTree(); if (!groupbyNode.getInSchema().contains(grpKeyEvalNode.getColumnRef())) { throwCannotEvaluateException(projectable, grpKeyEvalNode.getName());