[ https://issues.apache.org/jira/browse/PHOENIX-1661?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14639903#comment-14639903 ]
ASF GitHub Bot commented on PHOENIX-1661: ----------------------------------------- Github user twdsilva commented on a diff in the pull request: https://github.com/apache/phoenix/pull/93#discussion_r35394919 --- Diff: phoenix-core/src/test/java/org/apache/phoenix/expression/function/JsonFunctionTest.java --- @@ -0,0 +1,284 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.phoenix.expression.function; + +import org.apache.hadoop.hbase.io.ImmutableBytesWritable; +import org.apache.hadoop.hbase.util.Bytes; +import org.apache.phoenix.expression.Expression; +import org.apache.phoenix.expression.LiteralExpression; +import org.apache.phoenix.schema.json.PhoenixJson; +import org.apache.phoenix.schema.types.*; +import org.junit.Test; + +import java.sql.Time; +import java.sql.Timestamp; +import java.util.Date; +import java.text.SimpleDateFormat; +import java.util.Arrays; +import java.util.List; + +import static org.junit.Assert.assertEquals; + + +/** + * Unit tests for JSON build-in function. + * Testing function includes below: + * {@link ArrayToJsonFunction} + * {@link JsonArrayElementsFunction} + * {@link JsonPopulateRecordFunction} + * {@link JsonPopulateRecordSetFunction} + * {@link JsonArrayLengthFunction} + * {@link JsonObjectKeysFunction} + * {@link ToJsonFunction} + * {@link JsonEachFunction} + * + */ +public class JsonFunctionTest { + public static final String TEST_JSON_STR = + "{\"f2\":{\"f3\":\"value\"},\"f4\":{\"f5\":99,\"f6\":[1,true,\"foo\"]},\"f7\":true}"; + + private static PhoenixJson testArrayToJson (Object[] array,PDataType datatype,PArrayDataType arraydatatype) throws Exception { + PhoenixArray pa = PArrayDataType.instantiatePhoenixArray( datatype,array); + LiteralExpression arrayExpr = LiteralExpression.newConstant(pa,arraydatatype ); + List<Expression> children = Arrays.<Expression>asList(arrayExpr); + ArrayToJsonFunction e = new ArrayToJsonFunction(children); + ImmutableBytesWritable ptr = new ImmutableBytesWritable(); + boolean evaluated = e.evaluate(null, ptr); + PhoenixJson result = (PhoenixJson)e.getDataType().toObject(ptr); + return result; + } + + @Test + public void testNumberArrayToJson() throws Exception { + Object[] testarray = new Object[]{1,12,32,432}; + PhoenixJson result = testArrayToJson(testarray, PInteger.INSTANCE, PIntegerArray.INSTANCE); --- End diff -- Just add test that executes this function as a query. > Implement built-in functions for JSON > ------------------------------------- > > Key: PHOENIX-1661 > URL: https://issues.apache.org/jira/browse/PHOENIX-1661 > Project: Phoenix > Issue Type: Bug > Reporter: James Taylor > Labels: JSON, Java, SQL, gsoc2015, mentor > Attachments: PhoenixJSONSpecification-First-Draft.pdf > > > Take a look at the JSON built-in functions that are implemented in Postgres > (http://www.postgresql.org/docs/9.3/static/functions-json.html) and implement > the same for Phoenix in Java following this guide: > http://phoenix-hbase.blogspot.com/2013/04/how-to-add-your-own-built-in-function.html > Examples of functions include ARRAY_TO_JSON, ROW_TO_JSON, TO_JSON, etc. The > implementation of these built-in functions will be impacted by how JSON is > stored in Phoenix. See PHOENIX-628. An initial implementation could work off > of a simple text-based JSON representation and then when a native JSON type > is implemented, they could be reworked to be more efficient. -- This message was sent by Atlassian JIRA (v6.3.4#6332)