From 87f4cfe44872d8514bd015d45a14b9a7dc7fc204 Mon Sep 17 00:00:00 2001 From: lsces Date: Tue, 24 Feb 2026 16:56:55 +0000 Subject: Change the Builder overloads to follow the standard for other database drivers. This is the place where restoring the lower case key values needs to be processed. --- src/FirebirdConnection.php | 6 +-- src/Query/Builder.php | 54 -------------------- src/Query/FirebirdBuilder.php | 109 +++++++++++++++++++++++++++++++++++++++++ src/Schema/FirebirdBuilder.php | 10 ++++ 4 files changed, 122 insertions(+), 57 deletions(-) delete mode 100755 src/Query/Builder.php create mode 100755 src/Query/FirebirdBuilder.php create mode 100755 src/Schema/FirebirdBuilder.php diff --git a/src/FirebirdConnection.php b/src/FirebirdConnection.php index 8695799..a6a849b 100755 --- a/src/FirebirdConnection.php +++ b/src/FirebirdConnection.php @@ -4,10 +4,10 @@ namespace Xgrz\Firebird; use Illuminate\Database\Connection as DatabaseConnection; use Illuminate\Support\Collection; -use Xgrz\Firebird\Query\Builder as FirebirdQueryBuilder; +use Xgrz\Firebird\Query\FirebirdBuilder as FirebirdQueryBuilder; use Xgrz\Firebird\Query\Grammars\FirebirdGrammar as FirebirdQueryGrammar; use Xgrz\Firebird\Query\Processors\FirebirdProcessor as FirebirdQueryProcessor; -use Xgrz\Firebird\Schema\Builder as FirebirdSchemaBuilder; +use Xgrz\Firebird\Schema\FirebirdBuilder as FirebirdSchemaBuilder; use Xgrz\Firebird\Schema\Grammars\FirebirdGrammar as FirebirdSchemaGrammar; class FirebirdConnection extends DatabaseConnection @@ -77,7 +77,7 @@ class FirebirdConnection extends DatabaseConnection /** * Get a new query builder instance. * - * @return \Xgrz\Firebird\Query\Builder + * @return \Xgrz\Firebird\Query\FirebirdBuilder */ public function query() { diff --git a/src/Query/Builder.php b/src/Query/Builder.php deleted file mode 100755 index cda4f1f..0000000 --- a/src/Query/Builder.php +++ /dev/null @@ -1,54 +0,0 @@ - 0; - } - - /** - * Add a from stored procedure clause to the query builder. - * - * @param string $procedure - * @param array $values - * @return \Illuminate\Database\Query\Builder|static - */ - public function fromProcedure(string $procedure, array $values = []) - { - $compiledProcedure = $this->grammar->compileProcedure($this, $procedure, $values); - - // Remove any expressions from the values array, as they will have - // already been evaluated by the grammar's parameterize() function. - $values = array_filter($values, function($value) { - return ! $this->grammar->isExpression($value); - }); - - $this->fromRaw($compiledProcedure, array_values($values)); - - return $this; - } - - public function where($column, $operator = NULL, $value = NULL, $boolean = 'and') - { - // detect is not search - if (! str($operator)->contains('like', true)) { - return parent::where($column, $operator, $value, $boolean); - } - - // when is search covert to upper case column and value at database level - $wrapped = $this->grammar->wrap($column); - return $boolean === 'and' - ? parent::whereRaw("UPPER($wrapped) LIKE UPPER(?)", [$value]) - : parent::orWhereRaw("UPPER($wrapped) LIKE UPPER(?)", [$value]); - } -} diff --git a/src/Query/FirebirdBuilder.php b/src/Query/FirebirdBuilder.php new file mode 100755 index 0000000..98d2b18 --- /dev/null +++ b/src/Query/FirebirdBuilder.php @@ -0,0 +1,109 @@ + 0; + } + + /** + * Add a from stored procedure clause to the query builder. + * + * @param string $procedure + * @param array $values + * @return \Illuminate\Database\Query\Builder|static + */ + public function fromProcedure(string $procedure, array $values = []) + { + $compiledProcedure = $this->grammar->compileProcedure($this, $procedure, $values); + + // Remove any expressions from the values array, as they will have + // already been evaluated by the grammar's parameterize() function. + $values = array_filter($values, function($value) { + return ! $this->grammar->isExpression($value); + }); + + $this->fromRaw($compiledProcedure, array_values($values)); + + return $this; + } + + public function where($column, $operator = NULL, $value = NULL, $boolean = 'and') + { + // detect is not search + if (! str($operator)->contains('like', true)) { + return parent::where($column, $operator, $value, $boolean); + } + + // when is search covert to upper case column and value at database level + $wrapped = $this->grammar->wrap($column); + return $boolean === 'and' + ? parent::whereRaw("UPPER($wrapped) LIKE UPPER(?)", [$value]) + : parent::orWhereRaw("UPPER($wrapped) LIKE UPPER(?)", [$value]); + } + + /** + * Retrieve column values from rows represented as objects. + * + * @param array $queryResult + * @param string $column + * @param string $key + * @return Collection + */ + protected function pluckFromObjectColumn($queryResult, $column, $key) + { + $results = []; + $column = strtoupper($column); + $key = strtoupper($key); + + foreach ($queryResult as $item) { + if (is_null($key)) { + foreach ($queryResult as $row) { + $results[] = $row->$column; + } + } else { + foreach ($queryResult as $row) { + $results[$row->$key] = $row->$column; + } + } + } + + return new Collection($results); + } + + /** + * Retrieve column values from rows represented as arrays. + * + * @param array $queryResult + * @param string $column + * @param string $key + * @return Collection + */ + protected function pluckFromArrayColumn($queryResult, $column, $key) + { + $results = []; + + if (is_null($key)) { + foreach ($queryResult as $row) { + $results[] = $row[$column]; + } + } else { + foreach ($queryResult as $row) { + $results[$row[$key]] = $row[$column]; + } + } + + return new Collection($results); + } +} diff --git a/src/Schema/FirebirdBuilder.php b/src/Schema/FirebirdBuilder.php new file mode 100755 index 0000000..0b5a1a7 --- /dev/null +++ b/src/Schema/FirebirdBuilder.php @@ -0,0 +1,10 @@ +