diff options
| -rw-r--r-- | phpBB/includes/db/db_tools.php | 17 | ||||
| -rw-r--r-- | tests/dbal/db_tools_test.php | 60 | 
2 files changed, 77 insertions, 0 deletions
| diff --git a/phpBB/includes/db/db_tools.php b/phpBB/includes/db/db_tools.php index d23323a5b1..2cb0fcef68 100644 --- a/phpBB/includes/db/db_tools.php +++ b/phpBB/includes/db/db_tools.php @@ -649,6 +649,23 @@ class phpbb_db_tools  			$sqlite = true;  		} +		// Drop tables? +		if (!empty($schema_changes['drop_tables'])) +		{ +			foreach ($schema_changes['drop_tables'] as $table) +			{ +				// only drop table if it exists +				if ($this->sql_table_exists($table)) +				{ +					$result = $this->sql_table_drop($table); +					if ($this->return_statements) +					{ +						$statements = array_merge($statements, $result); +					} +				} +			} +		} +  		// Add tables?  		if (!empty($schema_changes['add_tables']))  		{ diff --git a/tests/dbal/db_tools_test.php b/tests/dbal/db_tools_test.php index ddea500f83..753cc08fc5 100644 --- a/tests/dbal/db_tools_test.php +++ b/tests/dbal/db_tools_test.php @@ -271,6 +271,66 @@ class phpbb_dbal_db_tools_test extends phpbb_database_test_case  				'foo' => array('UINT', 42)))  		); +		$this->assertTrue($this->tools->sql_table_exists('prefix_test_table')); +  		$this->tools->sql_table_drop('prefix_test_table'); + +		$this->assertFalse($this->tools->sql_table_exists('prefix_test_table')); +	} + +	public function test_peform_schema_changes_drop_tables() +	{ +		$db_tools = $this->getMock('phpbb_db_tools', array( +			'sql_table_exists', +			'sql_table_drop', +		), array(&$this->db)); + +		// pretend all tables exist +		$db_tools->expects($this->any())->method('sql_table_exists') +			->will($this->returnValue(true)); + +		// drop tables +		$db_tools->expects($this->exactly(2))->method('sql_table_drop'); +		$db_tools->expects($this->at(1))->method('sql_table_drop') +			->with($this->equalTo('dropped_table_1')); +		$db_tools->expects($this->at(3))->method('sql_table_drop') +			->with($this->equalTo('dropped_table_2')); + +		$db_tools->perform_schema_changes(array( +			'drop_tables' => array( +				'dropped_table_1', +				'dropped_table_2', +			), +		)); +	} + +	public function test_peform_schema_changes_drop_columns() +	{ +		$db_tools = $this->getMock('phpbb_db_tools', array( +			'sql_column_exists', +			'sql_column_remove', +		), array(&$this->db)); + +		// pretend all columns exist +		$db_tools->expects($this->any())->method('sql_column_exists') +			->will($this->returnValue(true)); +		$db_tools->expects($this->any())->method('sql_column_exists') +			->will($this->returnValue(true)); + +		// drop columns +		$db_tools->expects($this->exactly(2))->method('sql_column_remove'); +		$db_tools->expects($this->at(1))->method('sql_column_remove') +			->with($this->equalTo('existing_table'), $this->equalTo('dropped_column_1')); +		$db_tools->expects($this->at(3))->method('sql_column_remove') +			->with($this->equalTo('existing_table'), $this->equalTo('dropped_column_2')); + +		$db_tools->perform_schema_changes(array( +			'drop_columns' => array( +				'existing_table' => array( +					'dropped_column_1', +					'dropped_column_2', +				), +			), +		));  	}  } | 
