You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by ra...@apache.org on 2014/03/14 05:45:46 UTC
git commit: Phoenix-128-Support coercion and descending sort order
for ARRAY
Repository: incubator-phoenix
Updated Branches:
refs/heads/master 49d586cd9 -> 36845baee
Phoenix-128-Support coercion and descending sort order for ARRAY
Project: http://git-wip-us.apache.org/repos/asf/incubator-phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-phoenix/commit/36845bae
Tree: http://git-wip-us.apache.org/repos/asf/incubator-phoenix/tree/36845bae
Diff: http://git-wip-us.apache.org/repos/asf/incubator-phoenix/diff/36845bae
Branch: refs/heads/master
Commit: 36845baee19751a2d8854efafc4169188745363d
Parents: 49d586c
Author: Ramkrishna <ra...@intel.com>
Authored: Fri Mar 14 10:13:49 2014 +0530
Committer: Ramkrishna <ra...@intel.com>
Committed: Fri Mar 14 10:13:49 2014 +0530
----------------------------------------------------------------------
.../org/apache/phoenix/end2end/ArrayIT.java | 138 ++++-
phoenix-core/src/main/antlr3/PhoenixSQL.g | 2 +-
.../phoenix/compile/ExpressionCompiler.java | 2 +-
.../phoenix/expression/CoerceExpression.java | 3 +-
.../expression/function/ArrayIndexFunction.java | 15 +-
.../org/apache/phoenix/parse/CastParseNode.java | 23 +-
.../apache/phoenix/parse/ParseNodeFactory.java | 24 +-
.../apache/phoenix/schema/PArrayDataType.java | 112 ++--
.../org/apache/phoenix/schema/PDataType.java | 615 ++++++++++++++-----
9 files changed, 707 insertions(+), 227 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/36845bae/phoenix-core/src/it/java/org/apache/phoenix/end2end/ArrayIT.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/ArrayIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/ArrayIT.java
index 03c4bd8..f947a6d 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/ArrayIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/ArrayIT.java
@@ -524,7 +524,142 @@ public class ArrayIT extends BaseClientManagedTimeIT {
conn.close();
}
}
-
+
+ @Test
+ public void testArrayWithDescOrder() throws Exception {
+ Connection conn;
+ PreparedStatement stmt;
+ ResultSet rs;
+ long ts = nextTimestamp();
+ Properties props = new Properties(TEST_PROPERTIES);
+ props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 10));
+ conn = DriverManager.getConnection(getUrl(), props);
+ conn.createStatement().execute(
+ "CREATE TABLE t ( k VARCHAR, a_string_array VARCHAR(100) ARRAY[4], b_string_array VARCHAR(100) ARRAY[4] \n"
+ + " CONSTRAINT pk PRIMARY KEY (k, b_string_array DESC)) \n");
+ conn.close();
+ props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 30));
+ conn = DriverManager.getConnection(getUrl(), props);
+ stmt = conn.prepareStatement("UPSERT INTO t VALUES(?,?,?)");
+ stmt.setString(1, "a");
+ String[] s = new String[] { "abc", "def", "ghi", "jkll", null, null, "xxx" };
+ Array array = conn.createArrayOf("VARCHAR", s);
+ stmt.setArray(2, array);
+ s = new String[] { "abc", "def", "ghi", "jkll", null, null, null, "xxx" };
+ array = conn.createArrayOf("VARCHAR", s);
+ stmt.setArray(3, array);
+ stmt.execute();
+ conn.commit();
+ conn.close();
+
+ props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 40));
+ conn = DriverManager.getConnection(getUrl(), props);
+ rs = conn.createStatement().executeQuery("SELECT b_string_array FROM t");
+ assertTrue(rs.next());
+ PhoenixArray strArr = (PhoenixArray)rs.getArray(1);
+ assertEquals(array, strArr);
+ conn.close();
+ }
+
+ @Test
+ public void testArraySelectSingleArrayElemWithCast() throws Exception {
+ Connection conn;
+ PreparedStatement stmt;
+ ResultSet rs;
+ long ts = nextTimestamp();
+ Properties props = new Properties(TEST_PROPERTIES);
+ props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 10));
+ conn = DriverManager.getConnection(getUrl(), props);
+ conn.createStatement().execute("CREATE TABLE t ( k VARCHAR PRIMARY KEY, a bigint ARRAY[])");
+ conn.close();
+
+ props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 30));
+ conn = DriverManager.getConnection(getUrl(), props);
+ stmt = conn.prepareStatement("UPSERT INTO t VALUES(?,?)");
+ stmt.setString(1, "a");
+ Long[] s = new Long[] {1l, 2l};
+ Array array = conn.createArrayOf("BIGINT", s);
+ stmt.setArray(2, array);
+ stmt.execute();
+ conn.commit();
+ conn.close();
+ props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 40));
+ conn = DriverManager.getConnection(getUrl(), props);
+ rs = conn.createStatement().executeQuery("SELECT k, CAST(a[2] AS DOUBLE) FROM t");
+ assertTrue(rs.next());
+ assertEquals("a",rs.getString(1));
+ Double d = new Double(2.0);
+ assertEquals(d, (Double)rs.getDouble(2));
+ conn.close();
+ }
+
+ @Test
+ public void testArrayWithCast() throws Exception {
+ Connection conn;
+ PreparedStatement stmt;
+ ResultSet rs;
+ long ts = nextTimestamp();
+ Properties props = new Properties(TEST_PROPERTIES);
+ props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 10));
+ conn = DriverManager.getConnection(getUrl(), props);
+ conn.createStatement().execute("CREATE TABLE t ( k VARCHAR PRIMARY KEY, a bigint ARRAY[])");
+ conn.close();
+
+ props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 30));
+ conn = DriverManager.getConnection(getUrl(), props);
+ stmt = conn.prepareStatement("UPSERT INTO t VALUES(?,?)");
+ stmt.setString(1, "a");
+ Long[] s = new Long[] { 1l, 2l };
+ Array array = conn.createArrayOf("BIGINT", s);
+ stmt.setArray(2, array);
+ stmt.execute();
+ conn.commit();
+ conn.close();
+ props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 40));
+ conn = DriverManager.getConnection(getUrl(), props);
+ rs = conn.createStatement().executeQuery("SELECT CAST(a AS DOUBLE []) FROM t");
+ assertTrue(rs.next());
+ Double[] d = new Double[] { 1.0, 2.0 };
+ array = conn.createArrayOf("DOUBLE", d);
+ PhoenixArray arr = (PhoenixArray)rs.getArray(1);
+ assertEquals(array, arr);
+ conn.close();
+ }
+
+ @Test
+ public void testArrayWithCastForVarLengthArr() throws Exception {
+ Connection conn;
+ PreparedStatement stmt;
+ ResultSet rs;
+ long ts = nextTimestamp();
+ Properties props = new Properties(TEST_PROPERTIES);
+ props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 10));
+ conn = DriverManager.getConnection(getUrl(), props);
+ conn.createStatement().execute("CREATE TABLE t ( k VARCHAR PRIMARY KEY, a VARCHAR(5) ARRAY)");
+ conn.close();
+ props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 30));
+ conn = DriverManager.getConnection(getUrl(), props);
+ stmt = conn.prepareStatement("UPSERT INTO t VALUES(?,?)");
+ stmt.setString(1, "a");
+ String[] s = new String[] { "1", "2" };
+ PhoenixArray array = (PhoenixArray)conn.createArrayOf("VARCHAR", s);
+ stmt.setArray(2, array);
+ stmt.execute();
+ conn.commit();
+ conn.close();
+
+ props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 40));
+ conn = DriverManager.getConnection(getUrl(), props);
+ rs = conn.createStatement().executeQuery("SELECT CAST(a AS CHAR ARRAY) FROM t");
+ assertTrue(rs.next());
+ PhoenixArray arr = (PhoenixArray)rs.getArray(1);
+ String[] array2 = (String[])array.getArray();
+ String[] array3 = (String[])arr.getArray();
+ assertEquals(array2[0], array3[0]);
+ assertEquals(array2[1], array3[1]);
+ conn.close();
+ }
+
@Test
public void testFixedWidthCharArray() throws Exception {
Connection conn;
@@ -563,7 +698,6 @@ public class ArrayIT extends BaseClientManagedTimeIT {
assertEquals("a",rs.getString(1));
assertEquals("2",rs.getString(2));
conn.close();
-
}
@Test
http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/36845bae/phoenix-core/src/main/antlr3/PhoenixSQL.g
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/antlr3/PhoenixSQL.g b/phoenix-core/src/main/antlr3/PhoenixSQL.g
index 40dcc87..3998ca2 100644
--- a/phoenix-core/src/main/antlr3/PhoenixSQL.g
+++ b/phoenix-core/src/main/antlr3/PhoenixSQL.g
@@ -778,7 +778,7 @@ term returns [ParseNode ret]
$ret = factory.rowValueConstructor(l);
}
}
- | CAST LPAREN e=expression AS dt=identifier RPAREN { $ret = factory.cast(e, dt); }
+ | CAST LPAREN e=expression AS dt=identifier ar=(ARRAY | (LSQUARE RSQUARE))? RPAREN { $ret = ar==null ? factory.cast(e, dt) : factory.cast(e, dt, true); }
| (n=NEXT | CURRENT) VALUE FOR s=from_table_name { $ret = n==null ? factory.currentValueFor(s) : factory.nextValueFor(s);}
;
http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/36845bae/phoenix-core/src/main/java/org/apache/phoenix/compile/ExpressionCompiler.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/compile/ExpressionCompiler.java b/phoenix-core/src/main/java/org/apache/phoenix/compile/ExpressionCompiler.java
index c14e6a3..5506eb5 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/compile/ExpressionCompiler.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/compile/ExpressionCompiler.java
@@ -513,7 +513,7 @@ public class ExpressionCompiler extends UnsupportedAllParseNodeVisitor<Expressio
expr = CastParseNode.convertToRoundExpressionIfNeeded(fromDataType, targetDataType, children);
}
}
- return wrapGroupByExpression(CoerceExpression.create(expr, targetDataType));
+ return CoerceExpression.create(expr, targetDataType, SortOrder.getDefault(), expr.getMaxLength());
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/36845bae/phoenix-core/src/main/java/org/apache/phoenix/expression/CoerceExpression.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/CoerceExpression.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/CoerceExpression.java
index d991d63..99c1934 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/CoerceExpression.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/CoerceExpression.java
@@ -117,7 +117,8 @@ public class CoerceExpression extends BaseSingleExpression {
@Override
public boolean evaluate(Tuple tuple, ImmutableBytesWritable ptr) {
if (getChild().evaluate(tuple, ptr)) {
- getDataType().coerceBytes(ptr, getChild().getDataType(), getChild().getSortOrder(), getSortOrder());
+ getDataType().coerceBytes(ptr, getChild().getDataType(), getChild().getSortOrder(), getSortOrder(),
+ getChild().getMaxLength());
return true;
}
return false;
http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/36845bae/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ArrayIndexFunction.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ArrayIndexFunction.java b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ArrayIndexFunction.java
index b96b7b5..46b0eca 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ArrayIndexFunction.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/expression/function/ArrayIndexFunction.java
@@ -26,6 +26,7 @@ import org.apache.phoenix.parse.FunctionParseNode.BuiltInFunction;
import org.apache.phoenix.parse.ParseException;
import org.apache.phoenix.schema.PArrayDataType;
import org.apache.phoenix.schema.PDataType;
+import org.apache.phoenix.schema.SortOrder;
import org.apache.phoenix.schema.tuple.Tuple;
@BuiltInFunction(name = ArrayIndexFunction.NAME, args = {
@@ -80,9 +81,15 @@ public class ArrayIndexFunction extends ScalarFunction {
public Integer getMaxLength() {
return this.children.get(0).getMaxLength();
}
- @Override
- public String getName() {
- return NAME;
- }
+
+ @Override
+ public String getName() {
+ return NAME;
+ }
+
+ @Override
+ public SortOrder getSortOrder() {
+ return this.children.get(0).getSortOrder();
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/36845bae/phoenix-core/src/main/java/org/apache/phoenix/parse/CastParseNode.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/parse/CastParseNode.java b/phoenix-core/src/main/java/org/apache/phoenix/parse/CastParseNode.java
index 9bc2b41..e998422 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/parse/CastParseNode.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/parse/CastParseNode.java
@@ -40,14 +40,23 @@ public class CastParseNode extends UnaryParseNode {
private final PDataType dt;
- CastParseNode(ParseNode expr, String dataType) {
+ CastParseNode(ParseNode expr, String dataType, boolean arr) {
super(expr);
- dt = PDataType.fromSqlTypeName(SchemaUtil.normalizeIdentifier(dataType));
+ if(arr == true) {
+ PDataType baseType = PDataType.fromSqlTypeName(SchemaUtil.normalizeIdentifier(dataType));
+ dt = PDataType.fromTypeId(baseType.getSqlType() + PDataType.ARRAY_TYPE_BASE);
+ } else {
+ dt = PDataType.fromSqlTypeName(SchemaUtil.normalizeIdentifier(dataType));
+ }
}
-
- CastParseNode(ParseNode expr, PDataType dataType) {
- super(expr);
- dt = dataType;
+
+ CastParseNode(ParseNode expr, PDataType dataType, boolean arr) {
+ super(expr);
+ if (arr == true) {
+ dt = PDataType.fromTypeId(dataType.getSqlType() + PDataType.ARRAY_TYPE_BASE);
+ } else {
+ dt = dataType;
+ }
}
@Override
@@ -62,7 +71,7 @@ public class CastParseNode extends UnaryParseNode {
public PDataType getDataType() {
return dt;
}
-
+
public static Expression convertToRoundExpressionIfNeeded(PDataType fromDataType, PDataType targetDataType, List<Expression> expressions) throws SQLException {
Expression firstChildExpr = expressions.get(0);
if(fromDataType == targetDataType) {
http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/36845bae/phoenix-core/src/main/java/org/apache/phoenix/parse/ParseNodeFactory.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/parse/ParseNodeFactory.java b/phoenix-core/src/main/java/org/apache/phoenix/parse/ParseNodeFactory.java
index 227d3d3..ce719f4 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/parse/ParseNodeFactory.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/parse/ParseNodeFactory.java
@@ -27,9 +27,6 @@ import java.util.Map;
import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;
import org.apache.hadoop.hbase.util.Pair;
-
-import com.google.common.collect.ListMultimap;
-import com.google.common.collect.Maps;
import org.apache.phoenix.exception.UnknownFunctionException;
import org.apache.phoenix.expression.Expression;
import org.apache.phoenix.expression.ExpressionType;
@@ -42,13 +39,16 @@ import org.apache.phoenix.expression.function.FunctionExpression;
import org.apache.phoenix.parse.FunctionParseNode.BuiltInFunction;
import org.apache.phoenix.parse.FunctionParseNode.BuiltInFunctionInfo;
import org.apache.phoenix.parse.JoinTableNode.JoinType;
-import org.apache.phoenix.schema.SortOrder;
import org.apache.phoenix.schema.PDataType;
import org.apache.phoenix.schema.PIndexState;
import org.apache.phoenix.schema.PTableType;
+import org.apache.phoenix.schema.SortOrder;
import org.apache.phoenix.schema.TypeMismatchException;
import org.apache.phoenix.util.SchemaUtil;
+import com.google.common.collect.ListMultimap;
+import com.google.common.collect.Maps;
+
/**
*
@@ -413,13 +413,21 @@ public class ParseNodeFactory {
public LiteralParseNode literal(Object value) {
return new LiteralParseNode(value);
}
-
+
public CastParseNode cast(ParseNode expression, String dataType) {
- return new CastParseNode(expression, dataType);
+ return new CastParseNode(expression, dataType, false);
}
-
+
public CastParseNode cast(ParseNode expression, PDataType dataType) {
- return new CastParseNode(expression, dataType);
+ return new CastParseNode(expression, dataType, false);
+ }
+
+ public CastParseNode cast(ParseNode expression, PDataType dataType, boolean arr) {
+ return new CastParseNode(expression, dataType, arr);
+ }
+
+ public CastParseNode cast(ParseNode expression, String dataType, boolean arr) {
+ return new CastParseNode(expression, dataType, arr);
}
public ParseNode rowValueConstructor(List<ParseNode> l) {
http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/36845bae/phoenix-core/src/main/java/org/apache/phoenix/schema/PArrayDataType.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/schema/PArrayDataType.java b/phoenix-core/src/main/java/org/apache/phoenix/schema/PArrayDataType.java
index 89cd074..3d1fce8 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/schema/PArrayDataType.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/schema/PArrayDataType.java
@@ -26,7 +26,6 @@ import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.hbase.util.Pair;
import org.apache.phoenix.query.QueryConstants;
import org.apache.phoenix.util.ByteUtil;
-import org.apache.phoenix.util.StringUtil;
import org.apache.phoenix.util.TrustedByteArrayOutputStream;
import com.google.common.base.Objects;
@@ -48,7 +47,7 @@ public class PArrayDataType {
public PArrayDataType() {
}
- public byte[] toBytes(Object object, PDataType baseType) {
+ public byte[] toBytes(Object object, PDataType baseType, SortOrder sortOrder) {
if(object == null) {
throw new ConstraintViolationException(this + " may not be null");
}
@@ -75,7 +74,8 @@ public class PArrayDataType {
byteStream = new TrustedByteArrayOutputStream(size);
}
DataOutputStream oStream = new DataOutputStream(byteStream);
- return createArrayBytes(byteStream, oStream, (PhoenixArray)object, noOfElements, baseType, 0);
+ // Handles bit inversion also
+ return createArrayBytes(byteStream, oStream, (PhoenixArray)object, noOfElements, baseType, sortOrder);
}
public static int serializeNulls(DataOutputStream oStream, int nulls) throws IOException {
@@ -210,37 +210,45 @@ public class PArrayDataType {
return true;
}
- public void coerceBytes(ImmutableBytesWritable ptr, Object value, PDataType actualType, Integer maxLength, Integer scale,
- Integer desiredMaxLength, Integer desiredScale, PDataType desiredType) {
- if (ptr.getLength() == 0 || value == null) {
- return;
- }
- if (Objects.equal(maxLength, desiredMaxLength)) {
- return;
- }
- // TODO: handle bit inversion
- // TODO: handle coerce between different types
- // TODO: validate that maxLength and desiredMaxLength come through as expected
- // TODO: handle when value == null correct, as you may need to re-write due to coercian to different type
- // or bit inversion
- //FIXME: don't write number of elements in the case of fixed width arrays as it will mess up sort order
- PhoenixArray pArr = (PhoenixArray) value;
- pArr = new PhoenixArray(pArr, desiredMaxLength);
- PDataType baseType = PDataType.fromTypeId(actualType.getSqlType()
- - PDataType.ARRAY_TYPE_BASE);
- ptr.set(toBytes(pArr, baseType));
- }
+ public void coerceBytes(ImmutableBytesWritable ptr, Object value, PDataType actualType, Integer maxLength,
+ Integer scale, Integer desiredMaxLength, Integer desiredScale, PDataType desiredType,
+ SortOrder actualModifer, SortOrder expectedModifier) {
+ if (ptr.getLength() == 0) { // a zero length ptr means null which will not be coerced to anything different
+ return;
+ }
+ PDataType baseType = PDataType.fromTypeId(actualType.getSqlType() - PDataType.ARRAY_TYPE_BASE);
+ PDataType desiredBaseType = PDataType.fromTypeId(desiredType.getSqlType() - PDataType.ARRAY_TYPE_BASE);
+ if ((Objects.equal(maxLength, desiredMaxLength) || maxLength == null || desiredMaxLength == null)
+ && actualType.isBytesComparableWith(desiredType)
+ && baseType.isFixedWidth() == desiredBaseType.isFixedWidth() && actualModifer == expectedModifier) {
+ return;
+ }
+ if (value == null && actualType != desiredType) {
+ value = toObject(ptr.get(), ptr.getOffset(), ptr.getLength(), baseType, actualModifer, maxLength,
+ desiredScale, desiredBaseType);
+ PhoenixArray pArr = (PhoenixArray)value;
+ // VARCHAR <=> CHAR
+ if(baseType.isFixedWidth() != desiredBaseType.isFixedWidth()) {
+ pArr = new PhoenixArray(pArr, desiredMaxLength);
+ }
+ baseType = desiredBaseType;
+ ptr.set(toBytes(pArr, baseType, expectedModifier));
+ } else {
+ PhoenixArray pArr = (PhoenixArray)value;
+ pArr = new PhoenixArray(pArr, desiredMaxLength);
+ ptr.set(toBytes(pArr, baseType, expectedModifier));
+ }
+ }
public Object toObject(String value) {
- // TODO: Do this as done in CSVLoader
throw new IllegalArgumentException("This operation is not suppported");
}
public Object toObject(byte[] bytes, int offset, int length, PDataType baseType,
- SortOrder sortOrder, Integer maxLength, Integer scale) {
+ SortOrder sortOrder, Integer maxLength, Integer scale, PDataType desiredDataType) {
return createPhoenixArray(bytes, offset, length, sortOrder,
- baseType, maxLength);
+ baseType, maxLength, desiredDataType);
}
public static void positionAtArrayElement(ImmutableBytesWritable ptr, int arrayIndex, PDataType baseDataType,
@@ -325,18 +333,19 @@ public class PArrayDataType {
}
/**
- * ser
+ * creates array bytes
* @param byteStream
* @param oStream
* @param array
* @param noOfElements
* @param baseType
+ * @param sortOrder
* @param maxLength
* @param capacity
* @return
*/
private byte[] createArrayBytes(TrustedByteArrayOutputStream byteStream, DataOutputStream oStream,
- PhoenixArray array, int noOfElements, PDataType baseType, Integer maxLength) {
+ PhoenixArray array, int noOfElements, PDataType baseType, SortOrder sortOrder) {
try {
if (!baseType.isFixedWidth()) {
int[] offsetPos = new int[noOfElements];
@@ -349,6 +358,9 @@ public class PArrayDataType {
} else {
nulls = serializeNulls(oStream, nulls);
offsetPos[i] = byteStream.size();
+ if (sortOrder == SortOrder.DESC) {
+ SortOrder.invert(bytes, 0, bytes, 0, bytes.length);
+ }
oStream.write(bytes, 0, bytes.length);
oStream.write(QueryConstants.SEPARATOR_BYTE);
}
@@ -362,15 +374,10 @@ public class PArrayDataType {
for (int i = 0; i < noOfElements; i++) {
byte[] bytes = array.toBytes(i);
int length = bytes.length;
- if(baseType == PDataType.CHAR) {
- oStream.write(bytes, 0, length);
- while(length <= maxLength) {
- oStream.writeByte(StringUtil.SPACE_UTF8);
- length++;
- }
- } else {
- oStream.write(bytes, 0, length);
+ if (sortOrder == SortOrder.DESC) {
+ SortOrder.invert(bytes, 0, bytes, 0, bytes.length);
}
+ oStream.write(bytes, 0, length);
}
}
ImmutableBytesWritable ptr = new ImmutableBytesWritable();
@@ -448,7 +455,8 @@ public class PArrayDataType {
// a null null null b c null d would be
// 65 0 0 3 66 0 67 0 0 1 68 0 0 0
// Follow the above example to understand how this works
- private Object createPhoenixArray(byte[] bytes, int offset, int length, SortOrder sortOrder, PDataType baseDataType, Integer maxLength) {
+ private Object createPhoenixArray(byte[] bytes, int offset, int length, SortOrder sortOrder,
+ PDataType baseDataType, Integer maxLength, PDataType desiredDataType) {
if (bytes == null || bytes.length == 0) { return null; }
Object[] elements;
if (!baseDataType.isFixedWidth()) {
@@ -463,7 +471,11 @@ public class PArrayDataType {
baseSize = Bytes.SIZEOF_INT;
useShort = false;
}
- elements = (Object[])java.lang.reflect.Array.newInstance(baseDataType.getJavaClass(), noOfElements);
+ if (baseDataType == desiredDataType) {
+ elements = (Object[])java.lang.reflect.Array.newInstance(baseDataType.getJavaClass(), noOfElements);
+ } else {
+ elements = (Object[])java.lang.reflect.Array.newInstance(desiredDataType.getJavaClass(), noOfElements);
+ }
buffer.position(buffer.limit() - (Bytes.SIZEOF_BYTE + (2 * Bytes.SIZEOF_INT)));
int indexOffset = buffer.getInt();
buffer.position(initPos);
@@ -505,20 +517,36 @@ public class PArrayDataType {
// Subtract the seperator from the element length
byte[] val = new byte[elementLength - 1];
buffer.get(val);
- elements[i++] = baseDataType.toObject(val, sortOrder);
+ if (baseDataType == desiredDataType) {
+ elements[i++] = baseDataType.toObject(val, sortOrder);
+ } else {
+ elements[i++] = desiredDataType.toObject(val, sortOrder, baseDataType);
+ }
}
}
} else {
int elemLength = (maxLength == null ? baseDataType.getByteSize() : maxLength);
int noOfElements = length / elemLength;
- elements = (Object[])java.lang.reflect.Array.newInstance(baseDataType.getJavaClass(), noOfElements);
+ if (baseDataType == desiredDataType) {
+ elements = (Object[])java.lang.reflect.Array.newInstance(baseDataType.getJavaClass(), noOfElements);
+ } else {
+ elements = (Object[])java.lang.reflect.Array.newInstance(desiredDataType.getJavaClass(), noOfElements);
+ }
ImmutableBytesWritable ptr = new ImmutableBytesWritable();
for (int i = 0; i < noOfElements; i++) {
ptr.set(bytes, offset + i * elemLength, elemLength);
- elements[i] = baseDataType.toObject(ptr, sortOrder);
+ if (baseDataType == desiredDataType) {
+ elements[i] = baseDataType.toObject(ptr, sortOrder);
+ } else {
+ elements[i] = desiredDataType.toObject(ptr, baseDataType, sortOrder);
+ }
}
}
- return PArrayDataType.instantiatePhoenixArray(baseDataType, elements);
+ if(baseDataType == desiredDataType) {
+ return PArrayDataType.instantiatePhoenixArray(baseDataType, elements);
+ } else {
+ return PArrayDataType.instantiatePhoenixArray(desiredDataType, elements);
+ }
}
public static PhoenixArray instantiatePhoenixArray(PDataType actualType, Object[] elements) {
http://git-wip-us.apache.org/repos/asf/incubator-phoenix/blob/36845bae/phoenix-core/src/main/java/org/apache/phoenix/schema/PDataType.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/schema/PDataType.java b/phoenix-core/src/main/java/org/apache/phoenix/schema/PDataType.java
index 07df438..34166d3 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/schema/PDataType.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/schema/PDataType.java
@@ -3246,10 +3246,15 @@ public enum PDataType {
return null;
}
- @Override
- public byte[] toBytes(Object object) {
- return pDataTypeForArray.toBytes(object, PDataType.INTEGER);
- }
+ @Override
+ public byte[] toBytes(Object object) {
+ return toBytes(object, SortOrder.ASC);
+ }
+
+ @Override
+ public byte[] toBytes(Object object, SortOrder sortOrder) {
+ return pDataTypeForArray.toBytes(object, PDataType.INTEGER, sortOrder);
+ }
@Override
public int toBytes(Object object, byte[] bytes, int offset) {
@@ -3269,14 +3274,22 @@ public enum PDataType {
@Override
public Object toObject(byte[] bytes, int offset, int length,
PDataType actualType, SortOrder sortOrder, Integer maxLength, Integer scale) {
-
- return pDataTypeForArray.toObject(bytes, offset, length, PDataType.INTEGER, sortOrder, maxLength, scale);
+ return pDataTypeForArray.toObject(bytes, offset, length, PDataType.INTEGER, sortOrder, maxLength, scale,
+ PDataType.INTEGER);
}
@Override
public boolean isCoercibleTo(PDataType targetType) {
return pDataTypeForArray.isCoercibleTo(targetType, PDataType.INTEGER_ARRAY);
}
+
+ @Override
+ public void coerceBytes(ImmutableBytesWritable ptr, Object object, PDataType actualType, Integer maxLength,
+ Integer scale, SortOrder actualModifer, Integer desiredMaxLength, Integer desiredScale,
+ SortOrder desiredModifier) {
+ pDataTypeForArray.coerceBytes(ptr, object, actualType, maxLength, scale, desiredMaxLength, desiredScale,
+ this, actualModifer, desiredModifier);
+ }
@Override
public boolean isCoercibleTo(PDataType targetType, Object value) {
@@ -3316,10 +3329,15 @@ public enum PDataType {
return null;
}
- @Override
- public byte[] toBytes(Object object) {
- return pDataTypeForArray.toBytes(object, PDataType.BOOLEAN);
- }
+ @Override
+ public byte[] toBytes(Object object) {
+ return toBytes(object, SortOrder.ASC);
+ }
+
+ @Override
+ public byte[] toBytes(Object object, SortOrder sortOrder) {
+ return pDataTypeForArray.toBytes(object, PDataType.BOOLEAN, sortOrder);
+ }
@Override
public int toBytes(Object object, byte[] bytes, int offset) {
@@ -3339,8 +3357,8 @@ public enum PDataType {
@Override
public Object toObject(byte[] bytes, int offset, int length,
PDataType actualType, SortOrder sortOrder, Integer maxLength, Integer scale) {
-
- return pDataTypeForArray.toObject(bytes, offset, length, PDataType.BOOLEAN, sortOrder, maxLength, scale);
+ return pDataTypeForArray.toObject(bytes, offset, length, PDataType.BOOLEAN, sortOrder, maxLength, scale,
+ PDataType.BOOLEAN);
}
@Override
@@ -3366,6 +3384,14 @@ public enum PDataType {
return Types.ARRAY;
}
+ @Override
+ public void coerceBytes(ImmutableBytesWritable ptr, Object object, PDataType actualType, Integer maxLength,
+ Integer scale, SortOrder actualModifer, Integer desiredMaxLength, Integer desiredScale,
+ SortOrder desiredModifier) {
+ pDataTypeForArray.coerceBytes(ptr, object, actualType, maxLength, scale, desiredMaxLength, desiredScale,
+ this, actualModifer, desiredModifier);
+ }
+
},
VARCHAR_ARRAY("VARCHAR_ARRAY", PDataType.ARRAY_TYPE_BASE + PDataType.VARCHAR.getSqlType(), PhoenixArray.class, null) {
@Override
@@ -3386,10 +3412,15 @@ public enum PDataType {
return null;
}
- @Override
- public byte[] toBytes(Object object) {
- return pDataTypeForArray.toBytes(object, PDataType.VARCHAR);
- }
+ @Override
+ public byte[] toBytes(Object object) {
+ return toBytes(object, SortOrder.ASC);
+ }
+
+ @Override
+ public byte[] toBytes(Object object, SortOrder sortOrder) {
+ return pDataTypeForArray.toBytes(object, PDataType.VARCHAR, sortOrder);
+ }
@Override
public int toBytes(Object object, byte[] bytes, int offset) {
@@ -3409,8 +3440,8 @@ public enum PDataType {
@Override
public Object toObject(byte[] bytes, int offset, int length,
PDataType actualType, SortOrder sortOrder, Integer maxLength, Integer scale) {
-
- return pDataTypeForArray.toObject(bytes, offset, length, PDataType.VARCHAR, sortOrder, maxLength, scale);
+ return pDataTypeForArray.toObject(bytes, offset, length, PDataType.VARCHAR, sortOrder, maxLength, scale,
+ PDataType.VARCHAR);
}
@Override
@@ -3438,10 +3469,11 @@ public enum PDataType {
}
@Override
- public void coerceBytes(ImmutableBytesWritable ptr, Object object, PDataType actualType, Integer maxLength, Integer scale,
- SortOrder actualModifer, Integer desiredMaxLength, Integer desiredScale, SortOrder desiredModifier) {
- pDataTypeForArray.coerceBytes(ptr, object, actualType, maxLength, scale, desiredMaxLength,
- desiredScale, this);
+ public void coerceBytes(ImmutableBytesWritable ptr, Object object, PDataType actualType, Integer maxLength,
+ Integer scale, SortOrder actualModifer, Integer desiredMaxLength, Integer desiredScale,
+ SortOrder desiredModifier) {
+ pDataTypeForArray.coerceBytes(ptr, object, actualType, maxLength, scale, desiredMaxLength, desiredScale,
+ this, actualModifer, desiredModifier);
}
@Override
@@ -3469,10 +3501,15 @@ public enum PDataType {
return null;
}
- @Override
- public byte[] toBytes(Object object) {
- return pDataTypeForArray.toBytes(object, PDataType.VARBINARY);
- }
+ @Override
+ public byte[] toBytes(Object object) {
+ return toBytes(object, SortOrder.ASC);
+ }
+
+ @Override
+ public byte[] toBytes(Object object, SortOrder sortOrder) {
+ return pDataTypeForArray.toBytes(object, PDataType.VARBINARY, sortOrder);
+ }
@Override
public int toBytes(Object object, byte[] bytes, int offset) {
@@ -3492,8 +3529,8 @@ public enum PDataType {
@Override
public Object toObject(byte[] bytes, int offset, int length,
PDataType actualType, SortOrder sortOrder, Integer maxLength, Integer scale) {
-
- return pDataTypeForArray.toObject(bytes, offset, length, PDataType.VARBINARY, sortOrder, maxLength, scale);
+ return pDataTypeForArray.toObject(bytes, offset, length, PDataType.VARBINARY, sortOrder, maxLength, scale,
+ PDataType.VARBINARY);
}
@Override
@@ -3522,10 +3559,11 @@ public enum PDataType {
}
@Override
- public void coerceBytes(ImmutableBytesWritable ptr, Object object, PDataType actualType, Integer maxLength, Integer scale,
- SortOrder actualModifer, Integer desiredMaxLength, Integer desiredScale, SortOrder desiredModifier) {
- pDataTypeForArray.coerceBytes(ptr, object, actualType, maxLength, scale, desiredMaxLength,
- desiredScale, this);
+ public void coerceBytes(ImmutableBytesWritable ptr, Object object, PDataType actualType, Integer maxLength,
+ Integer scale, SortOrder actualModifer, Integer desiredMaxLength, Integer desiredScale,
+ SortOrder desiredModifier) {
+ pDataTypeForArray.coerceBytes(ptr, object, actualType, maxLength, scale, desiredMaxLength, desiredScale,
+ this, actualModifer, desiredModifier);
}
@Override
@@ -3552,10 +3590,15 @@ public enum PDataType {
return null;
}
- @Override
- public byte[] toBytes(Object object) {
- return pDataTypeForArray.toBytes(object, PDataType.BINARY);
- }
+ @Override
+ public byte[] toBytes(Object object) {
+ return toBytes(object, SortOrder.ASC);
+ }
+
+ @Override
+ public byte[] toBytes(Object object, SortOrder sortOrder) {
+ return pDataTypeForArray.toBytes(object, PDataType.BINARY, sortOrder);
+ }
@Override
public int toBytes(Object object, byte[] bytes, int offset) {
@@ -3575,8 +3618,8 @@ public enum PDataType {
@Override
public Object toObject(byte[] bytes, int offset, int length,
PDataType actualType, SortOrder sortOrder, Integer maxLength, Integer scale) {
-
- return pDataTypeForArray.toObject(bytes, offset, length, PDataType.BINARY, sortOrder, maxLength, scale);
+ return pDataTypeForArray.toObject(bytes, offset, length, PDataType.BINARY, sortOrder, maxLength, scale,
+ PDataType.BINARY);
}
@Override
@@ -3605,10 +3648,11 @@ public enum PDataType {
}
@Override
- public void coerceBytes(ImmutableBytesWritable ptr, Object object, PDataType actualType, Integer maxLength, Integer scale,
- SortOrder actualModifer, Integer desiredMaxLength, Integer desiredScale, SortOrder desiredModifier) {
- pDataTypeForArray.coerceBytes(ptr, object, actualType, maxLength, scale, desiredMaxLength,
- desiredScale, this);
+ public void coerceBytes(ImmutableBytesWritable ptr, Object object, PDataType actualType, Integer maxLength,
+ Integer scale, SortOrder actualModifer, Integer desiredMaxLength, Integer desiredScale,
+ SortOrder desiredModifier) {
+ pDataTypeForArray.coerceBytes(ptr, object, actualType, maxLength, scale, desiredMaxLength, desiredScale,
+ this, actualModifer, desiredModifier);
}
@Override
@@ -3636,10 +3680,15 @@ public enum PDataType {
return null;
}
- @Override
- public byte[] toBytes(Object object) {
- return pDataTypeForArray.toBytes(object, PDataType.CHAR);
- }
+ @Override
+ public byte[] toBytes(Object object) {
+ return toBytes(object, SortOrder.ASC);
+ }
+
+ @Override
+ public byte[] toBytes(Object object, SortOrder sortOrder) {
+ return pDataTypeForArray.toBytes(object, PDataType.CHAR, sortOrder);
+ }
@Override
public int toBytes(Object object, byte[] bytes, int offset) {
@@ -3659,8 +3708,8 @@ public enum PDataType {
@Override
public Object toObject(byte[] bytes, int offset, int length,
PDataType actualType, SortOrder sortOrder, Integer maxLength, Integer scale) {
-
- return pDataTypeForArray.toObject(bytes, offset, length, PDataType.CHAR, sortOrder, maxLength, scale);
+ return pDataTypeForArray.toObject(bytes, offset, length, PDataType.CHAR, sortOrder, maxLength, scale,
+ PDataType.CHAR);
}
@Override
@@ -3691,7 +3740,8 @@ public enum PDataType {
@Override
public void coerceBytes(ImmutableBytesWritable ptr, Object object, PDataType actualType, Integer maxLength, Integer scale,
SortOrder actualModifer, Integer desiredMaxLength, Integer desiredScale, SortOrder desiredModifier) {
- pDataTypeForArray.coerceBytes(ptr, object, actualType, maxLength, scale, desiredMaxLength, desiredScale, this);
+ pDataTypeForArray.coerceBytes(ptr, object, actualType, maxLength, scale, desiredMaxLength, desiredScale,
+ this, actualModifer, desiredModifier);
}
@Override
@@ -3719,10 +3769,15 @@ public enum PDataType {
return null;
}
- @Override
- public byte[] toBytes(Object object) {
- return pDataTypeForArray.toBytes(object, PDataType.LONG);
- }
+ @Override
+ public byte[] toBytes(Object object) {
+ return toBytes(object, SortOrder.ASC);
+ }
+
+ @Override
+ public byte[] toBytes(Object object, SortOrder sortOrder) {
+ return pDataTypeForArray.toBytes(object, PDataType.LONG, sortOrder);
+ }
@Override
public int toBytes(Object object, byte[] bytes, int offset) {
@@ -3742,8 +3797,8 @@ public enum PDataType {
@Override
public Object toObject(byte[] bytes, int offset, int length,
PDataType actualType, SortOrder sortOrder, Integer maxLength, Integer scale) {
-
- return pDataTypeForArray.toObject(bytes, offset, length, PDataType.LONG, sortOrder, maxLength, scale);
+ return pDataTypeForArray.toObject(bytes, offset, length, PDataType.LONG, sortOrder, maxLength, scale,
+ PDataType.LONG);
}
@Override
@@ -3768,6 +3823,14 @@ public enum PDataType {
return Types.ARRAY;
}
+ @Override
+ public void coerceBytes(ImmutableBytesWritable ptr, Object object, PDataType actualType, Integer maxLength,
+ Integer scale, SortOrder actualModifer, Integer desiredMaxLength, Integer desiredScale,
+ SortOrder desiredModifier) {
+ pDataTypeForArray.coerceBytes(ptr, object, actualType, maxLength, scale, desiredMaxLength, desiredScale,
+ this, actualModifer, desiredModifier);
+ }
+
},
SMALLINT_ARRAY("SMALLINT_ARRAY", PDataType.ARRAY_TYPE_BASE + PDataType.SMALLINT.getSqlType(), PhoenixArray.class, null) {
@Override
@@ -3788,10 +3851,15 @@ public enum PDataType {
return null;
}
- @Override
- public byte[] toBytes(Object object) {
- return pDataTypeForArray.toBytes(object, PDataType.SMALLINT);
- }
+ @Override
+ public byte[] toBytes(Object object) {
+ return toBytes(object, SortOrder.ASC);
+ }
+
+ @Override
+ public byte[] toBytes(Object object, SortOrder sortOrder) {
+ return pDataTypeForArray.toBytes(object, PDataType.SMALLINT, sortOrder);
+ }
@Override
public int toBytes(Object object, byte[] bytes, int offset) {
@@ -3811,8 +3879,8 @@ public enum PDataType {
@Override
public Object toObject(byte[] bytes, int offset, int length,
PDataType actualType, SortOrder sortOrder, Integer maxLength, Integer scale) {
-
- return pDataTypeForArray.toObject(bytes, offset, length, PDataType.SMALLINT, sortOrder, maxLength, scale);
+ return pDataTypeForArray.toObject(bytes, offset, length, PDataType.SMALLINT, sortOrder, maxLength, scale,
+ PDataType.SMALLINT);
}
@Override
@@ -3837,6 +3905,14 @@ public enum PDataType {
return Types.ARRAY;
}
+ @Override
+ public void coerceBytes(ImmutableBytesWritable ptr, Object object, PDataType actualType, Integer maxLength,
+ Integer scale, SortOrder actualModifer, Integer desiredMaxLength, Integer desiredScale,
+ SortOrder desiredModifier) {
+ pDataTypeForArray.coerceBytes(ptr, object, actualType, maxLength, scale, desiredMaxLength, desiredScale,
+ this, actualModifer, desiredModifier);
+ }
+
},
TINYINT_ARRAY("TINYINT_ARRAY", PDataType.ARRAY_TYPE_BASE + PDataType.TINYINT.getSqlType(), PhoenixArray.class, null) {
@Override
@@ -3857,10 +3933,15 @@ public enum PDataType {
return null;
}
- @Override
- public byte[] toBytes(Object object) {
- return pDataTypeForArray.toBytes(object, PDataType.TINYINT);
- }
+ @Override
+ public byte[] toBytes(Object object) {
+ return toBytes(object, SortOrder.ASC);
+ }
+
+ @Override
+ public byte[] toBytes(Object object, SortOrder sortOrder) {
+ return pDataTypeForArray.toBytes(object, PDataType.TINYINT, sortOrder);
+ }
@Override
public int toBytes(Object object, byte[] bytes, int offset) {
@@ -3880,14 +3961,22 @@ public enum PDataType {
@Override
public Object toObject(byte[] bytes, int offset, int length,
PDataType actualType, SortOrder sortOrder, Integer maxLength, Integer scale) {
-
- return pDataTypeForArray.toObject(bytes, offset, length, PDataType.TINYINT, sortOrder, maxLength, scale);
+ return pDataTypeForArray.toObject(bytes, offset, length, PDataType.TINYINT, sortOrder, maxLength, scale,
+ PDataType.TINYINT);
}
@Override
public boolean isCoercibleTo(PDataType targetType) {
return pDataTypeForArray.isCoercibleTo(targetType, PDataType.TINYINT_ARRAY);
}
+
+ @Override
+ public void coerceBytes(ImmutableBytesWritable ptr, Object object, PDataType actualType, Integer maxLength,
+ Integer scale, SortOrder actualModifer, Integer desiredMaxLength, Integer desiredScale,
+ SortOrder desiredModifier) {
+ pDataTypeForArray.coerceBytes(ptr, object, actualType, maxLength, scale, desiredMaxLength, desiredScale,
+ this, actualModifer, desiredModifier);
+ }
@Override
public boolean isCoercibleTo(PDataType targetType, Object value) {
@@ -3927,10 +4016,15 @@ public enum PDataType {
return null;
}
- @Override
- public byte[] toBytes(Object object) {
- return pDataTypeForArray.toBytes(object, PDataType.FLOAT);
- }
+ @Override
+ public byte[] toBytes(Object object) {
+ return toBytes(object, SortOrder.ASC);
+ }
+
+ @Override
+ public byte[] toBytes(Object object, SortOrder sortOrder) {
+ return pDataTypeForArray.toBytes(object, PDataType.FLOAT, sortOrder);
+ }
@Override
public int toBytes(Object object, byte[] bytes, int offset) {
@@ -3950,8 +4044,8 @@ public enum PDataType {
@Override
public Object toObject(byte[] bytes, int offset, int length,
PDataType actualType, SortOrder sortOrder, Integer maxLength, Integer scale) {
-
- return pDataTypeForArray.toObject(bytes, offset, length, PDataType.FLOAT, sortOrder, maxLength, scale);
+ return pDataTypeForArray.toObject(bytes, offset, length, PDataType.FLOAT, sortOrder, maxLength, scale,
+ PDataType.FLOAT);
}
@Override
@@ -3976,6 +4070,14 @@ public enum PDataType {
return Types.ARRAY;
}
+ @Override
+ public void coerceBytes(ImmutableBytesWritable ptr, Object object, PDataType actualType, Integer maxLength,
+ Integer scale, SortOrder actualModifer, Integer desiredMaxLength, Integer desiredScale,
+ SortOrder desiredModifier) {
+ pDataTypeForArray.coerceBytes(ptr, object, actualType, maxLength, scale, desiredMaxLength, desiredScale,
+ this, actualModifer, desiredModifier);
+ }
+
},
DOUBLE_ARRAY("DOUBLE_ARRAY", PDataType.ARRAY_TYPE_BASE + PDataType.DOUBLE.getSqlType(), PhoenixArray.class, null) {
final PArrayDataType pDataTypeForArray = new PArrayDataType();
@@ -3997,10 +4099,15 @@ public enum PDataType {
return null;
}
- @Override
- public byte[] toBytes(Object object) {
- return pDataTypeForArray.toBytes(object, PDataType.DOUBLE);
- }
+ @Override
+ public byte[] toBytes(Object object) {
+ return toBytes(object, SortOrder.ASC);
+ }
+
+ @Override
+ public byte[] toBytes(Object object, SortOrder sortOrder) {
+ return pDataTypeForArray.toBytes(object, PDataType.DOUBLE, sortOrder);
+ }
@Override
public int toBytes(Object object, byte[] bytes, int offset) {
@@ -4020,8 +4127,8 @@ public enum PDataType {
@Override
public Object toObject(byte[] bytes, int offset, int length,
PDataType actualType, SortOrder sortOrder, Integer maxLength, Integer scale) {
-
- return pDataTypeForArray.toObject(bytes, offset, length, PDataType.DOUBLE, sortOrder, maxLength, scale);
+ return pDataTypeForArray.toObject(bytes, offset, length, PDataType.DOUBLE, sortOrder, maxLength, scale,
+ PDataType.DOUBLE);
}
@Override
@@ -4040,6 +4147,14 @@ public enum PDataType {
}
return true;
}
+
+ @Override
+ public void coerceBytes(ImmutableBytesWritable ptr, Object object, PDataType actualType, Integer maxLength,
+ Integer scale, SortOrder actualModifer, Integer desiredMaxLength, Integer desiredScale,
+ SortOrder desiredModifier) {
+ pDataTypeForArray.coerceBytes(ptr, object, actualType, maxLength, scale, desiredMaxLength, desiredScale,
+ this, actualModifer, desiredModifier);
+ }
@Override
public int getResultSetSqlType() {
@@ -4067,10 +4182,15 @@ public enum PDataType {
return null;
}
- @Override
- public byte[] toBytes(Object object) {
- return pDataTypeForArray.toBytes(object, PDataType.DECIMAL);
- }
+ @Override
+ public byte[] toBytes(Object object) {
+ return toBytes(object, SortOrder.ASC);
+ }
+
+ @Override
+ public byte[] toBytes(Object object, SortOrder sortOrder) {
+ return pDataTypeForArray.toBytes(object, PDataType.DECIMAL, sortOrder);
+ }
@Override
public int toBytes(Object object, byte[] bytes, int offset) {
@@ -4090,9 +4210,17 @@ public enum PDataType {
@Override
public Object toObject(byte[] bytes, int offset, int length,
PDataType actualType, SortOrder sortOrder, Integer maxLength, Integer scale) {
-
- return pDataTypeForArray.toObject(bytes, offset, length, PDataType.DECIMAL, sortOrder, maxLength, scale);
+ return pDataTypeForArray.toObject(bytes, offset, length, PDataType.DECIMAL, sortOrder, maxLength, scale,
+ PDataType.DECIMAL);
}
+
+ @Override
+ public void coerceBytes(ImmutableBytesWritable ptr, Object object, PDataType actualType, Integer maxLength,
+ Integer scale, SortOrder actualModifer, Integer desiredMaxLength, Integer desiredScale,
+ SortOrder desiredModifier) {
+ pDataTypeForArray.coerceBytes(ptr, object, actualType, maxLength, scale, desiredMaxLength, desiredScale,
+ this, actualModifer, desiredModifier);
+ }
@Override
public boolean isCoercibleTo(PDataType targetType) {
@@ -4145,10 +4273,15 @@ public enum PDataType {
return null;
}
- @Override
- public byte[] toBytes(Object object) {
- return pDataTypeForArray.toBytes(object, PDataType.TIMESTAMP);
- }
+ @Override
+ public byte[] toBytes(Object object) {
+ return toBytes(object, SortOrder.ASC);
+ }
+
+ @Override
+ public byte[] toBytes(Object object, SortOrder sortOrder) {
+ return pDataTypeForArray.toBytes(object, PDataType.TIMESTAMP, sortOrder);
+ }
@Override
public int toBytes(Object object, byte[] bytes, int offset) {
@@ -4168,8 +4301,8 @@ public enum PDataType {
@Override
public Object toObject(byte[] bytes, int offset, int length,
PDataType actualType, SortOrder sortOrder, Integer maxLength, Integer scale) {
-
- return pDataTypeForArray.toObject(bytes, offset, length, PDataType.TIMESTAMP, sortOrder, maxLength, scale);
+ return pDataTypeForArray.toObject(bytes, offset, length, PDataType.TIMESTAMP, sortOrder, maxLength, scale,
+ PDataType.TIMESTAMP);
}
@Override
@@ -4194,6 +4327,14 @@ public enum PDataType {
return Types.ARRAY;
}
+ @Override
+ public void coerceBytes(ImmutableBytesWritable ptr, Object object, PDataType actualType, Integer maxLength,
+ Integer scale, SortOrder actualModifer, Integer desiredMaxLength, Integer desiredScale,
+ SortOrder desiredModifier) {
+ pDataTypeForArray.coerceBytes(ptr, object, actualType, maxLength, scale, desiredMaxLength, desiredScale,
+ this, actualModifer, desiredModifier);
+ }
+
},
UNSIGNED_TIMESTAMP_ARRAY("UNSIGNED_TIMESTAMP_ARRAY", PDataType.ARRAY_TYPE_BASE + PDataType.UNSIGNED_TIMESTAMP.getSqlType(), PhoenixArray.class,
null) {
@@ -4215,10 +4356,15 @@ public enum PDataType {
return null;
}
- @Override
- public byte[] toBytes(Object object) {
- return pDataTypeForArray.toBytes(object, PDataType.UNSIGNED_TIMESTAMP);
- }
+ @Override
+ public byte[] toBytes(Object object) {
+ return toBytes(object, SortOrder.ASC);
+ }
+
+ @Override
+ public byte[] toBytes(Object object, SortOrder sortOrder) {
+ return pDataTypeForArray.toBytes(object, PDataType.UNSIGNED_TIMESTAMP, sortOrder);
+ }
@Override
public int toBytes(Object object, byte[] bytes, int offset) {
@@ -4238,8 +4384,8 @@ public enum PDataType {
@Override
public Object toObject(byte[] bytes, int offset, int length,
PDataType actualType, SortOrder sortOrder, Integer maxLength, Integer scale) {
-
- return pDataTypeForArray.toObject(bytes, offset, length, PDataType.UNSIGNED_TIMESTAMP, sortOrder, maxLength, scale);
+ return pDataTypeForArray.toObject(bytes, offset, length, PDataType.UNSIGNED_TIMESTAMP, sortOrder,
+ maxLength, scale, PDataType.UNSIGNED_TIMESTAMP);
}
@Override
@@ -4258,6 +4404,14 @@ public enum PDataType {
}
return true;
}
+
+ @Override
+ public void coerceBytes(ImmutableBytesWritable ptr, Object object, PDataType actualType, Integer maxLength,
+ Integer scale, SortOrder actualModifer, Integer desiredMaxLength, Integer desiredScale,
+ SortOrder desiredModifier) {
+ pDataTypeForArray.coerceBytes(ptr, object, actualType, maxLength, scale, desiredMaxLength, desiredScale,
+ this, actualModifer, desiredModifier);
+ }
@Override
public int getResultSetSqlType() {
@@ -4284,15 +4438,20 @@ public enum PDataType {
return null;
}
- @Override
- public byte[] toBytes(Object object) {
- return pDataTypeForArray.toBytes(object, PDataType.TIME);
- }
+ @Override
+ public byte[] toBytes(Object object) {
+ return toBytes(object, SortOrder.ASC);
+ }
- @Override
- public int toBytes(Object object, byte[] bytes, int offset) {
- return pDataTypeForArray.toBytes(object, bytes, offset);
- }
+ @Override
+ public byte[] toBytes(Object object, SortOrder sortOrder) {
+ return pDataTypeForArray.toBytes(object, PDataType.TIME, sortOrder);
+ }
+
+ @Override
+ public int toBytes(Object object, byte[] bytes, int offset) {
+ return pDataTypeForArray.toBytes(object, bytes, offset);
+ }
@Override
public Object toObject(String value) {
@@ -4307,8 +4466,8 @@ public enum PDataType {
@Override
public Object toObject(byte[] bytes, int offset, int length,
PDataType actualType, SortOrder sortOrder, Integer maxLength, Integer scale) {
-
- return pDataTypeForArray.toObject(bytes, offset, length, PDataType.TIME, sortOrder, maxLength, scale);
+ return pDataTypeForArray.toObject(bytes, offset, length, PDataType.TIME, sortOrder, maxLength, scale,
+ PDataType.TIME);
}
@Override
@@ -4332,6 +4491,14 @@ public enum PDataType {
public int getResultSetSqlType() {
return Types.ARRAY;
}
+
+ @Override
+ public void coerceBytes(ImmutableBytesWritable ptr, Object object, PDataType actualType, Integer maxLength,
+ Integer scale, SortOrder actualModifer, Integer desiredMaxLength, Integer desiredScale,
+ SortOrder desiredModifier) {
+ pDataTypeForArray.coerceBytes(ptr, object, actualType, maxLength, scale, desiredMaxLength, desiredScale,
+ this, actualModifer, desiredModifier);
+ }
},
UNSIGNED_TIME_ARRAY("UNSIGNED_TIME_ARRAY", PDataType.ARRAY_TYPE_BASE + PDataType.UNSIGNED_TIME.getSqlType(), PhoenixArray.class, null) {
@@ -4353,10 +4520,15 @@ public enum PDataType {
return null;
}
- @Override
- public byte[] toBytes(Object object) {
- return pDataTypeForArray.toBytes(object, PDataType.UNSIGNED_TIME);
- }
+ @Override
+ public byte[] toBytes(Object object) {
+ return toBytes(object, SortOrder.ASC);
+ }
+
+ @Override
+ public byte[] toBytes(Object object, SortOrder sortOrder) {
+ return pDataTypeForArray.toBytes(object, PDataType.UNSIGNED_TIME, sortOrder);
+ }
@Override
public int toBytes(Object object, byte[] bytes, int offset) {
@@ -4376,8 +4548,8 @@ public enum PDataType {
@Override
public Object toObject(byte[] bytes, int offset, int length,
PDataType actualType, SortOrder sortOrder, Integer maxLength, Integer scale) {
-
- return pDataTypeForArray.toObject(bytes, offset, length, PDataType.UNSIGNED_TIME, sortOrder, maxLength, scale);
+ return pDataTypeForArray.toObject(bytes, offset, length, PDataType.UNSIGNED_TIME, sortOrder, maxLength,
+ scale, PDataType.UNSIGNED_TIME);
}
@Override
@@ -4396,6 +4568,14 @@ public enum PDataType {
}
return true;
}
+
+ @Override
+ public void coerceBytes(ImmutableBytesWritable ptr, Object object, PDataType actualType, Integer maxLength,
+ Integer scale, SortOrder actualModifer, Integer desiredMaxLength, Integer desiredScale,
+ SortOrder desiredModifier) {
+ pDataTypeForArray.coerceBytes(ptr, object, actualType, maxLength, scale, desiredMaxLength, desiredScale,
+ this, actualModifer, desiredModifier);
+ }
@Override
public int getResultSetSqlType() {
@@ -4422,10 +4602,15 @@ public enum PDataType {
return null;
}
- @Override
- public byte[] toBytes(Object object) {
- return pDataTypeForArray.toBytes(object, PDataType.DATE);
- }
+ @Override
+ public byte[] toBytes(Object object) {
+ return toBytes(object, SortOrder.ASC);
+ }
+
+ @Override
+ public byte[] toBytes(Object object, SortOrder sortOrder) {
+ return pDataTypeForArray.toBytes(object, PDataType.DATE, sortOrder);
+ }
@Override
public int toBytes(Object object, byte[] bytes, int offset) {
@@ -4445,8 +4630,8 @@ public enum PDataType {
@Override
public Object toObject(byte[] bytes, int offset, int length,
PDataType actualType, SortOrder sortOrder, Integer maxLength, Integer scale) {
-
- return pDataTypeForArray.toObject(bytes, offset, length, PDataType.DATE, sortOrder, maxLength, scale);
+ return pDataTypeForArray.toObject(bytes, offset, length, PDataType.DATE, sortOrder, maxLength, scale,
+ PDataType.DATE);
}
@Override
@@ -4471,6 +4656,14 @@ public enum PDataType {
return Types.ARRAY;
}
+ @Override
+ public void coerceBytes(ImmutableBytesWritable ptr, Object object, PDataType actualType, Integer maxLength,
+ Integer scale, SortOrder actualModifer, Integer desiredMaxLength, Integer desiredScale,
+ SortOrder desiredModifier) {
+ pDataTypeForArray.coerceBytes(ptr, object, actualType, maxLength, scale, desiredMaxLength, desiredScale,
+ this, actualModifer, desiredModifier);
+ }
+
},
UNSIGNED_DATE_ARRAY("UNSIGNED_DATE_ARRAY", PDataType.ARRAY_TYPE_BASE + PDataType.UNSIGNED_DATE.getSqlType(), PhoenixArray.class, null) {
@Override
@@ -4491,10 +4684,15 @@ public enum PDataType {
return null;
}
- @Override
- public byte[] toBytes(Object object) {
- return pDataTypeForArray.toBytes(object, PDataType.UNSIGNED_DATE);
- }
+ @Override
+ public byte[] toBytes(Object object) {
+ return toBytes(object, SortOrder.ASC);
+ }
+
+ @Override
+ public byte[] toBytes(Object object, SortOrder sortOrder) {
+ return pDataTypeForArray.toBytes(object, PDataType.UNSIGNED_DATE, sortOrder);
+ }
@Override
public int toBytes(Object object, byte[] bytes, int offset) {
@@ -4514,8 +4712,8 @@ public enum PDataType {
@Override
public Object toObject(byte[] bytes, int offset, int length,
PDataType actualType, SortOrder sortOrder, Integer maxLength, Integer scale) {
-
- return pDataTypeForArray.toObject(bytes, offset, length, PDataType.UNSIGNED_DATE, sortOrder, maxLength, scale);
+ return pDataTypeForArray.toObject(bytes, offset, length, PDataType.UNSIGNED_DATE, sortOrder, maxLength,
+ scale, PDataType.UNSIGNED_DATE);
}
@Override
@@ -4540,6 +4738,14 @@ public enum PDataType {
return Types.ARRAY;
}
+ @Override
+ public void coerceBytes(ImmutableBytesWritable ptr, Object object, PDataType actualType, Integer maxLength,
+ Integer scale, SortOrder actualModifer, Integer desiredMaxLength, Integer desiredScale,
+ SortOrder desiredModifier) {
+ pDataTypeForArray.coerceBytes(ptr, object, actualType, maxLength, scale, desiredMaxLength, desiredScale,
+ this, actualModifer, desiredModifier);
+ }
+
},
UNSIGNED_LONG_ARRAY("UNSIGNED_LONG_ARRAY", PDataType.ARRAY_TYPE_BASE + PDataType.UNSIGNED_LONG.getSqlType(), PhoenixArray.class, null) {
@Override
@@ -4560,10 +4766,15 @@ public enum PDataType {
return null;
}
- @Override
- public byte[] toBytes(Object object) {
- return pDataTypeForArray.toBytes(object, PDataType.UNSIGNED_LONG);
- }
+ @Override
+ public byte[] toBytes(Object object) {
+ return toBytes(object, SortOrder.ASC);
+ }
+
+ @Override
+ public byte[] toBytes(Object object, SortOrder sortOrder) {
+ return pDataTypeForArray.toBytes(object, PDataType.UNSIGNED_LONG, sortOrder);
+ }
@Override
public int toBytes(Object object, byte[] bytes, int offset) {
@@ -4583,8 +4794,8 @@ public enum PDataType {
@Override
public Object toObject(byte[] bytes, int offset, int length,
PDataType actualType, SortOrder sortOrder, Integer maxLength, Integer scale) {
-
- return pDataTypeForArray.toObject(bytes, offset, length, PDataType.UNSIGNED_LONG, sortOrder, maxLength, scale);
+ return pDataTypeForArray.toObject(bytes, offset, length, PDataType.UNSIGNED_LONG, sortOrder, maxLength,
+ scale, PDataType.UNSIGNED_LONG);
}
@Override
@@ -4608,6 +4819,14 @@ public enum PDataType {
public int getResultSetSqlType() {
return Types.ARRAY;
}
+
+ @Override
+ public void coerceBytes(ImmutableBytesWritable ptr, Object object, PDataType actualType, Integer maxLength,
+ Integer scale, SortOrder actualModifer, Integer desiredMaxLength, Integer desiredScale,
+ SortOrder desiredModifier) {
+ pDataTypeForArray.coerceBytes(ptr, object, actualType, maxLength, scale, desiredMaxLength, desiredScale,
+ this, actualModifer, desiredModifier);
+ }
},
UNSIGNED_INT_ARRAY("UNSIGNED_INT_ARRAY", PDataType.ARRAY_TYPE_BASE + PDataType.UNSIGNED_INT.getSqlType(), PhoenixArray.class, null) {
@@ -4629,10 +4848,15 @@ public enum PDataType {
return null;
}
- @Override
- public byte[] toBytes(Object object) {
- return pDataTypeForArray.toBytes(object, PDataType.UNSIGNED_INT);
- }
+ @Override
+ public byte[] toBytes(Object object) {
+ return toBytes(object, SortOrder.ASC);
+ }
+
+ @Override
+ public byte[] toBytes(Object object, SortOrder sortOrder) {
+ return pDataTypeForArray.toBytes(object, PDataType.UNSIGNED_INT, sortOrder);
+ }
@Override
public int toBytes(Object object, byte[] bytes, int offset) {
@@ -4652,8 +4876,8 @@ public enum PDataType {
@Override
public Object toObject(byte[] bytes, int offset, int length,
PDataType actualType, SortOrder sortOrder, Integer maxLength, Integer scale) {
-
- return pDataTypeForArray.toObject(bytes, offset, length, PDataType.UNSIGNED_INT, sortOrder, maxLength, scale);
+ return pDataTypeForArray.toObject(bytes, offset, length, PDataType.UNSIGNED_INT, sortOrder, maxLength,
+ scale, PDataType.UNSIGNED_INT);
}
@Override
@@ -4678,6 +4902,14 @@ public enum PDataType {
return Types.ARRAY;
}
+ @Override
+ public void coerceBytes(ImmutableBytesWritable ptr, Object object, PDataType actualType, Integer maxLength,
+ Integer scale, SortOrder actualModifer, Integer desiredMaxLength, Integer desiredScale,
+ SortOrder desiredModifier) {
+ pDataTypeForArray.coerceBytes(ptr, object, actualType, maxLength, scale, desiredMaxLength, desiredScale,
+ this, actualModifer, desiredModifier);
+ }
+
},
UNSIGNED_SMALLINT_ARRAY("UNSIGNED_SMALLINT_ARRAY", PDataType.ARRAY_TYPE_BASE + PDataType.UNSIGNED_SMALLINT.getSqlType(),
PhoenixArray.class, null) {
@@ -4699,10 +4931,15 @@ public enum PDataType {
return null;
}
- @Override
- public byte[] toBytes(Object object) {
- return pDataTypeForArray.toBytes(object, PDataType.UNSIGNED_SMALLINT);
- }
+ @Override
+ public byte[] toBytes(Object object) {
+ return toBytes(object, SortOrder.ASC);
+ }
+
+ @Override
+ public byte[] toBytes(Object object, SortOrder sortOrder) {
+ return pDataTypeForArray.toBytes(object, PDataType.UNSIGNED_SMALLINT, sortOrder);
+ }
@Override
public int toBytes(Object object, byte[] bytes, int offset) {
@@ -4722,8 +4959,8 @@ public enum PDataType {
@Override
public Object toObject(byte[] bytes, int offset, int length,
PDataType actualType, SortOrder sortOrder, Integer maxLength, Integer scale) {
-
- return pDataTypeForArray.toObject(bytes, offset, length, PDataType.UNSIGNED_SMALLINT, sortOrder, maxLength, scale);
+ return pDataTypeForArray.toObject(bytes, offset, length, PDataType.UNSIGNED_SMALLINT, sortOrder, maxLength,
+ scale, PDataType.UNSIGNED_SMALLINT);
}
@Override
@@ -4748,6 +4985,14 @@ public enum PDataType {
return Types.ARRAY;
}
+ @Override
+ public void coerceBytes(ImmutableBytesWritable ptr, Object object, PDataType actualType, Integer maxLength,
+ Integer scale, SortOrder actualModifer, Integer desiredMaxLength, Integer desiredScale,
+ SortOrder desiredModifier) {
+ pDataTypeForArray.coerceBytes(ptr, object, actualType, maxLength, scale, desiredMaxLength, desiredScale,
+ this, actualModifer, desiredModifier);
+ }
+
},
UNSIGNED_TINYINT_ARRAY("UNSIGNED_TINYINT__ARRAY", PDataType.ARRAY_TYPE_BASE + PDataType.UNSIGNED_TINYINT.getSqlType(), PhoenixArray.class,
null) {
@@ -4769,10 +5014,15 @@ public enum PDataType {
return null;
}
- @Override
- public byte[] toBytes(Object object) {
- return pDataTypeForArray.toBytes(object, PDataType.UNSIGNED_TINYINT);
- }
+ @Override
+ public byte[] toBytes(Object object) {
+ return toBytes(object, SortOrder.ASC);
+ }
+
+ @Override
+ public byte[] toBytes(Object object, SortOrder sortOrder) {
+ return pDataTypeForArray.toBytes(object, PDataType.UNSIGNED_TINYINT, sortOrder);
+ }
@Override
public int toBytes(Object object, byte[] bytes, int offset) {
@@ -4792,8 +5042,8 @@ public enum PDataType {
@Override
public Object toObject(byte[] bytes, int offset, int length,
PDataType actualType, SortOrder sortOrder, Integer maxLength, Integer scale) {
-
- return pDataTypeForArray.toObject(bytes, offset, length, PDataType.UNSIGNED_TINYINT, sortOrder, maxLength, scale);
+ return pDataTypeForArray.toObject(bytes, offset, length, PDataType.UNSIGNED_TINYINT, sortOrder, maxLength,
+ scale, PDataType.UNSIGNED_TINYINT);
}
@Override
@@ -4817,6 +5067,14 @@ public enum PDataType {
public int getResultSetSqlType() {
return Types.ARRAY;
}
+
+ @Override
+ public void coerceBytes(ImmutableBytesWritable ptr, Object object, PDataType actualType, Integer maxLength,
+ Integer scale, SortOrder actualModifer, Integer desiredMaxLength, Integer desiredScale,
+ SortOrder desiredModifier) {
+ pDataTypeForArray.coerceBytes(ptr, object, actualType, maxLength, scale, desiredMaxLength, desiredScale,
+ this, actualModifer, desiredModifier);
+ }
},
UNSIGNED_FLOAT_ARRAY("UNSIGNED_FLOAT_ARRAY", PDataType.ARRAY_TYPE_BASE + PDataType.UNSIGNED_FLOAT.getSqlType(), PhoenixArray.class, null) {
@Override
@@ -4837,10 +5095,15 @@ public enum PDataType {
return null;
}
- @Override
- public byte[] toBytes(Object object) {
- return pDataTypeForArray.toBytes(object, PDataType.UNSIGNED_FLOAT);
- }
+ @Override
+ public byte[] toBytes(Object object) {
+ return toBytes(object, SortOrder.ASC);
+ }
+
+ @Override
+ public byte[] toBytes(Object object, SortOrder sortOrder) {
+ return pDataTypeForArray.toBytes(object, PDataType.UNSIGNED_FLOAT, sortOrder);
+ }
@Override
public int toBytes(Object object, byte[] bytes, int offset) {
@@ -4860,8 +5123,8 @@ public enum PDataType {
@Override
public Object toObject(byte[] bytes, int offset, int length,
PDataType actualType, SortOrder sortOrder, Integer maxLength, Integer scale) {
-
- return pDataTypeForArray.toObject(bytes, offset, length, PDataType.UNSIGNED_FLOAT, sortOrder, maxLength, scale);
+ return pDataTypeForArray.toObject(bytes, offset, length, PDataType.UNSIGNED_FLOAT, sortOrder, maxLength,
+ scale, PDataType.UNSIGNED_FLOAT);
}
@Override
@@ -4886,6 +5149,14 @@ public enum PDataType {
return Types.ARRAY;
}
+ @Override
+ public void coerceBytes(ImmutableBytesWritable ptr, Object object, PDataType actualType, Integer maxLength,
+ Integer scale, SortOrder actualModifer, Integer desiredMaxLength, Integer desiredScale,
+ SortOrder desiredModifier) {
+ pDataTypeForArray.coerceBytes(ptr, object, actualType, maxLength, scale, desiredMaxLength, desiredScale,
+ this, actualModifer, desiredModifier);
+ }
+
},
UNSIGNED_DOUBLE_ARRAY("UNSIGNED_DOUBLE__ARRAY", PDataType.ARRAY_TYPE_BASE + PDataType.UNSIGNED_DOUBLE.getSqlType(), PhoenixArray.class,
null) {
@@ -4907,10 +5178,15 @@ public enum PDataType {
return null;
}
- @Override
- public byte[] toBytes(Object object) {
- return pDataTypeForArray.toBytes(object, PDataType.UNSIGNED_DOUBLE);
- }
+ @Override
+ public byte[] toBytes(Object object) {
+ return toBytes(object, SortOrder.ASC);
+ }
+
+ @Override
+ public byte[] toBytes(Object object, SortOrder sortOrder) {
+ return pDataTypeForArray.toBytes(object, PDataType.UNSIGNED_DOUBLE, sortOrder);
+ }
@Override
public int toBytes(Object object, byte[] bytes, int offset) {
@@ -4930,14 +5206,22 @@ public enum PDataType {
@Override
public Object toObject(byte[] bytes, int offset, int length,
PDataType actualType, SortOrder sortOrder, Integer maxLength, Integer scale) {
-
- return pDataTypeForArray.toObject(bytes, offset, length, PDataType.UNSIGNED_DOUBLE, sortOrder, maxLength, scale);
+ return pDataTypeForArray.toObject(bytes, offset, length, PDataType.UNSIGNED_DOUBLE, sortOrder, maxLength,
+ scale, PDataType.UNSIGNED_DOUBLE);
}
@Override
public boolean isCoercibleTo(PDataType targetType) {
return pDataTypeForArray.isCoercibleTo(targetType, PDataType.UNSIGNED_DOUBLE_ARRAY);
}
+
+ @Override
+ public void coerceBytes(ImmutableBytesWritable ptr, Object object, PDataType actualType, Integer maxLength,
+ Integer scale, SortOrder actualModifer, Integer desiredMaxLength, Integer desiredScale,
+ SortOrder desiredModifier) {
+ pDataTypeForArray.coerceBytes(ptr, object, actualType, maxLength, scale, desiredMaxLength, desiredScale,
+ this, actualModifer, desiredModifier);
+ }
@Override
public boolean isCoercibleTo(PDataType targetType, Object value) {
@@ -6500,6 +6784,11 @@ public enum PDataType {
coerceBytes(ptr, null, actualType, null, null, actualModifier, null, null, expectedModifier);
}
+ public final void coerceBytes(ImmutableBytesWritable ptr, PDataType actualType, SortOrder actualModifier,
+ SortOrder expectedModifier, Integer desiredMaxLength) {
+ coerceBytes(ptr, null, actualType, null, null, actualModifier, desiredMaxLength, null, expectedModifier);
+ }
+
private static Void throwConstraintViolationException(PDataType source, PDataType target) {
throw new ConstraintViolationException(source + " cannot be coerced to " + target);
}
@@ -6600,6 +6889,10 @@ public enum PDataType {
return toObject(bytes, 0, bytes.length, this, sortOrder);
}
+ public final Object toObject(byte[] bytes, SortOrder sortOrder, PDataType actualType) {
+ return toObject(bytes, 0, bytes.length, actualType, sortOrder);
+ }
+
private static final Map<String, PDataType> SQL_TYPE_NAME_TO_PCOLUMN_DATA_TYPE;
static {
ImmutableMap.Builder<String, PDataType> builder =