Example #1
0
 public RuntimeContext(IDbConnection connection, IDbTransaction transaction, IDbCommandExecutor executor, IProviderMetadata providerMetadata, IMigrationStepMetadata stepMetadata)
     : base(providerMetadata, stepMetadata)
 {
     _connection = connection;
     _transaction = transaction;
     _executor = executor;
 }
        /// <summary>
        /// Helper method that runs ADO.NET test suite for the specified <see cref="IDbCommandExecutor"/>
        /// in addition to other built-in implementations.
        /// </summary>
        /// <param name="connection">The <see cref="IDbConnection"/> to use to connect to the database.</param>
        /// <param name="commandFactory">A <see cref="DbCommandFactory"/> implementation specific to an ADO.NET provider, e.g. SqlCommand, NpgsqlCommand.</param>
        /// <param name="providerSpecificCommandExecutor">A <see cref="IDbCommandExecutor"/> specific to an ADO.NET provider, e.g. SqlCommand, NpgsqlCommand, used to call DbCommand methods.</param>
        /// <param name="cancellationToken">A cancellation token passed into downstream async methods.</param>
        /// <returns>A task representing the asynchronous operation.</returns>
        public static async Task RunAllAsync(
            IDbConnection connection,
            DbCommandFactory commandFactory,
            IDbCommandExecutor providerSpecificCommandExecutor,
            CancellationToken cancellationToken)
        {
            var executors = new List <IDbCommandExecutor>
            {
                // call methods directly like SqlCommand.ExecuteScalar(), provided by caller
                providerSpecificCommandExecutor,

                // call methods through DbCommand reference
                new DbCommandClassExecutor(),

                // call methods through IDbCommand reference
                new DbCommandInterfaceExecutor(),
#if !NET45
                // call methods through DbCommand reference (referencing netstandard.dll)
                new DbCommandNetStandardClassExecutor(),

                // call methods through IDbCommand reference (referencing netstandard.dll)
                new DbCommandNetStandardInterfaceExecutor(),
#endif
            };

            using (var root = Tracer.Instance.StartActive("root"))
            {
                foreach (var executor in executors)
                {
                    await RunAsync(connection, commandFactory, executor, cancellationToken);
                }
            }
        }
Example #3
0
        public static List <T> ExecuteReader <T>(this IDbCommandExecutor executor, ExecuteReaderRequest request, Func <IDataRecord, T> read)
        {
            List <T> rows = null;

            executor.ExecuteReader(request, dataReader => rows = dataReader.ReadResult(() => read(dataReader)));
            return(rows);
        }
Example #4
0
        public static int ExecuteNonQuery(this IDbCommandExecutor executor, CreateCommandRequest request)
        {
            var affectedRows = 0;

            executor.Execute(request, command => affectedRows = command.ExecuteNonQuery());
            return(affectedRows);
        }
Example #5
0
        internal void Execute(IDbConnection connection, IDbTransaction transaction, MigrationDirection direction, IDbCommandExecutor commandExecutor)
        {
            Debug.Assert(connection.State == ConnectionState.Open);

            var context = new RuntimeContext(connection, transaction, commandExecutor, _providerMetadata);
            Database database = GetDatabaseContainingMigrationChanges(direction, context);
            var translator = new CommandsToSqlTranslator(_provider);
            foreach (string commandText in translator.TranslateToSql(database, context))
            {
                //MigSharp uses ADO, not SMO to run SQL. ADO does not support the 'GO' statement in SQL as it is not TSQL.
                //We split SQL on 'GO' and run as individual statements
                var separatedByGoStatements = new List<string>(goStatementRegex.Split(commandText));
                separatedByGoStatements.RemoveAll(r => String.IsNullOrEmpty(r.Trim()));

                foreach (var statement in separatedByGoStatements)
                {
                    IDbCommand command = connection.CreateCommand();
                    command.CommandTimeout = 0; // do not timeout; the client is responsible for not causing lock-outs
                    command.Transaction = transaction;
                    command.CommandText = statement;
                    try
                    {
                        commandExecutor.ExecuteNonQuery(command);
                    }
                    catch (DbException x)
                    {
                        Log.Error("An error occurred: {0}{1}while trying to execute:{1}{2}", x.Message, Environment.NewLine, command.CommandText);
                        throw;
                    }
                }
            }
        }
Example #6
0
        /// <summary>
        /// Creates a RunAllAsync&lt;TDbCommand&gt; transaction with the following spans,
        /// when the profiler is attached:
        /// <para/>
        /// nameof(TDbCommand) command span:
        /// <list type="bullet">
        ///		<item>sync span + 7 command spans</item>
        ///		<item>async span + 7 command spans (if supports async)</item>
        ///		<item>async with cancellation span + 7 command spans (if supports async)</item>
        /// </list>
        /// 25 spans (if supports async), otherwise 9 spans
        ///
        /// <para/>
        /// DbCommand command span:
        /// <list type="bullet">
        ///		<item>sync span + 7 command spans</item>
        ///		<item>async span + 7 command spans</item>
        ///		<item>async with cancellation span + 7 command spans</item>
        /// </list>
        /// 25 spans
        ///
        /// <para />
        /// IDbCommand command span:
        /// <list type="bullet">
        ///		<item>sync span + 7 command spans</item>
        /// </list>
        /// 9 spans
        ///
        /// <para />
        /// IDbCommandGenericConstraint&lt;TDbCommand&gt; command span:
        /// <list type="bullet">
        ///		<item>sync span + 7 command spans</item>
        /// </list>
        /// 9 spans
        ///
        /// <para/>
        /// DbCommand-NetStandard command span:
        /// <list type="bullet">
        ///		<item>sync span + 7 command spans</item>
        ///		<item>async span + 7 command spans</item>
        ///		<item>async with cancellation span + 7 command spans</item>
        /// </list>
        /// 25 spans
        ///
        /// <para />
        /// IDbCommand-NetStandard command span:
        /// <list type="bullet">
        ///		<item>sync span + 7 command spans</item>
        /// </list>
        /// 9 spans
        ///
        /// <para />
        /// IDbCommandGenericConstraint&lt;TDbCommand&gt;-NetStandard command span:
        /// <list type="bullet">
        ///		<item>sync span + 7 command spans</item>
        /// </list>
        /// 9 spans
        ///
        /// <para />
        /// 111 spans total (if supports async), otherwise 95 spans
        /// </summary>
        public static async Task RunAllAsync <TDbCommand>(
            DbCommandFactory commandFactory,
            IDbCommandExecutor providerCommandExecutor,
            CancellationToken token
            ) where TDbCommand : IDbCommand
        {
            var executors = new List <IDbCommandExecutor>
            {
                providerCommandExecutor,
                new DbCommandClassExecutor(),
                new DbCommandInterfaceExecutor(),
                new DbCommandInterfaceGenericExecutor <TDbCommand>(),

                // call methods referencing netstandard.dll
                new DbCommandNetStandardClassExecutor(),
                new DbCommandNetStandardInterfaceExecutor(),
                new DbCommandNetStandardInterfaceGenericExecutor <TDbCommand>(),
            };

            await Agent.Tracer.CaptureTransaction("RunAllAsync<TDbCommand>", "test", async transaction =>
            {
                foreach (var executor in executors)
                {
                    await RunAsync(transaction, commandFactory, executor, token);
                }
            });
        }
    public static void Execute(this IDbCommandExecutor executor, CreateCommandRequest request, Action <IDbCommand> execute)
    {
        ArgumentNullException.ThrowIfNull(executor);
        var requests = new ExecuteCommandRequest(request, execute).ItemToArray();

        executor.Execute(requests);
    }
Example #8
0
        public static DataSet ExecuteDataSet(this IDbCommandExecutor executor, ExecuteReaderRequest request)
        {
            DataSet dataSet = null;

            executor.Execute(request.CreateCommandRequest, command => { dataSet = command.ExecuteDataSet(request.CancellationToken); });
            return(dataSet);
        }
    public static void Execute(this IDbCommandExecutor executor, CreateCommandRequest request, Action <IDbCommand> execute)
    {
        Assert.IsNotNull(executor);
        var requests = new ExecuteCommandRequest(request, execute).ItemToArray();

        executor.Execute(requests);
    }
Example #10
0
        public static object ExecuteScalar(this IDbCommandExecutor executor, CreateCommandRequest request)
        {
            object scalar = null;

            executor.Execute(request, command => scalar = command.ExecuteScalar());
            return(scalar);
        }
    public static object ExecuteScalar(this IDbCommandExecutor executor, CreateCommandRequest request)
    {
        ArgumentNullException.ThrowIfNull(executor);
        object scalar = null;

        executor.Execute(request, command => scalar = command.ExecuteScalar());
        return(scalar);
    }
 internal void UpdateToInclude(IEnumerable<IMigrationMetadata> containedMigrations, IDbConnection connection, IDbTransaction transaction, IDbCommandExecutor executor)
 {
     foreach (IMigrationMetadata metadata in containedMigrations)
     {
         _history.Insert(metadata.Timestamp, metadata.ModuleName, metadata.Tag);
     }
     StoreChanges(connection, transaction, executor);
 }
Example #13
0
 public static void ExecuteReader(this IDbCommandExecutor executor, ExecuteReaderRequest request, Action <IDataReader> read)
 {
     executor.Execute(request.CreateCommandRequest, command =>
     {
         using (var dataReader = command.ExecuteReader(request.CommandBehavior))
             read(dataReader);
     });
 }
Example #14
0
        public static ExecuteReaderResponse <T1, T2> ExecuteReader <T1, T2>(this IDbCommandExecutor executor, ExecuteReaderRequest request,
                                                                            Func <IDataRecord, T1> read1, Func <IDataRecord, T2> read2)
        {
            ExecuteReaderResponse <T1, T2> response = null;

            executor.ExecuteReader(request, dataReader => response = dataReader.Read(() => read1(dataReader), () => read2(dataReader)));
            return(response);
        }
    public static int ExecuteNonQuery(this IDbCommandExecutor executor, CreateCommandRequest request)
    {
        ArgumentNullException.ThrowIfNull(executor);
        var affectedRows = 0;

        executor.Execute(request, command => affectedRows = command.ExecuteNonQuery());
        return(affectedRows);
    }
    public static DataSet ExecuteDataSet(this IDbCommandExecutor executor, ExecuteReaderRequest request)
    {
        ArgumentNullException.ThrowIfNull(executor);
        ArgumentNullException.ThrowIfNull(request);
        DataSet dataSet = null;

        executor.Execute(request.CreateCommandRequest, command => { dataSet = command.ExecuteDataSet(request.CancellationToken); });
        return(dataSet);
    }
Example #17
0
 public SqlQueryExecutor(
     ISqlGenerator sqlGenerator,
     IDbCommandExecutor dbCommandExecutor,
     IEntityMapper entityMapper)
 {
     _sqlGenerator      = sqlGenerator;
     _dbCommandExecutor = dbCommandExecutor;
     _entityMapper      = entityMapper;
 }
    public static ReadOnlySegmentLinkedList <T> ExecuteReader <T>(this IDbCommandExecutor executor, ExecuteReaderRequest request, int segmentLength,
                                                                  Func <IDataRecord, T> readRecord)
    {
        Assert.IsNotNull(executor);
        ReadOnlySegmentLinkedList <T> rows = null;

        executor.ExecuteReader(request, dataReader => rows = dataReader.ReadResult(segmentLength, readRecord));
        return(rows);
    }
Example #19
0
        public static void Execute(this IDbCommandExecutor executor, CreateCommandRequest request, Action <IDbCommand> execute)
        {
            var requests = new[]
            {
                new ExecuteCommandRequest(request, execute)
            };

            executor.Execute(requests);
        }
 public static object GetResultSync(this IDbCommandExecutor executor, DbCommandWrapper command)
 {
     executor.Execute(command).Wait();
     if (command.Ok)
     {
         return(command.Result);
     }
     throw command.Error;
 }
    public static void ExecuteReader(this IDbCommandExecutor executor, ExecuteReaderRequest request, Action <IDataReader> readResults)
    {
        Assert.IsNotNull(executor);
        Assert.IsNotNull(request);

        executor.Execute(request.CreateCommandRequest, command =>
        {
            using (var dataReader = command.ExecuteReader(request.CommandBehavior))
                readResults(dataReader);
        });
    }
Example #22
0
 private static void Execute(this IDbCommandExecutor executor, IEnumerable <ExecuteCommandRequest> requests)
 {
     executor.Execute(connection =>
     {
         foreach (var request in requests)
         {
             using (var command = connection.CreateCommand(request.CreateCommandRequest))
                 request.Execute(command);
         }
     });
 }
    private static void Execute(this IDbCommandExecutor executor, IEnumerable <ExecuteCommandRequest> requests)
    {
        ArgumentNullException.ThrowIfNull(executor);

        executor.Execute(connection =>
        {
            foreach (var request in requests)
            {
                using (var command = connection.CreateCommand(request.CreateCommandRequest))
                    request.Execute(command);
            }
        });
    }
        public SequenceIdentityGenerator(
            [NotNull] IDbCommandExecutor commandExecutor, int increment, SchemaQualifiedName sequenceName)
        {
            Check.NotNull(commandExecutor, "commandExecutor");

            _commandExecutor = commandExecutor;
            _increment       = increment;
            _sequenceName    = sequenceName;

            _selectNextValueSql
                = string.Format(
                      CultureInfo.InvariantCulture,
                      "SELECT NEXT VALUE FOR {0}",
                      new SqlServerMigrationOperationSqlGenerator(new SqlServerTypeMapper()).DelimitIdentifier(_sequenceName));
        }
        public void Update(IScheduledMigrationMetadata metadata, IDbConnection connection, IDbTransaction transaction, IDbCommandExecutor commandExecutor)
        {
            Debug.Assert(!(metadata is BootstrapMetadata));

            if (metadata.Direction == MigrationDirection.Up)
            {
                _history.Insert(metadata.Timestamp, metadata.ModuleName, metadata.Tag);
            }
            else
            {
                Debug.Assert(metadata.Direction == MigrationDirection.Down);
                _history.Delete(metadata.Timestamp, metadata.ModuleName);
            }

            StoreChanges(connection, transaction, commandExecutor);
        }
Example #26
0
        public void Store(IDbConnection connection, IDbTransaction transaction, IDbCommandExecutor executor)
        {
            Debug.Assert(connection.State == ConnectionState.Open);

            DateTime start = DateTime.Now;

            foreach (IMigrationMetadata entry in _entriesToDelete)
            {
                IDbCommand command = connection.CreateCommand();
                command.Transaction = transaction;
                string         moduleName          = entry.ModuleName;
                IDataParameter moduleNameParameter = command.AddParameter("@ModuleName", DbType.String, moduleName);
                long           timestamp           = entry.Timestamp;
                command.CommandText = string.Format(CultureInfo.InvariantCulture, "DELETE FROM \"{0}\" WHERE \"{1}\" = {2} AND \"{3}\" = {4}",
                                                    _tableName,
                                                    BootstrapMigration.TimestampColumnName,
                                                    timestamp.ToString(CultureInfo.InvariantCulture),
                                                    BootstrapMigration.ModuleColumnName,
                                                    _providerMetadata.GetParameterSpecifier(moduleNameParameter));
                // note: we do not provide the timestamp as a parameter as the OracleOdbcProvider has an issue with it
                executor.ExecuteNonQuery(command);
                Predicate <IMigrationMetadata> match = m => m.Timestamp == timestamp && m.ModuleName == moduleName;
                Debug.Assert(_actualEntries.FindAll(match).Count == 1, "There should be one existing entry if it is deleted.");
                _actualEntries.RemoveAll(match);
            }
            _entriesToDelete.Clear();
            foreach (IMigrationMetadata entry in _entriesToInsert)
            {
                IDbCommand command = connection.CreateCommand();
                command.Transaction = transaction;
                IDataParameter moduleNameParameter = command.AddParameter("@ModuleName", DbType.String, entry.ModuleName);
                IDataParameter tagParameter        = command.AddParameter("@Tag", DbType.String, !string.IsNullOrEmpty(entry.Tag) ? (object)entry.Tag : DBNull.Value);
                command.CommandText = string.Format(CultureInfo.InvariantCulture, @"INSERT INTO ""{0}"" (""{1}"", ""{2}"", ""{3}"") VALUES ({4}, {5}, {6})",
                                                    _tableName,
                                                    BootstrapMigration.TimestampColumnName,
                                                    BootstrapMigration.ModuleColumnName,
                                                    BootstrapMigration.TagColumnName,
                                                    entry.Timestamp.ToString(CultureInfo.InvariantCulture),
                                                    _providerMetadata.GetParameterSpecifier(moduleNameParameter),
                                                    _providerMetadata.GetParameterSpecifier(tagParameter));
                // note: we do not provide the timestamp as a parameter as the OracleOdbcProvider has an issue with it
                executor.ExecuteNonQuery(command);
                _actualEntries.Add(entry);
            }
            _entriesToInsert.Clear();
            Log.Verbose(LogCategory.Performance, "Version update took {0}s", (DateTime.Now - start).TotalSeconds);
        }
Example #27
0
        public void Store(IDbConnection connection, IDbTransaction transaction, IDbCommandExecutor executor)
        {
            Debug.Assert(connection.State == ConnectionState.Open);

            DateTime start = DateTime.Now;
            foreach (IMigrationMetadata entry in _entriesToDelete)
            {
                IDbCommand command = connection.CreateCommand();
                command.Transaction = transaction;
                string moduleName = entry.ModuleName;
                IDataParameter moduleNameParameter = command.AddParameter("@ModuleName", DbType.String, moduleName);
                long timestamp = entry.Timestamp;
                command.CommandText = string.Format(CultureInfo.InvariantCulture, "DELETE FROM {0} WHERE  {1}  = {2} AND  {3}  = {4}",
                    _tableName,
                    BootstrapMigration.TimestampColumnName,
                    timestamp.ToString(CultureInfo.InvariantCulture),
                    BootstrapMigration.ModuleColumnName,
                    _providerMetadata.GetParameterSpecifier(moduleNameParameter));
                // note: we do not provide the timestamp as a parameter as the OracleOdbcProvider has an issue with it
                executor.ExecuteNonQuery(command);
                Predicate<IMigrationMetadata> match = m => m.Timestamp == timestamp && m.ModuleName == moduleName;
                Debug.Assert(_actualEntries.FindAll(match).Count == 1, "There should be one existing entry if it is deleted.");
                _actualEntries.RemoveAll(match);
            }
            _entriesToDelete.Clear();
            foreach (IMigrationMetadata entry in _entriesToInsert)
            {
                IDbCommand command = connection.CreateCommand();
                command.Transaction = transaction;
                IDataParameter moduleNameParameter = command.AddParameter("@ModuleName", DbType.String, entry.ModuleName);
                IDataParameter tagParameter = command.AddParameter("@Tag", DbType.String, !string.IsNullOrEmpty(entry.Tag) ? (object)entry.Tag : DBNull.Value);
                command.CommandText = string.Format(CultureInfo.InvariantCulture, @"INSERT INTO {0} ({1}, {2}, {3}) VALUES ({4}, {5}, {6})",
                    _tableName,
                    BootstrapMigration.TimestampColumnName,
                    BootstrapMigration.ModuleColumnName,
                    BootstrapMigration.TagColumnName,
                    entry.Timestamp.ToString(CultureInfo.InvariantCulture),
                    _providerMetadata.GetParameterSpecifier(moduleNameParameter),
                    _providerMetadata.GetParameterSpecifier(tagParameter));
                // note: we do not provide the timestamp as a parameter as the OracleOdbcProvider has an issue with it
                executor.ExecuteNonQuery(command);
                _actualEntries.Add(entry);
            }
            _entriesToInsert.Clear();
            Log.Verbose(LogCategory.Performance, "Version update took {0}s", (DateTime.Now - start).TotalSeconds);
        }
        public void Update(IMigrationMetadata metadata, IDbConnection connection, IDbTransaction transaction, MigrationDirection direction, IDbCommandExecutor commandExecutor)
        {
            Debug.Assert(!(metadata is BootstrapMetadata));

            if (direction == MigrationDirection.Up)
            {
                _history.Insert(metadata.Timestamp, metadata.ModuleName, metadata.Tag);
            }
            else
            {
                Debug.Assert(direction == MigrationDirection.Down);
                Debug.Assert(_history.Contains(metadata.Timestamp, metadata.ModuleName), "Only migrations that were applied previously are being undone.");
                _history.Delete(metadata.Timestamp, metadata.ModuleName);
            }

            StoreChanges(connection, transaction, commandExecutor);
        }
Example #29
0
        public void Update(IMigrationStepMetadata metadata, IDbConnection connection, IDbTransaction transaction, IDbCommandExecutor commandExecutor)
        {
            foreach (IMigrationMetadata migrationMetadata in metadata.Migrations)
            {
                Debug.Assert(migrationMetadata.ModuleName == metadata.ModuleName, "The migration module name must correspond to the module name of the scheduled migration step.");
                if (metadata.Direction == MigrationDirection.Up)
                {
                    _history.Insert(migrationMetadata.Timestamp, metadata.ModuleName, migrationMetadata.Tag);
                }
                else
                {
                    Debug.Assert(metadata.Direction == MigrationDirection.Down);
                    _history.Delete(migrationMetadata.Timestamp, metadata.ModuleName);
                }
            }

            StoreChanges(connection, transaction, commandExecutor);
        }
Example #30
0
        public void Store(IDbConnection connection, IDbTransaction transaction, IDbCommandExecutor executor)
        {
            Debug.Assert(connection.State == ConnectionState.Open);

            DateTime start = DateTime.Now;
            foreach (HistoryEntryId entryId in _entriesToDelete)
            {
                IDbCommand command = connection.CreateCommand();
                command.Transaction = transaction;
                IDataParameter moduleNameParameter = command.AddParameter("@ModuleName", DbType.String, entryId.ModuleName);
                command.CommandText = string.Format(CultureInfo.InvariantCulture, "DELETE FROM \"{0}\" WHERE \"{1}\" = {2} AND \"{3}\" = {4}",
                    _tableName,
                    BootstrapMigration.TimestampColumnName,
                    entryId.Timestamp.ToString(CultureInfo.InvariantCulture),
                    BootstrapMigration.ModuleColumnName,
                    _providerMetadata.GetParameterSpecifier(moduleNameParameter));
                // note: we do not provide the timestamp as a parameter as the OracleOdbcProvider has an issue with it
                executor.ExecuteNonQuery(command);
                RemoveFromActualEntries(entryId);
            }
            _entriesToDelete.Clear();
            foreach (HistoryEntry entry in _entriesToInsert)
            {
                IDbCommand command = connection.CreateCommand();
                command.Transaction = transaction;
                IDataParameter moduleNameParameter = command.AddParameter("@ModuleName", DbType.String, entry.ModuleName);
                IDataParameter tagParameter = command.AddParameter("@Tag", DbType.String, !string.IsNullOrEmpty(entry.Tag) ? (object)entry.Tag : DBNull.Value);
                command.CommandText = string.Format(CultureInfo.InvariantCulture, @"INSERT INTO ""{0}"" (""{1}"", ""{2}"", ""{3}"") VALUES ({4}, {5}, {6})",
                    _tableName,
                    BootstrapMigration.TimestampColumnName,
                    BootstrapMigration.ModuleColumnName,
                    BootstrapMigration.TagColumnName,
                    entry.Timestamp.ToString(CultureInfo.InvariantCulture),
                    _providerMetadata.GetParameterSpecifier(moduleNameParameter),
                    _providerMetadata.GetParameterSpecifier(tagParameter));
                // note: we do not provide the timestamp as a parameter as the OracleOdbcProvider has an issue with it
                executor.ExecuteNonQuery(command);
                AddToActualEntries(entry);
            }
            _entriesToInsert.Clear();
            Log.Verbose(LogCategory.Performance, "Version update took {0}s", (DateTime.Now - start).TotalSeconds);
        }
        internal void Execute(IDbConnection connection, IDbTransaction transaction, MigrationDirection direction, IDbCommandExecutor commandExecutor)
        {
            Debug.Assert(connection.State == ConnectionState.Open);

            var context = new RuntimeContext(connection, transaction, commandExecutor, _providerMetadata);
            Database database = GetDatabaseContainingMigrationChanges(direction, context);
            var translator = new CommandsToSqlTranslator(_provider);
            foreach (string commandText in translator.TranslateToSql(database, context))
            {
                IDbCommand command = connection.CreateCommand();
                command.CommandTimeout = 0; // do not timeout; the client is responsible for not causing lock-outs
                command.Transaction = transaction;
                command.CommandText = commandText;
                try
                {
                    commandExecutor.ExecuteNonQuery(command);
                }
                catch (DbException x)
                {
                    Log.Error("An error occurred: {0}{1}while trying to execute:{1}{2}{1}{3}", x.Message, Environment.NewLine, command.CommandText,_migration.GetType().ToString());
                    throw new Exception(String.Format("An error occurred: {0}{1}while trying to execute:{1}{2}{1}Migration: {3}", x.Message, Environment.NewLine, command.CommandText, _migration.GetType()));
                }
            }
        }
Example #32
0
 public void Update(IMigrationStepMetadata metadata, IDbConnection connection, IDbTransaction transaction, IDbCommandExecutor commandExecutor)
 {
     PersistedVersioning versioning = GetPersistedVersioning(connection, transaction, commandExecutor);
     versioning.Update(metadata, connection, transaction, commandExecutor);
 }
Example #33
0
        private PersistedVersioning GetPersistedVersioning(IDbConnection connection, IDbTransaction transaction, IDbCommandExecutor executor)
        {
            if (_persistedVersioning == null)
            {
                var history = new History(_versioningTableName, _providerMetadata);
                if (!_versioningTableExists.Value)
                {
                    Debug.Assert(connection != null, "At this point, an upgrade of the versioning table is requested. This always takes part of a running migration step and therefore already has an associated connection (and possibly a transaction).");

                    // execute the boostrap migration to create the versioning table
                    var step = new BootstrapMigrationStep(new BootstrapMigration(_versioningTableName), _provider, _providerMetadata);
                    step.Execute(connection, transaction, MigrationDirection.Up, executor);
                    _versioningTableExists = new Lazy <bool>(() => true); // now, the versioning table exists
                }
                else
                {
                    // load the existing entries from the versioning table
                    IDbConnection c = connection ?? _connectionFactory.OpenConnection(_connectionInfo);
                    try
                    {
                        history.Load(c, transaction);
                    }
                    finally
                    {
                        if (connection == null) // we had to open a connection ourselves
                        {
                            c.Dispose();
                        }
                    }
                }
                _persistedVersioning = new PersistedVersioning(history);
            }
            Debug.Assert(_persistedVersioning != null);
            return(_persistedVersioning);
        }
Example #34
0
        private PersistedVersioning GetPersistedVersioning(IDbConnection connection, IDbTransaction transaction, IDbCommandExecutor executor)
        {
            if (_persistedVersioning == null)
            {
                var history = new History(_versioningTableName, _configuration.ProviderInfo.Metadata);
                if (!_versioningTableExists.Value)
                {
                    Debug.Assert(connection != null, "At this point, an upgrade of the versioning table is requested. This always takes part of a running migration step and therefore already has an associated connection (and possibly a transaction).");

                    // execute the boostrap migration to create the versioning table
                    var step = new BootstrapMigrationStep(new BootstrapMigration(_versioningTableName), null);
                    step.Execute(_configuration.ProviderInfo, connection, transaction, MigrationDirection.Up, executor);
                    _versioningTableExists = new Lazy<bool>(() => true); // now, the versioning table exists
                }
                else
                {
                    // load the existing entries from the versioning table
                    IDbConnection c = connection ?? _configuration.OpenConnection();
                    try
                    {
                        history.Load(c, transaction);
                    }
                    finally
                    {
                        if (connection == null) // we had to open a connection ourselves
                        {
                            c.Dispose();
                        }
                    }
                }
                _persistedVersioning = new PersistedVersioning(history);
            }
            Debug.Assert(_persistedVersioning != null);
            return _persistedVersioning;
        }
 private void StoreChanges(IDbConnection connection, IDbTransaction transaction, IDbCommandExecutor executor)
 {
     _history.Store(connection, transaction, executor);
 }
Example #36
0
 public ObjectCountExecutor(ISqlGenerator sqlGenerator, IConventionReader conventionReader, IDbCommandExecutor dbCommandExecutor)
 {
     _sqlGenerator      = sqlGenerator;
     _conventionReader  = conventionReader;
     _dbCommandExecutor = dbCommandExecutor;
 }
Example #37
0
 public void Update(IScheduledMigrationMetadata metadata, IDbConnection connection, IDbTransaction transaction,
                    IDbCommandExecutor commandExecutor)
 {
     // nothing to do
 }