You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by td...@apache.org on 2015/04/18 01:40:33 UTC
phoenix git commit: PHOENIX-1872 Use PrimitiveBooleanArray of
boolean[] instead of PhoenixArray of Boolean[]
Repository: phoenix
Updated Branches:
refs/heads/master b597ba817 -> 5f3d3892f
PHOENIX-1872 Use PrimitiveBooleanArray of boolean[] instead of PhoenixArray of Boolean[]
Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/5f3d3892
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/5f3d3892
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/5f3d3892
Branch: refs/heads/master
Commit: 5f3d3892ff925f80289dc7b2ac918a91eedacfb1
Parents: b597ba8
Author: Alex <aw...@salesforce.com>
Authored: Thu Apr 16 17:06:33 2015 -0700
Committer: Thomas <td...@salesforce.com>
Committed: Fri Apr 17 16:17:51 2015 -0700
----------------------------------------------------------------------
.../apache/phoenix/schema/types/PBoolean.java | 18 ++++++++++--
.../phoenix/schema/types/PBooleanArray.java | 31 ++++++++++----------
.../phoenix/schema/types/PhoenixArray.java | 21 ++++++++-----
.../expression/ArrayAppendFunctionTest.java | 29 +++++++++++++-----
.../types/BasePhoenixArrayToStringTest.java | 11 ++++---
.../schema/types/PDateArrayToStringTest.java | 7 +++++
...rimitiveBooleanPhoenixArrayToStringTest.java | 6 ++++
7 files changed, 87 insertions(+), 36 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/phoenix/blob/5f3d3892/phoenix-core/src/main/java/org/apache/phoenix/schema/types/PBoolean.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/schema/types/PBoolean.java b/phoenix-core/src/main/java/org/apache/phoenix/schema/types/PBoolean.java
index 93f6dc1..66991c5 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/schema/types/PBoolean.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/schema/types/PBoolean.java
@@ -17,11 +17,12 @@
*/
package org.apache.phoenix.schema.types;
-import com.google.common.base.Preconditions;
-import com.google.common.primitives.Booleans;
+import java.sql.Types;
+
import org.apache.phoenix.schema.SortOrder;
-import java.sql.Types;
+import com.google.common.base.Preconditions;
+import com.google.common.primitives.Booleans;
public class PBoolean extends PDataType<Boolean> {
@@ -137,4 +138,15 @@ public class PBoolean extends PDataType<Boolean> {
public Object getSampleValue(Integer maxLength, Integer arrayLength) {
return RANDOM.get().nextBoolean();
}
+
+ @Override
+ public PhoenixArrayFactory getArrayFactory() {
+ return new PhoenixArrayFactory() {
+
+ @Override
+ public PhoenixArray newArray(PDataType type, Object[] elements) {
+ return new PhoenixArray.PrimitiveBooleanPhoenixArray(type, elements);
+ }
+ };
+ }
}
http://git-wip-us.apache.org/repos/asf/phoenix/blob/5f3d3892/phoenix-core/src/main/java/org/apache/phoenix/schema/types/PBooleanArray.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/schema/types/PBooleanArray.java b/phoenix-core/src/main/java/org/apache/phoenix/schema/types/PBooleanArray.java
index dfad7e3..87bf9b4 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/schema/types/PBooleanArray.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/schema/types/PBooleanArray.java
@@ -17,10 +17,11 @@
*/
package org.apache.phoenix.schema.types;
+import java.sql.Types;
+
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
import org.apache.phoenix.schema.SortOrder;
-
-import java.sql.Types;
+import org.apache.phoenix.schema.types.PhoenixArray.PrimitiveBooleanPhoenixArray;
public class PBooleanArray extends PArrayDataType<boolean[]> {
@@ -73,20 +74,20 @@ public class PBooleanArray extends PArrayDataType<boolean[]> {
return isCoercibleTo(targetType, this);
}
- @Override
- public boolean isCoercibleTo(PDataType targetType, Object value) {
- if (value == null) {
- return true;
- }
- PhoenixArray pArr = (PhoenixArray) value;
- Object[] booleanArr = (Object[]) pArr.array;
- for (Object i : booleanArr) {
- if (!super.isCoercibleTo(PBoolean.INSTANCE, i)) {
- return false;
- }
+ @Override
+ public boolean isCoercibleTo(PDataType targetType, Object value) {
+ if (value == null) {
+ return true;
+ }
+ PrimitiveBooleanPhoenixArray pArr = (PrimitiveBooleanPhoenixArray) value;
+ boolean[] booleanArr = (boolean[]) pArr.array;
+ for (boolean b : booleanArr) {
+ if (!super.isCoercibleTo(PInteger.INSTANCE, b)) {
+ return false;
+ }
+ }
+ return true;
}
- return true;
- }
@Override
public int getResultSetSqlType() {
http://git-wip-us.apache.org/repos/asf/phoenix/blob/5f3d3892/phoenix-core/src/main/java/org/apache/phoenix/schema/types/PhoenixArray.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/schema/types/PhoenixArray.java b/phoenix-core/src/main/java/org/apache/phoenix/schema/types/PhoenixArray.java
index 982834d..9ffac83 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/schema/types/PhoenixArray.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/schema/types/PhoenixArray.java
@@ -615,18 +615,25 @@ public class PhoenixArray implements Array,SQLCloseable {
public PrimitiveBooleanPhoenixArray(PDataType dataType, Object[] elements) {
super(dataType, elements);
}
+
@Override
- public Object convertObjectArrayToPrimitiveArray(Object[] elements) {
- booleanArr = new boolean[elements.length];
- int i = 0;
- for(Object o : elements) {
+ public boolean isPrimitiveType() {
+ // boolean is primitive although PBoolean has no codec
+ return true;
+ }
+
+ @Override
+ public Object convertObjectArrayToPrimitiveArray(Object[] elements) {
+ booleanArr = new boolean[elements.length];
+ int i = 0;
+ for (Object o : elements) {
if (o != null) {
- booleanArr[i] = (Boolean)o;
+ booleanArr[i] = (Boolean) o;
}
i++;
}
- return booleanArr;
- }
+ return booleanArr;
+ }
@Override
public int estimateByteSize(int pos) {
http://git-wip-us.apache.org/repos/asf/phoenix/blob/5f3d3892/phoenix-core/src/test/java/org/apache/phoenix/expression/ArrayAppendFunctionTest.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/test/java/org/apache/phoenix/expression/ArrayAppendFunctionTest.java b/phoenix-core/src/test/java/org/apache/phoenix/expression/ArrayAppendFunctionTest.java
index 2b4cb84..5405ef3 100644
--- a/phoenix-core/src/test/java/org/apache/phoenix/expression/ArrayAppendFunctionTest.java
+++ b/phoenix-core/src/test/java/org/apache/phoenix/expression/ArrayAppendFunctionTest.java
@@ -27,7 +27,21 @@ import java.util.List;
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
import org.apache.phoenix.expression.function.ArrayAppendFunction;
import org.apache.phoenix.schema.SortOrder;
-import org.apache.phoenix.schema.types.*;
+import org.apache.phoenix.schema.types.PBoolean;
+import org.apache.phoenix.schema.types.PChar;
+import org.apache.phoenix.schema.types.PDataType;
+import org.apache.phoenix.schema.types.PDate;
+import org.apache.phoenix.schema.types.PDecimal;
+import org.apache.phoenix.schema.types.PDouble;
+import org.apache.phoenix.schema.types.PFloat;
+import org.apache.phoenix.schema.types.PInteger;
+import org.apache.phoenix.schema.types.PLong;
+import org.apache.phoenix.schema.types.PSmallint;
+import org.apache.phoenix.schema.types.PTime;
+import org.apache.phoenix.schema.types.PTimestamp;
+import org.apache.phoenix.schema.types.PTinyint;
+import org.apache.phoenix.schema.types.PVarchar;
+import org.apache.phoenix.schema.types.PhoenixArray;
import org.junit.Test;
import com.google.common.collect.Lists;
@@ -118,15 +132,16 @@ public class ArrayAppendFunctionTest {
}
@Test
- public void testArrayAppendFunction5() throws Exception {
- Boolean[] o = new Boolean[]{true, false, false, true};
- Boolean[] o2 = new Boolean[]{true, false, false, true, false};
+ public void testArrayAppendFunctionBoolean() throws Exception {
+ Boolean[] o = new Boolean[] { true, false, false, true };
+ Boolean[] o2 = new Boolean[] { true, false, false, true, false };
Boolean element = false;
PDataType baseType = PBoolean.INSTANCE;
- PhoenixArray arr = new PhoenixArray(baseType, o);
- PhoenixArray expected = new PhoenixArray(baseType, o2);
- test(arr, element, PDataType.fromTypeId(baseType.getSqlType() + PDataType.ARRAY_TYPE_BASE), null, null, baseType, null, null, expected, SortOrder.ASC, SortOrder.ASC);
+ PhoenixArray arr = new PhoenixArray.PrimitiveBooleanPhoenixArray(baseType, o);
+ PhoenixArray expected = new PhoenixArray.PrimitiveBooleanPhoenixArray(baseType, o2);
+ test(arr, element, PDataType.fromTypeId(baseType.getSqlType() + PDataType.ARRAY_TYPE_BASE),
+ null, null, baseType, null, null, expected, SortOrder.ASC, SortOrder.ASC);
}
@Test
http://git-wip-us.apache.org/repos/asf/phoenix/blob/5f3d3892/phoenix-core/src/test/java/org/apache/phoenix/schema/types/BasePhoenixArrayToStringTest.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/test/java/org/apache/phoenix/schema/types/BasePhoenixArrayToStringTest.java b/phoenix-core/src/test/java/org/apache/phoenix/schema/types/BasePhoenixArrayToStringTest.java
index d67c599..1ec7742 100644
--- a/phoenix-core/src/test/java/org/apache/phoenix/schema/types/BasePhoenixArrayToStringTest.java
+++ b/phoenix-core/src/test/java/org/apache/phoenix/schema/types/BasePhoenixArrayToStringTest.java
@@ -28,10 +28,6 @@ public abstract class BasePhoenixArrayToStringTest {
@Test
public void testMultipleObjectArray() {
- // Object[] arr = createArray(getBaseJavaType(), 3);
- // arr[0] = getElement1();
- // arr[1] = getElement2();
- // arr[2] = getElement3();
helpTestToString(getBaseType(),
new Object[] { getElement1(), getElement2(), getElement3() }, "[" + getString1() + ", "
+ getString2() + ", " + getString3() + "]");
@@ -75,7 +71,14 @@ public abstract class BasePhoenixArrayToStringTest {
protected void helpTestToString(PDataType type, Object[] array, String expected) {
PhoenixArray arr = PArrayDataType.instantiatePhoenixArray(type, array);
+ boolean isPrimitive = isPrimitive(arr);
+ assertEquals("Expected " + getBaseType() + " array to be " + (isPrimitive ? "" : "not ")
+ + "primitive.", isPrimitive, !arr.getClass().equals(PhoenixArray.class));
assertEquals(expected, arr.toString());
}
+ protected boolean isPrimitive(PhoenixArray arr) {
+ return arr.isPrimitiveType();
+ }
+
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/phoenix/blob/5f3d3892/phoenix-core/src/test/java/org/apache/phoenix/schema/types/PDateArrayToStringTest.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/test/java/org/apache/phoenix/schema/types/PDateArrayToStringTest.java b/phoenix-core/src/test/java/org/apache/phoenix/schema/types/PDateArrayToStringTest.java
index 3243233..4ae210b 100644
--- a/phoenix-core/src/test/java/org/apache/phoenix/schema/types/PDateArrayToStringTest.java
+++ b/phoenix-core/src/test/java/org/apache/phoenix/schema/types/PDateArrayToStringTest.java
@@ -28,6 +28,13 @@ public class PDateArrayToStringTest extends BasePhoenixArrayToStringTest {
}
@Override
+ protected boolean isPrimitive(PhoenixArray arr) {
+ // dates have codec like primitive times but date is not primitive/scalar && there's no
+ // primitive date array
+ return false;
+ }
+
+ @Override
protected Object getElement1() {
return parseDate(DATE1);
}
http://git-wip-us.apache.org/repos/asf/phoenix/blob/5f3d3892/phoenix-core/src/test/java/org/apache/phoenix/schema/types/PrimitiveBooleanPhoenixArrayToStringTest.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/test/java/org/apache/phoenix/schema/types/PrimitiveBooleanPhoenixArrayToStringTest.java b/phoenix-core/src/test/java/org/apache/phoenix/schema/types/PrimitiveBooleanPhoenixArrayToStringTest.java
index e62e592..1ec4752 100644
--- a/phoenix-core/src/test/java/org/apache/phoenix/schema/types/PrimitiveBooleanPhoenixArrayToStringTest.java
+++ b/phoenix-core/src/test/java/org/apache/phoenix/schema/types/PrimitiveBooleanPhoenixArrayToStringTest.java
@@ -18,6 +18,12 @@ public class PrimitiveBooleanPhoenixArrayToStringTest extends BasePhoenixArrayTo
}
@Override
+ protected String getNullString() {
+ // primitive arrays don't use null
+ return "false";
+ }
+
+ @Override
protected Object getElement1() {
return true;
}