001package gudusoft.gsqlparser.stmt.mssql;
002
003import gudusoft.gsqlparser.*;
004import gudusoft.gsqlparser.nodes.TFetchSqlNode;
005import gudusoft.gsqlparser.nodes.TParseTreeVisitor;
006import gudusoft.gsqlparser.nodes.TObjectName;
007import gudusoft.gsqlparser.nodes.TOpenSqlNode;
008
009public class TMssqlOpen extends TCustomSqlStatement {
010     public TMssqlOpen (EDbVendor dbvendor){
011        super(dbvendor);
012        sqlstatementtype = ESqlStatementType.sstmssqlopen ;
013        }
014
015    void buildsql() {
016    }
017
018    void clear() {
019    }
020
021    String getasprettytext() {
022        return "";
023    }
024
025    void iterate(TVisitorAbs pvisitor) {
026    }
027
028    public int doParseStatement(TCustomSqlStatement psql) {
029       super.doParseStatement(psql);
030       if (rootNode != null) {
031           TOpenSqlNode node = (TOpenSqlNode)rootNode;
032           this.cursorName = node.getCursorName();
033       }
034       if (this.cursorName == null) {
035           // Fallback: extract cursor name from tokens directly.
036           // Forms: OPEN cursor_name | OPEN VARIABLE | OPEN GLOBAL cursor_name | OPEN SYMMETRIC KEY ...
037           gudusoft.gsqlparser.TSourceToken tk = getStartToken();
038           gudusoft.gsqlparser.TSourceToken end = getEndToken();
039           if (tk != null) {
040               tk = tk.nextSolidToken();
041               if (tk != null && tk.toString().equalsIgnoreCase("global")) {
042                   tk = tk.nextSolidToken();
043               }
044               if (tk != null && end != null && tk.posinlist <= end.posinlist
045                       && !tk.toString().equalsIgnoreCase("symmetric")) {
046                   this.cursorName = gudusoft.gsqlparser.nodes.TObjectName.createObjectName(
047                           dbvendor, gudusoft.gsqlparser.EDbObjectType.cursor, tk);
048               }
049           }
050       }
051      return 0;
052   }
053
054   public void accept(TParseTreeVisitor v){
055       v.preVisit(this);
056       v.postVisit(this);
057   }
058
059    public void acceptChildren(TParseTreeVisitor v){
060        v.preVisit(this);
061        v.postVisit(this);
062    }
063
064   private TObjectName cursorName = null;
065
066   public TObjectName getCursorName() {
067       return cursorName;
068   }
069
070    public void setCursorName(TObjectName cursorName) {
071        this.cursorName = cursorName;
072    }
073}