001package gudusoft.gsqlparser.stmt.db2;
002
003import gudusoft.gsqlparser.*;
004import gudusoft.gsqlparser.nodes.*;
005import gudusoft.gsqlparser.stmt.TStoredProcedureSqlStatement;
006
007/**
008 * Create trigger.
009 *
010 * @deprecated As of v2.0.1.0, replaced by {@link gudusoft.gsqlparser.stmt.TCreateTriggerStmt}
011 */
012public class TDb2CreateTrigger extends TStoredProcedureSqlStatement {
013     public TDb2CreateTrigger (EDbVendor dbvendor){
014        super(dbvendor);
015        sqlstatementtype = ESqlStatementType.sstdb2createtrigger ;
016        }
017
018    void buildsql() {
019    }
020
021    void clear() {
022    }
023
024
025
026    String getasprettytext() {
027        return "";
028    }
029
030    void iterate(TVisitorAbs pvisitor) {
031    }
032
033    public TObjectName getStoredProcedureName(){
034        return triggerName;
035    }
036
037    public TObjectName getTriggerName() {
038        return triggerName;
039    }
040
041    private TObjectName triggerName = null;
042    private TTable onTable = null;
043
044    public TTable getOnTable() {
045        return onTable;
046    }
047
048    public int doParseStatement(TCustomSqlStatement psql) {
049        if (rootNode == null) return -1;
050        TCreateTriggerSqlNode createTriggerNode = (TCreateTriggerSqlNode)rootNode;
051
052        super.doParseStatement(psql);
053        this.triggerName = createTriggerNode.getTriggerName();
054        onTable = createTriggerNode.getOnTable();
055        tables.addTable(onTable);
056
057        TTriggerAction triggerAction = createTriggerNode.getTriggerAction();
058        this.whenExpr = triggerAction.getWhenExpr();
059        if (triggerAction.getStmtNode() != null){
060            triggerAction.getStmtNode().doParse(this,ESqlClause.unknown);
061            this.getBodyStatements().add(triggerAction.getStmtNode().getStmt());
062        }else if (triggerAction.getCompoundSqlNode() != null){
063            TCompoundSqlNode compoundSqlNode = triggerAction.getCompoundSqlNode();
064            if (compoundSqlNode.getDeclareStmts() != null){
065               compoundSqlNode.getDeclareStmts().doParse(this,ESqlClause.unknown);
066
067                // push variable declare into symbolTable, and add to declareStatements
068                for(int i=0;i<compoundSqlNode.getDeclareStmts().size();i++){
069                   this.getTopStatement().getSymbolTable().push( new TSymbolTableItem(TObjectName.ttobjVariable,this,compoundSqlNode.getDeclareStmts().getStatementSqlNode(i).getStmt() ));
070                   this.getDeclareStatements().add(compoundSqlNode.getDeclareStmts().getStatementSqlNode(i).getStmt());
071                }
072            }
073
074            if (compoundSqlNode.getStmts() != null){
075               compoundSqlNode.getStmts().doParse(this,ESqlClause.unknown);
076
077                for(int i= 0; i<compoundSqlNode.getStmts().size();i++){
078                  this.getBodyStatements().add(compoundSqlNode.getStmts().getStatementSqlNode(i).getStmt());
079                }
080            }
081
082            if (compoundSqlNode.getDeclareStmts() != null){
083                // pop variable declare from symbolTable
084                for(int i=0;i<compoundSqlNode.getDeclareStmts().size();i++){
085                   this.getTopStatement().getSymbolTable().pop();
086                }
087            }
088        }
089
090        return 0;
091    }
092
093    private TExpression whenExpr = null;
094
095    public TExpression getWhenExpr() {
096        return whenExpr;
097    }
098
099    public void accept(TParseTreeVisitor v){
100        v.preVisit(this);
101
102        if (whenExpr != null) whenExpr.accept(v);
103        //if (this.getParameterDeclarations() != null) getParameterDeclarations().accept(v);
104        if (this.getDeclareStatements().size() > 0) this.getDeclareStatements().accept(v);
105        if ( this.getBodyStatements().size() > 0) getBodyStatements().accept(v);
106
107        v.postVisit(this);
108    }
109
110    public void setTriggerName(TObjectName triggerName) {
111        this.triggerName = triggerName;
112    }
113
114    public void setOnTable(TTable onTable) {
115        this.onTable = onTable;
116    }
117
118    public void setWhenExpr(TExpression whenExpr) {
119        this.whenExpr = whenExpr;
120    }
121}