Repository: phoenix
Updated Branches:
  refs/heads/4.x-HBase-0.98 1600c6396 -> 23f973ae3


PHOENIX-2406 ClassCastException in isCoercibleTo() of unsigned primitive array 
types (e.g. PUnsignedIntArray)


Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/23f973ae
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/23f973ae
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/23f973ae

Branch: refs/heads/4.x-HBase-0.98
Commit: 23f973ae3f1de6c0d04df0a26e90cb14b9ca12ec
Parents: 1600c63
Author: maryannxue <wei....@intel.com>
Authored: Thu Nov 12 11:52:36 2015 -0500
Committer: maryannxue <wei....@intel.com>
Committed: Thu Nov 12 11:52:36 2015 -0500

----------------------------------------------------------------------
 .../phoenix/schema/types/PUnsignedDoubleArray.java       |  4 ++--
 .../apache/phoenix/schema/types/PUnsignedFloatArray.java |  4 ++--
 .../apache/phoenix/schema/types/PUnsignedIntArray.java   |  4 ++--
 .../apache/phoenix/schema/types/PUnsignedLongArray.java  |  4 ++--
 .../phoenix/schema/types/PUnsignedSmallintArray.java     |  4 ++--
 .../phoenix/schema/types/PUnsignedTinyintArray.java      |  4 ++--
 .../phoenix/schema/types/PDataTypeForArraysTest.java     | 11 +++++++++++
 7 files changed, 23 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/phoenix/blob/23f973ae/phoenix-core/src/main/java/org/apache/phoenix/schema/types/PUnsignedDoubleArray.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/schema/types/PUnsignedDoubleArray.java
 
b/phoenix-core/src/main/java/org/apache/phoenix/schema/types/PUnsignedDoubleArray.java
index be16178..ef3ef06 100644
--- 
a/phoenix-core/src/main/java/org/apache/phoenix/schema/types/PUnsignedDoubleArray.java
+++ 
b/phoenix-core/src/main/java/org/apache/phoenix/schema/types/PUnsignedDoubleArray.java
@@ -76,8 +76,8 @@ public class PUnsignedDoubleArray extends 
PArrayDataType<double[]> {
         if (value == null) {
             return true;
         }
-        PhoenixArray pArr = (PhoenixArray) value;
-        Object[] doubleArr = (Object[]) pArr.array;
+        PhoenixArray.PrimitiveDoublePhoenixArray pArr = 
(PhoenixArray.PrimitiveDoublePhoenixArray) value;
+        double[] doubleArr = (double[]) pArr.array;
         for (Object i : doubleArr) {
             if (!super.isCoercibleTo(PUnsignedDouble.INSTANCE, i) && 
(!super.isCoercibleTo(
                     PUnsignedTimestamp.INSTANCE, i))

http://git-wip-us.apache.org/repos/asf/phoenix/blob/23f973ae/phoenix-core/src/main/java/org/apache/phoenix/schema/types/PUnsignedFloatArray.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/schema/types/PUnsignedFloatArray.java
 
b/phoenix-core/src/main/java/org/apache/phoenix/schema/types/PUnsignedFloatArray.java
index bc1e1fb..4cdb8ff 100644
--- 
a/phoenix-core/src/main/java/org/apache/phoenix/schema/types/PUnsignedFloatArray.java
+++ 
b/phoenix-core/src/main/java/org/apache/phoenix/schema/types/PUnsignedFloatArray.java
@@ -76,8 +76,8 @@ public class PUnsignedFloatArray extends 
PArrayDataType<float[]> {
         if (value == null) {
             return true;
         }
-        PhoenixArray pArr = (PhoenixArray) value;
-        Object[] floatArr = (Object[]) pArr.array;
+        PhoenixArray.PrimitiveFloatPhoenixArray pArr = 
(PhoenixArray.PrimitiveFloatPhoenixArray) value;
+        float[] floatArr = (float[]) pArr.array;
         for (Object i : floatArr) {
             if (!super.isCoercibleTo(PUnsignedFloat.INSTANCE, i)) {
                 return false;

http://git-wip-us.apache.org/repos/asf/phoenix/blob/23f973ae/phoenix-core/src/main/java/org/apache/phoenix/schema/types/PUnsignedIntArray.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/schema/types/PUnsignedIntArray.java
 
b/phoenix-core/src/main/java/org/apache/phoenix/schema/types/PUnsignedIntArray.java
index 3d430e4..bc0c39b 100644
--- 
a/phoenix-core/src/main/java/org/apache/phoenix/schema/types/PUnsignedIntArray.java
+++ 
b/phoenix-core/src/main/java/org/apache/phoenix/schema/types/PUnsignedIntArray.java
@@ -76,8 +76,8 @@ public class PUnsignedIntArray extends PArrayDataType<int[]> {
         if (value == null) {
             return true;
         }
-        PhoenixArray pArr = (PhoenixArray) value;
-        Object[] intArr = (Object[]) pArr.array;
+        PhoenixArray.PrimitiveIntPhoenixArray pArr = 
(PhoenixArray.PrimitiveIntPhoenixArray) value;
+        int[] intArr = (int[]) pArr.array;
         for (Object i : intArr) {
             if (!super.isCoercibleTo(PUnsignedInt.INSTANCE, i)) {
                 return false;

http://git-wip-us.apache.org/repos/asf/phoenix/blob/23f973ae/phoenix-core/src/main/java/org/apache/phoenix/schema/types/PUnsignedLongArray.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/schema/types/PUnsignedLongArray.java
 
b/phoenix-core/src/main/java/org/apache/phoenix/schema/types/PUnsignedLongArray.java
index 2a7c5ef..20f693b 100644
--- 
a/phoenix-core/src/main/java/org/apache/phoenix/schema/types/PUnsignedLongArray.java
+++ 
b/phoenix-core/src/main/java/org/apache/phoenix/schema/types/PUnsignedLongArray.java
@@ -76,8 +76,8 @@ public class PUnsignedLongArray extends 
PArrayDataType<long[]> {
         if (value == null) {
             return true;
         }
-        PhoenixArray pArr = (PhoenixArray) value;
-        Object[] longArr = (Object[]) pArr.array;
+        PhoenixArray.PrimitiveLongPhoenixArray pArr = 
(PhoenixArray.PrimitiveLongPhoenixArray) value;
+        long[] longArr = (long[]) pArr.array;
         for (Object i : longArr) {
             if (!super.isCoercibleTo(PUnsignedLong.INSTANCE, i)) {
                 return false;

http://git-wip-us.apache.org/repos/asf/phoenix/blob/23f973ae/phoenix-core/src/main/java/org/apache/phoenix/schema/types/PUnsignedSmallintArray.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/schema/types/PUnsignedSmallintArray.java
 
b/phoenix-core/src/main/java/org/apache/phoenix/schema/types/PUnsignedSmallintArray.java
index f481efb..d4e67e0 100644
--- 
a/phoenix-core/src/main/java/org/apache/phoenix/schema/types/PUnsignedSmallintArray.java
+++ 
b/phoenix-core/src/main/java/org/apache/phoenix/schema/types/PUnsignedSmallintArray.java
@@ -77,8 +77,8 @@ public class PUnsignedSmallintArray extends 
PArrayDataType<short[]> {
         if (value == null) {
             return true;
         }
-        PhoenixArray pArr = (PhoenixArray) value;
-        Object[] shortArr = (Object[]) pArr.array;
+        PhoenixArray.PrimitiveShortPhoenixArray pArr = 
(PhoenixArray.PrimitiveShortPhoenixArray) value;
+        short[] shortArr = (short[]) pArr.array;
         for (Object i : shortArr) {
             if (!super.isCoercibleTo(PUnsignedSmallint.INSTANCE, i)) {
                 return false;

http://git-wip-us.apache.org/repos/asf/phoenix/blob/23f973ae/phoenix-core/src/main/java/org/apache/phoenix/schema/types/PUnsignedTinyintArray.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/main/java/org/apache/phoenix/schema/types/PUnsignedTinyintArray.java
 
b/phoenix-core/src/main/java/org/apache/phoenix/schema/types/PUnsignedTinyintArray.java
index 6843340..6e62234 100644
--- 
a/phoenix-core/src/main/java/org/apache/phoenix/schema/types/PUnsignedTinyintArray.java
+++ 
b/phoenix-core/src/main/java/org/apache/phoenix/schema/types/PUnsignedTinyintArray.java
@@ -77,8 +77,8 @@ public class PUnsignedTinyintArray extends 
PArrayDataType<byte[]> {
         if (value == null) {
             return true;
         }
-        PhoenixArray pArr = (PhoenixArray) value;
-        Object[] byteArr = (Object[]) pArr.array;
+        PhoenixArray.PrimitiveBytePhoenixArray pArr = 
(PhoenixArray.PrimitiveBytePhoenixArray) value;
+        byte[] byteArr = (byte[]) pArr.array;
         for (Object i : byteArr) {
             if (!super.isCoercibleTo(PUnsignedTinyint.INSTANCE, i)) {
                 return false;

http://git-wip-us.apache.org/repos/asf/phoenix/blob/23f973ae/phoenix-core/src/test/java/org/apache/phoenix/schema/types/PDataTypeForArraysTest.java
----------------------------------------------------------------------
diff --git 
a/phoenix-core/src/test/java/org/apache/phoenix/schema/types/PDataTypeForArraysTest.java
 
b/phoenix-core/src/test/java/org/apache/phoenix/schema/types/PDataTypeForArraysTest.java
index 7246020..333fbf9 100644
--- 
a/phoenix-core/src/test/java/org/apache/phoenix/schema/types/PDataTypeForArraysTest.java
+++ 
b/phoenix-core/src/test/java/org/apache/phoenix/schema/types/PDataTypeForArraysTest.java
@@ -1200,4 +1200,15 @@ public class PDataTypeForArraysTest {
         String value = (String)PVarchar.INSTANCE.toObject(ptr, SortOrder.DESC);
         assertEquals(null, value);
     }
+    
+    @Test
+    public void testIsCoercibleTo() {
+        PDataTypeFactory typeFactory = PDataTypeFactory.getInstance();
+        for (PDataType<?> type : typeFactory.getTypes()) {
+            if (type.isArrayType()) {
+                Object arr = type.getSampleValue();
+                assertTrue(type.isCoercibleTo(type, arr));
+            }
+        }
+    }
 }

Reply via email to