From: Brad Jorsch Date: Wed, 21 Sep 2016 18:03:29 +0000 (-0400) Subject: Database: Behave correctly when inserting booleans X-Git-Tag: 1.31.0-rc.0~5417^2 X-Git-Url: http://git.cyclocoop.org/%24image?a=commitdiff_plain;h=f536c780eb9d279485bb22e89be2465ad9997e3b;p=lhc%2Fweb%2Fwiklou.git Database: Behave correctly when inserting booleans Pretty much everything seems to assume that PHP booleans should be converted to 0/1: MySQL does this implicitly thanks to the lack of strict mode by default, while PostgreSQL and Sqlite (and Mssql) do it explicitly. The addition of MySQL strict mode for unit tests in Ib2873913 exposed the assumption in the case of MySQL by making some extension unit tests fail. So let's make casting bool to int the default behavior of Database::addQuotes(). This also cleans up the phpdoc for Database::addQuotes() to properly reflect all the supported types that can be passed to it. Change-Id: I13d0e402fa676bc27c345e8ac12f363ebc627f6a --- diff --git a/includes/db/DatabaseMssql.php b/includes/db/DatabaseMssql.php index 00fb800725..eb061d85fe 100644 --- a/includes/db/DatabaseMssql.php +++ b/includes/db/DatabaseMssql.php @@ -1085,8 +1085,8 @@ class DatabaseMssql extends DatabaseBase { } /** - * @param string|Blob $s - * @return string + * @param string|int|null|bool|Blob $s + * @return string|int */ public function addQuotes( $s ) { if ( $s instanceof MssqlBlob ) { diff --git a/includes/libs/rdbms/database/Database.php b/includes/libs/rdbms/database/Database.php index 9993277217..7e80221128 100644 --- a/includes/libs/rdbms/database/Database.php +++ b/includes/libs/rdbms/database/Database.php @@ -2001,6 +2001,8 @@ abstract class Database implements IDatabase, LoggerAwareInterface { } if ( $s === null ) { return 'NULL'; + } elseif ( is_bool( $s ) ) { + return (int)$s; } else { # This will also quote numeric values. This should be harmless, # and protects against weird problems that occur when they really diff --git a/includes/libs/rdbms/database/DatabasePostgres.php b/includes/libs/rdbms/database/DatabasePostgres.php index e79b28bf6b..69488af492 100644 --- a/includes/libs/rdbms/database/DatabasePostgres.php +++ b/includes/libs/rdbms/database/DatabasePostgres.php @@ -1232,8 +1232,8 @@ SQL; } /** - * @param null|bool|Blob $s - * @return int|string + * @param string|int|null|bool|Blob $s + * @return string|int */ function addQuotes( $s ) { if ( is_null( $s ) ) { diff --git a/includes/libs/rdbms/database/DatabaseSqlite.php b/includes/libs/rdbms/database/DatabaseSqlite.php index 6614898fef..2281f23ec8 100644 --- a/includes/libs/rdbms/database/DatabaseSqlite.php +++ b/includes/libs/rdbms/database/DatabaseSqlite.php @@ -783,8 +783,8 @@ class DatabaseSqlite extends DatabaseBase { } /** - * @param Blob|string $s - * @return string + * @param string|int|null|bool|Blob $s + * @return string|int */ function addQuotes( $s ) { if ( $s instanceof Blob ) { diff --git a/includes/libs/rdbms/database/IDatabase.php b/includes/libs/rdbms/database/IDatabase.php index 25e5912ac5..29a32f552f 100644 --- a/includes/libs/rdbms/database/IDatabase.php +++ b/includes/libs/rdbms/database/IDatabase.php @@ -1015,8 +1015,8 @@ interface IDatabase { /** * Adds quotes and backslashes. * - * @param string|Blob $s - * @return string + * @param string|int|null|bool|Blob $s + * @return string|int */ public function addQuotes( $s );