aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Fischer <bantu@phpbb.com>2013-03-27 18:11:49 +0100
committerAndreas Fischer <bantu@phpbb.com>2013-03-27 18:11:49 +0100
commit55fb87ff180ca47a1a39d2714889d170ec368d31 (patch)
tree5f2be1c5b610c311db66ee19000386c521dd14b9
parent43b6ae3fee34e03ce579ca24ed4cf58f4a1f4660 (diff)
parentaf9f30cd52fd7b53b17b946a0c646fd72c4a6f4f (diff)
downloadforums-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.php1
-rw-r--r--tests/dbal/sql_insert_buffer_test.php149
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);
+ }
+}