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