Author: gunther Date: Thu Oct 30 18:25:09 2014 New Revision: 1635575 URL: http://svn.apache.org/r1635575 Log: HIVE-8655: CBO: ppr_pushdown, udf_substr produces incorrect results due to broken tablesample handling (Sergey Shelukhin via Gunther Hagleitner)
Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/HiveOptiqUtil.java hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/HiveOptiqUtil.java URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/HiveOptiqUtil.java?rev=1635575&r1=1635574&r2=1635575&view=diff ============================================================================== --- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/HiveOptiqUtil.java (original) +++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/HiveOptiqUtil.java Thu Oct 30 18:25:09 2014 @@ -75,7 +75,7 @@ public class HiveOptiqUtil { return vCols; } - public static boolean validateASTForCBO(ASTNode ast) { + public static boolean validateASTForUnsupportedTokens(ASTNode ast) { String astTree = ast.toStringTree(); // if any of following tokens are present in AST, bail out String[] tokens = { "TOK_CHARSETLITERAL","TOK_TABLESPLITSAMPLE" }; Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java?rev=1635575&r1=1635574&r2=1635575&view=diff ============================================================================== --- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java (original) +++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java Thu Oct 30 18:25:09 2014 @@ -10241,13 +10241,15 @@ public class SemanticAnalyzer extends Ba // be supported and would require additional checks similar to IsQuery? boolean isSupportedType = qb.getIsQuery() || qb.isCTAS() || cboCtx.type == PreCboCtx.Type.INSERT; - boolean result = isSupportedRoot && isSupportedType && createVwDesc == null; + boolean noBadTokens = HiveOptiqUtil.validateASTForUnsupportedTokens(ast); + boolean result = isSupportedRoot && isSupportedType && createVwDesc == null && noBadTokens; if (!result) { if (needToLogMessage) { String msg = ""; if (!isSupportedRoot) msg += "doesn't have QUERY or EXPLAIN as root and not a CTAS; "; if (!isSupportedType) msg += "is not a query, CTAS, or insert; "; if (createVwDesc != null) msg += "has create view; "; + if (!noBadTokens) msg += "has unsupported tokens; "; if (msg.isEmpty()) msg += "has some unspecified limitations; "; LOG.info("Not invoking CBO because the statement " + msg.substring(0, msg.length() - 2));