Author: gates Date: Mon May 19 07:30:30 2008 New Revision: 657836 URL: http://svn.apache.org/viewvc?rev=657836&view=rev Log: PIG-159 Santhosh's addition of explicit casts to the grammar.
Modified: incubator/pig/branches/types/src/org/apache/pig/impl/logicalLayer/parser/QueryParser.jjt incubator/pig/branches/types/test/org/apache/pig/test/TestLogicalPlanBuilder.java Modified: incubator/pig/branches/types/src/org/apache/pig/impl/logicalLayer/parser/QueryParser.jjt URL: http://svn.apache.org/viewvc/incubator/pig/branches/types/src/org/apache/pig/impl/logicalLayer/parser/QueryParser.jjt?rev=657836&r1=657835&r2=657836&view=diff ============================================================================== --- incubator/pig/branches/types/src/org/apache/pig/impl/logicalLayer/parser/QueryParser.jjt (original) +++ incubator/pig/branches/types/src/org/apache/pig/impl/logicalLayer/parser/QueryParser.jjt Mon May 19 07:30:30 2008 @@ -463,6 +463,8 @@ splitOp = new LOSplit(lp, input.getOperatorKey(), new ArrayList<LogicalOperator>(), new HashMap<String,LogicalPlan>()); lp.add(splitOp); log.debug("Adding operator " + splitOp.getClass().getName() + " to the logical plan"); + lp.connect(input, splitOp); + log.debug("Connected alias: " + input.getAlias() + " operator " + input.getClass().getName() + " to operator " + splitOp.getClass().getName()); } alias = <IDENTIFIER> <IF> cond = PCond(input.getSchema(), null, condPlan = new LogicalPlan(), input) { @@ -881,8 +883,6 @@ } } - - LogicalOperator CogroupClause(LogicalPlan lp) : { CogroupInput gi; @@ -1488,9 +1488,11 @@ } { ( - lhs = UnaryExpr(over,specs,lp,input) +// lhs = UnaryExpr(over,specs,lp,input) + lhs = CastExpr(over,specs,lp,input) ( - ( t = <STAR> | t = "/" | t = "%") rhs = UnaryExpr(over,specs,lp,input) +// ( t = <STAR> | t = "/" | t = "%") rhs = UnaryExpr(over,specs,lp,input) + ( t = <STAR> | t = "/" | t = "%") rhs = CastExpr(over,specs,lp,input) { assertAtomic(lhs,true); assertAtomic(rhs,true); @@ -1517,6 +1519,32 @@ } } +ExpressionOperator CastExpr(Schema over, Map<String, LogicalOperator> specs,LogicalPlan lp,LogicalOperator input) : +{ + byte type = DataType.BYTEARRAY; + ExpressionOperator cast; + ExpressionOperator exprOp; + boolean castRequired = false; + log.trace("Entering Cast"); +} +{ + [LOOKAHEAD(2)"(" type = Type() {castRequired = true;}")"] exprOp = UnaryExpr(over, specs, lp, input) + { + if(castRequired) { + cast = new LOCast(lp, new OperatorKey(scope, getNextId()), exprOp, type); + lp.add(cast); + log.debug("Added operator " + cast.getClass().getName() + " " + cast + " to logical plan " + lp); + lp.connect(exprOp, cast); + log.debug("Connected operator " + exprOp.getClass().getName() + " " + exprOp + " to " + cast + " logical plan " + lp); + log.trace("Exiting Cast"); + return cast; + } else { + log.trace("Exiting Cast"); + return exprOp; + } + } +} + ExpressionOperator UnaryExpr(Schema over, Map<String, LogicalOperator> specs, LogicalPlan lp, LogicalOperator input) : { ExpressionOperator expr; @@ -1539,7 +1567,8 @@ log.trace("Entering NegativeExpr"); } { - "-" c1=UnaryExpr(over,specs,lp,input) +// "-" c1=UnaryExpr(over,specs,lp,input) + "-" c1=CastExpr(over,specs,lp,input) { ExpressionOperator eOp = new LONegative(lp, new OperatorKey(scope, getNextId()), c1); lp.add(eOp); @@ -1550,7 +1579,6 @@ } } - ExpressionOperator BaseEvalSpec(Schema over, Map<String, LogicalOperator> specs, LogicalPlan lp, LogicalOperator input) : { Modified: incubator/pig/branches/types/test/org/apache/pig/test/TestLogicalPlanBuilder.java URL: http://svn.apache.org/viewvc/incubator/pig/branches/types/test/org/apache/pig/test/TestLogicalPlanBuilder.java?rev=657836&r1=657835&r2=657836&view=diff ============================================================================== --- incubator/pig/branches/types/test/org/apache/pig/test/TestLogicalPlanBuilder.java (original) +++ incubator/pig/branches/types/test/org/apache/pig/test/TestLogicalPlanBuilder.java Mon May 19 07:30:30 2008 @@ -843,6 +843,28 @@ } } + @Test + public void testQuery71() { + buildPlan("split (load 'a') into x if $0 > '7', y if $0 < '7';"); + buildPlan("b = foreach x generate $0;"); + buildPlan("c = foreach y generate $1;"); + } + + @Test + public void testQuery72() { + buildPlan("split (load 'a') into x if $0 > '7', y if $0 < '7';"); + buildPlan("b = foreach x generate (integer)$0;"); + buildPlan("c = foreach y generate (bag)$1;"); + buildPlan("d = foreach y generate (integer)($1/2);"); + } + + @Test + public void testQuery73() { + buildPlan("split (load 'a') into x if $0 > '7', y if $0 < '7';"); + buildPlan("b = filter x by $0 matches '^fred.*';"); + buildPlan("c = foreach y generate $0, ($0 matches 'yuri.*' ? $1 - 10 : $1);"); + } + // Helper Functions // ================= public LogicalPlan buildPlan(String query) {