SortClause::compile()   A
last analyzed

Complexity

Conditions 6
Paths 6

Size

Total Lines 25
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 15
CRAP Score 6

Importance

Changes 3
Bugs 0 Features 0
Metric Value
cc 6
eloc 14
c 3
b 0
f 0
nc 6
nop 1
dl 0
loc 25
ccs 15
cts 15
cp 1
crap 6
rs 9.2222
1
<?php
2
3
declare(strict_types=1);
4
5
namespace LaravelFreelancerNL\FluentAQL\Clauses;
6
7
use LaravelFreelancerNL\FluentAQL\Expressions\Expression;
8
use LaravelFreelancerNL\FluentAQL\Expressions\ExpressionInterface;
9
use LaravelFreelancerNL\FluentAQL\QueryBuilder;
10
11
class SortClause extends Clause
12
{
13
    /**
14
     * @var array<mixed> $references
15
     */
16
    protected $references;
17
18
    /**
19
     * @param array<mixed> $references
20
     */
21 2
    public function __construct(
22
        array $references
23
    ) {
24 2
        parent::__construct();
25
26 2
        $this->references = $references;
27
    }
28
29 2
    public function compile(QueryBuilder $queryBuilder): string
30
    {
31 2
        if (empty($this->references[0])) {
32 1
            return 'SORT null';
33
        }
34
35
        /** @var array<string|Expression> $references */
36 2
        $references = array_map(function ($reference) use ($queryBuilder) {
37 2
            if (!$queryBuilder->grammar->isSortDirection($reference)) {
38 2
                return $queryBuilder->normalizeArgument($reference, ['Reference', 'Null', 'Query', 'Bind']);
39
            }
40 1
            return $reference;
41 2
        }, $this->references);
42
43 2
        $output = '';
44 2
        foreach ($references as $value) {
45 2
            if ($value instanceof ExpressionInterface) {
46 2
                $output .= ', ' . $value->compile($queryBuilder);
47
            }
48 2
            if (is_string($value)) {
49 1
                $output .= ' ' . $value;
50
            }
51
        }
52
53 2
        return 'SORT ' . ltrim($output, ', ');
54
    }
55
}
56