Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F585414
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
6 KB
Referenced Files
None
Subscribers
None
View Options
diff --git a/includes/libs/rdbms/database/DatabasePostgres.php b/includes/libs/rdbms/database/DatabasePostgres.php
index 4ae11712a36..ca1fa1f5c9c 100644
--- a/includes/libs/rdbms/database/DatabasePostgres.php
+++ b/includes/libs/rdbms/database/DatabasePostgres.php
@@ -18,11 +18,10 @@
* @file
*/
-// Suppress UnusedPluginSuppression because Phan on PHP 7.4 and PHP 8.1 need different suppressions
-// @phan-file-suppress UnusedPluginSuppression,UnusedPluginFileSuppression
-
namespace Wikimedia\Rdbms;
+use PgSql\Connection;
+use PgSql\Result;
use RuntimeException;
use Wikimedia\Rdbms\Platform\PostgresPlatform;
use Wikimedia\Rdbms\Replication\ReplicationReporter;
@@ -41,7 +40,7 @@ class DatabasePostgres extends Database {
/** @var float|string|null */
private $numericVersion;
- /** @var resource|null */
+ /** @var Result|null */
private $lastResultHandle;
/** @var PostgresPlatform */
@@ -173,6 +172,10 @@ class DatabasePostgres extends Database {
return true;
}
+ protected function getBindingHandle(): Connection {
+ return parent::getBindingHandle();
+ }
+
/**
* @param string[] $vars
* @return string
@@ -204,16 +207,11 @@ class DatabasePostgres extends Database {
throw new DBUnexpectedError( $this, "Unable to post new query to PostgreSQL\n" );
}
- // Newer PHP versions use PgSql\Result instead of resource variables
- // https://www.php.net/manual/en/function.pg-get-result.php
$pgRes = pg_get_result( $conn );
- // Phan on PHP 7.4 and PHP 8.1 need different suppressions
- // @phan-suppress-next-line PhanTypeMismatchProperty,PhanTypeMismatchPropertyProbablyReal
$this->lastResultHandle = $pgRes;
$res = pg_result_error( $pgRes ) ? false : $pgRes;
return new QueryStatus(
- // @phan-suppress-next-line PhanTypeMismatchArgument
is_bool( $res ) ? $res : new PostgresResultWrapper( $this, $conn, $res ),
$pgRes ? pg_affected_rows( $pgRes ) : 0,
$this->lastError(),
@@ -238,7 +236,6 @@ class DatabasePostgres extends Database {
];
foreach ( $diags as $d ) {
$this->logger->debug( sprintf( "PgSQL ERROR(%d): %s",
- // @phan-suppress-next-line PhanTypeMismatchArgumentInternal
$d, pg_result_error_field( $this->lastResultHandle, $d ) ) );
}
}
@@ -256,7 +253,6 @@ class DatabasePostgres extends Database {
public function lastError() {
if ( $this->conn ) {
if ( $this->lastResultHandle ) {
- // @phan-suppress-next-line PhanTypeMismatchArgumentInternal
return pg_result_error( $this->lastResultHandle );
} else {
return pg_last_error() ?: $this->lastConnectError;
@@ -268,7 +264,6 @@ class DatabasePostgres extends Database {
public function lastErrno() {
if ( $this->lastResultHandle ) {
- // @phan-suppress-next-line PhanTypeMismatchArgumentInternal
$lastErrno = pg_result_error_field( $this->lastResultHandle, PGSQL_DIAG_SQLSTATE );
if ( $lastErrno !== false ) {
return $lastErrno;
diff --git a/includes/libs/rdbms/database/resultwrapper/PostgresResultWrapper.php b/includes/libs/rdbms/database/resultwrapper/PostgresResultWrapper.php
index a297981de9a..8e263939643 100644
--- a/includes/libs/rdbms/database/resultwrapper/PostgresResultWrapper.php
+++ b/includes/libs/rdbms/database/resultwrapper/PostgresResultWrapper.php
@@ -2,6 +2,9 @@
namespace Wikimedia\Rdbms;
+use PgSql\Connection;
+use PgSql\Result;
+
/**
* Result wrapper for PostgreSQL database results.
*
@@ -10,41 +13,31 @@ namespace Wikimedia\Rdbms;
class PostgresResultWrapper extends ResultWrapper {
/** @var DatabasePostgres */
private $db;
- /** @var resource */
- private $handle;
- /** @var resource */
- private $result;
+ private Connection $handle;
+ private Result $result;
/**
* @internal
- * @param DatabasePostgres $db
- * @param resource $handle
- * @param resource $result
*/
- public function __construct( DatabasePostgres $db, $handle, $result ) {
+ public function __construct( DatabasePostgres $db, Connection $handle, Result $result ) {
$this->db = $db;
$this->handle = $handle;
$this->result = $result;
}
protected function doNumRows() {
- // @phan-suppress-next-line PhanTypeMismatchArgumentInternal
return pg_num_rows( $this->result );
}
protected function doFetchObject() {
// pg_fetch_object may raise a warning after a seek to an invalid offset
- // @phan-suppress-next-next-line PhanTypeMismatchArgumentInternal
// phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged
$row = @pg_fetch_object( $this->result );
// Map boolean values (T352229)
if ( is_object( $row ) ) {
- // @phan-suppress-next-line PhanTypeMismatchArgumentInternal
$numFields = pg_num_fields( $this->result );
for ( $i = 0; $i < $numFields; $i++ ) {
- // @phan-suppress-next-line PhanTypeMismatchArgumentInternal
if ( pg_field_type( $this->result, $i ) === 'bool' ) {
- // @phan-suppress-next-line PhanTypeMismatchArgumentInternal
$name = pg_field_name( $this->result, $i );
$row->$name = $this->convertBoolean( $row->$name );
}
@@ -54,17 +47,13 @@ class PostgresResultWrapper extends ResultWrapper {
}
protected function doFetchRow() {
- // @phan-suppress-next-next-line PhanTypeMismatchArgumentInternal
// phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged
$row = @pg_fetch_array( $this->result );
// Map boolean values (T352229)
if ( is_array( $row ) ) {
- // @phan-suppress-next-line PhanTypeMismatchArgumentInternal
$numFields = pg_num_fields( $this->result );
for ( $i = 0; $i < $numFields; $i++ ) {
- // @phan-suppress-next-line PhanTypeMismatchArgumentInternal
if ( pg_field_type( $this->result, $i ) === 'bool' ) {
- // @phan-suppress-next-line PhanTypeMismatchArgumentInternal
$name = pg_field_name( $this->result, $i );
$row[$i] = $this->convertBoolean( $row[$i] );
$row[$name] = $this->convertBoolean( $row[$name] );
@@ -93,21 +82,17 @@ class PostgresResultWrapper extends ResultWrapper {
}
protected function doSeek( $pos ) {
- // @phan-suppress-next-line PhanTypeMismatchArgumentInternal
pg_result_seek( $this->result, $pos );
}
protected function doFree() {
- // @phan-suppress-next-line PhanTypeMismatchArgumentInternal
return pg_free_result( $this->result );
}
protected function doGetFieldNames() {
$names = [];
- // @phan-suppress-next-line PhanTypeMismatchArgumentInternal
$n = pg_num_fields( $this->result );
for ( $i = 0; $i < $n; $i++ ) {
- // @phan-suppress-next-line PhanTypeMismatchArgumentInternal
$names[] = pg_field_name( $this->result, $i );
}
return $names;
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Sat, Jul 5, 5:33 AM (1 d, 12 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
227818
Default Alt Text
(6 KB)
Attached To
Mode
rMW mediawiki
Attached
Detach File
Event Timeline
Log In to Comment