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) {


Reply via email to