Passed
Push — master ( 00bef5...064b0e )
by Jonas
02:59
created

CompilesSQLiteExpressions::compileUnion()   A

Complexity

Conditions 5
Paths 4

Size

Total Lines 15
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 8
CRAP Score 5

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 7
c 1
b 0
f 0
dl 0
loc 15
ccs 8
cts 8
cp 1
rs 9.6111
cc 5
nc 4
nop 1
crap 5
1
<?php
2
3
namespace Staudenmeir\LaravelCte\Query\Grammars\Traits;
4
5
use Illuminate\Database\Query\Builder;
6
use Staudenmeir\LaravelCte\Query\Builder as CteBuilder;
7
8
trait CompilesSQLiteExpressions
9
{
10
    use CompilesExpressions {
11
        compileUpdate as compileUpdateTrait;
12
        compileDelete as compileDeleteTrait;
13
    }
14
15
    /**
16
     * Compile a single union statement.
17
     *
18
     * @param array $union
19
     * @return string
20
     */
21 13
    protected function compileUnion(array $union)
22
    {
23 13
        $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 10);
24
25 13
        $builderClasses = [CteBuilder::class, 'Staudenmeir\EloquentEagerLimitXLaravelCte\Query\Builder'];
26
27 13
        for ($i = 6; $i <= 9; $i++) {
28 13
            if (in_array($backtrace[$i]['class'], $builderClasses) && $backtrace[$i]['function'] === 'withExpression') {
29 6
                $conjunction = $union['all'] ? ' union all ' : ' union ';
30
31 6
                return $conjunction.$union['query']->toSql();
32
            }
33
        }
34
35 7
        return parent::compileUnion($union);
36
    }
37
38
    /**
39
     * Compile an update statement into SQL.
40
     *
41
     * @param \Illuminate\Database\Query\Builder $query
42
     * @param array $values
43
     * @return string
44
     */
45 6
    public function compileUpdate(Builder $query, array $values)
46
    {
47 6
        if (isset($query->joins) || isset($query->limit)) {
48 4
            return parent::compileUpdate($query, $values);
49
        }
50
51 2
        return $this->compileUpdateTrait($query, $values);
52
    }
53
54
    /**
55
     * Get the bindings for an update statement.
56
     *
57
     * @param \Illuminate\Database\Query\Builder $query
58
     * @param array $bindings
59
     * @param array $values
60
     * @return array
61
     */
62 6
    public function getBindingsForUpdate(Builder $query, array $bindings, array $values)
63
    {
64 6
        if (isset($query->joins) || isset($query->limit)) {
65 4
            return parent::prepareBindingsForUpdate($bindings, $values);
66
        }
67
68 2
        return $this->prepareBindingsForUpdate($bindings, $values);
69
    }
70
71
    /**
72
     * Compile a delete statement into SQL.
73
     *
74
     * @param \Illuminate\Database\Query\Builder $query
75
     * @return string
76
     */
77 6
    public function compileDelete(Builder $query)
78
    {
79 6
        if (isset($query->joins) || isset($query->limit)) {
80 4
            return parent::compileDelete($query);
81
        }
82
83 2
        return $this->compileDeleteTrait($query);
84
    }
85
}
86