[ 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)