Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
17 / 17
100.00% covered (success)
100.00%
4 / 4
CRAP
100.00% covered (success)
100.00%
1 / 1
Delete
100.00% covered (success)
100.00%
17 / 17
100.00% covered (success)
100.00%
4 / 4
7
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
1
 __toString
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 create
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 statement
100.00% covered (success)
100.00%
11 / 11
100.00% covered (success)
100.00%
1 / 1
4
1<?php
2
3declare(strict_types=1);
4
5namespace Projom\Storage\SQL\Statement;
6
7use Stringable;
8
9use Projom\Storage\SQL\Component\Filter;
10use Projom\Storage\SQL\Component\Join;
11use Projom\Storage\SQL\Component\Table;
12use Projom\Storage\SQL\Statement\StatementInterface;
13use Projom\Storage\SQL\QueryObject;
14use Projom\Storage\SQL\Util;
15
16class Delete implements StatementInterface, Stringable
17{
18    private readonly Table $table;
19    private readonly Join $join;
20    private readonly Filter $filter;
21
22    public function __construct(QueryObject $queryDelete)
23    {
24        $this->table = Table::create($queryDelete->collections);
25        $this->join = Join::create($queryDelete->joins);
26        $this->filter = Filter::create($queryDelete->filters);
27    }
28
29    public function __toString(): string
30    {
31        [$statement, $params] = $this->statement();
32        return $statement;
33    }
34
35    public static function create(QueryObject $queryDelete): Delete
36    {
37        return new Delete($queryDelete);
38    }
39
40    public function statement(): array
41    {
42        $queryParts[] = "DELETE FROM {$this->table}";
43
44        if (!$this->join->empty())
45            $queryParts[] = "{$this->join}";
46
47        if (!$this->filter->empty())
48            $queryParts[] = "WHERE {$this->filter}";
49
50        $query = Util::join($queryParts, ' ');
51        $params = $this->filter->params() ?: null;
52
53        return [
54            $query,
55            $params
56        ];
57    }
58}