Yingyi Bu has posted comments on this change. Change subject: ASTERIXDB-1608, ASTERIXDB-1617 Match user query for nonpure function calls ......................................................................
Patch Set 7: (7 comments) https://asterix-gerrit.ics.uci.edu/#/c/1057/7/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushFieldAccessRule.java File asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushFieldAccessRule.java: Line 187: Object annotation = op2.getAnnotations().get("isMovable"); call OperatorPropertiesUtil.isMovable(op2) instead? https://asterix-gerrit.ics.uci.edu/#/c/1057/7/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AccessMethodUtils.java File asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AccessMethodUtils.java: Line 314: if (optFuncExpr.getNumConstantExpr() == 0) { Can you explain a bit in the comments, why getNumConstantExpr() == 0 means a non-pure function. Line 370: return new Pair<ILogicalExpression, Boolean>(optFuncExpr.getConstantExpr(0), false); > MAJOR SonarQube violation: please address this. https://asterix-gerrit.ics.uci.edu/#/c/1057/7/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/BTreeAccessMethod.java File asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/BTreeAccessMethod.java: Line 728: if (optFuncExpr.getFieldType(0) == null || optFuncExpr.getFieldType(1) == null) { Comment why this is the non-pure case? I still couldn't understand the condition. Again, this condition has to be 100% accurate -- no false positives and no false dismissals. Otherwise it might cause new bugs for other queries. https://asterix-gerrit.ics.uci.edu/#/c/1057/7/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/OptimizableOperatorSubTree.java File asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/OptimizableOperatorSubTree.java: Line 112: while ((subTreeOp.getOperatorTag() == LogicalOperatorTag.ASSIGN > MAJOR SonarQube violation: pls address those. https://asterix-gerrit.ics.uci.edu/#/c/1057/7/asterixdb/asterix-app/src/test/resources/optimizerts/queries/nonpure/maintain-nonpure-location-in-join-cannot-index.aql File asterixdb/asterix-app/src/test/resources/optimizerts/queries/nonpure/maintain-nonpure-location-in-join-cannot-index.aql: Line 39: return { Why this one cannot use index? Would it use the index of User2 if you say /*+ indexnl */ ? https://asterix-gerrit.ics.uci.edu/#/c/1057/7/asterixdb/asterix-app/src/test/resources/optimizerts/results/query_issue849.plan File asterixdb/asterix-app/src/test/resources/optimizerts/results/query_issue849.plan: Line 28: -- UNNEST |UNPARTITIONED| ASTERIXDB-1368 is still open. But it seems your queries are able to use index joins even without hints. Did you fix ASTERIXDB-1368 as well? -- To view, visit https://asterix-gerrit.ics.uci.edu/1057 To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings Gerrit-MessageType: comment Gerrit-Change-Id: I2dec322b30835625430c06acd7626d902bada137 Gerrit-PatchSet: 7 Gerrit-Project: asterixdb Gerrit-Branch: master Gerrit-Owner: Steven Jacobs <[email protected]> Gerrit-Reviewer: Jenkins <[email protected]> Gerrit-Reviewer: Michael Blow <[email protected]> Gerrit-Reviewer: Preston Carman <[email protected]> Gerrit-Reviewer: Steven Jacobs <[email protected]> Gerrit-Reviewer: Yingyi Bu <[email protected]> Gerrit-HasComments: Yes
