You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tajo.apache.org by jh...@apache.org on 2013/12/23 08:45:16 UTC
git commit: TAJO-450: Incorrect inet4datum comparison. (jinho)
Updated Branches:
refs/heads/master 4319ded3a -> 074a34157
TAJO-450: Incorrect inet4datum comparison. (jinho)
Project: http://git-wip-us.apache.org/repos/asf/incubator-tajo/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tajo/commit/074a3415
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tajo/tree/074a3415
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tajo/diff/074a3415
Branch: refs/heads/master
Commit: 074a34157b6a9084ca762627cf1b370818fcda90
Parents: 4319ded
Author: jinossy <ji...@gmail.com>
Authored: Mon Dec 23 16:44:02 2013 +0900
Committer: jinossy <ji...@gmail.com>
Committed: Mon Dec 23 16:44:02 2013 +0900
----------------------------------------------------------------------
CHANGES.txt | 2 +
.../java/org/apache/tajo/datum/Inet4Datum.java | 47 ++++++++------------
.../org/apache/tajo/datum/TestBoolDatum.java | 4 +-
.../org/apache/tajo/datum/TestInet4Datum.java | 16 +++++++
4 files changed, 39 insertions(+), 30 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/074a3415/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 2ef8bf3..602f6e8 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -166,6 +166,8 @@ Release 0.8.0 - unreleased
BUG FIXES
+ TAJO-450: Incorrect inet4datum comparison. (jinho)
+
TAJO-182: Comparison of primitive values including null value should
return NULL. (hyunsik)
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/074a3415/tajo-common/src/main/java/org/apache/tajo/datum/Inet4Datum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/datum/Inet4Datum.java b/tajo-common/src/main/java/org/apache/tajo/datum/Inet4Datum.java
index 10f0785..fe06d55 100644
--- a/tajo-common/src/main/java/org/apache/tajo/datum/Inet4Datum.java
+++ b/tajo-common/src/main/java/org/apache/tajo/datum/Inet4Datum.java
@@ -21,6 +21,7 @@ package org.apache.tajo.datum;
import com.google.common.base.Preconditions;
import com.google.gson.annotations.Expose;
import org.apache.tajo.datum.exception.InvalidOperationException;
+import org.apache.tajo.util.Bytes;
import static org.apache.tajo.common.TajoDataTypes.Type;
@@ -31,7 +32,7 @@ public class Inet4Datum extends Datum {
public Inet4Datum() {
super(Type.INET4);
}
-
+
public Inet4Datum(String addr) {
this();
String [] elems = addr.split("\\.");
@@ -40,7 +41,7 @@ public class Inet4Datum extends Datum {
address |= ((Integer.valueOf(elems[1]) << 16) & 0xFF0000);
address |= ((Integer.valueOf(elems[0]) << 24) & 0xFF000000);
}
-
+
public Inet4Datum(byte[] addr) {
this();
Preconditions.checkArgument(addr.length == size);
@@ -88,7 +89,7 @@ public class Inet4Datum extends Datum {
public int size() {
return size;
}
-
+
@Override
public int hashCode() {
return address;
@@ -100,43 +101,33 @@ public class Inet4Datum extends Datum {
Inet4Datum other = (Inet4Datum) obj;
return this.address == other.address;
}
-
+
return false;
}
@Override
public Datum equalsTo(Datum datum) {
switch (datum.type()) {
- case INET4:
- return DatumFactory.createBool(this.address == ((Inet4Datum)datum).address);
- case NULL_TYPE:
- return datum;
- default:
- throw new InvalidOperationException(datum.type());
+ case INET4:
+ return DatumFactory.createBool(this.address == ((Inet4Datum) datum).address);
+ case NULL_TYPE:
+ return datum;
+ default:
+ throw new InvalidOperationException(datum.type());
}
}
-
+
@Override
public int compareTo(Datum datum) {
switch (datum.type()) {
- case INET4:
- byte [] bytes = asByteArray();
- byte [] other = datum.asByteArray();
-
- for (int i = 0; i < 4; i++) {
- if (bytes[i] > other[i]) {
- return 1;
- } else if (bytes[i] < other[i]) {
- return -1;
- } else {
- return 0;
- }
- }
- case NULL_TYPE:
+ case INET4:
+ byte[] bytes = asByteArray();
+ byte[] other = datum.asByteArray();
+ return Bytes.compareTo(bytes, 0, size, other, 0, size);
+ case NULL_TYPE:
return -1;
-
- default:
- throw new InvalidOperationException(datum.type());
+ default:
+ throw new InvalidOperationException(datum.type());
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/074a3415/tajo-common/src/test/java/org/apache/tajo/datum/TestBoolDatum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/test/java/org/apache/tajo/datum/TestBoolDatum.java b/tajo-common/src/test/java/org/apache/tajo/datum/TestBoolDatum.java
index 2b3fec2..dd722ff 100644
--- a/tajo-common/src/test/java/org/apache/tajo/datum/TestBoolDatum.java
+++ b/tajo-common/src/test/java/org/apache/tajo/datum/TestBoolDatum.java
@@ -34,8 +34,8 @@ public class TestBoolDatum {
@Test
public final void testAsBool() {
- Datum trueDatum = DatumFactory.createBool(false);
- assertEquals(false, trueDatum.asBool());
+ Datum trueDatum = DatumFactory.createBool(true);
+ assertEquals(true, trueDatum.asBool());
Datum falseDatum = DatumFactory.createBool(false);
assertEquals(false, falseDatum.asBool());
}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/074a3415/tajo-common/src/test/java/org/apache/tajo/datum/TestInet4Datum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/test/java/org/apache/tajo/datum/TestInet4Datum.java b/tajo-common/src/test/java/org/apache/tajo/datum/TestInet4Datum.java
index cac900c..14ebc7c 100644
--- a/tajo-common/src/test/java/org/apache/tajo/datum/TestInet4Datum.java
+++ b/tajo-common/src/test/java/org/apache/tajo/datum/TestInet4Datum.java
@@ -47,6 +47,22 @@ public class TestInet4Datum {
assertEquals(ip1, ip4);
}
+ @Test
+ public final void testGreaterThan() {
+ Inet4Datum ip1 = new Inet4Datum("193.168.0.1");
+ Inet4Datum ip2 = new Inet4Datum("192.168.100.1");
+
+ assertEquals(ip1.compareTo(ip2), 1);
+ }
+
+ @Test
+ public final void testLessThan() {
+ Inet4Datum ip1 = new Inet4Datum("192.168.100.1");
+ Inet4Datum ip2 = new Inet4Datum("193.168.0.1");
+
+ assertEquals(ip1.compareTo(ip2), -1);
+ }
+
@Test
public final void testAsByteArray() {
byte[] bytes = {(byte) 0xA3, (byte) 0x98, 0x17, (byte) 0xDE};