[ https://issues.apache.org/jira/browse/PHOENIX-174?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14508375#comment-14508375 ]
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_r28934116 --- Diff: phoenix-core/src/main/java/org/apache/phoenix/expression/function/JsonExtractPathFunction.java --- @@ -0,0 +1,110 @@ +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.PVarcharArray; +import org.apache.phoenix.schema.types.PhoenixArray; +import org.apache.phoenix.util.ByteUtil; + +@BuiltInFunction(name = JsonExtractPathFunction.NAME, args = { + @Argument(allowedTypes = { PJsonDataType.class }), + @Argument(allowedTypes = { PVarcharArray.class }) }) +public class JsonExtractPathFunction extends ScalarFunction { + public static final String NAME = "JSON_EXTRACT_PATH"; + + public JsonExtractPathFunction() { + super(); + } + + public JsonExtractPathFunction(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 = PJsonDataType.INSTANCE.toBytes(phoenixJson2); + ptr.set(json); + } + + } catch (SQLException sqe) { + new IllegalDataException(new SQLExceptionInfo.Builder(SQLExceptionCode.ILLEGAL_DATA) + .setRootCause(sqe).build().buildException()); + } + return true; + } + + @SuppressWarnings("rawtypes") + @Override + public PDataType getDataType() { + return PJsonDataType.INSTANCE; + } + + @Override + public String getName() { + return NAME; + } + + @Override + public boolean isNullable() { + return PJsonDataType.INSTANCE.isNullable(); + } + + @Override --- End diff -- Remove these implementations, as this looks like the default impl. > 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)