From: Umherirrender Date: Fri, 8 Jun 2018 20:16:21 +0000 (+0200) Subject: rdbms: Document varargs for IDatabase::buildLike X-Git-Tag: 1.34.0-rc.0~1367 X-Git-Url: http://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=commitdiff_plain;h=725a59f0c70e37de6de8e26f91b0101839d37ff9 rdbms: Document varargs for IDatabase::buildLike This is needed in order for Phan not to consider calls to IDatabase::buildLike as invalid. Interestingly, it does not consider calls to Database::buildLike invalid. Bug: T191668 Change-Id: I0e027f5ec66d20b1d11e3441086001f6a751e1f5 --- diff --git a/includes/libs/rdbms/database/DBConnRef.php b/includes/libs/rdbms/database/DBConnRef.php index 841a7ba40a..8af6bb3ff3 100644 --- a/includes/libs/rdbms/database/DBConnRef.php +++ b/includes/libs/rdbms/database/DBConnRef.php @@ -35,7 +35,7 @@ class DBConnRef implements IDatabase { public function __construct( ILoadBalancer $lb, $conn, $role ) { $this->lb = $lb; $this->role = $role; - if ( $conn instanceof Database ) { + if ( $conn instanceof IDatabase && !( $conn instanceof DBConnRef ) ) { $this->conn = $conn; // live handle } elseif ( is_array( $conn ) && count( $conn ) >= 4 && $conn[self::FLD_DOMAIN] !== false ) { $this->params = $conn; @@ -461,7 +461,7 @@ class DBConnRef implements IDatabase { return $this->__call( __FUNCTION__, func_get_args() ); } - public function buildLike() { + public function buildLike( $param ) { return $this->__call( __FUNCTION__, func_get_args() ); } diff --git a/includes/libs/rdbms/database/Database.php b/includes/libs/rdbms/database/Database.php index b7b45bdc85..5451476042 100644 --- a/includes/libs/rdbms/database/Database.php +++ b/includes/libs/rdbms/database/Database.php @@ -2718,11 +2718,11 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware $s ); } - public function buildLike() { - $params = func_get_args(); - - if ( count( $params ) > 0 && is_array( $params[0] ) ) { - $params = $params[0]; + public function buildLike( $param, ...$params ) { + if ( is_array( $param ) ) { + $params = $param; + } else { + $params = func_get_args(); } $s = ''; diff --git a/includes/libs/rdbms/database/IDatabase.php b/includes/libs/rdbms/database/IDatabase.php index 802af15c5b..faed1bf3c4 100644 --- a/includes/libs/rdbms/database/IDatabase.php +++ b/includes/libs/rdbms/database/IDatabase.php @@ -1220,9 +1220,10 @@ interface IDatabase { * $query .= $dbr->buildLike( $pattern ); * * @since 1.16 + * @param array[]|string|LikeMatch $param * @return string Fully built LIKE statement */ - public function buildLike(); + public function buildLike( $param ); /** * Returns a token for buildLike() that denotes a '_' to be used in a LIKE query diff --git a/tests/phpunit/includes/Revision/RevisionStoreTest.php b/tests/phpunit/includes/Revision/RevisionStoreTest.php index 5246e36832..a8c8581106 100644 --- a/tests/phpunit/includes/Revision/RevisionStoreTest.php +++ b/tests/phpunit/includes/Revision/RevisionStoreTest.php @@ -16,7 +16,7 @@ use MediaWikiTestCase; use MWException; use Title; use WANObjectCache; -use Wikimedia\Rdbms\Database; +use Wikimedia\Rdbms\IDatabase; use Wikimedia\Rdbms\LoadBalancer; use Wikimedia\TestingAccessWrapper; use WikitextContent; @@ -70,10 +70,10 @@ class RevisionStoreTest extends MediaWikiTestCase { } /** - * @return \PHPUnit_Framework_MockObject_MockObject|Database + * @return \PHPUnit_Framework_MockObject_MockObject|IDatabase */ private function getMockDatabase() { - return $this->getMockBuilder( Database::class ) + return $this->getMockBuilder( IDatabase::class ) ->disableOriginalConstructor()->getMock(); } diff --git a/tests/phpunit/includes/Storage/NameTableStoreTest.php b/tests/phpunit/includes/Storage/NameTableStoreTest.php index ca87b49a37..47d3b92747 100644 --- a/tests/phpunit/includes/Storage/NameTableStoreTest.php +++ b/tests/phpunit/includes/Storage/NameTableStoreTest.php @@ -10,7 +10,7 @@ use MediaWiki\Storage\NameTableStore; use MediaWikiTestCase; use Psr\Log\NullLogger; use WANObjectCache; -use Wikimedia\Rdbms\Database; +use Wikimedia\Rdbms\IDatabase; use Wikimedia\Rdbms\LoadBalancer; use Wikimedia\TestingAccessWrapper; @@ -57,37 +57,25 @@ class NameTableStoreTest extends MediaWikiTestCase { } private function getCallCheckingDb( $insertCalls, $selectCalls ) { - $mock = $this->getMockBuilder( Database::class ) + $proxiedMethods = [ + 'select' => $selectCalls, + 'insert' => $insertCalls, + 'affectedRows' => null, + 'insertId' => null, + 'getSessionLagStatus' => null, + 'writesPending' => null, + 'onTransactionPreCommitOrIdle' => null + ]; + $mock = $this->getMockBuilder( IDatabase::class ) ->disableOriginalConstructor() ->getMock(); - $mock->expects( $this->exactly( $insertCalls ) ) - ->method( 'insert' ) - ->willReturnCallback( function ( ...$args ) { - return call_user_func_array( [ $this->db, 'insert' ], $args ); - } ); - $mock->expects( $this->exactly( $selectCalls ) ) - ->method( 'select' ) - ->willReturnCallback( function ( ...$args ) { - return call_user_func_array( [ $this->db, 'select' ], $args ); - } ); - $mock->expects( $this->exactly( $insertCalls ) ) - ->method( 'affectedRows' ) - ->willReturnCallback( function ( ...$args ) { - return call_user_func_array( [ $this->db, 'affectedRows' ], $args ); - } ); - $mock->expects( $this->any() ) - ->method( 'insertId' ) - ->willReturnCallback( function ( ...$args ) { - return call_user_func_array( [ $this->db, 'insertId' ], $args ); - } ); - $mock->expects( $this->any() ) - ->method( 'query' ) - ->willReturn( [] ); - $mock->expects( $this->any() ) - ->method( 'isOpen' ) - ->willReturn( true ); - $wrapper = TestingAccessWrapper::newFromObject( $mock ); - $wrapper->queryLogger = new NullLogger(); + foreach ( $proxiedMethods as $method => $count ) { + $mock->expects( is_int( $count ) ? $this->exactly( $count ) : $this->any() ) + ->method( $method ) + ->willReturnCallback( function ( ...$args ) use ( $method ) { + return call_user_func_array( [ $this->db, $method ], $args ); + } ); + } return $mock; } diff --git a/tests/phpunit/includes/libs/rdbms/database/DBConnRefTest.php b/tests/phpunit/includes/libs/rdbms/database/DBConnRefTest.php index 33e5c3b3fb..833ac2c397 100644 --- a/tests/phpunit/includes/libs/rdbms/database/DBConnRefTest.php +++ b/tests/phpunit/includes/libs/rdbms/database/DBConnRefTest.php @@ -1,9 +1,8 @@ getMockBuilder( Database::class ) + $db = $this->getMockBuilder( IDatabase::class ) ->disableOriginalConstructor() ->getMock(); @@ -60,12 +59,6 @@ class DBConnRefTest extends PHPUnit\Framework\TestCase { $db->method( 'isOpen' )->willReturnCallback( function () use ( &$open ) { return $open; } ); - $db->method( 'open' )->willReturnCallback( function () use ( &$open ) { - $open = true; - - return $open; - } ); - $db->method( '__toString' )->willReturn( 'MOCK_DB' ); return $db; }