Add addUnique function

Signed-off-by: David Arendsen <darendsen@gamepoint.com>
This commit is contained in:
David Arendsen 2023-02-12 17:54:18 +01:00
commit 483e67a2e8
6 changed files with 110 additions and 0 deletions

View file

@ -24,6 +24,7 @@ or [addRangeInBetween()](functions/addRangeInBetween.md)
* [addReduce()](functions/addReduce.md) * [addReduce()](functions/addReduce.md)
* [addSort()](functions/addSort.md) * [addSort()](functions/addSort.md)
* [addSum()](functions/addSum.md) * [addSum()](functions/addSum.md)
* [addUnique()](functions/addUnique.md)
* [addUnwindow()](functions/addUnwindow.md) * [addUnwindow()](functions/addUnwindow.md)
* [addWindow()](functions/addWindow.md) * [addWindow()](functions/addWindow.md)

View file

@ -0,0 +1,39 @@
# Flux Query Builder Docs
## Functions &raquo; addUnique()
### Parameters:
<table>
<tbody>
<tr>
<th>Name</th>
<th>Required</th>
<th>Data type</th>
<th>Description</th>
</tr>
<tr>
<td>column</td>
<td>No</td>
<td>string</td>
<td>Column to search for unique values. Default is _value.</td>
</tr>
</tbody>
</table>
### Example
```php
->addUnique("_value")
```
This will result in the following Flux function part:
```
|> unique(column: "_value")
```
### Extra resources
* [Flux documentation](https://docs.influxdata.com/flux/v0.x/stdlib/universe/unique/)

View file

@ -17,6 +17,7 @@ use Arendsen\FluxQueryBuilder\Functions\Min;
use Arendsen\FluxQueryBuilder\Functions\Reduce; use Arendsen\FluxQueryBuilder\Functions\Reduce;
use Arendsen\FluxQueryBuilder\Functions\Sort; use Arendsen\FluxQueryBuilder\Functions\Sort;
use Arendsen\FluxQueryBuilder\Functions\Sum; use Arendsen\FluxQueryBuilder\Functions\Sum;
use Arendsen\FluxQueryBuilder\Functions\Unique;
use Arendsen\FluxQueryBuilder\Functions\Window; use Arendsen\FluxQueryBuilder\Functions\Window;
trait Universe trait Universe
@ -133,6 +134,14 @@ trait Universe
return $this; return $this;
} }
public function addUnique(?string $column = null): QueryBuilderInterface
{
$this->addToQuery(
new Unique($column)
);
return $this;
}
public function addUnWindow(): QueryBuilderInterface public function addUnWindow(): QueryBuilderInterface
{ {
$this->addToQuery( $this->addToQuery(

27
src/Functions/Unique.php Normal file
View file

@ -0,0 +1,27 @@
<?php
namespace Arendsen\FluxQueryBuilder\Functions;
use Arendsen\FluxQueryBuilder\Type;
class Unique extends Base
{
/**
* @var string|null $column
*/
private $column;
public function __construct(?string $column = null)
{
$this->column = $column;
}
public function __toString()
{
$params = new Type(array_filter([
'column' => $this->column
]));
return '|> unique(' . $params . ') ';
}
}

View file

@ -0,0 +1,29 @@
<?php
declare(strict_types=1);
namespace Tests\Functions;
use Arendsen\FluxQueryBuilder\Functions\Unique;
use PHPUnit\Framework\TestCase;
final class UniqueunctionTest extends TestCase
{
public function testSimpleUnique()
{
$expression = new Unique();
$query = '|> unique() ';
$this->assertEquals($query, $expression->__toString());
}
public function testUniqueWithColumn()
{
$expression = new Unique('something');
$query = '|> unique(column: "something") ';
$this->assertEquals($query, $expression->__toString());
}
}

View file

@ -126,6 +126,11 @@ final class QueryBuilderTest extends TestCase
['something'], ['something'],
'|> sum(column: "something") ' '|> sum(column: "something") '
], ],
'addUnique' => [
'addUnique',
['something'],
'|> unique(column: "something") '
],
'addUnwindow' => [ 'addUnwindow' => [
'addUnwindow', 'addUnwindow',
[], [],