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.TCloseSqlNode; 008 009public class TMssqlClose extends TCustomSqlStatement { 010 public TMssqlClose (EDbVendor dbvendor){ 011 super(dbvendor); 012 sqlstatementtype = ESqlStatementType.sstmssqlclose ; 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 TCloseSqlNode node = (TCloseSqlNode)rootNode; 032 this.cursorName = node.getCursorName(); 033 } 034 if (this.cursorName == null) { 035 // Fallback: extract cursor name from tokens directly. 036 // Forms: CLOSE cursor_name | CLOSE VARIABLE | CLOSE GLOBAL cursor_name 037 // | CLOSE ALL SYMMETRIC KEYS | CLOSE SYMMETRIC KEY cursor_name 038 TSourceToken tk = getStartToken(); 039 TSourceToken end = getEndToken(); 040 if (tk != null) { 041 tk = tk.nextSolidToken(); 042 if (tk != null && tk.toString().equalsIgnoreCase("global")) { 043 tk = tk.nextSolidToken(); 044 } 045 if (tk != null && end != null && tk.posinlist <= end.posinlist 046 && !tk.toString().equalsIgnoreCase("symmetric") 047 && !tk.toString().equalsIgnoreCase("all")) { 048 this.cursorName = TObjectName.createObjectName( 049 dbvendor, EDbObjectType.cursor, tk); 050 } 051 } 052 } 053 return 0; 054 } 055 056 public void accept(TParseTreeVisitor v){ 057 v.preVisit(this); 058 v.postVisit(this); 059 } 060 061 public void acceptChildren(TParseTreeVisitor v){ 062 v.preVisit(this); 063 v.postVisit(this); 064 } 065 066 private TObjectName cursorName = null; 067 068 public TObjectName getCursorName() { 069 return cursorName; 070 } 071 072 public void setCursorName(TObjectName cursorName) { 073 this.cursorName = cursorName; 074 } 075}