Passed
Push — master ( 858224...a68eff )
by Jonas
05:02
created

CompilesSQLiteExpressions::compileUpdate()   A

Complexity

Conditions 3
Paths 2

Size

Total Lines 7
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 12

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 3
c 1
b 0
f 0
dl 0
loc 7
ccs 0
cts 4
cp 0
rs 10
cc 3
nc 2
nop 2
crap 12
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 10
    protected function compileUnion(array $union)
22
    {
23 10
        $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 10);
24
25 10
        $builderClasses = [CteBuilder::class, 'Staudenmeir\EloquentEagerLimitXLaravelCte\Query\Builder'];
26
27 10
        for ($i = 6; $i <= 9; $i++) {
28 10
            if (in_array($backtrace[$i]['class'], $builderClasses) && $backtrace[$i]['function'] === 'withExpression') {
29 5
                $conjunction = $union['all'] ? ' union all ' : ' union ';
30
31 5
                return $conjunction.$union['query']->toSql();
32
            }
33
        }
34
35 5
        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
    public function compileUpdate(Builder $query, array $values)
46
    {
47
        if (isset($query->joins) || isset($query->limit)) {
48
            return parent::compileUpdate($query, $values);
49
        }
50
51
        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
    public function getBindingsForUpdate(Builder $query, array $bindings, array $values)
63
    {
64
        if (isset($query->joins) || isset($query->limit)) {
65
            return parent::prepareBindingsForUpdate($bindings, $values);
66
        }
67
68
        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
    public function compileDelete(Builder $query)
78
    {
79
        if (isset($query->joins) || isset($query->limit)) {
80
            return parent::compileDelete($query);
81
        }
82
83
        return $this->compileDeleteTrait($query);
84
    }
85
}
86