@@ -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