From 7434b40e9b3255c99acacd24356d88d972119698 Mon Sep 17 00:00:00 2001 From: Markus Staab Date: Sun, 23 Jan 2022 20:47:20 +0100 Subject: [PATCH 1/3] added failling reference test --- .phpstan-dba.cache | 372 ++++++------------------------------- .phpunit-phpstan-dba.cache | 176 ++++++++++++++++++ tests/data/pdo-prepare.php | 17 ++ 3 files changed, 245 insertions(+), 320 deletions(-) diff --git a/.phpstan-dba.cache b/.phpstan-dba.cache index 802891a2b..4c7def39f 100644 --- a/.phpstan-dba.cache +++ b/.phpstan-dba.cache @@ -679,6 +679,58 @@ 1 => NULL, ), ), + 'SELECT 1 FROM ada WHERE adaid = \'abc\'' => + array ( + 'error' => NULL, + 'result' => + array ( + 3 => + PHPStan\Type\Constant\ConstantArrayType::__set_state(array( + 'keyType' => + PHPStan\Type\UnionType::__set_state(array( + 'types' => + array ( + 0 => + PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( + 'value' => 0, + )), + 1 => + PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( + 'value' => 1, + )), + ), + )), + 'itemType' => + PHPStan\Type\IntegerType::__set_state(array( + )), + 'allArrays' => NULL, + 'keyTypes' => + array ( + 0 => + PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( + 'value' => 1, + )), + 1 => + PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( + 'value' => 0, + )), + ), + 'valueTypes' => + array ( + 0 => + PHPStan\Type\IntegerType::__set_state(array( + )), + 1 => + PHPStan\Type\IntegerType::__set_state(array( + )), + ), + 'nextAutoIndex' => 2, + 'optionalKeys' => + array ( + ), + )), + ), + ), 'SELECT MAX(adaid), MIN(adaid), COUNT(adaid), AVG(adaid) FROM ada WHERE adaid = 1' => array ( 'error' => NULL, @@ -1590,40 +1642,6 @@ array ( ), )), - 1 => - PHPStan\Type\Constant\ConstantArrayType::__set_state(array( - 'keyType' => - PHPStan\Type\Constant\ConstantStringType::__set_state(array( - 'value' => 'adaid', - 'isClassString' => false, - )), - 'itemType' => - PHPStan\Type\IntegerRangeType::__set_state(array( - 'min' => 0, - 'max' => 4294967295, - )), - 'allArrays' => NULL, - 'keyTypes' => - array ( - 0 => - PHPStan\Type\Constant\ConstantStringType::__set_state(array( - 'value' => 'adaid', - 'isClassString' => false, - )), - ), - 'valueTypes' => - array ( - 0 => - PHPStan\Type\IntegerRangeType::__set_state(array( - 'min' => 0, - 'max' => 4294967295, - )), - ), - 'nextAutoIndex' => 0, - 'optionalKeys' => - array ( - ), - )), ), ), 'SELECT adaid FROM ada WHERE email LIKE "?"' => @@ -1766,40 +1784,6 @@ array ( ), )), - 1 => - PHPStan\Type\Constant\ConstantArrayType::__set_state(array( - 'keyType' => - PHPStan\Type\Constant\ConstantStringType::__set_state(array( - 'value' => 'adaid', - 'isClassString' => false, - )), - 'itemType' => - PHPStan\Type\IntegerRangeType::__set_state(array( - 'min' => 0, - 'max' => 4294967295, - )), - 'allArrays' => NULL, - 'keyTypes' => - array ( - 0 => - PHPStan\Type\Constant\ConstantStringType::__set_state(array( - 'value' => 'adaid', - 'isClassString' => false, - )), - ), - 'valueTypes' => - array ( - 0 => - PHPStan\Type\IntegerRangeType::__set_state(array( - 'min' => 0, - 'max' => 4294967295, - )), - ), - 'nextAutoIndex' => 0, - 'optionalKeys' => - array ( - ), - )), ), ), 'SELECT adaid FROM ada WHERE email LIKE "helloNULL%"' => @@ -1920,40 +1904,6 @@ array ( ), )), - 1 => - PHPStan\Type\Constant\ConstantArrayType::__set_state(array( - 'keyType' => - PHPStan\Type\Constant\ConstantStringType::__set_state(array( - 'value' => 'adaid', - 'isClassString' => false, - )), - 'itemType' => - PHPStan\Type\IntegerRangeType::__set_state(array( - 'min' => 0, - 'max' => 4294967295, - )), - 'allArrays' => NULL, - 'keyTypes' => - array ( - 0 => - PHPStan\Type\Constant\ConstantStringType::__set_state(array( - 'value' => 'adaid', - 'isClassString' => false, - )), - ), - 'valueTypes' => - array ( - 0 => - PHPStan\Type\IntegerRangeType::__set_state(array( - 'min' => 0, - 'max' => 4294967295, - )), - ), - 'nextAutoIndex' => 0, - 'optionalKeys' => - array ( - ), - )), ), ), 'SELECT adaid FROM ada WHERE email LIKE \':gesperrt%\'' => @@ -2014,40 +1964,6 @@ array ( ), )), - 1 => - PHPStan\Type\Constant\ConstantArrayType::__set_state(array( - 'keyType' => - PHPStan\Type\Constant\ConstantStringType::__set_state(array( - 'value' => 'adaid', - 'isClassString' => false, - )), - 'itemType' => - PHPStan\Type\IntegerRangeType::__set_state(array( - 'min' => 0, - 'max' => 4294967295, - )), - 'allArrays' => NULL, - 'keyTypes' => - array ( - 0 => - PHPStan\Type\Constant\ConstantStringType::__set_state(array( - 'value' => 'adaid', - 'isClassString' => false, - )), - ), - 'valueTypes' => - array ( - 0 => - PHPStan\Type\IntegerRangeType::__set_state(array( - 'min' => 0, - 'max' => 4294967295, - )), - ), - 'nextAutoIndex' => 0, - 'optionalKeys' => - array ( - ), - )), ), ), 'SELECT adaid FROM ada WHERE email LIKE \':gesperrt\'' => @@ -2742,9 +2658,7 @@ )), 'result' => array ( - 1 => NULL, 3 => NULL, - 2 => NULL, ), ), 'SELECT email adaid WHERE gesperrt freigabe1u1 FROM ada gesperrt=' => @@ -2850,126 +2764,6 @@ array ( ), )), - 2 => - PHPStan\Type\Constant\ConstantArrayType::__set_state(array( - 'keyType' => - PHPStan\Type\UnionType::__set_state(array( - 'types' => - array ( - 0 => - PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( - 'value' => 0, - )), - 1 => - PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( - 'value' => 1, - )), - ), - )), - 'itemType' => - PHPStan\Type\UnionType::__set_state(array( - 'types' => - array ( - 0 => - PHPStan\Type\IntegerRangeType::__set_state(array( - 'min' => 0, - 'max' => 4294967295, - )), - 1 => - PHPStan\Type\StringType::__set_state(array( - )), - ), - )), - 'allArrays' => NULL, - 'keyTypes' => - array ( - 0 => - PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( - 'value' => 0, - )), - 1 => - PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( - 'value' => 1, - )), - ), - 'valueTypes' => - array ( - 0 => - PHPStan\Type\StringType::__set_state(array( - )), - 1 => - PHPStan\Type\IntegerRangeType::__set_state(array( - 'min' => 0, - 'max' => 4294967295, - )), - ), - 'nextAutoIndex' => 2, - 'optionalKeys' => - array ( - ), - )), - 1 => - PHPStan\Type\Constant\ConstantArrayType::__set_state(array( - 'keyType' => - PHPStan\Type\UnionType::__set_state(array( - 'types' => - array ( - 0 => - PHPStan\Type\Constant\ConstantStringType::__set_state(array( - 'value' => 'adaid', - 'isClassString' => false, - )), - 1 => - PHPStan\Type\Constant\ConstantStringType::__set_state(array( - 'value' => 'email', - 'isClassString' => false, - )), - ), - )), - 'itemType' => - PHPStan\Type\UnionType::__set_state(array( - 'types' => - array ( - 0 => - PHPStan\Type\IntegerRangeType::__set_state(array( - 'min' => 0, - 'max' => 4294967295, - )), - 1 => - PHPStan\Type\StringType::__set_state(array( - )), - ), - )), - 'allArrays' => NULL, - 'keyTypes' => - array ( - 0 => - PHPStan\Type\Constant\ConstantStringType::__set_state(array( - 'value' => 'email', - 'isClassString' => false, - )), - 1 => - PHPStan\Type\Constant\ConstantStringType::__set_state(array( - 'value' => 'adaid', - 'isClassString' => false, - )), - ), - 'valueTypes' => - array ( - 0 => - PHPStan\Type\StringType::__set_state(array( - )), - 1 => - PHPStan\Type\IntegerRangeType::__set_state(array( - 'min' => 0, - 'max' => 4294967295, - )), - ), - 'nextAutoIndex' => 0, - 'optionalKeys' => - array ( - ), - )), ), ), 'SELECT email, adaid FROM ada ' => @@ -3435,68 +3229,6 @@ Simulated query: SELECT email, adaid FROM ada . WHERE email=\'my_other_table\' L 'error' => NULL, 'result' => array ( - 1 => - PHPStan\Type\Constant\ConstantArrayType::__set_state(array( - 'keyType' => - PHPStan\Type\UnionType::__set_state(array( - 'types' => - array ( - 0 => - PHPStan\Type\Constant\ConstantStringType::__set_state(array( - 'value' => 'adaid', - 'isClassString' => false, - )), - 1 => - PHPStan\Type\Constant\ConstantStringType::__set_state(array( - 'value' => 'email', - 'isClassString' => false, - )), - ), - )), - 'itemType' => - PHPStan\Type\UnionType::__set_state(array( - 'types' => - array ( - 0 => - PHPStan\Type\IntegerRangeType::__set_state(array( - 'min' => 0, - 'max' => 4294967295, - )), - 1 => - PHPStan\Type\StringType::__set_state(array( - )), - ), - )), - 'allArrays' => NULL, - 'keyTypes' => - array ( - 0 => - PHPStan\Type\Constant\ConstantStringType::__set_state(array( - 'value' => 'email', - 'isClassString' => false, - )), - 1 => - PHPStan\Type\Constant\ConstantStringType::__set_state(array( - 'value' => 'adaid', - 'isClassString' => false, - )), - ), - 'valueTypes' => - array ( - 0 => - PHPStan\Type\StringType::__set_state(array( - )), - 1 => - PHPStan\Type\IntegerRangeType::__set_state(array( - 'min' => 0, - 'max' => 4294967295, - )), - ), - 'nextAutoIndex' => 0, - 'optionalKeys' => - array ( - ), - )), 3 => PHPStan\Type\Constant\ConstantArrayType::__set_state(array( 'keyType' => diff --git a/.phpunit-phpstan-dba.cache b/.phpunit-phpstan-dba.cache index d46f98fd9..32c93cc6d 100644 --- a/.phpunit-phpstan-dba.cache +++ b/.phpunit-phpstan-dba.cache @@ -121,6 +121,125 @@ array ( 'error' => NULL, ), + ' + SELECT email adaid + WHERE gesperrt = \'1\' AND email LIKE \'%@example.com\' + FROM ada + LIMIT 1 + ' => + array ( + 'error' => + staabm\PHPStanDba\Error::__set_state(array( + 'message' => 'You have an error in your SQL syntax; check the manual that corresponds to your MySQL/MariaDB server version for the right syntax to use near \'FROM ada LIMIT 0\' at line 3', + 'code' => 1064, + )), + ), + ' + SELECT email, adaid + FROM ada + WHERE gesperrt = \'1\' + FOR UPDATE + ' => + array ( + 'error' => NULL, + ), + ' + SELECT email, adaid + FROM ada + WHERE gesperrt = \'1\' + LIMIT \'1\' + ' => + array ( + 'error' => NULL, + ), + ' + SELECT email, adaid + FROM ada + WHERE gesperrt = \'1\' + LIMIT \'1\' + FOR UPDATE + ' => + array ( + 'error' => NULL, + ), + ' + SELECT email, adaid + FROM ada + WHERE gesperrt = \'1\' + LIMIT \'1\' + OFFSET \'1\' + ' => + array ( + 'error' => NULL, + ), + ' + SELECT email, adaid + FROM ada + WHERE gesperrt = \'1\' + LIMIT \'1\' + OFFSET \'1\' + FOR SHARE + ' => + array ( + 'error' => NULL, + ), + ' + SELECT email, adaid + FROM ada + WHERE gesperrt = \'1\' + LIMIT \'1\' + OFFSET \'1\' + FOR UPDATE + ' => + array ( + 'error' => NULL, + ), + ' + SELECT email, adaid + FROM ada + WHERE gesperrt = \'1\' + LIMIT \'1\' + OFFSET 1 + ' => + array ( + 'error' => NULL, + ), + ' + SELECT email, adaid + FROM ada + WHERE gesperrt = \'1\' + LIMIT \'1\', \'1\' + ' => + array ( + 'error' => NULL, + ), + ' + SELECT email, adaid + FROM ada + WHERE gesperrt = \'1\' + LIMIT \'1\', \'1\' + ' => + array ( + 'error' => NULL, + ), + ' + SELECT email, adaid + FROM ada + WHERE gesperrt = \'1\' AND email LIKE \'%@example%\' + LIMIT 1 + ' => + array ( + 'error' => NULL, + ), + ' + SELECT email, adaid + FROM ada + WHERE gesperrt = \'1\' AND email LIKE NULL + LIMIT 1 + ' => + array ( + 'error' => NULL, + ), 'SELECT * FROM ada GROUP BY doesNotExist' => array ( 'error' => @@ -782,6 +901,58 @@ 'code' => 1146, )), ), + 'SELECT 1 FROM ada WHERE adaid = \'abc\'' => + array ( + 'error' => NULL, + 'result' => + array ( + 3 => + PHPStan\Type\Constant\ConstantArrayType::__set_state(array( + 'keyType' => + PHPStan\Type\UnionType::__set_state(array( + 'types' => + array ( + 0 => + PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( + 'value' => 0, + )), + 1 => + PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( + 'value' => 1, + )), + ), + )), + 'itemType' => + PHPStan\Type\IntegerType::__set_state(array( + )), + 'allArrays' => NULL, + 'keyTypes' => + array ( + 0 => + PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( + 'value' => 1, + )), + 1 => + PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( + 'value' => 0, + )), + ), + 'valueTypes' => + array ( + 0 => + PHPStan\Type\IntegerType::__set_state(array( + )), + 1 => + PHPStan\Type\IntegerType::__set_state(array( + )), + ), + 'nextAutoIndex' => 2, + 'optionalKeys' => + array ( + ), + )), + ), + ), 'SELECT MAX(adaid), MIN(adaid), COUNT(adaid), AVG(adaid) FROM ada WHERE adaid = 1' => array ( 'error' => NULL, @@ -3452,6 +3623,11 @@ Simulated query: SELECT email, adaid FROM ada . WHERE email=\'my_other_table\' L array ( 'error' => NULL, ), + 'SELECT email, adaid, gesperrt, freigabe1u1 FROM ada + WHERE (gesperrt=\'1\' AND freigabe1u1=1) OR (gesperrt=\'1\' AND freigabe1u1=0)' => + array ( + 'error' => NULL, + ), 'SELECT email, adaid, gesperrt, freigabe1u1 FROM ada LIMIT 1' => array ( 'error' => NULL, diff --git a/tests/data/pdo-prepare.php b/tests/data/pdo-prepare.php index fb28bd4c9..7677457ab 100644 --- a/tests/data/pdo-prepare.php +++ b/tests/data/pdo-prepare.php @@ -106,4 +106,21 @@ public function specifiedArray(PDO $pdo, array $idsToUpdate, string $time) ]); assertType('PDOStatement, 0: int<0, 4294967295>}>', $stmt); } + + public function noInferenceOnBug196(PDO $pdo, array $minorPhpVersions, \DateTimeImmutable $updateDate) + { + $sumQueries = []; + $dataPointDate = $updateDate->format('Ymd'); + foreach ($minorPhpVersions as $index => $version) { + $sumQueries[] = 'SUM(DATA->\'$."'.$version.'"."'.$dataPointDate.'"\')'; + } + $stmt = $pdo->prepare( + 'SELECT '.implode(', ', $sumQueries).' FROM ada WHERE adaid = :package' + ); + $stmt->execute(['package' => 'abc']); + // this query is too dynamic for beeing analyzed. + // make sure we don't infer a wrong type. + assertType('PDOStatement', $stmt); + } + } From 25290d3a23b63c15fc8d464d4044ace51da4d83e Mon Sep 17 00:00:00 2001 From: Markus Staab Date: Sun, 23 Jan 2022 20:48:05 +0100 Subject: [PATCH 2/3] fix --- .phpstan-dba.cache | 202 +++++++----------------- src/QueryReflection/QueryReflection.php | 20 +-- 2 files changed, 69 insertions(+), 153 deletions(-) diff --git a/.phpstan-dba.cache b/.phpstan-dba.cache index 4c7def39f..4a3c7d189 100644 --- a/.phpstan-dba.cache +++ b/.phpstan-dba.cache @@ -4126,44 +4126,28 @@ Simulated query: SELECT email, adaid FROM ada . WHERE email=\'my_other_table\' L 'error' => NULL, 'result' => array ( - 3 => + 1 => PHPStan\Type\Constant\ConstantArrayType::__set_state(array( 'keyType' => PHPStan\Type\UnionType::__set_state(array( 'types' => array ( 0 => - PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( - 'value' => 0, - )), - 1 => - PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( - 'value' => 1, - )), - 2 => - PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( - 'value' => 2, - )), - 3 => - PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( - 'value' => 3, - )), - 4 => PHPStan\Type\Constant\ConstantStringType::__set_state(array( 'value' => 'adaid', 'isClassString' => false, )), - 5 => + 1 => PHPStan\Type\Constant\ConstantStringType::__set_state(array( 'value' => 'email', 'isClassString' => false, )), - 6 => + 2 => PHPStan\Type\Constant\ConstantStringType::__set_state(array( 'value' => 'freigabe1u1', 'isClassString' => false, )), - 7 => + 3 => PHPStan\Type\Constant\ConstantStringType::__set_state(array( 'value' => 'gesperrt', 'isClassString' => false, @@ -4193,36 +4177,20 @@ Simulated query: SELECT email, adaid FROM ada . WHERE email=\'my_other_table\' L 'isClassString' => false, )), 1 => - PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( - 'value' => 0, - )), - 2 => PHPStan\Type\Constant\ConstantStringType::__set_state(array( 'value' => 'adaid', 'isClassString' => false, )), - 3 => - PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( - 'value' => 1, - )), - 4 => + 2 => PHPStan\Type\Constant\ConstantStringType::__set_state(array( 'value' => 'gesperrt', 'isClassString' => false, )), - 5 => - PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( - 'value' => 2, - )), - 6 => + 3 => PHPStan\Type\Constant\ConstantStringType::__set_state(array( 'value' => 'freigabe1u1', 'isClassString' => false, )), - 7 => - PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( - 'value' => 3, - )), ), 'valueTypes' => array ( @@ -4230,66 +4198,64 @@ Simulated query: SELECT email, adaid FROM ada . WHERE email=\'my_other_table\' L PHPStan\Type\StringType::__set_state(array( )), 1 => - PHPStan\Type\StringType::__set_state(array( - )), - 2 => PHPStan\Type\IntegerRangeType::__set_state(array( 'min' => 0, 'max' => 4294967295, )), - 3 => - PHPStan\Type\IntegerRangeType::__set_state(array( - 'min' => 0, - 'max' => 4294967295, - )), - 4 => - PHPStan\Type\IntegerRangeType::__set_state(array( - 'min' => -128, - 'max' => 127, - )), - 5 => - PHPStan\Type\IntegerRangeType::__set_state(array( - 'min' => -128, - 'max' => 127, - )), - 6 => + 2 => PHPStan\Type\IntegerRangeType::__set_state(array( 'min' => -128, 'max' => 127, )), - 7 => + 3 => PHPStan\Type\IntegerRangeType::__set_state(array( 'min' => -128, 'max' => 127, )), ), - 'nextAutoIndex' => 4, + 'nextAutoIndex' => 0, 'optionalKeys' => array ( ), )), - 1 => + 3 => PHPStan\Type\Constant\ConstantArrayType::__set_state(array( 'keyType' => PHPStan\Type\UnionType::__set_state(array( 'types' => array ( 0 => + PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( + 'value' => 0, + )), + 1 => + PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( + 'value' => 1, + )), + 2 => + PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( + 'value' => 2, + )), + 3 => + PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( + 'value' => 3, + )), + 4 => PHPStan\Type\Constant\ConstantStringType::__set_state(array( 'value' => 'adaid', 'isClassString' => false, )), - 1 => + 5 => PHPStan\Type\Constant\ConstantStringType::__set_state(array( 'value' => 'email', 'isClassString' => false, )), - 2 => + 6 => PHPStan\Type\Constant\ConstantStringType::__set_state(array( 'value' => 'freigabe1u1', 'isClassString' => false, )), - 3 => + 7 => PHPStan\Type\Constant\ConstantStringType::__set_state(array( 'value' => 'gesperrt', 'isClassString' => false, @@ -4319,20 +4285,36 @@ Simulated query: SELECT email, adaid FROM ada . WHERE email=\'my_other_table\' L 'isClassString' => false, )), 1 => + PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( + 'value' => 0, + )), + 2 => PHPStan\Type\Constant\ConstantStringType::__set_state(array( 'value' => 'adaid', 'isClassString' => false, )), - 2 => + 3 => + PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( + 'value' => 1, + )), + 4 => PHPStan\Type\Constant\ConstantStringType::__set_state(array( 'value' => 'gesperrt', 'isClassString' => false, )), - 3 => + 5 => + PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( + 'value' => 2, + )), + 6 => PHPStan\Type\Constant\ConstantStringType::__set_state(array( 'value' => 'freigabe1u1', 'isClassString' => false, )), + 7 => + PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( + 'value' => 3, + )), ), 'valueTypes' => array ( @@ -4340,100 +4322,34 @@ Simulated query: SELECT email, adaid FROM ada . WHERE email=\'my_other_table\' L PHPStan\Type\StringType::__set_state(array( )), 1 => + PHPStan\Type\StringType::__set_state(array( + )), + 2 => PHPStan\Type\IntegerRangeType::__set_state(array( 'min' => 0, 'max' => 4294967295, )), - 2 => + 3 => PHPStan\Type\IntegerRangeType::__set_state(array( - 'min' => -128, - 'max' => 127, + 'min' => 0, + 'max' => 4294967295, )), - 3 => + 4 => PHPStan\Type\IntegerRangeType::__set_state(array( 'min' => -128, 'max' => 127, )), - ), - 'nextAutoIndex' => 0, - 'optionalKeys' => - array ( - ), - )), - 2 => - PHPStan\Type\Constant\ConstantArrayType::__set_state(array( - 'keyType' => - PHPStan\Type\UnionType::__set_state(array( - 'types' => - array ( - 0 => - PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( - 'value' => 0, - )), - 1 => - PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( - 'value' => 1, - )), - 2 => - PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( - 'value' => 2, - )), - 3 => - PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( - 'value' => 3, - )), - ), - )), - 'itemType' => - PHPStan\Type\UnionType::__set_state(array( - 'types' => - array ( - 0 => - PHPStan\Type\IntegerRangeType::__set_state(array( - 'min' => -128, - 'max' => 4294967295, - )), - 1 => - PHPStan\Type\StringType::__set_state(array( - )), - ), - )), - 'allArrays' => NULL, - 'keyTypes' => - array ( - 0 => - PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( - 'value' => 0, - )), - 1 => - PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( - 'value' => 1, - )), - 2 => - PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( - 'value' => 2, - )), - 3 => - PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( - 'value' => 3, - )), - ), - 'valueTypes' => - array ( - 0 => - PHPStan\Type\StringType::__set_state(array( - )), - 1 => + 5 => PHPStan\Type\IntegerRangeType::__set_state(array( - 'min' => 0, - 'max' => 4294967295, + 'min' => -128, + 'max' => 127, )), - 2 => + 6 => PHPStan\Type\IntegerRangeType::__set_state(array( 'min' => -128, 'max' => 127, )), - 3 => + 7 => PHPStan\Type\IntegerRangeType::__set_state(array( 'min' => -128, 'max' => 127, diff --git a/src/QueryReflection/QueryReflection.php b/src/QueryReflection/QueryReflection.php index 5c008b118..2e2279215 100644 --- a/src/QueryReflection/QueryReflection.php +++ b/src/QueryReflection/QueryReflection.php @@ -103,7 +103,7 @@ public function resolvePreparedQueryStrings(Expr $queryExpr, Type $parameterType */ public function resolvePreparedQueryString(Expr $queryExpr, Type $parameterTypes, Scope $scope): ?string { - $queryString = $this->resolveQueryExpr($queryExpr, $scope, true); + $queryString = $this->resolveQueryExpr($queryExpr, $scope); if (null === $queryString) { return null; @@ -134,7 +134,7 @@ public function resolveQueryStrings(Expr $queryExpr, Scope $scope): iterable return; } - $queryString = $this->resolveQueryExpr($queryExpr, $scope, false); + $queryString = $this->resolveQueryExpr($queryExpr, $scope); if (null !== $queryString) { yield $queryString; } @@ -145,37 +145,37 @@ public function resolveQueryStrings(Expr $queryExpr, Scope $scope): iterable */ public function resolveQueryString(Expr $queryExpr, Scope $scope): ?string { - return $this->resolveQueryExpr($queryExpr, $scope, false); + return $this->resolveQueryExpr($queryExpr, $scope); } /** * @throws UnresolvableQueryException */ - private function resolveQueryExpr(Expr $queryExpr, Scope $scope, bool $preparedContext): ?string + private function resolveQueryExpr(Expr $queryExpr, Scope $scope): ?string { if ($queryExpr instanceof Expr\Variable) { $finder = new ExpressionFinder(); $queryStringExpr = $finder->findQueryStringExpression($queryExpr); if (null !== $queryStringExpr) { - return $this->resolveQueryStringExpr($queryStringExpr, $scope, $preparedContext); + return $this->resolveQueryStringExpr($queryStringExpr, $scope); } } - return $this->resolveQueryStringExpr($queryExpr, $scope, $preparedContext); + return $this->resolveQueryStringExpr($queryExpr, $scope); } /** * @throws UnresolvableQueryException */ - private function resolveQueryStringExpr(Expr $queryExpr, Scope $scope, bool $preparedContext): ?string + private function resolveQueryStringExpr(Expr $queryExpr, Scope $scope): ?string { if ($queryExpr instanceof Concat) { $left = $queryExpr->left; $right = $queryExpr->right; - $leftString = $this->resolveQueryStringExpr($left, $scope, $preparedContext); - $rightString = $this->resolveQueryStringExpr($right, $scope, $preparedContext); + $leftString = $this->resolveQueryStringExpr($left, $scope); + $rightString = $this->resolveQueryStringExpr($right, $scope); if (null === $leftString || null === $rightString) { return null; @@ -186,7 +186,7 @@ private function resolveQueryStringExpr(Expr $queryExpr, Scope $scope, bool $pre $type = $scope->getType($queryExpr); - return QuerySimulation::simulateParamValueType($type, $preparedContext); + return QuerySimulation::simulateParamValueType($type, false); } public static function getQueryType(string $query): ?string From fad930972224f55542c3e8887a317c093c48de0b Mon Sep 17 00:00:00 2001 From: Markus Staab Date: Sun, 23 Jan 2022 20:48:32 +0100 Subject: [PATCH 3/3] cache --- .phpstan-dba.cache | 732 ++++++++++++++++++++++++++++--------- .phpunit-phpstan-dba.cache | 124 ------- tests/data/pdo-prepare.php | 1 - 3 files changed, 568 insertions(+), 289 deletions(-) diff --git a/.phpstan-dba.cache b/.phpstan-dba.cache index 4a3c7d189..a607ba2d7 100644 --- a/.phpstan-dba.cache +++ b/.phpstan-dba.cache @@ -1642,6 +1642,40 @@ array ( ), )), + 1 => + PHPStan\Type\Constant\ConstantArrayType::__set_state(array( + 'keyType' => + PHPStan\Type\Constant\ConstantStringType::__set_state(array( + 'value' => 'adaid', + 'isClassString' => false, + )), + 'itemType' => + PHPStan\Type\IntegerRangeType::__set_state(array( + 'min' => 0, + 'max' => 4294967295, + )), + 'allArrays' => NULL, + 'keyTypes' => + array ( + 0 => + PHPStan\Type\Constant\ConstantStringType::__set_state(array( + 'value' => 'adaid', + 'isClassString' => false, + )), + ), + 'valueTypes' => + array ( + 0 => + PHPStan\Type\IntegerRangeType::__set_state(array( + 'min' => 0, + 'max' => 4294967295, + )), + ), + 'nextAutoIndex' => 0, + 'optionalKeys' => + array ( + ), + )), ), ), 'SELECT adaid FROM ada WHERE email LIKE "?"' => @@ -1784,6 +1818,40 @@ array ( ), )), + 1 => + PHPStan\Type\Constant\ConstantArrayType::__set_state(array( + 'keyType' => + PHPStan\Type\Constant\ConstantStringType::__set_state(array( + 'value' => 'adaid', + 'isClassString' => false, + )), + 'itemType' => + PHPStan\Type\IntegerRangeType::__set_state(array( + 'min' => 0, + 'max' => 4294967295, + )), + 'allArrays' => NULL, + 'keyTypes' => + array ( + 0 => + PHPStan\Type\Constant\ConstantStringType::__set_state(array( + 'value' => 'adaid', + 'isClassString' => false, + )), + ), + 'valueTypes' => + array ( + 0 => + PHPStan\Type\IntegerRangeType::__set_state(array( + 'min' => 0, + 'max' => 4294967295, + )), + ), + 'nextAutoIndex' => 0, + 'optionalKeys' => + array ( + ), + )), ), ), 'SELECT adaid FROM ada WHERE email LIKE "helloNULL%"' => @@ -1904,6 +1972,40 @@ array ( ), )), + 1 => + PHPStan\Type\Constant\ConstantArrayType::__set_state(array( + 'keyType' => + PHPStan\Type\Constant\ConstantStringType::__set_state(array( + 'value' => 'adaid', + 'isClassString' => false, + )), + 'itemType' => + PHPStan\Type\IntegerRangeType::__set_state(array( + 'min' => 0, + 'max' => 4294967295, + )), + 'allArrays' => NULL, + 'keyTypes' => + array ( + 0 => + PHPStan\Type\Constant\ConstantStringType::__set_state(array( + 'value' => 'adaid', + 'isClassString' => false, + )), + ), + 'valueTypes' => + array ( + 0 => + PHPStan\Type\IntegerRangeType::__set_state(array( + 'min' => 0, + 'max' => 4294967295, + )), + ), + 'nextAutoIndex' => 0, + 'optionalKeys' => + array ( + ), + )), ), ), 'SELECT adaid FROM ada WHERE email LIKE \':gesperrt%\'' => @@ -1964,6 +2066,40 @@ array ( ), )), + 1 => + PHPStan\Type\Constant\ConstantArrayType::__set_state(array( + 'keyType' => + PHPStan\Type\Constant\ConstantStringType::__set_state(array( + 'value' => 'adaid', + 'isClassString' => false, + )), + 'itemType' => + PHPStan\Type\IntegerRangeType::__set_state(array( + 'min' => 0, + 'max' => 4294967295, + )), + 'allArrays' => NULL, + 'keyTypes' => + array ( + 0 => + PHPStan\Type\Constant\ConstantStringType::__set_state(array( + 'value' => 'adaid', + 'isClassString' => false, + )), + ), + 'valueTypes' => + array ( + 0 => + PHPStan\Type\IntegerRangeType::__set_state(array( + 'min' => 0, + 'max' => 4294967295, + )), + ), + 'nextAutoIndex' => 0, + 'optionalKeys' => + array ( + ), + )), ), ), 'SELECT adaid FROM ada WHERE email LIKE \':gesperrt\'' => @@ -2658,7 +2794,9 @@ )), 'result' => array ( + 1 => NULL, 3 => NULL, + 2 => NULL, ), ), 'SELECT email adaid WHERE gesperrt freigabe1u1 FROM ada gesperrt=' => @@ -2764,14 +2902,7 @@ array ( ), )), - ), - ), - 'SELECT email, adaid FROM ada ' => - array ( - 'error' => NULL, - 'result' => - array ( - 3 => + 2 => PHPStan\Type\Constant\ConstantArrayType::__set_state(array( 'keyType' => PHPStan\Type\UnionType::__set_state(array( @@ -2785,16 +2916,6 @@ PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( 'value' => 1, )), - 2 => - PHPStan\Type\Constant\ConstantStringType::__set_state(array( - 'value' => 'adaid', - 'isClassString' => false, - )), - 3 => - PHPStan\Type\Constant\ConstantStringType::__set_state(array( - 'value' => 'email', - 'isClassString' => false, - )), ), )), 'itemType' => @@ -2815,20 +2936,10 @@ 'keyTypes' => array ( 0 => - PHPStan\Type\Constant\ConstantStringType::__set_state(array( - 'value' => 'email', - 'isClassString' => false, - )), - 1 => PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( 'value' => 0, )), - 2 => - PHPStan\Type\Constant\ConstantStringType::__set_state(array( - 'value' => 'adaid', - 'isClassString' => false, - )), - 3 => + 1 => PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( 'value' => 1, )), @@ -2839,14 +2950,6 @@ PHPStan\Type\StringType::__set_state(array( )), 1 => - PHPStan\Type\StringType::__set_state(array( - )), - 2 => - PHPStan\Type\IntegerRangeType::__set_state(array( - 'min' => 0, - 'max' => 4294967295, - )), - 3 => PHPStan\Type\IntegerRangeType::__set_state(array( 'min' => 0, 'max' => 4294967295, @@ -2857,13 +2960,6 @@ array ( ), )), - ), - ), - 'SELECT email, adaid FROM ada WHERE email=\'my_other_table\' LIMIT 1' => - array ( - 'error' => NULL, - 'result' => - array ( 1 => PHPStan\Type\Constant\ConstantArrayType::__set_state(array( 'keyType' => @@ -2928,33 +3024,7 @@ )), ), ), - 'SELECT email, adaid FROM ada . WHERE email=\'my_other_table\' LIMIT 1' => - array ( - 'error' => - staabm\PHPStanDba\Error::__set_state(array( - 'message' => 'You have an error in your SQL syntax; check the manual that corresponds to your MySQL/MariaDB server version for the right syntax to use near \'WHERE email=\'my_other_table\' LIMIT 0\' at line 1 - -Simulated query: SELECT email, adaid FROM ada . WHERE email=\'my_other_table\' LIMIT 0', - 'code' => 1064, - )), - 'result' => - array ( - 1 => NULL, - ), - ), - 'SELECT email, adaid FROM ada GROUP BY xy LIMIT 1' => - array ( - 'error' => - staabm\PHPStanDba\Error::__set_state(array( - 'message' => 'Unknown column \'xy\' in \'group statement\'', - 'code' => 1054, - )), - 'result' => - array ( - 1 => NULL, - ), - ), - 'SELECT email, adaid FROM ada WHERE adaid = \'1\'' => + 'SELECT email, adaid FROM ada ' => array ( 'error' => NULL, 'result' => @@ -3047,31 +3117,23 @@ Simulated query: SELECT email, adaid FROM ada . WHERE email=\'my_other_table\' L )), ), ), - 'SELECT email, adaid FROM ada WHERE adaid = \'1\' and email = \'email@example.org\'' => + 'SELECT email, adaid FROM ada WHERE email=\'my_other_table\' LIMIT 1' => array ( 'error' => NULL, 'result' => array ( - 3 => + 1 => PHPStan\Type\Constant\ConstantArrayType::__set_state(array( 'keyType' => PHPStan\Type\UnionType::__set_state(array( 'types' => array ( 0 => - PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( - 'value' => 0, - )), - 1 => - PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( - 'value' => 1, - )), - 2 => PHPStan\Type\Constant\ConstantStringType::__set_state(array( 'value' => 'adaid', 'isClassString' => false, )), - 3 => + 1 => PHPStan\Type\Constant\ConstantStringType::__set_state(array( 'value' => 'email', 'isClassString' => false, @@ -3101,18 +3163,10 @@ Simulated query: SELECT email, adaid FROM ada . WHERE email=\'my_other_table\' L 'isClassString' => false, )), 1 => - PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( - 'value' => 0, - )), - 2 => PHPStan\Type\Constant\ConstantStringType::__set_state(array( 'value' => 'adaid', 'isClassString' => false, )), - 3 => - PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( - 'value' => 1, - )), ), 'valueTypes' => array ( @@ -3120,44 +3174,248 @@ Simulated query: SELECT email, adaid FROM ada . WHERE email=\'my_other_table\' L PHPStan\Type\StringType::__set_state(array( )), 1 => - PHPStan\Type\StringType::__set_state(array( - )), - 2 => - PHPStan\Type\IntegerRangeType::__set_state(array( - 'min' => 0, - 'max' => 4294967295, - )), - 3 => PHPStan\Type\IntegerRangeType::__set_state(array( 'min' => 0, 'max' => 4294967295, )), ), - 'nextAutoIndex' => 2, + 'nextAutoIndex' => 0, 'optionalKeys' => array ( ), )), ), ), - 'SELECT email, adaid FROM ada WHERE adaid = \'1\' and email = :email' => + 'SELECT email, adaid FROM ada . WHERE email=\'my_other_table\' LIMIT 1' => array ( 'error' => staabm\PHPStanDba\Error::__set_state(array( - 'message' => 'You have an error in your SQL syntax; check the manual that corresponds to your MySQL/MariaDB server version for the right syntax to use near \':email LIMIT 0\' at line 1', + 'message' => 'You have an error in your SQL syntax; check the manual that corresponds to your MySQL/MariaDB server version for the right syntax to use near \'WHERE email=\'my_other_table\' LIMIT 0\' at line 1 + +Simulated query: SELECT email, adaid FROM ada . WHERE email=\'my_other_table\' LIMIT 0', 'code' => 1064, )), 'result' => array ( - 3 => NULL, + 1 => NULL, ), ), - 'SELECT email, adaid FROM ada WHERE adaid = \'1\' and email = ?' => + 'SELECT email, adaid FROM ada GROUP BY xy LIMIT 1' => array ( 'error' => staabm\PHPStanDba\Error::__set_state(array( - 'message' => 'You have an error in your SQL syntax; check the manual that corresponds to your MySQL/MariaDB server version for the right syntax to use near \'? LIMIT 0\' at line 1', - 'code' => 1064, + 'message' => 'Unknown column \'xy\' in \'group statement\'', + 'code' => 1054, + )), + 'result' => + array ( + 1 => NULL, + ), + ), + 'SELECT email, adaid FROM ada WHERE adaid = \'1\'' => + array ( + 'error' => NULL, + 'result' => + array ( + 3 => + PHPStan\Type\Constant\ConstantArrayType::__set_state(array( + 'keyType' => + PHPStan\Type\UnionType::__set_state(array( + 'types' => + array ( + 0 => + PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( + 'value' => 0, + )), + 1 => + PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( + 'value' => 1, + )), + 2 => + PHPStan\Type\Constant\ConstantStringType::__set_state(array( + 'value' => 'adaid', + 'isClassString' => false, + )), + 3 => + PHPStan\Type\Constant\ConstantStringType::__set_state(array( + 'value' => 'email', + 'isClassString' => false, + )), + ), + )), + 'itemType' => + PHPStan\Type\UnionType::__set_state(array( + 'types' => + array ( + 0 => + PHPStan\Type\IntegerRangeType::__set_state(array( + 'min' => 0, + 'max' => 4294967295, + )), + 1 => + PHPStan\Type\StringType::__set_state(array( + )), + ), + )), + 'allArrays' => NULL, + 'keyTypes' => + array ( + 0 => + PHPStan\Type\Constant\ConstantStringType::__set_state(array( + 'value' => 'email', + 'isClassString' => false, + )), + 1 => + PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( + 'value' => 0, + )), + 2 => + PHPStan\Type\Constant\ConstantStringType::__set_state(array( + 'value' => 'adaid', + 'isClassString' => false, + )), + 3 => + PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( + 'value' => 1, + )), + ), + 'valueTypes' => + array ( + 0 => + PHPStan\Type\StringType::__set_state(array( + )), + 1 => + PHPStan\Type\StringType::__set_state(array( + )), + 2 => + PHPStan\Type\IntegerRangeType::__set_state(array( + 'min' => 0, + 'max' => 4294967295, + )), + 3 => + PHPStan\Type\IntegerRangeType::__set_state(array( + 'min' => 0, + 'max' => 4294967295, + )), + ), + 'nextAutoIndex' => 2, + 'optionalKeys' => + array ( + ), + )), + ), + ), + 'SELECT email, adaid FROM ada WHERE adaid = \'1\' and email = \'email@example.org\'' => + array ( + 'error' => NULL, + 'result' => + array ( + 3 => + PHPStan\Type\Constant\ConstantArrayType::__set_state(array( + 'keyType' => + PHPStan\Type\UnionType::__set_state(array( + 'types' => + array ( + 0 => + PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( + 'value' => 0, + )), + 1 => + PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( + 'value' => 1, + )), + 2 => + PHPStan\Type\Constant\ConstantStringType::__set_state(array( + 'value' => 'adaid', + 'isClassString' => false, + )), + 3 => + PHPStan\Type\Constant\ConstantStringType::__set_state(array( + 'value' => 'email', + 'isClassString' => false, + )), + ), + )), + 'itemType' => + PHPStan\Type\UnionType::__set_state(array( + 'types' => + array ( + 0 => + PHPStan\Type\IntegerRangeType::__set_state(array( + 'min' => 0, + 'max' => 4294967295, + )), + 1 => + PHPStan\Type\StringType::__set_state(array( + )), + ), + )), + 'allArrays' => NULL, + 'keyTypes' => + array ( + 0 => + PHPStan\Type\Constant\ConstantStringType::__set_state(array( + 'value' => 'email', + 'isClassString' => false, + )), + 1 => + PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( + 'value' => 0, + )), + 2 => + PHPStan\Type\Constant\ConstantStringType::__set_state(array( + 'value' => 'adaid', + 'isClassString' => false, + )), + 3 => + PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( + 'value' => 1, + )), + ), + 'valueTypes' => + array ( + 0 => + PHPStan\Type\StringType::__set_state(array( + )), + 1 => + PHPStan\Type\StringType::__set_state(array( + )), + 2 => + PHPStan\Type\IntegerRangeType::__set_state(array( + 'min' => 0, + 'max' => 4294967295, + )), + 3 => + PHPStan\Type\IntegerRangeType::__set_state(array( + 'min' => 0, + 'max' => 4294967295, + )), + ), + 'nextAutoIndex' => 2, + 'optionalKeys' => + array ( + ), + )), + ), + ), + 'SELECT email, adaid FROM ada WHERE adaid = \'1\' and email = :email' => + array ( + 'error' => + staabm\PHPStanDba\Error::__set_state(array( + 'message' => 'You have an error in your SQL syntax; check the manual that corresponds to your MySQL/MariaDB server version for the right syntax to use near \':email LIMIT 0\' at line 1', + 'code' => 1064, + )), + 'result' => + array ( + 3 => NULL, + ), + ), + 'SELECT email, adaid FROM ada WHERE adaid = \'1\' and email = ?' => + array ( + 'error' => + staabm\PHPStanDba\Error::__set_state(array( + 'message' => 'You have an error in your SQL syntax; check the manual that corresponds to your MySQL/MariaDB server version for the right syntax to use near \'? LIMIT 0\' at line 1', + 'code' => 1064, )), 'result' => array ( @@ -3229,6 +3487,68 @@ Simulated query: SELECT email, adaid FROM ada . WHERE email=\'my_other_table\' L 'error' => NULL, 'result' => array ( + 1 => + PHPStan\Type\Constant\ConstantArrayType::__set_state(array( + 'keyType' => + PHPStan\Type\UnionType::__set_state(array( + 'types' => + array ( + 0 => + PHPStan\Type\Constant\ConstantStringType::__set_state(array( + 'value' => 'adaid', + 'isClassString' => false, + )), + 1 => + PHPStan\Type\Constant\ConstantStringType::__set_state(array( + 'value' => 'email', + 'isClassString' => false, + )), + ), + )), + 'itemType' => + PHPStan\Type\UnionType::__set_state(array( + 'types' => + array ( + 0 => + PHPStan\Type\IntegerRangeType::__set_state(array( + 'min' => 0, + 'max' => 4294967295, + )), + 1 => + PHPStan\Type\StringType::__set_state(array( + )), + ), + )), + 'allArrays' => NULL, + 'keyTypes' => + array ( + 0 => + PHPStan\Type\Constant\ConstantStringType::__set_state(array( + 'value' => 'email', + 'isClassString' => false, + )), + 1 => + PHPStan\Type\Constant\ConstantStringType::__set_state(array( + 'value' => 'adaid', + 'isClassString' => false, + )), + ), + 'valueTypes' => + array ( + 0 => + PHPStan\Type\StringType::__set_state(array( + )), + 1 => + PHPStan\Type\IntegerRangeType::__set_state(array( + 'min' => 0, + 'max' => 4294967295, + )), + ), + 'nextAutoIndex' => 0, + 'optionalKeys' => + array ( + ), + )), 3 => PHPStan\Type\Constant\ConstantArrayType::__set_state(array( 'keyType' => @@ -4126,28 +4446,44 @@ Simulated query: SELECT email, adaid FROM ada . WHERE email=\'my_other_table\' L 'error' => NULL, 'result' => array ( - 1 => + 3 => PHPStan\Type\Constant\ConstantArrayType::__set_state(array( 'keyType' => PHPStan\Type\UnionType::__set_state(array( 'types' => array ( 0 => + PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( + 'value' => 0, + )), + 1 => + PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( + 'value' => 1, + )), + 2 => + PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( + 'value' => 2, + )), + 3 => + PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( + 'value' => 3, + )), + 4 => PHPStan\Type\Constant\ConstantStringType::__set_state(array( 'value' => 'adaid', 'isClassString' => false, )), - 1 => + 5 => PHPStan\Type\Constant\ConstantStringType::__set_state(array( 'value' => 'email', 'isClassString' => false, )), - 2 => + 6 => PHPStan\Type\Constant\ConstantStringType::__set_state(array( 'value' => 'freigabe1u1', 'isClassString' => false, )), - 3 => + 7 => PHPStan\Type\Constant\ConstantStringType::__set_state(array( 'value' => 'gesperrt', 'isClassString' => false, @@ -4177,20 +4513,36 @@ Simulated query: SELECT email, adaid FROM ada . WHERE email=\'my_other_table\' L 'isClassString' => false, )), 1 => + PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( + 'value' => 0, + )), + 2 => PHPStan\Type\Constant\ConstantStringType::__set_state(array( 'value' => 'adaid', 'isClassString' => false, )), - 2 => + 3 => + PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( + 'value' => 1, + )), + 4 => PHPStan\Type\Constant\ConstantStringType::__set_state(array( 'value' => 'gesperrt', 'isClassString' => false, )), - 3 => + 5 => + PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( + 'value' => 2, + )), + 6 => PHPStan\Type\Constant\ConstantStringType::__set_state(array( 'value' => 'freigabe1u1', 'isClassString' => false, )), + 7 => + PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( + 'value' => 3, + )), ), 'valueTypes' => array ( @@ -4198,64 +4550,66 @@ Simulated query: SELECT email, adaid FROM ada . WHERE email=\'my_other_table\' L PHPStan\Type\StringType::__set_state(array( )), 1 => + PHPStan\Type\StringType::__set_state(array( + )), + 2 => PHPStan\Type\IntegerRangeType::__set_state(array( 'min' => 0, 'max' => 4294967295, )), - 2 => + 3 => + PHPStan\Type\IntegerRangeType::__set_state(array( + 'min' => 0, + 'max' => 4294967295, + )), + 4 => PHPStan\Type\IntegerRangeType::__set_state(array( 'min' => -128, 'max' => 127, )), - 3 => + 5 => + PHPStan\Type\IntegerRangeType::__set_state(array( + 'min' => -128, + 'max' => 127, + )), + 6 => + PHPStan\Type\IntegerRangeType::__set_state(array( + 'min' => -128, + 'max' => 127, + )), + 7 => PHPStan\Type\IntegerRangeType::__set_state(array( 'min' => -128, 'max' => 127, )), ), - 'nextAutoIndex' => 0, + 'nextAutoIndex' => 4, 'optionalKeys' => array ( ), )), - 3 => + 1 => PHPStan\Type\Constant\ConstantArrayType::__set_state(array( 'keyType' => PHPStan\Type\UnionType::__set_state(array( 'types' => array ( 0 => - PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( - 'value' => 0, - )), - 1 => - PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( - 'value' => 1, - )), - 2 => - PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( - 'value' => 2, - )), - 3 => - PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( - 'value' => 3, - )), - 4 => PHPStan\Type\Constant\ConstantStringType::__set_state(array( 'value' => 'adaid', 'isClassString' => false, )), - 5 => + 1 => PHPStan\Type\Constant\ConstantStringType::__set_state(array( 'value' => 'email', 'isClassString' => false, )), - 6 => + 2 => PHPStan\Type\Constant\ConstantStringType::__set_state(array( 'value' => 'freigabe1u1', 'isClassString' => false, )), - 7 => + 3 => PHPStan\Type\Constant\ConstantStringType::__set_state(array( 'value' => 'gesperrt', 'isClassString' => false, @@ -4285,36 +4639,20 @@ Simulated query: SELECT email, adaid FROM ada . WHERE email=\'my_other_table\' L 'isClassString' => false, )), 1 => - PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( - 'value' => 0, - )), - 2 => PHPStan\Type\Constant\ConstantStringType::__set_state(array( 'value' => 'adaid', 'isClassString' => false, )), - 3 => - PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( - 'value' => 1, - )), - 4 => + 2 => PHPStan\Type\Constant\ConstantStringType::__set_state(array( 'value' => 'gesperrt', 'isClassString' => false, )), - 5 => - PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( - 'value' => 2, - )), - 6 => + 3 => PHPStan\Type\Constant\ConstantStringType::__set_state(array( 'value' => 'freigabe1u1', 'isClassString' => false, )), - 7 => - PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( - 'value' => 3, - )), ), 'valueTypes' => array ( @@ -4322,34 +4660,100 @@ Simulated query: SELECT email, adaid FROM ada . WHERE email=\'my_other_table\' L PHPStan\Type\StringType::__set_state(array( )), 1 => - PHPStan\Type\StringType::__set_state(array( - )), - 2 => - PHPStan\Type\IntegerRangeType::__set_state(array( - 'min' => 0, - 'max' => 4294967295, - )), - 3 => PHPStan\Type\IntegerRangeType::__set_state(array( 'min' => 0, 'max' => 4294967295, )), - 4 => + 2 => PHPStan\Type\IntegerRangeType::__set_state(array( 'min' => -128, 'max' => 127, )), - 5 => + 3 => PHPStan\Type\IntegerRangeType::__set_state(array( 'min' => -128, 'max' => 127, )), - 6 => + ), + 'nextAutoIndex' => 0, + 'optionalKeys' => + array ( + ), + )), + 2 => + PHPStan\Type\Constant\ConstantArrayType::__set_state(array( + 'keyType' => + PHPStan\Type\UnionType::__set_state(array( + 'types' => + array ( + 0 => + PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( + 'value' => 0, + )), + 1 => + PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( + 'value' => 1, + )), + 2 => + PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( + 'value' => 2, + )), + 3 => + PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( + 'value' => 3, + )), + ), + )), + 'itemType' => + PHPStan\Type\UnionType::__set_state(array( + 'types' => + array ( + 0 => + PHPStan\Type\IntegerRangeType::__set_state(array( + 'min' => -128, + 'max' => 4294967295, + )), + 1 => + PHPStan\Type\StringType::__set_state(array( + )), + ), + )), + 'allArrays' => NULL, + 'keyTypes' => + array ( + 0 => + PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( + 'value' => 0, + )), + 1 => + PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( + 'value' => 1, + )), + 2 => + PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( + 'value' => 2, + )), + 3 => + PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( + 'value' => 3, + )), + ), + 'valueTypes' => + array ( + 0 => + PHPStan\Type\StringType::__set_state(array( + )), + 1 => + PHPStan\Type\IntegerRangeType::__set_state(array( + 'min' => 0, + 'max' => 4294967295, + )), + 2 => PHPStan\Type\IntegerRangeType::__set_state(array( 'min' => -128, 'max' => 127, )), - 7 => + 3 => PHPStan\Type\IntegerRangeType::__set_state(array( 'min' => -128, 'max' => 127, diff --git a/.phpunit-phpstan-dba.cache b/.phpunit-phpstan-dba.cache index 32c93cc6d..65f4f4e0a 100644 --- a/.phpunit-phpstan-dba.cache +++ b/.phpunit-phpstan-dba.cache @@ -121,125 +121,6 @@ array ( 'error' => NULL, ), - ' - SELECT email adaid - WHERE gesperrt = \'1\' AND email LIKE \'%@example.com\' - FROM ada - LIMIT 1 - ' => - array ( - 'error' => - staabm\PHPStanDba\Error::__set_state(array( - 'message' => 'You have an error in your SQL syntax; check the manual that corresponds to your MySQL/MariaDB server version for the right syntax to use near \'FROM ada LIMIT 0\' at line 3', - 'code' => 1064, - )), - ), - ' - SELECT email, adaid - FROM ada - WHERE gesperrt = \'1\' - FOR UPDATE - ' => - array ( - 'error' => NULL, - ), - ' - SELECT email, adaid - FROM ada - WHERE gesperrt = \'1\' - LIMIT \'1\' - ' => - array ( - 'error' => NULL, - ), - ' - SELECT email, adaid - FROM ada - WHERE gesperrt = \'1\' - LIMIT \'1\' - FOR UPDATE - ' => - array ( - 'error' => NULL, - ), - ' - SELECT email, adaid - FROM ada - WHERE gesperrt = \'1\' - LIMIT \'1\' - OFFSET \'1\' - ' => - array ( - 'error' => NULL, - ), - ' - SELECT email, adaid - FROM ada - WHERE gesperrt = \'1\' - LIMIT \'1\' - OFFSET \'1\' - FOR SHARE - ' => - array ( - 'error' => NULL, - ), - ' - SELECT email, adaid - FROM ada - WHERE gesperrt = \'1\' - LIMIT \'1\' - OFFSET \'1\' - FOR UPDATE - ' => - array ( - 'error' => NULL, - ), - ' - SELECT email, adaid - FROM ada - WHERE gesperrt = \'1\' - LIMIT \'1\' - OFFSET 1 - ' => - array ( - 'error' => NULL, - ), - ' - SELECT email, adaid - FROM ada - WHERE gesperrt = \'1\' - LIMIT \'1\', \'1\' - ' => - array ( - 'error' => NULL, - ), - ' - SELECT email, adaid - FROM ada - WHERE gesperrt = \'1\' - LIMIT \'1\', \'1\' - ' => - array ( - 'error' => NULL, - ), - ' - SELECT email, adaid - FROM ada - WHERE gesperrt = \'1\' AND email LIKE \'%@example%\' - LIMIT 1 - ' => - array ( - 'error' => NULL, - ), - ' - SELECT email, adaid - FROM ada - WHERE gesperrt = \'1\' AND email LIKE NULL - LIMIT 1 - ' => - array ( - 'error' => NULL, - ), 'SELECT * FROM ada GROUP BY doesNotExist' => array ( 'error' => @@ -3623,11 +3504,6 @@ Simulated query: SELECT email, adaid FROM ada . WHERE email=\'my_other_table\' L array ( 'error' => NULL, ), - 'SELECT email, adaid, gesperrt, freigabe1u1 FROM ada - WHERE (gesperrt=\'1\' AND freigabe1u1=1) OR (gesperrt=\'1\' AND freigabe1u1=0)' => - array ( - 'error' => NULL, - ), 'SELECT email, adaid, gesperrt, freigabe1u1 FROM ada LIMIT 1' => array ( 'error' => NULL, diff --git a/tests/data/pdo-prepare.php b/tests/data/pdo-prepare.php index 7677457ab..ef9daf1e6 100644 --- a/tests/data/pdo-prepare.php +++ b/tests/data/pdo-prepare.php @@ -122,5 +122,4 @@ public function noInferenceOnBug196(PDO $pdo, array $minorPhpVersions, \DateTime // make sure we don't infer a wrong type. assertType('PDOStatement', $stmt); } - }