001package gudusoft.gsqlparser.stmt.oracle; 002 003import gudusoft.gsqlparser.*; 004import gudusoft.gsqlparser.nodes.*; 005import gudusoft.gsqlparser.stmt.TCommonStoredProcedureSqlStatement; 006 007 008/** 009 * The CREATE TRIGGER statement creates or replaces a database trigger, which is either of the following: 010 * <ul> 011 * <li> A stored PL/SQL block associated with a table, a schema, or the database.</li> 012 * <li> An anonymous PL/SQL block or a call to a procedure implemented in PL/SQL or Java.</li> 013 * </ul> 014 * For detailed information about Oracle simple_dml_trigger, compound_dml_trigger, non_dml_trigger 015 * Please check {@link TTriggeringClause} 016 * 017 * <p>the database automatically executes a trigger when specified conditions occur. 018 */ 019public class TPlsqlCreateTrigger extends TCommonStoredProcedureSqlStatement { 020 public TPlsqlCreateTrigger(EDbVendor dbvendor){ 021 super(dbvendor); 022 sqlstatementtype = ESqlStatementType.sstplsql_createtrigger ; 023 } 024 025 void buildsql() { 026 } 027 028 void clear() { 029 } 030 031 String getasprettytext() { 032 return ""; 033 } 034 035 void iterate(TVisitorAbs pvisitor) { 036 } 037 038 private TTriggeringClause triggeringClause; 039 040 public TTriggeringClause getTriggeringClause() { 041 return triggeringClause; 042 } 043 044 public TObjectName getStoredProcedureName(){ 045 return triggerName; 046 } 047 048 private TFunctionCall functionCall;//postgresql 049 050 public void setFunctionCall(TFunctionCall functionCall) { 051 this.functionCall = functionCall; 052 } 053 054 /** 055 * PostgreSQL executed function 056 * 057 * @return function call 058 */ 059 public TFunctionCall getFunctionCall() { 060 061 return functionCall; 062 } 063 064 public int doParseStatement(TCustomSqlStatement psql) { 065 if (rootNode == null) return -1; 066 if (super.doParseStatement(psql) != 0) return -1; 067 068 TCreateTriggerSqlNode createTriggerNode = (TCreateTriggerSqlNode)rootNode; 069 //super.doParseStatement(psql); 070 this.triggerName = createTriggerNode.getTriggerName(); 071 //createTriggerNode.getTrigger_event_clause().doParse(this,ESqlClause.unknown); 072 //this.eventClause = createTriggerNode.getTrigger_event_clause(); 073 triggeringClause = createTriggerNode.getTriggeringClause(); 074 triggeringClause.doParse(this,ESqlClause.unknown); 075 076 077 if (createTriggerNode.getWhenCondition() != null){ 078 createTriggerNode.getWhenCondition().doParse(this,ESqlClause.unknown); 079 this.whenCondition = createTriggerNode.getWhenCondition(); 080 } 081 082 functionCall = createTriggerNode.getFunctionCall(); 083 084 followsTriggerList = createTriggerNode.getFollowsTriggerList(); 085 086 createTriggerNode.getStmt().doParse(this,ESqlClause.unknown); 087 this.triggerBody = createTriggerNode.getStmt().getStmt(); 088 089 return 0; 090 } 091 092 private TObjectName triggerName; 093 094 /** 095 * The name of the trigger to be created. 096 * @return 097 */ 098 public TObjectName getTriggerName() { 099 return triggerName; 100 } 101 102 private TParseTreeNode eventClause; 103 104 /** 105 * @deprecated As of v2.0.1.0, replaced by {@link #getTriggeringClause()} 106 * 107 * Indicates what's kind of trigger, can be one of these: 108 * <ul> 109 * <li>{@link gudusoft.gsqlparser.nodes.TTriggeringClause},define a single trigger on a DML event.</li> 110 * <li>{@link TCompoundDmlTriggerClause},define a compound trigger on a DML event.</li> 111 * <li>{@link TNonDmlTriggerClause},define a single trigger on a DDL or database event.</li> 112 * </ul> 113 * @return trigger clause 114 */ 115 public TParseTreeNode getEventClause() { 116 return eventClause; 117 } 118 119 /** 120 * A SQL condition that must be satisfied for the database to fire the trigger. 121 */ 122 public TExpression getWhenCondition() { 123 return whenCondition; 124 } 125 126 private TExpression whenCondition; 127 128 private TCustomSqlStatement triggerBody; 129 130 /** 131 * the PL/SQL block, PL/SQL compound trigger block, {@link gudusoft.gsqlparser.stmt.TCommonBlock} 132 * <p>or call procedure that the database executes to fire the trigger. 133 * @return body statement of trigger 134 */ 135 public TCustomSqlStatement getTriggerBody() { 136 return triggerBody; 137 } 138 139 private TObjectNameList followsTriggerList; 140 141 public TObjectNameList getFollowsTriggerList() { 142 return followsTriggerList; 143 } 144 145 public void accept(TParseTreeVisitor v){ 146 v.preVisit(this); 147 v.postVisit(this); 148 } 149 150 public void acceptChildren(TParseTreeVisitor v){ 151 v.preVisit(this); 152 if (eventClause != null) { 153 eventClause.acceptChildren(v); 154 }else if (getTriggeringClause() != null){ 155 getTriggeringClause().acceptChildren(v); 156 } 157 if (followsTriggerList != null) followsTriggerList.acceptChildren(v); 158 if (whenCondition != null) whenCondition.acceptChildren(v); 159 triggerBody.acceptChildren(v); 160 v.postVisit(this); 161 } 162 163 public void setTriggerName(TObjectName triggerName) { 164 this.triggerName = triggerName; 165 } 166 167 public void setEventClause(TParseTreeNode eventClause) { 168 this.eventClause = eventClause; 169 } 170 171 public void setWhenCondition(TExpression whenCondition) { 172 this.whenCondition = whenCondition; 173 } 174 175 public void setTriggerBody(TCustomSqlStatement triggerBody) { 176 this.triggerBody = triggerBody; 177 } 178 179 public void setFollowsTriggerList(TObjectNameList followsTriggerList) { 180 this.followsTriggerList = followsTriggerList; 181 } 182}