Exemple #1
0
        private async Task MigrateAsync(
            MyCatDatabaseHost node,
            string targetMigration = null,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            var connection = _connection.CreateNodeConnection(node);

            _logger.LogDebug(RelationalStrings.UsingConnection(connection.DbConnection.Database, connection.DbConnection.DataSource));

            if (!await _historyRepository.ExistsAsync(connection, cancellationToken))
            {
                if (!await _databaseCreator.ExistsAsync(connection, cancellationToken))
                {
                    await _databaseCreator.CreateAsync(node, cancellationToken);
                }

                var command = _rawSqlCommandBuilder.Build(_historyRepository.GetCreateScript());

                await command.ExecuteNonQueryAsync(connection, cancellationToken : cancellationToken);
            }

            var commandLists = GetMigrationCommandLists(
                await _historyRepository.GetAppliedMigrationsAsync(connection, cancellationToken),
                targetMigration);

            foreach (var commandList in commandLists)
            {
                await _migrationCommandExecutor.ExecuteNonQueryAsync(commandList(), connection, cancellationToken);
            }
        }
Exemple #2
0
        private void Migrate(MyCatDatabaseHost node, string targetMigration = null)
        {
            var connection = _connection.CreateNodeConnection(node);

            _logger.LogDebug(RelationalStrings.UsingConnection(connection.DbConnection.Database, connection.DbConnection.DataSource));

            if (!_historyRepository.Exists(connection))
            {
                if (!_databaseCreator.Exists(connection))
                {
                    _databaseCreator.Create(node);
                }

                var command = _rawSqlCommandBuilder.Build(_historyRepository.GetCreateScript());

                command.ExecuteNonQuery(connection);
            }

            var commandLists = GetMigrationCommandLists(_historyRepository.GetAppliedMigrations(connection), targetMigration);

            foreach (var commandList in commandLists)
            {
                _migrationCommandExecutor.ExecuteNonQuery(commandList(), connection);
            }
            connection.Close();
            connection.Dispose();
        }
Exemple #3
0
        public void Delete(MyCatDatabaseHost node)
        {
            ClearAllPools();

            using (var masterConnection = _connection.CreateMasterConnection(node))
            {
                MigrationCommandExecutor
                .ExecuteNonQuery(CreateDropCommands(), masterConnection);
            }
        }
Exemple #4
0
        public async Task DeleteAsync(MyCatDatabaseHost node, CancellationToken cancellationToken = default(CancellationToken))
        {
            ClearAllPools();

            using (var masterConnection = _connection.CreateMasterConnection(node))
            {
                await MigrationCommandExecutor
                .ExecuteNonQueryAsync(CreateDropCommands(), masterConnection, cancellationToken);
            }
        }
Exemple #5
0
        public async Task CreateAsync(MyCatDatabaseHost node, CancellationToken cancellationToken = default(CancellationToken))
        {
            using (var masterConnection = _connection.CreateMasterConnection(node))
            {
                await MigrationCommandExecutor
                .ExecuteNonQueryAsync(CreateCreateOperations(node), masterConnection, cancellationToken);

                ClearPool();
            }

            await ExistsAsync(_connection.CreateNodeConnection(node), retryOnNotExists : true, cancellationToken : cancellationToken);
        }
Exemple #6
0
        public void Create(MyCatDatabaseHost node)
        {
            using (var masterConnection = _connection.CreateMasterConnection(node))
            {
                var cmd = CreateCreateOperations(node);
                MigrationCommandExecutor
                .ExecuteNonQuery(cmd, masterConnection);

                ClearPool();
            }

            Exists(_connection.CreateNodeConnection(node), retryOnNotExists: false);
        }
Exemple #7
0
        public MyCatRelationalConnection CreateMasterConnection(MyCatDatabaseHost node)
        {
            var csb = new MyCatConnectionStringBuilder(ConnectionString)
            {
                Database = "mysql",
                UserID   = node.Username,
                Server   = node.Host,
                Port     = node.Port,
                Password = node.Password,
                Pooling  = false
            };
            var optionsBuilder = new DbContextOptionsBuilder();

            optionsBuilder.UseMyCat(csb.GetConnectionString(true));
            return(new MyCatRelationalConnection(optionsBuilder.Options, Logger));
        }
Exemple #8
0
 public async Task CreateTablesAsync(MyCatDatabaseHost node, CancellationToken cancellationToken = default(CancellationToken))
 {
     await MigrationCommandExecutor.ExecuteNonQueryAsync(GetCreateTablesCommands(), _connection.CreateNodeConnection(node), cancellationToken);
 }
Exemple #9
0
 public void CreateTables(MyCatDatabaseHost node)
 {
     MigrationCommandExecutor.ExecuteNonQuery(GetCreateTablesCommands(), _connection.CreateNodeConnection(node));
 }
Exemple #10
0
 public Task <bool> ExistsAsync(MyCatDatabaseHost node, CancellationToken cancellationToken = default(CancellationToken))
 {
     return(ExistsAsync(_connection.CreateNodeConnection(node), cancellationToken));
 }
Exemple #11
0
 public bool Exists(MyCatDatabaseHost node)
 {
     return(Exists(_connection.CreateNodeConnection(node), false));
 }
Exemple #12
0
 public IReadOnlyList <MigrationCommand> CreateCreateOperations(MyCatDatabaseHost node)
 => _migrationsSqlGenerator.Generate(new[] { new MyCatCreateDatabaseOperation {
                                                 Name = node.Database
                                             } });