[
https://issues.apache.org/jira/browse/PHOENIX-1661?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14641021#comment-14641021
]
ASF GitHub Bot commented on PHOENIX-1661:
-----------------------------------------
Github user twdsilva commented on a diff in the pull request:
https://github.com/apache/phoenix/pull/101#discussion_r35461438
--- Diff:
phoenix-core/src/it/java/org/apache/phoenix/end2end/JSONOperationT.java ---
@@ -0,0 +1,285 @@
+/*
+ * 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.end2end;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Properties;
+
+import org.apache.phoenix.util.PropertiesUtil;
+
+import static org.apache.phoenix.util.TestUtil.TEST_PROPERTIES;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+public class JSONOperationT extends BaseHBaseManagedTimeIT{
+ private String json = "{\"k1\":\"val\"," +"\"k2\":true,"
+"\"k3\":2 ," +"\"k4\":2.5 "+
+ ",\"k5\":[1,\"val2\",false,3.5]"+
+
",\"k6\":{\"nestk1\":\"nestval\",\"nestk2\":77,\"nestk3\":2.1,\"nestk4\":[9,8.4,\"nestarrayval\"]}}";
+ @Test
+ public void testJsonPointAsElementForTypeInteger() throws Exception {
+ String selectQuery = "SELECT col1 FROM testJson WHERE col1 -> 'k3'
= 2";
+ String pk = "valueOne";
+ Connection conn = getConnection();
+ try {
+
+ createTableAndUpsertRecord(json, pk, conn);
+
+ PreparedStatement stmt = conn.prepareStatement(selectQuery);
+ ResultSet rs = stmt.executeQuery();
+ assertTrue(rs.next());
+ assertEquals("Json data read from DB is not as expected for
query: <" + selectQuery
+ + ">", json, rs.getString(1));
+ assertFalse(rs.next());
+
+ } finally {
+ conn.close();
+ }
+ }
+ @Test
+ public void testJsonPointAsElementForTypeFloat() throws Exception {
+ String selectQuery = "SELECT col1 FROM testJson WHERE col1 -> 'k4'
= 2.5";
+ String pk = "valueOne";
+ Connection conn = getConnection();
+ try {
+
+ createTableAndUpsertRecord(json, pk, conn);
+
+ PreparedStatement stmt = conn.prepareStatement(selectQuery);
+ ResultSet rs = stmt.executeQuery();
+ assertTrue(rs.next());
+ assertEquals("Json data read from DB is not as expected for
query: <" + selectQuery
+ + ">", json, rs.getString(1));
+ assertFalse(rs.next());
+
+ } finally {
+ conn.close();
+ }
+ }
+ @Test
+ public void testJsonPointAsElementForTypeVarchar() throws Exception {
+ String selectQuery = "SELECT col1 FROM testJson WHERE col1 -> 'k1'
LIKE 'val'";
+ String pk = "valueOne";
+ Connection conn = getConnection();
+ try {
+
+ createTableAndUpsertRecord(json, pk, conn);
+
+ PreparedStatement stmt = conn.prepareStatement(selectQuery);
+ ResultSet rs = stmt.executeQuery();
+ assertTrue(rs.next());
+ assertEquals("Json data read from DB is not as expected for
query: <" + selectQuery
+ + ">", json, rs.getString(1));
+ assertFalse(rs.next());
+
+ } finally {
+ conn.close();
+ }
+ }
+ @Test
+ public void testJsonPointAsText() throws Exception {
+ String selectQuery = "SELECT col1 FROM testJson WHERE col1 ->>
'k3' LIKE '2'";
+ String pk = "valueOne";
+ Connection conn = getConnection();
+ try {
+
+ createTableAndUpsertRecord(json, pk, conn);
+
+ PreparedStatement stmt = conn.prepareStatement(selectQuery);
+ ResultSet rs = stmt.executeQuery();
+ assertTrue(rs.next());
+ assertEquals("Json data read from DB is not as expected for
query: <" + selectQuery
+ + ">", json, rs.getString(1));
+ assertFalse(rs.next());
+
+ } finally {
+ conn.close();
+ }
+ }
+ @Test
+ public void testJsonPathAsElement() throws Exception {
+ String selectQuery = "SELECT col1 FROM testJson WHERE col1 #>
'{k6,nestk4,1}' = 8.4";
+ String pk = "valueOne";
+ Connection conn = getConnection();
+ try {
+
+ createTableAndUpsertRecord(json, pk, conn);
+
+ PreparedStatement stmt = conn.prepareStatement(selectQuery);
+ ResultSet rs = stmt.executeQuery();
+ assertTrue(rs.next());
+ assertEquals("Json data read from DB is not as expected for
query: <" + selectQuery
+ + ">", json, rs.getString(1));
+ assertFalse(rs.next());
+
+ } finally {
+ conn.close();
+ }
+ }
+ @Test
+ public void testJsonPathAsText() throws Exception {
+ String selectQuery = "SELECT col1 FROM testJson WHERE col1 #>>
'{k6,nestk4,0}' LIKE '9'";
--- End diff --
Change LIKE to =
> Implement built-in functions for JSON
> -------------------------------------
>
> Key: PHOENIX-1661
> URL: https://issues.apache.org/jira/browse/PHOENIX-1661
> Project: Phoenix
> Issue Type: Sub-task
> 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)