diff options
author | Andreas Fischer <bantu@phpbb.com> | 2013-03-27 18:11:49 +0100 |
---|---|---|
committer | Andreas Fischer <bantu@phpbb.com> | 2013-03-27 18:11:49 +0100 |
commit | 55fb87ff180ca47a1a39d2714889d170ec368d31 (patch) | |
tree | 5f2be1c5b610c311db66ee19000386c521dd14b9 | |
parent | 43b6ae3fee34e03ce579ca24ed4cf58f4a1f4660 (diff) | |
parent | af9f30cd52fd7b53b17b946a0c646fd72c4a6f4f (diff) | |
download | forums-55fb87ff180ca47a1a39d2714889d170ec368d31.tar forums-55fb87ff180ca47a1a39d2714889d170ec368d31.tar.gz forums-55fb87ff180ca47a1a39d2714889d170ec368d31.tar.bz2 forums-55fb87ff180ca47a1a39d2714889d170ec368d31.tar.xz forums-55fb87ff180ca47a1a39d2714889d170ec368d31.zip |
Merge remote-tracking branch 'nickvergessen/ticket/bantu/11469' into ticket/11469
* nickvergessen/ticket/bantu/11469:
[ticket/11469] Use method to check config count, instead of repeating it
[ticket/11469] Return after sql_multi_insert when multi_insert is false
[ticket/11469] Add some basic unit tests for phpbb_db_sql_insert_buffer
-rw-r--r-- | phpBB/includes/db/sql_insert_buffer.php | 1 | ||||
-rw-r--r-- | tests/dbal/sql_insert_buffer_test.php | 149 |
2 files changed, 150 insertions, 0 deletions
diff --git a/phpBB/includes/db/sql_insert_buffer.php b/phpBB/includes/db/sql_insert_buffer.php index 772f368987..6b884dd412 100644 --- a/phpBB/includes/db/sql_insert_buffer.php +++ b/phpBB/includes/db/sql_insert_buffer.php @@ -84,6 +84,7 @@ class phpbb_db_sql_insert_buffer // Pass data on to sql_multi_insert right away which will // immediately send an INSERT INTO query to the database. $this->db->sql_multi_insert($this->table_name, array($row)); + return; } $this->buffer[] = $row; diff --git a/tests/dbal/sql_insert_buffer_test.php b/tests/dbal/sql_insert_buffer_test.php new file mode 100644 index 0000000000..e3ee767937 --- /dev/null +++ b/tests/dbal/sql_insert_buffer_test.php @@ -0,0 +1,149 @@ +<?php +/** +* +* @package testing +* @copyright (c) 2013 phpBB Group +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* +*/ + +class phpbb_dbal_sql_insert_buffer_test extends phpbb_database_test_case +{ + public function getDataSet() + { + return $this->createXMLDataSet(dirname(__FILE__).'/fixtures/config.xml'); + } + + protected function assert_config_count($db, $num_configs) + { + $sql = 'SELECT COUNT(*) AS num_configs + FROM phpbb_config'; + $result = $db->sql_query($sql); + $this->assertEquals($num_configs, $db->sql_fetchfield('num_configs')); + $db->sql_freeresult($result); + } + + public function insert_buffer_data() + { + $db = $this->new_dbal(); + + if ($db->multi_insert) + { + // Test with enabled and disabled multi_insert + return array( + array(true), + array(false), + ); + } + else + { + // Only test with disabled multi_insert, the DB doesn't support it + return array( + array(false), + ); + } + } + + /** + * @dataProvider insert_buffer_data + */ + public function test_insert_and_flush($force_multi_insert) + { + $db = $this->new_dbal(); + $db->multi_insert = $force_multi_insert; + + $buffer = new phpbb_db_sql_insert_buffer($db, 'phpbb_config', 2); + + $this->assert_config_count($db, 2); + + // This call can be buffered + $buffer->insert(array( + 'config_name' => 'name1', + 'config_value' => 'value1', + 'is_dynamic' => '0', + )); + + if ($db->multi_insert) + { + $this->assert_config_count($db, 2); + } + else + { + $this->assert_config_count($db, 3); + } + + // Manually flush + $buffer->flush(); + + $this->assert_config_count($db, 3); + } + + /** + * @dataProvider insert_buffer_data + */ + public function test_insert_with_flush($force_multi_insert) + { + $db = $this->new_dbal(); + $db->multi_insert = $force_multi_insert; + + $buffer = new phpbb_db_sql_insert_buffer($db, 'phpbb_config', 2); + + $this->assert_config_count($db, 2); + + $buffer->insert(array( + 'config_name' => 'name1', + 'config_value' => 'value1', + 'is_dynamic' => '0', + )); + + // This call flushes the values + $buffer->insert(array( + 'config_name' => 'name2', + 'config_value' => 'value2', + 'is_dynamic' => '0', + )); + + $this->assert_config_count($db, 4); + } + + /** + * @dataProvider insert_buffer_data + */ + public function test_insert_all_and_flush($force_multi_insert) + { + $db = $this->new_dbal(); + $db->multi_insert = $force_multi_insert; + + $buffer = new phpbb_db_sql_insert_buffer($db, 'phpbb_config', 2); + + $this->assert_config_count($db, 2); + + $buffer->insert_all(array( + array( + 'config_name' => 'name1', + 'config_value' => 'value1', + 'is_dynamic' => '0', + ), + array( + 'config_name' => 'name2', + 'config_value' => 'value2', + 'is_dynamic' => '0', + ), + array( + 'config_name' => 'name3', + 'config_value' => 'value3', + 'is_dynamic' => '0', + ), + )); + + if ($db->multi_insert) + { + $this->assert_config_count($db, 4); + + // Manually flush + $buffer->flush(); + } + + $this->assert_config_count($db, 5); + } +} |