Skip to content

Commit b530c2f

Browse files
committed
add ForceDrop option
1 parent 5f4f6a8 commit b530c2f

File tree

4 files changed

+10
-3
lines changed

4 files changed

+10
-3
lines changed

internal/services/database/base.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,14 @@ var attrDescriptions = map[string]string{
1414
"id": "Database ID. Can be retrieved using `SELECT DB_ID('<db_name>')`.",
1515
"name": fmt.Sprintf("Database name. %s.", common.RegularIdentifiersDoc),
1616
"collation": "Default collation name. Can be either a Windows collation name or a SQL collation name.",
17+
"force_drop": "Whether to drop all connections to the database before dropping it.",
1718
}
1819

1920
type resourceData struct {
2021
Id types.String `tfsdk:"id"`
2122
Name types.String `tfsdk:"name"`
2223
Collation types.String `tfsdk:"collation"`
24+
ForceDrop types.Bool `tfsdk:"force_drop"`
2325
}
2426

2527
func (d resourceData) getDbId(ctx context.Context) sql.DatabaseId {
@@ -40,6 +42,7 @@ func (d resourceData) toSettings() sql.DatabaseSettings {
4042
return sql.DatabaseSettings{
4143
Name: d.Name.ValueString(),
4244
Collation: d.Collation.ValueString(),
45+
ForceDrop: d.ForceDrop.ValueBool(),
4346
}
4447
}
4548

internal/services/database/data_acctest.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import (
1111
func testDataSource(testCtx *acctest.TestContext) {
1212
const resourceName = "data.mssql_database.test"
1313
var dbId string
14-
dbSettings := sql.DatabaseSettings{Name: "data_test_db", Collation: "SQL_Latin1_General_CP1_CS_AS"}
14+
dbSettings := sql.DatabaseSettings{Name: "data_test_db", Collation: "SQL_Latin1_General_CP1_CS_AS", ForceDrop: false}
1515

1616
newDataResource := func(name string) string {
1717
return fmt.Sprintf(`

internal/sql/database.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ const NullDatabaseId = DatabaseId(-1)
1313
type DatabaseSettings struct {
1414
Name string
1515
Collation string
16+
ForceDrop bool
1617
}
1718

1819
type DatabasePermission struct {
@@ -141,6 +142,9 @@ func (db *database) SetCollation(ctx context.Context, collation string) {
141142

142143
func (db *database) Drop(ctx context.Context) {
143144
settings := db.GetSettings(ctx)
145+
if settings.ForceDrop {
146+
db.conn.exec(ctx, fmt.Sprintf("ALTER DATABASE [%s] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;", settings.Name))
147+
}
144148
db.conn.exec(ctx, fmt.Sprintf("DROP DATABASE [%s]", settings.Name))
145149
}
146150

internal/sql/database_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ func (s *DatabaseTestSuite) TestCreteDatabaseNoCollation() {
9999
}
100100

101101
func (s *DatabaseTestSuite) TestCreteDatabaseWithCollation() {
102-
settings := DatabaseSettings{Name: "new_test_db", Collation: "new_test_db_collation"}
102+
settings := DatabaseSettings{Name: "new_test_db", Collation: "new_test_db_collation", ForceDrop: false}
103103
dbId := DatabaseId(1223464)
104104
expectExactExec(s.mock, "CREATE DATABASE [%s] COLLATE %s", settings.Name, settings.Collation).
105105
WillReturnResult(sqlmock.NewResult(0, 1))
@@ -111,7 +111,7 @@ func (s *DatabaseTestSuite) TestCreteDatabaseWithCollation() {
111111
}
112112

113113
func (s *DatabaseTestSuite) TestGetSettings() {
114-
expSettings := DatabaseSettings{Name: "test_db_name", Collation: "test_collation"}
114+
expSettings := DatabaseSettings{Name: "test_db_name", Collation: "test_collation", ForceDrop: false}
115115
s.expectDatabaseSettingQuery().
116116
WithArgs(s.db.id).
117117
WillReturnRows(newRows("name", "collation_name").AddRow(expSettings.Name, expSettings.Collation))

0 commit comments

Comments
 (0)