Passed
Push — master ( 491fc0...c2141e )
by Aleksandar
02:15
created

MySqlQueryBuilderState::create()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 1
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 3
ccs 2
cts 2
cp 1
crap 1
rs 10
1
<?php
2
/**
3
 * Copyright 2021 Aleksandar Panic
4
 *
5
 * Licensed under the Apache License, Version 2.0 (the "License");
6
 * you may not use this file except in compliance with the License.
7
 * You may obtain a copy of the License at
8
 *
9
 *   http://www.apache.org/licenses/LICENSE-2.0
10
 *
11
 * Unless required by applicable law or agreed to in writing, software
12
 * distributed under the License is distributed on an "AS IS" BASIS,
13
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
 * See the License for the specific language governing permissions and
15
 * limitations under the License.
16
 */
17
18
namespace ArekX\PQL\Drivers\MySql\Builder;
19
20
use ArekX\PQL\Contracts\QueryBuilder;
21
use ArekX\PQL\Contracts\QueryBuilderState;
22
use ArekX\PQL\Sql\SqlParamBuilder;
23
24
/**
25
 * Represents a query builder state for MySQL
26
 */
27
class MySqlQueryBuilderState implements QueryBuilderState
28
{
29
    /**
30
     * State for the query build.
31
     *
32
     * @var array
33
     */
34
    protected $state = [];
35
36
    /**
37
     * Create new instance of this class
38
     *
39
     * @return static
40
     */
41 31
    public static function create()
42
    {
43 31
        return new static();
44
    }
45
46
    /**
47
     * Set currently used sql parameter builder.
48
     *
49
     * @param SqlParamBuilder $builder Main params builder to be used.
50
     */
51 17
    public function setParamsBuilder(SqlParamBuilder $builder): void
52
    {
53 17
        $this->set('paramsBuilder', $builder);
54 17
    }
55
56
    /**
57
     * @inheritDoc
58
     */
59 27
    public function set(string $name, $value): void
60
    {
61 27
        $this->state[$name] = $value;
62 27
    }
63
64
    /**
65
     * Sets the currently used main query builder.
66
     *
67
     * @param QueryBuilder $builder Main Query builder to be used.
68
     */
69 17
    public function setParentBuilder(QueryBuilder $builder): void
70
    {
71 17
        $this->set('parentBuilder', $builder);
72 17
    }
73
74
    /**
75
     * Return currently set sql parameter builder.
76
     *
77
     * @return SqlParamBuilder|null
78
     */
79 18
    public function getParamsBuilder(): ?SqlParamBuilder
80
    {
81 18
        return $this->get('paramsBuilder');
82
    }
83
84
    /**
85
     * @inheritDoc
86
     */
87 25
    public function get(string $name, $default = null)
88
    {
89 25
        if (!array_key_exists($name, $this->state)) {
90 22
            return $default;
91
        }
92 22
        return $this->state[$name];
93
    }
94
95
    /**
96
     * Return parent query builder to build sub queries.
97
     *
98
     * @return QueryBuilder|null
99
     */
100 11
    public function getParentBuilder(): ?QueryBuilder
101
    {
102 11
        return $this->get('parentBuilder');
103
    }
104
105
    /**
106
     * Set a glue for joining query parts in MySQL.
107
     *
108
     * @param string $glue Glue string to be used
109
     */
110 1
    public function setQueryPartGlue(string $glue)
111
    {
112 1
        $this->set('queryPartGlue', $glue);
113 1
    }
114
115
    /**
116
     * Return glue for joining query parts.
117
     *
118
     * @return string
119
     */
120 18
    public function getQueryPartGlue(): string
121
    {
122 18
        return $this->get('queryPartGlue', ' ');
123
    }
124
}