Skip to content

Commit fbd2161

Browse files
updated the drop table function
1 parent 40ff52f commit fbd2161

1 file changed

Lines changed: 20 additions & 7 deletions

File tree

tests/testthat/setup.R

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -109,20 +109,33 @@ dropAllTablesFromSchema <- function(connectionDetails, schema) {
109109
stopifnot(connectionDetails$dbms %in% c("postgresql", "redshift", "sql server", "oracle"))
110110
tableNames <- listTablesInSchema(connectionDetails, schema)
111111

112+
if (length(tableNames) == 0) {
113+
return(invisible(NULL)) # No tables to drop
114+
}
115+
112116
con <- DatabaseConnector::connect(connectionDetails)
113117
on.exit(DatabaseConnector::disconnect(con))
114118
dbms <- connectionDetails$dbms
115-
if (dbms %in% c("redshift", "postgresql", "sql server")) {
119+
120+
# For all databases, use DROP TABLE IF EXISTS ... CASCADE
121+
# but quote schema and table names properly
122+
if (dbms %in% c("postgresql", "redshift")) {
123+
# PostgreSQL/Redshift: quote identifiers
124+
for (tableName in tableNames) {
125+
sql <- paste0('DROP TABLE IF EXISTS "', schema, '"."', tableName, '" CASCADE')
126+
DBI::dbExecute(con, sql)
127+
}
128+
} else if (dbms == "sql server") {
129+
# SQL Server: use brackets for identifiers
116130
for (tableName in tableNames) {
117-
DBI::dbExecute(con, paste(
118-
"DROP TABLE IF EXISTS",
119-
paste(schema, tableName, sep = "."),
120-
"CASCADE"
121-
))
131+
sql <- paste0('DROP TABLE IF EXISTS [', schema, '].[', tableName, ']')
132+
DBI::dbExecute(con, sql)
122133
}
123134
} else if (dbms == "oracle") {
135+
# Oracle: drop each table individually
124136
for (tableName in tableNames) {
125-
DBI::dbExecute(con, paste("DROP TABLE IF EXISTS", tableName, "CASCADE"))
137+
sql <- paste0('DROP TABLE "', tableName, '" CASCADE CONSTRAINTS')
138+
DBI::dbExecute(con, sql)
126139
}
127140
}
128141
}

0 commit comments

Comments
 (0)