diff options
author | Nathan Guse <nathaniel.guse@gmail.com> | 2013-03-06 15:36:15 -0600 |
---|---|---|
committer | Nathan Guse <nathaniel.guse@gmail.com> | 2013-03-06 15:36:15 -0600 |
commit | 9ca15267fa91d2c9aad5df4f57a41de8b2c79be0 (patch) | |
tree | 6a61a976cfc2ac7a4be32c7deacb789f7efc7752 /phpBB | |
parent | 02758cabbc8860b5026353a2f995077f5d7c2e76 (diff) | |
parent | 32ff2348f10aed1aad3b78e7677dca34335b7adb (diff) | |
download | forums-9ca15267fa91d2c9aad5df4f57a41de8b2c79be0.tar forums-9ca15267fa91d2c9aad5df4f57a41de8b2c79be0.tar.gz forums-9ca15267fa91d2c9aad5df4f57a41de8b2c79be0.tar.bz2 forums-9ca15267fa91d2c9aad5df4f57a41de8b2c79be0.tar.xz forums-9ca15267fa91d2c9aad5df4f57a41de8b2c79be0.zip |
Merge remote-tracking branch 'remotes/bantu/ticket/10202' into develop
# By Andreas Fischer
# Via Andreas Fischer
* remotes/bantu/ticket/10202:
[ticket/10202] Rename method names _all() to _array().
[ticket/10202] Add migration file for config_db_text.
[ticket/10202] Upgrade TEXT to the bigger MTEXT.
[ticket/10202] Improve method documentation.
[ticket/10202] SQL escape the table name.
[ticket/10202] Add $this->db->sql_freeresult($result) to SELECT queries.
[ticket/10202] Define phpbb_config_db_text as a service.
[ticket/10202] Add tests for phpbb_config_db_text.
[ticket/10202] Adjust method names to guidelines.
[ticket/10202] Add database schema for phpbb_config_db_text.
[ticket/10202] Implementation of config options with arbitrary length values.
Diffstat (limited to 'phpBB')
-rw-r--r-- | phpBB/config/services.yml | 6 | ||||
-rw-r--r-- | phpBB/config/tables.yml | 1 | ||||
-rw-r--r-- | phpBB/develop/create_schema_files.php | 8 | ||||
-rw-r--r-- | phpBB/includes/config/db_text.php | 163 | ||||
-rw-r--r-- | phpBB/includes/db/migration/data/310/config_db_text.php | 45 | ||||
-rw-r--r-- | phpBB/install/schemas/firebird_schema.sql | 9 | ||||
-rw-r--r-- | phpBB/install/schemas/mssql_schema.sql | 17 | ||||
-rw-r--r-- | phpBB/install/schemas/mysql_40_schema.sql | 8 | ||||
-rw-r--r-- | phpBB/install/schemas/mysql_41_schema.sql | 8 | ||||
-rw-r--r-- | phpBB/install/schemas/oracle_schema.sql | 11 | ||||
-rw-r--r-- | phpBB/install/schemas/postgres_schema.sql | 10 | ||||
-rw-r--r-- | phpBB/install/schemas/sqlite_schema.sql | 8 |
12 files changed, 294 insertions, 0 deletions
diff --git a/phpBB/config/services.yml b/phpBB/config/services.yml index 7b2a24b2b3..b9c71844dc 100644 --- a/phpBB/config/services.yml +++ b/phpBB/config/services.yml @@ -58,6 +58,12 @@ services: - @cache.driver - %tables.config% + config_text: + class: phpbb_config_db_text + arguments: + - @dbal.conn + - %tables.config_text% + controller.helper: class: phpbb_controller_helper arguments: diff --git a/phpBB/config/tables.yml b/phpBB/config/tables.yml index b3093abf0c..1191fd0ae1 100644 --- a/phpBB/config/tables.yml +++ b/phpBB/config/tables.yml @@ -1,5 +1,6 @@ parameters: tables.config: %core.table_prefix%config + tables.config_text: %core.table_prefix%config_text tables.ext: %core.table_prefix%ext tables.log: %core.table_prefix%log tables.notification_types: %core.table_prefix%notification_types diff --git a/phpBB/develop/create_schema_files.php b/phpBB/develop/create_schema_files.php index a9caee2e25..b454fb2c16 100644 --- a/phpBB/develop/create_schema_files.php +++ b/phpBB/develop/create_schema_files.php @@ -998,6 +998,14 @@ function get_schema_struct() ), ); + $schema_data['phpbb_config_text'] = array( + 'COLUMNS' => array( + 'config_name' => array('VCHAR', ''), + 'config_value' => array('MTEXT', ''), + ), + 'PRIMARY_KEY' => 'config_name', + ); + $schema_data['phpbb_confirm'] = array( 'COLUMNS' => array( 'confirm_id' => array('CHAR:32', ''), diff --git a/phpBB/includes/config/db_text.php b/phpBB/includes/config/db_text.php new file mode 100644 index 0000000000..b365cb5c77 --- /dev/null +++ b/phpBB/includes/config/db_text.php @@ -0,0 +1,163 @@ +<?php +/** +* +* @package phpBB3 +* @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; +} + +/** +* Manages configuration options with an arbitrary length value stored in a TEXT +* column. In constrast to class phpbb_config_db, values are never cached and +* prefetched, but every get operation sends a query to the database. +* +* @package phpBB3 +*/ +class phpbb_config_db_text +{ + /** + * Database connection + * @var phpbb_db_driver + */ + protected $db; + + /** + * Name of the database table used. + * @var string + */ + protected $table; + + /** + * @param phpbb_db_driver $db Database connection + * @param string $table Table name + */ + public function __construct(phpbb_db_driver $db, $table) + { + $this->db = $db; + $this->table = $this->db->sql_escape($table); + } + + /** + * Sets the configuration option with the name $key to $value. + * + * @param string $key The configuration option's name + * @param string $value New configuration value + * + * @return null + */ + public function set($key, $value) + { + $this->set_array(array($key => $value)); + } + + /** + * Gets the configuration value for the name $key. + * + * @param string $key The configuration option's name + * + * @return string|null String result on success + * null if there is no such option + */ + public function get($key) + { + $map = $this->get_array(array($key)); + + return isset($map[$key]) ? $map[$key] : null; + } + + /** + * Removes the configuration option with the name $key. + * + * @param string $key The configuration option's name + * + * @return null + */ + public function delete($key) + { + $this->delete_array(array($key)); + } + + /** + * Mass set configuration options: Receives an associative array, + * treats array keys as configuration option names and associated + * array values as their configuration option values. + * + * @param array $map Map from configuration names to values + * + * @return null + */ + public function set_array(array $map) + { + $this->db->sql_transaction('begin'); + + foreach ($map as $key => $value) + { + $sql = 'UPDATE ' . $this->table . " + SET config_value = '" . $this->db->sql_escape($value) . "' + WHERE config_name = '" . $this->db->sql_escape($key) . "'"; + $result = $this->db->sql_query($sql); + + if (!$this->db->sql_affectedrows($result)) + { + $sql = 'INSERT INTO ' . $this->table . ' ' . $this->db->sql_build_array('INSERT', array( + 'config_name' => $key, + 'config_value' => $value, + )); + $this->db->sql_query($sql); + } + } + + $this->db->sql_transaction('commit'); + } + + /** + * Mass get configuration options: Receives a set of configuration + * option names and returns the result as a key => value map where + * array keys are configuration option names and array values are + * associated config option values. + * + * @param array $keys Set of configuration option names + * + * @return array Map from configuration names to values + */ + public function get_array(array $keys) + { + $sql = 'SELECT * + FROM ' . $this->table . ' + WHERE ' . $this->db->sql_in_set('config_name', $keys, false, true); + $result = $this->db->sql_query($sql); + + $map = array(); + while ($row = $this->db->sql_fetchrow($result)) + { + $map[$row['config_name']] = $row['config_value']; + } + $this->db->sql_freeresult($result); + + return $map; + } + + /** + * Mass delete configuration options. + * + * @param array $keys Set of configuration option names + * + * @return null + */ + public function delete_array(array $keys) + { + $sql = 'DELETE + FROM ' . $this->table . ' + WHERE ' . $this->db->sql_in_set('config_name', $keys, false, true); + $result = $this->db->sql_query($sql); + } +} diff --git a/phpBB/includes/db/migration/data/310/config_db_text.php b/phpBB/includes/db/migration/data/310/config_db_text.php new file mode 100644 index 0000000000..89f211adda --- /dev/null +++ b/phpBB/includes/db/migration/data/310/config_db_text.php @@ -0,0 +1,45 @@ +<?php +/** +* +* @package migration +* @copyright (c) 2013 phpBB Group +* @license http://opensource.org/licenses/gpl-license.php GNU Public License v2 +* +*/ + +class phpbb_db_migration_data_310_config_db_text extends phpbb_db_migration +{ + public function effectively_installed() + { + return $this->db_tools->sql_table_exists($this->table_prefix . 'config_text'); + } + + static public function depends_on() + { + return array('phpbb_db_migration_data_30x_3_0_11'); + } + + public function update_schema() + { + return array( + 'add_tables' => array( + $this->table_prefix . 'config_text' => array( + 'COLUMNS' => array( + 'config_name' => array('VCHAR', ''), + 'config_value' => array('MTEXT', ''), + ), + 'PRIMARY_KEY' => 'config_name', + ), + ), + ); + } + + public function revert_schema() + { + return array( + 'drop_tables' => array( + $this->table_prefix . 'config_text', + ), + ); + } +} diff --git a/phpBB/install/schemas/firebird_schema.sql b/phpBB/install/schemas/firebird_schema.sql index 3f813ef9b9..18ca184c65 100644 --- a/phpBB/install/schemas/firebird_schema.sql +++ b/phpBB/install/schemas/firebird_schema.sql @@ -222,6 +222,15 @@ ALTER TABLE phpbb_config ADD PRIMARY KEY (config_name);; CREATE INDEX phpbb_config_is_dynamic ON phpbb_config(is_dynamic);; +# Table: 'phpbb_config_text' +CREATE TABLE phpbb_config_text ( + config_name VARCHAR(255) CHARACTER SET NONE DEFAULT '' NOT NULL, + config_value BLOB SUB_TYPE TEXT CHARACTER SET NONE DEFAULT '' NOT NULL +);; + +ALTER TABLE phpbb_config_text ADD PRIMARY KEY (config_name);; + + # Table: 'phpbb_confirm' CREATE TABLE phpbb_confirm ( confirm_id CHAR(32) CHARACTER SET NONE DEFAULT '' NOT NULL, diff --git a/phpBB/install/schemas/mssql_schema.sql b/phpBB/install/schemas/mssql_schema.sql index 30e95954d4..3530f9cd25 100644 --- a/phpBB/install/schemas/mssql_schema.sql +++ b/phpBB/install/schemas/mssql_schema.sql @@ -294,6 +294,23 @@ GO /* + Table: 'phpbb_config_text' +*/ +CREATE TABLE [phpbb_config_text] ( + [config_name] [varchar] (255) DEFAULT ('') NOT NULL , + [config_value] [text] DEFAULT ('') NOT NULL +) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] +GO + +ALTER TABLE [phpbb_config_text] WITH NOCHECK ADD + CONSTRAINT [PK_phpbb_config_text] PRIMARY KEY CLUSTERED + ( + [config_name] + ) ON [PRIMARY] +GO + + +/* Table: 'phpbb_confirm' */ CREATE TABLE [phpbb_confirm] ( diff --git a/phpBB/install/schemas/mysql_40_schema.sql b/phpBB/install/schemas/mysql_40_schema.sql index 3bf8c22488..8c405677a8 100644 --- a/phpBB/install/schemas/mysql_40_schema.sql +++ b/phpBB/install/schemas/mysql_40_schema.sql @@ -157,6 +157,14 @@ CREATE TABLE phpbb_config ( ); +# Table: 'phpbb_config_text' +CREATE TABLE phpbb_config_text ( + config_name varbinary(255) DEFAULT '' NOT NULL, + config_value mediumblob NOT NULL, + PRIMARY KEY (config_name) +); + + # Table: 'phpbb_confirm' CREATE TABLE phpbb_confirm ( confirm_id binary(32) DEFAULT '' NOT NULL, diff --git a/phpBB/install/schemas/mysql_41_schema.sql b/phpBB/install/schemas/mysql_41_schema.sql index 93348b2015..cb259aa57d 100644 --- a/phpBB/install/schemas/mysql_41_schema.sql +++ b/phpBB/install/schemas/mysql_41_schema.sql @@ -157,6 +157,14 @@ CREATE TABLE phpbb_config ( ) CHARACTER SET `utf8` COLLATE `utf8_bin`; +# Table: 'phpbb_config_text' +CREATE TABLE phpbb_config_text ( + config_name varchar(255) DEFAULT '' NOT NULL, + config_value mediumtext NOT NULL, + PRIMARY KEY (config_name) +) CHARACTER SET `utf8` COLLATE `utf8_bin`; + + # Table: 'phpbb_confirm' CREATE TABLE phpbb_confirm ( confirm_id char(32) DEFAULT '' NOT NULL, diff --git a/phpBB/install/schemas/oracle_schema.sql b/phpBB/install/schemas/oracle_schema.sql index 4dd151e54b..35f05e34cd 100644 --- a/phpBB/install/schemas/oracle_schema.sql +++ b/phpBB/install/schemas/oracle_schema.sql @@ -332,6 +332,17 @@ CREATE INDEX phpbb_config_is_dynamic ON phpbb_config (is_dynamic) / /* + Table: 'phpbb_config_text' +*/ +CREATE TABLE phpbb_config_text ( + config_name varchar2(255) DEFAULT '' , + config_value clob DEFAULT '' , + CONSTRAINT pk_phpbb_config_text PRIMARY KEY (config_name) +) +/ + + +/* Table: 'phpbb_confirm' */ CREATE TABLE phpbb_confirm ( diff --git a/phpBB/install/schemas/postgres_schema.sql b/phpBB/install/schemas/postgres_schema.sql index 77481add59..6dc507b46d 100644 --- a/phpBB/install/schemas/postgres_schema.sql +++ b/phpBB/install/schemas/postgres_schema.sql @@ -270,6 +270,16 @@ CREATE TABLE phpbb_config ( CREATE INDEX phpbb_config_is_dynamic ON phpbb_config (is_dynamic); /* + Table: 'phpbb_config_text' +*/ +CREATE TABLE phpbb_config_text ( + config_name varchar(255) DEFAULT '' NOT NULL, + config_value TEXT DEFAULT '' NOT NULL, + PRIMARY KEY (config_name) +); + + +/* Table: 'phpbb_confirm' */ CREATE TABLE phpbb_confirm ( diff --git a/phpBB/install/schemas/sqlite_schema.sql b/phpBB/install/schemas/sqlite_schema.sql index 7dd1fe70f6..ccb67ad46f 100644 --- a/phpBB/install/schemas/sqlite_schema.sql +++ b/phpBB/install/schemas/sqlite_schema.sql @@ -154,6 +154,14 @@ CREATE TABLE phpbb_config ( CREATE INDEX phpbb_config_is_dynamic ON phpbb_config (is_dynamic); +# Table: 'phpbb_config_text' +CREATE TABLE phpbb_config_text ( + config_name varchar(255) NOT NULL DEFAULT '', + config_value mediumtext(16777215) NOT NULL DEFAULT '', + PRIMARY KEY (config_name) +); + + # Table: 'phpbb_confirm' CREATE TABLE phpbb_confirm ( confirm_id char(32) NOT NULL DEFAULT '', |