diff options
author | Nathan Guse <nathaniel.guse@gmail.com> | 2013-07-23 11:13:25 -0500 |
---|---|---|
committer | Nathan Guse <nathaniel.guse@gmail.com> | 2013-07-23 11:13:25 -0500 |
commit | 485c6ab3553f518b157610ee1144bbcbef63f797 (patch) | |
tree | 0c50392c4716511e118eeabd3f48cceb3ac7e906 /phpBB/includes/db/sql_insert_buffer.php | |
parent | 41d8bfa974900c9befbde06cc08060eb8a552ec8 (diff) | |
parent | be59885d5fd4b44f1c43994dec928eda816f9ab8 (diff) | |
download | forums-485c6ab3553f518b157610ee1144bbcbef63f797.tar forums-485c6ab3553f518b157610ee1144bbcbef63f797.tar.gz forums-485c6ab3553f518b157610ee1144bbcbef63f797.tar.bz2 forums-485c6ab3553f518b157610ee1144bbcbef63f797.tar.xz forums-485c6ab3553f518b157610ee1144bbcbef63f797.zip |
Merge branch 'develop' of github.com:phpbb/phpbb3 into ticket/11667
# By Joas Schilling (224) and others
# Via Andreas Fischer (23) and others
* 'develop' of github.com:phpbb/phpbb3: (385 commits)
[ticket/11734] Readd accidently removed language strings of forum permissions
[ticket/11620] Whitespace and combine function into test_case
[ticket/11620] Move check_ban_test functions to setUp/tearDown for clarity
[ticket/11620] Changed incorrect global variable
[ticket/11620] Minor indentation changes and comment clarity
[ticket/11733] Fix "Illegal offset type" Warning caused by overall feed
[ticket/11733] Add browse test for feed.php
[ticket/11731] Remove static calls to captcha garbage collector
[ticket/11728] Replace topic_approved with topic_visibility
[ticket/11620] Expected and actual test conditions wrongly swapped
[ticket/11620] Space between . in directory import concatenation
[ticket/11620] Changes to match merge
[ticket/11620] Changes for code guidelines consistency
[ticket/11620] Fix a static calls to non-static for session captcha
[ticket/11620] Cleanup creation_test that was renamed on a cherry-pick
[ticket/11620] Update auth_provider for new interface
[ticket/11620] Added garbage_collection_test
[ticket/11620] Fixed check_ban_test errors with cache and ban warning message
[ticket/11620] Fixed a typo on check_ban_test
[ticket/11620] Refactored check_isvalid_test to use session_test_case
...
Diffstat (limited to 'phpBB/includes/db/sql_insert_buffer.php')
-rw-r--r-- | phpBB/includes/db/sql_insert_buffer.php | 150 |
1 files changed, 0 insertions, 150 deletions
diff --git a/phpBB/includes/db/sql_insert_buffer.php b/phpBB/includes/db/sql_insert_buffer.php deleted file mode 100644 index c18f908429..0000000000 --- a/phpBB/includes/db/sql_insert_buffer.php +++ /dev/null @@ -1,150 +0,0 @@ -<?php -/** -* -* @package dbal -* @copyright (c) 2013 phpBB Group -* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 -* -*/ - -/** -* @ignore -*/ -if (!defined('IN_PHPBB')) -{ - exit; -} - -/** -* Collects rows for insert into a database until the buffer size is reached. -* Then flushes the buffer to the database and starts over again. -* -* Benefits over collecting a (possibly huge) insert array and then using -* $db->sql_multi_insert() include: -* -* - Going over max packet size of the database connection is usually prevented -* because the data is submitted in batches. -* -* - Reaching database connection timeout is usually prevented because -* submission of batches talks to the database every now and then. -* -* - Usage of less PHP memory because data no longer needed is discarded on -* buffer flush. -* -* Attention: -* Please note that users of this class have to call flush() to flush the -* remaining rows to the database after their batch insert operation is -* finished. -* -* Usage: -* <code> -* $buffer = new phpbb_db_sql_insert_buffer($db, 'test_table', 1234); -* -* while (do_stuff()) -* { -* $buffer->insert(array( -* 'column1' => 'value1', -* 'column2' => 'value2', -* )); -* } -* -* $buffer->flush(); -* </code> -* -* @package dbal -*/ -class phpbb_db_sql_insert_buffer -{ - /** @var phpbb_db_driver */ - protected $db; - - /** @var string */ - protected $table_name; - - /** @var int */ - protected $max_buffered_rows; - - /** @var array */ - protected $buffer = array(); - - /** - * @param phpbb_db_driver $db - * @param string $table_name - * @param int $max_buffered_rows - */ - public function __construct(phpbb_db_driver $db, $table_name, $max_buffered_rows = 500) - { - $this->db = $db; - $this->table_name = $table_name; - $this->max_buffered_rows = $max_buffered_rows; - } - - /** - * Inserts a single row into the buffer if multi insert is supported by the - * database (otherwise an insert query is sent immediately). Then flushes - * the buffer if the number of rows in the buffer is now greater than or - * equal to $max_buffered_rows. - * - * @param array $row - * - * @return bool True when some data was flushed to the database. - * False otherwise. - */ - public function insert(array $row) - { - $this->buffer[] = $row; - - // Flush buffer if it is full or when DB does not support multi inserts. - // In the later case, the buffer will always only contain one row. - if (!$this->db->multi_insert || sizeof($this->buffer) >= $this->max_buffered_rows) - { - return $this->flush(); - } - - return false; - } - - /** - * Inserts a row set, i.e. an array of rows, by calling insert(). - * - * Please note that it is in most cases better to use insert() instead of - * first building a huge rowset. Or at least sizeof($rows) should be kept - * small. - * - * @param array $rows - * - * @return bool True when some data was flushed to the database. - * False otherwise. - */ - public function insert_all(array $rows) - { - // Using bitwise |= because PHP does not have logical ||= - $result = 0; - - foreach ($rows as $row) - { - $result |= (int) $this->insert($row); - } - - return (bool) $result; - } - - /** - * Flushes the buffer content to the DB and clears the buffer. - * - * @return bool True when some data was flushed to the database. - * False otherwise. - */ - public function flush() - { - if (!empty($this->buffer)) - { - $this->db->sql_multi_insert($this->table_name, $this->buffer); - $this->buffer = array(); - - return true; - } - - return false; - } -} |