public int hashCode() { return this.expr.getName().hashCode(); }
public int hashCode() { return this.expr.getName().hashCode(); }
/** * It generates an unique column name from EvalNode. It is usually used for an expression or predicate without * a specified name (i.e., alias). */ public String generateUniqueColumnName(EvalNode evalNode) { String prefix = evalNode.getName(); return attachSeqIdToGeneratedColumnName(prefix).toLowerCase(); }
/** * It generates an unique column name from EvalNode. It is usually used for an expression or predicate without * a specified name (i.e., alias). */ public String generateUniqueColumnName(EvalNode evalNode) { String prefix = evalNode.getName(); return attachSeqIdToGeneratedColumnName(prefix).toLowerCase(); }
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); } }
@Override public Column apply(@javax.annotation.Nullable Target target) { return new Column(target.hasAlias() ? target.getAlias() : target.getEvalTree().getName(), getDomainByExpr(inputSchema, target.getEvalTree())); } }).build();
public Target getTarget(String name) { if (!nameToIdBiMap.containsKey(name)) { throw new RuntimeException("No Such target name: " + name); } int id = nameToIdBiMap.get(name); EvalNode evalNode = idToEvalBiMap.get(id); // if it is a constant value, just returns a constant because it can be evaluated everywhere. if (evalNode.getType() == EvalType.CONST) { return new Target(evalNode, name); } // if a name is not the primary name, it means that its expression may be already evaluated and // can just refer a value. Consider an example as follows: // // select l_orderkey + 1 as total1, l_orderkey + 1 as total2 from lineitem // // In this case, total2 will meet the following condition. Then, total2 can // just refer the result of total1 rather than calculating l_orderkey + 1. if (!isPrimaryName(id, name) && isEvaluated(getPrimaryName(id))) { evalNode = new FieldEval(getPrimaryName(id), evalNode.getValueType()); } // if it is a column reference itself, just returns a column reference without any alias. if (evalNode.getType() == EvalType.FIELD && evalNode.getName().equals(name)) { return new Target((FieldEval)evalNode); } else { // otherwise, it returns an expression. return new Target(evalNode, name); } }
public Target getTarget(String name) { if (!nameToIdBiMap.containsKey(name)) { throw new RuntimeException("No Such target name: " + name); } int id = nameToIdBiMap.get(name); EvalNode evalNode = idToEvalBiMap.get(id); // if it is a constant value, just returns a constant because it can be evaluated everywhere. if (evalNode.getType() == EvalType.CONST) { return new Target(evalNode, name); } // if a name is not the primary name, it means that its expression may be already evaluated and // can just refer a value. Consider an example as follows: // // select l_orderkey + 1 as total1, l_orderkey + 1 as total2 from lineitem // // In this case, total2 will meet the following condition. Then, total2 can // just refer the result of total1 rather than calculating l_orderkey + 1. if (!isPrimaryName(id, name) && isEvaluated(getPrimaryName(id))) { evalNode = new FieldEval(getPrimaryName(id), evalNode.getValueType()); } // if it is a column reference itself, just returns a column reference without any alias. if (evalNode.getType() == EvalType.FIELD && evalNode.getName().equals(name)) { return new Target((FieldEval)evalNode); } else { // otherwise, it returns an expression. return new Target(evalNode, name); } }
public static Schema getSchemaByTargets(Schema inputSchema, Target[] targets) { Schema schema = new Schema(); for (Target target : targets) { schema.addColumn( target.hasAlias() ? target.getAlias() : target.getEvalTree().getName(), getDomainByExpr(inputSchema, target.getEvalTree())); } return schema; }
public static Schema targetToSchema(Target[] targets) { Schema schema = new Schema(); for (Target t : targets) { DataType type = t.getEvalTree().getValueType(); String name; if (t.hasAlias()) { name = t.getAlias(); } else { name = t.getEvalTree().getName(); } if (!schema.containsByQualifiedName(name)) { schema.addColumn(name, type); } } return schema; }
Target originAggFunctionTarget = groupbyNode.getTargets().get(originalGroupingColumns.size() + aggIdx); Target aggFunctionTarget = new Target(new FieldEval(originAggFunctionTarget.getEvalTree().getName(), aggFunction.getValueType()));
Target originAggFunctionTarget = groupbyNode.getTargets()[originalGroupingColumns.size() + aggIdx]; Target aggFunctionTarget = new Target(new FieldEval(originAggFunctionTarget.getEvalTree().getName(), aggFunction.getValueType()));
public static Schema targetToSchema(List<Target> targets) { SchemaBuilder schema = SchemaBuilder.uniqueNameBuilder(); for (Target t : targets) { Type type = t.getEvalTree().getValueType(); // hack to avoid projecting record type. if (type.isStruct()) { throw new TajoRuntimeException(new NotImplementedException("record projection")); } String name; if (t.hasAlias()) { name = t.getAlias(); } else { name = t.getEvalTree().getName(); } schema.add(name, TypeConverter.convert(type)); } return schema.build(); }
target.setAlias(target.getEvalTree().getName());
@Test public final void testGetContainExprs() throws CloneNotSupportedException, TajoException { Expr expr = analyzer.parse(QUERIES[1]); LogicalPlan plan = planner.createPlan(defaultContext, expr, true); List<Target> targets = plan.getRootBlock().getRawTargets(); Column col1 = new Column("default.people.score", TajoDataTypes.Type.INT4); Collection<EvalNode> exprs = EvalTreeUtil.getContainExpr(targets.get(0).getEvalTree(), col1); BinaryEval node = (BinaryEval) exprs.iterator().next(); assertEquals(EvalType.LTH, node.getType()); assertEquals(EvalType.PLUS, node.getLeftExpr().getType()); assertEquals(new ConstEval(DatumFactory.createInt4(4)), node.getRightExpr()); Column col2 = new Column("default.people.age", TajoDataTypes.Type.INT4); exprs = EvalTreeUtil.getContainExpr(targets.get(1).getEvalTree(), col2); node = (BinaryEval) exprs.iterator().next(); assertEquals(EvalType.GTH, node.getType()); assertEquals("default.people.age", node.getLeftExpr().getName()); assertEquals(new ConstEval(DatumFactory.createInt4(5)), node.getRightExpr()); }
target.setAlias(target.getEvalTree().getName());