From dad8eb175f5589c1871fea643941fbc487de1304 Mon Sep 17 00:00:00 2001 From: Markus Staab Date: Sat, 22 Jan 2022 08:40:58 +0100 Subject: [PATCH 1/5] support queries containing OFFSET --- .phpunit-phpstan-dba.cache | 10 ++++++++++ src/QueryReflection/QuerySimulation.php | 3 +++ .../syntax-error-in-prepared-statement.php | 20 +++++++++++++++++++ 3 files changed, 33 insertions(+) diff --git a/.phpunit-phpstan-dba.cache b/.phpunit-phpstan-dba.cache index 08ef578b8..db2e8c273 100644 --- a/.phpunit-phpstan-dba.cache +++ b/.phpunit-phpstan-dba.cache @@ -24,6 +24,16 @@ array ( 'error' => NULL, ), + ' + SELECT email, adaid + FROM ada + WHERE gesperrt = \'1\' + LIMIT \'1\' + OFFSET \'1\' + ' => + array ( + 'error' => NULL, + ), ' SELECT email, adaid FROM ada diff --git a/src/QueryReflection/QuerySimulation.php b/src/QueryReflection/QuerySimulation.php index 49d82348e..7c5d9c4da 100644 --- a/src/QueryReflection/QuerySimulation.php +++ b/src/QueryReflection/QuerySimulation.php @@ -113,6 +113,9 @@ private static function stripTraillingLimit(string $queryString): ?string { $queryString = rtrim($queryString, ';'); + // strip trailling OFFSET + $queryString = preg_replace('/(.*)OFFSET\s+["\']?\d+["\']?\s*$/i', '$1', $queryString); + // XXX someday we will use a proper SQL parser, // which would also allow us to support even more complex expressions like SELECT .. LIMIT X, Y FOR UPDATE return preg_replace('/\s*LIMIT\s+["\']?\d+["\']?\s*(,\s*["\']?\d*["\']?)?\s*$/i', '', $queryString); diff --git a/tests/data/syntax-error-in-prepared-statement.php b/tests/data/syntax-error-in-prepared-statement.php index 10e8ec8c7..ff7768b35 100644 --- a/tests/data/syntax-error-in-prepared-statement.php +++ b/tests/data/syntax-error-in-prepared-statement.php @@ -208,4 +208,24 @@ public function noErrorInBug94(Connection $connection) $orderId = 15315351; $connection->preparedQuery($sql, ['orderId' => $orderId, 'productId' => $productId, 'supplierId' => $supplierId]); } + + public function noErrorOnOffsetAfterLimit(Connection $connection, int $limit, int $offset) + { + $connection->preparedQuery(' + SELECT email, adaid + FROM ada + WHERE gesperrt = ? + LIMIT ? + OFFSET ? + ', [1, $limit, $offset]); + + $connection->preparedQuery(' + SELECT email, adaid + FROM ada + WHERE gesperrt = :gesperrt + LIMIT :limit + OFFSET :offset + ', [':gesperrt' => 1, ':limit' => $limit, ':offset' => $offset]); + } + } From 0cd135c874f6868de8856de9435f6f941ff0f5ec Mon Sep 17 00:00:00 2001 From: Markus Staab Date: Sat, 22 Jan 2022 08:45:30 +0100 Subject: [PATCH 2/5] cs --- .phpunit-phpstan-dba.cache | 10 ++++++++++ src/QueryReflection/QuerySimulation.php | 5 +++++ .../syntax-error-in-prepared-statement.php | 20 ++++++++++++++++++- 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/.phpunit-phpstan-dba.cache b/.phpunit-phpstan-dba.cache index db2e8c273..17f1f7424 100644 --- a/.phpunit-phpstan-dba.cache +++ b/.phpunit-phpstan-dba.cache @@ -34,6 +34,16 @@ array ( 'error' => NULL, ), + ' + SELECT email, adaid + FROM ada + WHERE gesperrt = \'1\' + LIMIT \'1\' + OFFSET 1 + ' => + array ( + 'error' => NULL, + ), ' SELECT email, adaid FROM ada diff --git a/src/QueryReflection/QuerySimulation.php b/src/QueryReflection/QuerySimulation.php index 7c5d9c4da..639f58d69 100644 --- a/src/QueryReflection/QuerySimulation.php +++ b/src/QueryReflection/QuerySimulation.php @@ -4,6 +4,7 @@ namespace staabm\PHPStanDba\QueryReflection; +use PHPStan\ShouldNotHappenException; use PHPStan\Type\ArrayType; use PHPStan\Type\BooleanType; use PHPStan\Type\ConstantScalarType; @@ -116,6 +117,10 @@ private static function stripTraillingLimit(string $queryString): ?string // strip trailling OFFSET $queryString = preg_replace('/(.*)OFFSET\s+["\']?\d+["\']?\s*$/i', '$1', $queryString); + if (null === $queryString) { + throw new ShouldNotHappenException('Could not strip trailing offset from query'); + } + // XXX someday we will use a proper SQL parser, // which would also allow us to support even more complex expressions like SELECT .. LIMIT X, Y FOR UPDATE return preg_replace('/\s*LIMIT\s+["\']?\d+["\']?\s*(,\s*["\']?\d*["\']?)?\s*$/i', '', $queryString); diff --git a/tests/data/syntax-error-in-prepared-statement.php b/tests/data/syntax-error-in-prepared-statement.php index ff7768b35..b66720baf 100644 --- a/tests/data/syntax-error-in-prepared-statement.php +++ b/tests/data/syntax-error-in-prepared-statement.php @@ -209,6 +209,25 @@ public function noErrorInBug94(Connection $connection) $connection->preparedQuery($sql, ['orderId' => $orderId, 'productId' => $productId, 'supplierId' => $supplierId]); } + public function noErrorOnBug175(Connection $connection, int $limit, int $offset) + { + $connection->preparedQuery(' + SELECT email, adaid + FROM ada + WHERE gesperrt = ? + LIMIT ? + OFFSET '.$offset.' + ', [1, $limit]); + + $connection->preparedQuery(' + SELECT email, adaid + FROM ada + WHERE gesperrt = ? + LIMIT ? + OFFSET '.((int) $offset).' + ', [1, $limit]); + } + public function noErrorOnOffsetAfterLimit(Connection $connection, int $limit, int $offset) { $connection->preparedQuery(' @@ -227,5 +246,4 @@ public function noErrorOnOffsetAfterLimit(Connection $connection, int $limit, in OFFSET :offset ', [':gesperrt' => 1, ':limit' => $limit, ':offset' => $offset]); } - } From e097c2d6f3ef1e4df318466b883fe5ce683a2015 Mon Sep 17 00:00:00 2001 From: Markus Staab Date: Sat, 22 Jan 2022 08:48:38 +0100 Subject: [PATCH 3/5] test type inference with OFFSET --- .phpstan-dba.cache | 481 ++++--------------------------------- .phpunit-phpstan-dba.cache | 28 ++- tests/data/pdo.php | 7 + 3 files changed, 74 insertions(+), 442 deletions(-) diff --git a/.phpstan-dba.cache b/.phpstan-dba.cache index 1c8fe36d9..c706c58b1 100644 --- a/.phpstan-dba.cache +++ b/.phpstan-dba.cache @@ -909,6 +909,47 @@ )), ), ), + 'SELECT adaid FROM ada LIMIT 1 OFFSET 1' => + array ( + 'error' => NULL, + 'result' => + 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 adaid = 1' => array ( 'error' => NULL, @@ -1332,59 +1373,6 @@ '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\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, - )), - 1 => - PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( - 'value' => 0, - )), - ), - 'valueTypes' => - array ( - 0 => - PHPStan\Type\IntegerRangeType::__set_state(array( - 'min' => 0, - 'max' => 4294967295, - )), - 1 => - PHPStan\Type\IntegerRangeType::__set_state(array( - 'min' => 0, - 'max' => 4294967295, - )), - ), - 'nextAutoIndex' => 1, - 'optionalKeys' => - array ( - ), - )), 1 => PHPStan\Type\Constant\ConstantArrayType::__set_state(array( 'keyType' => @@ -1508,59 +1496,6 @@ '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\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, - )), - 1 => - PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( - 'value' => 0, - )), - ), - 'valueTypes' => - array ( - 0 => - PHPStan\Type\IntegerRangeType::__set_state(array( - 'min' => 0, - 'max' => 4294967295, - )), - 1 => - PHPStan\Type\IntegerRangeType::__set_state(array( - 'min' => 0, - 'max' => 4294967295, - )), - ), - 'nextAutoIndex' => 1, - 'optionalKeys' => - array ( - ), - )), 1 => PHPStan\Type\Constant\ConstantArrayType::__set_state(array( 'keyType' => @@ -1662,59 +1597,6 @@ '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\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, - )), - 1 => - PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( - 'value' => 0, - )), - ), - 'valueTypes' => - array ( - 0 => - PHPStan\Type\IntegerRangeType::__set_state(array( - 'min' => 0, - 'max' => 4294967295, - )), - 1 => - PHPStan\Type\IntegerRangeType::__set_state(array( - 'min' => 0, - 'max' => 4294967295, - )), - ), - 'nextAutoIndex' => 1, - 'optionalKeys' => - array ( - ), - )), 1 => PHPStan\Type\Constant\ConstantArrayType::__set_state(array( 'keyType' => @@ -1756,59 +1638,6 @@ '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\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, - )), - 1 => - PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( - 'value' => 0, - )), - ), - 'valueTypes' => - array ( - 0 => - PHPStan\Type\IntegerRangeType::__set_state(array( - 'min' => 0, - 'max' => 4294967295, - )), - 1 => - PHPStan\Type\IntegerRangeType::__set_state(array( - 'min' => 0, - 'max' => 4294967295, - )), - ), - 'nextAutoIndex' => 1, - 'optionalKeys' => - array ( - ), - )), 1 => PHPStan\Type\Constant\ConstantArrayType::__set_state(array( 'keyType' => @@ -2538,8 +2367,6 @@ 'result' => array ( 1 => NULL, - 2 => NULL, - 3 => NULL, ), ), 'SELECT email adaid WHERE gesperrt freigabe1u1 FROM ada gesperrt=' => @@ -4086,148 +3913,6 @@ Simulated query: SELECT email, adaid GROUP BY xy FROM ada LIMIT 0', '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\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 => - PHPStan\Type\Constant\ConstantStringType::__set_state(array( - 'value' => 'email', - 'isClassString' => false, - )), - 6 => - PHPStan\Type\Constant\ConstantStringType::__set_state(array( - 'value' => 'freigabe1u1', - 'isClassString' => false, - )), - 7 => - PHPStan\Type\Constant\ConstantStringType::__set_state(array( - 'value' => 'gesperrt', - 'isClassString' => false, - )), - ), - )), - '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\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, - )), - 4 => - PHPStan\Type\Constant\ConstantStringType::__set_state(array( - 'value' => 'gesperrt', - 'isClassString' => false, - )), - 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 ( - 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, - )), - 4 => - PHPStan\Type\IntegerRangeType::__set_state(array( - 'min' => -128, - 'max' => 127, - )), - 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' => 4, - 'optionalKeys' => - array ( - ), - )), 1 => PHPStan\Type\Constant\ConstantArrayType::__set_state(array( 'keyType' => @@ -4320,90 +4005,6 @@ Simulated query: SELECT email, adaid GROUP BY xy FROM ada LIMIT 0', 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, - )), - 3 => - PHPStan\Type\IntegerRangeType::__set_state(array( - 'min' => -128, - 'max' => 127, - )), - ), - 'nextAutoIndex' => 4, - 'optionalKeys' => - array ( - ), - )), ), ), 'SELECT email, adaid, gesperrt, freigabe1u1 FROM ada LIMIT 1' => diff --git a/.phpunit-phpstan-dba.cache b/.phpunit-phpstan-dba.cache index 17f1f7424..ee0da4ff8 100644 --- a/.phpunit-phpstan-dba.cache +++ b/.phpunit-phpstan-dba.cache @@ -32,7 +32,13 @@ OFFSET \'1\' ' => array ( - 'error' => NULL, + '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 \'\'1\' + OFFSET \'1\' + LIMIT 0\' at line 4', + 'code' => 1064, + )), ), ' SELECT email, adaid @@ -42,7 +48,13 @@ OFFSET 1 ' => array ( - 'error' => NULL, + '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 \'\'1\' + OFFSET 1 + LIMIT 0\' at line 4', + 'code' => 1064, + )), ), ' SELECT email, adaid @@ -1029,6 +1041,18 @@ )), ), ), + 'SELECT adaid FROM ada LIMIT 1 OFFSET 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, + )), + 'result' => + array ( + 1 => NULL, + ), + ), 'SELECT adaid FROM ada WHERE adaid IN (\'1\')' => array ( 'error' => NULL, diff --git a/tests/data/pdo.php b/tests/data/pdo.php index 937336f62..d3535f7f5 100644 --- a/tests/data/pdo.php +++ b/tests/data/pdo.php @@ -163,4 +163,11 @@ public function placeholderInData(PDO $pdo) $stmt = $pdo->query($query, PDO::FETCH_ASSOC); assertType('PDOStatement}>', $stmt); } + + public function offsetAfterLimit(PDO $pdo, int $limit, int $offset) + { + $query = 'SELECT adaid FROM ada LIMIT '.$limit.' OFFSET '.$offset; + $stmt = $pdo->query($query, PDO::FETCH_ASSOC); + assertType('PDOStatement}>', $stmt); + } } From 90ff0a108a8b000c9f071ee01c659a0d97bf5b12 Mon Sep 17 00:00:00 2001 From: Markus Staab Date: Sat, 22 Jan 2022 08:49:23 +0100 Subject: [PATCH 4/5] Update .phpunit-phpstan-dba.cache --- .phpunit-phpstan-dba.cache | 57 +++++++++++++++++++++++++------------- 1 file changed, 37 insertions(+), 20 deletions(-) diff --git a/.phpunit-phpstan-dba.cache b/.phpunit-phpstan-dba.cache index ee0da4ff8..6018e8ce3 100644 --- a/.phpunit-phpstan-dba.cache +++ b/.phpunit-phpstan-dba.cache @@ -32,13 +32,7 @@ OFFSET \'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 \'\'1\' - OFFSET \'1\' - LIMIT 0\' at line 4', - 'code' => 1064, - )), + 'error' => NULL, ), ' SELECT email, adaid @@ -48,13 +42,7 @@ OFFSET 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 \'\'1\' - OFFSET 1 - LIMIT 0\' at line 4', - 'code' => 1064, - )), + 'error' => NULL, ), ' SELECT email, adaid @@ -1043,14 +1031,43 @@ ), 'SELECT adaid FROM ada LIMIT 1 OFFSET 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, - )), + 'error' => NULL, 'result' => array ( - 1 => NULL, + 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 adaid IN (\'1\')' => From 2d5e9b790e1b488e1167782f4dbee49e476d62e4 Mon Sep 17 00:00:00 2001 From: Markus Staab Date: Sat, 22 Jan 2022 08:51:24 +0100 Subject: [PATCH 5/5] Update .phpstan-dba.cache --- .phpstan-dba.cache | 440 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 440 insertions(+) diff --git a/.phpstan-dba.cache b/.phpstan-dba.cache index c706c58b1..0ee1a84e3 100644 --- a/.phpstan-dba.cache +++ b/.phpstan-dba.cache @@ -1373,6 +1373,59 @@ '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\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, + )), + 1 => + PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( + 'value' => 0, + )), + ), + 'valueTypes' => + array ( + 0 => + PHPStan\Type\IntegerRangeType::__set_state(array( + 'min' => 0, + 'max' => 4294967295, + )), + 1 => + PHPStan\Type\IntegerRangeType::__set_state(array( + 'min' => 0, + 'max' => 4294967295, + )), + ), + 'nextAutoIndex' => 1, + 'optionalKeys' => + array ( + ), + )), 1 => PHPStan\Type\Constant\ConstantArrayType::__set_state(array( 'keyType' => @@ -1496,6 +1549,59 @@ '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\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, + )), + 1 => + PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( + 'value' => 0, + )), + ), + 'valueTypes' => + array ( + 0 => + PHPStan\Type\IntegerRangeType::__set_state(array( + 'min' => 0, + 'max' => 4294967295, + )), + 1 => + PHPStan\Type\IntegerRangeType::__set_state(array( + 'min' => 0, + 'max' => 4294967295, + )), + ), + 'nextAutoIndex' => 1, + 'optionalKeys' => + array ( + ), + )), 1 => PHPStan\Type\Constant\ConstantArrayType::__set_state(array( 'keyType' => @@ -1597,6 +1703,59 @@ '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\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, + )), + 1 => + PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( + 'value' => 0, + )), + ), + 'valueTypes' => + array ( + 0 => + PHPStan\Type\IntegerRangeType::__set_state(array( + 'min' => 0, + 'max' => 4294967295, + )), + 1 => + PHPStan\Type\IntegerRangeType::__set_state(array( + 'min' => 0, + 'max' => 4294967295, + )), + ), + 'nextAutoIndex' => 1, + 'optionalKeys' => + array ( + ), + )), 1 => PHPStan\Type\Constant\ConstantArrayType::__set_state(array( 'keyType' => @@ -1638,6 +1797,59 @@ '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\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, + )), + 1 => + PHPStan\Type\Constant\ConstantIntegerType::__set_state(array( + 'value' => 0, + )), + ), + 'valueTypes' => + array ( + 0 => + PHPStan\Type\IntegerRangeType::__set_state(array( + 'min' => 0, + 'max' => 4294967295, + )), + 1 => + PHPStan\Type\IntegerRangeType::__set_state(array( + 'min' => 0, + 'max' => 4294967295, + )), + ), + 'nextAutoIndex' => 1, + 'optionalKeys' => + array ( + ), + )), 1 => PHPStan\Type\Constant\ConstantArrayType::__set_state(array( 'keyType' => @@ -2367,6 +2579,8 @@ 'result' => array ( 1 => NULL, + 2 => NULL, + 3 => NULL, ), ), 'SELECT email adaid WHERE gesperrt freigabe1u1 FROM ada gesperrt=' => @@ -3913,6 +4127,148 @@ Simulated query: SELECT email, adaid GROUP BY xy FROM ada LIMIT 0', '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\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 => + PHPStan\Type\Constant\ConstantStringType::__set_state(array( + 'value' => 'email', + 'isClassString' => false, + )), + 6 => + PHPStan\Type\Constant\ConstantStringType::__set_state(array( + 'value' => 'freigabe1u1', + 'isClassString' => false, + )), + 7 => + PHPStan\Type\Constant\ConstantStringType::__set_state(array( + 'value' => 'gesperrt', + 'isClassString' => false, + )), + ), + )), + '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\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, + )), + 4 => + PHPStan\Type\Constant\ConstantStringType::__set_state(array( + 'value' => 'gesperrt', + 'isClassString' => false, + )), + 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 ( + 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, + )), + 4 => + PHPStan\Type\IntegerRangeType::__set_state(array( + 'min' => -128, + 'max' => 127, + )), + 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' => 4, + 'optionalKeys' => + array ( + ), + )), 1 => PHPStan\Type\Constant\ConstantArrayType::__set_state(array( 'keyType' => @@ -4005,6 +4361,90 @@ Simulated query: SELECT email, adaid GROUP BY xy FROM ada LIMIT 0', 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, + )), + 3 => + PHPStan\Type\IntegerRangeType::__set_state(array( + 'min' => -128, + 'max' => 127, + )), + ), + 'nextAutoIndex' => 4, + 'optionalKeys' => + array ( + ), + )), ), ), 'SELECT email, adaid, gesperrt, freigabe1u1 FROM ada LIMIT 1' =>