Merge branch '3.x' into 3.x

This commit is contained in:
Lukas Mateffy
2025-07-08 14:09:07 +02:00
committed by GitHub
2 changed files with 51 additions and 4 deletions
+13 -4
View File
@@ -164,10 +164,19 @@ if (! function_exists('Filament\Support\generate_search_column_expression')) {
$driverName = $databaseConnection->getDriverName();
$column = match ($driverName) {
'pgsql' => (string) str($column)
->explode('.')
->map(fn (string $part) => str($part)->wrap('"'))
->implode('.') . '::text',
'pgsql' => (
str($column)->contains('->')
? str($column)
->beforeLast('->')
->append('->>')
->append("'")
->append(str($column)->afterLast('->'))
->append("'")
: str($column)
->explode('.')
->map(fn (string $part) => str($part)->wrap('"'))
->implode('.')
) . '::text',
default => $column,
};
+38
View File
@@ -1,7 +1,11 @@
<?php
use Illuminate\Database\Connection;
use Illuminate\Database\Query\Grammars\MySqlGrammar;
use Illuminate\Database\Query\Grammars\PostgresGrammar;
use Illuminate\View\ComponentAttributeBag;
use function Filament\Support\generate_search_column_expression;
use function Filament\Support\prepare_inherited_attributes;
it('will prepare attributes', function () {
@@ -39,3 +43,37 @@ it('will prepare data attributes', function () {
'data-foo' => 'bar',
]);
});
it('will generate json search column expression for mysql', function () {
$column = 'data->name';
$isSearchForcedCaseInsensitive = true;
$databaseConnection = Mockery::mock(Connection::class);
$databaseConnection->shouldReceive('getDriverName')->andReturn('mysql');
$databaseConnection->shouldReceive('getConfig')->with('search_collation')->andReturn(null);
$grammar = new MySqlGrammar($databaseConnection);
$databaseConnection->shouldReceive('getQueryGrammar')->andReturn($grammar);
$expression = generate_search_column_expression($column, $isSearchForcedCaseInsensitive, $databaseConnection);
expect($expression->getValue($grammar))
->toBe("lower(json_extract(`data`, '$.\"name\"'))");
});
it('will generate json search column expression for pgsql', function () {
$column = 'data->name';
$isSearchForcedCaseInsensitive = true;
$databaseConnection = Mockery::mock(Connection::class);
$databaseConnection->shouldReceive('getDriverName')->andReturn('pgsql');
$databaseConnection->shouldReceive('getConfig')->with('search_collation')->andReturn(null);
$grammar = new PostgresGrammar($databaseConnection);
$expression = generate_search_column_expression($column, $isSearchForcedCaseInsensitive, $databaseConnection);
expect($expression->getValue($grammar))
->toBe("lower(data->>'name'::text)");
});