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/07/24 21:01:59 UTC
incubator-calcite git commit: [CALCITE-717] Compare BINARY and
VARBINARY on unsigned byte values (Low Chin Wei)
Repository: incubator-calcite
Updated Branches:
refs/heads/master 67ea045ca -> 26a087745
[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/master
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) {