[ 
https://issues.apache.org/jira/browse/PHOENIX-628?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14512619#comment-14512619
 ] 

ASF GitHub Bot commented on PHOENIX-628:
----------------------------------------

Github user JamesRTaylor commented on a diff in the pull request:

    https://github.com/apache/phoenix/pull/76#discussion_r29102507
  
    --- Diff: 
phoenix-core/src/main/java/org/apache/phoenix/schema/json/PhoenixJson.java ---
    @@ -0,0 +1,266 @@
    +/*
    + * 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.schema.json;
    +
    +import java.io.IOException;
    +import java.sql.SQLException;
    +import java.util.Arrays;
    +
    +import org.apache.hadoop.hbase.util.Bytes;
    +import org.apache.phoenix.exception.SQLExceptionCode;
    +import org.apache.phoenix.exception.SQLExceptionInfo;
    +import org.codehaus.jackson.JsonFactory;
    +import org.codehaus.jackson.JsonNode;
    +import org.codehaus.jackson.JsonParser;
    +import org.codehaus.jackson.JsonParser.Feature;
    +import org.codehaus.jackson.JsonProcessingException;
    +import org.codehaus.jackson.map.ObjectMapper;
    +import org.codehaus.jackson.node.ValueNode;
    +
    +import com.google.common.base.Preconditions;
    +
    +/**
    + * The {@link PhoenixJson} wraps json and uses Jackson library to parse 
and traverse the json. It
    + * should be used to represent the JSON data type and also should be used 
to parse Json data and
    + * read the value from it. It always conside the last value if same key 
exist more than once.
    + */
    +public class PhoenixJson implements Comparable<PhoenixJson> {
    +    private final JsonNode node;
    +    private String jsonAsString;
    +
    +    /**
    +     * Static Factory method to get an {@link PhoenixJson} object. It also 
validates the json and
    +     * throws {@link SQLException} if it is invalid with line number and 
character.
    +     * @param data Buffer that contains data to parse
    +     * @param offset Offset of the first data byte within buffer
    +     * @param length Length of contents to parse within buffer
    +     * @return {@link PhoenixJson}.
    +     * @throws SQLException
    +     */
    +    public static PhoenixJson getInstance(byte[] jsonData, int offset, int 
length)
    +            throws SQLException {
    +        String jsonDataStr = Bytes.toString(jsonData, offset, length);
    +        return getInstance(jsonDataStr);
    +    }
    +
    +    /**
    +     * Static Factory method to get an {@link PhoenixJson} object. It also 
validates the json and
    +     * throws {@link SQLException} if it is invalid with line number and 
character.
    +     * @param jsonData Json data as {@link String}.
    +     * @return {@link PhoenixJson}.
    +     * @throws SQLException
    +     */
    +    public static PhoenixJson getInstance(String jsonData) throws 
SQLException {
    +        try {
    +            JsonFactory jsonFactory = new JsonFactory();
    +            JsonParser jsonParser = jsonFactory.createJsonParser(jsonData);
    +            PhoenixJson phoenixJson = getInstanceInternal(jsonParser);
    +            /*
    +             * input data has been stored as it is, since some data is 
lost when json parser runs,
    +             * for example if a JSON object within the value contains the 
same key more than once
    +             * then only last one is stored rest all of them are ignored, 
which will defy the
    +             * contract of PJsonDataType of keeping user data as it is.
    +             */
    +            phoenixJson.setJsonAsString(jsonData);
    --- End diff --
    
    Pass the String through the PhoenixJson constructor. PhoenixJson should be 
immutable.


> Support native JSON data type
> -----------------------------
>
>                 Key: PHOENIX-628
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-628
>             Project: Phoenix
>          Issue Type: Task
>    Affects Versions: 4.4.0
>            Reporter: James Taylor
>            Assignee: Aakash Pradeep
>              Labels: JSON, Java, SQL
>             Fix For: 4.4.0
>
>
> MongoDB and PostGres do some interesting things with JSON. We should look at 
> adding similar support. For a detailed description, see JSONB support in 
> Postgres: 
> http://www.craigkerstiens.com/2014/03/24/Postgres-9.4-Looking-up
> http://www.depesz.com/2014/03/25/waiting-for-9-4-introduce-jsonb-a-structured-format-for-storing-json/
> http://michael.otacoo.com/postgresql-2/manipulating-jsonb-data-with-key-unique/



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to