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)); + } + } + } }