diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/index/RewriteParseContextGenerator.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/index/RewriteParseContextGenerator.java index 3097385..412f4f4 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/index/RewriteParseContextGenerator.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/index/RewriteParseContextGenerator.java @@ -118,7 +118,7 @@ private static void doSemanticAnalysis(SemanticAnalyzer sem, sem.getMetaData(qb); LOG.info("Completed getting MetaData in Sub-query Semantic Analysis"); - LOG.info("Sub-query Abstract syntax tree: " + ast.toStringTree()); + LOG.info("Sub-query Abstract syntax tree: " + ast.toStringTree(true)); sem.genPlan(qb); LOG.info("Sub-query Completed plan generation"); diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/HiveOptiqUtil.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/HiveOptiqUtil.java index 80f657e..9ca0206 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/HiveOptiqUtil.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/HiveOptiqUtil.java @@ -76,7 +76,7 @@ } public static boolean validateASTForUnsupportedTokens(ASTNode ast) { - String astTree = ast.toStringTree(); + String astTree = ast.toStringTree(true); // if any of following tokens are present in AST, bail out String[] tokens = { "TOK_CHARSETLITERAL","TOK_TABLESPLITSAMPLE" }; for (String token : tokens) { diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/ASTNode.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/ASTNode.java index c8dbe97..d661d7a 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/ASTNode.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/ASTNode.java @@ -31,8 +31,11 @@ */ public class ASTNode extends CommonTree implements Node,Serializable { private static final long serialVersionUID = 1L; - + private transient StringBuffer astStr; private transient ASTNodeOrigin origin; + private transient int startIndx = -1; + private transient int endIndx = -1; + private transient ASTNode rootNode; public ASTNode() { } @@ -81,6 +84,7 @@ public Tree dupNode() { * * @see org.apache.hadoop.hive.ql.lib.Node#getName() */ + @Override public String getName() { return (Integer.valueOf(super.getToken().getType())).toString(); } @@ -126,4 +130,81 @@ private StringBuilder dump(StringBuilder sb, String ws) { } return sb; } + + private ASTNode getRootNode () { + if (rootNode != null && rootNode.parent == null) { + return rootNode; + } + ASTNode retNode = this; + while (retNode.parent != null) { + retNode = (ASTNode) retNode.parent; + } + return rootNode=retNode; + } + + boolean hasValidMemoizedString() { + return astStr != null; + } + + int getMemoizedStringLen() { + return astStr == null ? 0 : astStr.length(); + } + + String getMemoizedSubString(int start, int end) { + return (astStr == null || start < 0 || end > astStr.length() || start >= end) ? null : + astStr.subSequence(start, end).toString(); + } + + void addtoMemoizedString(String string) { + if (astStr == null) { + astStr = new StringBuffer(); + } + astStr.append(string); + } + + /** + * Converts tree to string with an option to memoize the stringtree. + * + * @param useMemoizedString + * If true, use memoized string if available, else compute the + * stringtree from scratch. + */ + public String toStringTree(boolean useMemoizedString) { + if (!useMemoizedString) { + return super.toStringTree(); + } + ASTNode rootNode = (ASTNode)this.getRootNode(); + if (rootNode.hasValidMemoizedString() && startIndx >= 0 && + endIndx <= rootNode.getMemoizedStringLen()) { + return rootNode.getMemoizedSubString(startIndx, endIndx); + } + return toStringTree(rootNode); + } + + private String toStringTree(ASTNode rootNode) { + startIndx = rootNode.getMemoizedStringLen(); + // Leaf node + if ( children==null || children.size()==0 ) { + rootNode.addtoMemoizedString(this.toString()); + endIndx = rootNode.getMemoizedStringLen(); + return this.toString(); + } + if ( !isNil() ) { + rootNode.addtoMemoizedString("("); + rootNode.addtoMemoizedString(this.toString()); + rootNode.addtoMemoizedString(" "); + } + for (int i = 0; children!=null && i < children.size(); i++) { + ASTNode t = (ASTNode)children.get(i); + if ( i>0 ) { + rootNode.addtoMemoizedString(" "); + } + t.toStringTree(rootNode); + } + if ( !isNil() ) { + rootNode.addtoMemoizedString(")"); + } + endIndx = rootNode.getMemoizedStringLen(); + return rootNode.getMemoizedSubString(startIndx, endIndx); + } } diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/PTFInvocationSpec.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/PTFInvocationSpec.java index 06d3f4b..e2dcb3e 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/PTFInvocationSpec.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/PTFInvocationSpec.java @@ -340,7 +340,7 @@ public void setExpression(ASTNode expression) { public int hashCode() { final int prime = 31; int result = 1; - result = prime * result + ((expression == null) ? 0 : expression.toStringTree().hashCode()); + result = prime * result + ((expression == null) ? 0 : expression.toStringTree(true).hashCode()); return result; } @@ -360,7 +360,7 @@ public boolean equals(Object obj) { if (other.expression != null) { return false; } - } else if (!expression.toStringTree().equals(other.expression.toStringTree())) { + } else if (!expression.toStringTree(true).equals(other.expression.toStringTree(true))) { return false; } return true; @@ -369,7 +369,7 @@ public boolean equals(Object obj) { @Override public String toString() { - return expression.toStringTree(); + return expression.toStringTree(true); } } diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/PTFTranslator.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/PTFTranslator.java index d1d866f..e2c2c05 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/PTFTranslator.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/PTFTranslator.java @@ -281,7 +281,7 @@ private PartitionedTableFunctionDef translate(PartitionedTableFunctionSpec spec, def.setName(spec.getName()); def.setResolverClassName(tFn.getClass().getName()); def.setAlias(spec.getAlias() == null ? "ptf_" + inpNum : spec.getAlias()); - def.setExpressionTreeString(spec.getAstNode().toStringTree()); + def.setExpressionTreeString(spec.getAstNode().toStringTree(true)); def.setTransformsRawInput(tFn.transformsRawInput()); /* * translate args @@ -356,7 +356,7 @@ private WindowFunctionDef translate(WindowTableFunctionDef wdwTFnDef, def.setName(spec.getName()); def.setAlias(spec.getAlias()); def.setDistinct(spec.isDistinct()); - def.setExpressionTreeString(spec.getExpression().toStringTree()); + def.setExpressionTreeString(spec.getExpression().toStringTree(true)); def.setStar(spec.isStar()); def.setPivotResult(wFnInfo.isPivotResult()); ShapeDetails inpShape = wdwTFnDef.getRawInputShape(); @@ -471,7 +471,7 @@ private PTFExpressionDef translate(ShapeDetails inpShape, } PTFTranslator.validateComparable(expDef.getOI(), String.format("Partition Expression %s is not a comparable expression", pExpr - .getExpression().toStringTree())); + .getExpression().toStringTree(true))); return expDef; } @@ -509,7 +509,7 @@ private OrderExpressionDef translate(ShapeDetails inpShape, } PTFTranslator.validateComparable(oexpDef.getOI(), String.format("Partition Expression %s is not a comparable expression", - oExpr.getExpression().toStringTree())); + oExpr.getExpression().toStringTree(true))); return oexpDef; } @@ -705,8 +705,8 @@ private ShapeDetails setupShapeForNoop(ShapeDetails inpShape, chkSize = chkSize > orderCols.size() ? orderCols.size() : chkSize; for (int i = 0; i < chkSize; i++) { - if (orderCols.get(i).getExpression().toStringTree() - .equals(partCols.get(i).getExpression().toStringTree())) { + if (orderCols.get(i).getExpression().toStringTree(true) + .equals(partCols.get(i).getExpression().toStringTree(true))) { numOfPartColumns++; } else { break; @@ -763,7 +763,7 @@ public PTFExpressionDef buildExpressionDef(ShapeDetails inpShape, ASTNode arg) ExprNodeEvaluator exprEval = WindowingExprNodeEvaluatorFactory.get(llInfo, exprNode); ObjectInspector oi = initExprNodeEvaluator(exprEval, exprNode, inpShape); - argDef.setExpressionTreeString(arg.toStringTree()); + argDef.setExpressionTreeString(arg.toStringTree(true)); argDef.setExprNode(exprNode); argDef.setExprEvaluator(exprEval); argDef.setOI(oi); @@ -1141,7 +1141,7 @@ public void visit(Object t, Object parent, int childIndex, Map labels) { void checkValid() throws SemanticException { if (throwError) { - throw new SemanticException(errMsg + errorNode.toStringTree()); + throw new SemanticException(errMsg + errorNode.toStringTree(true)); } } } diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/QBParseInfo.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/QBParseInfo.java index 02c4be9..0471c1b 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/QBParseInfo.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/QBParseInfo.java @@ -192,7 +192,7 @@ public void addWindowingExprToClause(String clause, ASTNode windowingExprNode) { windowingExprs = new LinkedHashMap(); destToWindowingExprs.put(clause, windowingExprs); } - windowingExprs.put(windowingExprNode.toStringTree(), windowingExprNode); + windowingExprs.put(windowingExprNode.toStringTree(true), windowingExprNode); } public HashMap getWindowingExprsForClause(String clause) { diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/RowResolver.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/RowResolver.java index 469dc9f..a74b886 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/RowResolver.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/RowResolver.java @@ -74,7 +74,7 @@ public RowResolver() { * string rendering of the ASTNode as the column alias. */ public void putExpression(ASTNode node, ColumnInfo colInfo) { - String treeAsString = node.toStringTree(); + String treeAsString = node.toStringTree(true); expressionMap.put(treeAsString, node); put("", treeAsString, colInfo); } @@ -84,7 +84,7 @@ public void putExpression(ASTNode node, ColumnInfo colInfo) { * exactly matches the string rendering of the given ASTNode. */ public ColumnInfo getExpression(ASTNode node) throws SemanticException { - return get("", node.toStringTree()); + return get("", node.toStringTree(true)); } /** @@ -92,7 +92,7 @@ public ColumnInfo getExpression(ASTNode node) throws SemanticException { * string rendering exactly. */ public ASTNode getExpressionSource(ASTNode node) { - return expressionMap.get(node.toStringTree()); + return expressionMap.get(node.toStringTree(true)); } public void put(String tab_alias, String col_alias, ColumnInfo colInfo) { diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java index 63d5214..6a23ba2 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java @@ -575,7 +575,7 @@ public void doPhase1QBExpr(ASTNode ast, QBExpr qbexpr, String id, String alias) (ASTNode)wdwFn.getChild(wdwFn.getChildCount()-1)); // If this is a duplicate invocation of a function; don't add to WindowingSpec. if ( wExprsInDest != null && - wExprsInDest.containsKey(wFnSpec.getExpression().toStringTree())) { + wExprsInDest.containsKey(wFnSpec.getExpression().toStringTree(true))) { continue; } wFnSpec.setAlias("_wcol" + wColIdx); @@ -630,7 +630,7 @@ private void doPhase1GetAllAggregations(ASTNode expressionTree, if(containsLeadLagUDF(expressionTree)) { throw new SemanticException(ErrorMsg.MISSING_OVER_CLAUSE.getMsg(functionName)); } - aggregations.put(expressionTree.toStringTree().toLowerCase(), expressionTree); + aggregations.put(expressionTree.toStringTree(true).toLowerCase(), expressionTree); FunctionInfo fi = FunctionRegistry.getFunctionInfo(functionName); if (!fi.isNative()) { unparseTranslator.addIdentifierTranslation((ASTNode) expressionTree @@ -2053,7 +2053,7 @@ void parseJoinCondPopulateAlias(QBJoinTree joinTree, ASTNode condn, leftAliases, rightAliases, fields1, aliasToOpInfo); } } else { - throw new SemanticException(condn.toStringTree() + " encountered with " + throw new SemanticException(condn.toStringTree(true) + " encountered with " + condn.getChildCount() + " children"); } break; @@ -3245,7 +3245,7 @@ private Operator genScriptPlan(ASTNode trfm, QB qb, Operator input) Map exprPos = new HashMap(); for (int i = 0; i < groupByExpr.size(); ++i) { ASTNode node = groupByExpr.get(i); - exprPos.put(node.toStringTree(), i); + exprPos.put(node.toStringTree(true), i); } ASTNode root = parseInfo.getGroupByForClause(dest); @@ -3258,7 +3258,7 @@ private Operator genScriptPlan(ASTNode trfm, QB qb, Operator input) } int bitmap = 0; for (int j = 0; j < child.getChildCount(); ++j) { - String treeAsString = child.getChild(j).toStringTree(); + String treeAsString = ((ASTNode)(child.getChild(j))).toStringTree(true); Integer pos = exprPos.get(treeAsString); if (pos == null) { throw new SemanticException( @@ -3311,7 +3311,7 @@ private int setBit(int bitmap, int bitIdx) { /* * If this is handled by Windowing then ignore it. */ - if (windowingExprs != null && windowingExprs.containsKey(grpbyExpr.toStringTree())) { + if (windowingExprs != null && windowingExprs.containsKey(grpbyExpr.toStringTree(true))) { continue; } result.add(grpbyExpr); @@ -3379,7 +3379,7 @@ private int setBit(int bitmap, int bitIdx) { // if specified generate alias using func name if (includeFuncName && (root.getType() == HiveParser.TOK_FUNCTION)) { - String expr_flattened = root.toStringTree(); + String expr_flattened = root.toStringTree(true); // remove all TOK tokens String expr_no_tok = expr_flattened.replaceAll("TOK_\\S+", ""); @@ -3443,7 +3443,7 @@ private static boolean isRegex(String pattern, HiveConf conf) { Operator input, boolean outerLV) throws SemanticException { if (LOG.isDebugEnabled()) { - LOG.debug("tree: " + selExprList.toStringTree()); + LOG.debug("tree: " + selExprList.toStringTree(true)); } ArrayList col_list = new ArrayList(); @@ -8281,10 +8281,10 @@ private void mergeJoins(QB qb, QBJoinTree node, QBJoinTree target, int pos, int[ boolean[] nodeFiltersMapped = new boolean[nodeCondn.size()]; int i, j; for(i=0; i selExpr : exprToAlias.entrySet()) { ASTNode selAST = selExpr.getKey(); - if (!aggExprs.contains(selAST.toStringTree().toLowerCase())) { + if (!aggExprs.contains(selAST.toStringTree(true).toLowerCase())) { continue; } final String aliasToCheck = selExpr.getValue(); diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/WindowingSpec.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/WindowingSpec.java index 28afc6b..27948d8 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/WindowingSpec.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/WindowingSpec.java @@ -393,7 +393,7 @@ public String toString() { } else { buf.append(", "); } - buf.append(arg.toStringTree()); + buf.append(arg.toStringTree(true)); } } } @@ -702,7 +702,7 @@ public void setAmt(int amt) @Override public String toString() { - return String.format("value(%s %s %s)", expression.toStringTree(), amt, direction); + return String.format("value(%s %s %s)", expression.toStringTree(true), amt, direction); } public int compareTo(BoundarySpec other) diff --git a/ql/src/java/org/apache/hadoop/hive/ql/udf/ptf/MatchPath.java b/ql/src/java/org/apache/hadoop/hive/ql/udf/ptf/MatchPath.java index aa48a6c..10d148f 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/udf/ptf/MatchPath.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/udf/ptf/MatchPath.java @@ -836,7 +836,7 @@ protected static RowResolver createSelectListRR(MatchPath evaluator, inExpr = PTFTranslator.getASTNode(inpCInfo, inputRR); if ( inExpr != null ) { rr.putExpression(inExpr, cInfo); - colAlias = inExpr.toStringTree().toLowerCase(); + colAlias = inExpr.toStringTree(true).toLowerCase(); } else { colAlias = colAlias == null ? cInfo.getInternalName() : colAlias; diff --git a/ql/src/test/org/apache/hadoop/hive/ql/parse/TestIUD.java b/ql/src/test/org/apache/hadoop/hive/ql/parse/TestIUD.java index 056c56d..bdf9711 100644 --- a/ql/src/test/org/apache/hadoop/hive/ql/parse/TestIUD.java +++ b/ql/src/test/org/apache/hadoop/hive/ql/parse/TestIUD.java @@ -54,7 +54,7 @@ public void testDeleteNoWhere() throws ParseException { ASTNode ast = parse("DELETE FROM src"); Assert.assertEquals("AST doesn't match", "(TOK_DELETE_FROM " + - "(TOK_TABNAME src))", ast.toStringTree()); + "(TOK_TABNAME src))", ast.toStringTree(true)); } @Test public void testDeleteWithWhere() throws ParseException { @@ -66,7 +66,7 @@ public void testDeleteWithWhere() throws ParseException { "(AND " + "(TOK_FUNCTION TOK_ISNOTNULL (TOK_TABLE_OR_COL key)) " + "(< (. (TOK_TABLE_OR_COL src) value) 0))))", - ast.toStringTree()); + ast.toStringTree(true)); } @Test public void testUpdateNoWhereSingleSet() throws ParseException { @@ -77,7 +77,7 @@ public void testUpdateNoWhereSingleSet() throws ParseException { "(TOK_SET_COLUMNS_CLAUSE " + "(= " + "(TOK_TABLE_OR_COL key) 3)))", - ast.toStringTree()); + ast.toStringTree(true)); } @Test public void testUpdateNoWhereMultiSet() throws ParseException { @@ -90,7 +90,7 @@ public void testUpdateNoWhereMultiSet() throws ParseException { "(TOK_TABLE_OR_COL key) 3) " + "(= " + "(TOK_TABLE_OR_COL value) 8)))", - ast.toStringTree()); + ast.toStringTree(true)); } @Test public void testUpdateWithWhereSingleSet() throws ParseException { @@ -102,7 +102,7 @@ public void testUpdateWithWhereSingleSet() throws ParseException { "(= " + "(TOK_TABLE_OR_COL key) 3)) " + "(TOK_WHERE (TOK_FUNCTION TOK_ISNULL (TOK_TABLE_OR_COL value))))", - ast.toStringTree()); + ast.toStringTree(true)); } @Test public void testUpdateWithWhereSingleSetExpr() throws ParseException { @@ -114,7 +114,7 @@ public void testUpdateWithWhereSingleSetExpr() throws ParseException { "(= (TOK_TABLE_OR_COL val) (TOK_FUNCTION TOK_INT (+ 6.1 (TOK_TABLE_OR_COL c)))) " + "(= (TOK_TABLE_OR_COL d) (- (TOK_TABLE_OR_COL d) 1))) " + "(TOK_WHERE (TOK_FUNCTION TOK_ISNULL (TOK_TABLE_OR_COL value))))", - ast.toStringTree()); + ast.toStringTree(true)); } @Test public void testUpdateWithWhereMultiSet() throws ParseException { @@ -128,7 +128,7 @@ public void testUpdateWithWhereMultiSet() throws ParseException { "(= " + "(TOK_TABLE_OR_COL value) 8)) " + "(TOK_WHERE (= (TOK_TABLE_OR_COL VALUE) 1230997)))", - ast.toStringTree()); + ast.toStringTree(true)); } @Test public void testStandardInsertIntoTable() throws ParseException { @@ -142,7 +142,7 @@ public void testStandardInsertIntoTable() throws ParseException { "(TOK_SELEXPR (. (TOK_TABLE_OR_COL pvs) viewTime)) " + "(TOK_SELEXPR (. (TOK_TABLE_OR_COL pvs) userid))) " + "(TOK_WHERE (TOK_FUNCTION TOK_ISNULL (. (TOK_TABLE_OR_COL pvs) userid)))))", - ast.toStringTree()); + ast.toStringTree(true)); } @Test public void testSelectStarFromAnonymousVirtTable1Row() throws ParseException { @@ -164,7 +164,7 @@ public void testSelectStarFromVirtTable1Row() throws ParseException { "(TOK_VIRTUAL_TABREF (TOK_TABNAME VC) (TOK_COL_NAME a b)) " + "(TOK_VALUES_TABLE (TOK_VALUE_ROW 3 4)))) " + "(TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR TOK_ALLCOLREF))))", - ast.toStringTree()); + ast.toStringTree(true)); } @Test public void testSelectStarFromVirtTable2Row() throws ParseException { @@ -176,7 +176,7 @@ public void testSelectStarFromVirtTable2Row() throws ParseException { "(TOK_VIRTUAL_TABREF (TOK_TABNAME VC) (TOK_COL_NAME a b)) " + "(TOK_VALUES_TABLE (TOK_VALUE_ROW 1 2) (TOK_VALUE_ROW 3 4)))) " + "(TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR TOK_ALLCOLREF))))", - ast.toStringTree()); + ast.toStringTree(true)); } @Test public void testSelectStarFromVirtTable2RowNamedProjections() throws ParseException { @@ -189,7 +189,7 @@ public void testSelectStarFromVirtTable2RowNamedProjections() throws ParseExcept "(TOK_VALUES_TABLE (TOK_VALUE_ROW 1 2) (TOK_VALUE_ROW 3 4)))) " + "(TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) " + "(TOK_SELECT (TOK_SELEXPR (TOK_TABLE_OR_COL a) c) (TOK_SELEXPR (TOK_TABLE_OR_COL b) d))))", - ast.toStringTree()); + ast.toStringTree(true)); } @Test public void testInsertIntoTableAsSelectFromNamedVirtTable() throws ParseException { @@ -205,7 +205,7 @@ public void testInsertIntoTableAsSelectFromNamedVirtTable() throws ParseExceptio "(TOK_SELEXPR (TOK_TABLE_OR_COL a)) " + "(TOK_SELEXPR (TOK_TABLE_OR_COL b) c)) " + "(TOK_WHERE (= (TOK_TABLE_OR_COL b) 9))))", - ast.toStringTree()); + ast.toStringTree(true)); } @Test public void testInsertIntoTableFromAnonymousTable1Row() throws ParseException { @@ -218,7 +218,7 @@ public void testInsertIntoTableFromAnonymousTable1Row() throws ParseException { "(TOK_VALUES_TABLE (TOK_VALUE_ROW 1 2)))) " + "(TOK_INSERT (TOK_INSERT_INTO (TOK_TAB (TOK_TABNAME page_view))) " + "(TOK_SELECT (TOK_SELEXPR TOK_ALLCOLREF))))", - ast.toStringTree()); + ast.toStringTree(true)); } @Test public void testInsertIntoTableFromAnonymousTable() throws ParseException { diff --git a/ql/src/test/org/apache/hadoop/hive/ql/parse/TestQBSubQuery.java b/ql/src/test/org/apache/hadoop/hive/ql/parse/TestQBSubQuery.java index 8b36f21..c828588 100644 --- a/ql/src/test/org/apache/hadoop/hive/ql/parse/TestQBSubQuery.java +++ b/ql/src/test/org/apache/hadoop/hive/ql/parse/TestQBSubQuery.java @@ -70,7 +70,7 @@ public void testExtractSubQueries() throws Exception { Assert.assertEquals(sqs.size(), 1); ASTNode sq = sqs.get(0); - Assert.assertEquals(sq.toStringTree(), + Assert.assertEquals(sq.toStringTree(true), "(TOK_SUBQUERY_EXPR (TOK_SUBQUERY_OP in) (TOK_QUERY (TOK_FROM (TOK_TABREF (TOK_TABNAME src) s1)) (TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)) (TOK_SELECT (TOK_SELEXPR (TOK_TABLE_OR_COL key))) (TOK_WHERE (and (> (. (TOK_TABLE_OR_COL s1) key) '9') (> (. (TOK_TABLE_OR_COL s1) value) '9'))))) (. (TOK_TABLE_OR_COL src) key))" ); } @@ -88,8 +88,8 @@ public void testExtractConjuncts() throws Exception { SubQueryUtils.extractConjuncts((ASTNode) sqWhere.getChild(0), conjuncts); Assert.assertEquals(conjuncts.size(), 2); - Assert.assertEquals(conjuncts.get(0).toStringTree(), "(> (. (TOK_TABLE_OR_COL s1) key) '9')"); - Assert.assertEquals(conjuncts.get(1).toStringTree(), "(> (. (TOK_TABLE_OR_COL s1) value) '9')"); + Assert.assertEquals(conjuncts.get(0).toStringTree(true), "(> (. (TOK_TABLE_OR_COL s1) key) '9')"); + Assert.assertEquals(conjuncts.get(1).toStringTree(true), "(> (. (TOK_TABLE_OR_COL s1) value) '9')"); } @Test @@ -100,7 +100,7 @@ public void testRewriteOuterQueryWhere() throws Exception { ASTNode sq = sqs.get(0); ASTNode newWhere = SubQueryUtils.rewriteParentQueryWhere((ASTNode) where.getChild(0), sq); - Assert.assertEquals(newWhere.toStringTree(), "(= 1 1)"); + Assert.assertEquals(newWhere.toStringTree(true), "(= 1 1)"); } @Test @@ -111,7 +111,7 @@ public void testRewriteOuterQueryWhere2() throws Exception { ASTNode sq = sqs.get(0); ASTNode newWhere = SubQueryUtils.rewriteParentQueryWhere((ASTNode) where.getChild(0), sq); - Assert.assertEquals(newWhere.toStringTree(), "(> (TOK_TABLE_OR_COL value) '9')"); + Assert.assertEquals(newWhere.toStringTree(true), "(> (TOK_TABLE_OR_COL value) '9')"); } @Test