public static TriggerSchema GenerateDeleteTrigger(ForeignKeySchema fks)
        {
            TriggerSchema trigger = new TriggerSchema();
            trigger.Name = MakeTriggerName(fks, "fkd");
            trigger.Type = TriggerType.Before;
            trigger.Event = TriggerEvent.Delete;
            trigger.Table = fks.ForeignTableName;

            string triggerName = trigger.Name;

            if (!fks.CascadeOnDelete)
            {
                trigger.Body = "SELECT RAISE(ROLLBACK, 'delete on table " + fks.ForeignTableName +
                                      " violates foreign key constraint " + triggerName + "')" +
                                      " WHERE (SELECT " + fks.ColumnName +
                                      " FROM " + fks.TableName + " WHERE " + fks.ColumnName + " = OLD." +
                                      fks.ForeignColumnName +
                                      ") IS NOT NULL; ";
            }
            else
            {
                trigger.Body = "DELETE FROM [" + fks.TableName + "] WHERE " + fks.ColumnName + " = OLD." +
                                      fks.ForeignColumnName + "; ";

            }
            return trigger;
        }
Esempio n. 2
0
 private void AddTrigger(TriggerSchema trigger)
 {
     store.AppendValues(trigger.Name, trigger.TriggerType.ToString(),
                        trigger.TriggerEvent.ToString(), trigger.TriggerFireType == TriggerFireType.ForEachRow,
                        trigger.Position.ToString(), trigger.IsActive, trigger.Comment,
                        trigger.Source, trigger);
 }
        public static TriggerSchema GenerateUpdateTrigger(ForeignKeySchema fks)
        {
            var trigger = new TriggerSchema();

            trigger.Name  = MakeTriggerName(fks, "fku");
            trigger.Type  = TriggerType.Before;
            trigger.Event = TriggerEvent.Update;
            trigger.Table = fks.TableName;

            string triggerName = trigger.Name;
            string nullString  = "";

            if (fks.IsNullable)
            {
                nullString = " NEW." + fks.ColumnName + " IS NOT NULL AND";
            }

            trigger.Body = "SELECT RAISE(ROLLBACK, 'update on table " + fks.TableName +
                           " violates foreign key constraint " + triggerName + "')" +
                           " WHERE" + nullString + " (SELECT " + fks.ForeignColumnName +
                           " FROM " + fks.ForeignTableName + " WHERE " + fks.ForeignColumnName + " = NEW." +
                           fks.ColumnName +
                           ") IS NULL; ";

            return(trigger);
        }
        public static TriggerSchema GenerateDeleteTrigger(ForeignKeySchema fks)
        {
            var trigger = new TriggerSchema();

            trigger.Name  = MakeTriggerName(fks, "fkd");
            trigger.Type  = TriggerType.Before;
            trigger.Event = TriggerEvent.Delete;
            trigger.Table = fks.ForeignTableName;

            string triggerName = trigger.Name;

            if (!fks.CascadeOnDelete)
            {
                trigger.Body = "SELECT RAISE(ROLLBACK, 'delete on table " + fks.ForeignTableName +
                               " violates foreign key constraint " + triggerName + "')" +
                               " WHERE (SELECT " + fks.ColumnName +
                               " FROM " + fks.TableName + " WHERE " + fks.ColumnName + " = OLD." +
                               fks.ForeignColumnName +
                               ") IS NOT NULL; ";
            }
            else
            {
                trigger.Body = "DELETE FROM [" + fks.TableName + "] WHERE " + fks.ColumnName + " = OLD." +
                               fks.ForeignColumnName + "; ";
            }
            return(trigger);
        }
Esempio n. 5
0
        public virtual void FillSchemaObjects()
        {
            TreeIter iter;

            if (store.GetIterFirst(out iter))
            {
                do
                {
                    TriggerSchema trigger = store.GetValue(iter, colObjIndex) as TriggerSchema;

                    trigger.Name = store.GetValue(iter, colNameIndex) as string;

                    trigger.TriggerType     = (TriggerType)Enum.Parse(typeof(TriggerType), store.GetValue(iter, colTypeIndex) as string);
                    trigger.TriggerEvent    = (TriggerEvent)Enum.Parse(typeof(TriggerEvent), store.GetValue(iter, colEventIndex) as string);
                    trigger.TriggerFireType = (TriggerFireType)Enum.Parse(typeof(TriggerFireType), store.GetValue(iter, colFireTypeIndex) as string);

                    trigger.Position = int.Parse(store.GetValue(iter, colPositionIndex) as string);
                    trigger.IsActive = (bool)store.GetValue(iter, colActiveIndex);

                    trigger.Comment = store.GetValue(iter, colCommentIndex) as string;
                    trigger.Source  = store.GetValue(iter, colSourceIndex) as string;

                    table.Triggers.Add(trigger);
                } while (store.IterNext(ref iter));
            }
        }
Esempio n. 6
0
        protected virtual void AddClicked(object sender, EventArgs e)
        {
            TriggerSchema trigger = schemaProvider.GetNewTriggerSchema("trigger_" + table.Name);

            trigger.TableName = table.Name;
            int index = 1;

            while (triggers.Contains(trigger.Name))
            {
                trigger.Name = "trigger_" + table.Name + (index++);
            }
            triggers.Add(trigger);
            AddTrigger(trigger);
            EmitContentChanged();
        }
Esempio n. 7
0
        protected virtual string GetTriggerCreateStatement(TriggerSchema trigger)
        {
            StringBuilder sb = new StringBuilder();

            sb.Append(Environment.NewLine);
            sb.Append("CREATE TRIGGER ");
            sb.Append(trigger.Name);
            if (trigger.TriggerType == TriggerType.Before)
            {
                sb.Append(" BEFORE ");
            }
            else
            {
                sb.Append(" AFTER ");
            }

            switch (trigger.TriggerEvent)
            {
            case TriggerEvent.Delete:
                sb.Append("DELETE");
                break;

            case TriggerEvent.Insert:
                sb.Append("INSERT");
                break;

            case TriggerEvent.Update:
                sb.Append("UPDATE");
                break;

            default:
                throw new NotImplementedException();
            }

            sb.Append(" ON ");
            sb.Append(trigger.TableName);
            sb.Append(Environment.NewLine);
            sb.Append("FOR EACH ROW ");
            sb.Append(Environment.NewLine);
            sb.Append("BEGIN");
            sb.Append(Environment.NewLine);
            sb.Append(trigger.Source);
            sb.Append(Environment.NewLine);
            sb.Append("END");
            sb.Append(Environment.NewLine);

            return(sb.ToString());
        }
Esempio n. 8
0
    public static TriggerSchema GenerateInsertTrigger(ForeignKeySchema fks)
    {
        TriggerSchema triggerSchema = new TriggerSchema();

        triggerSchema.Name  = MakeTriggerName(fks, "fki");
        triggerSchema.Type  = TriggerType.Before;
        triggerSchema.Event = TriggerEvent.Insert;
        triggerSchema.Table = fks.TableName;
        string text = "";

        if (fks.IsNullable)
        {
            text = " NEW." + fks.ColumnName + " IS NOT NULL AND";
        }
        triggerSchema.Body = "SELECT RAISE(ROLLBACK, 'insert on table " + fks.TableName + " violates foreign key constraint " + triggerSchema.Name + "') WHERE" + text + " (SELECT " + fks.ForeignColumnName + " FROM " + fks.ForeignTableName + " WHERE " + fks.ForeignColumnName + " = NEW." + fks.ColumnName + ") IS NULL; ";
        return(triggerSchema);
    }
        protected virtual void AddClicked(object sender, EventArgs e)
        {
            TriggerSchema trigger = schemaProvider.CreateTriggerSchema(string.Concat(table.Name,
                                                                                     "_",
                                                                                     "trigger_",
                                                                                     table.Name));

            trigger.TableName = table.Name;
            int index = 1;

            while (triggers.Contains(trigger.Name))
            {
                trigger.Name = "trigger_" + table.Name + (index++);
            }
            // triggers.Add (trigger);
            AddTrigger(trigger);
            EmitContentChanged();
        }
Esempio n. 10
0
        protected virtual void RemoveClicked(object sender, System.EventArgs e)
        {
            TreeIter iter;

            if (listTriggers.Selection.GetSelected(out iter))
            {
                TriggerSchema trigger = store.GetValue(iter, colObjIndex) as TriggerSchema;

                if (Services.MessageService.AskQuestion(
                        GettextCatalog.GetString("Are you sure you want to remove trigger '{0}'?", trigger.Name),
                        GettextCatalog.GetString("Remove Trigger")
                        ))
                {
                    store.Remove(ref iter);
                    triggers.Remove(trigger);
                    EmitContentChanged();
                }
            }
        }
Esempio n. 11
0
        protected virtual void OnSelectionChanged(object sender, EventArgs e)
        {
            TreeIter iter;

            if (listTriggers.Selection.GetSelected(out iter))
            {
                buttonRemove.Sensitive = true;
                sqlEditor.Editable     = true;

                TriggerSchema trigger = store.GetValue(iter, colObjIndex) as TriggerSchema;

                sqlEditor.Text = trigger.Source;
            }
            else
            {
                buttonRemove.Sensitive = false;
                sqlEditor.Editable     = false;
                sqlEditor.Text         = String.Empty;
            }
        }
        public static TriggerSchema GenerateInsertTrigger(ForeignKeySchema fks)
        {
            TriggerSchema trigger = new TriggerSchema();
            trigger.Name = MakeTriggerName(fks, "fki");
            trigger.Type = TriggerType.Before;
            trigger.Event = TriggerEvent.Insert;
            trigger.Table = fks.TableName;

            string nullString = "";
            if (fks.IsNullable)
            {
                nullString = " NEW." + fks.ColumnName + " IS NOT NULL AND";
            }

            trigger.Body = "SELECT RAISE(ROLLBACK, 'insert on table " + fks.TableName +
                          " violates foreign key constraint " + trigger.Name + "')" +
                          " WHERE" + nullString + " (SELECT " + fks.ForeignColumnName +
                          " FROM " + fks.ForeignTableName + " WHERE " + fks.ForeignColumnName + " = NEW." +
                          fks.ColumnName +
                          ") IS NULL; " ;
            return trigger;
        }
Esempio n. 13
0
            /// <summary>
            /// returns <see cref="TriggerSchema"/> corresponding to a query of <paramref name="queryType"/>
            /// performed on table corresponding to <paramref name="auditedTableSchema"/>.
            /// </summary>
            /// <param name="auditedTableSchema"></param>
            /// <param name="auditTableSchema"></param>
            /// <param name="queryType"></param>
            /// <returns>
            /// <see cref="TriggerSchema"/> corresponding to a query of <paramref name="queryType"/>
            /// performed on table corresponding to <paramref name="auditedTableSchema"/>
            /// </returns>
            internal static TriggerSchema GetAuditTriggerSchema(
                TableSchema auditedTableSchema,
                TableSchema auditTableSchema,
                Query.eQueryType queryType)
            {
                TriggerSchema auditTriggerSchema;

                InsertQuery onTriggerAuditInsertQuery =
                    getOnTriggerAuditInsertQuery(
                        auditedTableSchema,
                        auditTableSchema,
                        queryType);

                auditTriggerSchema = new TriggerSchema(
                    getTriggerName(auditedTableSchema, queryType),
                    getTriggerTime(queryType),
                    queryType,
                    auditedTableSchema.Name,
                    onTriggerAuditInsertQuery);

                return(auditTriggerSchema);
            }
 //http://msdn2.microsoft.com/en-us/library/aa258846(SQL.80).aspx
 public override void DropTrigger(TriggerSchema trigger)
 {
     ExecuteNonQuery(string.Concat("DROP TRIGGER ", trigger.Name));
 }
		protected virtual string GetTriggerCreateStatement (TriggerSchema trigger)
		{
			StringBuilder sb = new StringBuilder ();
			sb.Append (Environment.NewLine);
			sb.Append ("CREATE TRIGGER ");
			sb.Append (trigger.Name);
			if (trigger.TriggerType == TriggerType.Before)
				sb.Append (" BEFORE ");
			else
				sb.Append (" AFTER ");
			
			switch (trigger.TriggerEvent) {
			case TriggerEvent.Delete:
				sb.Append ("DELETE");
				break;
			case TriggerEvent.Insert:
				sb.Append ("INSERT");
				break;
			case TriggerEvent.Update:
				sb.Append ("UPDATE");
				break;
			default:
				throw new NotImplementedException ();
			}
			
			sb.Append (" ON ");
			sb.Append (trigger.TableName);
			sb.Append (Environment.NewLine);
			sb.Append ("FOR EACH ROW ");
			sb.Append (Environment.NewLine);
			sb.Append ("BEGIN");
			sb.Append (Environment.NewLine);
			sb.Append (trigger.Source);
			sb.Append (Environment.NewLine);
			sb.Append ("END");
			sb.Append (Environment.NewLine);
			
			return sb.ToString ();
		}
		//http://dev.mysql.com/doc/refman/5.1/en/drop-trigger.html
		public override void DropTrigger (TriggerSchema trigger)
		{
			ExecuteNonQuery (string.Concat("DROP TRIGGER IF EXISTS ", trigger.Name, ";"));
		}
		public override TriggerSchemaCollection GetTableTriggers (TableSchema table)
		{
			
			if (table == null)
				throw new ArgumentNullException ("table");
			TriggerSchemaCollection triggers = new TriggerSchemaCollection ();
			
			IPooledDbConnection conn = connectionPool.Request ();

			IDbCommand command = conn.CreateCommand (string.Format (@"SELECT * FROM sqlite_master
																	WHERE type = 'trigger' and tbl_name = '{0}'", 
			                                                        table.Name));
			try {
				// Parse Trigger Sql - Needed for alter a table
				System.Text.RegularExpressions.Regex parseRegEx = new System.Text.RegularExpressions.Regex 
														(string.Concat (
					                					@"((CREATE\s*(Temp|Temporary)?\s*TRIGGER){1}\s?(\w+)\s?(IF NOT",
														@" EXISTS)?\s?(BEFORE|AFTER|INSTEAD OF){1}\s?(\w+)\s*ON(\s+\w*",
														@")\s*(FOR EACH ROW){1}\s*(BEGIN){1})\s+(\w|\W)*(END)"));
				using (IDataReader r = command.ExecuteReader ()) {
					while (r.Read ()) {
						string sql = r.GetString (r.GetOrdinal ("sql"));
						System.Text.RegularExpressions.MatchCollection matchs = parseRegEx.Matches (sql);
						TriggerSchema trigger = new TriggerSchema (this);
						trigger.Name = r.GetString (r.GetOrdinal ("name"));
						trigger.TableName = r.GetString (r.GetOrdinal ("tbl_name"));
						trigger.Definition = sql;
						if (matchs.Count > 0) {
							trigger.TriggerFireType = TriggerFireType.ForEachRow;
							switch (matchs[0].Groups[7].Value.ToLower ()) {
								case "insert":
									trigger.TriggerEvent = TriggerEvent.Insert;
									break;
								case "update":
									trigger.TriggerEvent = TriggerEvent.Update;
									break;
								case "delete":
									trigger.TriggerEvent = TriggerEvent.Delete;
									break;
								default:
									throw new NotImplementedException ();
							}
							
							switch (matchs[0].Groups[7].Value.ToLower ()) {
								case "before":
									trigger.TriggerType = TriggerType.Before;
									break;
								case "after":
									trigger.TriggerType = TriggerType.After;
									break;
								default:
									throw new NotImplementedException ();
							}
							StringBuilder sbSource = new StringBuilder ();
							foreach (System.Text.RegularExpressions.Capture c in matchs[0].Groups[11].Captures)
								sbSource.Append (c.Value);
							trigger.Source = sbSource.ToString ();
							
							
						}
						triggers.Add (trigger);
					}
				}
			} catch (SqliteException e) {
				QueryService.RaiseException (e);
			}
			return triggers;
		}
		//http://dev.mysql.com/doc/refman/5.1/en/create-trigger.html
		public override void CreateTrigger (TriggerSchema trigger)
		{
			string sql = GetTriggerCreateStatement (trigger);
			ExecuteNonQuery (sql);
		}
        //http://msdn2.microsoft.com/en-us/library/aa258254(SQL.80).aspx
        public override void CreateTrigger(TriggerSchema trigger)
        {
            string sql = GetTriggerCreateStatement(trigger);

            ExecuteNonQuery(sql);
        }
        public override TriggerSchemaCollection GetTableTriggers(TableSchema table)
        {
            if (table == null)
            {
                throw new ArgumentNullException("table");
            }
            TriggerSchemaCollection triggers = new TriggerSchemaCollection();

            IPooledDbConnection conn = connectionPool.Request();

            IDbCommand command = conn.CreateCommand(string.Format(@"SELECT * FROM sqlite_master
																	WHERE type = 'trigger' and tbl_name = '{0}'"                                                                    ,
                                                                  table.Name));

            try {
                // Parse Trigger Sql - Needed for alter a table
                System.Text.RegularExpressions.Regex parseRegEx = new System.Text.RegularExpressions.Regex
                                                                      (string.Concat(
                                                                          @"((CREATE\s*(Temp|Temporary)?\s*TRIGGER){1}\s?(\w+)\s?(IF NOT",
                                                                          @" EXISTS)?\s?(BEFORE|AFTER|INSTEAD OF){1}\s?(\w+)\s*ON(\s+\w*",
                                                                          @")\s*(FOR EACH ROW){1}\s*(BEGIN){1})\s+(\w|\W)*(END)"));
                using (IDataReader r = command.ExecuteReader()) {
                    while (r.Read())
                    {
                        string sql = r.GetString(r.GetOrdinal("sql"));
                        System.Text.RegularExpressions.MatchCollection matchs = parseRegEx.Matches(sql);
                        TriggerSchema trigger = new TriggerSchema(this);
                        trigger.Name       = r.GetString(r.GetOrdinal("name"));
                        trigger.TableName  = r.GetString(r.GetOrdinal("tbl_name"));
                        trigger.Definition = sql;
                        if (matchs.Count > 0)
                        {
                            trigger.TriggerFireType = TriggerFireType.ForEachRow;
                            switch (matchs[0].Groups[7].Value.ToLower())
                            {
                            case "insert":
                                trigger.TriggerEvent = TriggerEvent.Insert;
                                break;

                            case "update":
                                trigger.TriggerEvent = TriggerEvent.Update;
                                break;

                            case "delete":
                                trigger.TriggerEvent = TriggerEvent.Delete;
                                break;

                            default:
                                throw new NotImplementedException();
                            }

                            switch (matchs[0].Groups[7].Value.ToLower())
                            {
                            case "before":
                                trigger.TriggerType = TriggerType.Before;
                                break;

                            case "after":
                                trigger.TriggerType = TriggerType.After;
                                break;

                            default:
                                throw new NotImplementedException();
                            }
                            StringBuilder sbSource = new StringBuilder();
                            foreach (System.Text.RegularExpressions.Capture c in matchs[0].Groups[11].Captures)
                            {
                                sbSource.Append(c.Value);
                            }
                            trigger.Source = sbSource.ToString();
                        }
                        triggers.Add(trigger);
                    }
                }
            } catch (SqliteException e) {
                QueryService.RaiseException(e);
            }
            return(triggers);
        }
		//http://www.sqlite.org/lang_droptrigger.html
		public override void DropTrigger (TriggerSchema trigger)
		{
			ExecuteNonQuery ("DROP TRIGGER IF EXISTS " + trigger.Name);
		}
Esempio n. 22
0
		
		public override TriggerSchemaCollection GetTableTriggers (TableSchema table)
		{
			if (table == null)
				throw new ArgumentNullException ("table");
			TriggerSchemaCollection triggers = new TriggerSchemaCollection ();
			using (IPooledDbConnection conn = connectionPool.Request ()) {
				using (IDbCommand command = conn.CreateCommand (string.Format (
																@"SELECT * FROM 
																information_schema.triggers
																WHERE event_object_table = '{0}' order by trigger_name", 
				                                                table.Name))) {
					try {
						using (IDataReader r = command.ExecuteReader ()) {
							while (r.Read ()) {
								TriggerSchema trigger = new TriggerSchema (this);
								trigger.Name = r.GetString (r.GetOrdinal ("trigger_name"));
								trigger.Source = r.GetString (r.GetOrdinal ("action_statement"));
								trigger.TriggerType = (TriggerType)Enum.Parse (typeof(TriggerType), 
																				r.GetString (r.GetOrdinal ("condition_timing")));
								trigger.TriggerEvent = (TriggerEvent)Enum.Parse (typeof(TriggerEvent), 
																				r.GetString (r.GetOrdinal ("event_manipulation")));
								trigger.TriggerFireType = TriggerFireType.ForEachRow;
								triggers.Add (trigger);
							}
						}
					} catch (NpgsqlException e) {
						QueryService.RaiseException (e);
					} finally {
						conn.Release ();
					}
				}
			}
			return triggers;
		
		//http://msdn2.microsoft.com/en-US/library/aa238878(SQL.80).aspx
		public override void RenameTrigger (TriggerSchema trigger, string name)
		{
			Rename (trigger.Name, name, "OBJECT");
			trigger.Name = name;
 /// <summary>
 /// Gets a create script for the triggerSchema in SQLite syntax
 /// </summary>
 /// <param name="ts">Trigger to script</param>
 /// <returns>Executable script</returns>
 protected static string WriteTriggerSchema(TriggerSchema ts)
 {
     return @"CREATE TRIGGER [" + ts.Name + "] " +
            ts.Type + " " + ts.Event +
            " ON [" + ts.Table + "] " +
            "BEGIN " + ts.Body + " END;";
 }
		
		public override TriggerSchemaCollection GetTableTriggers (TableSchema table)
		{
			if (table == null)
				throw new ArgumentNullException ("table");
			
			TriggerSchemaCollection triggers = new TriggerSchemaCollection ();				
			
			using (IPooledDbConnection conn = connectionPool.Request ()) {
				string sql = string.Format(@"SELECT 
							 					Tables.Name TableName,
	      										Triggers.name TriggerName,
	      										Triggers.crdate TriggerCreatedDate,
	      										Comments.Text TriggerText
											FROM sysobjects Triggers
											INNER JOIN sysobjects Tables On
	      										 Triggers.parent_obj = Tables.id
											INNER JOIN syscomments Comments On 
	      										Triggers.id = Comments.id
											WHERE 
												Triggers.xtype = 'TR'
												AND Tables.xtype = 'U' 
												AND Tables.Name = '{0}'
											ORDER BY 
												Tables.Name, 
												Triggers.name", table.Name);
				using (IDbCommand command = conn.CreateCommand (sql)) {
					using (IDataReader r = command.ExecuteReader ()) {
						while (r.Read ()) {
								System.Text.RegularExpressions.Regex parseRegEx = new System.Text.RegularExpressions.Regex
															(string.Concat (
							                					@"((CREATE\s*(Temp|Temporary)?\s*TRIGGER){1}\s?(\w+)\s?(IF NOT",
																@" EXISTS)?\s?(BEFORE|AFTER|INSTEAD OF){1}\s?(\w+)\s*ON(\s+\w*",
																@")\s*(FOR EACH ROW){1}\s*(BEGIN){1})\s+(\w|\W)*(END)"));
								TriggerSchema trigger = new TriggerSchema (this);
								trigger.TableName = table.Name;
								trigger.Name = r.GetString (r.GetOrdinal ("TriggerName"));
								sql = r.GetString (r.GetOrdinal ("TriggerText"));
								System.Text.RegularExpressions.MatchCollection matchs = parseRegEx.Matches (sql);
								if (matchs.Count > 0) {
									trigger.TriggerFireType = TriggerFireType.ForEachRow;
									switch (matchs[0].Groups[7].Value.ToLower ()) {
										case "insert":
											trigger.TriggerEvent = TriggerEvent.Insert;
											break;
										case "update":
											trigger.TriggerEvent = TriggerEvent.Update;
											break;
										case "delete":
											trigger.TriggerEvent = TriggerEvent.Delete;
											break;
										default:
											throw new NotImplementedException ();
									}
									switch (matchs[0].Groups[7].Value.ToLower ()) {
										case "before":
											trigger.TriggerType = TriggerType.Before;
											break;
										case "after":
											trigger.TriggerType = TriggerType.After;
											break;
										default:
											throw new NotImplementedException ();
									}
									StringBuilder sbSource = new StringBuilder ();
									foreach (System.Text.RegularExpressions.Capture c in matchs[0].Groups[11].Captures)
										sbSource.Append (c.Value);
									trigger.Source = sbSource.ToString ();
								}
								triggers.Add (trigger);
						}
					}
				}
				conn.Release ();
			}
			return triggers;
Esempio n. 26
0
 public CreateTriggerQuery(TriggerSchema triggerSchema)
 {
     this.triggerSchema = triggerSchema;
 }
Esempio n. 27
0
 public static string WriteTriggerSchema(TriggerSchema ts)
 {
     return(string.Concat("CREATE TRIGGER [", ts.Name, "] ", ts.Type, " ", ts.Event, " ON [", ts.Table, "] BEGIN ", ts.Body, " END;"));
 }
 //http://msdn2.microsoft.com/en-US/library/aa238878(SQL.80).aspx
 public override void RenameTrigger(TriggerSchema trigger, string name)
 {
     Rename(trigger.Name, name, "OBJECT");
     trigger.Name = name;
 }
Esempio n. 29
0
		
		protected virtual string GetTriggerCreateStatement (TriggerSchema trigger)
		{
			StringBuilder sb = new StringBuilder ();
			
			sb.Append ("CREATE TRIGGER ");
			sb.Append (trigger.Name);
			
			switch (trigger.TriggerType) {
			case TriggerType.Before:
				sb.Append (" BEFORE");
				break;
			case TriggerType.After:
				sb.Append (" AFTER");
				break;
			default:
				throw new NotImplementedException ();
			}
			
			switch (trigger.TriggerEvent) {
			case TriggerEvent.Insert:
				sb.Append (" INSERT ");
				break;
			case TriggerEvent.Update:
				sb.Append (" UPDATE ");
				break;
			case TriggerEvent.Delete:
				sb.Append (" DELETE ");
				break;
			default:
				throw new NotImplementedException ();
			}
			
			sb.Append ("ON ");
			sb.Append (trigger.TableName);
			sb.Append (' ');
			sb.Append (Environment.NewLine);
			
			switch (trigger.TriggerFireType) {
			case TriggerFireType.ForEachRow:
				sb.Append (" FOR EACH ROW ");
				break;
			case TriggerFireType.ForEachStatement:
				sb.Append (" FOR EACH STATEMENT ");
				break;
			default:
				throw new NotImplementedException ();
			}
			
			sb.Append (Environment.NewLine);
			sb.Append ("EXECUTE PROCEDURE ");
			sb.Append (trigger.Source);
			sb.Append (";");
			
			return sb.ToString ();
        public override TriggerSchemaCollection GetTableTriggers(TableSchema table)
        {
            if (table == null)
            {
                throw new ArgumentNullException("table");
            }

            TriggerSchemaCollection triggers = new TriggerSchemaCollection();

            using (IPooledDbConnection conn = connectionPool.Request()) {
                string sql = string.Format(@"SELECT 
							                    Tables.Name TableName,
	                                            Triggers.name TriggerName,
	                                            Triggers.crdate TriggerCreatedDate,
	                                            Comments.Text TriggerText
											FROM sysobjects Triggers
											INNER JOIN sysobjects Tables On
	                                             Triggers.parent_obj = Tables.id
											INNER JOIN syscomments Comments On 
	                                            Triggers.id = Comments.id
											WHERE 
												Triggers.xtype = 'TR'
												AND Tables.xtype = 'U' 
												AND Tables.Name = '{0}'
											ORDER BY 
												Tables.Name, 
												Triggers.name"                                                , table.Name);
                using (IDbCommand command = conn.CreateCommand(sql)) {
                    using (IDataReader r = command.ExecuteReader()) {
                        while (r.Read())
                        {
                            System.Text.RegularExpressions.Regex parseRegEx = new System.Text.RegularExpressions.Regex
                                                                                  (string.Concat(
                                                                                      @"((CREATE\s*(Temp|Temporary)?\s*TRIGGER){1}\s?(\w+)\s?(IF NOT",
                                                                                      @" EXISTS)?\s?(BEFORE|AFTER|INSTEAD OF){1}\s?(\w+)\s*ON(\s+\w*",
                                                                                      @")\s*(FOR EACH ROW){1}\s*(BEGIN){1})\s+(\w|\W)*(END)"));
                            TriggerSchema trigger = new TriggerSchema(this);
                            trigger.TableName = table.Name;
                            trigger.Name      = r.GetString(r.GetOrdinal("TriggerName"));
                            sql = r.GetString(r.GetOrdinal("TriggerText"));
                            System.Text.RegularExpressions.MatchCollection matchs = parseRegEx.Matches(sql);
                            if (matchs.Count > 0)
                            {
                                trigger.TriggerFireType = TriggerFireType.ForEachRow;
                                switch (matchs[0].Groups[7].Value.ToLower())
                                {
                                case "insert":
                                    trigger.TriggerEvent = TriggerEvent.Insert;
                                    break;

                                case "update":
                                    trigger.TriggerEvent = TriggerEvent.Update;
                                    break;

                                case "delete":
                                    trigger.TriggerEvent = TriggerEvent.Delete;
                                    break;

                                default:
                                    throw new NotImplementedException();
                                }
                                switch (matchs[0].Groups[7].Value.ToLower())
                                {
                                case "before":
                                    trigger.TriggerType = TriggerType.Before;
                                    break;

                                case "after":
                                    trigger.TriggerType = TriggerType.After;
                                    break;

                                default:
                                    throw new NotImplementedException();
                                }
                                StringBuilder sbSource = new StringBuilder();
                                foreach (System.Text.RegularExpressions.Capture c in matchs[0].Groups[11].Captures)
                                {
                                    sbSource.Append(c.Value);
                                }
                                trigger.Source = sbSource.ToString();
                            }
                            triggers.Add(trigger);
                        }
                    }
                }
                conn.Release();
            }
            return(triggers);
        }
Esempio n. 31
0
		
		//http://www.postgresql.org/docs/8.2/interactive/sql-altertrigger.html
		public override void RenameTrigger (TriggerSchema trigger, string name)
		{
			ExecuteNonQuery (string.Concat("ALTER TRIGGER ", trigger.Name, " ON ", trigger.TableName, " RENAME TO ", 
											name, ";"));
			trigger.Name = name;
 /// <summary>
 /// Gets a create script for the triggerSchema in sqlite syntax
 /// </summary>
 /// <param name="ts">Trigger to script</param>
 /// <returns>Executable script</returns>
 public static string WriteTriggerSchema(TriggerSchema ts)
 {
     return(@"CREATE TRIGGER [" + ts.Name + "] " + ts.Type + " " + ts.Event + " ON [" + ts.Table + "] " + "BEGIN " + ts.Body + " END;");
 }
 //http://www.sqlite.org/lang_droptrigger.html
 public override void DropTrigger(TriggerSchema trigger)
 {
     ExecuteNonQuery("DROP TRIGGER IF EXISTS " + trigger.Name);
 }