From 4660d7338bdf0107c4ae1c5c428125db3f9c6dfa Mon Sep 17 00:00:00 2001 From: Mostafa Kassem Date: Mon, 27 Jan 2025 17:27:27 +0200 Subject: [PATCH] fix QueryBuilder's TextConstraint for Postgres --- .../Operators/ContainsOperator.php | 16 +++++++++++----- .../Operators/EndsWithOperator.php | 16 +++++++++++----- .../TextConstraint/Operators/EqualsOperator.php | 16 +++++++++++----- .../Operators/StartsWithOperator.php | 16 +++++++++++----- 4 files changed, 44 insertions(+), 20 deletions(-) diff --git a/packages/tables/src/Filters/QueryBuilder/Constraints/TextConstraint/Operators/ContainsOperator.php b/packages/tables/src/Filters/QueryBuilder/Constraints/TextConstraint/Operators/ContainsOperator.php index 48c6da589e3..9032fdc3e3b 100644 --- a/packages/tables/src/Filters/QueryBuilder/Constraints/TextConstraint/Operators/ContainsOperator.php +++ b/packages/tables/src/Filters/QueryBuilder/Constraints/TextConstraint/Operators/ContainsOperator.php @@ -61,12 +61,18 @@ public function apply(Builder $query, string $qualifiedColumn): Builder $isPostgres = $databaseConnection->getDriverName() === 'pgsql'; - if ((Str::lower($qualifiedColumn) !== $qualifiedColumn) && $isPostgres) { - $qualifiedColumn = (string) str($qualifiedColumn)->wrap('"'); - } - if ($isPostgres) { - $qualifiedColumn = new Expression("lower({$qualifiedColumn}::text)"); + [$table, $column] = explode('.', $qualifiedColumn); + + if (Str::lower($table) !== $table) { + $table = (string) str($table)->wrap('"'); + } + + if (Str::lower($column) !== $column) { + $column = (string) str($column)->wrap('"'); + } + + $qualifiedColumn = new Expression("lower({$table}.{$column}::text)"); $text = Str::lower($text); } diff --git a/packages/tables/src/Filters/QueryBuilder/Constraints/TextConstraint/Operators/EndsWithOperator.php b/packages/tables/src/Filters/QueryBuilder/Constraints/TextConstraint/Operators/EndsWithOperator.php index 8136b7f83d8..7ebcc87910e 100644 --- a/packages/tables/src/Filters/QueryBuilder/Constraints/TextConstraint/Operators/EndsWithOperator.php +++ b/packages/tables/src/Filters/QueryBuilder/Constraints/TextConstraint/Operators/EndsWithOperator.php @@ -61,12 +61,18 @@ public function apply(Builder $query, string $qualifiedColumn): Builder $isPostgres = $databaseConnection->getDriverName() === 'pgsql'; - if ((Str::lower($qualifiedColumn) !== $qualifiedColumn) && $isPostgres) { - $qualifiedColumn = (string) str($qualifiedColumn)->wrap('"'); - } - if ($isPostgres) { - $qualifiedColumn = new Expression("lower({$qualifiedColumn}::text)"); + [$table, $column] = explode('.', $qualifiedColumn); + + if (Str::lower($table) !== $table) { + $table = (string) str($table)->wrap('"'); + } + + if (Str::lower($column) !== $column) { + $column = (string) str($column)->wrap('"'); + } + + $qualifiedColumn = new Expression("lower({$table}.{$column}::text)"); $text = Str::lower($text); } diff --git a/packages/tables/src/Filters/QueryBuilder/Constraints/TextConstraint/Operators/EqualsOperator.php b/packages/tables/src/Filters/QueryBuilder/Constraints/TextConstraint/Operators/EqualsOperator.php index d040b87f8ae..253836cc50b 100644 --- a/packages/tables/src/Filters/QueryBuilder/Constraints/TextConstraint/Operators/EqualsOperator.php +++ b/packages/tables/src/Filters/QueryBuilder/Constraints/TextConstraint/Operators/EqualsOperator.php @@ -61,12 +61,18 @@ public function apply(Builder $query, string $qualifiedColumn): Builder $isPostgres = $databaseConnection->getDriverName() === 'pgsql'; - if ((Str::lower($qualifiedColumn) !== $qualifiedColumn) && $isPostgres) { - $qualifiedColumn = (string) str($qualifiedColumn)->wrap('"'); - } - if ($isPostgres) { - $qualifiedColumn = new Expression("lower({$qualifiedColumn}::text)"); + [$table, $column] = explode('.', $qualifiedColumn); + + if (Str::lower($table) !== $table) { + $table = (string) str($table)->wrap('"'); + } + + if (Str::lower($column) !== $column) { + $column = (string) str($column)->wrap('"'); + } + + $qualifiedColumn = new Expression("lower({$table}.{$column}::text)"); $text = Str::lower($text); } diff --git a/packages/tables/src/Filters/QueryBuilder/Constraints/TextConstraint/Operators/StartsWithOperator.php b/packages/tables/src/Filters/QueryBuilder/Constraints/TextConstraint/Operators/StartsWithOperator.php index 6b7d9b23dec..84f7688c434 100644 --- a/packages/tables/src/Filters/QueryBuilder/Constraints/TextConstraint/Operators/StartsWithOperator.php +++ b/packages/tables/src/Filters/QueryBuilder/Constraints/TextConstraint/Operators/StartsWithOperator.php @@ -61,12 +61,18 @@ public function apply(Builder $query, string $qualifiedColumn): Builder $isPostgres = $databaseConnection->getDriverName() === 'pgsql'; - if ((Str::lower($qualifiedColumn) !== $qualifiedColumn) && $isPostgres) { - $qualifiedColumn = (string) str($qualifiedColumn)->wrap('"'); - } - if ($isPostgres) { - $qualifiedColumn = new Expression("lower({$qualifiedColumn}::text)"); + [$table, $column] = explode('.', $qualifiedColumn); + + if (Str::lower($table) !== $table) { + $table = (string) str($table)->wrap('"'); + } + + if (Str::lower($column) !== $column) { + $column = (string) str($column)->wrap('"'); + } + + $qualifiedColumn = new Expression("lower({$table}.{$column}::text)"); $text = Str::lower($text); }