You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by jh...@apache.org on 2015/09/03 00:16:20 UTC

[32/50] incubator-calcite git commit: [CALCITE-717] Compare BINARY and VARBINARY on unsigned byte values (Low Chin Wei)

[CALCITE-717] Compare BINARY and VARBINARY on unsigned byte values (Low Chin Wei)


Project: http://git-wip-us.apache.org/repos/asf/incubator-calcite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-calcite/commit/26a08774
Tree: http://git-wip-us.apache.org/repos/asf/incubator-calcite/tree/26a08774
Diff: http://git-wip-us.apache.org/repos/asf/incubator-calcite/diff/26a08774

Branch: refs/heads/branch-release
Commit: 26a08774516c49eba39ccb7690295f87560a43fc
Parents: 67ea045
Author: Julian Hyde <jh...@apache.org>
Authored: Fri Jul 24 09:48:09 2015 -0700
Committer: Julian Hyde <jh...@apache.org>
Committed: Fri Jul 24 09:48:09 2015 -0700

----------------------------------------------------------------------
 .../java/org/apache/calcite/avatica/util/ByteString.java |  4 ++--
 .../org/apache/calcite/sql/test/SqlOperatorBaseTest.java | 11 +++++++++++
 .../java/org/apache/calcite/test/SqlFunctionsTest.java   | 10 ++++++++++
 3 files changed, 23 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/26a08774/avatica/src/main/java/org/apache/calcite/avatica/util/ByteString.java
----------------------------------------------------------------------
diff --git a/avatica/src/main/java/org/apache/calcite/avatica/util/ByteString.java b/avatica/src/main/java/org/apache/calcite/avatica/util/ByteString.java
index ecd634c..4e606b7 100644
--- a/avatica/src/main/java/org/apache/calcite/avatica/util/ByteString.java
+++ b/avatica/src/main/java/org/apache/calcite/avatica/util/ByteString.java
@@ -70,8 +70,8 @@ public class ByteString implements Comparable<ByteString>, Serializable {
     final byte[] v2 = that.bytes;
     final int n = Math.min(v1.length, v2.length);
     for (int i = 0; i < n; i++) {
-      byte c1 = v1[i];
-      byte c2 = v2[i];
+      int c1 = v1[i] & 0xff;
+      int c2 = v2[i] & 0xff;
       if (c1 != c2) {
         return c1 - c2;
       }

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/26a08774/core/src/test/java/org/apache/calcite/sql/test/SqlOperatorBaseTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/calcite/sql/test/SqlOperatorBaseTest.java b/core/src/test/java/org/apache/calcite/sql/test/SqlOperatorBaseTest.java
index 2f76859..82041cc 100644
--- a/core/src/test/java/org/apache/calcite/sql/test/SqlOperatorBaseTest.java
+++ b/core/src/test/java/org/apache/calcite/sql/test/SqlOperatorBaseTest.java
@@ -326,6 +326,8 @@ public abstract class SqlOperatorBaseTest {
     tester.checkNull(
         "1 between cast(null as integer) and cast(null as integer)");
     tester.checkNull("1 between cast(null as integer) and 1");
+    tester.checkBoolean("x'0A00015A' between x'0A000130' and x'0A0001B0'", Boolean.TRUE);
+    tester.checkBoolean("x'0A00015A' between x'0A0001A0' and x'0A0001B0'", Boolean.FALSE);
   }
 
   @Test public void testNotBetween() {
@@ -339,6 +341,8 @@ public abstract class SqlOperatorBaseTest {
     tester.checkBoolean("1.2e1 not between 1.1 and 1.3", Boolean.TRUE);
     tester.checkBoolean("1.5e0 not between 2 and 3", Boolean.TRUE);
     tester.checkBoolean("1.5e0 not between 2e0 and 3e0", Boolean.TRUE);
+    tester.checkBoolean("x'0A00015A' not between x'0A000130' and x'0A0001B0'", Boolean.FALSE);
+    tester.checkBoolean("x'0A00015A' not between x'0A0001A0' and x'0A0001B0'", Boolean.TRUE);
   }
 
   private String getCastString(
@@ -1987,6 +1991,8 @@ public abstract class SqlOperatorBaseTest {
         "DATE '2013-02-23' > DATE '1945-02-24'", Boolean.TRUE);
     tester.checkBoolean(
         "DATE '2013-02-23' > CAST(NULL AS DATE)", null);
+
+    tester.checkBoolean("x'0A000130'>x'0A0001B0'", Boolean.FALSE);
   }
 
   @Test public void testGreaterThanOperatorIntervals() {
@@ -2119,6 +2125,8 @@ public abstract class SqlOperatorBaseTest {
     tester.checkBoolean("false>=false", Boolean.TRUE);
     tester.checkBoolean("false>=true", Boolean.FALSE);
     tester.checkNull("cast(null as real)>=999");
+    tester.checkBoolean("x'0A000130'>=x'0A0001B0'", Boolean.FALSE);
+    tester.checkBoolean("x'0A0001B0'>=x'0A0001B0'", Boolean.TRUE);
   }
 
   @Test public void testGreaterThanOrEqualOperatorIntervals() {
@@ -2283,6 +2291,7 @@ public abstract class SqlOperatorBaseTest {
     tester.checkNull("123<cast(null as bigint)");
     tester.checkNull("cast(null as tinyint)<123");
     tester.checkNull("cast(null as integer)<1.32");
+    tester.checkBoolean("x'0A000130'<x'0A0001B0'", Boolean.TRUE);
   }
 
   @Test public void testLessThanOperatorInterval() {
@@ -2341,6 +2350,8 @@ public abstract class SqlOperatorBaseTest {
     tester.checkNull("cast(null as integer)<=3");
     tester.checkNull("3<=cast(null as smallint)");
     tester.checkNull("cast(null as integer)<=1.32");
+    tester.checkBoolean("x'0A000130'<=x'0A0001B0'", Boolean.TRUE);
+    tester.checkBoolean("x'0A0001B0'<=x'0A0001B0'", Boolean.TRUE);
   }
 
   @Test public void testLessThanOrEqualOperatorInterval() {

http://git-wip-us.apache.org/repos/asf/incubator-calcite/blob/26a08774/core/src/test/java/org/apache/calcite/test/SqlFunctionsTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/calcite/test/SqlFunctionsTest.java b/core/src/test/java/org/apache/calcite/test/SqlFunctionsTest.java
index f3646b4..1fc4c3a 100644
--- a/core/src/test/java/org/apache/calcite/test/SqlFunctionsTest.java
+++ b/core/src/test/java/org/apache/calcite/test/SqlFunctionsTest.java
@@ -459,6 +459,16 @@ public class SqlFunctionsTest {
     } catch (IllegalArgumentException e) {
       assertThat(e.getMessage(), equalTo("hex string has odd length"));
     }
+
+    final byte[] bytes4 = {10, 0, 1, -80};
+    final ByteString byteString4 = new ByteString(bytes4);
+    final byte[] bytes5 = {10, 0, 1, 127};
+    final ByteString byteString5 = new ByteString(bytes5);
+    final ByteString byteString6 = new ByteString(bytes4);
+
+    assertThat(byteString4.compareTo(byteString5) > 0, is(true));
+    assertThat(byteString4.compareTo(byteString6) == 0, is(true));
+    assertThat(byteString5.compareTo(byteString4) < 0, is(true));
   }
 
   private void thereAndBack(byte[] bytes) {