diff --git a/lib/ddl/mssql_sql_generator.php b/lib/ddl/mssql_sql_generator.php index aa684b6a438..5593d71ea78 100644 --- a/lib/ddl/mssql_sql_generator.php +++ b/lib/ddl/mssql_sql_generator.php @@ -136,13 +136,29 @@ class mssql_sql_generator extends sql_generator { } /** - * Given one correct xmldb_table and the new name, returns the SQL statements + * Given one correct xmldb_table, returns the SQL statements + * to drop it (inside one array). + * + * @param xmldb_table $xmldb_table The table to drop. + * @return array SQL statement(s) for dropping the specified table. + */ + public function getDropTableSQL($xmldb_table) { + $sqlarr = parent::getDropTableSQL($xmldb_table); + if ($this->temptables->is_temptable($xmldb_table->getName())) { + $this->temptables->delete_temptable($xmldb_table->getName()); + } + return $sqlarr; + } + + /** + * Given one correct xmldb_table, returns the SQL statements * to drop it (inside one array) + * + * @param xmldb_table $xmldb_table The table to drop. + * @return array SQL statement(s) for dropping the specified table. */ public function getDropTempTableSQL($xmldb_table) { - $sqlarr = $this->getDropTableSQL($xmldb_table); - $this->temptables->delete_temptable($xmldb_table->getName()); - return $sqlarr; + return $this->getDropTableSQL($xmldb_table); } /** diff --git a/lib/ddl/mysql_sql_generator.php b/lib/ddl/mysql_sql_generator.php index ec1c204a0dc..9f27186e534 100644 --- a/lib/ddl/mysql_sql_generator.php +++ b/lib/ddl/mysql_sql_generator.php @@ -134,14 +134,30 @@ class mysql_sql_generator extends sql_generator { } /** - * Given one correct xmldb_table and the new name, returns the SQL statements + * Given one correct xmldb_table, returns the SQL statements + * to drop it (inside one array). + * + * @param xmldb_table $xmldb_table The table to drop. + * @return array SQL statement(s) for dropping the specified table. + */ + public function getDropTableSQL($xmldb_table) { + $sqlarr = parent::getDropTableSQL($xmldb_table); + if ($this->temptables->is_temptable($xmldb_table->getName())) { + $sqlarr = preg_replace('/^DROP TABLE/', "DROP TEMPORARY TABLE", $sqlarr); + $this->temptables->delete_temptable($xmldb_table->getName()); + } + return $sqlarr; + } + + /** + * Given one correct xmldb_table, returns the SQL statements * to drop it (inside one array) + * + * @param xmldb_table $xmldb_table The table to drop. + * @return array SQL statement(s) for dropping the specified table. */ public function getDropTempTableSQL($xmldb_table) { - $sqlarr = $this->getDropTableSQL($xmldb_table); - $sqlarr = preg_replace('/^DROP TABLE/', "DROP TEMPORARY TABLE", $sqlarr); - $this->temptables->delete_temptable($xmldb_table->getName()); - return $sqlarr; + return $this->getDropTableSQL($xmldb_table); } /** diff --git a/lib/ddl/oracle_sql_generator.php b/lib/ddl/oracle_sql_generator.php index a2cf1adc4ee..2d622a2fabd 100644 --- a/lib/ddl/oracle_sql_generator.php +++ b/lib/ddl/oracle_sql_generator.php @@ -122,14 +122,30 @@ class oracle_sql_generator extends sql_generator { } /** - * Given one correct xmldb_table and the new name, returns the SQL statements + * Given one correct xmldb_table, returns the SQL statements + * to drop it (inside one array). + * + * @param xmldb_table $xmldb_table The table to drop. + * @return array SQL statement(s) for dropping the specified table. + */ + public function getDropTableSQL($xmldb_table) { + $sqlarr = parent::getDropTableSQL($xmldb_table); + if ($this->temptables->is_temptable($xmldb_table->getName())) { + array_unshift($sqlarr, "TRUNCATE TABLE ". $this->getTableName($xmldb_table)); // oracle requires truncate before being able to drop a temp table + $this->temptables->delete_temptable($xmldb_table->getName()); + } + return $sqlarr; + } + + /** + * Given one correct xmldb_table, returns the SQL statements * to drop it (inside one array) + * + * @param xmldb_table $xmldb_table The table to drop. + * @return array SQL statement(s) for dropping the specified table. */ public function getDropTempTableSQL($xmldb_table) { - $sqlarr = $this->getDropTableSQL($xmldb_table); - array_unshift($sqlarr, "TRUNCATE TABLE ". $this->getTableName($xmldb_table)); // oracle requires truncate before being able to drop a temp table - $this->temptables->delete_temptable($xmldb_table->getName()); - return $sqlarr; + return $this->getDropTableSQL($xmldb_table); } /** diff --git a/lib/ddl/postgres_sql_generator.php b/lib/ddl/postgres_sql_generator.php index cf57825b77b..de22c537966 100644 --- a/lib/ddl/postgres_sql_generator.php +++ b/lib/ddl/postgres_sql_generator.php @@ -86,13 +86,29 @@ class postgres_sql_generator extends sql_generator { } /** - * Given one correct xmldb_table and the new name, returns the SQL statements + * Given one correct xmldb_table, returns the SQL statements + * to drop it (inside one array). + * + * @param xmldb_table $xmldb_table The table to drop. + * @return array SQL statement(s) for dropping the specified table. + */ + public function getDropTableSQL($xmldb_table) { + $sqlarr = parent::getDropTableSQL($xmldb_table); + if ($this->temptables->is_temptable($xmldb_table->getName())) { + $this->temptables->delete_temptable($xmldb_table->getName()); + } + return $sqlarr; + } + + /** + * Given one correct xmldb_table, returns the SQL statements * to drop it (inside one array) + * + * @param xmldb_table $xmldb_table The table to drop. + * @return array SQL statement(s) for dropping the specified table. */ public function getDropTempTableSQL($xmldb_table) { - $sqlarr = $this->getDropTableSQL($xmldb_table); - $this->temptables->delete_temptable($xmldb_table->getName()); - return $sqlarr; + return $this->getDropTableSQL($xmldb_table); } /** diff --git a/lib/ddl/tests/ddl_test.php b/lib/ddl/tests/ddl_test.php index 41bd7293458..11ca8854d02 100644 --- a/lib/ddl/tests/ddl_test.php +++ b/lib/ddl/tests/ddl_test.php @@ -1533,6 +1533,15 @@ class ddl_testcase extends database_driver_testcase { $dbman->drop_temp_table($table0); $this->assertFalse($dbman->table_exists('test_table0')); + // Create another temp table1 + $table1 = $this->tables['test_table1']; + $dbman->create_temp_table($table1); + $this->assertTrue($dbman->table_exists('test_table1')); + + // make sure it can be dropped using normal drop_table() - since 2.3 + $dbman->drop_table($table1); + $this->assertFalse($dbman->table_exists('test_table1')); + // Have dropped all these temp tables here, to avoid conflicts with other (normal tables) tests! }