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

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

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

    https://github.com/apache/phoenix/pull/101#discussion_r36479562
  
    --- Diff: 
phoenix-core/src/main/java/org/apache/phoenix/compile/ExpressionCompiler.java 
---
    @@ -1339,4 +1362,193 @@ public Expression visit(SubqueryParseNode node) 
throws SQLException {
         public int getTotalNodeCount() {
             return totalNodeCount;
         }
    +  //JSON node 
    +    @Override
    +    public boolean visitEnter(JsonSingleKeySearchParseNode node) {
    +        return true;
    +    }
    +    
    +    @Override
    +    public boolean visitEnter(JsonContainWithinRightParseNode node) {
    +        return true;
    +    }
    +    
    +    @Override
    +    public boolean visitEnter(JsonContainWithinLeftParseNode node) {
    +        return true;
    +    }
    +    
    +    @Override
    +    public boolean visitEnter(JsonMultiKeySearchOrParseNode node) {
    +        return true;
    +    }
    +    
    +    @Override
    +    public boolean visitEnter(JsonMultiKeySearchAndParseNode node) {
    +        return true;
    +    }
    +    
    +    @Override
    +    public boolean visitEnter(JsonPathAsTextParseNode node) {
    +        return true;
    +    }
    +    
    +    @Override
    +    public boolean visitEnter(JsonPathAsElementParseNode node) {
    +        return true;
    +    }
    +    
    +    @Override
    +    public boolean visitEnter(JsonPointAsElementParseNode node) throws 
SQLException {
    +        return true;
    +    }
    +    
    +    @Override
    +    public boolean visitEnter(JsonPointAsTextParseNode node){
    +           return true;
    +    }
    +    
    +    
    +    @Override
    +    public Expression visitLeave(JsonSingleKeySearchParseNode node, 
List<Expression> children) throws SQLException {
    +        ParseNode rhsNode = node.getChildren().get(1);
    +        Expression lhs = children.get(0);
    +        if (rhsNode instanceof BindParseNode) {
    +              
context.getBindManager().addParamMetaData((BindParseNode)rhsNode, lhs);
    +        }
    +           
if(!(PJson.INSTANCE.isComparableTo(children.get(0).getDataType()))){
    +                   throw 
TypeMismatchException.newException(children.get(0).getDataType(), 
children.get(1).getDataType());
    +           }
    +           
if(!(PVarchar.INSTANCE.isComparableTo(children.get(1).getDataType()))){
    +                    throw 
TypeMismatchException.newException(children.get(0).getDataType(), 
children.get(1).getDataType());
    +           }
    +        Expression expression = new 
JsonSingleKeySearchExpression(children);
    +        return wrapGroupByExpression(expression);
    +    }
    +    
    +    @Override
    +    public Expression visitLeave(JsonContainWithinRightParseNode node, 
List<Expression> children) throws SQLException {
    +           ParseNode lhsNode = node.getChildren().get(0);
    +           ParseNode rhsNode = node.getChildren().get(1);
    +           Expression lhs = children.get(0);
    +           Expression rhs = children.get(1);
    +           if (lhsNode instanceof BindParseNode) {
    +                   
context.getBindManager().addParamMetaData((BindParseNode)lhsNode, rhs);
    +           }
    +           if (rhsNode instanceof BindParseNode) {
    +                   
context.getBindManager().addParamMetaData((BindParseNode)rhsNode, lhs);
    +           }
    +           
if(!(PJson.INSTANCE.isComparableTo(children.get(0).getDataType()))){
    +                   throw 
TypeMismatchException.newException(children.get(0).getDataType(), 
children.get(1).getDataType());
    +           }
    +           
if(!(PJson.INSTANCE.isComparableTo(children.get(1).getDataType()))){
    +                    throw 
TypeMismatchException.newException(children.get(0).getDataType(), 
children.get(1).getDataType());
    +           }
    +        Expression expression = new 
JsonContainWithinRightExpression(children);
    +        return wrapGroupByExpression(expression);
    +    }
    +    
    +    @Override
    +    public Expression visitLeave(JsonContainWithinLeftParseNode node, 
List<Expression> children) throws SQLException {
    +           ParseNode lhsNode = node.getChildren().get(0);
    +           ParseNode rhsNode = node.getChildren().get(1);
    +           Expression lhs = children.get(0);
    +           Expression rhs = children.get(1);
    +           if (lhsNode instanceof BindParseNode) {
    +                   
context.getBindManager().addParamMetaData((BindParseNode)lhsNode, rhs);
    +           }
    +           if (rhsNode instanceof BindParseNode) {
    +                   
context.getBindManager().addParamMetaData((BindParseNode)rhsNode, lhs);
    +           }
    +           
if(!(PJson.INSTANCE.isComparableTo(children.get(0).getDataType()))){
    +                   throw 
TypeMismatchException.newException(children.get(0).getDataType(), 
children.get(1).getDataType());
    +           }
    +           
if(!(PJson.INSTANCE.isComparableTo(children.get(1).getDataType()))){
    +                    throw 
TypeMismatchException.newException(children.get(0).getDataType(), 
children.get(1).getDataType());
    +           }
    +        Expression expression = new 
JsonContainWithinLeftExpression(children);
    +        return wrapGroupByExpression(expression);
    +    }
    +    
    --- End diff --
    
    For JsonMultiKeySearchOrParseNode  and JsonMultiKeySearchAndParseNode do 
you need to check if the lhsNodeis / rhsNode are instances of BindParseNode ?


> Implement JSON operators 
> -------------------------
>
>                 Key: PHOENIX-2144
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-2144
>             Project: Phoenix
>          Issue Type: Sub-task
>            Reporter: Thomas D'Silva
>            Assignee: petercdc
>             Fix For: 4.4.1
>
>
> See http://www.postgresql.org/docs/9.4/static/functions-json.html 



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

Reply via email to