001package gudusoft.gsqlparser.stmt; 002 003 004import gudusoft.gsqlparser.EDbObjectType; 005import gudusoft.gsqlparser.EDbVendor; 006import gudusoft.gsqlparser.ESqlStatementType; 007import gudusoft.gsqlparser.TCustomSqlStatement; 008import gudusoft.gsqlparser.nodes.TDummy; 009import gudusoft.gsqlparser.nodes.TObjectName; 010import gudusoft.gsqlparser.nodes.TParseTreeVisitor; 011 012public class TDropSynonymStmt extends TCustomSqlStatement { 013 014 private TObjectName synonymName; 015 016 public TObjectName getSynonymName() { 017 return synonymName; 018 } 019 020 public TDropSynonymStmt(EDbVendor dbvendor) { 021 super(dbvendor); 022 sqlstatementtype = ESqlStatementType.sstdropsynonym; 023 } 024 025 public int doParseStatement(TCustomSqlStatement psql) { 026 if (rootNode == null) return -1; 027 super.doParseStatement(psql); 028 029 // Some vendor grammars (e.g. OpenEdge) reduce DROP SYNONYM through a 030 // generic statement-stub rule whose root is not a TDummy; guard the 031 // cast instead of throwing ClassCastException (Mantis 4453 pattern). 032 if (rootNode instanceof TDummy) { 033 synonymName = (TObjectName)(((TDummy)rootNode).node1); 034 if (synonymName != null) { 035 synonymName.setDbObjectType(EDbObjectType.synonym); 036 } 037 } 038 039 return 0; 040 } 041 042 public void accept(TParseTreeVisitor v){ 043 v.preVisit(this); 044 v.postVisit(this); 045 } 046 047 public void acceptChildren(TParseTreeVisitor v){ 048 v.preVisit(this); 049 v.postVisit(this); 050 } 051 052 public void setSynonymName(TObjectName synonymName) { 053 this.synonymName = synonymName; 054 } 055}