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}