You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tajo.apache.org by ji...@apache.org on 2013/12/28 07:36:29 UTC

[32/50] [abbrv] git commit: TAJO-450: Incorrect inet4datum comparison. (jinho)

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/DAG-execplan
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};