Exemplo n.º 1
0
        public void Fire(TableEvent tableEvent, IRequest context)
        {
            var oldState = GetOldState(context);

            try {
                var triggerType = TriggerInfo.TriggerType;
                var tableName = tableEvent.Table.TableInfo.TableName;
                context.Context.OnEvent(new TriggerEvent(triggerType, Name, tableName, tableEvent.EventTime, tableEvent.EventType,
                    tableEvent.OldRowId, tableEvent.NewRow));

                var newState = new OldNewTableState(tableName, tableEvent.OldRowId.RowNumber, tableEvent.NewRow,
                    tableEvent.EventTime == TriggerEventTime.Before);

                SetState(context, newState);

                using (var block = context.CreateBlock()) {
                    FireTrigger(tableEvent, block);
                }
            } catch (TriggerException) {
                throw;
            } catch (Exception ex) {
                throw new TriggerException(String.Format("An unknown error occurred while executing trigger '{0}'.", Name), ex);
            } finally {
                SetState(context, oldState);
            }
        }
Exemplo n.º 2
0
        public void Invoke(IQuery context, TableEvent 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);
            }
        }
Exemplo n.º 3
0
        internal Transaction(ITransactionContext context, Database database, int commitId, IsolationLevel isolation, IEnumerable<TableSource> committedTables, IEnumerable<IIndexSet> indexSets)
        {
            CommitId = commitId;
            Database = database;
            Isolation = isolation;
            Context = context;

            context.RegisterInstance<ITransaction>(this);

            Registry = new TransactionRegistry(this);
            TableManager.AddVisibleTables(committedTables, indexSets);

            AddInternalTables();

            TableState = new OldNewTableState();

            IsClosed = false;

            Database.TransactionFactory.OpenTransactions.AddTransaction(this);

            this.CurrentSchema(database.Context.DefaultSchema());
            this.ReadOnly(database.Context.ReadOnly());
            this.AutoCommit(database.Context.AutoCommit());
            this.IgnoreIdentifiersCase(database.Context.IgnoreIdentifiersCase());
            this.ParameterStyle(QueryParameterStyle.Marker);
        }
Exemplo n.º 4
0
        public void Fire(TableEvent tableEvent, IRequest context)
        {
            var oldState = GetOldState(context);

            try {
                var triggerType = TriggerInfo.TriggerType;
                var tableName   = tableEvent.Table.TableInfo.TableName;
                context.Context.OnEvent(new TriggerEvent(triggerType, Name, tableName, tableEvent.EventTime, tableEvent.EventType,
                                                         tableEvent.OldRowId, tableEvent.NewRow));

                var newState = new OldNewTableState(tableName, tableEvent.OldRowId.RowNumber, tableEvent.NewRow,
                                                    tableEvent.EventTime == TriggerEventTime.Before);

                SetState(context, newState);

                using (var block = context.CreateBlock()) {
                    FireTrigger(tableEvent, block);
                }
            } catch (TriggerException) {
                throw;
            } catch (Exception ex) {
                throw new TriggerException(String.Format("An unknown error occurred while executing trigger '{0}'.", Name), ex);
            } finally {
                SetState(context, oldState);
            }
        }
Exemplo n.º 5
0
 private static void SetState(IRequest request, OldNewTableState newState)
 {
     if (request.Query.Session is ITableStateHandler)
     {
         ((ITableStateHandler)request.Query.Session).SetTableState(newState);
     }
     else if (request.Query.Session.Transaction is ITableStateHandler)
     {
         ((ITableStateHandler)request.Query.Session.Transaction).SetTableState(newState);
     }
 }
Exemplo n.º 6
0
        internal Transaction(Database database, int commitId, IsolationLevel isolation, IEnumerable<TableSource> committedTables, IEnumerable<IIndexSet> indexSets)
        {
            CommitId = commitId;
            Database = database;
            Isolation = isolation;

            InitManagers();

            Registry = new TransactionRegistry(this);
            tableManager.AddVisibleTables(committedTables, indexSets);

            AddInternalTables();

            TableState = new OldNewTableState();

            IsClosed = false;

            Database.TransactionFactory.OpenTransactions.AddTransaction(this);

            currentSchema = database.DatabaseContext.DefaultSchema();
            readOnly = dbReadOnly = database.DatabaseContext.ReadOnly();
            autoCommit = database.DatabaseContext.AutoCommit();
            ignoreCase = database.DatabaseContext.IgnoreIdentifiersCase();
        }
Exemplo n.º 7
0
 public void SetTableState(OldNewTableState tableState)
 {
     TableState = tableState;
 }
Exemplo n.º 8
0
 private static void SetState(IRequest request, OldNewTableState newState)
 {
     if (request.Query.Session is ITableStateHandler) {
         ((ITableStateHandler)request.Query.Session).SetTableState(newState);
     } else if (request.Query.Session.Transaction is ITableStateHandler) {
         ((ITableStateHandler)request.Query.Session.Transaction).SetTableState(newState);
     }
 }
Exemplo n.º 9
0
        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);
            }
        }