diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon
new file mode 100644
index 00000000..9e809591
--- /dev/null
+++ b/phpstan-baseline.neon
@@ -0,0 +1,7 @@
+parameters:
+ ignoreErrors:
+ -
+ message: "#^Parameter \\#1 \\$result of function pg_result_error expects resource, object\\|resource\\|true given\\.$#"
+ count: 1
+ path: www/lib/CoreLibs/DB/SQL/PgSQL.php
+
diff --git a/phpstan-conditional.php b/phpstan-conditional.php
new file mode 100644
index 00000000..eaa4c8e1
--- /dev/null
+++ b/phpstan-conditional.php
@@ -0,0 +1,21 @@
+= 8_00_00) {
+ // Change of signature in PHP 8.1
+ /* $config['parameters']['ignoreErrors'][] = [
+ 'message' => '~Parameter #1 \$(result|connection) of function pg_\w+ '
+ . 'expects resource(\|null)?, object\|resource given\.~',
+ 'path' => 'www/lib/CoreLibs/DB/SQL/PgSQL.php',
+ // 'count' => 1,
+ ]; */
+}
+
+return $config;
+
+// __END_
diff --git a/phpstan.neon b/phpstan.neon
index e7838643..c9f147be 100644
--- a/phpstan.neon
+++ b/phpstan.neon
@@ -1,5 +1,6 @@
# PHP Stan Config
-
+includes:
+ - phpstan-conditional.php
parameters:
tmpDir: /tmp/phpstan-corelibs
level: 8 # max is now 9
@@ -48,6 +49,9 @@ parameters:
- www/admin/class_test.smarty4.php
# ignore errores with
ignoreErrors:
+ - # this error is ignore because of the PHP 8.0 to 8.1 change for pg_*
+ message: "#^Parameter \\#1 \\$(result|connection) of function pg_\\w+ expects resource(\\|null)?, object\\|resource(\\|bool)? given\\.$#"
+ path: %currentWorkingDirectory%/www/lib/CoreLibs/DB/SQL/PgSQL.php
# this is ignored for now
# - '#Expression in empty\(\) is always falsy.#'
# -
diff --git a/www/lib/CoreLibs/DB/IO.php b/www/lib/CoreLibs/DB/IO.php
index f94ddc05..845b5945 100644
--- a/www/lib/CoreLibs/DB/IO.php
+++ b/www/lib/CoreLibs/DB/IO.php
@@ -252,7 +252,8 @@ declare(strict_types=1);
namespace CoreLibs\DB;
-// this is for running in php 8.0 phan
+// below no ignore is needed if we want to use PgSql interface checks with PHP 8.0
+// as main system. Currently all @var sets are written as object
/** @#phan-file-suppress PhanUndeclaredTypeProperty,PhanUndeclaredTypeParameter,PhanUndeclaredTypeReturnType */
class IO
diff --git a/www/lib/CoreLibs/DB/SQL/PgSQL.php b/www/lib/CoreLibs/DB/SQL/PgSQL.php
index f1935c03..abd041a3 100644
--- a/www/lib/CoreLibs/DB/SQL/PgSQL.php
+++ b/www/lib/CoreLibs/DB/SQL/PgSQL.php
@@ -47,6 +47,8 @@ declare(strict_types=1);
namespace CoreLibs\DB\SQL;
+// below no ignore is needed if we want to use PgSql interface checks with PHP 8.0
+// as main system. Currently all @var sets are written as object
/** @#phan-file-suppress PhanUndeclaredTypeProperty,PhanUndeclaredTypeParameter,PhanUndeclaredTypeReturnType */
class PgSQL
@@ -85,7 +87,7 @@ class PgSQL
public function __dbQuery(string $query)
{
$this->last_error_query = '';
- if ($this->dbh === false) {
+ if ($this->dbh === false || is_bool($this->dbh)) {
return false;
}
// read out the query status and save the query if needed
@@ -103,7 +105,7 @@ class PgSQL
*/
public function __dbSendQuery(string $query): bool
{
- if ($this->dbh === false) {
+ if ($this->dbh === false || is_bool($this->dbh)) {
return false;
}
$result = pg_send_query($this->dbh, $query);
@@ -117,7 +119,7 @@ class PgSQL
public function __dbGetResult()
{
$this->last_error_query = '';
- if ($this->dbh === false) {
+ if ($this->dbh === false || is_bool($this->dbh)) {
return false;
}
$result = pg_get_result($this->dbh);
@@ -136,7 +138,7 @@ class PgSQL
*/
public function __dbClose(): void
{
- if ($this->dbh === false) {
+ if ($this->dbh === false || is_bool($this->dbh)) {
return;
}
if (pg_connection_status($this->dbh) === PGSQL_CONNECTION_OK) {
@@ -153,7 +155,7 @@ class PgSQL
*/
public function __dbPrepare(string $name, string $query)
{
- if ($this->dbh === false) {
+ if ($this->dbh === false || is_bool($this->dbh)) {
return false;
}
$result = pg_prepare($this->dbh, $name, $query);
@@ -171,7 +173,7 @@ class PgSQL
*/
public function __dbExecute(string $name, array $data)
{
- if ($this->dbh === false) {
+ if ($this->dbh === false || is_bool($this->dbh)) {
return false;
}
$result = pg_execute($this->dbh, $name, $data);
@@ -188,7 +190,7 @@ class PgSQL
*/
public function __dbNumRows($cursor): int
{
- if (!$cursor) {
+ if ($cursor === false || is_bool($cursor)) {
return -1;
}
return pg_num_rows($cursor);
@@ -201,7 +203,7 @@ class PgSQL
*/
public function __dbNumFields($cursor): int
{
- if (!$cursor) {
+ if ($cursor === false || is_bool($cursor)) {
return -1;
}
return pg_num_fields($cursor);
@@ -215,7 +217,7 @@ class PgSQL
*/
public function __dbFieldName($cursor, $i)
{
- if (!$cursor) {
+ if ($cursor === false || is_bool($cursor)) {
return false;
}
return pg_field_name($cursor, $i);
@@ -230,7 +232,7 @@ class PgSQL
*/
public function __dbFetchArray($cursor, int $result_type = PGSQL_BOTH)
{
- if (!$cursor) {
+ if ($cursor === false || is_bool($cursor)) {
return false;
}
// result type is passed on as is [should be checked]
@@ -258,7 +260,7 @@ class PgSQL
*/
public function __dbFetchAll($cursor)
{
- if (!$cursor) {
+ if ($cursor === false || is_bool($cursor)) {
return false;
}
return pg_fetch_all($cursor);
@@ -271,7 +273,7 @@ class PgSQL
*/
public function __dbAffectedRows($cursor): int
{
- if (!$cursor) {
+ if ($cursor === false || is_bool($cursor)) {
return -1;
}
return pg_affected_rows($cursor);
@@ -426,17 +428,18 @@ class PgSQL
*/
public function __dbPrintError($cursor = false): string
{
- if ($this->dbh === false) {
+ if ($this->dbh === false || is_bool($this->dbh)) {
return '';
}
// run the query again for the error result here
- if (!$cursor && $this->last_error_query) {
+ if (($cursor === false || is_bool($cursor)) && $this->last_error_query) {
pg_send_query($this->dbh, $this->last_error_query);
$this->last_error_query = '';
$cursor = pg_get_result($this->dbh);
}
- if ($cursor && pg_result_error($cursor)) {
- return "-PostgreSQL-Error-> " . pg_result_error($cursor) . "
";
+ if ($cursor && !is_bool($cursor) && $error_str = pg_result_error($cursor)) {
+ return "-PostgreSQL-Error-> "
+ . $error_str . "
";
} else {
return '';
}
@@ -450,7 +453,7 @@ class PgSQL
*/
public function __dbMetaData(string $table, $extended = false)
{
- if ($this->dbh === false) {
+ if ($this->dbh === false || is_bool($this->dbh)) {
return false;
}
// needs to prefixed with @ or it throws a warning on not existing table
@@ -464,7 +467,7 @@ class PgSQL
*/
public function __dbEscapeString($string): string
{
- if ($this->dbh === false) {
+ if ($this->dbh === false || is_bool($this->dbh)) {
return '';
}
return pg_escape_string($this->dbh, (string)$string);
@@ -479,7 +482,7 @@ class PgSQL
*/
public function __dbEscapeLiteral($string): string
{
- if ($this->dbh === false) {
+ if ($this->dbh === false || is_bool($this->dbh)) {
return '';
}
return pg_escape_string($this->dbh, (string)$string);
@@ -492,7 +495,7 @@ class PgSQL
*/
public function __dbEscapeBytea($bytea): string
{
- if ($this->dbh === false) {
+ if ($this->dbh === false || is_bool($this->dbh)) {
return '';
}
return pg_escape_bytea($this->dbh, $bytea);
@@ -504,7 +507,7 @@ class PgSQL
*/
public function __dbConnectionBusy(): bool
{
- if ($this->dbh === false) {
+ if ($this->dbh === false || is_bool($this->dbh)) {
return false;
}
return pg_connection_busy($this->dbh);
@@ -518,7 +521,7 @@ class PgSQL
*/
public function __dbVersion(): string
{
- if ($this->dbh === false) {
+ if ($this->dbh === false || is_bool($this->dbh)) {
return '';
}
// array has client, protocol, server
@@ -547,7 +550,9 @@ class PgSQL
if ('{' != $text[$offset]) {
preg_match("/(\\{?\"([^\"\\\\]|\\\\.)*\"|[^,{}]+)+([,}]+)/", $text, $match, 0, $offset);
$offset += strlen($match[0]);
- $output[] = ('"' != $match[1][0] ? $match[1] : stripcslashes(substr($match[1], 1, -1)));
+ $output[] = '"' != $match[1][0] ?
+ $match[1] :
+ stripcslashes(substr($match[1], 1, -1));
if ('},' == $match[3]) {
return $offset;
}