From c9ae773eadb02b96ccbd3e966672ccb1cc320975 Mon Sep 17 00:00:00 2001 From: Javier Spagnoletti Date: Mon, 6 Feb 2023 07:17:59 -0300 Subject: [PATCH] Use "numeric-string" type for some MySQLi functions --- stubs/mysqli.stub | 4 ++-- .../Analyser/NodeScopeResolverTest.php | 1 + tests/PHPStan/Analyser/data/mysql-stmt.php | 20 +++++++++++++++++++ 3 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 tests/PHPStan/Analyser/data/mysql-stmt.php diff --git a/stubs/mysqli.stub b/stubs/mysqli.stub index 350a645ba3..c20ce70009 100644 --- a/stubs/mysqli.stub +++ b/stubs/mysqli.stub @@ -4,7 +4,7 @@ class mysqli_stmt { /** - * @var int|string + * @var int<-1,max>|numeric-string */ public $affected_rows; @@ -34,7 +34,7 @@ class mysqli_stmt public $insert_id; /** - * @var 0|positive-int + * @var int<0,max>|numeric-string */ public $num_rows; diff --git a/tests/PHPStan/Analyser/NodeScopeResolverTest.php b/tests/PHPStan/Analyser/NodeScopeResolverTest.php index 182b9dea4c..c43ecd9f38 100644 --- a/tests/PHPStan/Analyser/NodeScopeResolverTest.php +++ b/tests/PHPStan/Analyser/NodeScopeResolverTest.php @@ -1198,6 +1198,7 @@ public function dataFileAsserts(): iterable yield from $this->gatherAssertTypes(__DIR__ . '/data/bug-8775.php'); yield from $this->gatherAssertTypes(__DIR__ . '/data/bug-8752.php'); yield from $this->gatherAssertTypes(__DIR__ . '/data/trait-instance-of.php'); + yield from $this->gatherAssertTypes(__DIR__ . '/data/mysql-stmt.php'); } /** diff --git a/tests/PHPStan/Analyser/data/mysql-stmt.php b/tests/PHPStan/Analyser/data/mysql-stmt.php new file mode 100644 index 0000000000..f29bd597ee --- /dev/null +++ b/tests/PHPStan/Analyser/data/mysql-stmt.php @@ -0,0 +1,20 @@ +prepare('SELECT x FROM z;'); + $stmt->execute(); + assertType('int<0, max>|numeric-string', $stmt->num_rows); + + $stmt = $mysqli->prepare('DELETE FROM z;'); + $stmt->execute(); + assertType('int<-1, max>|numeric-string', $stmt->affected_rows); + } +}