From afe5144dc7a3ee85ed1131b8f33433b25678522b Mon Sep 17 00:00:00 2001 From: Dave Mc Nicoll Date: Mon, 20 Nov 2023 15:21:17 -0500 Subject: [PATCH 1/3] - Added a new value binding methods --- src/Common/PdoObject.php | 54 ++++++++++++++++++++++++---------------- src/Query/Values.php | 2 +- src/Repository.php | 4 ++- 3 files changed, 37 insertions(+), 23 deletions(-) diff --git a/src/Common/PdoObject.php b/src/Common/PdoObject.php index a626e6a..24d6341 100644 --- a/src/Common/PdoObject.php +++ b/src/Common/PdoObject.php @@ -82,27 +82,7 @@ class PdoObject extends PDO { $this->beginTransaction(); } - foreach($parameters as $key => $value) { - switch(strtolower(gettype($value))) { - case "boolean": - $type = Pdo::PARAM_BOOL; - break; - - case "integer": - $type = Pdo::PARAM_INT; - break; - - case "null": - $type = Pdo::PARAM_NULL; - break; - - case "string": - default: - $type = Pdo::PARAM_STR; - } - - $statement->bindValue($key, (string) $value, $type); - } + $this->bindVariables($statement, $parameters); $this->executionStatus = $statement->execute(); @@ -131,4 +111,36 @@ class PdoObject extends PDO { return null; } + + protected function bindVariables(PDOStatement $statement, array &$parameters) : void + { + if ($parameters) { + if (array_is_list($parameters)) { + $parameters = array_combine(range(1, count($parameters)), array_values($parameters)); + } + else { + foreach ($parameters as $key => $value) { + switch (strtolower(gettype($value))) { + case "boolean": + $type = Pdo::PARAM_BOOL; + break; + + case "integer": + $type = Pdo::PARAM_INT; + break; + + case "null": + $type = Pdo::PARAM_NULL; + break; + + case "string": + default: + $type = Pdo::PARAM_STR; + } + + $statement->bindValue($key, $value, $type); + } + } + } + } } diff --git a/src/Query/Values.php b/src/Query/Values.php index 2ffc826..be33dea 100644 --- a/src/Query/Values.php +++ b/src/Query/Values.php @@ -27,7 +27,7 @@ class Values extends Fragment { # index starts at '1' for Pdo params $this->rows[] = array_combine(range(1, count($row)), array_values($row)); - + return $this; } diff --git a/src/Repository.php b/src/Repository.php index 349e42e..11e7920 100644 --- a/src/Repository.php +++ b/src/Repository.php @@ -242,7 +242,7 @@ class Repository $primaryKeyDefinition = Ulmus::resolveEntity($this->entityClass)->getPrimaryKeyField(); - if ( $replace || ! $entity->isLoaded() ) { + if ( ! $entity->isLoaded() ) { # $dataset = array_filter($dataset, fn($item, $field) => ! ($this->entityResolver->searchFieldAnnotation($field, new Field, false)->readonly ?? false), \ARRAY_FILTER_USE_BOTH); $statement = $this->insertSqlQuery($fieldsAndValue ?? $dataset, $replace)->runInsertQuery(); @@ -277,6 +277,8 @@ class Repository return $update ? (bool) $update->rowCount : false; } } + + return 0; } public function replace(object|array $entity, ? array $fieldsAndValue = null) : bool From ea667db55280c8317bdf715b49a66ea10e86fede Mon Sep 17 00:00:00 2001 From: Dave Mc Nicoll Date: Mon, 20 Nov 2023 15:24:23 -0500 Subject: [PATCH 2/3] - Testing another boolean handling method --- src/Common/PdoObject.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Common/PdoObject.php b/src/Common/PdoObject.php index 24d6341..3a2cf66 100644 --- a/src/Common/PdoObject.php +++ b/src/Common/PdoObject.php @@ -121,10 +121,10 @@ class PdoObject extends PDO { else { foreach ($parameters as $key => $value) { switch (strtolower(gettype($value))) { - case "boolean": - $type = Pdo::PARAM_BOOL; - break; + #$type = Pdo::PARAM_BOOL; + #break; + case "boolean": case "integer": $type = Pdo::PARAM_INT; break; From d4d68a029d3d50eb752b44adcb22f84ab1eb4266 Mon Sep 17 00:00:00 2001 From: Dave Mc Nicoll Date: Fri, 24 Nov 2023 11:31:54 -0500 Subject: [PATCH 3/3] - Fixed a problem of invalid comparison types in empty IN() query fragment --- src/Query/Where.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Query/Where.php b/src/Query/Where.php index fd37cc6..007df5b 100644 --- a/src/Query/Where.php +++ b/src/Query/Where.php @@ -128,7 +128,7 @@ class Where extends Fragment { } } else { - $stack[] = $this->filterValue(false); + $stack[] = $this->filterValue(Sql::raw("(SELECT NULL WHERE FALSE)")); } return "(" . implode(", ", $stack) . ")";