001package gudusoft.gsqlparser.stmt; 002 003 004import gudusoft.gsqlparser.*; 005import gudusoft.gsqlparser.nodes.TObjectName; 006import gudusoft.gsqlparser.nodes.TParseTreeVisitor; 007import gudusoft.gsqlparser.nodes.TPrepareSqlNode; 008import gudusoft.gsqlparser.nodes.TStatementSqlNode; 009 010public class TPrepareStmt extends TCustomSqlStatement { 011 012 public TPrepareStmt(EDbVendor dbvendor) { 013 super(dbvendor); 014 sqlstatementtype = ESqlStatementType.sstprepare; 015 } 016 017 018 private TCustomSqlStatement preparableStmt; 019 020 public TCustomSqlStatement getPreparableStmt() { 021 return preparableStmt; 022 } 023 024 private TObjectName stmtName; 025 private String preparableStmtStr = ""; 026 027 public String getPreparableStmtStr() { 028 return preparableStmtStr; 029 } 030 031 public TObjectName getStmtName() { 032 return stmtName; 033 } 034 035 TGSqlParser parser; 036 037 038 public int doParseStatement(TCustomSqlStatement psql) { 039 if (rootNode == null) return -1; 040 super.doParseStatement(psql); 041 042 if ((dbvendor == EDbVendor.dbvpresto)||(dbvendor == EDbVendor.dbvathena)){ 043 TStatementSqlNode sqlNode = new TStatementSqlNode(); 044 sqlNode.init(rootNode); 045 sqlNode.doParse(this, ESqlClause.unknown); 046 preparableStmt = sqlNode.getStmt(); 047 048 }else{ 049 TPrepareSqlNode sqlNode = (TPrepareSqlNode)rootNode; 050 051 stmtName = sqlNode.getStmtName(); 052 preparableStmtStr = sqlNode.getPreparableStmt(); 053 if (preparableStmtStr.startsWith("'")) { 054 preparableStmtStr = preparableStmtStr.replace("'", ""); 055 }else if (sqlNode.getPreparableStmt().startsWith("\"")) { 056 preparableStmtStr = preparableStmtStr.replace("\"", ""); 057 } 058 059 if (preparableStmtStr.length() > 0){ 060 parser = new TGSqlParser(this.dbvendor); 061 parser.sqltext = preparableStmtStr; 062 if (parser.parse() == 0){ 063 preparableStmt = parser.sqlstatements.get(0); 064 } 065 } 066 } 067 068 return 0; 069 } 070 071 public void accept(TParseTreeVisitor v){ 072 v.preVisit(this); 073 v.postVisit(this); 074 } 075 076 public void acceptChildren(TParseTreeVisitor v){ 077 v.preVisit(this); 078 if (preparableStmt != null) preparableStmt.accept(v); 079 v.postVisit(this); 080 } 081 082 public void setPreparableStmt(TCustomSqlStatement preparableStmt) { 083 this.preparableStmt = preparableStmt; 084 } 085 086 public void setStmtName(TObjectName stmtName) { 087 this.stmtName = stmtName; 088 } 089 090 public void setPreparableStmtStr(String preparableStmtStr) { 091 this.preparableStmtStr = preparableStmtStr; 092 } 093}