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}