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}