From e6eb11bb1168236cbaba0263d322170dc2c7bdcd Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Fri, 29 Apr 2011 00:03:49 -0400 Subject: [ticket/10003] Ported d7d96223e7bae7cd60b13c6e7896d95838c3633c to db_tools. PHPBB3-10003 --- phpBB/includes/db/db_tools.php | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/db_tools.php b/phpBB/includes/db/db_tools.php index f4b181c6ad..f22ddc2ee8 100644 --- a/phpBB/includes/db/db_tools.php +++ b/phpBB/includes/db/db_tools.php @@ -1371,24 +1371,29 @@ class phpbb_db_tools switch ($this->sql_layer) { case 'firebird': + // Does not support AFTER statement, only POSITION (and there you need the column position) $statements[] = 'ALTER TABLE ' . $table_name . ' ADD "' . strtoupper($column_name) . '" ' . $column_data['column_type_sql']; break; case 'mssql': case 'mssqlnative': + // Does not support AFTER, only through temporary table $statements[] = 'ALTER TABLE [' . $table_name . '] ADD [' . $column_name . '] ' . $column_data['column_type_sql_default']; break; case 'mysql_40': case 'mysql_41': - $statements[] = 'ALTER TABLE `' . $table_name . '` ADD COLUMN `' . $column_name . '` ' . $column_data['column_type_sql']; + $after = (!empty($column_data['after'])) ? ' AFTER ' . $column_data['after'] : ''; + $statements[] = 'ALTER TABLE `' . $table_name . '` ADD COLUMN `' . $column_name . '` ' . $column_data['column_type_sql'] . $after; break; case 'oracle': + // Does not support AFTER, only through temporary table $statements[] = 'ALTER TABLE ' . $table_name . ' ADD ' . $column_name . ' ' . $column_data['column_type_sql']; break; case 'postgres': + // Does not support AFTER, only through temporary table if (version_compare($this->db->sql_server_info(true), '8.0', '>=')) { $statements[] = 'ALTER TABLE ' . $table_name . ' ADD COLUMN "' . $column_name . '" ' . $column_data['column_type_sql']; @@ -2120,4 +2125,4 @@ class phpbb_db_tools } } -?> \ No newline at end of file +?> -- cgit v1.2.1 From 3cb1b90ca6afcf0533f8f398f2a3f4066b697ed3 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Fri, 29 Apr 2011 00:34:24 -0400 Subject: [ticket/10003] Ported 96a30afcca3ebd832c9b3083bb5c9a9f2a2dc54b to db_tools. This change is somewhat questionable, maybe it should be reviewed. PHPBB3-10003 --- phpBB/includes/db/db_tools.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/db_tools.php b/phpBB/includes/db/db_tools.php index f22ddc2ee8..d9ff811e34 100644 --- a/phpBB/includes/db/db_tools.php +++ b/phpBB/includes/db/db_tools.php @@ -681,10 +681,12 @@ class phpbb_db_tools { foreach ($columns as $column_name => $column_data) { - // Only add the column if it does not exist yet, else change it (to be consistent) + // Only add the column if it does not exist yet if ($column_exists = $this->sql_column_exists($table, $column_name)) { - $result = $this->sql_column_change($table, $column_name, $column_data, true); + continue; + // This is commented out here because it can take tremendous time on updates +// $result = $this->sql_column_change($table, $column_name, $column_data, true); } else { -- cgit v1.2.1 From 9f34aa0b79456f5d2d60f62361f483c76a3f89dd Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Fri, 29 Apr 2011 00:39:36 -0400 Subject: [ticket/10003] Ported 54c22ae52a0e18232cac8fed342ea52f2e2a793d to db_tools. This diff applied cleanly. PHPBB3-10003 --- phpBB/includes/db/db_tools.php | 110 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 109 insertions(+), 1 deletion(-) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/db_tools.php b/phpBB/includes/db/db_tools.php index d9ff811e34..a793a2f313 100644 --- a/phpBB/includes/db/db_tools.php +++ b/phpBB/includes/db/db_tools.php @@ -697,7 +697,8 @@ class phpbb_db_tools { if ($column_exists) { - $sqlite_data[$table]['change_columns'][] = $result; + continue; +// $sqlite_data[$table]['change_columns'][] = $result; } else { @@ -719,6 +720,11 @@ class phpbb_db_tools { foreach ($indexes as $index_name) { + if (!$this->sql_index_exists($table, $index_name)) + { + continue; + } + $result = $this->sql_index_drop($table, $index_name); if ($this->return_statements) @@ -779,6 +785,11 @@ class phpbb_db_tools { foreach ($index_array as $index_name => $column) { + if ($this->sql_index_exists($table, $index_name)) + { + continue; + } + $result = $this->sql_create_unique_index($table, $index_name, $column); if ($this->return_statements) @@ -796,6 +807,11 @@ class phpbb_db_tools { foreach ($index_array as $index_name => $column) { + if ($this->sql_index_exists($table, $index_name)) + { + continue; + } + $result = $this->sql_create_index($table, $index_name, $column); if ($this->return_statements) @@ -1104,6 +1120,98 @@ class phpbb_db_tools } } + /** + * Check if a specified index exists in table + * + * @param string $table_name Table to check the index at + * @param string $index_name The index name to check + * + * @return bool True if index exists, else false + */ + function sql_index_exists($table_name, $index_name) + { + if ($this->sql_layer == 'mssql') + { + $sql = "EXEC sp_statistics '$table_name'"; + $result = $this->db->sql_query($sql); + + while ($row = $this->db->sql_fetchrow($result)) + { + if ($row['TYPE'] == 3) + { + if (strtolower($row['INDEX_NAME']) == strtolower($index_name)) + { + $this->db->sql_freeresult($result); + return true; + } + } + } + $this->db->sql_freeresult($result); + + return false; + } + + switch ($this->sql_layer) + { + case 'firebird': + $sql = "SELECT LOWER(RDB\$INDEX_NAME) as index_name + FROM RDB\$INDICES + WHERE RDB\$RELATION_NAME = " . strtoupper($table_name) . " + AND RDB\$UNIQUE_FLAG IS NULL + AND RDB\$FOREIGN_KEY IS NULL"; + $col = 'index_name'; + break; + + case 'postgres': + $sql = "SELECT ic.relname as index_name + FROM pg_class bc, pg_class ic, pg_index i + WHERE (bc.oid = i.indrelid) + AND (ic.oid = i.indexrelid) + AND (bc.relname = '" . $table_name . "') + AND (i.indisunique != 't') + AND (i.indisprimary != 't')"; + $col = 'index_name'; + break; + + case 'mysql_40': + case 'mysql_41': + $sql = 'SHOW KEYS + FROM ' . $table_name; + $col = 'Key_name'; + break; + + case 'oracle': + $sql = "SELECT index_name + FROM user_indexes + WHERE table_name = '" . $table_name . "' + AND generated = 'N'"; + break; + + case 'sqlite': + $sql = "PRAGMA index_info('" . $table_name . "');"; + $col = 'name'; + break; + } + + $result = $this->db->sql_query($sql); + while ($row = $this->db->sql_fetchrow($result)) + { + if (($this->sql_layer == 'mysql_40' || $this->sql_layer == 'mysql_41') && !$row['Non_unique']) + { + continue; + } + + if (strtolower($row[$col]) == strtolower($index_name)) + { + $this->db->sql_freeresult($result); + return true; + } + } + $this->db->sql_freeresult($result); + + return false; + } + /** * Private method for performing sql statements (either execute them or return them) * @access private -- cgit v1.2.1 From 761e3dd36f3b42fdaac99ba76f8d214b47983c05 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Fri, 29 Apr 2011 01:07:46 -0400 Subject: [ticket/10003] Ported 023760c8b2402418310a3717db8349cac0342e42 to db_tools. This was painful. Git wanted to patch hunks in wrong places. Hopefully I got it right. PHPBB3-10003 --- phpBB/includes/db/db_tools.php | 143 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 137 insertions(+), 6 deletions(-) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/db_tools.php b/phpBB/includes/db/db_tools.php index a793a2f313..f72498af9b 100644 --- a/phpBB/includes/db/db_tools.php +++ b/phpBB/includes/db/db_tools.php @@ -785,7 +785,7 @@ class phpbb_db_tools { foreach ($index_array as $index_name => $column) { - if ($this->sql_index_exists($table, $index_name)) + if ($this->sql_unique_index_exists($table, $index_name)) { continue; } @@ -1121,7 +1121,7 @@ class phpbb_db_tools } /** - * Check if a specified index exists in table + * Check if a specified index exists in table. Does not return PRIMARY KEY and UNIQUE indexes. * * @param string $table_name Table to check the index at * @param string $index_name The index name to check @@ -1156,7 +1156,7 @@ class phpbb_db_tools case 'firebird': $sql = "SELECT LOWER(RDB\$INDEX_NAME) as index_name FROM RDB\$INDICES - WHERE RDB\$RELATION_NAME = " . strtoupper($table_name) . " + WHERE RDB\$RELATION_NAME = '" . strtoupper($table_name) . "' AND RDB\$UNIQUE_FLAG IS NULL AND RDB\$FOREIGN_KEY IS NULL"; $col = 'index_name'; @@ -1183,12 +1183,14 @@ class phpbb_db_tools case 'oracle': $sql = "SELECT index_name FROM user_indexes - WHERE table_name = '" . $table_name . "' - AND generated = 'N'"; + WHERE table_name = '" . strtoupper($table_name) . "' + AND generated = 'N' + AND uniqueness = 'NONUNIQUE'"; + $col = 'index_name'; break; case 'sqlite': - $sql = "PRAGMA index_info('" . $table_name . "');"; + $sql = "PRAGMA index_list('" . $table_name . "');"; $col = 'name'; break; } @@ -1201,6 +1203,135 @@ class phpbb_db_tools continue; } + // These DBMS prefix index name with the table name + switch ($this->sql_layer) + { + case 'firebird': + case 'oracle': + case 'postgres': + case 'sqlite': + $row[$col] = substr($row[$col], strlen($table_name) + 1); + break; + } + + if (strtolower($row[$col]) == strtolower($index_name)) + { + $this->db->sql_freeresult($result); + return true; + } + } + $this->db->sql_freeresult($result); + + return false; + } + + /** + * Check if a specified index exists in table. Does not return PRIMARY KEY and UNIQUE indexes. + * + * @param string $table_name Table to check the index at + * @param string $index_name The index name to check + * + * @return bool True if index exists, else false + */ + function sql_unique_index_exists($table_name, $index_name) + { + if ($this->sql_layer == 'mssql') + { + $sql = "EXEC sp_statistics '$table_name'"; + $result = $this->db->sql_query($sql); + + while ($row = $this->db->sql_fetchrow($result)) + { + // Usually NON_UNIQUE is the column we want to check, but we allow for both + if ($row['TYPE'] == 3) + { + if (strtolower($row['INDEX_NAME']) == strtolower($index_name)) + { + $this->db->sql_freeresult($result); + return true; + } + } + } + $this->db->sql_freeresult($result); + return false; + } + + switch ($this->sql_layer) + { + case 'firebird': + $sql = "SELECT LOWER(RDB\$INDEX_NAME) as index_name + FROM RDB\$INDICES + WHERE RDB\$RELATION_NAME = '" . strtoupper($table_name) . "' + AND RDB\$UNIQUE_FLAG IS NOT NULL + AND RDB\$FOREIGN_KEY IS NULL"; + $col = 'index_name'; + break; + + case 'postgres': + $sql = "SELECT ic.relname as index_name, i.indisunique + FROM pg_class bc, pg_class ic, pg_index i + WHERE (bc.oid = i.indrelid) + AND (ic.oid = i.indexrelid) + AND (bc.relname = '" . $table_name . "') + AND (i.indisprimary != 't')"; + $col = 'index_name'; + break; + + case 'mysql_40': + case 'mysql_41': + $sql = 'SHOW KEYS + FROM ' . $table_name; + $col = 'Key_name'; + break; + + case 'oracle': + $sql = "SELECT index_name, table_owner + FROM user_indexes + WHERE table_name = '" . strtoupper($table_name) . "' + AND generated = 'N' + AND uniqueness = 'UNIQUE' + AND index_name LIKE 'U_%'"; + $col = 'index_name'; + break; + + case 'sqlite': + $sql = "PRAGMA index_list('" . $table_name . "') WHERE unique = 1;"; + $col = 'name'; + break; + } + + $result = $this->db->sql_query($sql); + while ($row = $this->db->sql_fetchrow($result)) + { + if (($this->sql_layer == 'mysql_40' || $this->sql_layer == 'mysql_41') && ($row['Non_unique'] || $row[$col] == 'PRIMARY')) + { + continue; + } + + if ($this->sql_layer == 'sqlite' && !$row['unique']) + { + continue; + } + + if ($this->sql_layer == 'postgres' && $row['indisunique'] != 't') + { + continue; + } + + // These DBMS prefix index name with the table name + switch ($this->sql_layer) + { + case 'oracle': + $row[$col] = substr($row[$col], strlen('U_' . $row['table_owner']) + 1); + break; + + case 'firebird': + case 'postgres': + case 'sqlite': + $row[$col] = substr($row[$col], strlen($table_name) + 1); + break; + } + if (strtolower($row[$col]) == strtolower($index_name)) { $this->db->sql_freeresult($result); -- cgit v1.2.1 From 55ff5da70b6598218b032725f73de7c4f94a7c89 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Fri, 29 Apr 2011 01:25:46 -0400 Subject: [ticket/10003] Ported 5553cfc2ed81ba9eb571804c431def962720b39e to db_tools. The diff in database_update was only partially relevant. PHPBB3-10003 --- phpBB/includes/db/db_tools.php | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/db_tools.php b/phpBB/includes/db/db_tools.php index f72498af9b..01061c77b1 100644 --- a/phpBB/includes/db/db_tools.php +++ b/phpBB/includes/db/db_tools.php @@ -1289,13 +1289,12 @@ class phpbb_db_tools FROM user_indexes WHERE table_name = '" . strtoupper($table_name) . "' AND generated = 'N' - AND uniqueness = 'UNIQUE' - AND index_name LIKE 'U_%'"; + AND uniqueness = 'UNIQUE'"; $col = 'index_name'; break; case 'sqlite': - $sql = "PRAGMA index_list('" . $table_name . "') WHERE unique = 1;"; + $sql = "PRAGMA index_list('" . $table_name . "');"; $col = 'name'; break; } @@ -1322,7 +1321,15 @@ class phpbb_db_tools switch ($this->sql_layer) { case 'oracle': - $row[$col] = substr($row[$col], strlen('U_' . $row['table_owner']) + 1); + // Two cases here... prefixed with U_[table_owner] and not prefixed with table_name + if (strpos($row[$col], 'U_') === 0) + { + $row[$col] = substr($row[$col], strlen('U_' . $row['table_owner']) + 1); + } + else if (strpos($row[$col], strtoupper($table_name)) === 0) + { + $row[$col] = substr($row[$col], strlen($table_name) + 1); + } break; case 'firebird': @@ -2203,6 +2210,7 @@ class phpbb_db_tools } else { + // TODO: try to change pkey without removing trigger, generator or constraints. ATM this query may fail. $statements[] = 'ALTER TABLE ' . $table_name . ' ALTER COLUMN "' . strtoupper($column_name) . '" TYPE ' . ' ' . $column_data['column_type_sql_type']; } break; -- cgit v1.2.1 From 85549fad8324afc6e9358e98d75b8fdcc5faa416 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Fri, 29 Apr 2011 01:46:01 -0400 Subject: [ticket/10003] Ported 1802b9ff9286a7fc24493e71b3432816cbdbfcd8 to db_tools. Most of it was already in db_tools, these changes could have applied to code that did not exist in db_tools at the time of the commit. PHPBB3-10003 --- phpBB/includes/db/db_tools.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/db_tools.php b/phpBB/includes/db/db_tools.php index 01061c77b1..fd09ccde3f 100644 --- a/phpBB/includes/db/db_tools.php +++ b/phpBB/includes/db/db_tools.php @@ -1130,7 +1130,7 @@ class phpbb_db_tools */ function sql_index_exists($table_name, $index_name) { - if ($this->sql_layer == 'mssql') + if ($this->sql_layer == 'mssql' || $this->sql_layer == 'mssqlnative') { $sql = "EXEC sp_statistics '$table_name'"; $result = $this->db->sql_query($sql); @@ -1235,7 +1235,7 @@ class phpbb_db_tools */ function sql_unique_index_exists($table_name, $index_name) { - if ($this->sql_layer == 'mssql') + if ($this->sql_layer == 'mssql' || $this->sql_layer == 'mssqlnative') { $sql = "EXEC sp_statistics '$table_name'"; $result = $this->db->sql_query($sql); -- cgit v1.2.1 From 1e2c19f4b443692b18a3a167dc464f63b19da47f Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Fri, 29 Apr 2011 02:16:02 -0400 Subject: [ticket/10003] Delete EOL at EOF for the benefit of 3.0 modifications. PHPBB3-10003 --- phpBB/includes/db/db_tools.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/db_tools.php b/phpBB/includes/db/db_tools.php index fd09ccde3f..483ceee043 100644 --- a/phpBB/includes/db/db_tools.php +++ b/phpBB/includes/db/db_tools.php @@ -2374,4 +2374,4 @@ class phpbb_db_tools } } -?> +?> \ No newline at end of file -- cgit v1.2.1 From bfdb5c413deb15588c4e6d29e54cc42aae2ff5ae Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Wed, 11 May 2011 11:32:09 +0200 Subject: [ticket/10146] Fix Firebird DECIMAL precision issue on develop. PHPBB3-10146 --- phpBB/includes/db/firebird.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/firebird.php b/phpBB/includes/db/firebird.php index 8868d4e317..8acc84b1c0 100644 --- a/phpBB/includes/db/firebird.php +++ b/phpBB/includes/db/firebird.php @@ -497,7 +497,8 @@ class dbal_firebird extends dbal */ function cast_expr_to_bigint($expression) { - return 'CAST(' . $expression . ' as DECIMAL(255, 0))'; + // Precision must be from 1 to 18 + return 'CAST(' . $expression . ' as DECIMAL(18, 0))'; } /** -- cgit v1.2.1 From ebe83769e6efff249f94e5337dcd8fd16593a290 Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Thu, 2 Jun 2011 01:45:12 +0200 Subject: [ticket/9685] Consistently name the new sql_buffer_nested_transactions function PHPBB3-9685 --- phpBB/includes/db/dbal.php | 2 +- phpBB/includes/db/mssqlnative.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/dbal.php b/phpBB/includes/db/dbal.php index d7860fc8bc..2f9619c8ea 100644 --- a/phpBB/includes/db/dbal.php +++ b/phpBB/includes/db/dbal.php @@ -246,7 +246,7 @@ class dbal * * @return bool Whether buffering is required. */ - function sql_buffer_nested_transaction() + function sql_buffer_nested_transactions() { return false; } diff --git a/phpBB/includes/db/mssqlnative.php b/phpBB/includes/db/mssqlnative.php index e057e7fe74..6810562d17 100644 --- a/phpBB/includes/db/mssqlnative.php +++ b/phpBB/includes/db/mssqlnative.php @@ -261,7 +261,7 @@ class dbal_mssqlnative extends dbal /** * {@inheritDoc} */ - function sql_buffer_nested_transaction() + function sql_buffer_nested_transactions() { return true; } -- cgit v1.2.1 From 2dee57fd43ebe1cf1f43fb0161cdd5f072eeaa63 Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Fri, 10 Jun 2011 12:02:59 +0200 Subject: [ticket/9992] Adding a limit on login attempts per IP. A new table was created to save all failed login attempts with corresponding information on username, ip and useragent. By default the limit is 50 login attempts within 6 hours per IP. The limit is relatively high to avoid big problems on sites behind a reverse proxy that don't receive the forwarded-for value as REMOTE_ADDR but see all users as coming from the same IP address. But if these users run into problems a special forwarded-for option is available to limit logins by forwarded-for value instead of ip. PHPBB3-9992 --- phpBB/includes/db/db_tools.php | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/db_tools.php b/phpBB/includes/db/db_tools.php index 483ceee043..fdefda9e26 100644 --- a/phpBB/includes/db/db_tools.php +++ b/phpBB/includes/db/db_tools.php @@ -638,6 +638,19 @@ class phpbb_db_tools $sqlite = true; } + // Add tables? + if (!empty($schema_changes['add_tables'])) + { + foreach ($schema_changes['add_tables'] as $table => $table_data) + { + $result = $this->sql_create_table($table, $table_data); + if ($this->return_statements) + { + $statements = array_merge($statements, $result); + } + } + } + // Change columns? if (!empty($schema_changes['change_columns'])) { -- cgit v1.2.1 From 418c3d546a5ea29b5ce338e4710e0d3636009733 Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Sun, 12 Jun 2011 01:21:55 +0200 Subject: [ticket/9892] column & index name limits, firebird auto increment in db_tools - Column names are limited to 30 characters - Index names are limited to 31 characters. On some dbms the index name contains both table name and actual index name so the limit applies to the sum of the lenghts of table name and index name. - Auto incremented column names are limited to 26 characters to provide an additional 4 characters for sequence names The code for firebird auto increment support using generators/sequences with triggers was copied from create_schema_files.php PHPBB3-9892 --- phpBB/includes/db/db_tools.php | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/db_tools.php b/phpBB/includes/db/db_tools.php index fdefda9e26..0e3173c23e 100644 --- a/phpBB/includes/db/db_tools.php +++ b/phpBB/includes/db/db_tools.php @@ -417,6 +417,11 @@ class phpbb_db_tools // here lies an array, filled with information compiled on the column's data $prepared_column = $this->sql_prepare_column_data($table_name, $column_name, $column_data); + if (isset($prepared_column['auto_increment']) && strlen($column_name) > 26) // "${column_name}_gen" + { + trigger_error("Index name '${column_name}_gen' on table '$table_name' is too long. The maximum is 30 characters.", E_USER_ERROR); + } + // here we add the definition of the new column to the list of columns switch ($this->sql_layer) { @@ -566,7 +571,13 @@ class phpbb_db_tools case 'firebird': if ($create_sequence) { - $statements[] = "CREATE SEQUENCE {$table_name}_seq;"; + $statements[] = "CREATE GENERATOR {$table_name}_gen;"; + $statements[] = "SET GENERATOR {$table_name}_gen TO 0;"; + + $trigger = "CREATE TRIGGER t_$table_name FOR $table_name\n"; + $trigger .= "BEFORE INSERT\nAS\nBEGIN\n"; + $trigger .= "\tNEW.{$create_sequence} = GEN_ID({$table_name}_gen, 1);\nEND;"; + $statements[] = $trigger; } break; } @@ -1400,6 +1411,11 @@ class phpbb_db_tools */ function sql_prepare_column_data($table_name, $column_name, $column_data) { + if (strlen($column_name) > 30) + { + trigger_error("Column name '$column_name' on table '$table_name' is too long. The maximum is 30 characters.", E_USER_ERROR); + } + // Get type if (strpos($column_data[0], ':') !== false) { @@ -2040,6 +2056,11 @@ class phpbb_db_tools { $statements = array(); + if (strlen($table_name . $index_name) > 30) + { + trigger_error("Index name '{$table_name}_$index_name' on table '$table_name' is too long. The maximum is 30 characters.", E_USER_ERROR); + } + switch ($this->sql_layer) { case 'firebird': @@ -2070,6 +2091,11 @@ class phpbb_db_tools { $statements = array(); + if (strlen($table_name . $index_name) > 30) + { + trigger_error("Index name '${table_name}_$index_name' on table '$table_name' is too long. The maximum is 30 characters.", E_USER_ERROR); + } + // remove index length unless MySQL4 if ('mysql_40' != $this->sql_layer) { -- cgit v1.2.1 From ef544ee095f2decde39cc537d3d675642b7c80f2 Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Sun, 12 Jun 2011 04:10:51 +0200 Subject: [ticket/9892] Table prefix lengths influence index lengths in db_tools PHPBB3-9892 --- phpBB/includes/db/db_tools.php | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/db_tools.php b/phpBB/includes/db/db_tools.php index 0e3173c23e..c1af2782f8 100644 --- a/phpBB/includes/db/db_tools.php +++ b/phpBB/includes/db/db_tools.php @@ -419,7 +419,7 @@ class phpbb_db_tools if (isset($prepared_column['auto_increment']) && strlen($column_name) > 26) // "${column_name}_gen" { - trigger_error("Index name '${column_name}_gen' on table '$table_name' is too long. The maximum is 30 characters.", E_USER_ERROR); + trigger_error("Index name '${column_name}_gen' on table '$table_name' is too long. The maximum auto increment column length is 26 characters.", E_USER_ERROR); } // here we add the definition of the new column to the list of columns @@ -2056,9 +2056,11 @@ class phpbb_db_tools { $statements = array(); - if (strlen($table_name . $index_name) > 30) + $table_prefix = substr(CONFIG_TABLE, 0, -6); // strlen(config) + if (strlen($table_name . $index_name) - strlen($table_prefix) > 24) { - trigger_error("Index name '{$table_name}_$index_name' on table '$table_name' is too long. The maximum is 30 characters.", E_USER_ERROR); + $max_length = $table_prefix + 24; + trigger_error("Index name '{$table_name}_$index_name' on table '$table_name' is too long. The maximum is $max_length characters.", E_USER_ERROR); } switch ($this->sql_layer) @@ -2091,9 +2093,11 @@ class phpbb_db_tools { $statements = array(); - if (strlen($table_name . $index_name) > 30) + $table_prefix = substr(CONFIG_TABLE, 0, -6); // strlen(config) + if (strlen($table_name . $index_name) - strlen($table_prefix) > 24) { - trigger_error("Index name '${table_name}_$index_name' on table '$table_name' is too long. The maximum is 30 characters.", E_USER_ERROR); + $max_length = $table_prefix + 24; + trigger_error("Index name '{$table_name}_$index_name' on table '$table_name' is too long. The maximum is $max_length characters.", E_USER_ERROR); } // remove index length unless MySQL4 -- cgit v1.2.1 From c090e1c9e9fc2e435a4ae2f63923955d66dccd6d Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Mon, 13 Jun 2011 06:14:59 +0200 Subject: [ticket/10214] Correct Oracle create table query syntax in db_tools Removes the semicolon at end of oracle CREATE TABLE queries and adds a semicolon to the end of a SELECT query inside of the trigger for a new table's auto increment column before the end keyword PHPBB3-10214 --- phpBB/includes/db/db_tools.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/db_tools.php b/phpBB/includes/db/db_tools.php index c1af2782f8..50e308dea2 100644 --- a/phpBB/includes/db/db_tools.php +++ b/phpBB/includes/db/db_tools.php @@ -543,7 +543,7 @@ class phpbb_db_tools break; case 'oracle': - $table_sql .= "\n);"; + $table_sql .= "\n)"; $statements[] = $table_sql; // do we need to add a sequence and a tigger for auto incrementing columns? @@ -561,7 +561,7 @@ class phpbb_db_tools $trigger .= "BEGIN\n"; $trigger .= "\tSELECT {$table_name}_seq.nextval\n"; $trigger .= "\tINTO :new.{$create_sequence}\n"; - $trigger .= "\tFROM dual\n"; + $trigger .= "\tFROM dual;\n"; $trigger .= "END;"; $statements[] = $trigger; -- cgit v1.2.1 From 7de078b26e2a0b2672f24efe715b440cca7f5979 Mon Sep 17 00:00:00 2001 From: rxu Date: Sun, 19 Jun 2011 19:03:53 +0800 Subject: [ticket/10227] Allow persistent connections for mysqli with PHP 5.3.0+ PHPBB3-10227 --- phpBB/includes/db/mysqli.php | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/mysqli.php b/phpBB/includes/db/mysqli.php index 862d62f4ba..dcf8727e18 100644 --- a/phpBB/includes/db/mysqli.php +++ b/phpBB/includes/db/mysqli.php @@ -33,13 +33,16 @@ class dbal_mysqli extends dbal */ function sql_connect($sqlserver, $sqluser, $sqlpassword, $database, $port = false, $persistency = false , $new_link = false) { - $this->persistency = $persistency; + // Mysqli extension supports persistent connection since PHP 5.3.0 + $this->persistency = (version_compare(PHP_VERSION, '5.3.0', '>=')) ? $persistency : false; $this->user = $sqluser; - $this->server = $sqlserver; + + // If persistent connection, set dbhost to localhost when empty and prepend it with 'p:' prefix + $this->server = ($this->persistency) ? 'p:' . (($sqlserver) ? $sqlserver : 'localhost') : $sqlserver; + $this->dbname = $database; $port = (!$port) ? NULL : $port; - // Persistant connections not supported by the mysqli extension? $this->db_connect_id = @mysqli_connect($this->server, $this->user, $sqlpassword, $this->dbname, $port); if ($this->db_connect_id && $this->dbname != '') -- cgit v1.2.1 From 578f9dffa607de1da2aa181b49be583f27f3bf28 Mon Sep 17 00:00:00 2001 From: rxu Date: Tue, 21 Jun 2011 00:21:42 +0800 Subject: [ticket/10226] Allow mysqli connections via local sockets/pipes PHPBB3-10226 --- phpBB/includes/db/mysqli.php | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/mysqli.php b/phpBB/includes/db/mysqli.php index dcf8727e18..1901847c0f 100644 --- a/phpBB/includes/db/mysqli.php +++ b/phpBB/includes/db/mysqli.php @@ -43,7 +43,23 @@ class dbal_mysqli extends dbal $this->dbname = $database; $port = (!$port) ? NULL : $port; - $this->db_connect_id = @mysqli_connect($this->server, $this->user, $sqlpassword, $this->dbname, $port); + // If port is set and it is not numeric, most likely mysqli socket is set. + // Try to map it to the $socket parameter. + $socket = NULL; + if ($port) + { + if (preg_match('#^[0-9]+$#', $port)) + { + $port = (int) $port; + } + else + { + $socket = $port; + $port = NULL; + } + } + + $this->db_connect_id = @mysqli_connect($this->server, $this->user, $sqlpassword, $this->dbname, $port, $socket); if ($this->db_connect_id && $this->dbname != '') { -- cgit v1.2.1 From 18fb3d86cdac01c2dd1469982a51526fa1480b42 Mon Sep 17 00:00:00 2001 From: rxu Date: Tue, 21 Jun 2011 22:03:19 +0800 Subject: [ticket/10226] Use is_numeric() instead of preg_replace() PHPBB3-10226 --- phpBB/includes/db/mysqli.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/mysqli.php b/phpBB/includes/db/mysqli.php index 1901847c0f..46c2f9210b 100644 --- a/phpBB/includes/db/mysqli.php +++ b/phpBB/includes/db/mysqli.php @@ -48,7 +48,7 @@ class dbal_mysqli extends dbal $socket = NULL; if ($port) { - if (preg_match('#^[0-9]+$#', $port)) + if (is_numeric($port)) { $port = (int) $port; } -- cgit v1.2.1 From a275d17625325e0353b67fabf5a9b0c4fb35877e Mon Sep 17 00:00:00 2001 From: Yuriy Rusko Date: Wed, 6 Jul 2011 20:38:02 -0400 Subject: [ticket/9859] Changing all phpBB footers to match the new credit line PHPBB3-9859 --- phpBB/includes/db/dbal.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/dbal.php b/phpBB/includes/db/dbal.php index 2f9619c8ea..9b45c085a2 100644 --- a/phpBB/includes/db/dbal.php +++ b/phpBB/includes/db/dbal.php @@ -777,7 +777,7 @@ class dbal -- cgit v1.2.1 From 766537035ea2f04c5aa3c59c15edc15f4ecd050f Mon Sep 17 00:00:00 2001 From: Igor Wiedler Date: Sat, 9 Jul 2011 15:28:33 +0200 Subject: [ticket/10258] Change the DOCTYPE to HTML5 PHPBB3-10258 --- phpBB/includes/db/dbal.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/dbal.php b/phpBB/includes/db/dbal.php index b29e2791ab..2468f26d39 100644 --- a/phpBB/includes/db/dbal.php +++ b/phpBB/includes/db/dbal.php @@ -767,11 +767,11 @@ class dbal $mtime = explode(' ', microtime()); $totaltime = $mtime[0] + $mtime[1] - $starttime; - echo ' - + echo ' + - - + + SQL Report -- cgit v1.2.1 From 854c14f9f6ae78318e159e27724178579ff48dcc Mon Sep 17 00:00:00 2001 From: Igor Wiedler Date: Sun, 10 Jul 2011 23:04:14 +0200 Subject: [ticket/10258] Remove X-UA-Compatible and imagetoolbar meta tags These meta tags are IE specific and do not validate as HTML5. PHPBB3-10258 --- phpBB/includes/db/dbal.php | 2 -- 1 file changed, 2 deletions(-) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/dbal.php b/phpBB/includes/db/dbal.php index 2468f26d39..a61dc5f58a 100644 --- a/phpBB/includes/db/dbal.php +++ b/phpBB/includes/db/dbal.php @@ -771,8 +771,6 @@ class dbal - - SQL Report -- cgit v1.2.1 From 136a932303d7d7a427043d1834b6df40dc219b0e Mon Sep 17 00:00:00 2001 From: Igor Wiedler Date: Tue, 12 Jul 2011 01:32:00 +0200 Subject: [ticket/10258] Remove the meta charset tag The charset tag is useless, because if a charset content-type header is present it takes precedence. And phpBB always sends such a header. PHPBB3-10258 --- phpBB/includes/db/dbal.php | 1 - 1 file changed, 1 deletion(-) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/dbal.php b/phpBB/includes/db/dbal.php index a61dc5f58a..962b997664 100644 --- a/phpBB/includes/db/dbal.php +++ b/phpBB/includes/db/dbal.php @@ -770,7 +770,6 @@ class dbal echo ' - SQL Report -- cgit v1.2.1 From b1608ae860d8b72d56916c08fdf78ca2135a08db Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Thu, 14 Jul 2011 02:09:22 +0200 Subject: [ticket/10267] Call strlen() on $table_prefix for $max_length calculation. PHPBB3-10267 --- phpBB/includes/db/db_tools.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/db_tools.php b/phpBB/includes/db/db_tools.php index 50e308dea2..d23323a5b1 100644 --- a/phpBB/includes/db/db_tools.php +++ b/phpBB/includes/db/db_tools.php @@ -2059,7 +2059,7 @@ class phpbb_db_tools $table_prefix = substr(CONFIG_TABLE, 0, -6); // strlen(config) if (strlen($table_name . $index_name) - strlen($table_prefix) > 24) { - $max_length = $table_prefix + 24; + $max_length = strlen($table_prefix) + 24; trigger_error("Index name '{$table_name}_$index_name' on table '$table_name' is too long. The maximum is $max_length characters.", E_USER_ERROR); } @@ -2096,7 +2096,7 @@ class phpbb_db_tools $table_prefix = substr(CONFIG_TABLE, 0, -6); // strlen(config) if (strlen($table_name . $index_name) - strlen($table_prefix) > 24) { - $max_length = $table_prefix + 24; + $max_length = strlen($table_prefix) + 24; trigger_error("Index name '{$table_name}_$index_name' on table '$table_name' is too long. The maximum is $max_length characters.", E_USER_ERROR); } -- cgit v1.2.1 From c38b0830579ba2c13cb2a946a9c7e939e4b2d2cd Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Thu, 28 Jul 2011 15:57:09 +0200 Subject: [ticket/10294] Fix sql_affectedrows() in mssqlnative driver. sqlsrv_rows_affected() expects a statement resource, not a connection resource. PHPBB3-10294 --- phpBB/includes/db/mssqlnative.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/mssqlnative.php b/phpBB/includes/db/mssqlnative.php index 6810562d17..7fbc374e77 100644 --- a/phpBB/includes/db/mssqlnative.php +++ b/phpBB/includes/db/mssqlnative.php @@ -396,7 +396,7 @@ class dbal_mssqlnative extends dbal */ function sql_affectedrows() { - return ($this->db_connect_id) ? @sqlsrv_rows_affected($this->db_connect_id) : false; + return (!empty($this->query_result)) ? @sqlsrv_rows_affected($this->query_result) : false; } /** -- cgit v1.2.1 From 681c4a478d6eff7dbcebadca04f4afa28da750a8 Mon Sep 17 00:00:00 2001 From: Igor Wiedler Date: Fri, 29 Jul 2011 16:32:22 +0200 Subject: [ticket/10258] Add HTML5 meta charset tag This allows knowing the charset when saving web pages to disk. Also, this is supported by all browsers. PHPBB3-10258 --- phpBB/includes/db/dbal.php | 1 + 1 file changed, 1 insertion(+) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/dbal.php b/phpBB/includes/db/dbal.php index 962b997664..a61dc5f58a 100644 --- a/phpBB/includes/db/dbal.php +++ b/phpBB/includes/db/dbal.php @@ -770,6 +770,7 @@ class dbal echo ' + SQL Report -- cgit v1.2.1 From 0f2e45800e9e88c86bdf335cac6a9974ec8f0385 Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Mon, 29 Aug 2011 14:24:50 -0400 Subject: [ticket/10346] Add drop_tables to perform_schema_changes and add tests PHPBB3-10346 --- phpBB/includes/db/db_tools.php | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'phpBB/includes/db') 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'])) { -- cgit v1.2.1 From d938d5d3994e5febd6a7530e740e24b5727d38c4 Mon Sep 17 00:00:00 2001 From: Patrick Webster Date: Sun, 4 Sep 2011 20:22:36 -0500 Subject: [ticket/10351] Fix Oracle's sql_column_remove() The correct syntax is DROP COLUMN. PHPBB3-10351 --- phpBB/includes/db/db_tools.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/db_tools.php b/phpBB/includes/db/db_tools.php index 2cb0fcef68..265fe1bb25 100644 --- a/phpBB/includes/db/db_tools.php +++ b/phpBB/includes/db/db_tools.php @@ -1805,7 +1805,7 @@ class phpbb_db_tools break; case 'oracle': - $statements[] = 'ALTER TABLE ' . $table_name . ' DROP ' . $column_name; + $statements[] = 'ALTER TABLE ' . $table_name . ' DROP COLUMN ' . $column_name; break; case 'postgres': -- cgit v1.2.1 From 5c7f5f05166aa5e493f2cbeddd2b5e36eb80d4df Mon Sep 17 00:00:00 2001 From: Patrick Webster Date: Sun, 4 Sep 2011 20:31:34 -0500 Subject: [ticket/10352] Add missing break for Oracle's sql_table_drop() PHPBB3-10352 --- phpBB/includes/db/db_tools.php | 1 + 1 file changed, 1 insertion(+) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/db_tools.php b/phpBB/includes/db/db_tools.php index 2cb0fcef68..48bbefa2dd 100644 --- a/phpBB/includes/db/db_tools.php +++ b/phpBB/includes/db/db_tools.php @@ -1956,6 +1956,7 @@ class phpbb_db_tools $statements[] = "DROP SEQUENCE {$row['referenced_name']}"; } $this->db->sql_freeresult($result); + break; case 'postgres': // PGSQL does not "tightly" bind sequences and tables, we must guess... -- cgit v1.2.1 From 3cd8c2507d4181a32484e47d6eef6601485bfb25 Mon Sep 17 00:00:00 2001 From: Igor Wiedler Date: Thu, 13 Oct 2011 16:43:11 +0200 Subject: [ticket/10307] Return false in mysqli sql_fetchrow on empty result PHPBB3-10307 --- phpBB/includes/db/mysqli.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/mysqli.php b/phpBB/includes/db/mysqli.php index 46c2f9210b..456ce906d0 100644 --- a/phpBB/includes/db/mysqli.php +++ b/phpBB/includes/db/mysqli.php @@ -249,7 +249,13 @@ class dbal_mysqli extends dbal return $cache->sql_fetchrow($query_id); } - return ($query_id !== false) ? @mysqli_fetch_assoc($query_id) : false; + if ($query_id !== false) + { + $result = @mysqli_fetch_assoc($query_id); + return $result !== null ? $result : false; + } + + return false; } /** -- cgit v1.2.1 From d86fccf9c909602c37ec97577a19dc442e22206b Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Fri, 14 Oct 2011 04:29:53 +0200 Subject: [ticket/10327] Change CREATE INDEX to ALTER TABLE table ADD INDEX for MySQL. * CREATE INDEX is internally mapped to an ALTER INDEX statement. * CREATE INDEX requires the INDEX permission. * ALTER TABLE requires the (more powerful) ALTER permission. * We require the ALTER permission anyway for operation. * Changing CREATE INDEX to ALTER TABLE thus removes dependency on the INDEX permission which is good because some management software does not give out the INDEX permission by default. http://dev.mysql.com/doc/refman/5.0/en/create-index.html PHPBB3-10327 --- phpBB/includes/db/db_tools.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/db_tools.php b/phpBB/includes/db/db_tools.php index 10ca6c0a1f..0d8cf7fdab 100644 --- a/phpBB/includes/db/db_tools.php +++ b/phpBB/includes/db/db_tools.php @@ -2145,7 +2145,7 @@ class phpbb_db_tools } // no break case 'mysql_41': - $statements[] = 'CREATE INDEX ' . $index_name . ' ON ' . $table_name . '(' . implode(', ', $column) . ')'; + $statements[] = 'ALTER TABLE ' . $table_name . ' ADD INDEX ' . $index_name . '(' . implode(', ', $column) . ')'; break; case 'mssql': -- cgit v1.2.1 From 234edf674cd1c2ed3611f69cd925c4d5e29fdc20 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Fri, 14 Oct 2011 15:25:15 +0200 Subject: [ticket/8240] Add ability to get a list of tables to db_tools. PHPBB3-8240 --- phpBB/includes/db/db_tools.php | 60 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/db_tools.php b/phpBB/includes/db/db_tools.php index 0d8cf7fdab..7c3d673869 100644 --- a/phpBB/includes/db/db_tools.php +++ b/phpBB/includes/db/db_tools.php @@ -347,6 +347,66 @@ class phpbb_db_tools } } + /** + * Gets a list of tables in the database. + * + * @return array Array of table names (all lower case) + */ + function sql_list_tables() + { + switch ($this->db->sql_layer) + { + case 'mysql': + case 'mysql4': + case 'mysqli': + $sql = 'SHOW TABLES'; + break; + + case 'sqlite': + $sql = 'SELECT name + FROM sqlite_master + WHERE type = "table"'; + break; + + case 'mssql': + case 'mssql_odbc': + case 'mssqlnative': + $sql = "SELECT name + FROM sysobjects + WHERE type='U'"; + break; + + case 'postgres': + $sql = 'SELECT relname + FROM pg_stat_user_tables'; + break; + + case 'firebird': + $sql = 'SELECT rdb$relation_name + FROM rdb$relations + WHERE rdb$view_source is null + AND rdb$system_flag = 0'; + break; + + case 'oracle': + $sql = 'SELECT table_name + FROM USER_TABLES'; + break; + } + + $result = $this->db->sql_query($sql); + + $tables = array(); + while ($row = $this->db->sql_fetchrow($result)) + { + $name = current($row); + $tables[$name] = $name; + } + $this->db->sql_freeresult($result); + + return $tables; + } + /** * Check if table exists * -- cgit v1.2.1 From 4effe8fb8bdf493e539b7bf883fbf1e290bf7ab2 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Fri, 14 Oct 2011 16:29:33 +0200 Subject: [ticket/8240] Add ability to get a list of columns of a tables to db_tools. PHPBB3-8240 --- phpBB/includes/db/db_tools.php | 111 ++++++++++++++--------------------------- 1 file changed, 37 insertions(+), 74 deletions(-) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/db_tools.php b/phpBB/includes/db/db_tools.php index 7c3d673869..317b8c6083 100644 --- a/phpBB/includes/db/db_tools.php +++ b/phpBB/includes/db/db_tools.php @@ -1071,34 +1071,21 @@ class phpbb_db_tools } /** - * Check if a specified column exist + * Gets a list of columns of a table. * - * @param string $table Table to check the column at - * @param string $column_name The column to check + * @param string $table Table name * - * @return bool True if column exists, else false + * @return array Array of column names (all lower case) */ - function sql_column_exists($table, $column_name) + function sql_list_columns($table) { + $columns = array(); + switch ($this->sql_layer) { case 'mysql_40': case 'mysql_41': - $sql = "SHOW COLUMNS FROM $table"; - $result = $this->db->sql_query($sql); - - while ($row = $this->db->sql_fetchrow($result)) - { - // lower case just in case - if (strtolower($row['Field']) == $column_name) - { - $this->db->sql_freeresult($result); - return true; - } - } - $this->db->sql_freeresult($result); - return false; break; // PostgreSQL has a way of doing this in a much simpler way but would @@ -1109,19 +1096,6 @@ class phpbb_db_tools WHERE c.relname = '{$table}' AND a.attnum > 0 AND a.attrelid = c.oid"; - $result = $this->db->sql_query($sql); - while ($row = $this->db->sql_fetchrow($result)) - { - // lower case just in case - if (strtolower($row['attname']) == $column_name) - { - $this->db->sql_freeresult($result); - return true; - } - } - $this->db->sql_freeresult($result); - - return false; break; // same deal with PostgreSQL, we must perform more complex operations than @@ -1132,62 +1106,26 @@ class phpbb_db_tools FROM syscolumns c LEFT JOIN sysobjects o ON c.id = o.id WHERE o.name = '{$table}'"; - $result = $this->db->sql_query($sql); - while ($row = $this->db->sql_fetchrow($result)) - { - // lower case just in case - if (strtolower($row['name']) == $column_name) - { - $this->db->sql_freeresult($result); - return true; - } - } - $this->db->sql_freeresult($result); - return false; break; case 'oracle': $sql = "SELECT column_name FROM user_tab_columns WHERE LOWER(table_name) = '" . strtolower($table) . "'"; - $result = $this->db->sql_query($sql); - while ($row = $this->db->sql_fetchrow($result)) - { - // lower case just in case - if (strtolower($row['column_name']) == $column_name) - { - $this->db->sql_freeresult($result); - return true; - } - } - $this->db->sql_freeresult($result); - return false; break; case 'firebird': $sql = "SELECT RDB\$FIELD_NAME as FNAME FROM RDB\$RELATION_FIELDS WHERE RDB\$RELATION_NAME = '" . strtoupper($table) . "'"; - $result = $this->db->sql_query($sql); - while ($row = $this->db->sql_fetchrow($result)) - { - // lower case just in case - if (strtolower($row['fname']) == $column_name) - { - $this->db->sql_freeresult($result); - return true; - } - } - $this->db->sql_freeresult($result); - return false; break; - // ugh, SQLite case 'sqlite': $sql = "SELECT sql FROM sqlite_master WHERE type = 'table' AND name = '{$table}'"; + $result = $this->db->sql_query($sql); if (!$result) @@ -1211,14 +1149,39 @@ class phpbb_db_tools continue; } - if (strtolower($entities[0]) == $column_name) - { - return true; - } + $column = strtolower($entities[0]); + $columns[$column] = $column; } - return false; + + return $columns; break; } + + $result = $this->db->sql_query($sql); + + while ($row = $this->db->sql_fetchrow($result)) + { + $column = strtolower(current($row)); + $columns[$column] = $column; + } + $this->db->sql_freeresult($result); + + return $columns; + } + + /** + * Check whether a specified column exist in a table + * + * @param string $table Table to check + * @param string $column_name Column to check + * + * @return bool True if column exists, false otherwise + */ + function sql_column_exists($table, $column_name) + { + $columns = $this->sql_list_columns($table); + + return isset($columns[$column_name]); } /** -- cgit v1.2.1 From 7e18d2b861826f399805656143fbdb940f302221 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Fri, 14 Oct 2011 17:18:25 +0200 Subject: [ticket/10327] Also change CREATE UNIQUE INDEX to use ALTER TABLE. PHPBB3-10327 --- phpBB/includes/db/db_tools.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/db_tools.php b/phpBB/includes/db/db_tools.php index 0d8cf7fdab..392a827cb7 100644 --- a/phpBB/includes/db/db_tools.php +++ b/phpBB/includes/db/db_tools.php @@ -2092,7 +2092,7 @@ class phpbb_db_tools case 'mysql_40': case 'mysql_41': - $statements[] = 'CREATE UNIQUE INDEX ' . $index_name . ' ON ' . $table_name . '(' . implode(', ', $column) . ')'; + $statements[] = 'ALTER TABLE ' . $table_name . ' ADD UNIQUE INDEX (' . implode(', ', $column) . ')'; break; case 'mssql': -- cgit v1.2.1 From 3d893c8222646e95aeae0301d954cfe62aa8486a Mon Sep 17 00:00:00 2001 From: dmauri Date: Tue, 15 Nov 2011 22:19:45 +0100 Subject: [ticket/10296] Fix CROSS JOIN with INNER JOIN on MSSQL, Postgres and Oracle PHPBB3-10296 --- phpBB/includes/db/dbal.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/dbal.php b/phpBB/includes/db/dbal.php index 9b45c085a2..b4c1a72e1c 100644 --- a/phpBB/includes/db/dbal.php +++ b/phpBB/includes/db/dbal.php @@ -609,7 +609,7 @@ class dbal } } - $sql .= $this->_sql_custom_build('FROM', implode(', ', $table_array)); + $sql .= $this->_sql_custom_build('FROM', implode(' CROSS JOIN ', $table_array)); if (!empty($array['LEFT_JOIN'])) { -- cgit v1.2.1 From d9fef488af150107b753b3c30e15ab5bf6d9da38 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Tue, 26 Jul 2011 17:48:17 +0200 Subject: [ticket/9079] Display backtrace on all E_USER_ERROR errors, not only SQL errors PHPBB3-9079 --- phpBB/includes/db/dbal.php | 5 ----- 1 file changed, 5 deletions(-) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/dbal.php b/phpBB/includes/db/dbal.php index b4c1a72e1c..230c9c8ed7 100644 --- a/phpBB/includes/db/dbal.php +++ b/phpBB/includes/db/dbal.php @@ -662,12 +662,7 @@ class dbal // The DEBUG_EXTRA constant is for development only! if ((isset($auth) && $auth->acl_get('a_')) || defined('IN_INSTALL') || defined('DEBUG_EXTRA')) { - // Print out a nice backtrace... - $backtrace = get_backtrace(); - $message .= ($sql) ? '

SQL

' . htmlspecialchars($sql) : ''; - $message .= ($backtrace) ? '

BACKTRACE
' . $backtrace : ''; - $message .= '
'; } else { -- cgit v1.2.1 From 7a04c9048c110f0bd21ea3e9e869e17b408d640e Mon Sep 17 00:00:00 2001 From: Unknown Date: Sat, 31 Dec 2011 13:32:52 +0000 Subject: [ticket/9916] Updating header license and removing Version $Id$ PHPBB3-9916 --- phpBB/includes/db/db_tools.php | 3 +-- phpBB/includes/db/dbal.php | 3 +-- phpBB/includes/db/firebird.php | 3 +-- phpBB/includes/db/mssql.php | 3 +-- phpBB/includes/db/mssql_odbc.php | 3 +-- phpBB/includes/db/mssqlnative.php | 3 +-- phpBB/includes/db/mysql.php | 3 +-- phpBB/includes/db/mysqli.php | 3 +-- phpBB/includes/db/oracle.php | 3 +-- phpBB/includes/db/postgres.php | 3 +-- phpBB/includes/db/sqlite.php | 3 +-- 11 files changed, 11 insertions(+), 22 deletions(-) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/db_tools.php b/phpBB/includes/db/db_tools.php index b9cc229a45..f9f4c97309 100644 --- a/phpBB/includes/db/db_tools.php +++ b/phpBB/includes/db/db_tools.php @@ -2,9 +2,8 @@ /** * * @package dbal -* @version $Id$ * @copyright (c) 2007 phpBB Group -* @license http://opensource.org/licenses/gpl-license.php GNU Public License +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 * */ diff --git a/phpBB/includes/db/dbal.php b/phpBB/includes/db/dbal.php index 4f33a22a09..48626af050 100644 --- a/phpBB/includes/db/dbal.php +++ b/phpBB/includes/db/dbal.php @@ -2,9 +2,8 @@ /** * * @package dbal -* @version $Id$ * @copyright (c) 2005 phpBB Group -* @license http://opensource.org/licenses/gpl-license.php GNU Public License +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 * */ diff --git a/phpBB/includes/db/firebird.php b/phpBB/includes/db/firebird.php index 8acc84b1c0..2ce9e50f46 100644 --- a/phpBB/includes/db/firebird.php +++ b/phpBB/includes/db/firebird.php @@ -2,9 +2,8 @@ /** * * @package dbal -* @version $Id$ * @copyright (c) 2005 phpBB Group -* @license http://opensource.org/licenses/gpl-license.php GNU Public License +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 * */ diff --git a/phpBB/includes/db/mssql.php b/phpBB/includes/db/mssql.php index 386b0a9a23..fd11dbad3c 100644 --- a/phpBB/includes/db/mssql.php +++ b/phpBB/includes/db/mssql.php @@ -2,9 +2,8 @@ /** * * @package dbal -* @version $Id$ * @copyright (c) 2005 phpBB Group -* @license http://opensource.org/licenses/gpl-license.php GNU Public License +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 * */ diff --git a/phpBB/includes/db/mssql_odbc.php b/phpBB/includes/db/mssql_odbc.php index d17280c5a6..909e43808f 100644 --- a/phpBB/includes/db/mssql_odbc.php +++ b/phpBB/includes/db/mssql_odbc.php @@ -2,9 +2,8 @@ /** * * @package dbal -* @version $Id$ * @copyright (c) 2005 phpBB Group -* @license http://opensource.org/licenses/gpl-license.php GNU Public License +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 * */ diff --git a/phpBB/includes/db/mssqlnative.php b/phpBB/includes/db/mssqlnative.php index 96b4c8a8c8..4abef6fc3c 100644 --- a/phpBB/includes/db/mssqlnative.php +++ b/phpBB/includes/db/mssqlnative.php @@ -2,9 +2,8 @@ /** * * @package dbal -* @version $Id$ * @copyright (c) 2010 phpBB Group -* @license http://opensource.org/licenses/gpl-license.php GNU Public License +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 * * This is the MS SQL Server Native database abstraction layer. * PHP mssql native driver required. diff --git a/phpBB/includes/db/mysql.php b/phpBB/includes/db/mysql.php index d0537e2fe9..317b8d123d 100644 --- a/phpBB/includes/db/mysql.php +++ b/phpBB/includes/db/mysql.php @@ -2,9 +2,8 @@ /** * * @package dbal -* @version $Id$ * @copyright (c) 2005 phpBB Group -* @license http://opensource.org/licenses/gpl-license.php GNU Public License +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 * */ diff --git a/phpBB/includes/db/mysqli.php b/phpBB/includes/db/mysqli.php index d2781e96dd..d6b64bf7c8 100644 --- a/phpBB/includes/db/mysqli.php +++ b/phpBB/includes/db/mysqli.php @@ -2,9 +2,8 @@ /** * * @package dbal -* @version $Id$ * @copyright (c) 2005 phpBB Group -* @license http://opensource.org/licenses/gpl-license.php GNU Public License +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 * */ diff --git a/phpBB/includes/db/oracle.php b/phpBB/includes/db/oracle.php index e0d9370bd8..2e801532f0 100644 --- a/phpBB/includes/db/oracle.php +++ b/phpBB/includes/db/oracle.php @@ -2,9 +2,8 @@ /** * * @package dbal -* @version $Id$ * @copyright (c) 2005 phpBB Group -* @license http://opensource.org/licenses/gpl-license.php GNU Public License +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 * */ diff --git a/phpBB/includes/db/postgres.php b/phpBB/includes/db/postgres.php index 959d8df139..bf22cffafa 100644 --- a/phpBB/includes/db/postgres.php +++ b/phpBB/includes/db/postgres.php @@ -2,9 +2,8 @@ /** * * @package dbal -* @version $Id$ * @copyright (c) 2005 phpBB Group -* @license http://opensource.org/licenses/gpl-license.php GNU Public License +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 * */ diff --git a/phpBB/includes/db/sqlite.php b/phpBB/includes/db/sqlite.php index 88d92d1ff2..86bfa75a13 100644 --- a/phpBB/includes/db/sqlite.php +++ b/phpBB/includes/db/sqlite.php @@ -2,9 +2,8 @@ /** * * @package dbal -* @version $Id$ * @copyright (c) 2005 phpBB Group -* @license http://opensource.org/licenses/gpl-license.php GNU Public License +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 * */ -- cgit v1.2.1 From f9953fc3395e6b206c0789d40f89f9d2463348e7 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Sat, 18 Feb 2012 19:29:32 +0100 Subject: [ticket/10653] Add ability to count table rows to database abstraction layer. PHPBB3-10653 --- phpBB/includes/db/dbal.php | 35 ++++++++++++++++++++++ phpBB/includes/db/mysql.php | 70 ++++++++++++++++++++++++++++++++++++++++++++ phpBB/includes/db/mysqli.php | 70 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 175 insertions(+) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/dbal.php b/phpBB/includes/db/dbal.php index 230c9c8ed7..5d456c2ff0 100644 --- a/phpBB/includes/db/dbal.php +++ b/phpBB/includes/db/dbal.php @@ -900,6 +900,41 @@ class dbal return true; } + + /** + * Gets the estimated number of rows in a specified table. + * + * @param string $table_name Table name + * + * @return string Number of rows in $table_name. + * Prefixed with ~ if estimated (otherwise exact). + * + * @access public + */ + function get_estimated_row_count($table_name) + { + return $this->get_row_count($table_name); + } + + /** + * Gets the exact number of rows in a specified table. + * + * @param string $table_name Table name + * + * @return string Exact number of rows in $table_name. + * + * @access public + */ + function get_row_count($table_name) + { + $sql = 'SELECT COUNT(*) AS rows_total + FROM ' . $this->sql_escape($table_name); + $result = $this->sql_query($sql); + $rows_total = $this->sql_fetchfield('rows_total'); + $this->sql_freeresult($result); + + return $rows_total; + } } /** diff --git a/phpBB/includes/db/mysql.php b/phpBB/includes/db/mysql.php index 1e24c79577..87413e808d 100644 --- a/phpBB/includes/db/mysql.php +++ b/phpBB/includes/db/mysql.php @@ -318,6 +318,76 @@ class dbal_mysql extends dbal return @mysql_real_escape_string($msg, $this->db_connect_id); } + /** + * Gets the estimated number of rows in a specified table. + * + * @param string $table_name Table name + * + * @return string Number of rows in $table_name. + * Prefixed with ~ if estimated (otherwise exact). + * + * @access public + */ + function get_estimated_row_count($table_name) + { + $table_status = $this->get_table_status($table_name); + + if (isset($table_status['Engine'])) + { + if ($table_status['Engine'] === 'MyISAM') + { + return $table_status['Rows']; + } + else if ($table_status['Engine'] === 'InnoDB' && $table_status['Rows'] > 100000) + { + return '~' . $table_status['Rows']; + } + } + + return $this->get_row_count($table_name); + } + + /** + * Gets the exact number of rows in a specified table. + * + * @param string $table_name Table name + * + * @return string Exact number of rows in $table_name. + * + * @access public + */ + function get_row_count($table_name) + { + $table_status = $this->get_table_status($table_name); + + if (isset($table_status['Engine']) && $table_status['Engine'] === 'MyISAM') + { + return $table_status['Rows']; + } + + return parent::get_row_count($table_name); + } + + /** + * Gets some information about the specified table. + * + * @param string $table_name Table name + * + * @return array + * + * @access protected + */ + function get_table_status($table_name) + { + $sql = "SHOW TABLE STATUS + LIKE '" . $this->sql_escape($table_name) . "'"; + $result = $this->sql_query($sql); + $table_status = $this->sql_fetchrow($result); + $this->sql_freeresult($result); + + return $table_status; + } + /** * Build LIKE expression * @access private diff --git a/phpBB/includes/db/mysqli.php b/phpBB/includes/db/mysqli.php index 456ce906d0..49b2789ce6 100644 --- a/phpBB/includes/db/mysqli.php +++ b/phpBB/includes/db/mysqli.php @@ -315,6 +315,76 @@ class dbal_mysqli extends dbal return @mysqli_real_escape_string($this->db_connect_id, $msg); } + /** + * Gets the estimated number of rows in a specified table. + * + * @param string $table_name Table name + * + * @return string Number of rows in $table_name. + * Prefixed with ~ if estimated (otherwise exact). + * + * @access public + */ + function get_estimated_row_count($table_name) + { + $table_status = $this->get_table_status($table_name); + + if (isset($table_status['Engine'])) + { + if ($table_status['Engine'] === 'MyISAM') + { + return $table_status['Rows']; + } + else if ($table_status['Engine'] === 'InnoDB' && $table_status['Rows'] > 100000) + { + return '~' . $table_status['Rows']; + } + } + + return $this->get_row_count($table_name); + } + + /** + * Gets the exact number of rows in a specified table. + * + * @param string $table_name Table name + * + * @return string Exact number of rows in $table_name. + * + * @access public + */ + function get_row_count($table_name) + { + $table_status = $this->get_table_status($table_name); + + if (isset($table_status['Engine']) && $table_status['Engine'] === 'MyISAM') + { + return $table_status['Rows']; + } + + return parent::get_row_count($table_name); + } + + /** + * Gets some information about the specified table. + * + * @param string $table_name Table name + * + * @return array + * + * @access protected + */ + function get_table_status($table_name) + { + $sql = "SHOW TABLE STATUS + LIKE '" . $this->sql_escape($table_name) . "'"; + $result = $this->sql_query($sql); + $table_status = $this->sql_fetchrow($result); + $this->sql_freeresult($result); + + return $table_status; + } + /** * Build LIKE expression * @access private -- cgit v1.2.1 From c11607bdd1ad4209a7697f0dc8d46ea81795b14c Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Wed, 7 Mar 2012 12:11:18 +0100 Subject: [ticket/10653] Call get_row_count of base class in mysql get_estimated_row_count There is no point in fetching the table status again. PHPBB3-10653 --- phpBB/includes/db/mysql.php | 2 +- phpBB/includes/db/mysqli.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/mysql.php b/phpBB/includes/db/mysql.php index 87413e808d..1ccb785150 100644 --- a/phpBB/includes/db/mysql.php +++ b/phpBB/includes/db/mysql.php @@ -344,7 +344,7 @@ class dbal_mysql extends dbal } } - return $this->get_row_count($table_name); + return parent::get_row_count($table_name); } /** diff --git a/phpBB/includes/db/mysqli.php b/phpBB/includes/db/mysqli.php index 49b2789ce6..a311b8cda6 100644 --- a/phpBB/includes/db/mysqli.php +++ b/phpBB/includes/db/mysqli.php @@ -341,7 +341,7 @@ class dbal_mysqli extends dbal } } - return $this->get_row_count($table_name); + return parent::get_row_count($table_name); } /** -- cgit v1.2.1 From ef8160e8a2a1dbb51cd2603eefcd9309d2daece8 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Tue, 10 Apr 2012 00:53:27 +0200 Subject: [ticket/10774] Correctly specify index name when creating unique index on MySQL. PHPBB3-10774 --- phpBB/includes/db/db_tools.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/db_tools.php b/phpBB/includes/db/db_tools.php index 2cba11133a..c6dd23e6bd 100644 --- a/phpBB/includes/db/db_tools.php +++ b/phpBB/includes/db/db_tools.php @@ -2115,7 +2115,7 @@ class phpbb_db_tools case 'mysql_40': case 'mysql_41': - $statements[] = 'ALTER TABLE ' . $table_name . ' ADD UNIQUE INDEX (' . implode(', ', $column) . ')'; + $statements[] = 'ALTER TABLE ' . $table_name . ' ADD UNIQUE INDEX ' . $index_name . '(' . implode(', ', $column) . ')'; break; case 'mssql': -- cgit v1.2.1 From b83fa0349ad30eefed3e8064d29793a9b3dd17f7 Mon Sep 17 00:00:00 2001 From: Senky Date: Mon, 30 Apr 2012 21:55:24 +0200 Subject: [ticket/10847] fixing all misspelled "dependant" to "dependent" PHPBB3-10847 --- phpBB/includes/db/db_tools.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/db_tools.php b/phpBB/includes/db/db_tools.php index efb8b3ebd7..73eae4e967 100644 --- a/phpBB/includes/db/db_tools.php +++ b/phpBB/includes/db/db_tools.php @@ -1503,7 +1503,7 @@ class phpbb_db_tools $column_type = $this->dbms_type_map[$this->sql_layer][$column_data[0]]; } - // Adjust default value if db-dependant specified + // Adjust default value if db-dependent specified if (is_array($column_data[1])) { $column_data[1] = (isset($column_data[1][$this->sql_layer])) ? $column_data[1][$this->sql_layer] : $column_data[1]['default']; -- cgit v1.2.1 From e52d23848a1b116d32fbad9dd384e0755553b829 Mon Sep 17 00:00:00 2001 From: Patrick Webster Date: Tue, 8 May 2012 18:44:43 -0500 Subject: [ticket/10858] Fix MSSQL Native's row seeking behavior The result_mssqlnative class remains in case someone wants to use it PHPBB3-10858 --- phpBB/includes/db/mssqlnative.php | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/mssqlnative.php b/phpBB/includes/db/mssqlnative.php index 7fbc374e77..6391664a3e 100644 --- a/phpBB/includes/db/mssqlnative.php +++ b/phpBB/includes/db/mssqlnative.php @@ -447,14 +447,39 @@ class dbal_mssqlnative extends dbal { global $cache; + if ($query_id === false) + { + $query_id = $this->query_result; + } + if (isset($cache->sql_rowset[$query_id])) { return $cache->sql_rowseek($rownum, $query_id); } - $seek = new result_mssqlnative($query_id); - $row = $seek->seek($rownum); - return ($row = $seek->fetch()) ? $row : false; + if ($query_id === false) + { + return false; + } + + $this->sql_freeresult($query_id); + $query_id = $this->sql_query($this->last_query_text); + + if ($query_id === false) + { + return false; + } + + // We do not fetch the row for rownum == 0 because then the next resultset would be the second row + for ($i = 0; $i < $rownum; $i++) + { + if (!$this->sql_fetchrow($query_id)) + { + return false; + } + } + + return true; } /** -- cgit v1.2.1 From 09d49fb7b2be51a29f5a03c0a1a3816d7e55a466 Mon Sep 17 00:00:00 2001 From: Patrick Webster Date: Tue, 8 May 2012 19:41:22 -0500 Subject: [ticket/10858] Move generic row seeking to DBAL Removed from: firebird, mssql_odbc, and mssqlnative PHPBB3-10858 --- phpBB/includes/db/dbal.php | 43 +++++++++++++++++++++++++++++++++++++++ phpBB/includes/db/firebird.php | 43 --------------------------------------- phpBB/includes/db/mssql_odbc.php | 43 --------------------------------------- phpBB/includes/db/mssqlnative.php | 43 --------------------------------------- 4 files changed, 43 insertions(+), 129 deletions(-) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/dbal.php b/phpBB/includes/db/dbal.php index 5d456c2ff0..358df50402 100644 --- a/phpBB/includes/db/dbal.php +++ b/phpBB/includes/db/dbal.php @@ -194,6 +194,49 @@ class dbal return false; } + /** + * Seek to given row number + * rownum is zero-based + */ + function sql_rowseek($rownum, &$query_id) + { + global $cache; + + if ($query_id === false) + { + $query_id = $this->query_result; + } + + if (isset($cache->sql_rowset[$query_id])) + { + return $cache->sql_rowseek($rownum, $query_id); + } + + if ($query_id === false) + { + return false; + } + + $this->sql_freeresult($query_id); + $query_id = $this->sql_query($this->last_query_text); + + if ($query_id === false) + { + return false; + } + + // We do not fetch the row for rownum == 0 because then the next resultset would be the second row + for ($i = 0; $i < $rownum; $i++) + { + if (!$this->sql_fetchrow($query_id)) + { + return false; + } + } + + return true; + } + /** * Fetch field * if rownum is false, the current row is used, else it is pointing to the row (zero-based) diff --git a/phpBB/includes/db/firebird.php b/phpBB/includes/db/firebird.php index 7e3f15ed1d..7072c58ac0 100644 --- a/phpBB/includes/db/firebird.php +++ b/phpBB/includes/db/firebird.php @@ -359,49 +359,6 @@ class dbal_firebird extends dbal return (sizeof($row)) ? $row : false; } - /** - * Seek to given row number - * rownum is zero-based - */ - function sql_rowseek($rownum, &$query_id) - { - global $cache; - - if ($query_id === false) - { - $query_id = $this->query_result; - } - - if (isset($cache->sql_rowset[$query_id])) - { - return $cache->sql_rowseek($rownum, $query_id); - } - - if ($query_id === false) - { - return; - } - - $this->sql_freeresult($query_id); - $query_id = $this->sql_query($this->last_query_text); - - if ($query_id === false) - { - return false; - } - - // We do not fetch the row for rownum == 0 because then the next resultset would be the second row - for ($i = 0; $i < $rownum; $i++) - { - if (!$this->sql_fetchrow($query_id)) - { - return false; - } - } - - return true; - } - /** * Get last inserted id after insert statement */ diff --git a/phpBB/includes/db/mssql_odbc.php b/phpBB/includes/db/mssql_odbc.php index 75a080b1b7..34f7a87337 100644 --- a/phpBB/includes/db/mssql_odbc.php +++ b/phpBB/includes/db/mssql_odbc.php @@ -255,49 +255,6 @@ class dbal_mssql_odbc extends dbal return ($query_id !== false) ? @odbc_fetch_array($query_id) : false; } - /** - * Seek to given row number - * rownum is zero-based - */ - function sql_rowseek($rownum, &$query_id) - { - global $cache; - - if ($query_id === false) - { - $query_id = $this->query_result; - } - - if (isset($cache->sql_rowset[$query_id])) - { - return $cache->sql_rowseek($rownum, $query_id); - } - - if ($query_id === false) - { - return false; - } - - $this->sql_freeresult($query_id); - $query_id = $this->sql_query($this->last_query_text); - - if ($query_id === false) - { - return false; - } - - // We do not fetch the row for rownum == 0 because then the next resultset would be the second row - for ($i = 0; $i < $rownum; $i++) - { - if (!$this->sql_fetchrow($query_id)) - { - return false; - } - } - - return true; - } - /** * Get last inserted id after insert statement */ diff --git a/phpBB/includes/db/mssqlnative.php b/phpBB/includes/db/mssqlnative.php index 6391664a3e..92ac9b1fb9 100644 --- a/phpBB/includes/db/mssqlnative.php +++ b/phpBB/includes/db/mssqlnative.php @@ -439,49 +439,6 @@ class dbal_mssqlnative extends dbal return $row; } - /** - * Seek to given row number - * rownum is zero-based - */ - function sql_rowseek($rownum, &$query_id) - { - global $cache; - - if ($query_id === false) - { - $query_id = $this->query_result; - } - - if (isset($cache->sql_rowset[$query_id])) - { - return $cache->sql_rowseek($rownum, $query_id); - } - - if ($query_id === false) - { - return false; - } - - $this->sql_freeresult($query_id); - $query_id = $this->sql_query($this->last_query_text); - - if ($query_id === false) - { - return false; - } - - // We do not fetch the row for rownum == 0 because then the next resultset would be the second row - for ($i = 0; $i < $rownum; $i++) - { - if (!$this->sql_fetchrow($query_id)) - { - return false; - } - } - - return true; - } - /** * Get last inserted id after insert statement */ -- cgit v1.2.1 From 643a86504a30f6b9fbe0f073bb03009b4fbd0f43 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Thu, 31 May 2012 11:44:41 +0200 Subject: [ticket/10751] Add sql_lower_text() to database abstraction layer. On MSSQL, LOWER() can only be called on bounded strings (i.e. varchar or char). So, in order to use it on a text column, we have to convert it to an appropriate type. We do so using the SUBSTRING function. PHPBB3-10751 --- phpBB/includes/db/dbal.php | 12 ++++++++++++ phpBB/includes/db/mssql.php | 8 ++++++++ phpBB/includes/db/mssql_odbc.php | 8 ++++++++ phpBB/includes/db/mssqlnative.php | 8 ++++++++ 4 files changed, 36 insertions(+) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/dbal.php b/phpBB/includes/db/dbal.php index 358df50402..9cc337955b 100644 --- a/phpBB/includes/db/dbal.php +++ b/phpBB/includes/db/dbal.php @@ -500,6 +500,18 @@ class dbal return $column_name . ' | ' . (1 << $bit) . (($compare) ? ' ' . $compare : ''); } + /** + * Run LOWER() on DB column of type text (i.e. neither varchar nor char). + * + * @param string $column_name The column name to use + * + * @return string A SQL statement like "LOWER($column_name)" + */ + function sql_lower_text($column_name) + { + return "LOWER($column_name)"; + } + /** * Run more than one insert statement. * diff --git a/phpBB/includes/db/mssql.php b/phpBB/includes/db/mssql.php index 6899a73902..b7178593dc 100644 --- a/phpBB/includes/db/mssql.php +++ b/phpBB/includes/db/mssql.php @@ -332,6 +332,14 @@ class dbal_mssql extends dbal return str_replace(array("'", "\0"), array("''", ''), $msg); } + /** + * {@inheritDoc} + */ + function sql_lower_text($column_name) + { + return "LOWER(SUBSTRING($column_name, 1, DATALENGTH($column_name)))"; + } + /** * Build LIKE expression * @access private diff --git a/phpBB/includes/db/mssql_odbc.php b/phpBB/includes/db/mssql_odbc.php index 34f7a87337..2ecc42cadf 100644 --- a/phpBB/includes/db/mssql_odbc.php +++ b/phpBB/includes/db/mssql_odbc.php @@ -310,6 +310,14 @@ class dbal_mssql_odbc extends dbal return str_replace(array("'", "\0"), array("''", ''), $msg); } + /** + * {@inheritDoc} + */ + function sql_lower_text($column_name) + { + return "LOWER(SUBSTRING($column_name, 1, DATALENGTH($column_name)))"; + } + /** * Build LIKE expression * @access private diff --git a/phpBB/includes/db/mssqlnative.php b/phpBB/includes/db/mssqlnative.php index 92ac9b1fb9..c91cc188b0 100644 --- a/phpBB/includes/db/mssqlnative.php +++ b/phpBB/includes/db/mssqlnative.php @@ -492,6 +492,14 @@ class dbal_mssqlnative extends dbal return str_replace(array("'", "\0"), array("''", ''), $msg); } + /** + * {@inheritDoc} + */ + function sql_lower_text($column_name) + { + return "LOWER(SUBSTRING($column_name, 1, DATALENGTH($column_name)))"; + } + /** * Build LIKE expression * @access private -- cgit v1.2.1 From 71374078b969ab429f0efcdf99158c1d21b138b6 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 20 Jun 2012 01:50:00 +0200 Subject: [ticket/10942] Add sql_conditional to dbal PHPBB3-10942 --- phpBB/includes/db/dbal.php | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/dbal.php b/phpBB/includes/db/dbal.php index cf54d455f7..bf0dc15fad 100644 --- a/phpBB/includes/db/dbal.php +++ b/phpBB/includes/db/dbal.php @@ -283,6 +283,23 @@ class dbal return $this->_sql_like_expression('LIKE \'' . $this->sql_escape($expression) . '\''); } + /** + * Build a conditional SQL query + * + * @param string $condition The condition which must be true, to use action_true rather then action_else + * @param string $action_true SQL statement that is used, if the condition is true + * @param string $action_else SQL statement that is used, if the condition is false, optional + * @return string CASE expression including the condition and statements + */ + function sql_conditional($condition, $action_true, $action_false = false) + { + $sql_condition = 'CASE WHEN ' . $condition; + $sql_condition .= ' THEN ' . $action_true; + $sql_condition .= ($action_false !== false) ? ' ELSE ' . $action_false : ''; + $sql_condition .= ' END'; + return $sql_condition; + } + /** * Returns whether results of a query need to be buffered to run a transaction while iterating over them. * -- cgit v1.2.1 From 1e3272bfced5e5a2295e6410ef1fec0800b58d99 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 20 Jun 2012 02:10:04 +0200 Subject: [ticket/10942] Add sql_concatenate to dbal PHPBB3-10942 --- phpBB/includes/db/dbal.php | 12 ++++++++++++ phpBB/includes/db/firebird.php | 8 ++++++++ phpBB/includes/db/mssql.php | 8 ++++++++ phpBB/includes/db/mssql_odbc.php | 8 ++++++++ phpBB/includes/db/mssqlnative.php | 8 ++++++++ phpBB/includes/db/postgres.php | 8 ++++++++ phpBB/includes/db/sqlite.php | 8 ++++++++ 7 files changed, 60 insertions(+) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/dbal.php b/phpBB/includes/db/dbal.php index bf0dc15fad..c040fa8e2d 100644 --- a/phpBB/includes/db/dbal.php +++ b/phpBB/includes/db/dbal.php @@ -300,6 +300,18 @@ class dbal return $sql_condition; } + /** + * Build a concatenated string + * + * @param string $string1 Base SQL statement where we append the second one + * @param string $string2 SQL statement that is appended on the first statement + * @return string Concatenated string + */ + function sql_concatenate($string1, $string2) + { + return 'CONCAT(' . $string1 . ', ' . $string2 . ')'; + } + /** * Returns whether results of a query need to be buffered to run a transaction while iterating over them. * diff --git a/phpBB/includes/db/firebird.php b/phpBB/includes/db/firebird.php index 7709e8fdf5..884206d298 100644 --- a/phpBB/includes/db/firebird.php +++ b/phpBB/includes/db/firebird.php @@ -110,6 +110,14 @@ class dbal_firebird extends dbal return ($raw) ? '2.1' : 'Firebird/Interbase'; } + /** + * {@inheritDoc} + */ + function sql_concatenate($string1, $string2) + { + return $string1 . ' || ' . $string2; + } + /** * SQL Transaction * @access private diff --git a/phpBB/includes/db/mssql.php b/phpBB/includes/db/mssql.php index abeabc389f..16b3b3c600 100644 --- a/phpBB/includes/db/mssql.php +++ b/phpBB/includes/db/mssql.php @@ -91,6 +91,14 @@ class dbal_mssql extends dbal return ($this->sql_server_version) ? 'MSSQL
' . $this->sql_server_version : 'MSSQL'; } + /** + * {@inheritDoc} + */ + function sql_concatenate($string1, $string2) + { + return $string1 . ' + ' . $string2; + } + /** * SQL Transaction * @access private diff --git a/phpBB/includes/db/mssql_odbc.php b/phpBB/includes/db/mssql_odbc.php index 6e24f4e9e8..c1ee1b43f0 100644 --- a/phpBB/includes/db/mssql_odbc.php +++ b/phpBB/includes/db/mssql_odbc.php @@ -109,6 +109,14 @@ class dbal_mssql_odbc extends dbal return ($this->sql_server_version) ? 'MSSQL (ODBC)
' . $this->sql_server_version : 'MSSQL (ODBC)'; } + /** + * {@inheritDoc} + */ + function sql_concatenate($string1, $string2) + { + return $string1 . ' + ' . $string2; + } + /** * SQL Transaction * @access private diff --git a/phpBB/includes/db/mssqlnative.php b/phpBB/includes/db/mssqlnative.php index 8a4503f111..db1bb86620 100644 --- a/phpBB/includes/db/mssqlnative.php +++ b/phpBB/includes/db/mssqlnative.php @@ -257,6 +257,14 @@ class dbal_mssqlnative extends dbal return ($this->sql_server_version) ? 'MSSQL
' . $this->sql_server_version : 'MSSQL'; } + /** + * {@inheritDoc} + */ + function sql_concatenate($string1, $string2) + { + return $string1 . ' + ' . $string2; + } + /** * {@inheritDoc} */ diff --git a/phpBB/includes/db/postgres.php b/phpBB/includes/db/postgres.php index bf22cffafa..dddf615f9c 100644 --- a/phpBB/includes/db/postgres.php +++ b/phpBB/includes/db/postgres.php @@ -154,6 +154,14 @@ class dbal_postgres extends dbal return ($raw) ? $this->sql_server_version : 'PostgreSQL ' . $this->sql_server_version; } + /** + * {@inheritDoc} + */ + function sql_concatenate($string1, $string2) + { + return $string1 . ' || ' . $string2; + } + /** * SQL Transaction * @access private diff --git a/phpBB/includes/db/sqlite.php b/phpBB/includes/db/sqlite.php index 86bfa75a13..38aba0624e 100644 --- a/phpBB/includes/db/sqlite.php +++ b/phpBB/includes/db/sqlite.php @@ -72,6 +72,14 @@ class dbal_sqlite extends dbal return ($raw) ? $this->sql_server_version : 'SQLite ' . $this->sql_server_version; } + /** + * {@inheritDoc} + */ + function sql_concatenate($string1, $string2) + { + return $string1 . ' || ' . $string2; + } + /** * SQL Transaction * @access private -- cgit v1.2.1 From c8e322d88f8195727c18eac90d30a5919e6fb8a0 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 20 Jun 2012 12:41:26 +0200 Subject: [ticket/10942] Fix sql_conditional for mssql, postgre and oracle PHPBB3-10942 --- phpBB/includes/db/mssql.php | 12 ++++++++++++ phpBB/includes/db/mssql_odbc.php | 12 ++++++++++++ phpBB/includes/db/mssqlnative.php | 12 ++++++++++++ phpBB/includes/db/oracle.php | 12 ++++++++++++ phpBB/includes/db/postgres.php | 12 ++++++++++++ 5 files changed, 60 insertions(+) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/mssql.php b/phpBB/includes/db/mssql.php index 16b3b3c600..ca8846b60d 100644 --- a/phpBB/includes/db/mssql.php +++ b/phpBB/includes/db/mssql.php @@ -91,6 +91,18 @@ class dbal_mssql extends dbal return ($this->sql_server_version) ? 'MSSQL
' . $this->sql_server_version : 'MSSQL'; } + /** + * {@inheritDoc} + */ + function sql_conditional($condition, $action_true, $action_false = false) + { + $sql_condition = 'CASE WHEN ' . $condition; + $sql_condition .= ' THEN CAST(' . $action_true . ' AS VARCHAR)'; + $sql_condition .= ($action_false !== false) ? ' ELSE CAST(' . $action_false . ' AS VARCHAR)' : ''; + $sql_condition .= ' END'; + return $sql_condition; + } + /** * {@inheritDoc} */ diff --git a/phpBB/includes/db/mssql_odbc.php b/phpBB/includes/db/mssql_odbc.php index c1ee1b43f0..814dd76373 100644 --- a/phpBB/includes/db/mssql_odbc.php +++ b/phpBB/includes/db/mssql_odbc.php @@ -109,6 +109,18 @@ class dbal_mssql_odbc extends dbal return ($this->sql_server_version) ? 'MSSQL (ODBC)
' . $this->sql_server_version : 'MSSQL (ODBC)'; } + /** + * {@inheritDoc} + */ + function sql_conditional($condition, $action_true, $action_false = false) + { + $sql_condition = 'CASE WHEN ' . $condition; + $sql_condition .= ' THEN CAST(' . $action_true . ' AS VARCHAR)'; + $sql_condition .= ($action_false !== false) ? ' ELSE CAST(' . $action_false . ' AS VARCHAR)' : ''; + $sql_condition .= ' END'; + return $sql_condition; + } + /** * {@inheritDoc} */ diff --git a/phpBB/includes/db/mssqlnative.php b/phpBB/includes/db/mssqlnative.php index db1bb86620..c6c34c8612 100644 --- a/phpBB/includes/db/mssqlnative.php +++ b/phpBB/includes/db/mssqlnative.php @@ -257,6 +257,18 @@ class dbal_mssqlnative extends dbal return ($this->sql_server_version) ? 'MSSQL
' . $this->sql_server_version : 'MSSQL'; } + /** + * {@inheritDoc} + */ + function sql_conditional($condition, $action_true, $action_false = false) + { + $sql_condition = 'CASE WHEN ' . $condition; + $sql_condition .= ' THEN CAST(' . $action_true . ' AS VARCHAR)'; + $sql_condition .= ($action_false !== false) ? ' ELSE CAST(' . $action_false . ' AS VARCHAR)' : ''; + $sql_condition .= ' END'; + return $sql_condition; + } + /** * {@inheritDoc} */ diff --git a/phpBB/includes/db/oracle.php b/phpBB/includes/db/oracle.php index 2e801532f0..f09e702951 100644 --- a/phpBB/includes/db/oracle.php +++ b/phpBB/includes/db/oracle.php @@ -89,6 +89,18 @@ class dbal_oracle extends dbal return $this->sql_server_version; } + /** + * {@inheritDoc} + */ + function sql_conditional($condition, $action_true, $action_false = false) + { + $sql_condition = 'CASE WHEN ' . $condition; + $sql_condition .= ' THEN CAST(' . $action_true . ' AS clob)'; + $sql_condition .= ($action_false !== false) ? ' ELSE CAST(' . $action_false . ' AS clob)' : ''; + $sql_condition .= ' END'; + return $sql_condition; + } + /** * SQL Transaction * @access private diff --git a/phpBB/includes/db/postgres.php b/phpBB/includes/db/postgres.php index dddf615f9c..a27fbb9d9f 100644 --- a/phpBB/includes/db/postgres.php +++ b/phpBB/includes/db/postgres.php @@ -154,6 +154,18 @@ class dbal_postgres extends dbal return ($raw) ? $this->sql_server_version : 'PostgreSQL ' . $this->sql_server_version; } + /** + * {@inheritDoc} + */ + function sql_conditional($condition, $action_true, $action_false = false) + { + $sql_condition = 'CASE WHEN ' . $condition; + $sql_condition .= ' THEN CAST(' . $action_true . ' AS TEXT)'; + $sql_condition .= ($action_false !== false) ? ' ELSE CAST(' . $action_false . ' AS TEXT)' : ''; + $sql_condition .= ' END'; + return $sql_condition; + } + /** * {@inheritDoc} */ -- cgit v1.2.1 From 79dfdf94063cf7cc64197e50807977acaf9a2e66 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 20 Jun 2012 12:50:12 +0200 Subject: [ticket/10942] Change term string to expression to avoid confusion PHPBB3-10942 --- phpBB/includes/db/dbal.php | 10 +++++----- phpBB/includes/db/firebird.php | 4 ++-- phpBB/includes/db/mssql.php | 4 ++-- phpBB/includes/db/mssql_odbc.php | 4 ++-- phpBB/includes/db/mssqlnative.php | 4 ++-- phpBB/includes/db/postgres.php | 4 ++-- phpBB/includes/db/sqlite.php | 4 ++-- 7 files changed, 17 insertions(+), 17 deletions(-) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/dbal.php b/phpBB/includes/db/dbal.php index c040fa8e2d..e85de28a4c 100644 --- a/phpBB/includes/db/dbal.php +++ b/phpBB/includes/db/dbal.php @@ -301,15 +301,15 @@ class dbal } /** - * Build a concatenated string + * Build a concatenated expression * - * @param string $string1 Base SQL statement where we append the second one - * @param string $string2 SQL statement that is appended on the first statement + * @param string $expr1 Base SQL expression where we append the second one + * @param string $expr2 SQL expression that is appended to the first expression * @return string Concatenated string */ - function sql_concatenate($string1, $string2) + function sql_concatenate($expr1, $expr2) { - return 'CONCAT(' . $string1 . ', ' . $string2 . ')'; + return 'CONCAT(' . $expr1 . ', ' . $expr2 . ')'; } /** diff --git a/phpBB/includes/db/firebird.php b/phpBB/includes/db/firebird.php index 884206d298..d6b16d0342 100644 --- a/phpBB/includes/db/firebird.php +++ b/phpBB/includes/db/firebird.php @@ -113,9 +113,9 @@ class dbal_firebird extends dbal /** * {@inheritDoc} */ - function sql_concatenate($string1, $string2) + function sql_concatenate($expr1, $expr2) { - return $string1 . ' || ' . $string2; + return $expr1 . ' || ' . $expr2; } /** diff --git a/phpBB/includes/db/mssql.php b/phpBB/includes/db/mssql.php index ca8846b60d..c64b289724 100644 --- a/phpBB/includes/db/mssql.php +++ b/phpBB/includes/db/mssql.php @@ -106,9 +106,9 @@ class dbal_mssql extends dbal /** * {@inheritDoc} */ - function sql_concatenate($string1, $string2) + function sql_concatenate($expr1, $expr2) { - return $string1 . ' + ' . $string2; + return $expr1 . ' + ' . $expr2; } /** diff --git a/phpBB/includes/db/mssql_odbc.php b/phpBB/includes/db/mssql_odbc.php index 814dd76373..d026e2d754 100644 --- a/phpBB/includes/db/mssql_odbc.php +++ b/phpBB/includes/db/mssql_odbc.php @@ -124,9 +124,9 @@ class dbal_mssql_odbc extends dbal /** * {@inheritDoc} */ - function sql_concatenate($string1, $string2) + function sql_concatenate($expr1, $expr2) { - return $string1 . ' + ' . $string2; + return $expr1 . ' + ' . $expr2; } /** diff --git a/phpBB/includes/db/mssqlnative.php b/phpBB/includes/db/mssqlnative.php index c6c34c8612..36c52278d6 100644 --- a/phpBB/includes/db/mssqlnative.php +++ b/phpBB/includes/db/mssqlnative.php @@ -272,9 +272,9 @@ class dbal_mssqlnative extends dbal /** * {@inheritDoc} */ - function sql_concatenate($string1, $string2) + function sql_concatenate($expr1, $expr2) { - return $string1 . ' + ' . $string2; + return $expr1 . ' + ' . $expr2; } /** diff --git a/phpBB/includes/db/postgres.php b/phpBB/includes/db/postgres.php index a27fbb9d9f..9da2fd0b40 100644 --- a/phpBB/includes/db/postgres.php +++ b/phpBB/includes/db/postgres.php @@ -169,9 +169,9 @@ class dbal_postgres extends dbal /** * {@inheritDoc} */ - function sql_concatenate($string1, $string2) + function sql_concatenate($expr1, $expr2) { - return $string1 . ' || ' . $string2; + return $expr1 . ' || ' . $expr2; } /** diff --git a/phpBB/includes/db/sqlite.php b/phpBB/includes/db/sqlite.php index 38aba0624e..6eb77e5a70 100644 --- a/phpBB/includes/db/sqlite.php +++ b/phpBB/includes/db/sqlite.php @@ -75,9 +75,9 @@ class dbal_sqlite extends dbal /** * {@inheritDoc} */ - function sql_concatenate($string1, $string2) + function sql_concatenate($expr1, $expr2) { - return $string1 . ' || ' . $string2; + return $expr1 . ' || ' . $expr2; } /** -- cgit v1.2.1 From 089e5f5c79965058a5288590a3a34d94f3bcb833 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 20 Jun 2012 12:57:08 +0200 Subject: [ticket/10942] Rename method sql_conditional() to sql_case() PHPBB3-10942 --- phpBB/includes/db/dbal.php | 18 +++++++++--------- phpBB/includes/db/mssql.php | 12 ++++++------ phpBB/includes/db/mssql_odbc.php | 12 ++++++------ phpBB/includes/db/mssqlnative.php | 12 ++++++------ phpBB/includes/db/oracle.php | 12 ++++++------ phpBB/includes/db/postgres.php | 12 ++++++------ 6 files changed, 39 insertions(+), 39 deletions(-) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/dbal.php b/phpBB/includes/db/dbal.php index e85de28a4c..9eb74ab617 100644 --- a/phpBB/includes/db/dbal.php +++ b/phpBB/includes/db/dbal.php @@ -284,20 +284,20 @@ class dbal } /** - * Build a conditional SQL query + * Build a case expression * * @param string $condition The condition which must be true, to use action_true rather then action_else - * @param string $action_true SQL statement that is used, if the condition is true - * @param string $action_else SQL statement that is used, if the condition is false, optional + * @param string $action_true SQL expression that is used, if the condition is true + * @param string $action_else SQL expression that is used, if the condition is false, optional * @return string CASE expression including the condition and statements */ - function sql_conditional($condition, $action_true, $action_false = false) + function sql_case($condition, $action_true, $action_false = false) { - $sql_condition = 'CASE WHEN ' . $condition; - $sql_condition .= ' THEN ' . $action_true; - $sql_condition .= ($action_false !== false) ? ' ELSE ' . $action_false : ''; - $sql_condition .= ' END'; - return $sql_condition; + $sql_case = 'CASE WHEN ' . $condition; + $sql_case .= ' THEN ' . $action_true; + $sql_case .= ($action_false !== false) ? ' ELSE ' . $action_false : ''; + $sql_case .= ' END'; + return $sql_case; } /** diff --git a/phpBB/includes/db/mssql.php b/phpBB/includes/db/mssql.php index c64b289724..0345e4f8f8 100644 --- a/phpBB/includes/db/mssql.php +++ b/phpBB/includes/db/mssql.php @@ -94,13 +94,13 @@ class dbal_mssql extends dbal /** * {@inheritDoc} */ - function sql_conditional($condition, $action_true, $action_false = false) + function sql_case($condition, $action_true, $action_false = false) { - $sql_condition = 'CASE WHEN ' . $condition; - $sql_condition .= ' THEN CAST(' . $action_true . ' AS VARCHAR)'; - $sql_condition .= ($action_false !== false) ? ' ELSE CAST(' . $action_false . ' AS VARCHAR)' : ''; - $sql_condition .= ' END'; - return $sql_condition; + $sql_case = 'CASE WHEN ' . $condition; + $sql_case .= ' THEN CAST(' . $action_true . ' AS VARCHAR)'; + $sql_case .= ($action_false !== false) ? ' ELSE CAST(' . $action_false . ' AS VARCHAR)' : ''; + $sql_case .= ' END'; + return $sql_case; } /** diff --git a/phpBB/includes/db/mssql_odbc.php b/phpBB/includes/db/mssql_odbc.php index d026e2d754..07da14bd53 100644 --- a/phpBB/includes/db/mssql_odbc.php +++ b/phpBB/includes/db/mssql_odbc.php @@ -112,13 +112,13 @@ class dbal_mssql_odbc extends dbal /** * {@inheritDoc} */ - function sql_conditional($condition, $action_true, $action_false = false) + function sql_case($condition, $action_true, $action_false = false) { - $sql_condition = 'CASE WHEN ' . $condition; - $sql_condition .= ' THEN CAST(' . $action_true . ' AS VARCHAR)'; - $sql_condition .= ($action_false !== false) ? ' ELSE CAST(' . $action_false . ' AS VARCHAR)' : ''; - $sql_condition .= ' END'; - return $sql_condition; + $sql_case = 'CASE WHEN ' . $condition; + $sql_case .= ' THEN CAST(' . $action_true . ' AS VARCHAR)'; + $sql_case .= ($action_false !== false) ? ' ELSE CAST(' . $action_false . ' AS VARCHAR)' : ''; + $sql_case .= ' END'; + return $sql_case; } /** diff --git a/phpBB/includes/db/mssqlnative.php b/phpBB/includes/db/mssqlnative.php index 36c52278d6..835b86f8c3 100644 --- a/phpBB/includes/db/mssqlnative.php +++ b/phpBB/includes/db/mssqlnative.php @@ -260,13 +260,13 @@ class dbal_mssqlnative extends dbal /** * {@inheritDoc} */ - function sql_conditional($condition, $action_true, $action_false = false) + function sql_case($condition, $action_true, $action_false = false) { - $sql_condition = 'CASE WHEN ' . $condition; - $sql_condition .= ' THEN CAST(' . $action_true . ' AS VARCHAR)'; - $sql_condition .= ($action_false !== false) ? ' ELSE CAST(' . $action_false . ' AS VARCHAR)' : ''; - $sql_condition .= ' END'; - return $sql_condition; + $sql_case = 'CASE WHEN ' . $condition; + $sql_case .= ' THEN CAST(' . $action_true . ' AS VARCHAR)'; + $sql_case .= ($action_false !== false) ? ' ELSE CAST(' . $action_false . ' AS VARCHAR)' : ''; + $sql_case .= ' END'; + return $sql_case; } /** diff --git a/phpBB/includes/db/oracle.php b/phpBB/includes/db/oracle.php index f09e702951..9e08979bc1 100644 --- a/phpBB/includes/db/oracle.php +++ b/phpBB/includes/db/oracle.php @@ -92,13 +92,13 @@ class dbal_oracle extends dbal /** * {@inheritDoc} */ - function sql_conditional($condition, $action_true, $action_false = false) + function sql_case($condition, $action_true, $action_false = false) { - $sql_condition = 'CASE WHEN ' . $condition; - $sql_condition .= ' THEN CAST(' . $action_true . ' AS clob)'; - $sql_condition .= ($action_false !== false) ? ' ELSE CAST(' . $action_false . ' AS clob)' : ''; - $sql_condition .= ' END'; - return $sql_condition; + $sql_case = 'CASE WHEN ' . $condition; + $sql_case .= ' THEN CAST(' . $action_true . ' AS clob)'; + $sql_case .= ($action_false !== false) ? ' ELSE CAST(' . $action_false . ' AS clob)' : ''; + $sql_case .= ' END'; + return $sql_case; } /** diff --git a/phpBB/includes/db/postgres.php b/phpBB/includes/db/postgres.php index 9da2fd0b40..1ceb0ed0a2 100644 --- a/phpBB/includes/db/postgres.php +++ b/phpBB/includes/db/postgres.php @@ -157,13 +157,13 @@ class dbal_postgres extends dbal /** * {@inheritDoc} */ - function sql_conditional($condition, $action_true, $action_false = false) + function sql_case($condition, $action_true, $action_false = false) { - $sql_condition = 'CASE WHEN ' . $condition; - $sql_condition .= ' THEN CAST(' . $action_true . ' AS TEXT)'; - $sql_condition .= ($action_false !== false) ? ' ELSE CAST(' . $action_false . ' AS TEXT)' : ''; - $sql_condition .= ' END'; - return $sql_condition; + $sql_case = 'CASE WHEN ' . $condition; + $sql_case .= ' THEN CAST(' . $action_true . ' AS TEXT)'; + $sql_case .= ($action_false !== false) ? ' ELSE CAST(' . $action_false . ' AS TEXT)' : ''; + $sql_case .= ' END'; + return $sql_case; } /** -- cgit v1.2.1 From c71f604327653bde3eea1b5d7150f5cc9c58a712 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 20 Jun 2012 23:30:31 +0200 Subject: [ticket/10942] Add a comment why we cast to sql_case() PHPBB3-10942 --- phpBB/includes/db/mssql.php | 1 + phpBB/includes/db/mssql_odbc.php | 1 + phpBB/includes/db/mssqlnative.php | 1 + phpBB/includes/db/oracle.php | 1 + phpBB/includes/db/postgres.php | 1 + 5 files changed, 5 insertions(+) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/mssql.php b/phpBB/includes/db/mssql.php index 0345e4f8f8..8888bb3939 100644 --- a/phpBB/includes/db/mssql.php +++ b/phpBB/includes/db/mssql.php @@ -96,6 +96,7 @@ class dbal_mssql extends dbal */ function sql_case($condition, $action_true, $action_false = false) { + // To ensure, that both expressions have the same type, we cast them to varchar manually $sql_case = 'CASE WHEN ' . $condition; $sql_case .= ' THEN CAST(' . $action_true . ' AS VARCHAR)'; $sql_case .= ($action_false !== false) ? ' ELSE CAST(' . $action_false . ' AS VARCHAR)' : ''; diff --git a/phpBB/includes/db/mssql_odbc.php b/phpBB/includes/db/mssql_odbc.php index 07da14bd53..a14d6adb14 100644 --- a/phpBB/includes/db/mssql_odbc.php +++ b/phpBB/includes/db/mssql_odbc.php @@ -114,6 +114,7 @@ class dbal_mssql_odbc extends dbal */ function sql_case($condition, $action_true, $action_false = false) { + // To ensure, that both expressions have the same type, we cast them to varchar manually $sql_case = 'CASE WHEN ' . $condition; $sql_case .= ' THEN CAST(' . $action_true . ' AS VARCHAR)'; $sql_case .= ($action_false !== false) ? ' ELSE CAST(' . $action_false . ' AS VARCHAR)' : ''; diff --git a/phpBB/includes/db/mssqlnative.php b/phpBB/includes/db/mssqlnative.php index 835b86f8c3..0001bc4ba7 100644 --- a/phpBB/includes/db/mssqlnative.php +++ b/phpBB/includes/db/mssqlnative.php @@ -262,6 +262,7 @@ class dbal_mssqlnative extends dbal */ function sql_case($condition, $action_true, $action_false = false) { + // To ensure, that both expressions have the same type, we cast them to varchar manually $sql_case = 'CASE WHEN ' . $condition; $sql_case .= ' THEN CAST(' . $action_true . ' AS VARCHAR)'; $sql_case .= ($action_false !== false) ? ' ELSE CAST(' . $action_false . ' AS VARCHAR)' : ''; diff --git a/phpBB/includes/db/oracle.php b/phpBB/includes/db/oracle.php index 9e08979bc1..dc405ab08a 100644 --- a/phpBB/includes/db/oracle.php +++ b/phpBB/includes/db/oracle.php @@ -94,6 +94,7 @@ class dbal_oracle extends dbal */ function sql_case($condition, $action_true, $action_false = false) { + // To ensure, that both expressions have the same type, we cast them to clob manually $sql_case = 'CASE WHEN ' . $condition; $sql_case .= ' THEN CAST(' . $action_true . ' AS clob)'; $sql_case .= ($action_false !== false) ? ' ELSE CAST(' . $action_false . ' AS clob)' : ''; diff --git a/phpBB/includes/db/postgres.php b/phpBB/includes/db/postgres.php index 1ceb0ed0a2..c3116601ae 100644 --- a/phpBB/includes/db/postgres.php +++ b/phpBB/includes/db/postgres.php @@ -159,6 +159,7 @@ class dbal_postgres extends dbal */ function sql_case($condition, $action_true, $action_false = false) { + // To ensure, that both expressions have the same type, we cast them to text manually $sql_case = 'CASE WHEN ' . $condition; $sql_case .= ' THEN CAST(' . $action_true . ' AS TEXT)'; $sql_case .= ($action_false !== false) ? ' ELSE CAST(' . $action_false . ' AS TEXT)' : ''; -- cgit v1.2.1 From a8cf926566c32097c61c14210990f2a7229ddfc7 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 2 Jul 2012 11:10:02 +0200 Subject: [ticket/10942] Require same data type and do not cast expressions automatically PHPBB3-10942 --- phpBB/includes/db/dbal.php | 2 ++ phpBB/includes/db/mssql.php | 13 ------------- phpBB/includes/db/mssql_odbc.php | 13 ------------- phpBB/includes/db/mssqlnative.php | 13 ------------- phpBB/includes/db/oracle.php | 13 ------------- phpBB/includes/db/postgres.php | 13 ------------- 6 files changed, 2 insertions(+), 65 deletions(-) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/dbal.php b/phpBB/includes/db/dbal.php index 9eb74ab617..8dbcd73b58 100644 --- a/phpBB/includes/db/dbal.php +++ b/phpBB/includes/db/dbal.php @@ -286,6 +286,8 @@ class dbal /** * Build a case expression * + * Note: The two statements action_true and action_false must have the same data type (int, vchar, ...) in the database! + * * @param string $condition The condition which must be true, to use action_true rather then action_else * @param string $action_true SQL expression that is used, if the condition is true * @param string $action_else SQL expression that is used, if the condition is false, optional diff --git a/phpBB/includes/db/mssql.php b/phpBB/includes/db/mssql.php index 8888bb3939..d24cbf329f 100644 --- a/phpBB/includes/db/mssql.php +++ b/phpBB/includes/db/mssql.php @@ -91,19 +91,6 @@ class dbal_mssql extends dbal return ($this->sql_server_version) ? 'MSSQL
' . $this->sql_server_version : 'MSSQL'; } - /** - * {@inheritDoc} - */ - function sql_case($condition, $action_true, $action_false = false) - { - // To ensure, that both expressions have the same type, we cast them to varchar manually - $sql_case = 'CASE WHEN ' . $condition; - $sql_case .= ' THEN CAST(' . $action_true . ' AS VARCHAR)'; - $sql_case .= ($action_false !== false) ? ' ELSE CAST(' . $action_false . ' AS VARCHAR)' : ''; - $sql_case .= ' END'; - return $sql_case; - } - /** * {@inheritDoc} */ diff --git a/phpBB/includes/db/mssql_odbc.php b/phpBB/includes/db/mssql_odbc.php index a14d6adb14..d64264470e 100644 --- a/phpBB/includes/db/mssql_odbc.php +++ b/phpBB/includes/db/mssql_odbc.php @@ -109,19 +109,6 @@ class dbal_mssql_odbc extends dbal return ($this->sql_server_version) ? 'MSSQL (ODBC)
' . $this->sql_server_version : 'MSSQL (ODBC)'; } - /** - * {@inheritDoc} - */ - function sql_case($condition, $action_true, $action_false = false) - { - // To ensure, that both expressions have the same type, we cast them to varchar manually - $sql_case = 'CASE WHEN ' . $condition; - $sql_case .= ' THEN CAST(' . $action_true . ' AS VARCHAR)'; - $sql_case .= ($action_false !== false) ? ' ELSE CAST(' . $action_false . ' AS VARCHAR)' : ''; - $sql_case .= ' END'; - return $sql_case; - } - /** * {@inheritDoc} */ diff --git a/phpBB/includes/db/mssqlnative.php b/phpBB/includes/db/mssqlnative.php index 0001bc4ba7..31c3a3721a 100644 --- a/phpBB/includes/db/mssqlnative.php +++ b/phpBB/includes/db/mssqlnative.php @@ -257,19 +257,6 @@ class dbal_mssqlnative extends dbal return ($this->sql_server_version) ? 'MSSQL
' . $this->sql_server_version : 'MSSQL'; } - /** - * {@inheritDoc} - */ - function sql_case($condition, $action_true, $action_false = false) - { - // To ensure, that both expressions have the same type, we cast them to varchar manually - $sql_case = 'CASE WHEN ' . $condition; - $sql_case .= ' THEN CAST(' . $action_true . ' AS VARCHAR)'; - $sql_case .= ($action_false !== false) ? ' ELSE CAST(' . $action_false . ' AS VARCHAR)' : ''; - $sql_case .= ' END'; - return $sql_case; - } - /** * {@inheritDoc} */ diff --git a/phpBB/includes/db/oracle.php b/phpBB/includes/db/oracle.php index dc405ab08a..2e801532f0 100644 --- a/phpBB/includes/db/oracle.php +++ b/phpBB/includes/db/oracle.php @@ -89,19 +89,6 @@ class dbal_oracle extends dbal return $this->sql_server_version; } - /** - * {@inheritDoc} - */ - function sql_case($condition, $action_true, $action_false = false) - { - // To ensure, that both expressions have the same type, we cast them to clob manually - $sql_case = 'CASE WHEN ' . $condition; - $sql_case .= ' THEN CAST(' . $action_true . ' AS clob)'; - $sql_case .= ($action_false !== false) ? ' ELSE CAST(' . $action_false . ' AS clob)' : ''; - $sql_case .= ' END'; - return $sql_case; - } - /** * SQL Transaction * @access private diff --git a/phpBB/includes/db/postgres.php b/phpBB/includes/db/postgres.php index c3116601ae..a31181b4d4 100644 --- a/phpBB/includes/db/postgres.php +++ b/phpBB/includes/db/postgres.php @@ -154,19 +154,6 @@ class dbal_postgres extends dbal return ($raw) ? $this->sql_server_version : 'PostgreSQL ' . $this->sql_server_version; } - /** - * {@inheritDoc} - */ - function sql_case($condition, $action_true, $action_false = false) - { - // To ensure, that both expressions have the same type, we cast them to text manually - $sql_case = 'CASE WHEN ' . $condition; - $sql_case .= ' THEN CAST(' . $action_true . ' AS TEXT)'; - $sql_case .= ($action_false !== false) ? ' ELSE CAST(' . $action_false . ' AS TEXT)' : ''; - $sql_case .= ' END'; - return $sql_case; - } - /** * {@inheritDoc} */ -- cgit v1.2.1 From fe1f21d1a55ac15b278d99c3a73a8e3424a38fd5 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 2 Jul 2012 23:11:21 +0200 Subject: [ticket/10942] Use ANSI SQL standard || in dbal.php PHPBB3-10942 --- phpBB/includes/db/dbal.php | 2 +- phpBB/includes/db/firebird.php | 8 -------- phpBB/includes/db/mysql.php | 8 ++++++++ phpBB/includes/db/mysqli.php | 8 ++++++++ phpBB/includes/db/postgres.php | 8 -------- phpBB/includes/db/sqlite.php | 8 -------- 6 files changed, 17 insertions(+), 25 deletions(-) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/dbal.php b/phpBB/includes/db/dbal.php index 8dbcd73b58..fded27a001 100644 --- a/phpBB/includes/db/dbal.php +++ b/phpBB/includes/db/dbal.php @@ -311,7 +311,7 @@ class dbal */ function sql_concatenate($expr1, $expr2) { - return 'CONCAT(' . $expr1 . ', ' . $expr2 . ')'; + return $expr1 . ' || ' . $expr2; } /** diff --git a/phpBB/includes/db/firebird.php b/phpBB/includes/db/firebird.php index d6b16d0342..7709e8fdf5 100644 --- a/phpBB/includes/db/firebird.php +++ b/phpBB/includes/db/firebird.php @@ -110,14 +110,6 @@ class dbal_firebird extends dbal return ($raw) ? '2.1' : 'Firebird/Interbase'; } - /** - * {@inheritDoc} - */ - function sql_concatenate($expr1, $expr2) - { - return $expr1 . ' || ' . $expr2; - } - /** * SQL Transaction * @access private diff --git a/phpBB/includes/db/mysql.php b/phpBB/includes/db/mysql.php index eb38e3e913..3cda5cc1e0 100644 --- a/phpBB/includes/db/mysql.php +++ b/phpBB/includes/db/mysql.php @@ -119,6 +119,14 @@ class dbal_mysql extends dbal return ($raw) ? $this->sql_server_version : 'MySQL ' . $this->sql_server_version; } + /** + * {@inheritDoc} + */ + function sql_concatenate($expr1, $expr2) + { + return 'CONCAT(' . $expr1 . ', ' . $expr2 . ')'; + } + /** * SQL Transaction * @access private diff --git a/phpBB/includes/db/mysqli.php b/phpBB/includes/db/mysqli.php index 4210a58002..e3828d9599 100644 --- a/phpBB/includes/db/mysqli.php +++ b/phpBB/includes/db/mysqli.php @@ -122,6 +122,14 @@ class dbal_mysqli extends dbal return ($raw) ? $this->sql_server_version : 'MySQL(i) ' . $this->sql_server_version; } + /** + * {@inheritDoc} + */ + function sql_concatenate($expr1, $expr2) + { + return 'CONCAT(' . $expr1 . ', ' . $expr2 . ')'; + } + /** * SQL Transaction * @access private diff --git a/phpBB/includes/db/postgres.php b/phpBB/includes/db/postgres.php index a31181b4d4..bf22cffafa 100644 --- a/phpBB/includes/db/postgres.php +++ b/phpBB/includes/db/postgres.php @@ -154,14 +154,6 @@ class dbal_postgres extends dbal return ($raw) ? $this->sql_server_version : 'PostgreSQL ' . $this->sql_server_version; } - /** - * {@inheritDoc} - */ - function sql_concatenate($expr1, $expr2) - { - return $expr1 . ' || ' . $expr2; - } - /** * SQL Transaction * @access private diff --git a/phpBB/includes/db/sqlite.php b/phpBB/includes/db/sqlite.php index 6eb77e5a70..86bfa75a13 100644 --- a/phpBB/includes/db/sqlite.php +++ b/phpBB/includes/db/sqlite.php @@ -72,14 +72,6 @@ class dbal_sqlite extends dbal return ($raw) ? $this->sql_server_version : 'SQLite ' . $this->sql_server_version; } - /** - * {@inheritDoc} - */ - function sql_concatenate($expr1, $expr2) - { - return $expr1 . ' || ' . $expr2; - } - /** * SQL Transaction * @access private -- cgit v1.2.1 From 6776feb0de667340d640744462d00436f893c45f Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 4 Jul 2012 14:05:03 +0200 Subject: [ticket/10942] Add access modifiers PHPBB3-10942 --- phpBB/includes/db/dbal.php | 4 ++-- phpBB/includes/db/mssql.php | 2 +- phpBB/includes/db/mssql_odbc.php | 2 +- phpBB/includes/db/mssqlnative.php | 2 +- phpBB/includes/db/mysql.php | 2 +- phpBB/includes/db/mysqli.php | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/dbal.php b/phpBB/includes/db/dbal.php index fded27a001..159703d3be 100644 --- a/phpBB/includes/db/dbal.php +++ b/phpBB/includes/db/dbal.php @@ -293,7 +293,7 @@ class dbal * @param string $action_else SQL expression that is used, if the condition is false, optional * @return string CASE expression including the condition and statements */ - function sql_case($condition, $action_true, $action_false = false) + public function sql_case($condition, $action_true, $action_false = false) { $sql_case = 'CASE WHEN ' . $condition; $sql_case .= ' THEN ' . $action_true; @@ -309,7 +309,7 @@ class dbal * @param string $expr2 SQL expression that is appended to the first expression * @return string Concatenated string */ - function sql_concatenate($expr1, $expr2) + public function sql_concatenate($expr1, $expr2) { return $expr1 . ' || ' . $expr2; } diff --git a/phpBB/includes/db/mssql.php b/phpBB/includes/db/mssql.php index d24cbf329f..fb044b492f 100644 --- a/phpBB/includes/db/mssql.php +++ b/phpBB/includes/db/mssql.php @@ -94,7 +94,7 @@ class dbal_mssql extends dbal /** * {@inheritDoc} */ - function sql_concatenate($expr1, $expr2) + public function sql_concatenate($expr1, $expr2) { return $expr1 . ' + ' . $expr2; } diff --git a/phpBB/includes/db/mssql_odbc.php b/phpBB/includes/db/mssql_odbc.php index d64264470e..64fa9634d1 100644 --- a/phpBB/includes/db/mssql_odbc.php +++ b/phpBB/includes/db/mssql_odbc.php @@ -112,7 +112,7 @@ class dbal_mssql_odbc extends dbal /** * {@inheritDoc} */ - function sql_concatenate($expr1, $expr2) + public function sql_concatenate($expr1, $expr2) { return $expr1 . ' + ' . $expr2; } diff --git a/phpBB/includes/db/mssqlnative.php b/phpBB/includes/db/mssqlnative.php index 31c3a3721a..7878615acc 100644 --- a/phpBB/includes/db/mssqlnative.php +++ b/phpBB/includes/db/mssqlnative.php @@ -260,7 +260,7 @@ class dbal_mssqlnative extends dbal /** * {@inheritDoc} */ - function sql_concatenate($expr1, $expr2) + public function sql_concatenate($expr1, $expr2) { return $expr1 . ' + ' . $expr2; } diff --git a/phpBB/includes/db/mysql.php b/phpBB/includes/db/mysql.php index 3cda5cc1e0..8d1f805870 100644 --- a/phpBB/includes/db/mysql.php +++ b/phpBB/includes/db/mysql.php @@ -122,7 +122,7 @@ class dbal_mysql extends dbal /** * {@inheritDoc} */ - function sql_concatenate($expr1, $expr2) + public function sql_concatenate($expr1, $expr2) { return 'CONCAT(' . $expr1 . ', ' . $expr2 . ')'; } diff --git a/phpBB/includes/db/mysqli.php b/phpBB/includes/db/mysqli.php index e3828d9599..e07cd35e24 100644 --- a/phpBB/includes/db/mysqli.php +++ b/phpBB/includes/db/mysqli.php @@ -125,7 +125,7 @@ class dbal_mysqli extends dbal /** * {@inheritDoc} */ - function sql_concatenate($expr1, $expr2) + public function sql_concatenate($expr1, $expr2) { return 'CONCAT(' . $expr1 . ', ' . $expr2 . ')'; } -- cgit v1.2.1 From ae07e80a6513b7277ba4a6a282df8281d2a37576 Mon Sep 17 00:00:00 2001 From: Patrick Webster Date: Tue, 17 Jul 2012 12:08:13 -0500 Subject: [ticket/10995] Return false in mssqlnative sql_fetchrow on empty result PHPBB3-10995 --- phpBB/includes/db/mssqlnative.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/mssqlnative.php b/phpBB/includes/db/mssqlnative.php index c91cc188b0..ff2f369706 100644 --- a/phpBB/includes/db/mssqlnative.php +++ b/phpBB/includes/db/mssqlnative.php @@ -436,7 +436,7 @@ class dbal_mssqlnative extends dbal unset($row['line2'], $row['line3']); } } - return $row; + return (sizeof($row)) ? $row : false; } /** -- cgit v1.2.1 From 3ecc81f853bb1ec6262fc0615bb0ab8704616db9 Mon Sep 17 00:00:00 2001 From: Dhruv Date: Sat, 21 Jul 2012 14:14:19 +0530 Subject: [feature/sphinx-fulltext-search] remove note from db_tools Note saying db_tools not being used currently is remove from db_tools.php We utilize db_tools in sphinx search. PHPBB3-10946 --- phpBB/includes/db/db_tools.php | 1 - 1 file changed, 1 deletion(-) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/db_tools.php b/phpBB/includes/db/db_tools.php index 73eae4e967..6df3aac9ce 100644 --- a/phpBB/includes/db/db_tools.php +++ b/phpBB/includes/db/db_tools.php @@ -20,7 +20,6 @@ if (!defined('IN_PHPBB')) * Currently not supported is returning SQL for creating tables. * * @package dbal -* @note currently not used within phpBB3, but may be utilized later. */ class phpbb_db_tools { -- cgit v1.2.1 From 828eaecf6ab4f6c013a7955bf6af2a81c049e42f Mon Sep 17 00:00:00 2001 From: Nathan Guse Date: Mon, 30 Jul 2012 15:24:31 -0500 Subject: [ticket/10875] Changes to Cache Driver caused method_exists checks to fail SQL Cache and other functions using the check method_exists($cache, failed because of the changes to the cache system. method_exists($cache has been changed to method_exists($cache->get_driver() PHPBB3-10875 --- phpBB/includes/db/firebird.php | 4 ++-- phpBB/includes/db/mssql.php | 4 ++-- phpBB/includes/db/mssql_odbc.php | 4 ++-- phpBB/includes/db/mssqlnative.php | 4 ++-- phpBB/includes/db/mysql.php | 4 ++-- phpBB/includes/db/mysqli.php | 4 ++-- phpBB/includes/db/oracle.php | 4 ++-- phpBB/includes/db/postgres.php | 4 ++-- phpBB/includes/db/sqlite.php | 4 ++-- 9 files changed, 18 insertions(+), 18 deletions(-) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/firebird.php b/phpBB/includes/db/firebird.php index 7709e8fdf5..f89d5134c1 100644 --- a/phpBB/includes/db/firebird.php +++ b/phpBB/includes/db/firebird.php @@ -156,7 +156,7 @@ class dbal_firebird extends dbal } $this->last_query_text = $query; - $this->query_result = ($cache_ttl && method_exists($cache, 'sql_load')) ? $cache->sql_load($query) : false; + $this->query_result = ($cache_ttl && method_exists($cache->get_driver(), 'sql_load')) ? $cache->sql_load($query) : false; $this->sql_add_num_queries($this->query_result); if ($this->query_result === false) @@ -269,7 +269,7 @@ class dbal_firebird extends dbal } } - if ($cache_ttl && method_exists($cache, 'sql_save')) + if ($cache_ttl && method_exists($cache->get_driver(), 'sql_save')) { $this->open_queries[(int) $this->query_result] = $this->query_result; $cache->sql_save($query, $this->query_result, $cache_ttl); diff --git a/phpBB/includes/db/mssql.php b/phpBB/includes/db/mssql.php index fb044b492f..4fad3f2297 100644 --- a/phpBB/includes/db/mssql.php +++ b/phpBB/includes/db/mssql.php @@ -144,7 +144,7 @@ class dbal_mssql extends dbal $this->sql_report('start', $query); } - $this->query_result = ($cache_ttl && method_exists($cache, 'sql_load')) ? $cache->sql_load($query) : false; + $this->query_result = ($cache_ttl && method_exists($cache->get_driver(), 'sql_load')) ? $cache->sql_load($query) : false; $this->sql_add_num_queries($this->query_result); if ($this->query_result === false) @@ -159,7 +159,7 @@ class dbal_mssql extends dbal $this->sql_report('stop', $query); } - if ($cache_ttl && method_exists($cache, 'sql_save')) + if ($cache_ttl && method_exists($cache->get_driver(), 'sql_save')) { $this->open_queries[(int) $this->query_result] = $this->query_result; $cache->sql_save($query, $this->query_result, $cache_ttl); diff --git a/phpBB/includes/db/mssql_odbc.php b/phpBB/includes/db/mssql_odbc.php index 64fa9634d1..594de28b8b 100644 --- a/phpBB/includes/db/mssql_odbc.php +++ b/phpBB/includes/db/mssql_odbc.php @@ -163,7 +163,7 @@ class dbal_mssql_odbc extends dbal } $this->last_query_text = $query; - $this->query_result = ($cache_ttl && method_exists($cache, 'sql_load')) ? $cache->sql_load($query) : false; + $this->query_result = ($cache_ttl && method_exists($cache->get_driver(), 'sql_load')) ? $cache->sql_load($query) : false; $this->sql_add_num_queries($this->query_result); if ($this->query_result === false) @@ -178,7 +178,7 @@ class dbal_mssql_odbc extends dbal $this->sql_report('stop', $query); } - if ($cache_ttl && method_exists($cache, 'sql_save')) + if ($cache_ttl && method_exists($cache->get_driver(), 'sql_save')) { $this->open_queries[(int) $this->query_result] = $this->query_result; $cache->sql_save($query, $this->query_result, $cache_ttl); diff --git a/phpBB/includes/db/mssqlnative.php b/phpBB/includes/db/mssqlnative.php index 1f37d54ecb..7f64ca1784 100644 --- a/phpBB/includes/db/mssqlnative.php +++ b/phpBB/includes/db/mssqlnative.php @@ -318,7 +318,7 @@ class dbal_mssqlnative extends dbal } $this->last_query_text = $query; - $this->query_result = ($cache_ttl && method_exists($cache, 'sql_load')) ? $cache->sql_load($query) : false; + $this->query_result = ($cache_ttl && method_exists($cache->get_driver(), 'sql_load')) ? $cache->sql_load($query) : false; $this->sql_add_num_queries($this->query_result); if ($this->query_result === false) @@ -335,7 +335,7 @@ class dbal_mssqlnative extends dbal $this->sql_report('stop', $query); } - if ($cache_ttl && method_exists($cache, 'sql_save')) + if ($cache_ttl && method_exists($cache->get_driver(), 'sql_save')) { $this->open_queries[(int) $this->query_result] = $this->query_result; $cache->sql_save($query, $this->query_result, $cache_ttl); diff --git a/phpBB/includes/db/mysql.php b/phpBB/includes/db/mysql.php index 8d1f805870..31bb59711a 100644 --- a/phpBB/includes/db/mysql.php +++ b/phpBB/includes/db/mysql.php @@ -172,7 +172,7 @@ class dbal_mysql extends dbal $this->sql_report('start', $query); } - $this->query_result = ($cache_ttl && method_exists($cache, 'sql_load')) ? $cache->sql_load($query) : false; + $this->query_result = ($cache_ttl && method_exists($cache->get_driver(), 'sql_load')) ? $cache->sql_load($query) : false; $this->sql_add_num_queries($this->query_result); if ($this->query_result === false) @@ -187,7 +187,7 @@ class dbal_mysql extends dbal $this->sql_report('stop', $query); } - if ($cache_ttl && method_exists($cache, 'sql_save')) + if ($cache_ttl && method_exists($cache->get_driver(), 'sql_save')) { $this->open_queries[(int) $this->query_result] = $this->query_result; $cache->sql_save($query, $this->query_result, $cache_ttl); diff --git a/phpBB/includes/db/mysqli.php b/phpBB/includes/db/mysqli.php index e07cd35e24..538cd23015 100644 --- a/phpBB/includes/db/mysqli.php +++ b/phpBB/includes/db/mysqli.php @@ -179,7 +179,7 @@ class dbal_mysqli extends dbal $this->sql_report('start', $query); } - $this->query_result = ($cache_ttl && method_exists($cache, 'sql_load')) ? $cache->sql_load($query) : false; + $this->query_result = ($cache_ttl && method_exists($cache->get_driver(), 'sql_load')) ? $cache->sql_load($query) : false; $this->sql_add_num_queries($this->query_result); if ($this->query_result === false) @@ -194,7 +194,7 @@ class dbal_mysqli extends dbal $this->sql_report('stop', $query); } - if ($cache_ttl && method_exists($cache, 'sql_save')) + if ($cache_ttl && method_exists($cache->get_driver(), 'sql_save')) { $cache->sql_save($query, $this->query_result, $cache_ttl); } diff --git a/phpBB/includes/db/oracle.php b/phpBB/includes/db/oracle.php index 2e801532f0..fbad325eb9 100644 --- a/phpBB/includes/db/oracle.php +++ b/phpBB/includes/db/oracle.php @@ -242,7 +242,7 @@ class dbal_oracle extends dbal } $this->last_query_text = $query; - $this->query_result = ($cache_ttl && method_exists($cache, 'sql_load')) ? $cache->sql_load($query) : false; + $this->query_result = ($cache_ttl && method_exists($cache->get_driver(), 'sql_load')) ? $cache->sql_load($query) : false; $this->sql_add_num_queries($this->query_result); if ($this->query_result === false) @@ -418,7 +418,7 @@ class dbal_oracle extends dbal $this->sql_report('stop', $query); } - if ($cache_ttl && method_exists($cache, 'sql_save')) + if ($cache_ttl && method_exists($cache->get_driver(), 'sql_save')) { $this->open_queries[(int) $this->query_result] = $this->query_result; $cache->sql_save($query, $this->query_result, $cache_ttl); diff --git a/phpBB/includes/db/postgres.php b/phpBB/includes/db/postgres.php index bf22cffafa..e40fe5e370 100644 --- a/phpBB/includes/db/postgres.php +++ b/phpBB/includes/db/postgres.php @@ -200,7 +200,7 @@ class dbal_postgres extends dbal } $this->last_query_text = $query; - $this->query_result = ($cache_ttl && method_exists($cache, 'sql_load')) ? $cache->sql_load($query) : false; + $this->query_result = ($cache_ttl && method_exists($cache->get_driver(), 'sql_load')) ? $cache->sql_load($query) : false; $this->sql_add_num_queries($this->query_result); if ($this->query_result === false) @@ -215,7 +215,7 @@ class dbal_postgres extends dbal $this->sql_report('stop', $query); } - if ($cache_ttl && method_exists($cache, 'sql_save')) + if ($cache_ttl && method_exists($cache->get_driver(), 'sql_save')) { $this->open_queries[(int) $this->query_result] = $this->query_result; $cache->sql_save($query, $this->query_result, $cache_ttl); diff --git a/phpBB/includes/db/sqlite.php b/phpBB/includes/db/sqlite.php index 86bfa75a13..e770dc0a91 100644 --- a/phpBB/includes/db/sqlite.php +++ b/phpBB/includes/db/sqlite.php @@ -117,7 +117,7 @@ class dbal_sqlite extends dbal $this->sql_report('start', $query); } - $this->query_result = ($cache_ttl && method_exists($cache, 'sql_load')) ? $cache->sql_load($query) : false; + $this->query_result = ($cache_ttl && method_exists($cache->get_driver(), 'sql_load')) ? $cache->sql_load($query) : false; $this->sql_add_num_queries($this->query_result); if ($this->query_result === false) @@ -132,7 +132,7 @@ class dbal_sqlite extends dbal $this->sql_report('stop', $query); } - if ($cache_ttl && method_exists($cache, 'sql_save')) + if ($cache_ttl && method_exists($cache->get_driver(), 'sql_save')) { $this->open_queries[(int) $this->query_result] = $this->query_result; $cache->sql_save($query, $this->query_result, $cache_ttl); -- cgit v1.2.1 From edcac438df164764c84ca9fb7a7f751bf76d5c34 Mon Sep 17 00:00:00 2001 From: Nathan Guse Date: Mon, 30 Jul 2012 15:57:51 -0500 Subject: [ticket/10875] method_exists check is not required, interface declares them The changes to the cache drivers added an interface, which requires many cache functions exist. For these, we can remove the method_exists() check PHPBB3-10875 --- phpBB/includes/db/firebird.php | 4 ++-- phpBB/includes/db/mssql.php | 4 ++-- phpBB/includes/db/mssql_odbc.php | 4 ++-- phpBB/includes/db/mssqlnative.php | 4 ++-- phpBB/includes/db/mysql.php | 4 ++-- phpBB/includes/db/mysqli.php | 4 ++-- phpBB/includes/db/oracle.php | 4 ++-- phpBB/includes/db/postgres.php | 4 ++-- phpBB/includes/db/sqlite.php | 4 ++-- 9 files changed, 18 insertions(+), 18 deletions(-) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/firebird.php b/phpBB/includes/db/firebird.php index f89d5134c1..06c76fa94a 100644 --- a/phpBB/includes/db/firebird.php +++ b/phpBB/includes/db/firebird.php @@ -156,7 +156,7 @@ class dbal_firebird extends dbal } $this->last_query_text = $query; - $this->query_result = ($cache_ttl && method_exists($cache->get_driver(), 'sql_load')) ? $cache->sql_load($query) : false; + $this->query_result = ($cache_ttl) ? $cache->sql_load($query) : false; $this->sql_add_num_queries($this->query_result); if ($this->query_result === false) @@ -269,7 +269,7 @@ class dbal_firebird extends dbal } } - if ($cache_ttl && method_exists($cache->get_driver(), 'sql_save')) + if ($cache_ttl) { $this->open_queries[(int) $this->query_result] = $this->query_result; $cache->sql_save($query, $this->query_result, $cache_ttl); diff --git a/phpBB/includes/db/mssql.php b/phpBB/includes/db/mssql.php index 4fad3f2297..e40510835a 100644 --- a/phpBB/includes/db/mssql.php +++ b/phpBB/includes/db/mssql.php @@ -144,7 +144,7 @@ class dbal_mssql extends dbal $this->sql_report('start', $query); } - $this->query_result = ($cache_ttl && method_exists($cache->get_driver(), 'sql_load')) ? $cache->sql_load($query) : false; + $this->query_result = ($cache_ttl) ? $cache->sql_load($query) : false; $this->sql_add_num_queries($this->query_result); if ($this->query_result === false) @@ -159,7 +159,7 @@ class dbal_mssql extends dbal $this->sql_report('stop', $query); } - if ($cache_ttl && method_exists($cache->get_driver(), 'sql_save')) + if ($cache_ttl) { $this->open_queries[(int) $this->query_result] = $this->query_result; $cache->sql_save($query, $this->query_result, $cache_ttl); diff --git a/phpBB/includes/db/mssql_odbc.php b/phpBB/includes/db/mssql_odbc.php index 594de28b8b..3c9a9599ec 100644 --- a/phpBB/includes/db/mssql_odbc.php +++ b/phpBB/includes/db/mssql_odbc.php @@ -163,7 +163,7 @@ class dbal_mssql_odbc extends dbal } $this->last_query_text = $query; - $this->query_result = ($cache_ttl && method_exists($cache->get_driver(), 'sql_load')) ? $cache->sql_load($query) : false; + $this->query_result = ($cache_ttl) ? $cache->sql_load($query) : false; $this->sql_add_num_queries($this->query_result); if ($this->query_result === false) @@ -178,7 +178,7 @@ class dbal_mssql_odbc extends dbal $this->sql_report('stop', $query); } - if ($cache_ttl && method_exists($cache->get_driver(), 'sql_save')) + if ($cache_ttl) { $this->open_queries[(int) $this->query_result] = $this->query_result; $cache->sql_save($query, $this->query_result, $cache_ttl); diff --git a/phpBB/includes/db/mssqlnative.php b/phpBB/includes/db/mssqlnative.php index 7f64ca1784..d35337d05b 100644 --- a/phpBB/includes/db/mssqlnative.php +++ b/phpBB/includes/db/mssqlnative.php @@ -318,7 +318,7 @@ class dbal_mssqlnative extends dbal } $this->last_query_text = $query; - $this->query_result = ($cache_ttl && method_exists($cache->get_driver(), 'sql_load')) ? $cache->sql_load($query) : false; + $this->query_result = ($cache_ttl) ? $cache->sql_load($query) : false; $this->sql_add_num_queries($this->query_result); if ($this->query_result === false) @@ -335,7 +335,7 @@ class dbal_mssqlnative extends dbal $this->sql_report('stop', $query); } - if ($cache_ttl && method_exists($cache->get_driver(), 'sql_save')) + if ($cache_ttl) { $this->open_queries[(int) $this->query_result] = $this->query_result; $cache->sql_save($query, $this->query_result, $cache_ttl); diff --git a/phpBB/includes/db/mysql.php b/phpBB/includes/db/mysql.php index 31bb59711a..dbab1ec0b8 100644 --- a/phpBB/includes/db/mysql.php +++ b/phpBB/includes/db/mysql.php @@ -172,7 +172,7 @@ class dbal_mysql extends dbal $this->sql_report('start', $query); } - $this->query_result = ($cache_ttl && method_exists($cache->get_driver(), 'sql_load')) ? $cache->sql_load($query) : false; + $this->query_result = ($cache_ttl) ? $cache->sql_load($query) : false; $this->sql_add_num_queries($this->query_result); if ($this->query_result === false) @@ -187,7 +187,7 @@ class dbal_mysql extends dbal $this->sql_report('stop', $query); } - if ($cache_ttl && method_exists($cache->get_driver(), 'sql_save')) + if ($cache_ttl) { $this->open_queries[(int) $this->query_result] = $this->query_result; $cache->sql_save($query, $this->query_result, $cache_ttl); diff --git a/phpBB/includes/db/mysqli.php b/phpBB/includes/db/mysqli.php index 538cd23015..fc98de31fb 100644 --- a/phpBB/includes/db/mysqli.php +++ b/phpBB/includes/db/mysqli.php @@ -179,7 +179,7 @@ class dbal_mysqli extends dbal $this->sql_report('start', $query); } - $this->query_result = ($cache_ttl && method_exists($cache->get_driver(), 'sql_load')) ? $cache->sql_load($query) : false; + $this->query_result = ($cache_ttl) ? $cache->sql_load($query) : false; $this->sql_add_num_queries($this->query_result); if ($this->query_result === false) @@ -194,7 +194,7 @@ class dbal_mysqli extends dbal $this->sql_report('stop', $query); } - if ($cache_ttl && method_exists($cache->get_driver(), 'sql_save')) + if ($cache_ttl) { $cache->sql_save($query, $this->query_result, $cache_ttl); } diff --git a/phpBB/includes/db/oracle.php b/phpBB/includes/db/oracle.php index fbad325eb9..4954f4d398 100644 --- a/phpBB/includes/db/oracle.php +++ b/phpBB/includes/db/oracle.php @@ -242,7 +242,7 @@ class dbal_oracle extends dbal } $this->last_query_text = $query; - $this->query_result = ($cache_ttl && method_exists($cache->get_driver(), 'sql_load')) ? $cache->sql_load($query) : false; + $this->query_result = ($cache_ttl) ? $cache->sql_load($query) : false; $this->sql_add_num_queries($this->query_result); if ($this->query_result === false) @@ -418,7 +418,7 @@ class dbal_oracle extends dbal $this->sql_report('stop', $query); } - if ($cache_ttl && method_exists($cache->get_driver(), 'sql_save')) + if ($cache_ttl) { $this->open_queries[(int) $this->query_result] = $this->query_result; $cache->sql_save($query, $this->query_result, $cache_ttl); diff --git a/phpBB/includes/db/postgres.php b/phpBB/includes/db/postgres.php index e40fe5e370..41838d2613 100644 --- a/phpBB/includes/db/postgres.php +++ b/phpBB/includes/db/postgres.php @@ -200,7 +200,7 @@ class dbal_postgres extends dbal } $this->last_query_text = $query; - $this->query_result = ($cache_ttl && method_exists($cache->get_driver(), 'sql_load')) ? $cache->sql_load($query) : false; + $this->query_result = ($cache_ttl) ? $cache->sql_load($query) : false; $this->sql_add_num_queries($this->query_result); if ($this->query_result === false) @@ -215,7 +215,7 @@ class dbal_postgres extends dbal $this->sql_report('stop', $query); } - if ($cache_ttl && method_exists($cache->get_driver(), 'sql_save')) + if ($cache_ttl) { $this->open_queries[(int) $this->query_result] = $this->query_result; $cache->sql_save($query, $this->query_result, $cache_ttl); diff --git a/phpBB/includes/db/sqlite.php b/phpBB/includes/db/sqlite.php index e770dc0a91..d930567773 100644 --- a/phpBB/includes/db/sqlite.php +++ b/phpBB/includes/db/sqlite.php @@ -117,7 +117,7 @@ class dbal_sqlite extends dbal $this->sql_report('start', $query); } - $this->query_result = ($cache_ttl && method_exists($cache->get_driver(), 'sql_load')) ? $cache->sql_load($query) : false; + $this->query_result = ($cache_ttl) ? $cache->sql_load($query) : false; $this->sql_add_num_queries($this->query_result); if ($this->query_result === false) @@ -132,7 +132,7 @@ class dbal_sqlite extends dbal $this->sql_report('stop', $query); } - if ($cache_ttl && method_exists($cache->get_driver(), 'sql_save')) + if ($cache_ttl) { $this->open_queries[(int) $this->query_result] = $this->query_result; $cache->sql_save($query, $this->query_result, $cache_ttl); -- cgit v1.2.1 From 01bc818d465ab168288e260745a045ff2794648d Mon Sep 17 00:00:00 2001 From: Nathan Guse Date: Mon, 30 Jul 2012 18:44:40 -0500 Subject: [ticket/10875] Fix SQL Caching The sql_save function cannot take arguments by reference since it is called by call_user_func_array() Replace use of isset($cache->sql_rowset[$query_id]) with $cache->sql_exists Replace $cache->cache_dir with $cache->get_driver()->cache_dir PHPBB3-10875 --- phpBB/includes/db/dbal.php | 4 ++-- phpBB/includes/db/firebird.php | 4 ++-- phpBB/includes/db/mssql.php | 6 +++--- phpBB/includes/db/mssql_odbc.php | 4 ++-- phpBB/includes/db/mssqlnative.php | 4 ++-- phpBB/includes/db/mysql.php | 6 +++--- phpBB/includes/db/mysqli.php | 6 +++--- phpBB/includes/db/oracle.php | 6 +++--- phpBB/includes/db/postgres.php | 6 +++--- phpBB/includes/db/sqlite.php | 6 +++--- 10 files changed, 26 insertions(+), 26 deletions(-) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/dbal.php b/phpBB/includes/db/dbal.php index 159703d3be..1de236d3de 100644 --- a/phpBB/includes/db/dbal.php +++ b/phpBB/includes/db/dbal.php @@ -206,7 +206,7 @@ class dbal $query_id = $this->query_result; } - if (isset($cache->sql_rowset[$query_id])) + if ($cache->sql_exists($query_id)) { return $cache->sql_rowseek($rownum, $query_id); } @@ -256,7 +256,7 @@ class dbal $this->sql_rowseek($rownum, $query_id); } - if (!is_object($query_id) && isset($cache->sql_rowset[$query_id])) + if (!is_object($query_id) && $cache->sql_exists($query_id)) { return $cache->sql_fetchfield($query_id, $field); } diff --git a/phpBB/includes/db/firebird.php b/phpBB/includes/db/firebird.php index 06c76fa94a..99deb5603e 100644 --- a/phpBB/includes/db/firebird.php +++ b/phpBB/includes/db/firebird.php @@ -332,7 +332,7 @@ class dbal_firebird extends dbal $query_id = $this->query_result; } - if (isset($cache->sql_rowset[$query_id])) + if ($cache->sql_exists($query_id)) { return $cache->sql_fetchrow($query_id); } @@ -398,7 +398,7 @@ class dbal_firebird extends dbal $query_id = $this->query_result; } - if (isset($cache->sql_rowset[$query_id])) + if ($cache->sql_exists($query_id)) { return $cache->sql_freeresult($query_id); } diff --git a/phpBB/includes/db/mssql.php b/phpBB/includes/db/mssql.php index e40510835a..d92fe27b99 100644 --- a/phpBB/includes/db/mssql.php +++ b/phpBB/includes/db/mssql.php @@ -234,7 +234,7 @@ class dbal_mssql extends dbal $query_id = $this->query_result; } - if (isset($cache->sql_rowset[$query_id])) + if ($cache->sql_exists($query_id)) { return $cache->sql_fetchrow($query_id); } @@ -271,7 +271,7 @@ class dbal_mssql extends dbal $query_id = $this->query_result; } - if (isset($cache->sql_rowset[$query_id])) + if ($cache->sql_exists($query_id)) { return $cache->sql_rowseek($rownum, $query_id); } @@ -310,7 +310,7 @@ class dbal_mssql extends dbal $query_id = $this->query_result; } - if (isset($cache->sql_rowset[$query_id])) + if ($cache->sql_exists($query_id)) { return $cache->sql_freeresult($query_id); } diff --git a/phpBB/includes/db/mssql_odbc.php b/phpBB/includes/db/mssql_odbc.php index 3c9a9599ec..6292792a55 100644 --- a/phpBB/includes/db/mssql_odbc.php +++ b/phpBB/includes/db/mssql_odbc.php @@ -254,7 +254,7 @@ class dbal_mssql_odbc extends dbal $query_id = $this->query_result; } - if (isset($cache->sql_rowset[$query_id])) + if ($cache->sql_exists($query_id)) { return $cache->sql_fetchrow($query_id); } @@ -295,7 +295,7 @@ class dbal_mssql_odbc extends dbal $query_id = $this->query_result; } - if (isset($cache->sql_rowset[$query_id])) + if ($cache->sql_exists($query_id)) { return $cache->sql_freeresult($query_id); } diff --git a/phpBB/includes/db/mssqlnative.php b/phpBB/includes/db/mssqlnative.php index d35337d05b..0d8786171a 100644 --- a/phpBB/includes/db/mssqlnative.php +++ b/phpBB/includes/db/mssqlnative.php @@ -418,7 +418,7 @@ class dbal_mssqlnative extends dbal $query_id = $this->query_result; } - if (isset($cache->sql_rowset[$query_id])) + if ($cache->sql_exists($query_id)) { return $cache->sql_fetchrow($query_id); } @@ -478,7 +478,7 @@ class dbal_mssqlnative extends dbal $query_id = $this->query_result; } - if (isset($cache->sql_rowset[$query_id])) + if ($cache->sql_exists($query_id)) { return $cache->sql_freeresult($query_id); } diff --git a/phpBB/includes/db/mysql.php b/phpBB/includes/db/mysql.php index dbab1ec0b8..fd567af076 100644 --- a/phpBB/includes/db/mysql.php +++ b/phpBB/includes/db/mysql.php @@ -249,7 +249,7 @@ class dbal_mysql extends dbal $query_id = $this->query_result; } - if (isset($cache->sql_rowset[$query_id])) + if ($cache->sql_exists($query_id)) { return $cache->sql_fetchrow($query_id); } @@ -270,7 +270,7 @@ class dbal_mysql extends dbal $query_id = $this->query_result; } - if (isset($cache->sql_rowset[$query_id])) + if ($cache->sql_exists($query_id)) { return $cache->sql_rowseek($rownum, $query_id); } @@ -298,7 +298,7 @@ class dbal_mysql extends dbal $query_id = $this->query_result; } - if (isset($cache->sql_rowset[$query_id])) + if ($cache->sql_exists($query_id)) { return $cache->sql_freeresult($query_id); } diff --git a/phpBB/includes/db/mysqli.php b/phpBB/includes/db/mysqli.php index fc98de31fb..26cade2ff0 100644 --- a/phpBB/includes/db/mysqli.php +++ b/phpBB/includes/db/mysqli.php @@ -251,7 +251,7 @@ class dbal_mysqli extends dbal $query_id = $this->query_result; } - if (!is_object($query_id) && isset($cache->sql_rowset[$query_id])) + if (!is_object($query_id) && $cache->sql_exists($query_id)) { return $cache->sql_fetchrow($query_id); } @@ -278,7 +278,7 @@ class dbal_mysqli extends dbal $query_id = $this->query_result; } - if (!is_object($query_id) && isset($cache->sql_rowset[$query_id])) + if (!is_object($query_id) && $cache->sql_exists($query_id)) { return $cache->sql_rowseek($rownum, $query_id); } @@ -306,7 +306,7 @@ class dbal_mysqli extends dbal $query_id = $this->query_result; } - if (!is_object($query_id) && isset($cache->sql_rowset[$query_id])) + if (!is_object($query_id) && $cache->sql_exists($query_id)) { return $cache->sql_freeresult($query_id); } diff --git a/phpBB/includes/db/oracle.php b/phpBB/includes/db/oracle.php index 4954f4d398..e9ff2f4434 100644 --- a/phpBB/includes/db/oracle.php +++ b/phpBB/includes/db/oracle.php @@ -473,7 +473,7 @@ class dbal_oracle extends dbal $query_id = $this->query_result; } - if (isset($cache->sql_rowset[$query_id])) + if ($cache->sql_exists($query_id)) { return $cache->sql_fetchrow($query_id); } @@ -525,7 +525,7 @@ class dbal_oracle extends dbal $query_id = $this->query_result; } - if (isset($cache->sql_rowset[$query_id])) + if ($cache->sql_exists($query_id)) { return $cache->sql_rowseek($rownum, $query_id); } @@ -594,7 +594,7 @@ class dbal_oracle extends dbal $query_id = $this->query_result; } - if (isset($cache->sql_rowset[$query_id])) + if ($cache->sql_exists($query_id)) { return $cache->sql_freeresult($query_id); } diff --git a/phpBB/includes/db/postgres.php b/phpBB/includes/db/postgres.php index 41838d2613..c35199e917 100644 --- a/phpBB/includes/db/postgres.php +++ b/phpBB/includes/db/postgres.php @@ -285,7 +285,7 @@ class dbal_postgres extends dbal $query_id = $this->query_result; } - if (isset($cache->sql_rowset[$query_id])) + if ($cache->sql_exists($query_id)) { return $cache->sql_fetchrow($query_id); } @@ -306,7 +306,7 @@ class dbal_postgres extends dbal $query_id = $this->query_result; } - if (isset($cache->sql_rowset[$query_id])) + if ($cache->sql_exists($query_id)) { return $cache->sql_rowseek($rownum, $query_id); } @@ -355,7 +355,7 @@ class dbal_postgres extends dbal $query_id = $this->query_result; } - if (isset($cache->sql_rowset[$query_id])) + if ($cache->sql_exists($query_id)) { return $cache->sql_freeresult($query_id); } diff --git a/phpBB/includes/db/sqlite.php b/phpBB/includes/db/sqlite.php index d930567773..814b593f05 100644 --- a/phpBB/includes/db/sqlite.php +++ b/phpBB/includes/db/sqlite.php @@ -193,7 +193,7 @@ class dbal_sqlite extends dbal $query_id = $this->query_result; } - if (isset($cache->sql_rowset[$query_id])) + if ($cache->sql_exists($query_id)) { return $cache->sql_fetchrow($query_id); } @@ -214,7 +214,7 @@ class dbal_sqlite extends dbal $query_id = $this->query_result; } - if (isset($cache->sql_rowset[$query_id])) + if ($cache->sql_exists($query_id)) { return $cache->sql_rowseek($rownum, $query_id); } @@ -242,7 +242,7 @@ class dbal_sqlite extends dbal $query_id = $this->query_result; } - if (isset($cache->sql_rowset[$query_id])) + if ($cache->sql_exists($query_id)) { return $cache->sql_freeresult($query_id); } -- cgit v1.2.1 From dcefa16318f6dc1058595a7ba221b75ed6a2504b Mon Sep 17 00:00:00 2001 From: Nathan Guse Date: Mon, 6 Aug 2012 16:26:55 -0500 Subject: [ticket/10875] Return $query_id from sql_save Have to return the $query_id from sql_save so that the results can be pulled Updated cache test to do some basic sql cache testing. PHPBB3-10875 --- phpBB/includes/db/firebird.php | 2 +- phpBB/includes/db/mssql.php | 2 +- phpBB/includes/db/mssql_odbc.php | 2 +- phpBB/includes/db/mssqlnative.php | 2 +- phpBB/includes/db/mysql.php | 2 +- phpBB/includes/db/mysqli.php | 2 +- phpBB/includes/db/oracle.php | 2 +- phpBB/includes/db/postgres.php | 2 +- phpBB/includes/db/sqlite.php | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/firebird.php b/phpBB/includes/db/firebird.php index 99deb5603e..9f9b8a1abd 100644 --- a/phpBB/includes/db/firebird.php +++ b/phpBB/includes/db/firebird.php @@ -272,7 +272,7 @@ class dbal_firebird extends dbal if ($cache_ttl) { $this->open_queries[(int) $this->query_result] = $this->query_result; - $cache->sql_save($query, $this->query_result, $cache_ttl); + $this->query_result = $cache->sql_save($query, $this->query_result, $cache_ttl); } else if (strpos($query, 'SELECT') === 0 && $this->query_result) { diff --git a/phpBB/includes/db/mssql.php b/phpBB/includes/db/mssql.php index d92fe27b99..bde283c3ea 100644 --- a/phpBB/includes/db/mssql.php +++ b/phpBB/includes/db/mssql.php @@ -162,7 +162,7 @@ class dbal_mssql extends dbal if ($cache_ttl) { $this->open_queries[(int) $this->query_result] = $this->query_result; - $cache->sql_save($query, $this->query_result, $cache_ttl); + $this->query_result = $cache->sql_save($query, $this->query_result, $cache_ttl); } else if (strpos($query, 'SELECT') === 0 && $this->query_result) { diff --git a/phpBB/includes/db/mssql_odbc.php b/phpBB/includes/db/mssql_odbc.php index 6292792a55..687bc52abc 100644 --- a/phpBB/includes/db/mssql_odbc.php +++ b/phpBB/includes/db/mssql_odbc.php @@ -181,7 +181,7 @@ class dbal_mssql_odbc extends dbal if ($cache_ttl) { $this->open_queries[(int) $this->query_result] = $this->query_result; - $cache->sql_save($query, $this->query_result, $cache_ttl); + $this->query_result = $cache->sql_save($query, $this->query_result, $cache_ttl); } else if (strpos($query, 'SELECT') === 0 && $this->query_result) { diff --git a/phpBB/includes/db/mssqlnative.php b/phpBB/includes/db/mssqlnative.php index 0d8786171a..36ff461a29 100644 --- a/phpBB/includes/db/mssqlnative.php +++ b/phpBB/includes/db/mssqlnative.php @@ -338,7 +338,7 @@ class dbal_mssqlnative extends dbal if ($cache_ttl) { $this->open_queries[(int) $this->query_result] = $this->query_result; - $cache->sql_save($query, $this->query_result, $cache_ttl); + $this->query_result = $cache->sql_save($query, $this->query_result, $cache_ttl); } else if (strpos($query, 'SELECT') === 0 && $this->query_result) { diff --git a/phpBB/includes/db/mysql.php b/phpBB/includes/db/mysql.php index fd567af076..5b4ff86579 100644 --- a/phpBB/includes/db/mysql.php +++ b/phpBB/includes/db/mysql.php @@ -190,7 +190,7 @@ class dbal_mysql extends dbal if ($cache_ttl) { $this->open_queries[(int) $this->query_result] = $this->query_result; - $cache->sql_save($query, $this->query_result, $cache_ttl); + $this->query_result = $cache->sql_save($query, $this->query_result, $cache_ttl); } else if (strpos($query, 'SELECT') === 0 && $this->query_result) { diff --git a/phpBB/includes/db/mysqli.php b/phpBB/includes/db/mysqli.php index 26cade2ff0..1f13bd5459 100644 --- a/phpBB/includes/db/mysqli.php +++ b/phpBB/includes/db/mysqli.php @@ -196,7 +196,7 @@ class dbal_mysqli extends dbal if ($cache_ttl) { - $cache->sql_save($query, $this->query_result, $cache_ttl); + $this->query_result = $cache->sql_save($query, $this->query_result, $cache_ttl); } } else if (defined('DEBUG_EXTRA')) diff --git a/phpBB/includes/db/oracle.php b/phpBB/includes/db/oracle.php index e9ff2f4434..de2729e973 100644 --- a/phpBB/includes/db/oracle.php +++ b/phpBB/includes/db/oracle.php @@ -421,7 +421,7 @@ class dbal_oracle extends dbal if ($cache_ttl) { $this->open_queries[(int) $this->query_result] = $this->query_result; - $cache->sql_save($query, $this->query_result, $cache_ttl); + $this->query_result = $cache->sql_save($query, $this->query_result, $cache_ttl); } else if (strpos($query, 'SELECT') === 0 && $this->query_result) { diff --git a/phpBB/includes/db/postgres.php b/phpBB/includes/db/postgres.php index c35199e917..f0a4a7a7a2 100644 --- a/phpBB/includes/db/postgres.php +++ b/phpBB/includes/db/postgres.php @@ -218,7 +218,7 @@ class dbal_postgres extends dbal if ($cache_ttl) { $this->open_queries[(int) $this->query_result] = $this->query_result; - $cache->sql_save($query, $this->query_result, $cache_ttl); + $this->query_result = $cache->sql_save($query, $this->query_result, $cache_ttl); } else if (strpos($query, 'SELECT') === 0 && $this->query_result) { diff --git a/phpBB/includes/db/sqlite.php b/phpBB/includes/db/sqlite.php index 814b593f05..2cf55b07e2 100644 --- a/phpBB/includes/db/sqlite.php +++ b/phpBB/includes/db/sqlite.php @@ -135,7 +135,7 @@ class dbal_sqlite extends dbal if ($cache_ttl) { $this->open_queries[(int) $this->query_result] = $this->query_result; - $cache->sql_save($query, $this->query_result, $cache_ttl); + $this->query_result = $cache->sql_save($query, $this->query_result, $cache_ttl); } else if (strpos($query, 'SELECT') === 0 && $this->query_result) { -- cgit v1.2.1 From 73cd044f5c81a1600f63103a33318e20163f5095 Mon Sep 17 00:00:00 2001 From: Jordan Rogers Date: Tue, 21 Aug 2012 10:20:35 -0300 Subject: [ticket/11066] Remove debug code error_reporting(E_ALL) from mssqlnative.php For some reason, all errors are just flipped on before connecting to the database, despite the system as a whole having a different setting for displayable errors. Had to add & ~E_STRICT in PHP 5.4.5 to suppress Strict Standards messages, but I would assume that the db piece shouldn't be involved with setting error_reporting at all. PHPBB3-11066 --- phpBB/includes/db/mssqlnative.php | 1 - 1 file changed, 1 deletion(-) (limited to 'phpBB/includes/db') diff --git a/phpBB/includes/db/mssqlnative.php b/phpBB/includes/db/mssqlnative.php index ff2f369706..3ad0ff3e11 100644 --- a/phpBB/includes/db/mssqlnative.php +++ b/phpBB/includes/db/mssqlnative.php @@ -219,7 +219,6 @@ class dbal_mssqlnative extends dbal $this->server = $sqlserver . (($port) ? $port_delimiter . $port : ''); //connect to database - error_reporting(E_ALL); $this->db_connect_id = sqlsrv_connect($this->server, array( 'Database' => $this->dbname, 'UID' => $this->user, -- cgit v1.2.1