Skip to content

Commit cce71d8

Browse files
committed
Improve aggregation count
1 parent faf4db0 commit cce71d8

File tree

4 files changed

+36
-9
lines changed

4 files changed

+36
-9
lines changed

src/JsonQueryServiceProvider.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22

3-
declare(strict_types=1);
3+
declare (strict_types = 1);
44

55
namespace Asseco\JsonQueryBuilder;
66

@@ -21,6 +21,8 @@ public function register()
2121
*/
2222
public function boot()
2323
{
24-
$this->publishes([__DIR__ . '/../config/asseco-json-query-builder.php' => config_path('asseco-json-query-builder.php')]);
24+
$this->publishes([
25+
__DIR__ . '/../config/asseco-json-query-builder.php' => app()->configPath('asseco-json-query-builder.php'),
26+
]);
2527
}
2628
}

src/Traits/DatabaseFunctions.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ private function applyAggregation(array $params): string
3333
$column,
3434
$functions
3535
) {
36-
$stat = $query ?? $column;
36+
$stat = $query ?? ("*" !== $column ? "\"$column\"" : $column);
3737
return $functions::$param($stat);
3838
});
3939
}
@@ -46,7 +46,7 @@ protected function prepareArguments(): void
4646
}
4747
$split = explode(":", $argument);
4848
$apply = $this->applyAggregation($split);
49-
$alias = join("_", $split);
49+
$alias = join("_", array_filter($split, fn($s) => "*" !== $s));
5050

5151
return DB::raw("{$apply} as {$alias}");
5252
}, $this->arguments);

tests/Unit/RequestParameters/ReturnsParameterTest.php

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22

3-
declare(strict_types=1);
3+
declare (strict_types = 1);
44

55
namespace Asseco\JsonQueryBuilder\Tests\Unit\RequestParameters;
66

@@ -63,4 +63,16 @@ public function produces_query()
6363

6464
$this->assertEquals($query, $this->builder->toSql());
6565
}
66+
67+
/** @test */
68+
public function produces_aggregation_query()
69+
{
70+
$returnsParameter = new ReturnsParameter(
71+
['count:attribute1', 'count:attribute2'], $this->builder, $this->modelConfig);
72+
$returnsParameter->run();
73+
74+
$query = 'select count("attribute1") as count_attribute1, count("attribute2") as count_attribute2';
75+
76+
$this->assertEquals($query, $this->builder->toSql());
77+
}
6678
}

tests/Unit/Traits/DatabaseFunctionsTest.php

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,13 @@ public function setUp(): void
3939

4040
public function test_it_not_throw_with_regular_parameters()
4141
{
42-
$parameter = new TestParameterClass(["column_a", "column_b", "column_c", "column_d"], $this->builder, $this->modelConfig);
42+
$parameter = new TestParameterClass([
43+
"column_a",
44+
"column_b",
45+
"column_c",
46+
"column_d",
47+
], $this->builder, $this->modelConfig);
48+
4349
$this->assertNull($parameter->run());
4450
$this->assertEquals('select "column_a", "column_b", "column_c", "column_d"', $parameter->builder->toSql());
4551
}
@@ -50,7 +56,7 @@ public function test_it_apply_aggregation_functions()
5056
$builder = $this->builder->clone();
5157
$parameter = new TestParameterClass(["$fn:column"], $builder, $this->modelConfig);
5258
$this->assertNull($parameter->run());
53-
$this->assertEquals("select $fn(column) as {$fn}_column", $builder->toSql());
59+
$this->assertEquals("select $fn(\"column\") as {$fn}_column", $builder->toSql());
5460
}
5561

5662
}
@@ -59,15 +65,22 @@ public function test_it_apply_nested_aggregation_functions()
5965
{
6066
$parameter = new TestParameterClass(["avg:day:column"], $this->builder, $this->modelConfig);
6167
$this->assertNull($parameter->run());
62-
$this->assertEquals("select avg(day(column)) as avg_day_column", $this->builder->toSql());
68+
$this->assertEquals('select avg(day("column")) as avg_day_column', $this->builder->toSql());
6369
}
6470

6571
public function test_it_uses_pgsql_syntax()
6672
{
6773
app("config")->set("database.default", "pgsql");
6874
$parameter = new TestParameterClass(["avg:day:column"], $this->builder, $this->modelConfig);
6975
$this->assertNull($parameter->run());
70-
$this->assertEquals("select avg(EXTRACT(DAY FROM column)) as avg_day_column", $this->builder->toSql());
76+
$this->assertEquals('select avg(EXTRACT(DAY FROM "column")) as avg_day_column', $this->builder->toSql());
77+
}
78+
79+
public function test_it_parses_right_count_all_query()
80+
{
81+
$parameter = new TestParameterClass(["count:*"], $this->builder, $this->modelConfig);
82+
$this->assertNull($parameter->run());
83+
$this->assertEquals('select count(*) as count', $this->builder->toSql());
7184
}
7285

7386
}

0 commit comments

Comments
 (0)