Updated Branches:
  refs/heads/master 651b3e9fd -> 9d3e0a44f

DRILL-195 Updates to Antlr expression parser for 'or', 'and' and supporting 
function implementations.


Project: http://git-wip-us.apache.org/repos/asf/incubator-drill/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-drill/commit/12634dca
Tree: http://git-wip-us.apache.org/repos/asf/incubator-drill/tree/12634dca
Diff: http://git-wip-us.apache.org/repos/asf/incubator-drill/diff/12634dca

Branch: refs/heads/master
Commit: 12634dca11aa685d51f335b9e8a720c9366369f8
Parents: 651b3e9
Author: Jacques Nadeau <[email protected]>
Authored: Sun Sep 1 16:50:20 2013 -0700
Committer: Jacques Nadeau <[email protected]>
Committed: Sun Sep 1 16:50:20 2013 -0700

----------------------------------------------------------------------
 .../drill/common/expression/parser/ExprLexer.g  | 10 ++---
 .../drill/common/expression/parser/ExprParser.g |  6 +--
 .../drill/exec/expr/fn/impl/BitFunctions.java   | 41 ++++++++++++++++++++
 3 files changed, 48 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/12634dca/sandbox/prototype/common/src/main/antlr3/org/apache/drill/common/expression/parser/ExprLexer.g
----------------------------------------------------------------------
diff --git 
a/sandbox/prototype/common/src/main/antlr3/org/apache/drill/common/expression/parser/ExprLexer.g
 
b/sandbox/prototype/common/src/main/antlr3/org/apache/drill/common/expression/parser/ExprLexer.g
index efc2488..76da965 100644
--- 
a/sandbox/prototype/common/src/main/antlr3/org/apache/drill/common/expression/parser/ExprLexer.g
+++ 
b/sandbox/prototype/common/src/main/antlr3/org/apache/drill/common/expression/parser/ExprLexer.g
@@ -36,12 +36,10 @@ Case     : 'case';
 When     : 'when';
 
 
-Or       : '||';
-And      : '&&';
-Equals   : '==';
-Equals2   : '=';
-NEquals  : '<>';
-NEquals2 : '!=';
+Or       : '||' | 'or' | 'OR' | 'Or';
+And      : '&&' | 'and' | 'AND' ;
+Equals   : '==' | '=';
+NEquals  : '<>' | '!=';
 GTEquals : '>=';
 LTEquals : '<=';
 Caret      : '^';

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/12634dca/sandbox/prototype/common/src/main/antlr3/org/apache/drill/common/expression/parser/ExprParser.g
----------------------------------------------------------------------
diff --git 
a/sandbox/prototype/common/src/main/antlr3/org/apache/drill/common/expression/parser/ExprParser.g
 
b/sandbox/prototype/common/src/main/antlr3/org/apache/drill/common/expression/parser/ExprParser.g
index da873ea..5892559 100644
--- 
a/sandbox/prototype/common/src/main/antlr3/org/apache/drill/common/expression/parser/ExprParser.g
+++ 
b/sandbox/prototype/common/src/main/antlr3/org/apache/drill/common/expression/parser/ExprParser.g
@@ -131,7 +131,7 @@ orExpr returns [LogicalExpression e]
            $e = registry.createExpression("||", p, exprs);
          }
        }
-  :  a1=andExpr { exprs.add($a1.e); p = pos( $a1.start );} (Or^ a2=andExpr { 
exprs.add($a2.e); })*
+  :  a1=andExpr { exprs.add($a1.e); p = pos( $a1.start );} (Or a2=andExpr { 
exprs.add($a2.e); })*
   ;
 
 andExpr returns [LogicalExpression e]
@@ -146,7 +146,7 @@ andExpr returns [LogicalExpression e]
            $e = registry.createExpression("&&", p, exprs);
          }
        }
-  :  e1=equExpr { exprs.add($e1.e); p = pos( $e1.start );  } (And^ e2=equExpr 
{ exprs.add($e2.e);  })*
+  :  e1=equExpr { exprs.add($e1.e); p = pos( $e1.start );  } ( And e2=equExpr 
{ exprs.add($e2.e);  })*
   ;
 
 equExpr returns [LogicalExpression e]
@@ -159,7 +159,7 @@ equExpr returns [LogicalExpression e]
          $e = registry.createByOp(exprs, p, cmps);
        }
   :  r1=relExpr { exprs.add($r1.e); p = pos( $r1.start );
-    } ( cmpr= (Equals2 | Equals | NEquals | NEquals2 ) r2=relExpr 
{exprs.add($r2.e); cmps.add($cmpr.text); })*
+    } ( cmpr= ( Equals | NEquals ) r2=relExpr {exprs.add($r2.e); 
cmps.add($cmpr.text); })*
   ;
 
 relExpr returns [LogicalExpression e]

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/12634dca/sandbox/prototype/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/BitFunctions.java
----------------------------------------------------------------------
diff --git 
a/sandbox/prototype/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/BitFunctions.java
 
b/sandbox/prototype/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/BitFunctions.java
new file mode 100644
index 0000000..f86a463
--- /dev/null
+++ 
b/sandbox/prototype/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/BitFunctions.java
@@ -0,0 +1,41 @@
+package org.apache.drill.exec.expr.fn.impl;
+
+import org.apache.drill.exec.expr.DrillSimpleFunc;
+import org.apache.drill.exec.expr.annotations.FunctionTemplate;
+import org.apache.drill.exec.expr.annotations.FunctionTemplate.FunctionScope;
+import org.apache.drill.exec.expr.annotations.FunctionTemplate.NullHandling;
+import org.apache.drill.exec.expr.annotations.Output;
+import org.apache.drill.exec.expr.annotations.Param;
+import org.apache.drill.exec.expr.holders.BitHolder;
+import org.apache.drill.exec.record.RecordBatch;
+
+public class BitFunctions {
+  
+  @FunctionTemplate(name = "or", scope = FunctionScope.SIMPLE, nulls = 
NullHandling.NULL_IF_NULL)
+  public static class BitOr implements DrillSimpleFunc {
+
+    @Param BitHolder left;
+    @Param BitHolder right;
+    @Output BitHolder out;
+
+    public void setup(RecordBatch incoming) {}
+
+    public void eval() {
+      out.value = left.value | right.value;
+    }
+  }  
+
+  @FunctionTemplate(name = "and", scope = FunctionScope.SIMPLE, nulls = 
NullHandling.NULL_IF_NULL)
+  public static class BitAnd implements DrillSimpleFunc {
+
+    @Param BitHolder left;
+    @Param BitHolder right;
+    @Output BitHolder out;
+
+    public void setup(RecordBatch incoming) {}
+
+    public void eval() {
+      out.value = left.value & right.value;
+    }
+  }  
+}

Reply via email to