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}