From 495f9bcd97c53767fbe5906a9aa8734ff5748691 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Vo=C5=99=C3=AD=C5=A1ek?= Date: Wed, 5 May 2021 16:19:35 +0200 Subject: [PATCH] Fix PostgreSQL boolean handling for PHP 8.0.5 (#870) * Fix PostgreSQL boolean handling for PHP 8.0.5 * remove "processUncoveredFiles" from phpunit --- phpunit-mssql.xml.dist | 2 +- phpunit-mysql.xml.dist | 2 +- phpunit-oracle.xml.dist | 2 +- phpunit-pgsql.xml.dist | 2 +- phpunit.xml.dist | 2 +- src/Model/Scope/Condition.php | 19 ++++++++++++++++--- src/Persistence/Sql.php | 4 ++-- tests/PersistentArrayOfStringsTest.php | 2 +- 8 files changed, 24 insertions(+), 11 deletions(-) diff --git a/phpunit-mssql.xml.dist b/phpunit-mssql.xml.dist index d244bc62d..9b202f2f9 100644 --- a/phpunit-mssql.xml.dist +++ b/phpunit-mssql.xml.dist @@ -14,7 +14,7 @@ - + src src-schema diff --git a/phpunit-mysql.xml.dist b/phpunit-mysql.xml.dist index c3d45b7a2..d72885780 100644 --- a/phpunit-mysql.xml.dist +++ b/phpunit-mysql.xml.dist @@ -14,7 +14,7 @@ - + src src-schema diff --git a/phpunit-oracle.xml.dist b/phpunit-oracle.xml.dist index 5323bbe65..82141032e 100644 --- a/phpunit-oracle.xml.dist +++ b/phpunit-oracle.xml.dist @@ -14,7 +14,7 @@ - + src src-schema diff --git a/phpunit-pgsql.xml.dist b/phpunit-pgsql.xml.dist index 2a46e6b73..97853273e 100644 --- a/phpunit-pgsql.xml.dist +++ b/phpunit-pgsql.xml.dist @@ -14,7 +14,7 @@ - + src src-schema diff --git a/phpunit.xml.dist b/phpunit.xml.dist index 300ccb14c..a6a0f4c8b 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -14,7 +14,7 @@ - + src src-schema diff --git a/src/Model/Scope/Condition.php b/src/Model/Scope/Condition.php index dd81853e7..9a76cda7d 100644 --- a/src/Model/Scope/Condition.php +++ b/src/Model/Scope/Condition.php @@ -189,12 +189,25 @@ public function toQueryArguments(): array foreach (array_reverse($refModels) as $refModel) { if ($field === '#') { - $field = $value ? $refModel->action('count') : $refModel->action('exists'); + if (is_string($value) && $value === (string) (int) $value) { + $value = (int) $value; + } + + if ($value === 0) { + $field = $refModel->action('exists'); + $value = false; + } elseif ($value === 1 && $operator === self::OPERATOR_GREATER_EQUAL) { + $field = $refModel->action('exists'); + $operator = self::OPERATOR_EQUALS; + $value = true; + } else { + $field = $refModel->action('count'); + } } else { $refModel->addCondition($field, $operator, $value); $field = $refModel->action('exists'); - $operator = '>'; - $value = 0; + $operator = self::OPERATOR_EQUALS; + $value = true; } } } else { diff --git a/src/Persistence/Sql.php b/src/Persistence/Sql.php index 29fc1242e..3e152ac93 100644 --- a/src/Persistence/Sql.php +++ b/src/Persistence/Sql.php @@ -424,9 +424,9 @@ public function _typecastSaveField(Field $field, $value) switch ($field->type) { case 'boolean': - // if enum is not set, then simply cast value to integer + // if enum is not set, then simply cast value to boolean if (!isset($field->enum) || !$field->enum) { - $v = (int) $v; + $v = (bool) $v; break; } diff --git a/tests/PersistentArrayOfStringsTest.php b/tests/PersistentArrayOfStringsTest.php index ffd8fe6e8..e45dabfd1 100644 --- a/tests/PersistentArrayOfStringsTest.php +++ b/tests/PersistentArrayOfStringsTest.php @@ -57,7 +57,7 @@ public function testTypecasting() 'integer' => 123, 'money' => 123.45, 'float' => 123.456789, - 'boolean' => 1, + 'boolean' => true, 'boolean_enum' => 'N', 'date' => '2019-01-20', 'datetime' => '2019-01-20 12:23:34.000000',