[ https://issues.apache.org/jira/browse/HIVE-26438?focusedWorklogId=796641&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-796641 ]
ASF GitHub Bot logged work on HIVE-26438: ----------------------------------------- Author: ASF GitHub Bot Created on: 30/Jul/22 15:40 Start Date: 30/Jul/22 15:40 Worklog Time Spent: 10m Work Description: jfsii commented on code in PR #3487: URL: https://github.com/apache/hive/pull/3487#discussion_r933840592 ########## ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java: ########## @@ -987,30 +985,29 @@ private static String canHandleQbForCbo(QueryProperties queryProperties, HiveCon // Not ok to run CBO, build error message. String msg = ""; - if (verbose) { - if (queryProperties.hasClusterBy()) { - msg += "has cluster by; "; - } - if (queryProperties.hasDistributeBy()) { - msg += "has distribute by; "; - } - if (queryProperties.hasSortBy() && queryProperties.hasLimit()) { - msg += "has sort by with limit; "; - } - if (queryProperties.hasPTF()) { - msg += "has PTF; "; - } - if (queryProperties.usesScript()) { - msg += "uses scripts; "; - } - if (queryProperties.hasLateralViews()) { - msg += "has lateral views; "; - } - if (msg.isEmpty()) { - msg += "has some unspecified limitations; "; - } - msg = msg.substring(0, msg.length() - 2); + if (queryProperties.hasClusterBy()) { + msg += "has cluster by; "; + } + if (queryProperties.hasDistributeBy()) { + msg += "has distribute by; "; + } + if (queryProperties.hasSortBy() && queryProperties.hasLimit()) { + msg += "has sort by with limit; "; + } + if (queryProperties.hasPTF()) { + msg += "has PTF; "; } + if (queryProperties.usesScript()) { + msg += "uses scripts; "; + } + if (queryProperties.hasLateralViews()) { + msg += "has lateral views; "; + } + if (msg.isEmpty()) { + msg += "has some unspecified limitations; "; Review Comment: indenting is incorrect - one positive change from my suggestions above is that it enforces anyone who modifies this section of code with new conditions - would be forced to also provide a valid error message (so the only time msgs/reason would/should be empty is if it is a valid QB for CBO). ########## ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java: ########## @@ -987,30 +985,29 @@ private static String canHandleQbForCbo(QueryProperties queryProperties, HiveCon // Not ok to run CBO, build error message. String msg = ""; - if (verbose) { - if (queryProperties.hasClusterBy()) { - msg += "has cluster by; "; - } - if (queryProperties.hasDistributeBy()) { - msg += "has distribute by; "; - } - if (queryProperties.hasSortBy() && queryProperties.hasLimit()) { - msg += "has sort by with limit; "; - } - if (queryProperties.hasPTF()) { - msg += "has PTF; "; - } - if (queryProperties.usesScript()) { - msg += "uses scripts; "; - } - if (queryProperties.hasLateralViews()) { - msg += "has lateral views; "; - } - if (msg.isEmpty()) { - msg += "has some unspecified limitations; "; - } - msg = msg.substring(0, msg.length() - 2); + if (queryProperties.hasClusterBy()) { Review Comment: I would maybe change this to something like (but this is more of an opinion): List<String> reasons = new ArrayList(); and in each if () { reason.add(errorMsg); } and at the end do: return Strings.join("; ", reasons); You could technically combine the top if check for validity with the error message processing to force each case to always have a valid error message by deleting the top if (conditions) { return null }, add the missing condition to the error messages (queryProperties.isCBOSupportedLateralViews())) and change the last return to be something like: return reasons.isEmpty() ? null : Strings.join("; ", reasons); Hopefully that makes sense? It is also a matter of style - feel free to ignore if you do not think the above suggestions make the code more readable or less fragile. (I'm not 100% sure they make it better - but in my head I think they do). Issue Time Tracking ------------------- Worklog Id: (was: 796641) Time Spent: 20m (was: 10m) > Remove unnecessary optimization in canHandleQbForCbo() method > ------------------------------------------------------------- > > Key: HIVE-26438 > URL: https://issues.apache.org/jira/browse/HIVE-26438 > Project: Hive > Issue Type: Bug > Reporter: Abhay > Assignee: Abhay > Priority: Major > Labels: pull-request-available > Time Spent: 20m > Remaining Estimate: 0h > > This ticket is an improvement on > https://issues.apache.org/jira/browse/HIVE-26426. The canHandleQbForCbo() > checks whether Calcite handle the query or not and it returns null if the > query can be handled; non-null reason string if it cannot be. > But currently, it returns an empty string if INFO Log is not enabled. This is > probably a performance optimization that is not needed and can be simplified. -- This message was sent by Atlassian Jira (v8.20.10#820010)