private void visit(ASTNode n) { if (n.getType() == HiveParser.Identifier) { if (visitedNodes.containsKey(n)) { /** * Since we are modifying the stream, it's not idempotent. Ideally, the caller would take * care to only quote Identifiers in each subtree once, but this makes it safe */ return; } visitedNodes.put(n, n); trs.insertBefore(n.getToken(), "`"); trs.insertAfter(n.getToken(), "`"); } if (n.getChildCount() <= 0) { return; } for (Node c : n.getChildren()) { visit((ASTNode)c); } } }
private void visit(ASTNode n) { if(n.getType() == HiveParser.Identifier) { if(visitedNodes.containsKey(n)) { /** * Since we are modifying the stream, it's not idempotent. Ideally, the caller would take * care to only quote Identifiers in each subtree once, but this makes it safe */ return; } visitedNodes.put(n, n); trs.insertBefore(n.getToken(), "`"); trs.insertAfter(n.getToken(), "`"); } if(n.getChildCount() <= 0) {return;} for(Node c : n.getChildren()) { visit((ASTNode)c); } } }
stream.insertAfter(program, tokWhere.getTokenStopIndex(), " and " + postJoinCond);
stream.insertAfter(program, tokWhere.getTokenStopIndex(), " and " + postJoinCond);
stream.insertAfter(subQuery.getAlias(), selectClause.getTokenStopIndex(), selectClauseAdditions); if (!addGroupByClause) { ASTNode groupBy = (ASTNode) sqAST.getChild(1).getChild(3); stream.insertAfter(subQuery.getAlias(), groupBy.getTokenStopIndex(), gByClauseAdditions); stream.insertAfter(subQuery.getAlias(), sqAST.getTokenStopIndex() - 1, gByClauseAdditions);
void addRewrites(TokenRewriteStream stream, QB qb, String program, PrintStream out) { QBSubQuery sqW = qb.getWhereClauseSubQueryPredicate(); QBSubQuery sqH = qb.getHavingClauseSubQueryPredicate(); if (sqW != null || sqH != null) { ASTNode sqNode = sqW != null ? sqW.getOriginalSubQueryASTForRewrite() : sqH.getOriginalSubQueryASTForRewrite(); ASTNode tokQry = getQueryASTNode(sqNode); ASTNode tokFrom = (ASTNode) tokQry.getChild(0); StringBuilder addedJoins = new StringBuilder(); if (sqW != null) { addRewrites(stream, sqW, program, out, qb.getId(), true, addedJoins); } if (sqH != null) { addRewrites(stream, sqH, program, out, qb.getId(), false, addedJoins); } stream.insertAfter(program, tokFrom.getTokenStopIndex(), addedJoins); } Set<String> sqAliases = qb.getSubqAliases(); for(String sqAlias : sqAliases) { addRewrites(stream, qb.getSubqForAlias(sqAlias).getQB(), program, out); } }
stream.insertAfter(subQuery.getAlias(), selectClause.getTokenStopIndex(), selectClauseAdditions); if (!addGroupByClause) { ASTNode groupBy = (ASTNode) sqAST.getChild(1).getChild(3); stream.insertAfter(subQuery.getAlias(), groupBy.getTokenStopIndex(), gByClauseAdditions); stream.insertAfter(subQuery.getAlias(), sqAST.getTokenStopIndex() - 1, gByClauseAdditions);
void addRewrites(TokenRewriteStream stream, QB qb, String program, PrintStream out) { QBSubQuery sqW = qb.getWhereClauseSubQueryPredicate(); QBSubQuery sqH = qb.getHavingClauseSubQueryPredicate(); if (sqW != null || sqH != null) { ASTNode sqNode = sqW != null ? sqW.getOriginalSubQueryASTForRewrite() : sqH.getOriginalSubQueryASTForRewrite(); ASTNode tokQry = getQueryASTNode(sqNode); ASTNode tokFrom = (ASTNode) tokQry.getChild(0); StringBuilder addedJoins = new StringBuilder(); if (sqW != null) { addRewrites(stream, sqW, program, out, qb.getId(), true, addedJoins); } if (sqH != null) { addRewrites(stream, sqH, program, out, qb.getId(), false, addedJoins); } stream.insertAfter(program, tokFrom.getTokenStopIndex(), addedJoins); } Set<String> sqAliases = qb.getSubqAliases(); for(String sqAlias : sqAliases) { addRewrites(stream, qb.getSubqForAlias(sqAlias).getQB(), program, out); } }
public void insertAfter(int index, Object text) { insertAfter(DEFAULT_PROGRAM_NAME, index, text); }
public void insertAfter(Token t, Object text) { insertAfter(DEFAULT_PROGRAM_NAME, t, text); }
public void insertAfter(int index, Object text) { insertAfter(DEFAULT_PROGRAM_NAME, index, text); }
public void insertAfter(Token t, Object text) { insertAfter(DEFAULT_PROGRAM_NAME, t, text); }
public void insertAfter(Token t, Object text) { insertAfter(DEFAULT_PROGRAM_NAME, t, text); }
public void insertAfter(Token t, Object text) { insertAfter(DEFAULT_PROGRAM_NAME, t, text); }
public void insertAfter(int index, Object text) { insertAfter(DEFAULT_PROGRAM_NAME, index, text); }
public void insertAfter(Token t, Object text) { insertAfter(DEFAULT_PROGRAM_NAME, t, text); }
public void insertAfter(int index, Object text) { insertAfter(DEFAULT_PROGRAM_NAME, index, text); }
public void insertAfter(String programName, Token t, Object text) { insertAfter(programName,t.getTokenIndex(), text); }
public void insertAfter(String programName, Token t, Object text) { insertAfter(programName,t.getTokenIndex(), text); }
public void insertAfter(String programName, Token t, Object text) { insertAfter(programName,t.getTokenIndex(), text); }