예제 #1
0
    /// <summary>
    /// Drop the database specified in the connection string.
    /// </summary>
    /// <param name="supported">Fluent helper type.</param>
    /// <param name="connectionString">The connection string.</param>
    /// <param name="logger">The <see cref="DbUp.Engine.Output.IUpgradeLog"/> used to record actions.</param>
    /// <param name="timeout">Use this to set the command time out for dropping a database in case you're encountering a time out in this operation.</param>
    /// <returns></returns>
    public static void SqlDatabase(this SupportedDatabasesForDropDatabase supported, string connectionString, IUpgradeLog logger, int timeout = -1)
    {
        string databaseName;
        string masterConnectionString;

        GetMasterConnectionStringBuilder(connectionString, logger, out masterConnectionString, out databaseName);

        using (var connection = new SqlConnection(masterConnectionString))
        {
            connection.Open();
            if (!DatabaseExists(connection, databaseName))
            {
                return;
            }

            var dropDatabaseCommand = new SqlCommand($"ALTER DATABASE [{databaseName}] SET SINGLE_USER WITH ROLLBACK IMMEDIATE; DROP DATABASE [{databaseName}];", connection)
            {
                CommandType = CommandType.Text
            };
            using (var command = dropDatabaseCommand)
            {
                command.ExecuteNonQuery();
            }

            logger.WriteInformation("Dropped database {0}", databaseName);
        }
    }
예제 #2
0
    /// <summary>
    /// Drop the database specified in the connection string.
    /// </summary>
    /// <param name="supported">Fluent helper type.</param>
    /// <param name="connectionString">The connection string.</param>
    /// <param name="logger">The <see cref="DbUp.Engine.Output.IUpgradeLog"/> used to record actions.</param>
    /// <param name="timeout">Use this to set the command time out for dropping a database in case you're encountering a time out in this operation.</param>
    /// <returns></returns>
    public static void SqlDatabase(this SupportedDatabasesForDropDatabase supported, string connectionString, IUpgradeLog logger, int timeout = -1)
    {
        string databaseName;
        string masterConnectionString;

        GetMasterConnectionStringBuilder(connectionString, logger, out masterConnectionString, out databaseName);

        using (var connection = new SqlConnection(masterConnectionString))
        {
            connection.Open();
            var databaseExistCommand = new SqlCommand($"SELECT TOP 1 case WHEN dbid IS NOT NULL THEN 1 ELSE 0 end FROM sys.sysdatabases WHERE name = '{databaseName}';", connection)
            {
                CommandType = CommandType.Text
            };
            using (var command = databaseExistCommand)
            {
                var exists = (int?)command.ExecuteScalar();
                if (!exists.HasValue)
                {
                    return;
                }
            }

            var dropDatabaseCommand = new SqlCommand($"ALTER DATABASE [{databaseName}] SET SINGLE_USER WITH ROLLBACK IMMEDIATE; DROP DATABASE [{databaseName}];", connection)
            {
                CommandType = CommandType.Text
            };
            using (var command = dropDatabaseCommand)
            {
                command.ExecuteNonQuery();
            }

            logger.WriteInformation("Dropped database {0}", databaseName);
        }
    }
예제 #3
0
    /// <summary>
    /// Drop the database specified in the connection string.
    /// </summary>
    /// <param name="supported">Fluent helper type.</param>
    /// <param name="connectionString">The connection string.</param>
    /// <param name="certificateFile">Client certificate for db.</param>
    /// <param name="logger">The <see cref="DbUp.Engine.Output.IUpgradeLog"/> used to record actions.</param>
    /// <param name="timeout">Use this to set the command time out for dropping a database in case you're encountering a time out in this operation.</param>
    /// <returns></returns>
    public static void PostgresqlDatabase(this SupportedDatabasesForDropDatabase supported, string connectionString, string certificateFile, IUpgradeLog logger, int timeout = -1)
    {
        GetMasterConnectionStringBuilder(connectionString, logger, out var masterConnectionString, out var databaseName);

        using (var connection = new NpgsqlConnection(masterConnectionString))
        {
            if (!string.IsNullOrEmpty(certificateFile) && certificateFile.Trim() != string.Empty)
            {
                connection.ProvideClientCertificatesCallback += certs => certs.Add(new X509Certificate2(certificateFile));
            }

            connection.Open();
            using (var command = new NpgsqlCommand($"SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = \'{databaseName}\'; DROP DATABASE IF EXISTS \"{databaseName}\";", connection))
            {
                command.ExecuteNonQuery();
            }

            logger.WriteInformation("Dropped database {0}", databaseName);
        }
    }
예제 #4
0
        public static void PostgresqlDatabase(this SupportedDatabasesForDropDatabase supportedDatabases, string connectionString)
        {
            NpgsqlConnectionStringBuilder builder = new NpgsqlConnectionStringBuilder(connectionString);

            string databaseName = builder.Database;

            builder.Database = "postgres";

            using (NpgsqlConnection connection = new NpgsqlConnection(builder.ToString()))
            {
                connection.Open();

                using (NpgsqlCommand command = new NpgsqlCommand($"SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = \'{databaseName}\'; DROP DATABASE IF EXISTS \"{databaseName}\"", connection))
                {
                    command.ExecuteNonQuery();
                }

                connection.Close();
                Console.WriteLine("Dropped database {0}", databaseName);
            }
        }
예제 #5
0
    /// <summary>
    /// Drop the database specified in the connection string.
    /// </summary>
    /// <param name="supported">Fluent helper type.</param>
    /// <param name="connectionString">The connection string.</param>
    /// <param name="logger">The <see cref="DbUp.Engine.Output.IUpgradeLog"/> used to record actions.</param>
    /// <param name="timeout">Use this to set the command time out for dropping a database in case you're encountering a time out in this operation.</param>
    /// <returns></returns>
    public static void SnowflakeDatabase(this SupportedDatabasesForDropDatabase supported, string connectionString, IUpgradeLog logger, int timeout = -1)
    {
        throw new NotImplementedException();

        //GetMasterConnectionStringBuilder(connectionString, logger, out var masterConnectionString, out var databaseName);

        //using (var connection = new SnowflakeDbConnection())
        //{
        //    connection.ConnectionString = masterConnectionString;
        //    connection.Open();
        //    if (!DatabaseExists(connection, databaseName))
        //        return;

        //    var dropDatabaseCommand = new SqlCommand($"ALTER DATABASE [{databaseName}] SET SINGLE_USER WITH ROLLBACK IMMEDIATE; DROP DATABASE [{databaseName}];", connection) { CommandType = CommandType.Text };
        //    using (var command = dropDatabaseCommand)
        //    {
        //        command.ExecuteNonQuery();
        //    }

        //    logger.WriteInformation("Dropped database {0}", databaseName);
        //}
    }
예제 #6
0
 /// <summary>
 /// Drop the database specified in the connection string.
 /// </summary>
 /// <param name="supported">Fluent helper type.</param>
 /// <param name="connectionString">The connection string.</param>
 /// <param name="commandTimeout">Use this to set the command time out for dropping a database in case you're encountering a time out in this operation.</param>
 /// <returns></returns>
 public static void SqlDatabase(this SupportedDatabasesForDropDatabase supported, string connectionString, int commandTimeout)
 {
     SqlDatabase(supported, connectionString, new ConsoleUpgradeLog(), commandTimeout);
 }
예제 #7
0
 /// <summary>
 /// Drop the database specified in the connection string.
 /// </summary>
 /// <param name="supported">Fluent helper type.</param>
 /// <param name="connectionString">The connection string.</param>
 /// <returns></returns>
 public static void SqlDatabase(this SupportedDatabasesForDropDatabase supported, string connectionString)
 {
     SqlDatabase(supported, connectionString, new ConsoleUpgradeLog());
 }
예제 #8
0
 /// <summary>
 /// Drop the database specified in the connection string.
 /// </summary>
 /// <param name="supported">Fluent helper type.</param>
 /// <param name="connectionString">The connection string.</param>
 /// <param name="certificateFile">Optional SSL client pfx certificate for db.</param>
 /// <returns></returns>
 public static void PostgresqlDatabase(this SupportedDatabasesForDropDatabase supported, string connectionString, string certificateFile = null)
 {
     PostgresqlDatabase(supported, connectionString, certificateFile, new ConsoleUpgradeLog());
 }