Passed
Push — master ( 0d91ab...56709c )
by Igor
25:58 queued 15:53
created

Statement   F

Complexity

Total Complexity 75

Size/Duplication

Total Lines 600
Duplicated Lines 0 %

Test Coverage

Coverage 75.92%

Importance

Changes 12
Bugs 0 Features 2
Metric Value
eloc 193
dl 0
loc 600
ccs 145
cts 191
cp 0.7592
rs 2.4
c 12
b 0
f 2
wmc 75

36 Methods

Rating   Name   Duplication   Size   Complexity  
A response() 0 3 1
A sql() 0 3 1
A getRequest() 0 3 1
A responseInfo() 0 3 1
A info() 0 11 1
A extremesMax() 0 9 2
A statistics() 0 15 4
A extremesMin() 0 9 2
A parseErrorClickHouse() 0 15 2
A fetchRow() 0 20 4
A info_upload() 0 8 1
A totalTimeRequest() 0 4 1
A rawData() 0 9 2
A resetIterator() 0 3 1
A check() 0 11 3
A getFormat() 0 3 1
A isInited() 0 3 1
A valid() 0 3 1
A rewind() 0 2 1
A jsonRows() 0 3 1
A next() 0 2 1
A key() 0 2 1
A current() 0 6 2
A extremes() 0 4 1
A dump() 0 4 1
A rowsAsTree() 0 11 2
A isError() 0 3 2
A totals() 0 4 1
B init() 0 50 11
A countAll() 0 4 1
A count() 0 4 1
A fetchOne() 0 16 4
A __construct() 0 6 1
B error() 0 37 7
A rows() 0 4 1
B array_to_tree() 0 33 6

How to fix   Complexity   

Complex Class

Complex classes like Statement often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes.

Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.

While breaking up the class, it is a good idea to analyze how other classes use Statement, and based on these observations, apply Extract Interface, too.

1
<?php
0 ignored issues
show
introduced by
Missing declare(strict_types=1).
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 implements \Iterator
0 ignored issues
show
introduced by
Class \Iterator should not be referenced via a fully qualified name, but via a use statement.
Loading history...
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
Coding Style introduced by
Member variable "_http_code" is not in valid camel caps format
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;
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;
0 ignored issues
show
Coding Style introduced by
Member variable "rows_before_limit_at_least" is not in valid camel caps format
Loading history...
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 = [];
0 ignored issues
show
Coding Style introduced by
Member variable "array_data" is not in valid camel caps format
Loading history...
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;
88
89
90 45
    public function __construct(CurlerRequest $request)
0 ignored issues
show
Coding Style introduced by
Expected 1 blank line before function; 2 found
Loading history...
91
    {
92 45
        $this->_request = $request;
93 45
        $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 45
        $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 45
        $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 45
    }
97
98
    /**
99
     * @return CurlerRequest
100
     */
101
    public function getRequest()
0 ignored issues
show
introduced by
Method \ClickHouseDB\Statement::getRequest() does not have native 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
109
     */
110 39
    private function response()
0 ignored issues
show
introduced by
Method \ClickHouseDB\Statement::response() does not have native return type hint for its return value but it should be possible to add it based on @return annotation "CurlerResponse".
Loading history...
111
    {
112 39
        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
118
     */
119 1
    public function responseInfo()
120
    {
121 1
        return $this->response()->info();
122
    }
123
124
    /**
125
     * @return mixed|string
126
     */
127 10
    public function sql()
128
    {
129 10
        return $this->sql;
130
    }
131
132
    /**
133
     * @param string $body
0 ignored issues
show
introduced by
Incorrect annotations group.
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...
135
     */
136 5
    private function parseErrorClickHouse($body)
0 ignored issues
show
introduced by
Method \ClickHouseDB\Statement::parseErrorClickHouse() does not have native type hint for its parameter $body but it should be possible to add it based on @param annotation "string".
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. DB::Exception: Unknown setting readonly[0], e.what() = DB::Exception
142
        // Code: 192. DB::Exception: Unknown user x, e.what() = DB::Exception
143
        // Code: 60. DB::Exception: Table default.ZZZZZ doesn't exist., e.what() = DB::Exception
144
        // Code: 516. DB::Exception: test_username: Authentication failed: password is incorrect or there is no user with such name. (AUTHENTICATION_FAILED) (version 22.8.3.13 (official build))
145 5
146 4
        if (preg_match("%Code:\s(\d+).\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:\s(\d+).\s*DB\:\:E...\.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...
147
            return ['code' => $mathes[1], 'message' => $mathes[2]];
148
        }
149 1
150
        return false;
151
    }
152
153
    /**
154
     * @return bool
0 ignored issues
show
introduced by
Incorrect annotations group.
Loading history...
155
     * @throws Exception\TransportException
156 8
     */
157
    public function error()
0 ignored issues
show
introduced by
Method \ClickHouseDB\Statement::error() does not have native return type hint for its return value but it should be possible to add it based on @return annotation "bool".
Loading history...
158 8
    {
159 2
        if (!$this->isError()) {
0 ignored issues
show
Coding Style introduced by
Expected 1 space after NOT operator; 0 found
Loading history...
160
            return false;
161
        }
162 6
163 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...
164 6
        $error_no = $this->response()->error_no();
0 ignored issues
show
Coding Style introduced by
The variable $error_no should be in camel caps format.
Loading history...
165
        $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...
166 6
167 6
        $dumpStatement = false;
168 5
        if (!$error_no && !$error) {
0 ignored issues
show
Coding Style introduced by
The variable $error_no should be in camel caps format.
Loading history...
Coding Style introduced by
Expected 1 space after NOT operator; 0 found
Loading history...
169
            $parse = $this->parseErrorClickHouse($body);
170 5
171 4
            if ($parse) {
0 ignored issues
show
introduced by
$parse is a non-empty array, thus is always true.
Loading history...
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...
172
                throw new DatabaseException($parse['message'] . "\nIN:" . $this->sql(), $parse['code']);
173 1
            } else {
0 ignored issues
show
introduced by
Remove useless "else" to reduce code nesting.
Loading history...
174 1
                $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...
175 1
                $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...
176
                $dumpStatement = true;
177
            }
178 1
        } else {
179 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...
Coding Style introduced by
The variable $error_no should be in camel caps format.
Loading history...
180
            $message = $this->response()->error();
181
        }
182 2
183 2
        $exception = new QueryException($message, $code);
184
        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...
185
            $exception = new ClickHouseUnavailableException($message, $code);
186
        }
187 2
188 1
        if ($dumpStatement) {
0 ignored issues
show
introduced by
The condition $dumpStatement is always false.
Loading history...
189 1
            $exception->setRequestDetails($this->_request->getDetails());
190
            $exception->setResponseDetails($this->response()->getDetails());
191
        }
192 2
193
        throw $exception;
194
    }
195
196
    /**
197
     * @return bool
0 ignored issues
show
introduced by
Incorrect annotations group.
Loading history...
198
     * @throws Exception\TransportException
199 39
     */
200
    public function isError()
0 ignored issues
show
introduced by
Method \ClickHouseDB\Statement::isError() does not have native return type hint for its return value but it should be possible to add it based on @return annotation "bool".
Loading history...
201 39
    {
202
        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...
203
    }
204 32
205
    private function check() : bool
0 ignored issues
show
introduced by
There must be no whitespace between closing parenthesis and return type colon.
Loading history...
206 32
    {
207
        if (!$this->_request->isResponseExists()) {
0 ignored issues
show
Coding Style introduced by
Expected 1 space after NOT operator; 0 found
Loading history...
208
            throw QueryException::noResponse();
209
        }
210 32
211 1
        if ($this->isError()) {
212
            $this->error();
213
        }
214 31
215
        return true;
216
    }
217
218
    /**
219
     * @return bool
220
     */
221 30
    public function isInited()
0 ignored issues
show
introduced by
Method \ClickHouseDB\Statement::isInited() does not have native return type hint for its return value but it should be possible to add it based on @return annotation "bool".
Loading history...
222
    {
223 30
        return $this->_init;
224
    }
225
226
    /**
227
     * @return bool
0 ignored issues
show
introduced by
Incorrect annotations group.
Loading history...
228 30
     * @throws Exception\TransportException
229
     */
230
    private function init()
0 ignored issues
show
introduced by
Method \ClickHouseDB\Statement::init() does not have native return type hint for its return value but it should be possible to add it based on @return annotation "bool".
Loading history...
231 29
    {
232
        if ($this->_init) {
233 29
            return false;
234
        }
235
236
        $this->check();
237 29
238 29
        $this->_rawData = $this->response()->rawDataOrJson($this->format);
239
240 29
        if (!$this->_rawData) {
0 ignored issues
show
Coding Style introduced by
Expected 1 space after NOT operator; 0 found
Loading history...
241 29
            $this->_init = true;
242
            return false;
0 ignored issues
show
introduced by
Expected 1 lines before "return", found 0.
Loading history...
243 29
        }
244
245
        $data = [];
246 29
        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...
247
248
            if (isset($this->_rawData[$key])) {
0 ignored issues
show
introduced by
Use early exit to reduce code nesting.
Loading history...
249
                if ($key=='data') {
0 ignored issues
show
Coding Style introduced by
Expected at least 1 space before "=="; 0 found
Loading history...
Coding Style introduced by
Expected at least 1 space after "=="; 0 found
Loading history...
introduced by
Operator == is disallowed, use === instead.
Loading history...
250
                    $data=$this->_rawData[$key];
0 ignored issues
show
Coding Style introduced by
Expected at least 1 space before "="; 0 found
Loading history...
Coding Style introduced by
Expected at least 1 space after "="; 0 found
Loading history...
Coding Style introduced by
Equals sign not aligned correctly; expected 1 space but found 0 spaces
Loading history...
251
                } else {
252 29
                    $this->{$key} = $this->_rawData[$key];
253
                }
254
            }
255
        }
256 29
257 29
        if (empty($this->meta)) {
258 29
            throw new QueryException('Can`t find meta');
259 29
        }
260
261
        $isJSONCompact=(stripos($this->format,'JSONCompact')!==false?true:false);
0 ignored issues
show
Coding Style introduced by
Expected at least 1 space before "="; 0 found
Loading history...
Coding Style introduced by
Expected at least 1 space after "="; 0 found
Loading history...
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...
Coding Style introduced by
Expected at least 1 space before "!=="; 0 found
Loading history...
Coding Style introduced by
Expected at least 1 space after "!=="; 0 found
Loading history...
Coding Style introduced by
Expected at least 1 space before "?"; 0 found
Loading history...
Coding Style introduced by
Expected at least 1 space after "?"; 0 found
Loading history...
introduced by
Useless ternary operator.
Loading history...
Coding Style introduced by
Expected at least 1 space before ":"; 0 found
Loading history...
Coding Style introduced by
Expected at least 1 space after ":"; 0 found
Loading history...
262 29
        $this->array_data = [];
0 ignored issues
show
Coding Style introduced by
Member variable "array_data" is not in valid camel caps format
Loading history...
263
        foreach ($data as $rows) {
264 1
            $r = [];
265
266
            if ($isJSONCompact) {
267 28
                $r[] = $rows;
268 28
            } else {
269
                foreach ($this->meta as $meta) {
270
                    $r[$meta['name']] = $rows[$meta['name']];
271
                }
272 29
            }
273
274
            $this->array_data[] = $r;
0 ignored issues
show
Coding Style introduced by
Member variable "array_data" is not in valid camel caps format
Loading history...
275
        }
276 29
277
        $this->_init = true;
278
279
        return true;
280
    }
281
282
    /**
283
     * @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...
284
     * @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...
285
     */
286
    public function extremes()
0 ignored issues
show
introduced by
Method \ClickHouseDB\Statement::extremes() does not have native return type hint for its return value but it should be possible to add it based on @return annotation "array".
Loading history...
287
    {
288
        $this->init();
289
        return $this->extremes;
0 ignored issues
show
introduced by
Expected 1 lines before "return", found 0.
Loading history...
290
    }
291
292
    /**
293 1
     * @return mixed
0 ignored issues
show
introduced by
Incorrect annotations group.
Loading history...
294
     * @throws Exception\TransportException
295 1
     */
296 1
    public function totalTimeRequest()
297
    {
298
        $this->check();
299
        return $this->response()->total_time();
0 ignored issues
show
introduced by
Expected 1 lines before "return", found 0.
Loading history...
introduced by
Expected 0 lines after "return", found 1.
Loading history...
300
301
    }
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...
302
303
    /**
304 1
     * @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...
305
     * @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...
306 1
     */
307
    public function extremesMin()
0 ignored issues
show
introduced by
Method \ClickHouseDB\Statement::extremesMin() does not have native return type hint for its return value but it should be possible to add it based on @return annotation "array".
Loading history...
308 1
    {
309
        $this->init();
310
311
        if (empty($this->extremes['min'])) {
312 1
            return [];
313
        }
314
315
        return $this->extremes['min'];
316
    }
317
318
    /**
319
     * @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...
320
     * @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...
321
     */
322
    public function extremesMax()
0 ignored issues
show
introduced by
Method \ClickHouseDB\Statement::extremesMax() does not have native return type hint for its return value but it should be possible to add it based on @return annotation "array".
Loading history...
323
    {
324
        $this->init();
325
326
        if (empty($this->extremes['max'])) {
327
            return [];
328
        }
329
330
        return $this->extremes['max'];
331
    }
332
333
    /**
334 1
     * @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...
335
     * @throws Exception\TransportException
336 1
     */
337 1
    public function totals()
0 ignored issues
show
introduced by
Method \ClickHouseDB\Statement::totals() does not have native return type hint for its return value but it should be possible to add it based on @return annotation "array".
Loading history...
338
    {
339
        $this->init();
340
        return $this->totals;
0 ignored issues
show
introduced by
Expected 1 lines before "return", found 0.
Loading history...
341
    }
342
343
    /**
0 ignored issues
show
introduced by
Empty comment
Loading history...
344
     *
345
     */
346
    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...
347
    {
348
        $this->_request->dump();
349
        $this->response()->dump();
350
    }
351
352
    /**
353
     * @return bool|int
0 ignored issues
show
introduced by
Incorrect annotations group.
Loading history...
354
     * @throws Exception\TransportException
355
     */
356
    public function countAll()
357
    {
358
        $this->init();
359
        return $this->rows_before_limit_at_least;
0 ignored issues
show
introduced by
Expected 1 lines before "return", found 0.
Loading history...
Coding Style introduced by
Member variable "rows_before_limit_at_least" is not in valid camel caps format
Loading history...
360
    }
361 2
362
    /**
363 2
     * @param bool $key
0 ignored issues
show
introduced by
Incorrect annotations group.
Loading history...
364 2
     * @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...
365
     * @throws Exception\TransportException
366
     */
367
    public function statistics($key = false)
0 ignored issues
show
introduced by
Method \ClickHouseDB\Statement::statistics() does not have native type hint for its parameter $key but it should be possible to add it based on @param annotation "bool".
Loading history...
368
    {
369
        $this->init();
370
371
        if (!is_array($this->statistics)) {
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...
Coding Style introduced by
Expected 1 space after NOT operator; 0 found
Loading history...
372
            return null;
373
        }
374
375
        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...
introduced by
Expected 1 lines before "return", found -1.
Loading history...
Coding Style introduced by
Expected 1 space after NOT operator; 0 found
Loading history...
376
377
        if (!isset($this->statistics[$key])) {
0 ignored issues
show
Coding Style introduced by
Expected 1 space after NOT operator; 0 found
Loading history...
378
            return null;
379
        }
380
381
        return $this->statistics[$key];
0 ignored issues
show
introduced by
Expected 0 lines after "return", found 1.
Loading history...
382
383
    }
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...
384
385
    /**
386
     * @return int
0 ignored issues
show
introduced by
Incorrect annotations group.
Loading history...
387
     * @throws Exception\TransportException
388
     */
389
    public function count()
0 ignored issues
show
introduced by
Method \ClickHouseDB\Statement::count() does not have native return type hint for its return value but it should be possible to add it based on @return annotation "int".
Loading history...
390
    {
391
        $this->init();
392
        return $this->rows;
0 ignored issues
show
introduced by
Expected 1 lines before "return", found 0.
Loading history...
393
    }
394 8
395
    /**
396 8
     * @return mixed|string
0 ignored issues
show
introduced by
Incorrect annotations group.
Loading history...
397 8
     * @throws Exception\TransportException
398
     */
399
    public function rawData()
400
    {
401
        if ($this->_init) {
402
            return $this->_rawData;
403
        }
404 3
405
        $this->check();
406 3
407
        return $this->response()->rawDataOrJson($this->format);
408
    }
409
410 3
    /**
0 ignored issues
show
introduced by
Empty comment
Loading history...
411
     *
412 3
     */
413
    public function resetIterator()
0 ignored issues
show
introduced by
Method \ClickHouseDB\Statement::resetIterator() does not have void return type hint.
Loading history...
introduced by
Method \ClickHouseDB\Statement::resetIterator() does not need documentation comment.
Loading history...
414
    {
415
        $this->iterator=0;
0 ignored issues
show
Coding Style introduced by
Expected at least 1 space before "="; 0 found
Loading history...
Coding Style introduced by
Expected at least 1 space after "="; 0 found
Loading history...
Coding Style introduced by
Equals sign not aligned correctly; expected 1 space but found 0 spaces
Loading history...
416
    }
417
418 2
    public function fetchRow($key = null)
0 ignored issues
show
introduced by
Method \ClickHouseDB\Statement::fetchRow() does not have parameter type hint nor @param annotation for its parameter $key.
Loading history...
introduced by
Method \ClickHouseDB\Statement::fetchRow() does not have return type hint nor @return annotation for its return value.
Loading history...
419
    {
420 2
        $this->init();
421 2
422
        $position=$this->iterator;
0 ignored issues
show
Coding Style introduced by
Expected at least 1 space before "="; 0 found
Loading history...
Coding Style introduced by
Expected at least 1 space after "="; 0 found
Loading history...
Coding Style introduced by
Equals sign not aligned correctly; expected 1 space but found 0 spaces
Loading history...
423 2
424
        if (!isset($this->array_data[$position])) {
0 ignored issues
show
Coding Style introduced by
Member variable "array_data" is not in valid camel caps format
Loading history...
Coding Style introduced by
Expected 1 space after NOT operator; 0 found
Loading history...
425 2
            return null;
426
        }
427 2
428
        $this->iterator++;
429 2
430
        if (!$key) {
0 ignored issues
show
introduced by
Expected 1 lines after "if", found 0.
Loading history...
Coding Style introduced by
Expected 1 space after NOT operator; 0 found
Loading history...
431
            return $this->array_data[$position];
0 ignored issues
show
Coding Style introduced by
Member variable "array_data" is not in valid camel caps format
Loading history...
432
        }
433 2
        if (!isset($this->array_data[$position][$key])) {
0 ignored issues
show
Coding Style introduced by
Member variable "array_data" is not in valid camel caps format
Loading history...
Coding Style introduced by
Expected 1 space after NOT operator; 0 found
Loading history...
434
            return null;
435 2
        }
436
437
        return $this->array_data[$position][$key];
0 ignored issues
show
introduced by
Expected 0 lines after "return", found 1.
Loading history...
Coding Style introduced by
Member variable "array_data" is not in valid camel caps format
Loading history...
438 2
439 1
    }
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...
Coding Style introduced by
Expected 1 blank line after function; 0 found
Loading history...
440
    /**
441
     * @param string $key
0 ignored issues
show
introduced by
Incorrect annotations group.
Loading history...
442 2
     * @return mixed|null
443
     * @throws Exception\TransportException
444
     */
445
    public function fetchOne($key = null)
0 ignored issues
show
introduced by
Method \ClickHouseDB\Statement::fetchOne() does not have native type hint for its parameter $key but it should be possible to add it based on @param annotation "string".
Loading history...
446
    {
447
        $this->init();
448
        if (!isset($this->array_data[0])) {
0 ignored issues
show
Coding Style introduced by
Member variable "array_data" is not in valid camel caps format
Loading history...
Coding Style introduced by
Expected 1 space after NOT operator; 0 found
Loading history...
449
            return null;
450 18
        }
451
452 18
        if (!$key) {
0 ignored issues
show
Coding Style introduced by
Expected 1 space after NOT operator; 0 found
Loading history...
453 18
            return $this->array_data[0];
0 ignored issues
show
Coding Style introduced by
Member variable "array_data" is not in valid camel caps format
Loading history...
454
        }
455
456
        if (!isset($this->array_data[0][$key])) {
0 ignored issues
show
Coding Style introduced by
Member variable "array_data" is not in valid camel caps format
Loading history...
Coding Style introduced by
Expected 1 space after NOT operator; 0 found
Loading history...
457 18
            return null;
458 3
        }
459
460
        return $this->array_data[0][$key];
0 ignored issues
show
Coding Style introduced by
Member variable "array_data" is not in valid camel caps format
Loading history...
461 18
    }
462 2
463
    /**
464
     * @param string|null $path
0 ignored issues
show
introduced by
Incorrect annotations group.
Loading history...
465 17
     * @return array
0 ignored issues
show
introduced by
@return annotation of method \ClickHouseDB\Statement::rowsAsTree() does not specify type hint for items of its traversable return value.
Loading history...
466
     * @throws Exception\TransportException
467
     */
468
    public function rowsAsTree($path)
0 ignored issues
show
introduced by
Method \ClickHouseDB\Statement::rowsAsTree() does not have native type hint for its parameter $path but it should be possible to add it based on @param annotation "string|null".
Loading history...
introduced by
Method \ClickHouseDB\Statement::rowsAsTree() does not have native return type hint for its return value but it should be possible to add it based on @return annotation "array".
Loading history...
469
    {
470
        $this->init();
471
472
        $out = [];
473 4
        foreach ($this->array_data as $row) {
0 ignored issues
show
Coding Style introduced by
Member variable "array_data" is not in valid camel caps format
Loading history...
474
            $d = $this->array_to_tree($row, $path);
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...
475 4
            $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...
476
        }
477 4
478 4
        return $out;
479 4
    }
480 4
481
    /**
482
     * Return size_upload,upload_content,speed_upload,time_request
483 4
     *
484
     * @return array
0 ignored issues
show
introduced by
Incorrect annotations group.
Loading history...
introduced by
@return annotation of method \ClickHouseDB\Statement::info_upload() does not specify type hint for items of its traversable return value.
Loading history...
485
     * @throws Exception\TransportException
486
     */
487
    public function info_upload()
0 ignored issues
show
Coding Style introduced by
Method name "Statement::info_upload" is not in camel caps format
Loading history...
introduced by
Method \ClickHouseDB\Statement::info_upload() does not have native return type hint for its return value but it should be possible to add it based on @return annotation "array".
Loading history...
488
    {
489
        $this->check();
490
        return [
0 ignored issues
show
introduced by
Expected 1 lines before "return", found 0.
Loading history...
491
            'size_upload'    => $this->response()->size_upload(),
492
            'upload_content' => $this->response()->upload_content_length(),
493
            'speed_upload'   => $this->response()->speed_upload(),
494
            'time_request'   => $this->response()->total_time()
0 ignored issues
show
introduced by
Multi-line arrays must have a trailing comma after the last element.
Loading history...
495
        ];
496
    }
497
498
    /**
499
     * Return size_upload,upload_content,speed_upload,time_request,starttransfer_time,size_download,speed_download
500
     *
501
     * @return array
0 ignored issues
show
introduced by
Incorrect annotations group.
Loading history...
introduced by
@return annotation of method \ClickHouseDB\Statement::info() does not specify type hint for items of its traversable return value.
Loading history...
502
     * @throws Exception\TransportException
503
     */
504
    public function info()
0 ignored issues
show
introduced by
Method \ClickHouseDB\Statement::info() does not have native return type hint for its return value but it should be possible to add it based on @return annotation "array".
Loading history...
505
    {
506
        $this->check();
507
        return [
0 ignored issues
show
introduced by
Expected 1 lines before "return", found 0.
Loading history...
508
            'starttransfer_time'    => $this->response()->starttransfer_time(),
509 1
            'size_download'    => $this->response()->size_download(),
510
            'speed_download'    => $this->response()->speed_download(),
511 1
            'size_upload'    => $this->response()->size_upload(),
512
            'upload_content' => $this->response()->upload_content_length(),
513 1
            'speed_upload'   => $this->response()->speed_upload(),
514 1
            'time_request'   => $this->response()->total_time()
0 ignored issues
show
introduced by
Multi-line arrays must have a trailing comma after the last element.
Loading history...
515 1
        ];
516 1
    }
517 1
518 1
    /**
519 1
     * get format in sql
520
     * @return mixed
0 ignored issues
show
introduced by
Expected 1 lines between description and annotations, found 0.
Loading history...
521
     */
522
    public function getFormat()
523
    {
524
        return $this->format;
525
    }
526
527 1
    /**
528
     * @return array
0 ignored issues
show
introduced by
Incorrect annotations group.
Loading history...
introduced by
@return annotation of method \ClickHouseDB\Statement::rows() does not specify type hint for items of its traversable return value.
Loading history...
529 1
     * @throws Exception\TransportException
530
     */
531
    public function rows()
0 ignored issues
show
introduced by
Method \ClickHouseDB\Statement::rows() does not have native return type hint for its return value but it should be possible to add it based on @return annotation "array".
Loading history...
532
    {
533
        $this->init();
534
        return $this->array_data;
0 ignored issues
show
introduced by
Expected 1 lines before "return", found 0.
Loading history...
Coding Style introduced by
Member variable "array_data" is not in valid camel caps format
Loading history...
535
    }
536 9
537
    /**
538 9
     * @return false|string
539 8
    */
0 ignored issues
show
Coding Style introduced by
Expected 5 spaces before asterisk; 4 found
Loading history...
540
    public function jsonRows()
541
    {
542
        return json_encode($this->rows(), JSON_PRETTY_PRINT);
0 ignored issues
show
introduced by
Function json_encode() should not be referenced via a fallback global name, but via a use statement.
Loading history...
introduced by
Constant JSON_PRETTY_PRINT should not be referenced via a fallback global name, but via a use statement.
Loading history...
543
    }
544
545
    /**
546
     * @param array|string $arr
0 ignored issues
show
introduced by
Incorrect annotations group.
Loading history...
introduced by
@param annotation of method \ClickHouseDB\Statement::array_to_tree() does not specify type hint for items of its traversable parameter $arr.
Loading history...
Coding Style introduced by
Expected 6 spaces after parameter type; 1 found
Loading history...
547 4
     * @param null|string|array $path
0 ignored issues
show
introduced by
Null type hint should be on last position in "null|string|array".
Loading history...
introduced by
@param annotation of method \ClickHouseDB\Statement::array_to_tree() does not specify type hint for items of its traversable parameter $path.
Loading history...
548
     * @return array
0 ignored issues
show
introduced by
@return annotation of method \ClickHouseDB\Statement::array_to_tree() does not specify type hint for items of its traversable return value.
Loading history...
549 4
     */
550
    private function array_to_tree($arr, $path = null)
0 ignored issues
show
Coding Style introduced by
Method name "Statement::array_to_tree" is not in camel caps format
Loading history...
introduced by
Method \ClickHouseDB\Statement::array_to_tree() does not have native return type hint for its return value but it should be possible to add it based on @return annotation "array".
Loading history...
551
    {
552 4
        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...
553 4
            $keys = $path;
554
        } else {
555 4
            $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...
556 4
            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...
557 4
558
            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...
Coding Style introduced by
The use of function sizeof() is forbidden; use count() instead
Loading history...
559
                $separator = '.';
560
                $keys = explode($separator, $path);
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...
introduced by
Function explode() should not be referenced via a fallback global name, but via a use statement.
Loading history...
561
            } else {
562
                $keys = $args;
563
            }
564 4
        }
565 4
566 4
        //
0 ignored issues
show
introduced by
Empty comment
Loading history...
567
        $tree = $arr;
568 4
        while (count($keys)) {
0 ignored issues
show
introduced by
Expected 1 lines after "while", found 0.
Loading history...
introduced by
Function count() should not be referenced via a fallback global name, but via a use statement.
Loading history...
569 4
            $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...
570
571
            if (isset($arr[$key])) {
572
                $val = $arr[$key];
573
            } else {
574 4
                $val = $key;
575
            }
576 4
577
            $tree = array($val => $tree);
0 ignored issues
show
Coding Style introduced by
Short array syntax must be used to define arrays
Loading history...
578
        }
579 4
        if (!is_array($tree)) {
0 ignored issues
show
introduced by
Expected 1 lines after "if", found 0.
Loading history...
introduced by
Function is_array() should not be referenced via a fallback global name, but via a use statement.
Loading history...
Coding Style introduced by
Expected 1 space after NOT operator; 0 found
Loading history...
580
            return [];
581
        }
582
        return $tree;
0 ignored issues
show
introduced by
Expected 1 lines before "return", found 0.
Loading history...
583
    }
0 ignored issues
show
Coding Style introduced by
Expected 1 blank line after function; 2 found
Loading history...
584
585
586
    public function rewind(): void {
587
        $this->iterator = 0;
588
    }
589
590
    /**
591
     * @return mixed
592
     */
593
    #[\ReturnTypeWillChange]
0 ignored issues
show
introduced by
Constant \ReturnTypeWillChange should not be referenced via a fully qualified name, but via a use statement.
Loading history...
594
    public function current() {
595
        if (!isset($this->array_data[$this->iterator])) {
0 ignored issues
show
introduced by
Expected 1 lines after "if", found 0.
Loading history...
Coding Style introduced by
Member variable "array_data" is not in valid camel caps format
Loading history...
Coding Style introduced by
Expected 1 space after NOT operator; 0 found
Loading history...
596
            return null;
597
        }
598
        return $this->array_data[$this->iterator];
0 ignored issues
show
introduced by
Expected 1 lines before "return", found 0.
Loading history...
Coding Style introduced by
Member variable "array_data" is not in valid camel caps format
Loading history...
599
    }
600
601
    public function key(): int {
602
        return $this->iterator;
603
    }
604
605
    public function next(): void {
606
        ++$this->iterator;
607
    }
608
609
    public function valid(): bool {
610
        $this->init();
611
        return isset($this->array_data[$this->iterator]);
0 ignored issues
show
introduced by
Expected 1 lines before "return", found 0.
Loading history...
Coding Style introduced by
Member variable "array_data" is not in valid camel caps format
Loading history...
612
    }
613
}
614