001package gudusoft.gsqlparser.stmt;
002
003import gudusoft.gsqlparser.*;
004import gudusoft.gsqlparser.nodes.*;
005import gudusoft.gsqlparser.stmt.*;
006
007public class TExplainPlan extends TCustomSqlStatement {
008
009    private TCustomSqlStatement statement;
010
011    public TCustomSqlStatement getStatement() {
012        return statement;
013    }
014
015    public TExplainPlan(EDbVendor dbvendor) {
016        super(dbvendor);
017        sqlstatementtype = ESqlStatementType.sstExplain;
018    }
019
020    public int doParseStatement(TCustomSqlStatement psql) {
021        if (rootNode == null) return -1;
022        super.doParseStatement(psql);
023        TStatementSqlNode sqlNode = new TStatementSqlNode();
024        if (dbvendor == EDbVendor.dbvhana){
025            if (((TDummy)rootNode).node1 != null){
026                sqlNode.init(((TDummy)rootNode).node1);
027                sqlNode.doParse(this, ESqlClause.unknown);
028                statement = sqlNode.getStmt();
029            }
030        }else{
031            sqlNode.init(rootNode);
032            sqlNode.doParse(this, ESqlClause.unknown);
033            statement = sqlNode.getStmt();
034        }
035
036//        switch (rootNode.getNodeType()){
037//            case TStatementSqlNode.select:
038//                statement = new TSelectSqlStatement(dbvendor);
039//                break;
040//            case TStatementSqlNode.delete:
041//                statement = new TDeleteSqlStatement(dbvendor);
042//                break;
043//            case TStatementSqlNode.insert:
044//                statement = new TInsertSqlStatement(dbvendor);
045//                break;
046//            case TStatementSqlNode.update:
047//                statement = new TUpdateSqlStatement(dbvendor);
048//                break;
049//            case TStatementSqlNode.createtable:
050//                statement = new TCreateTableSqlStatement(dbvendor);
051//                break;
052//            case TStatementSqlNode.CreateIndexSqlNode:
053//                statement = new TCreateIndexSqlStatement(dbvendor);
054//                break;
055//            default:
056//                break;
057//        }
058//        statement.rootNode = rootNode;
059//        statement.doParseStatement(this);
060
061        return 0;
062    }
063
064    public void accept(TParseTreeVisitor v){
065        v.preVisit(this);
066        v.postVisit(this);
067    }
068
069    public void acceptChildren(TParseTreeVisitor v){
070        v.preVisit(this);
071        if (statement != null){
072            statement.accept(v);
073        }else{
074            TBaseType.log("Stmt inside explain is null",TLog.WARNING);
075        }
076
077        v.postVisit(this);
078    }
079
080    public void setStatement(TCustomSqlStatement statement) {
081        this.statement = statement;
082    }
083}