001package gudusoft.gsqlparser.stmt.hive;
002/*
003 * Date: 13-7-29
004 */
005
006import gudusoft.gsqlparser.*;
007import gudusoft.gsqlparser.nodes.*;
008import gudusoft.gsqlparser.nodes.hive.THiveFromQuerySqlNode;
009import gudusoft.gsqlparser.stmt.TInsertSqlStatement;
010import gudusoft.gsqlparser.stmt.TSelectSqlStatement;
011
012public class THiveFromQuery extends TSelectSqlStatement {
013
014    private TStatementList hiveBodyList = null;
015
016    public TStatementList getHiveBodyList() {
017        if (hiveBodyList == null)
018            hiveBodyList = new TStatementList();
019        return hiveBodyList;
020    }
021
022    public THiveFromQuery(EDbVendor dbvendor) {
023        super(dbvendor);
024        sqlstatementtype = ESqlStatementType.ssthiveFromQuery;
025    }
026
027    public int doParseStatement(TCustomSqlStatement psql) {
028        if (rootNode == null) return -1;
029        super.doParseStatement(psql);
030        TSelectSqlNode node = (TSelectSqlNode)rootNode;
031
032        if (node.getCteList() != null){
033            this.setCteList(node.getCteList());
034            this.getCteList().doParse(this,ESqlClause.cte);
035        }
036
037//        TFromTable lcFromTable = null;
038//        TJoin lcJoin = null;
039//
040//        for(int i=0; i<node.getFromTableList().size();i++){
041//             lcFromTable = node.getFromTableList().getFromTable(i);
042//            if (lcFromTable.getFromtableType() != ETableSource.join){
043//                lcJoin = new TJoin();
044//                lcJoin.setTable(analyzeFromTable(lcFromTable,true));
045//                lcJoin.setStartToken(lcJoin.getTable().getStartToken());
046//                lcJoin.setEndToken(lcJoin.getTable().getEndToken());
047//                lcJoin.setGsqlparser(getGsqlparser());
048//            }else{
049//                lcJoin = analyzeJoin(lcFromTable.getJoinExpr(),null,true);
050//                lcJoin.doParse(this, ESqlClause.join);
051//            }
052//            joins.addJoin(lcJoin);
053//        }
054
055        if (node.getHiveBodyList() != null){
056           for(int i = 0; i<node.getHiveBodyList().size();i++){
057               TParseTreeNode node1 = node.getHiveBodyList().get(i);
058               switch (node1.getNodeType()){
059                   case TStatementSqlNode.select:
060                       TSelectSqlStatement select = new TSelectSqlStatement(EDbVendor.dbvhive);
061                       select.rootNode = node1;
062                       select.doParseStatement(this);
063                       this.getHiveBodyList().add(select);
064
065                       break;
066                   case TStatementSqlNode.insert:
067
068                       TInsertSqlStatement insert = new TInsertSqlStatement(EDbVendor.dbvhive);
069                       insert.rootNode = node1;
070                       insert.doParseStatement(this);
071                       this.getHiveBodyList().add(insert);
072                       break;
073                   default:
074                       break;
075               }
076           }
077        }
078
079        return 0;
080    }
081
082    public void accept(TParseTreeVisitor v){
083        v.preVisit(this);
084        v.postVisit(this);
085    }
086
087    public void acceptChildren(TParseTreeVisitor v){
088        v.preVisit(this);
089        if (hiveBodyList != null) hiveBodyList.accept(v);
090        v.postVisit(this);
091    }
092
093    public void setHiveBodyList(TStatementList hiveBodyList) {
094        this.hiveBodyList = hiveBodyList;
095    }
096}