예제 #1
0
        public override void Process(PerformDBOperationExpression expression)
        {
            //RegisterExpression<PerformDBOperationExpression>(expression);

            Announcer.Say("Performing DB Operation");

            if (Options.PreviewOnly)
            {
                return;
            }

            if (Connection.State != ConnectionState.Open)
            {
                Connection.Open();
            }

            if (expression.Operation != null)
            {
                expression.Operation(Connection, Transaction);

                if (FBOptions.TransactionModel == FirebirdTransactionModel.AutoCommit)
                {
                    CommitRetaining();
                }
            }
        }
예제 #2
0
        public override void RollbackTransaction()
        {
            base.RollbackTransaction();

            if (FBOptions.UndoEnabled && processedExpressions != null && processedExpressions.Count > 0)
            {
                processedExpressions.Pop(); //the last transaction is already rolled back

                if (processedExpressions.Count > 0)
                {
                    Announcer.Say("Undoing {0} transaction(s)", processedExpressions.Count);
                }

                while (processedExpressions.Count > 0)
                {
                    Announcer.Say("Undoing transaction {0}", processedExpressions.Count);
                    Stack <FirebirdProcessedExpressionBase> expressions = processedExpressions.Pop();
                    while (expressions.Count > 0)
                    {
                        expressions.Pop().Undo(Connection);
                    }
                }
            }

            EnsureConnectionIsClosed();
            ClearLocks();
        }
예제 #3
0
        public override void RollbackTransaction()
        {
            Announcer.Say("Rolling back transaction");
            Transaction.Rollback();
            WasCommitted = true;

            if (FBOptions.UndoEnabled)
            {
                processedExpressions.Pop(); //the last transaction is already rolled back

                if (processedExpressions.Count > 0)
                {
                    Announcer.Say("Undoing {0} transaction(s)", processedExpressions.Count);
                }

                while (processedExpressions.Count > 0)
                {
                    Announcer.Say("Undoing transaction {0}", processedExpressions.Count);
                    Stack <FirebirdProcessedExpressionBase> expressions = processedExpressions.Pop();
                    while (expressions.Count > 0)
                    {
                        expressions.Pop().Undo(Connection);
                    }
                }
            }

            if (Connection.State != ConnectionState.Closed)
            {
                Connection.Close();
            }
            ClearLocks();
        }
예제 #4
0
 public override void BeginTransaction()
 {
     Announcer.Say("Beginning Transaction");
     Transaction = Connection.BeginTransaction();
     ClearLocks();
     ClearExpressions();
     ClearDDLFollowers();
 }
예제 #5
0
 public override void RollbackTransaction()
 {
     Announcer.Say("Rolling back transaction");
     Transaction.Rollback();
     if (Connection.State != ConnectionState.Closed)
     {
         Connection.Close();
     }
 }
예제 #6
0
 public override void CommitTransaction()
 {
     Announcer.Say("Committing Transaction");
     Transaction.Commit();
     if (Connection.State != ConnectionState.Closed)
     {
         Connection.Close();
     }
 }
 public override void BeginTransaction()
 {
     Announcer.Say("Beginning Transaction");
     if (Connection.State == ConnectionState.Closed)
     {
         Connection.Open();
     }
     Transaction = Connection.BeginTransaction();
 }
예제 #8
0
        public void Say_Should_Write()
        {
            var message = "TheMessage";

            Mock.Get(announcer).Setup(a => a.Write(message, true)).Verifiable();

            announcer.Say(message);

            Mock.Get(announcer).VerifyAll();
        }
예제 #9
0
        public PostgresProcessor(IDbConnection connection, IMigrationGenerator generator, IAnnouncer announcer, IMigrationProcessorOptions options, IDbFactory factory)
            : base(generator, announcer, options)
        {
            this.factory = factory;
            Connection   = connection;
            connection.Open();

            Announcer.Say("Beginning Transaction");
            Transaction = Connection.BeginTransaction();
        }
예제 #10
0
 public override void CommitTransaction()
 {
     Announcer.Say("Committing Transaction");
     Transaction.Commit();
     WasCommitted = true;
     if (Connection.State != ConnectionState.Closed)
     {
         Connection.Close();
     }
     ClearLocks();
 }
예제 #11
0
        public virtual void CommitRetaining()
        {
            Announcer.Say("Committing and Retaining Transaction");

            using (var command = Factory.CreateCommand("COMMIT RETAIN", Connection, Transaction))
            {
                command.CommandTimeout = Options.Timeout;
                command.ExecuteNonQuery();
            }
            processedExpressions.Push(new Stack <FirebirdProcessedExpressionBase>());
        }
예제 #12
0
        public override void BeginTransaction()
        {
            if (Transaction != null)
            {
                return;
            }

            EnsureConnectionIsOpen();

            Announcer.Say("Beginning Transaction");
            Transaction = Connection.BeginTransaction();
        }
예제 #13
0
        public override void RollbackTransaction()
        {
            if (Transaction == null)
            {
                return;
            }

            Announcer.Say("Rolling back transaction");
            Transaction.Rollback();
            WasCommitted = true;
            Transaction  = null;
        }
예제 #14
0
        public override void CommitTransaction()
        {
            if (Transaction == null)
            {
                return;
            }

            Announcer.Say("Committing Transaction");
            Transaction.Commit();
            WasCommitted = true;
            Transaction  = null;
        }
예제 #15
0
 protected override void EnsureConnectionIsClosed()
 {
     if (Connection.State != ConnectionState.Closed)
     {
         if (Connection.State == ConnectionState.Open && Options.ProviderSwitches.Contains("SingleUserMode") && isInSingleUserMode)
         {
             Announcer.Say("Exiting Single User Mode");
             Process("declare @sql varchar(100);set @sql='alter database '+quotename(db_name())+' SET MULTI_USER'; exec(@sql)");
             isInSingleUserMode = false;
         }
         Connection.Close();
     }
 }
예제 #16
0
        public virtual void CommitRetaining()
        {
            if (IsRunningOutOfMigrationScope())
            {
                EnsureConnectionIsClosed();
                return;
            }

            Announcer.Say("Committing and Retaining Transaction");

            CommitTransaction();
            BeginTransaction();
        }
예제 #17
0
 protected override void EnsureConnectionIsOpen()
 {
     if (Connection.State != ConnectionState.Open)
     {
         Connection.Open();
         if (Options.ProviderSwitches.Contains("SingleUserMode") && !isInSingleUserMode)
         {
             Announcer.Say("Entering Single User Mode");
             Process("declare @sql varchar(100);set @sql='alter database '+quotename(db_name())+' SET SINGLE_USER WITH ROLLBACK IMMEDIATE'; exec(@sql)");
             isInSingleUserMode = true;
         }
     }
 }
        public override void Process(PerformDBOperationExpression expression)
        {
            Announcer.Say("Performing DB Operation");

            if (Options.PreviewOnly)
            {
                return;
            }

            EnsureConnectionIsOpen();

            expression.Operation?.Invoke(Connection, Transaction);
        }
예제 #19
0
        public override void CommitTransaction()
        {
            Announcer.Say("Committing Transaction");

            if (transaction != null)
            {
                transaction.Commit();
                transaction = null;
            }

            if (connection.State != ConnectionState.Closed)
            {
                connection.Close();
            }
        }
예제 #20
0
        public override void Process(PerformDBOperationExpression expression)
        {
            Announcer.Say("Performing DB Operation");

            if (Options.PreviewOnly)
            {
                return;
            }

            EnsureConnectionIsOpen();

            if (expression.Operation != null)
            {
                expression.Operation(Connection, null);
            }
        }
예제 #21
0
        public override void CommitTransaction()
        {
            Announcer.Say("Committing Transaction");

            if (Transaction != null)
            {
                Transaction.Commit();
                Transaction = null;
            }

            WasCommitted = true;

            if (Connection.State != ConnectionState.Closed)
            {
                Connection.Close();
            }
        }
예제 #22
0
        public override void RollbackTransaction()
        {
            if (transaction == null)
            {
                Announcer.Say("No transaction was available to rollback!");
                return;
            }

            Announcer.Say("Rolling back transaction");

            transaction.Rollback();

            if (connection.State != ConnectionState.Closed)
            {
                connection.Close();
            }
        }
        public override void Process(CreateSchemaExpression expression)
        {
            var password = expression.GetAdditionalFeature(SqlAnywhereExtensions.SchemaPassword, string.Empty);

            if (string.IsNullOrEmpty(password))
            {
                throw new Exception("Create schema requires connection for the schema user. No password specified in CreateSchemaExpression.");
            }

            if (!Exists("SELECT count(*) FROM \"dbo\".\"syslogins\" WHERE \"name\"='{0}'", FormatHelper.FormatSqlEscape(expression.SchemaName)))
            {
                // Try to automatically generate the user
                Announcer.Say("Creating user {0}.", expression.SchemaName);
                Execute("CREATE USER \"{0}\" IDENTIFIED BY \"{1}\"", expression.SchemaName, password);
            }

            var    sql = Generator.Generate(expression);
            string connectionString = ReplaceUserIdAndPasswordInConnectionString(expression.SchemaName, password);

            Announcer.Say("Creating connection for user {0} to create schema.", expression.SchemaName);
            var connection = Factory.CreateConnection(connectionString);

            EnsureConnectionIsOpen(connection);
            Announcer.Say("Beginning out of scope transaction to create schema.");
            var transaction = connection.BeginTransaction();

            try
            {
                ExecuteNonQuery(connection, transaction, sql);
                transaction.Commit();
                Announcer.Say("Out of scope transaction to create schema committed.");
            }
            catch
            {
                transaction.Rollback();
                Announcer.Say("Out of scope transaction to create schema rolled back.");
                throw;
            }
            finally
            {
                transaction?.Dispose();
                connection.Dispose();
            }
        }
예제 #24
0
        public virtual void CommitRetaining()
        {
            if (IsRunningOutOfMigrationScope())
            {
                return;
            }

            Announcer.Say("Committing and Retaining Transaction");

            CommitTransaction();
            BeginTransaction();

            /*using (var command = Factory.CreateCommand("COMMIT RETAIN", Connection, Transaction))
             * {
             *  command.CommandTimeout = Options.Timeout;
             *  command.ExecuteNonQuery();
             * }*/
            processedExpressions.Push(new Stack <FirebirdProcessedExpressionBase>());
        }
        public override void Process(PerformDBOperationExpression expression)
        {
            Announcer.Say("Performing DB Operation");

            if (Options.PreviewOnly)
            {
                return;
            }

            if (Connection.State != ConnectionState.Open)
            {
                Connection.Open();
            }

            if (expression.Operation != null)
            {
                expression.Operation(Connection, Transaction);
            }
        }
예제 #26
0
        public override void Process(PerformDBOperationExpression expression)
        {
            Announcer.Say("Performing DB Operation");

            if (Options.PreviewOnly)
            {
                return;
            }

            EnsureConnectionIsOpen();

            if (expression.Operation != null)
            {
                expression.Operation(Connection, Transaction);

                if (FBOptions.TransactionModel == FirebirdTransactionModel.AutoCommit)
                {
                    CommitRetaining();
                }
            }
        }
 public void Process(PerformDBOperationExpression expression)
 {
     Announcer.Say("Performing DB Operation");
 }
예제 #28
0
 public void Process(Builders.Execute.PerformDBOperationExpression expression)
 {
     Announcer.Say("Performing DB Operation");
 }
예제 #29
0
 public void AnnounceUsing(Announcer announcer)
 {
     announcer.Say(ToString());
 }
예제 #30
0
 public override void BeginTransaction()
 {
     Announcer.Say("Beginning Transaction");
     Transaction = Connection.BeginTransaction();
 }