Repository: incubator-drill
Updated Branches:
  refs/heads/master 894037ab6 -> efa3274bd


DRILL-993: Remove redundant comparison in comparison operator generated by 
FreeMarker template.


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

Branch: refs/heads/master
Commit: 27d3e7145a7b1a43015fd4cb745e425443411b8c
Parents: 894037a
Author: Jinfeng Ni <[email protected]>
Authored: Tue Jun 17 15:02:32 2014 -0700
Committer: Jinfeng Ni <[email protected]>
Committed: Wed Jun 18 07:13:16 2014 -0700

----------------------------------------------------------------------
 .../codegen/templates/ComparisonFunctions.java  | 56 ++++++++++--
 .../templates/DateIntervalFunctions.java        | 91 +++++++++-----------
 2 files changed, 94 insertions(+), 53 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/27d3e714/exec/java-exec/src/main/codegen/templates/ComparisonFunctions.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/codegen/templates/ComparisonFunctions.java 
b/exec/java-exec/src/main/codegen/templates/ComparisonFunctions.java
index 9b0028c..b57a37f 100644
--- a/exec/java-exec/src/main/codegen/templates/ComparisonFunctions.java
+++ b/exec/java-exec/src/main/codegen/templates/ComparisonFunctions.java
@@ -141,10 +141,15 @@ public class GCompare${left}${right}{
           break sout;
         }
         </#if>
-        
+
+        <#if type.mode == "var" >
         int cmp;
         <@compareBlock mode=type.mode left=left right=right output="cmp" 
nullCompare=false/>
         out.value = cmp == -1 ? 1 : 0;
+        <#else>
+        out.value = left.value < right.value ? 1 : 0;
+        </#if>
+
         }
       }
   }
@@ -173,9 +178,14 @@ public class GCompare${left}${right}{
         }
         </#if>
         
+        <#if type.mode == "var" >
         int cmp;
         <@compareBlock mode=type.mode left=left right=right output="cmp" 
nullCompare=false/>
         out.value = cmp < 1 ? 1 : 0;
+        <#else>
+        out.value = left.value <= right.value ? 1 : 0;
+        </#if>
+
         }
     }
   }
@@ -204,9 +214,14 @@ public class GCompare${left}${right}{
         }
         </#if>
         
+        <#if type.mode == "var" >
         int cmp;
         <@compareBlock mode=type.mode left=left right=right output="cmp" 
nullCompare=false/>
         out.value = cmp == 1 ? 1 : 0;
+        <#else>
+        out.value = left.value > right.value ? 1 : 0;
+        </#if>
+
         }
     }
   }
@@ -235,9 +250,14 @@ public class GCompare${left}${right}{
         }
         </#if>
         
+        <#if type.mode == "var" >            
         int cmp;
         <@compareBlock mode=type.mode left=left right=right output="cmp" 
nullCompare=false/>
         out.value = cmp > -1 ? 1 : 0;
+        <#else>
+        out.value = left.value >= right.value ? 1 : 0;
+        </#if>
+
         }
       }
   }
@@ -265,10 +285,31 @@ public class GCompare${left}${right}{
             break sout;
           }
           </#if>
-          
-          int cmp;
-          <@compareBlock mode=type.mode left=left right=right output="cmp" 
nullCompare=false/>
-          out.value = cmp == 0 ? 1 : 0;
+        
+          <#if type.mode == "var" >
+outside: 
+        {          
+          if (left.end - left.start == right.end - right.start) {
+            int n = left.end - left.start;
+            int l = left.start;
+            int r = right.start;
+            while (n-- !=0) {
+              byte leftByte = left.buffer.getByte(l++);
+              byte rightByte = right.buffer.getByte(r++);
+              if (leftByte != rightByte) {
+                out.value = 0;
+                break outside;
+              }
+            }
+            out.value = 1;
+          } else {
+            out.value = 0;
+          }
+        } 
+          <#else>
+          out.value = left.value == right.value ? 1 : 0;
+          </#if>
+
         }
       }
   }
@@ -297,9 +338,14 @@ public class GCompare${left}${right}{
         }
         </#if>
         
+        <#if type.mode == "var" >            
         int cmp;
         <@compareBlock mode=type.mode left=left right=right output="cmp" 
nullCompare=false/>
         out.value = cmp == 0 ? 0 : 1;
+        <#else>
+        out.value = left.value != right.value ? 1 : 0;
+        </#if>
+        
         }
         
       }

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/27d3e714/exec/java-exec/src/main/codegen/templates/DateIntervalFunctions.java
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/main/codegen/templates/DateIntervalFunctions.java 
b/exec/java-exec/src/main/codegen/templates/DateIntervalFunctions.java
index 7afbcfc..a4bea61 100644
--- a/exec/java-exec/src/main/codegen/templates/DateIntervalFunctions.java
+++ b/exec/java-exec/src/main/codegen/templates/DateIntervalFunctions.java
@@ -27,6 +27,8 @@
 
 package org.apache.drill.exec.expr.fn.impl;
 
+import javax.xml.ws.Holder;
+
 import org.apache.drill.exec.expr.DrillSimpleFunc;
 import org.apache.drill.exec.expr.annotations.FunctionTemplate;
 import org.apache.drill.exec.expr.annotations.FunctionTemplate.NullHandling;
@@ -63,9 +65,7 @@ public class GCompare${type.name}Functions {
       public void setup(RecordBatch b) {}
 
       public void eval() {
-
-          int cmp = (left.value > right.value) ? 1 : ((left.value < 
right.value) ? -1 : 0);
-          out.value = (cmp == -1) ? 1 : 0;
+        out.value = left.value < right.value ? 1 : 0;
       }
   }
 
@@ -79,9 +79,7 @@ public class GCompare${type.name}Functions {
       public void setup(RecordBatch b) {}
 
       public void eval() {
-
-          int cmp = (left.value > right.value) ? 1 : ((left.value < 
right.value) ? -1 : 0);
-          out.value = (cmp < 1) ? 1 : 0;
+        out.value = left.value <= right.value ? 1 : 0;
     }
   }
 
@@ -95,9 +93,7 @@ public class GCompare${type.name}Functions {
       public void setup(RecordBatch b) {}
 
       public void eval() {
-
-          int cmp = (left.value > right.value) ? 1 : ((left.value < 
right.value) ? -1 : 0);
-          out.value = (cmp == 1) ? 1 : 0;
+        out.value = left.value > right.value ? 1 : 0;
     }
   }
 
@@ -111,8 +107,7 @@ public class GCompare${type.name}Functions {
       public void setup(RecordBatch b) {}
 
       public void eval() {
-         int cmp = (left.value > right.value) ? 1 : ((left.value < 
right.value) ? -1 : 0);
-          out.value = (cmp > -1) ? 1 : 0;
+        out.value = left.value >= right.value ? 1 : 0;
       }
   }
 
@@ -126,9 +121,7 @@ public class GCompare${type.name}Functions {
       public void setup(RecordBatch b) {}
 
       public void eval() {
-
-          int cmp = (left.value > right.value) ? 1 : ((left.value < 
right.value) ? -1 : 0);
-          out.value = (cmp == 0) ? 1 : 0;
+        out.value = left.value == right.value ? 1 : 0;
       }
   }
 
@@ -142,8 +135,7 @@ public class GCompare${type.name}Functions {
       public void setup(RecordBatch b) {}
 
       public void eval() {
-          int cmp = (left.value > right.value) ? 1 : ((left.value < 
right.value) ? -1 : 0);
-          out.value = (cmp != 0) ? 1 : 0;
+        out.value = left.value != right.value ? 1 : 0;
       }
   }
 
@@ -174,6 +166,23 @@ outside: {
     }
 </#macro>
 
+<#macro intervalConvertBlock left right leftMonths leftDays leftMillis 
rightMonths rightDays rightMillis>
+        org.joda.time.MutableDateTime leftDate  = new 
org.joda.time.MutableDateTime(1970, 1, 1, 0, 0, 0, 0, 
org.joda.time.DateTimeZone.UTC);
+        org.joda.time.MutableDateTime rightDate = new 
org.joda.time.MutableDateTime(1970, 1, 1, 0, 0, 0, 0, 
org.joda.time.DateTimeZone.UTC);
+
+        // Left and right date have the same starting point (epoch), add the 
interval period and compare the two
+        leftDate.addMonths(${leftMonths});
+        leftDate.addDays(${leftDays});
+        leftDate.add(${leftMillis});
+
+        rightDate.addMonths(${rightMonths});
+        rightDate.addDays(${rightDays});
+        rightDate.add(${rightMillis});
+
+        long leftMS  = leftDate.getMillis();
+        long rightMS = rightDate.getMillis();
+</#macro>
+
 <@pp.changeOutputFile 
name="/org/apache/drill/exec/expr/fn/impl/GCompare${type.name}Functions.java" />
 
 <#include "/@includes/license.ftl" />
@@ -222,15 +231,13 @@ public class GCompare${type.name}Functions {
 
       public void eval() {
 
-          int cmp;
-
           <#if type.name == "Interval">
-          <@intervalCompareBlock left="left" right="right" 
leftMonths="left.months" leftDays="left.days" leftMillis="left.milliSeconds" 
rightMonths="right.months" rightDays="right.days" 
rightMillis="right.milliSeconds" output="cmp"/>
+          <@intervalConvertBlock left="left" right="right" 
leftMonths="left.months" leftDays="left.days" leftMillis="left.milliSeconds" 
rightMonths="right.months" rightDays="right.days" 
rightMillis="right.milliSeconds"/>
           <#else>
-          <@intervalCompareBlock left="left" right="right" leftMonths="0" 
leftDays="left.days" leftMillis="left.milliSeconds" rightMonths="0" 
rightDays="right.days" rightMillis="right.milliSeconds" output="cmp"/>
+          <@intervalConvertBlock left="left" right="right" leftMonths="0" 
leftDays="left.days" leftMillis="left.milliSeconds" rightMonths="0" 
rightDays="right.days" rightMillis="right.milliSeconds"/>
           </#if>
 
-          out.value = (cmp == -1) ? 1 : 0;
+          out.value = leftMS < rightMS ? 1 : 0;
       }
   }
 
@@ -245,15 +252,13 @@ public class GCompare${type.name}Functions {
 
       public void eval() {
 
-          int cmp;
-
           <#if type.name == "Interval">
-          <@intervalCompareBlock left="left" right="right" 
leftMonths="left.months" leftDays="left.days" leftMillis="left.milliSeconds" 
rightMonths="right.months" rightDays="right.days" 
rightMillis="right.milliSeconds" output="cmp"/>
+          <@intervalConvertBlock left="left" right="right" 
leftMonths="left.months" leftDays="left.days" leftMillis="left.milliSeconds" 
rightMonths="right.months" rightDays="right.days" 
rightMillis="right.milliSeconds"/>
           <#else>
-          <@intervalCompareBlock left="left" right="right" leftMonths="0" 
leftDays="left.days" leftMillis="left.milliSeconds" rightMonths="0" 
rightDays="right.days" rightMillis="right.milliSeconds" output="cmp"/>
+          <@intervalConvertBlock left="left" right="right" leftMonths="0" 
leftDays="left.days" leftMillis="left.milliSeconds" rightMonths="0" 
rightDays="right.days" rightMillis="right.milliSeconds"/>
           </#if>
 
-          out.value = (cmp < 1) ? 1 : 0;
+          out.value = leftMS <= rightMS ? 1 : 0;
     }
   }
 
@@ -268,15 +273,13 @@ public class GCompare${type.name}Functions {
 
       public void eval() {
 
-          int cmp;
-
           <#if type.name == "Interval">
-          <@intervalCompareBlock left="left" right="right" 
leftMonths="left.months" leftDays="left.days" leftMillis="left.milliSeconds" 
rightMonths="right.months" rightDays="right.days" 
rightMillis="right.milliSeconds" output="cmp"/>
+          <@intervalConvertBlock left="left" right="right" 
leftMonths="left.months" leftDays="left.days" leftMillis="left.milliSeconds" 
rightMonths="right.months" rightDays="right.days" 
rightMillis="right.milliSeconds"/>
           <#else>
-          <@intervalCompareBlock left="left" right="right" leftMonths="0" 
leftDays="left.days" leftMillis="left.milliSeconds" rightMonths="0" 
rightDays="right.days" rightMillis="right.milliSeconds" output="cmp"/>
+          <@intervalConvertBlock left="left" right="right" leftMonths="0" 
leftDays="left.days" leftMillis="left.milliSeconds" rightMonths="0" 
rightDays="right.days" rightMillis="right.milliSeconds"/>
           </#if>
 
-          out.value = (cmp == 1) ? 1 : 0;
+          out.value = leftMS > rightMS ? 1 : 0;
     }
   }
 
@@ -291,15 +294,13 @@ public class GCompare${type.name}Functions {
 
       public void eval() {
 
-          int cmp;
-
           <#if type.name == "Interval">
-          <@intervalCompareBlock left="left" right="right" 
leftMonths="left.months" leftDays="left.days" leftMillis="left.milliSeconds" 
rightMonths="right.months" rightDays="right.days" 
rightMillis="right.milliSeconds" output="cmp"/>
+          <@intervalConvertBlock left="left" right="right" 
leftMonths="left.months" leftDays="left.days" leftMillis="left.milliSeconds" 
rightMonths="right.months" rightDays="right.days" 
rightMillis="right.milliSeconds"/>
           <#else>
-          <@intervalCompareBlock left="left" right="right" leftMonths="0" 
leftDays="left.days" leftMillis="left.milliSeconds" rightMonths="0" 
rightDays="right.days" rightMillis="right.milliSeconds" output="cmp"/>
+          <@intervalConvertBlock left="left" right="right" leftMonths="0" 
leftDays="left.days" leftMillis="left.milliSeconds" rightMonths="0" 
rightDays="right.days" rightMillis="right.milliSeconds"/>
           </#if>
 
-          out.value = (cmp > -1) ? 1 : 0;
+          out.value = leftMS >= rightMS ? 1 : 0;
       }
   }
 
@@ -313,16 +314,13 @@ public class GCompare${type.name}Functions {
       public void setup(RecordBatch b) {}
 
       public void eval() {
-
-          int cmp;
-
           <#if type.name == "Interval">
-          <@intervalCompareBlock left="left" right="right" 
leftMonths="left.months" leftDays="left.days" leftMillis="left.milliSeconds" 
rightMonths="right.months" rightDays="right.days" 
rightMillis="right.milliSeconds" output="cmp"/>
+          <@intervalConvertBlock left="left" right="right" 
leftMonths="left.months" leftDays="left.days" leftMillis="left.milliSeconds" 
rightMonths="right.months" rightDays="right.days" 
rightMillis="right.milliSeconds"/>
           <#else>
-          <@intervalCompareBlock left="left" right="right" leftMonths="0" 
leftDays="left.days" leftMillis="left.milliSeconds" rightMonths="0" 
rightDays="right.days" rightMillis="right.milliSeconds" output="cmp"/>
+          <@intervalConvertBlock left="left" right="right" leftMonths="0" 
leftDays="left.days" leftMillis="left.milliSeconds" rightMonths="0" 
rightDays="right.days" rightMillis="right.milliSeconds"/>
           </#if>
 
-          out.value = (cmp == 0) ? 1 : 0;
+          out.value = leftMS == rightMS ? 1 : 0;
       }
   }
 
@@ -336,16 +334,13 @@ public class GCompare${type.name}Functions {
       public void setup(RecordBatch b) {}
 
       public void eval() {
-
-          int cmp;
-
           <#if type.name == "Interval">
-          <@intervalCompareBlock left="left" right="right" 
leftMonths="left.months" leftDays="left.days" leftMillis="left.milliSeconds" 
rightMonths="right.months" rightDays="right.days" 
rightMillis="right.milliSeconds" output="cmp"/>
+          <@intervalConvertBlock left="left" right="right" 
leftMonths="left.months" leftDays="left.days" leftMillis="left.milliSeconds" 
rightMonths="right.months" rightDays="right.days" 
rightMillis="right.milliSeconds"/>
           <#else>
-          <@intervalCompareBlock left="left" right="right" leftMonths="0" 
leftDays="left.days" leftMillis="left.milliSeconds" rightMonths="0" 
rightDays="right.days" rightMillis="right.milliSeconds" output="cmp"/>
+          <@intervalConvertBlock left="left" right="right" leftMonths="0" 
leftDays="left.days" leftMillis="left.milliSeconds" rightMonths="0" 
rightDays="right.days" rightMillis="right.milliSeconds"/>
           </#if>
 
-          out.value = (cmp != 0) ? 1 : 0;
+          out.value = leftMS != rightMS ? 1 : 0;
       }
   }
 }

Reply via email to