Failed Conditions
Pull Request — master (#135)
by Dmitriy
05:17
created

Statement::extremesMax()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 9
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 0
Metric Value
eloc 4
dl 0
loc 9
c 0
b 0
f 0
ccs 0
cts 5
cp 0
rs 10
cc 2
nc 2
nop 0
crap 6
1
<?php
0 ignored issues
show
introduced by
Missing declare(strict_types=1).
Loading history...
introduced by
An error occurred during processing; checking has been aborted. The error message was: "if" without curly braces is not supported.
Loading history...
2
3
namespace ClickHouseDB;
4
5
use ClickHouseDB\Exception\ClickHouseUnavailableException;
6
use ClickHouseDB\Exception\DatabaseException;
7
use ClickHouseDB\Exception\QueryException;
8
use ClickHouseDB\Query\Query;
9
use ClickHouseDB\Transport\CurlerRequest;
10
use ClickHouseDB\Transport\CurlerResponse;
11
12
class Statement
13
{
14
    /**
0 ignored issues
show
introduced by
Found multi-line comment for property \ClickHouseDB\Statement::$_rawData with single line content, use one-line comment instead.
Loading history...
15
     * @var string|mixed
16
     */
17
    private $_rawData;
18
19
    /**
0 ignored issues
show
introduced by
Found multi-line comment for property \ClickHouseDB\Statement::$_http_code with single line content, use one-line comment instead.
Loading history...
20
     * @var int
21
     */
22
    private $_http_code = -1;
0 ignored issues
show
introduced by
Class Statement contains unused property $_http_code.
Loading history...
23
24
    /**
0 ignored issues
show
introduced by
Found multi-line comment for property \ClickHouseDB\Statement::$_request with single line content, use one-line comment instead.
Loading history...
25
     * @var CurlerRequest
26
     */
27
    private $_request = null;
28
29
    /**
0 ignored issues
show
introduced by
Found multi-line comment for property \ClickHouseDB\Statement::$_init with single line content, use one-line comment instead.
Loading history...
30
     * @var bool
31
     */
32
    private $_init = false;
33
34
    /**
0 ignored issues
show
introduced by
Found multi-line comment for property \ClickHouseDB\Statement::$query with single line content, use one-line comment instead.
Loading history...
35
     * @var Query
36
     */
37
    private $query;
0 ignored issues
show
introduced by
Class Statement contains write-only property $query.
Loading history...
38
39
    /**
0 ignored issues
show
introduced by
Found multi-line comment for property \ClickHouseDB\Statement::$format with single line content, use one-line comment instead.
Loading history...
40
     * @var mixed
41
     */
42
    private $format;
43
44
    /**
0 ignored issues
show
introduced by
Found multi-line comment for property \ClickHouseDB\Statement::$sql with single line content, use one-line comment instead.
Loading history...
45
     * @var string
46
     */
47
    private $sql = '';
48
49
    /**
0 ignored issues
show
introduced by
Found multi-line comment for property \ClickHouseDB\Statement::$meta with single line content, use one-line comment instead.
Loading history...
50
     * @var array
0 ignored issues
show
introduced by
@var annotation of property \ClickHouseDB\Statement::$meta does not specify type hint for its items.
Loading history...
51
     */
52
    private $meta;
53
54
    /**
0 ignored issues
show
introduced by
Found multi-line comment for property \ClickHouseDB\Statement::$totals with single line content, use one-line comment instead.
Loading history...
55
     * @var array
0 ignored issues
show
introduced by
@var annotation of property \ClickHouseDB\Statement::$totals does not specify type hint for its items.
Loading history...
56
     */
57
    private $totals;
58
59
    /**
0 ignored issues
show
introduced by
Found multi-line comment for property \ClickHouseDB\Statement::$extremes with single line content, use one-line comment instead.
Loading history...
60
     * @var array
0 ignored issues
show
introduced by
@var annotation of property \ClickHouseDB\Statement::$extremes does not specify type hint for its items.
Loading history...
61
     */
62
    private $extremes;
63
64
    /**
0 ignored issues
show
introduced by
Found multi-line comment for property \ClickHouseDB\Statement::$rows with single line content, use one-line comment instead.
Loading history...
65
     * @var int
66
     */
67
    private $rows;
68
69
    /**
0 ignored issues
show
introduced by
Found multi-line comment for property \ClickHouseDB\Statement::$rows_before_limit_at_least with single line content, use one-line comment instead.
Loading history...
70
     * @var bool|integer
0 ignored issues
show
introduced by
Expected "int" but found "integer" in @var annotation.
Loading history...
71
     */
72
    private $rows_before_limit_at_least = false;
73
74
    /**
0 ignored issues
show
introduced by
Found multi-line comment for property \ClickHouseDB\Statement::$array_data with single line content, use one-line comment instead.
Loading history...
75
     * @var array
0 ignored issues
show
introduced by
@var annotation of property \ClickHouseDB\Statement::$array_data does not specify type hint for its items.
Loading history...
76
     */
77
    private $array_data = [];
78
79
    /**
0 ignored issues
show
introduced by
Found multi-line comment for property \ClickHouseDB\Statement::$statistics with single line content, use one-line comment instead.
Loading history...
80
     * @var array|null
0 ignored issues
show
introduced by
@var annotation of property \ClickHouseDB\Statement::$statistics does not specify type hint for its items.
Loading history...
81
     */
82
    private $statistics = null;
83
84
    /**
0 ignored issues
show
introduced by
Found multi-line comment for property \ClickHouseDB\Statement::$iterator with single line content, use one-line comment instead.
Loading history...
85
     * @var int
86
     */
87
    public $iterator=0;
0 ignored issues
show
Coding Style introduced by
Equals sign not aligned correctly; expected 1 space but found 0 spaces
Loading history...
88
89
90 44
    public function __construct(CurlerRequest $request)
0 ignored issues
show
Coding Style Documentation introduced by
Missing doc comment for function __construct()
Loading history...
91
    {
92 44
        $this->_request = $request;
93 44
        $this->format = $this->_request->getRequestExtendedInfo('format');
0 ignored issues
show
Coding Style introduced by
Equals sign not aligned with surrounding assignments; expected 3 spaces but found 1 space

This check looks for multiple assignments in successive lines of code. It will report an issue if the operators are not in a straight line.

To visualize

$a = "a";
$ab = "ab";
$abc = "abc";

will produce issues in the first and second line, while this second example

$a   = "a";
$ab  = "ab";
$abc = "abc";

will produce no issues.

Loading history...
94 44
        $this->query = $this->_request->getRequestExtendedInfo('query');
0 ignored issues
show
Coding Style introduced by
Equals sign not aligned with surrounding assignments; expected 4 spaces but found 1 space

This check looks for multiple assignments in successive lines of code. It will report an issue if the operators are not in a straight line.

To visualize

$a = "a";
$ab = "ab";
$abc = "abc";

will produce issues in the first and second line, while this second example

$a   = "a";
$ab  = "ab";
$abc = "abc";

will produce no issues.

Loading history...
95 44
        $this->sql = $this->_request->getRequestExtendedInfo('sql');
0 ignored issues
show
Coding Style introduced by
Equals sign not aligned with surrounding assignments; expected 6 spaces but found 1 space

This check looks for multiple assignments in successive lines of code. It will report an issue if the operators are not in a straight line.

To visualize

$a = "a";
$ab = "ab";
$abc = "abc";

will produce issues in the first and second line, while this second example

$a   = "a";
$ab  = "ab";
$abc = "abc";

will produce no issues.

Loading history...
96 44
    }
97
98
    /**
99
     * @return CurlerRequest
100
     */
101
    public function getRequest()
0 ignored issues
show
introduced by
Method \ClickHouseDB\Statement::getRequest() does not have return type hint for its return value but it should be possible to add it based on @return annotation "CurlerRequest".
Loading history...
102
    {
103
        return $this->_request;
104
    }
105
106
    /**
107
     * @return CurlerResponse
0 ignored issues
show
introduced by
Incorrect annotations group.
Loading history...
108
     * @throws Exception\TransportException
0 ignored issues
show
Coding Style introduced by
Comment missing for @throws tag in function comment
Loading history...
109
     */
110 38
    private function response()
0 ignored issues
show
introduced by
Method \ClickHouseDB\Statement::response() does not have return type hint for its return value but it should be possible to add it based on @return annotation "CurlerResponse".
Loading history...
111
    {
112 38
        return $this->_request->response();
113
    }
114
115
    /**
116
     * @return mixed
0 ignored issues
show
introduced by
Incorrect annotations group.
Loading history...
117
     * @throws Exception\TransportException
0 ignored issues
show
Coding Style introduced by
Comment missing for @throws tag in function comment
Loading history...
118
     */
119 1
    public function responseInfo()
120
    {
121 1
        return $this->response()->info();
122
    }
123
124
    /**
125
     * @return mixed|string
126
     */
127 11
    public function sql()
128
    {
129 11
        return $this->sql;
130
    }
131
132
    /**
133
     * @param string $body
0 ignored issues
show
introduced by
Incorrect annotations group.
Loading history...
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
134
     * @return array|bool
0 ignored issues
show
introduced by
@return annotation of method \ClickHouseDB\Statement::parseErrorClickHouse() does not specify type hint for items of its traversable return value.
Loading history...
Coding Style introduced by
Expected "array|boolean" but found "array|bool" for function return type
Loading history...
135
     */
136 5
    private function parseErrorClickHouse($body)
0 ignored issues
show
introduced by
Method \ClickHouseDB\Statement::parseErrorClickHouse() does not have parameter type hint for its parameter $body but it should be possible to add it based on @param annotation "string".
Loading history...
Coding Style introduced by
Type hint "string" missing for $body
Loading history...
137
    {
138 5
        $body = trim($body);
0 ignored issues
show
Coding Style introduced by
Equals sign not aligned with surrounding assignments; expected 3 spaces but found 1 space

This check looks for multiple assignments in successive lines of code. It will report an issue if the operators are not in a straight line.

To visualize

$a = "a";
$ab = "ab";
$abc = "abc";

will produce issues in the first and second line, while this second example

$a   = "a";
$ab  = "ab";
$abc = "abc";

will produce no issues.

Loading history...
introduced by
Function trim() should not be referenced via a fallback global name, but via a use statement.
Loading history...
139 5
        $mathes = [];
140
141
        // Code: 115, e.displayText() = DB::Exception: Unknown setting readonly[0], e.what() = DB::Exception
142
        // Code: 192, e.displayText() = DB::Exception: Unknown user x, e.what() = DB::Exception
143
        // Code: 60, e.displayText() = DB::Exception: Table default.ZZZZZ doesn't exist., e.what() = DB::Exception
144
145 5
        if (preg_match("%Code: (\d+),\se\.displayText\(\) \=\s*DB\:\:Exception\s*:\s*(.*)(?:\,\s*e\.what|\(version).*%ius", $body, $mathes)) {
0 ignored issues
show
introduced by
Function preg_match() should not be referenced via a fallback global name, but via a use statement.
Loading history...
Coding Style Comprehensibility introduced by
The string literal %Code: (\d+),\se\.displa...\.what|\(version).*%ius does not require double quotes, as per coding-style, please use single quotes.

PHP provides two ways to mark string literals. Either with single quotes 'literal' or with double quotes "literal". The difference between these is that string literals in double quotes may contain variables with are evaluated at run-time as well as escape sequences.

String literals in single quotes on the other hand are evaluated very literally and the only two characters that needs escaping in the literal are the single quote itself (\') and the backslash (\\). Every other character is displayed as is.

Double quoted string literals may contain other variables or more complex escape sequences.

<?php

$singleQuoted = 'Value';
$doubleQuoted = "\tSingle is $singleQuoted";

print $doubleQuoted;

will print an indented: Single is Value

If your string literal does not contain variables or escape sequences, it should be defined using single quotes to make that fact clear.

For more information on PHP string literals and available escape sequences see the PHP core documentation.

Loading history...
146 5
            return ['code' => $mathes[1], 'message' => $mathes[2]];
0 ignored issues
show
Coding Style introduced by
Arrays with multiple values should not be declared on a single line.
Loading history...
147
        }
148
149
        return false;
150
    }
151
152
    /**
153
     * @return bool
0 ignored issues
show
introduced by
Incorrect annotations group.
Loading history...
Coding Style introduced by
Expected "boolean" but found "bool" for function return type
Loading history...
154
     * @throws Exception\TransportException
0 ignored issues
show
Coding Style introduced by
Comment missing for @throws tag in function comment
Loading history...
155
     */
156 8
    public function error()
0 ignored issues
show
introduced by
Method \ClickHouseDB\Statement::error() does not have return type hint for its return value but it should be possible to add it based on @return annotation "bool".
Loading history...
157
    {
158 8
        if (!$this->isError()) {
0 ignored issues
show
Coding Style introduced by
Expected 1 space(s) after NOT operator; 0 found
Loading history...
159 2
            return false;
160
        }
161
162 6
        $body = $this->response()->body();
0 ignored issues
show
Coding Style introduced by
Equals sign not aligned with surrounding assignments; expected 5 spaces but found 1 space

This check looks for multiple assignments in successive lines of code. It will report an issue if the operators are not in a straight line.

To visualize

$a = "a";
$ab = "ab";
$abc = "abc";

will produce issues in the first and second line, while this second example

$a   = "a";
$ab  = "ab";
$abc = "abc";

will produce no issues.

Loading history...
163 6
        $error_no = $this->response()->error_no();
164 6
        $error = $this->response()->error();
0 ignored issues
show
Coding Style introduced by
Equals sign not aligned with surrounding assignments; expected 4 spaces but found 1 space

This check looks for multiple assignments in successive lines of code. It will report an issue if the operators are not in a straight line.

To visualize

$a = "a";
$ab = "ab";
$abc = "abc";

will produce issues in the first and second line, while this second example

$a   = "a";
$ab  = "ab";
$abc = "abc";

will produce no issues.

Loading history...
165
166 6
        $dumpStatement = false;
167 6
        if (!$error_no && !$error) {
0 ignored issues
show
Coding Style introduced by
Expected 1 space(s) after NOT operator; 0 found
Loading history...
168 5
            $parse = $this->parseErrorClickHouse($body);
169
170 5
            if ($parse) {
0 ignored issues
show
Bug Best Practice introduced by
The expression $parse of type array is implicitly converted to a boolean; are you sure this is intended? If so, consider using ! empty($expr) instead to make it clear that you intend to check for an array without elements.

This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent.

Consider making the comparison explicit by using empty(..) or ! empty(...) instead.

Loading history...
introduced by
$parse is a non-empty array, thus is always true.
Loading history...
171 5
                throw new DatabaseException($parse['message'] . "\nIN:" . $this->sql(), $parse['code']);
172
            } else {
173
                $code = $this->response()->http_code();
0 ignored issues
show
Coding Style introduced by
Equals sign not aligned with surrounding assignments; expected 10 spaces but found 1 space

This check looks for multiple assignments in successive lines of code. It will report an issue if the operators are not in a straight line.

To visualize

$a = "a";
$ab = "ab";
$abc = "abc";

will produce issues in the first and second line, while this second example

$a   = "a";
$ab  = "ab";
$abc = "abc";

will produce no issues.

Loading history...
174
                $message = "HttpCode:" . $this->response()->http_code() . " ; " . $this->response()->error() . " ;" . $body;
0 ignored issues
show
Coding Style introduced by
Equals sign not aligned with surrounding assignments; expected 7 spaces but found 1 space

This check looks for multiple assignments in successive lines of code. It will report an issue if the operators are not in a straight line.

To visualize

$a = "a";
$ab = "ab";
$abc = "abc";

will produce issues in the first and second line, while this second example

$a   = "a";
$ab  = "ab";
$abc = "abc";

will produce no issues.

Loading history...
Coding Style Comprehensibility introduced by
The string literal HttpCode: does not require double quotes, as per coding-style, please use single quotes.

PHP provides two ways to mark string literals. Either with single quotes 'literal' or with double quotes "literal". The difference between these is that string literals in double quotes may contain variables with are evaluated at run-time as well as escape sequences.

String literals in single quotes on the other hand are evaluated very literally and the only two characters that needs escaping in the literal are the single quote itself (\') and the backslash (\\). Every other character is displayed as is.

Double quoted string literals may contain other variables or more complex escape sequences.

<?php

$singleQuoted = 'Value';
$doubleQuoted = "\tSingle is $singleQuoted";

print $doubleQuoted;

will print an indented: Single is Value

If your string literal does not contain variables or escape sequences, it should be defined using single quotes to make that fact clear.

For more information on PHP string literals and available escape sequences see the PHP core documentation.

Loading history...
Coding Style Comprehensibility introduced by
The string literal ; does not require double quotes, as per coding-style, please use single quotes.

PHP provides two ways to mark string literals. Either with single quotes 'literal' or with double quotes "literal". The difference between these is that string literals in double quotes may contain variables with are evaluated at run-time as well as escape sequences.

String literals in single quotes on the other hand are evaluated very literally and the only two characters that needs escaping in the literal are the single quote itself (\') and the backslash (\\). Every other character is displayed as is.

Double quoted string literals may contain other variables or more complex escape sequences.

<?php

$singleQuoted = 'Value';
$doubleQuoted = "\tSingle is $singleQuoted";

print $doubleQuoted;

will print an indented: Single is Value

If your string literal does not contain variables or escape sequences, it should be defined using single quotes to make that fact clear.

For more information on PHP string literals and available escape sequences see the PHP core documentation.

Loading history...
Coding Style Comprehensibility introduced by
The string literal ; does not require double quotes, as per coding-style, please use single quotes.

PHP provides two ways to mark string literals. Either with single quotes 'literal' or with double quotes "literal". The difference between these is that string literals in double quotes may contain variables with are evaluated at run-time as well as escape sequences.

String literals in single quotes on the other hand are evaluated very literally and the only two characters that needs escaping in the literal are the single quote itself (\') and the backslash (\\). Every other character is displayed as is.

Double quoted string literals may contain other variables or more complex escape sequences.

<?php

$singleQuoted = 'Value';
$doubleQuoted = "\tSingle is $singleQuoted";

print $doubleQuoted;

will print an indented: Single is Value

If your string literal does not contain variables or escape sequences, it should be defined using single quotes to make that fact clear.

For more information on PHP string literals and available escape sequences see the PHP core documentation.

Loading history...
175
                $dumpStatement = true;
176
            }
177
        } else {
178 1
            $code = $error_no;
0 ignored issues
show
Coding Style introduced by
Equals sign not aligned with surrounding assignments; expected 4 spaces but found 1 space

This check looks for multiple assignments in successive lines of code. It will report an issue if the operators are not in a straight line.

To visualize

$a = "a";
$ab = "ab";
$abc = "abc";

will produce issues in the first and second line, while this second example

$a   = "a";
$ab  = "ab";
$abc = "abc";

will produce no issues.

Loading history...
179 1
            $message = $this->response()->error();
180
        }
181
182 1
        $exception = new QueryException($message, $code);
183 1
        if ($code === CURLE_COULDNT_CONNECT) {
0 ignored issues
show
introduced by
Constant CURLE_COULDNT_CONNECT should not be referenced via a fallback global name, but via a use statement.
Loading history...
184
            $exception = new ClickHouseUnavailableException($message, $code);
185
        }
186
187 1
        if ($dumpStatement) {
0 ignored issues
show
introduced by
The condition $dumpStatement is always false.
Loading history...
188
            $exception->setRequestDetails($this->_request->getDetails());
189
            $exception->setResponseDetails($this->response()->getDetails());
190
        }
191
192 1
        throw $exception;
193
    }
194
195
    /**
196
     * @return bool
0 ignored issues
show
introduced by
Incorrect annotations group.
Loading history...
Coding Style introduced by
Expected "boolean" but found "bool" for function return type
Loading history...
197
     * @throws Exception\TransportException
0 ignored issues
show
Coding Style introduced by
Comment missing for @throws tag in function comment
Loading history...
198
     */
199 38
    public function isError()
0 ignored issues
show
introduced by
Method \ClickHouseDB\Statement::isError() does not have return type hint for its return value but it should be possible to add it based on @return annotation "bool".
Loading history...
200
    {
201 38
        return ($this->response()->http_code() !== 200 || $this->response()->error_no());
0 ignored issues
show
introduced by
Usage of language construct "return" with parentheses is disallowed.
Loading history...
202
    }
203
204 31
    private function check() : bool
0 ignored issues
show
Coding Style Documentation introduced by
Missing doc comment for function check()
Loading history...
205
    {
206 31
        if (!$this->_request->isResponseExists()) {
0 ignored issues
show
Coding Style introduced by
Expected 1 space(s) after NOT operator; 0 found
Loading history...
207
            throw QueryException::noResponse();
208
        }
209
210 31
        if ($this->isError()) {
211 1
            $this->error();
212
        }
213
214 30
        return true;
215
    }
216
217
    /**
218
     * @return bool
0 ignored issues
show
introduced by
Incorrect annotations group.
Loading history...
Coding Style introduced by
Expected "boolean" but found "bool" for function return type
Loading history...
219
     * @throws Exception\TransportException
0 ignored issues
show
Coding Style introduced by
Comment missing for @throws tag in function comment
Loading history...
220
     */
221 29
    private function init()
0 ignored issues
show
introduced by
Method \ClickHouseDB\Statement::init() does not have return type hint for its return value but it should be possible to add it based on @return annotation "bool".
Loading history...
222
    {
223 29
        if ($this->_init) {
224
            return false;
225
        }
226
0 ignored issues
show
Coding Style introduced by
Functions must not contain multiple empty lines in a row; found 2 empty lines
Loading history...
227
228 29
        $this->check();
229
0 ignored issues
show
Coding Style introduced by
Functions must not contain multiple empty lines in a row; found 2 empty lines
Loading history...
230
231 28
        $this->_rawData = $this->response()->rawDataOrJson($this->format);
232
233 28
        if (!$this->_rawData) {
0 ignored issues
show
Coding Style introduced by
Expected 1 space(s) after NOT operator; 0 found
Loading history...
234
            $this->_init = true;
235
            return false;
236
        }
0 ignored issues
show
Coding Style introduced by
No blank line found after control structure
Loading history...
237 28
        $data=[];
0 ignored issues
show
Coding Style introduced by
Equals sign not aligned correctly; expected 1 space but found 0 spaces
Loading history...
238 28
        foreach (['meta', 'data', 'totals', 'extremes', 'rows', 'rows_before_limit_at_least', 'statistics'] as $key) {
0 ignored issues
show
Coding Style introduced by
Blank line found at start of control structure
Loading history...
239
240 28
            if (isset($this->_rawData[$key])) {
0 ignored issues
show
introduced by
Use early exit to reduce code nesting.
Loading history...
241 28
                if ($key=='data')
0 ignored issues
show
introduced by
Operator == is disallowed, use === instead.
Loading history...
242
                {
243 28
                    $data=$this->_rawData[$key];
0 ignored issues
show
Coding Style introduced by
Equals sign not aligned correctly; expected 1 space but found 0 spaces
Loading history...
244
                }
245
                else{
0 ignored issues
show
Coding Style introduced by
Expected 1 space(s) after ELSE keyword; 0 found
Loading history...
246 28
                    $this->{$key} = $this->_rawData[$key];
247
                }
0 ignored issues
show
Coding Style introduced by
Blank line found after control structure
Loading history...
248
0 ignored issues
show
Coding Style introduced by
Blank line found at end of control structure
Loading history...
249
            }
250
        }
251
252 28
        if (empty($this->meta)) {
253
            throw  new QueryException('Can`t find meta');
254
        }
255
256 28
        $isJSONCompact=(stripos($this->format,'JSONCompact')!==false?true:false);
0 ignored issues
show
Coding Style introduced by
Equals sign not aligned with surrounding assignments; expected 4 spaces but found 0 spaces

This check looks for multiple assignments in successive lines of code. It will report an issue if the operators are not in a straight line.

To visualize

$a = "a";
$ab = "ab";
$abc = "abc";

will produce issues in the first and second line, while this second example

$a   = "a";
$ab  = "ab";
$abc = "abc";

will produce no issues.

Loading history...
introduced by
Function stripos() should not be referenced via a fallback global name, but via a use statement.
Loading history...
257 28
        $this->array_data = [];
258 28
        foreach ($data as $rows) {
259 28
            $r = [];
260
0 ignored issues
show
Coding Style introduced by
Functions must not contain multiple empty lines in a row; found 2 empty lines
Loading history...
261
262 28
            if ($isJSONCompact)
263
            {
264 1
                $r[]=$rows;
0 ignored issues
show
Coding Style introduced by
Equals sign not aligned correctly; expected 1 space but found 0 spaces
Loading history...
265
            }
266
            else {
267 27
                foreach ($this->meta as $meta) {
268 27
                    $r[$meta['name']] = $rows[$meta['name']];
269
                }
270
            }
271
272 28
            $this->array_data[] = $r;
273
        }
274
0 ignored issues
show
Coding Style introduced by
Functions must not contain multiple empty lines in a row; found 2 empty lines
Loading history...
275
276 28
        return true;
277
    }
278
279
    /**
280
     * @return array
0 ignored issues
show
introduced by
Incorrect annotations group.
Loading history...
introduced by
@return annotation of method \ClickHouseDB\Statement::extremes() does not specify type hint for items of its traversable return value.
Loading history...
281
     * @throws \Exception
0 ignored issues
show
introduced by
Class \Exception should not be referenced via a fully qualified name, but via a use statement.
Loading history...
Coding Style introduced by
Comment missing for @throws tag in function comment
Loading history...
282
     */
283
    public function extremes()
0 ignored issues
show
introduced by
Method \ClickHouseDB\Statement::extremes() does not have return type hint for its return value but it should be possible to add it based on @return annotation "array".
Loading history...
284
    {
285
        $this->init();
286
        return $this->extremes;
287
    }
288
289
    /**
290
     * @return mixed
0 ignored issues
show
introduced by
Incorrect annotations group.
Loading history...
291
     * @throws Exception\TransportException
0 ignored issues
show
Coding Style introduced by
Comment missing for @throws tag in function comment
Loading history...
292
     */
293 1
    public function totalTimeRequest()
294
    {
295 1
        $this->check();
296 1
        return $this->response()->total_time();
297
298
    }
0 ignored issues
show
Coding Style introduced by
Function closing brace must go on the next line following the body; found 1 blank lines before brace
Loading history...
299
300
    /**
301
     * @return array
0 ignored issues
show
introduced by
Incorrect annotations group.
Loading history...
introduced by
@return annotation of method \ClickHouseDB\Statement::extremesMin() does not specify type hint for items of its traversable return value.
Loading history...
302
     * @throws \Exception
0 ignored issues
show
introduced by
Class \Exception should not be referenced via a fully qualified name, but via a use statement.
Loading history...
Coding Style introduced by
Comment missing for @throws tag in function comment
Loading history...
303
     */
304 1
    public function extremesMin()
0 ignored issues
show
introduced by
Method \ClickHouseDB\Statement::extremesMin() does not have return type hint for its return value but it should be possible to add it based on @return annotation "array".
Loading history...
305
    {
306 1
        $this->init();
307
308 1
        if (empty($this->extremes['min'])) {
309
            return [];
310
        }
311
312 1
        return $this->extremes['min'];
313
    }
314
315
    /**
316
     * @return array
0 ignored issues
show
introduced by
Incorrect annotations group.
Loading history...
introduced by
@return annotation of method \ClickHouseDB\Statement::extremesMax() does not specify type hint for items of its traversable return value.
Loading history...
317
     * @throws \Exception
0 ignored issues
show
introduced by
Class \Exception should not be referenced via a fully qualified name, but via a use statement.
Loading history...
Coding Style introduced by
Comment missing for @throws tag in function comment
Loading history...
318
     */
319
    public function extremesMax()
0 ignored issues
show
introduced by
Method \ClickHouseDB\Statement::extremesMax() does not have return type hint for its return value but it should be possible to add it based on @return annotation "array".
Loading history...
320
    {
321
        $this->init();
322
323
        if (empty($this->extremes['max'])) {
324
            return [];
325
        }
326
327
        return $this->extremes['max'];
328
    }
329
330
    /**
331
     * @return array
0 ignored issues
show
introduced by
Incorrect annotations group.
Loading history...
introduced by
@return annotation of method \ClickHouseDB\Statement::totals() does not specify type hint for items of its traversable return value.
Loading history...
332
     * @throws Exception\TransportException
0 ignored issues
show
Coding Style introduced by
Comment missing for @throws tag in function comment
Loading history...
333
     */
334 1
    public function totals()
0 ignored issues
show
introduced by
Method \ClickHouseDB\Statement::totals() does not have return type hint for its return value but it should be possible to add it based on @return annotation "array".
Loading history...
335
    {
336 1
        $this->init();
337 1
        return $this->totals;
338
    }
339
340
    /**
0 ignored issues
show
introduced by
Empty comment
Loading history...
341
     *
342
     */
0 ignored issues
show
Coding Style Documentation introduced by
Missing @return tag in function comment
Loading history...
343
    public function dumpRaw()
0 ignored issues
show
introduced by
Method \ClickHouseDB\Statement::dumpRaw() does not have void return type hint.
Loading history...
introduced by
Method \ClickHouseDB\Statement::dumpRaw() does not need documentation comment.
Loading history...
344
    {
345
        print_r($this->_rawData);
0 ignored issues
show
introduced by
Function print_r() should not be referenced via a fallback global name, but via a use statement.
Loading history...
346
    }
347
348
    /**
0 ignored issues
show
introduced by
Empty comment
Loading history...
349
     *
350
     */
0 ignored issues
show
Coding Style Documentation introduced by
Missing @return tag in function comment
Loading history...
351
    public function dump()
0 ignored issues
show
introduced by
Method \ClickHouseDB\Statement::dump() does not have void return type hint.
Loading history...
introduced by
Method \ClickHouseDB\Statement::dump() does not need documentation comment.
Loading history...
352
    {
353
        $this->_request->dump();
354
        $this->response()->dump();
355
    }
356
357
    /**
358
     * @return bool|int
0 ignored issues
show
introduced by
Incorrect annotations group.
Loading history...
Coding Style introduced by
Expected "boolean|integer" but found "bool|int" for function return type
Loading history...
359
     * @throws Exception\TransportException
0 ignored issues
show
Coding Style introduced by
Comment missing for @throws tag in function comment
Loading history...
360
     */
361 2
    public function countAll()
362
    {
363 2
        $this->init();
364 2
        return $this->rows_before_limit_at_least;
365
    }
366
367
    /**
368
     * @param bool $key
0 ignored issues
show
introduced by
Incorrect annotations group.
Loading history...
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
Coding Style introduced by
Expected "boolean" but found "bool" for parameter type
Loading history...
369
     * @return array|mixed|null
0 ignored issues
show
introduced by
@return annotation of method \ClickHouseDB\Statement::statistics() does not specify type hint for items of its traversable return value.
Loading history...
370
     * @throws Exception\TransportException
0 ignored issues
show
Coding Style introduced by
Comment missing for @throws tag in function comment
Loading history...
371
     */
372
    public function statistics($key = false)
0 ignored issues
show
introduced by
Method \ClickHouseDB\Statement::statistics() does not have parameter type hint for its parameter $key but it should be possible to add it based on @param annotation "bool".
Loading history...
Coding Style introduced by
Type hint "bool" missing for $key
Loading history...
373
    {
374
        $this->init();
375
376
        if (!is_array($this->statistics)) {
0 ignored issues
show
Coding Style introduced by
Expected 1 space(s) after NOT operator; 0 found
Loading history...
introduced by
Function is_array() should not be referenced via a fallback global name, but via a use statement.
Loading history...
377
            return null;
378
        }
379
380
        if (!$key) return $this->statistics;
0 ignored issues
show
Coding Style Best Practice introduced by
It is generally a best practice to always use braces with control structures.

Adding braces to control structures avoids accidental mistakes as your code changes:

// Without braces (not recommended)
if (true)
    doSomething();

// Recommended
if (true) {
    doSomething();
}
Loading history...
381
382
        if (!isset($this->statistics[$key])) {
383
            return null;
384
        }
385
386
        return $this->statistics[$key];
387
388
    }
0 ignored issues
show
Coding Style introduced by
Function closing brace must go on the next line following the body; found 1 blank lines before brace
Loading history...
389
390
    /**
391
     * @return int
392
     * @throws Exception\TransportException
393
     */
394 8
    public function count()
395
    {
396 8
        $this->init();
397 8
        return $this->rows;
398
    }
399
400
    /**
401
     * @return mixed|string
402
     * @throws Exception\TransportException
403
     */
404 3
    public function rawData()
405
    {
406 3
        if ($this->_init) {
407
            return $this->_rawData;
408
        }
409
410 3
        $this->check();
411
412 3
        return $this->response()->rawDataOrJson($this->format);
413
    }
414
415
    /**
416
     *
417
     */
418 2
    public function resetIterator()
419
    {
420 2
        $this->iterator=0;
421 2
    }
422
423 2
    public function fetchRow($key = null)
424
    {
425 2
        $this->init();
426
427 2
        $position=$this->iterator;
428
429 2
        if (!isset($this->array_data[$position])) {
430
            return null;
431
        }
432
433 2
        $this->iterator++;
434
435 2
        if (!$key) {
436
            return $this->array_data[$position];
437
        }
438 2
        if (!isset($this->array_data[$position][$key])) {
439 1
            return null;
440
        }
441
442 2
        return $this->array_data[$position][$key];
443
444
    }
445
    /**
446
     * @param string $key
447
     * @return mixed|null
448
     * @throws Exception\TransportException
449
     */
450 18
    public function fetchOne($key = null)
451
    {
452 18
        $this->init();
453 18
        if (!isset($this->array_data[0])) {
454
            return null;
455
        }
456
457 18
        if (!$key) {
458 3
            return $this->array_data[0];
459
        }
460
461 18
        if (!isset($this->array_data[0][$key])) {
462 2
            return null;
463
        }
464
465 17
        return $this->array_data[0][$key];
466
    }
467
468
    /**
469
     * @param string|null $path
470
     * @return array
471
     * @throws Exception\TransportException
472
     */
473 3
    public function rowsAsTree($path)
474
    {
475 3
        $this->init();
476
477 3
        $out = [];
478 3
        foreach ($this->array_data as $row) {
479 3
            $d = $this->array_to_tree($row, $path);
480 3
            $out = array_replace_recursive($d, $out);
0 ignored issues
show
introduced by
Function array_replace_recursive() should not be referenced via a fallback global name, but via a use statement.
Loading history...
481
        }
482
483 3
        return $out;
484
    }
485
486
    /**
487
     * Return size_upload,upload_content,speed_upload,time_request
488
     *
489
     * @return array
490
     * @throws Exception\TransportException
491
     */
492
    public function info_upload()
493
    {
494
        $this->check();
495
        return [
496
            'size_upload'    => $this->response()->size_upload(),
497
            'upload_content' => $this->response()->upload_content_length(),
498
            'speed_upload'   => $this->response()->speed_upload(),
499
            'time_request'   => $this->response()->total_time()
500
        ];
501
    }
502
503
    /**
504
     * Return size_upload,upload_content,speed_upload,time_request,starttransfer_time,size_download,speed_download
505
     *
506
     * @return array
507
     * @throws Exception\TransportException
508
     */
509 1
    public function info()
510
    {
511 1
        $this->check();
512
        return [
513 1
            'starttransfer_time'    => $this->response()->starttransfer_time(),
514 1
            'size_download'    => $this->response()->size_download(),
515 1
            'speed_download'    => $this->response()->speed_download(),
516 1
            'size_upload'    => $this->response()->size_upload(),
517 1
            'upload_content' => $this->response()->upload_content_length(),
518 1
            'speed_upload'   => $this->response()->speed_upload(),
519 1
            'time_request'   => $this->response()->total_time()
520
        ];
521
    }
522
523
    /**
524
     * get format in sql
525
     * @return mixed
526
     */
527 1
    public function getFormat()
528
    {
529 1
        return $this->format;
530
    }
531
532
    /**
533
     * @return array
534
     * @throws Exception\TransportException
535
     */
536 9
    public function rows()
537
    {
538 9
        $this->init();
539 8
        return $this->array_data;
540
    }
541
542
    /**
543
     * @param array|string $arr
544
     * @param null|string|array $path
545
     * @return array
546
     */
547 3
    private function array_to_tree($arr, $path = null)
548
    {
549 3
        if (is_array($path)) {
0 ignored issues
show
introduced by
Function is_array() should not be referenced via a fallback global name, but via a use statement.
Loading history...
550
            $keys = $path;
551
        } else {
552 3
            $args = func_get_args();
0 ignored issues
show
introduced by
Function func_get_args() should not be referenced via a fallback global name, but via a use statement.
Loading history...
553 3
            array_shift($args);
0 ignored issues
show
introduced by
Function array_shift() should not be referenced via a fallback global name, but via a use statement.
Loading history...
554
555 3
            if (sizeof($args) < 2) {
0 ignored issues
show
introduced by
Function sizeof() should not be referenced via a fallback global name, but via a use statement.
Loading history...
556 3
                $separator = '.';
557 3
                $keys = explode($separator, $path);
0 ignored issues
show
introduced by
Function explode() should not be referenced via a fallback global name, but via a use statement.
Loading history...
558
            } else {
559
                $keys = $args;
560
            }
561
        }
562
563
        //
564 3
        $tree = $arr;
565 3
        while (count($keys)) {
0 ignored issues
show
introduced by
Function count() should not be referenced via a fallback global name, but via a use statement.
Loading history...
566 3
            $key = array_pop($keys);
0 ignored issues
show
introduced by
Function array_pop() should not be referenced via a fallback global name, but via a use statement.
Loading history...
567
568 3
            if (isset($arr[$key])) {
569 3
                $val = $arr[$key];
570
            } else {
571
                $val = $key;
572
            }
573
574 3
            $tree = array($val => $tree);
575
        }
576 3
        if (!is_array($tree)) {
0 ignored issues
show
introduced by
Function is_array() should not be referenced via a fallback global name, but via a use statement.
Loading history...
577
            return [];
578
        }
579 3
        return $tree;
580
    }
581
}
582