Skip to content

Commit 061e687

Browse files
authored
Revert "[11.x] Support DB aggregate by group (#53209)"
This reverts commit 6a491c2.
1 parent 11508cd commit 061e687

File tree

3 files changed

+10
-102
lines changed

3 files changed

+10
-102
lines changed

src/Illuminate/Database/Query/Builder.php

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3554,20 +3554,18 @@ public function doesntExistOr(Closure $callback)
35543554
* Retrieve the "count" result of the query.
35553555
*
35563556
* @param \Illuminate\Contracts\Database\Query\Expression|string $columns
3557-
* @return \Illuminate\Support\Collection|int
3557+
* @return int
35583558
*/
35593559
public function count($columns = '*')
35603560
{
3561-
$results = $this->aggregate(__FUNCTION__, Arr::wrap($columns));
3562-
3563-
return $results instanceof Collection ? $results : (int) $results;
3561+
return (int) $this->aggregate(__FUNCTION__, Arr::wrap($columns));
35643562
}
35653563

35663564
/**
35673565
* Retrieve the minimum value of a given column.
35683566
*
35693567
* @param \Illuminate\Contracts\Database\Query\Expression|string $column
3570-
* @return \Illuminate\Support\Collection|mixed
3568+
* @return mixed
35713569
*/
35723570
public function min($column)
35733571
{
@@ -3578,7 +3576,7 @@ public function min($column)
35783576
* Retrieve the maximum value of a given column.
35793577
*
35803578
* @param \Illuminate\Contracts\Database\Query\Expression|string $column
3581-
* @return \Illuminate\Support\Collection|mixed
3579+
* @return mixed
35823580
*/
35833581
public function max($column)
35843582
{
@@ -3589,7 +3587,7 @@ public function max($column)
35893587
* Retrieve the sum of the values of a given column.
35903588
*
35913589
* @param \Illuminate\Contracts\Database\Query\Expression|string $column
3592-
* @return \Illuminate\Support\Collection|mixed
3590+
* @return mixed
35933591
*/
35943592
public function sum($column)
35953593
{
@@ -3602,7 +3600,7 @@ public function sum($column)
36023600
* Retrieve the average of the values of a given column.
36033601
*
36043602
* @param \Illuminate\Contracts\Database\Query\Expression|string $column
3605-
* @return \Illuminate\Support\Collection|mixed
3603+
* @return mixed
36063604
*/
36073605
public function avg($column)
36083606
{
@@ -3613,7 +3611,7 @@ public function avg($column)
36133611
* Alias for the "avg" method.
36143612
*
36153613
* @param \Illuminate\Contracts\Database\Query\Expression|string $column
3616-
* @return \Illuminate\Support\Collection|mixed
3614+
* @return mixed
36173615
*/
36183616
public function average($column)
36193617
{
@@ -3625,7 +3623,7 @@ public function average($column)
36253623
*
36263624
* @param string $function
36273625
* @param array $columns
3628-
* @return \Illuminate\Support\Collection|mixed
3626+
* @return mixed
36293627
*/
36303628
public function aggregate($function, $columns = ['*'])
36313629
{
@@ -3634,10 +3632,6 @@ public function aggregate($function, $columns = ['*'])
36343632
->setAggregate($function, $columns)
36353633
->get($columns);
36363634

3637-
if ($this->groups) {
3638-
return $results;
3639-
}
3640-
36413635
if (! $results->isEmpty()) {
36423636
return array_change_key_case((array) $results[0])['aggregate'];
36433637
}

src/Illuminate/Database/Query/Grammars/Grammar.php

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -138,15 +138,7 @@ protected function compileAggregate(Builder $query, $aggregate)
138138
$column = 'distinct '.$column;
139139
}
140140

141-
$sql = 'select ';
142-
143-
if ($query->groups) {
144-
$sql .= $this->columnize($query->groups).', ';
145-
}
146-
147-
$sql .= $aggregate['function'].'('.$column.') as aggregate';
148-
149-
return $sql;
141+
return 'select '.$aggregate['function'].'('.$column.') as aggregate';
150142
}
151143

152144
/**
@@ -1138,12 +1130,10 @@ protected function wrapUnion($sql)
11381130
protected function compileUnionAggregate(Builder $query)
11391131
{
11401132
$sql = $this->compileAggregate($query, $query->aggregate);
1141-
$groups = $query->groups ? ' '.$this->compileGroups($query, $query->groups) : '';
11421133

11431134
$query->aggregate = null;
1144-
$query->groups = null;
11451135

1146-
return $sql.' from ('.$this->compileSelect($query).') as '.$this->wrapTable('temp_table').$groups;
1136+
return $sql.' from ('.$this->compileSelect($query).') as '.$this->wrapTable('temp_table');
11471137
}
11481138

11491139
/**

tests/Database/DatabaseQueryBuilderTest.php

Lines changed: 0 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
use Illuminate\Pagination\Cursor;
2626
use Illuminate\Pagination\CursorPaginator;
2727
use Illuminate\Pagination\LengthAwarePaginator;
28-
use Illuminate\Support\Collection;
2928
use Illuminate\Tests\Database\Fixtures\Enums\Bar;
3029
use InvalidArgumentException;
3130
use Mockery as m;
@@ -1805,36 +1804,6 @@ public function testGroupBys()
18051804
$this->assertEquals(['whereRawBinding', 'groupByRawBinding', 'havingRawBinding'], $builder->getBindings());
18061805
}
18071806

1808-
public function testGroupByAndAggregate()
1809-
{
1810-
$builder = $this->getBuilder();
1811-
1812-
$queryResults = [['aggregate' => 2, 'role' => 'admin', 'city' => 'NY'], ['aggregate' => 5, 'role' => 'user', 'city' => 'LA']];
1813-
$builder->getConnection()
1814-
->shouldReceive('select')->once()
1815-
->with('select "role", "city", count(*) as aggregate from "users" group by "role", "city"', [], true)
1816-
->andReturn($queryResults);
1817-
$builder->getProcessor()->shouldReceive('processSelect')->once()->andReturnUsing(fn ($builder, $results) => $results);
1818-
$results = $builder->from('users')->groupBy('role', 'city')->aggregate('count');
1819-
$this->assertEquals($queryResults, $results->toArray());
1820-
}
1821-
1822-
public function testGroupByUnionAndAggregate()
1823-
{
1824-
$builder = $this->getBuilder();
1825-
1826-
$queryResults = [['aggregate' => 2, 'role' => 'admin'], ['aggregate' => 5, 'role' => 'user']];
1827-
$builder->getConnection()
1828-
->shouldReceive('select')->once()
1829-
->with('select "role", count(*) as aggregate from ((select * from "users") union (select * from "members")) as "temp_table" group by "role"', [], true)
1830-
->andReturn($queryResults);
1831-
$builder->getProcessor()->shouldReceive('processSelect')->once()->andReturnUsing(fn ($builder, $results) => $results);
1832-
$results = $builder->from('users')
1833-
->union($this->getBuilder()->select('*')->from('members'))
1834-
->groupBy('role')->aggregate('count');
1835-
$this->assertEquals($queryResults, $results->toArray());
1836-
}
1837-
18381807
public function testOrderBys()
18391808
{
18401809
$builder = $this->getBuilder();
@@ -3495,51 +3464,6 @@ public function testAggregateFunctions()
34953464
$this->assertEquals(1, $results);
34963465
}
34973466

3498-
public function testAggregateFunctionsWithGroupBy()
3499-
{
3500-
$builder = $this->getBuilder();
3501-
$builder->getConnection()->shouldReceive('select')->once()->with('select "role", count(*) as aggregate from "users" group by "role"', [], true)->andReturn([['role' => 'admin', 'aggregate' => 1]]);
3502-
$builder->getProcessor()->shouldReceive('processSelect')->once()->andReturnUsing(fn ($builder, $results) => $results);
3503-
$results = $builder->from('users')->groupBy('role')->count();
3504-
$this->assertInstanceOf(Collection::class, $results);
3505-
$this->assertEquals([['role' => 'admin', 'aggregate' => 1]], $results->toArray());
3506-
3507-
$builder = $this->getBuilder();
3508-
$builder->getConnection()->shouldReceive('select')->once()->with('select "role", max("id") as aggregate from "users" group by "role"', [], true)->andReturn([['role' => 'admin', 'aggregate' => 1]]);
3509-
$builder->getProcessor()->shouldReceive('processSelect')->once()->andReturnUsing(fn ($builder, $results) => $results);
3510-
$results = $builder->from('users')->groupBy('role')->max('id');
3511-
$this->assertInstanceOf(Collection::class, $results);
3512-
$this->assertEquals([['role' => 'admin', 'aggregate' => 1]], $results->toArray());
3513-
3514-
$builder = $this->getBuilder();
3515-
$builder->getConnection()->shouldReceive('select')->once()->with('select "role", min("id") as aggregate from "users" group by "role"', [], true)->andReturn([['role' => 'admin', 'aggregate' => 1]]);
3516-
$builder->getProcessor()->shouldReceive('processSelect')->once()->andReturnUsing(fn ($builder, $results) => $results);
3517-
$results = $builder->from('users')->groupBy('role')->min('id');
3518-
$this->assertInstanceOf(Collection::class, $results);
3519-
$this->assertEquals([['role' => 'admin', 'aggregate' => 1]], $results->toArray());
3520-
3521-
$builder = $this->getBuilder();
3522-
$builder->getConnection()->shouldReceive('select')->once()->with('select "role", sum("id") as aggregate from "users" group by "role"', [], true)->andReturn([['role' => 'admin', 'aggregate' => 1]]);
3523-
$builder->getProcessor()->shouldReceive('processSelect')->once()->andReturnUsing(fn ($builder, $results) => $results);
3524-
$results = $builder->from('users')->groupBy('role')->sum('id');
3525-
$this->assertInstanceOf(Collection::class, $results);
3526-
$this->assertEquals([['role' => 'admin', 'aggregate' => 1]], $results->toArray());
3527-
3528-
$builder = $this->getBuilder();
3529-
$builder->getConnection()->shouldReceive('select')->once()->with('select "role", avg("id") as aggregate from "users" group by "role"', [], true)->andReturn([['role' => 'admin', 'aggregate' => 1]]);
3530-
$builder->getProcessor()->shouldReceive('processSelect')->once()->andReturnUsing(fn ($builder, $results) => $results);
3531-
$results = $builder->from('users')->groupBy('role')->avg('id');
3532-
$this->assertInstanceOf(Collection::class, $results);
3533-
$this->assertEquals([['role' => 'admin', 'aggregate' => 1]], $results->toArray());
3534-
3535-
$builder = $this->getBuilder();
3536-
$builder->getConnection()->shouldReceive('select')->once()->with('select "role", avg("id") as aggregate from "users" group by "role"', [], true)->andReturn([['role' => 'admin', 'aggregate' => 1]]);
3537-
$builder->getProcessor()->shouldReceive('processSelect')->once()->andReturnUsing(fn ($builder, $results) => $results);
3538-
$results = $builder->from('users')->groupBy('role')->average('id');
3539-
$this->assertInstanceOf(Collection::class, $results);
3540-
$this->assertEquals([['role' => 'admin', 'aggregate' => 1]], $results->toArray());
3541-
}
3542-
35433467
public function testSqlServerExists()
35443468
{
35453469
$builder = $this->getSqlServerBuilder();

0 commit comments

Comments
 (0)