Failed Conditions
Pull Request — master (#7242)
by Gabriel
08:46
created

DateSubFunction   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 48
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
dl 0
loc 48
ccs 0
cts 41
cp 0
rs 10
c 0
b 0
f 0
wmc 8

1 Method

Rating   Name   Duplication   Size   Complexity  
C getSql() 0 42 8
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Doctrine\ORM\Query\AST\Functions;
6
7
use Doctrine\ORM\Query\QueryException;
8
use Doctrine\ORM\Query\SqlWalker;
9
use function strtolower;
10
11
/**
12
 * "DATE_SUB(date1, interval, unit)"
13
 */
14
class DateSubFunction extends DateAddFunction
15
{
16
    /**
17
     * @override
18
     * @inheritdoc
19
     */
20
    public function getSql(SqlWalker $sqlWalker)
21
    {
22
        switch (strtolower($this->unit->value)) {
23
            case 'second':
24
                return $sqlWalker->getConnection()->getDatabasePlatform()->getDateSubSecondsExpression(
25
                    $this->firstDateExpression->dispatch($sqlWalker),
26
                    $this->intervalExpression->dispatch($sqlWalker)
27
                );
28
            case 'minute':
29
                return $sqlWalker->getConnection()->getDatabasePlatform()->getDateSubMinutesExpression(
30
                    $this->firstDateExpression->dispatch($sqlWalker),
31
                    $this->intervalExpression->dispatch($sqlWalker)
32
                );
33
            case 'hour':
34
                return $sqlWalker->getConnection()->getDatabasePlatform()->getDateSubHourExpression(
35
                    $this->firstDateExpression->dispatch($sqlWalker),
36
                    $this->intervalExpression->dispatch($sqlWalker)
37
                );
38
            case 'day':
39
                return $sqlWalker->getConnection()->getDatabasePlatform()->getDateSubDaysExpression(
40
                    $this->firstDateExpression->dispatch($sqlWalker),
41
                    $this->intervalExpression->dispatch($sqlWalker)
42
                );
43
            case 'week':
44
                return $sqlWalker->getConnection()->getDatabasePlatform()->getDateSubWeeksExpression(
45
                    $this->firstDateExpression->dispatch($sqlWalker),
46
                    $this->intervalExpression->dispatch($sqlWalker)
47
                );
48
            case 'month':
49
                return $sqlWalker->getConnection()->getDatabasePlatform()->getDateSubMonthExpression(
50
                    $this->firstDateExpression->dispatch($sqlWalker),
51
                    $this->intervalExpression->dispatch($sqlWalker)
52
                );
53
            case 'year':
54
                return $sqlWalker->getConnection()->getDatabasePlatform()->getDateSubYearsExpression(
55
                    $this->firstDateExpression->dispatch($sqlWalker),
56
                    $this->intervalExpression->dispatch($sqlWalker)
57
                );
58
59
            default:
60
                throw QueryException::semanticalError(
61
                    'DATE_SUB() only supports units of type second, minute, hour, day, week, month and year.'
62
                );
63
        }
64
    }
65
}
66