public static void FireTriggers(this IQueryContext context, TableEventContext tableEvent) { var manager = context.Session().Transaction.GetTriggerManager(); if (manager == null) return; manager.FireTriggers(context, tableEvent); }
public void FireTriggers(IQueryContext context, TableEventContext tableEvent) { if (!transaction.TableExists(SystemSchema.TriggerTableName)) return; BuildTriggerCache(); foreach (var trigger in triggerCache) { if (trigger.CanInvoke(tableEvent)) trigger.Invoke(context, tableEvent); } }
public static void FireTrigger(this IQueryContext context, TableEventContext tableEvent) { var eventSource = tableEvent.Table.FullName; var eventType = tableEvent.EventType; var triggers = context.Session.FindTriggers(eventSource, eventType); foreach (var trigger in triggers) { try { trigger.Fire(tableEvent); var oldRowId = tableEvent.OldRowId; var newRow = tableEvent.NewRow; var triggerEvent = new TriggerEvent(trigger.TriggerName, eventSource, eventType, oldRowId, newRow); context.RegisterEvent(triggerEvent); } catch (Exception) { // TODO: throw a specialized exception throw; } } }
public void Fire(TableEventContext context) { if (context == null) throw new ArgumentNullException("context"); if (ShouldFire(context)) { } }
private bool ShouldFire(TableEventContext context) { if ((TriggerInfo.EventType & context.EventType) == 0) return false; var tableName = context.Table.TableInfo.TableName; return TriggerInfo.TableName == null || TriggerInfo.TableName.Equals(tableName, true); }
private void FireTrigger(IQueryContext context, TableEventContext tableEvent) { if (TriggerType == TriggerType.Callback) { NotifyTriggerEvent(context, tableEvent); } else { ExecuteProcedure(context); } }
private void NotifyTriggerEvent(IQueryContext context, TableEventContext tableEvent) { var tableName = tableEvent.Table.FullName; var eventType = tableEvent.EventType; var triggerEvent = new TriggerEvent(context.Session, TriggerName, tableName, eventType, tableEvent.OldRowId, tableEvent.NewRow); context.RegisterEvent(triggerEvent); }
public bool CanInvoke(TableEventContext context) { if ((TriggerInfo.EventType & context.EventType) == 0) return false; var tableName = context.Table.TableInfo.TableName; return TriggerInfo.TableName == null || TriggerInfo.TableName.Equals(tableName, true); }
public void Invoke(IQueryContext context, TableEventContext tableEvent) { var isBefore = (tableEvent.EventType & TriggerEventType.Before) != 0; var transaction = context.Session.Transaction; if (transaction is ITableStateHandler) { var stateHandler = (ITableStateHandler) transaction; var oldState = stateHandler.TableState; var newState = new OldNewTableState(tableEvent.Table.FullName, tableEvent.OldRowId.RowNumber, tableEvent.NewRow, isBefore); stateHandler.SetTableState(newState); try { FireTrigger(context, tableEvent); } finally { stateHandler.SetTableState(oldState); } } else { FireTrigger(context, tableEvent); } }
public TableEventException(TableEventContext tableEvent) : this(tableEvent, FormMessage(tableEvent)) { }
private static string FormMessage(TableEventContext tableEvent) { return String.Format("An error occurred when firing triggers '{0}' on '{1}'.", tableEvent.EventType.AsString(), tableEvent.Table.FullName); }
public TableEventException(TableEventContext tableEvent, string message, Exception innerException) : base(-1, message, innerException) { TableName = tableEvent.Table.FullName; EventType = tableEvent.EventType; }
public TableEventException(TableEventContext tableEvent, string message) : this(tableEvent, message, null) { }
public TableEventException(TableEventContext tableEvent, Exception innerException) : this(tableEvent, FormMessage(tableEvent), innerException) { }