private void doPhase1WhereClause(ASTNode expressionTree, QB qb) throws SemanticException {
    int exprTokenType = expressionTree.getToken().getType();
    if(exprTokenType == HiveParser.TOK_SUBQUERY_EXPR) {
      qb.addSubqExprAlias(expressionTree, this);
      return;
    }

    for (int i = 0; i < expressionTree.getChildCount(); i++) {
      doPhase1WhereClause((ASTNode) expressionTree.getChild(i), qb);
    }
  }
This is required by prepare/execute statement
Original operator tree { @link topOps} shape is changed when going through transformations
and task generation, as a result original operator tree can not be used later to
e.g. regenerate tasks or re-running physical transformations.
Therefore we need to make a copy and cache it after operator tree is generated.
ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java