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

    https://github.com/apache/phoenix/pull/101#discussion_r35658625
  
    --- Diff: 
phoenix-core/src/main/java/org/apache/phoenix/compile/ExpressionCompiler.java 
---
    @@ -1339,4 +1363,188 @@ 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(JsonSubsetParseNode node) {
    +        return true;
    +    }
    +    
    +    @Override
    +    public boolean visitEnter(JsonSupersetParseNode node) {
    +        return true;
    +    }
    +    
    +    @Override
    +    public boolean visitEnter(JsonMultiKeySearchOrParseNode node) {
    +        return true;
    +    }
    +    
    +    @Override
    +    public boolean visitEnter(JsonMultiKeySeatchAndParseNode 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 {
    +           
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(JsonSubsetParseNode node, 
List<Expression> children) throws SQLException {
    +           
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());
    +           }
    +           LiteralExpression rhs=(LiteralExpression)children.get(1);
    +        Expression expression = new JsonSubsetExpression(children);
    +        return wrapGroupByExpression(expression);
    +    }
    +    
    +    @Override
    +    public Expression visitLeave(JsonSupersetParseNode node, 
List<Expression> children) throws SQLException {
    +           
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());
    +           }
    +           LiteralExpression rhs=(LiteralExpression)children.get(1);
    +        Expression expression = new JsonSupersetExpression(children);
    +        return wrapGroupByExpression(expression);
    +    }
    +    
    +    @Override
    +    public Expression visitLeave(JsonMultiKeySearchOrParseNode node, 
List<Expression> children) throws SQLException {
    +           
if(!(PJson.INSTANCE.isComparableTo(children.get(0).getDataType()))){
    +                   throw 
TypeMismatchException.newException(children.get(0).getDataType(), 
children.get(1).getDataType());
    +           }
    +           if(children.get(1).getDataType()!=PVarcharArray.INSTANCE){
    +                    throw 
TypeMismatchException.newException(children.get(0).getDataType(), 
children.get(1).getDataType());
    +           }
    +        Expression expression = new 
JsonMultiKeySearchOrExpression(children);
    +        return wrapGroupByExpression(expression);
    +    }
    +    
    +    @Override
    +    public Expression visitLeave(JsonMultiKeySeatchAndParseNode node, 
List<Expression> children) throws SQLException {
    +           
if(!(PJson.INSTANCE.isComparableTo(children.get(0).getDataType()))){
    +                   throw 
TypeMismatchException.newException(children.get(0).getDataType(), 
children.get(1).getDataType());
    +           }
    +           if(children.get(1).getDataType()!=PVarcharArray.INSTANCE){
    +                    throw 
TypeMismatchException.newException(children.get(0).getDataType(), 
children.get(1).getDataType());
    +           }
    +        Expression expression = new 
JsonMultiKeySearchAndExpression(children);
    +        return wrapGroupByExpression(expression);
    +    }
    +    
    +    @Override
    +    public Expression visitLeave(JsonPathAsTextParseNode node, 
List<Expression> children) throws SQLException {
    +           
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()))){
    --- End diff --
    
    Would the STRING_TO_ARRAY function (same as in Postgres) help here? That's 
on the list of ARRAY built-in functions that'll be added soon.


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---

Reply via email to