[
https://issues.apache.org/jira/browse/PHOENIX-174?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14508380#comment-14508380
]
ASF GitHub Bot commented on PHOENIX-174:
----------------------------------------
Github user JamesRTaylor commented on a diff in the pull request:
https://github.com/apache/phoenix/pull/75#discussion_r28934216
--- Diff:
phoenix-core/src/main/java/org/apache/phoenix/expression/function/JsonExtractPathTextFunction.java
---
@@ -0,0 +1,108 @@
+package org.apache.phoenix.expression.function;
+
+import java.sql.SQLException;
+import java.util.List;
+
+import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
+import org.apache.phoenix.compile.KeyPart;
+import org.apache.phoenix.exception.SQLExceptionCode;
+import org.apache.phoenix.exception.SQLExceptionInfo;
+import org.apache.phoenix.expression.Expression;
+import org.apache.phoenix.parse.FunctionParseNode.Argument;
+import org.apache.phoenix.parse.FunctionParseNode.BuiltInFunction;
+import org.apache.phoenix.schema.IllegalDataException;
+import org.apache.phoenix.schema.json.PhoenixJson;
+import org.apache.phoenix.schema.tuple.Tuple;
+import org.apache.phoenix.schema.types.PDataType;
+import org.apache.phoenix.schema.types.PJsonDataType;
+import org.apache.phoenix.schema.types.PVarchar;
+import org.apache.phoenix.schema.types.PVarcharArray;
+import org.apache.phoenix.schema.types.PhoenixArray;
+import org.apache.phoenix.util.ByteUtil;
+
+@BuiltInFunction(name = JsonExtractPathTextFunction.NAME, args = {
+ @Argument(allowedTypes = { PJsonDataType.class }),
+ @Argument(allowedTypes = { PVarcharArray.class }) })
+public class JsonExtractPathTextFunction extends ScalarFunction {
+ public static final String NAME = "JSON_EXTRACT_PATH_TEXT";
+
+ public JsonExtractPathTextFunction() {
+ super();
+ }
+
+ public JsonExtractPathTextFunction(List<Expression> children) {
+ super(children);
+ }
+
+ @Override
+ public boolean evaluate(Tuple tuple, ImmutableBytesWritable ptr) {
+ Expression jsonExpression = this.children.get(0);
+ if (!jsonExpression.evaluate(tuple, ptr)) {
+ return false;
+ }
+ if (ptr.getLength() == 0) {
+ return false;
+ }
+ PhoenixJson phoenixJson =
+ (PhoenixJson) PJsonDataType.INSTANCE.toObject(ptr.get(),
ptr.getOffset(),
+ ptr.getLength());
+
+ Expression jsonPathArrayExpression = children.get(1);
+ if (!jsonPathArrayExpression.evaluate(tuple, ptr)) {
+ return false;
+ }
+
+ if (ptr.getLength() == 0) {
+ return false;
+ }
+
+ PhoenixArray phoenixArray = (PhoenixArray)
PVarcharArray.INSTANCE.toObject(ptr);
+ try {
+ String[] jsonPaths = (String[]) phoenixArray.getArray();
+ PhoenixJson phoenixJson2 =
phoenixJson.getNullablePhoenixJson(jsonPaths);
+ if (phoenixJson2 == null) {
+ ptr.set(ByteUtil.EMPTY_BYTE_ARRAY);
+ } else {
+ byte[] json =
PVarchar.INSTANCE.toBytes(phoenixJson2.serializeToString());
+ ptr.set(json);
+ }
+
+ } catch (SQLException sqe) {
+ new IllegalDataException(new
SQLExceptionInfo.Builder(SQLExceptionCode.ILLEGAL_DATA)
--- End diff --
You can just do a throw here with the sqe in the constructor and it'll get
un-nested for you (don't forget to throw it, though! :-) ):
throw new IllegalDataException(sqe);
> Zookeeper parameter in Phoenix JDBC URL should be optional as it can be
> specified in hbase-site.xml
> ---------------------------------------------------------------------------------------------------
>
> Key: PHOENIX-174
> URL: https://issues.apache.org/jira/browse/PHOENIX-174
> Project: Phoenix
> Issue Type: Task
> Affects Versions: 1.1
> Reporter: mujtaba
> Labels: enhancement
>
> Currently, value from HBase zookeeper/port specified in Phoenix JDBC URL
> overrides the value specified in hbase-site.xml. Override is fine, but it
> should use value specified in hbase-site.xml if no value is specified in
> phoenix JDBC URL i.e. to make this parameter optional.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)