Failed Conditions
Push — master ( 46ecb1...b78b3b )
by Igor
13s
created

Http::cleanQueryDegeneration()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 4
rs 10
ccs 3
cts 3
cp 1
cc 1
eloc 2
nc 1
nop 0
crap 1
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\Transport;
4
5
use ClickHouseDB\Exception\TransportException;
6
use ClickHouseDB\Query\Degeneration;
7
use ClickHouseDB\Query\Query;
8
use ClickHouseDB\Query\WhereInFile;
9
use ClickHouseDB\Query\WriteToFile;
10
use ClickHouseDB\Settings;
11
use ClickHouseDB\Statement;
12
use const PHP_EOL;
13
14
class Http
15
{
16
    /**
0 ignored issues
show
introduced by
Found multi-line comment for property \ClickHouseDB\Transport\Http::$_username with single line content, use one-line comment instead.
Loading history...
17
     * @var string
18
     */
19
    private $_username = null;
20
21
    /**
0 ignored issues
show
introduced by
Found multi-line comment for property \ClickHouseDB\Transport\Http::$_password with single line content, use one-line comment instead.
Loading history...
22
     * @var string
23
     */
24
    private $_password = null;
25
26
    /**
0 ignored issues
show
introduced by
Found multi-line comment for property \ClickHouseDB\Transport\Http::$_host with single line content, use one-line comment instead.
Loading history...
27
     * @var string
28
     */
29
    private $_host = '';
30
31
    /**
0 ignored issues
show
introduced by
Found multi-line comment for property \ClickHouseDB\Transport\Http::$_port with single line content, use one-line comment instead.
Loading history...
32
     * @var int
33
     */
34
    private $_port = 0;
35
36
    /**
0 ignored issues
show
introduced by
Found multi-line comment for property \ClickHouseDB\Transport\Http::$_verbose with single line content, use one-line comment instead.
Loading history...
37
     * @var bool|int
38
     */
39
    private $_verbose = false;
40
41
    /**
0 ignored issues
show
introduced by
Found multi-line comment for property \ClickHouseDB\Transport\Http::$_curler with single line content, use one-line comment instead.
Loading history...
42
     * @var CurlerRolling
43
     */
44
    private $_curler = null;
45
46
    /**
0 ignored issues
show
introduced by
Found multi-line comment for property \ClickHouseDB\Transport\Http::$_settings with single line content, use one-line comment instead.
Loading history...
47
     * @var Settings
48
     */
49
    private $_settings = null;
50
51
    /**
0 ignored issues
show
introduced by
Found multi-line comment for property \ClickHouseDB\Transport\Http::$_query_degenerations with single line content, use one-line comment instead.
Loading history...
52
     * @var array
0 ignored issues
show
introduced by
@var annotation of property \ClickHouseDB\Transport\Http::$_query_degenerations does not specify type hint for its items.
Loading history...
53
     */
54
    private $_query_degenerations = [];
55
56
    /**
57
     * Count seconds (int)
58
     *
59
     * @var int
60
     */
61
    private $_connectTimeOut = 5;
62
63
    /**
0 ignored issues
show
introduced by
Found multi-line comment for property \ClickHouseDB\Transport\Http::$xClickHouseProgress with single line content, use one-line comment instead.
Loading history...
64
     * @var callable
65
     */
66
    private $xClickHouseProgress = null;
67
68
    /**
69
     * Http constructor.
0 ignored issues
show
introduced by
Documentation comment contains forbidden comment "Http constructor.".
Loading history...
70
     * @param string $host
0 ignored issues
show
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
71
     * @param int $port
0 ignored issues
show
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
Coding Style introduced by
Expected "integer" but found "int" for parameter type
Loading history...
Coding Style introduced by
Expected 4 spaces after parameter type; 1 found
Loading history...
72
     * @param string $username
0 ignored issues
show
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
73
     * @param string $password
0 ignored issues
show
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
74
     */
75 53
    public function __construct($host, $port, $username, $password)
0 ignored issues
show
introduced by
Method \ClickHouseDB\Transport\Http::__construct() does not have parameter type hint for its parameter $host but it should be possible to add it based on @param annotation "string".
Loading history...
introduced by
Method \ClickHouseDB\Transport\Http::__construct() does not have parameter type hint for its parameter $port but it should be possible to add it based on @param annotation "int".
Loading history...
introduced by
Method \ClickHouseDB\Transport\Http::__construct() does not have parameter type hint for its parameter $username but it should be possible to add it based on @param annotation "string".
Loading history...
introduced by
Method \ClickHouseDB\Transport\Http::__construct() does not have parameter type hint for its parameter $password but it should be possible to add it based on @param annotation "string".
Loading history...
Coding Style introduced by
Type hint "string" missing for $host
Loading history...
Coding Style introduced by
Type hint "int" missing for $port
Loading history...
Coding Style introduced by
Type hint "string" missing for $username
Loading history...
Coding Style introduced by
Type hint "string" missing for $password
Loading history...
76
    {
77 53
        $this->setHost($host, $port);
78
79 53
        $this->_username = $username;
80 53
        $this->_password = $password;
81 53
        $this->_settings = new Settings($this);
82
83 53
        $this->setCurler();
84 53
    }
85
86
87 53
    public function setCurler()
0 ignored issues
show
introduced by
Method \ClickHouseDB\Transport\Http::setCurler() does not have void return type hint.
Loading history...
Coding Style Documentation introduced by
Missing doc comment for function setCurler()
Loading history...
88
    {
89 53
        $this->_curler = new CurlerRolling();
90 53
    }
91
92
    /**
93
     * @return CurlerRolling
94
     */
95
    public function getCurler()
0 ignored issues
show
introduced by
Method \ClickHouseDB\Transport\Http::getCurler() does not have return type hint for its return value but it should be possible to add it based on @return annotation "CurlerRolling".
Loading history...
96
    {
97
        return $this->_curler;
98
    }
99
100
    /**
101
     * @param string $host
0 ignored issues
show
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
102
     * @param int $port
0 ignored issues
show
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
Coding Style introduced by
Expected "integer" but found "int" for parameter type
Loading history...
Coding Style introduced by
Expected 4 spaces after parameter type; 1 found
Loading history...
103
     */
0 ignored issues
show
Coding Style Documentation introduced by
Missing @return tag in function comment
Loading history...
104 53
    public function setHost($host, $port = -1)
0 ignored issues
show
introduced by
Method \ClickHouseDB\Transport\Http::setHost() does not have parameter type hint for its parameter $host but it should be possible to add it based on @param annotation "string".
Loading history...
introduced by
Method \ClickHouseDB\Transport\Http::setHost() does not have parameter type hint for its parameter $port but it should be possible to add it based on @param annotation "int".
Loading history...
introduced by
Method \ClickHouseDB\Transport\Http::setHost() does not have void return type hint.
Loading history...
Coding Style introduced by
Type hint "string" missing for $host
Loading history...
Coding Style introduced by
Type hint "int" missing for $port
Loading history...
105
    {
106 53
        if ($port > 0) {
107 53
            $this->_port = $port;
108
        }
109
110 53
        $this->_host = $host;
111 53
    }
112
113
    /**
114
     * @return string
115
     */
116 43
    public function getUri()
0 ignored issues
show
introduced by
Method \ClickHouseDB\Transport\Http::getUri() does not have return type hint for its return value but it should be possible to add it based on @return annotation "string".
Loading history...
117
    {
118 43
        $proto = 'http';
119 43
        if ($this->settings()->isHttps()) {
120
            $proto = 'https';
121
        }
122
123 43
        $uri = $proto . '://' . $this->_host;
124 43
        return $this->_port ? $uri . ':' . $this->_port : $uri;
125
    }
126
127
    /**
128
     * @return Settings
129
     */
130 53
    public function settings()
0 ignored issues
show
introduced by
Method \ClickHouseDB\Transport\Http::settings() does not have return type hint for its return value but it should be possible to add it based on @return annotation "Settings".
Loading history...
131
    {
132 53
        return $this->_settings;
133
    }
134
135
    /**
136
     * @param bool|int $flag
0 ignored issues
show
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
Coding Style introduced by
Expected "boolean|integer" but found "bool|int" for parameter type
Loading history...
137
     * @return mixed
138
     */
139
    public function verbose($flag)
140
    {
141
        $this->_verbose = $flag;
142
        return $flag;
143
    }
144
145
    /**
146
     * @param array $params
0 ignored issues
show
introduced by
@param annotation of method \ClickHouseDB\Transport\Http::getUrl() does not specify type hint for items of its traversable parameter $params.
Loading history...
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
147
     * @return string
148
     */
149 35
    private function getUrl($params = [])
0 ignored issues
show
introduced by
Method \ClickHouseDB\Transport\Http::getUrl() does not have parameter type hint for its parameter $params but it should be possible to add it based on @param annotation "array".
Loading history...
introduced by
Method \ClickHouseDB\Transport\Http::getUrl() does not have return type hint for its return value but it should be possible to add it based on @return annotation "string".
Loading history...
Coding Style introduced by
Type hint "array" missing for $params
Loading history...
150
    {
151 35
        $settings = $this->settings()->getSettings();
152
153 35
        if (is_array($params) && sizeof($params)) {
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...
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...
154 35
            $settings = array_merge($settings, $params);
0 ignored issues
show
introduced by
Function array_merge() should not be referenced via a fallback global name, but via a use statement.
Loading history...
155
        }
156
0 ignored issues
show
Coding Style introduced by
Functions must not contain multiple empty lines in a row; found 2 empty lines
Loading history...
157
158 35
        if ($this->settings()->isReadOnlyUser())
159
        {
160
            unset($settings['extremes']);
161
            unset($settings['readonly']);
162
            unset($settings['enable_http_compression']);
163
            unset($settings['max_execution_time']);
164
0 ignored issues
show
Coding Style introduced by
Blank line found at end of control structure
Loading history...
165
        }
166
167 35
        unset($settings['https']);
168
0 ignored issues
show
Coding Style introduced by
Functions must not contain multiple empty lines in a row; found 2 empty lines
Loading history...
169
170 35
        return $this->getUri() . '?' . http_build_query($settings);
0 ignored issues
show
introduced by
Function http_build_query() should not be referenced via a fallback global name, but via a use statement.
Loading history...
171
    }
172
173
    /**
174
     * @param array $extendinfo
0 ignored issues
show
introduced by
@param annotation of method \ClickHouseDB\Transport\Http::newRequest() does not specify type hint for items of its traversable parameter $extendinfo.
Loading history...
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
175
     * @return CurlerRequest
176
     */
177 35
    private function newRequest($extendinfo)
0 ignored issues
show
introduced by
Method \ClickHouseDB\Transport\Http::newRequest() does not have parameter type hint for its parameter $extendinfo but it should be possible to add it based on @param annotation "array".
Loading history...
introduced by
Method \ClickHouseDB\Transport\Http::newRequest() 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...
Coding Style introduced by
Type hint "array" missing for $extendinfo
Loading history...
178
    {
179 35
        $new = new CurlerRequest();
180 35
        $new->auth($this->_username, $this->_password)
181 35
            ->POST()
182 35
            ->setRequestExtendedInfo($extendinfo);
183
184 35
        if ($this->settings()->isEnableHttpCompression()) {
185 35
            $new->httpCompression(true);
186
        }
0 ignored issues
show
Coding Style introduced by
No blank line found after control structure
Loading history...
187 35
        if ($this->settings()->getSessionId())
188
        {
189 1
            $new->persistent();
190
        }
191
192 35
        $new->timeOut($this->settings()->getTimeOut());
193 35
        $new->connectTimeOut($this->_connectTimeOut)->keepAlive(); // one sec
194 35
        $new->verbose(boolval($this->_verbose));
0 ignored issues
show
introduced by
Function boolval() should not be referenced via a fallback global name, but via a use statement.
Loading history...
195
196 35
        return $new;
197
    }
198
199
    /**
200
     * @param Query $query
0 ignored issues
show
introduced by
Method \ClickHouseDB\Transport\Http::makeRequest() has useless @param annotation for parameter $query.
Loading history...
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
201
     * @param array $urlParams
0 ignored issues
show
introduced by
@param annotation of method \ClickHouseDB\Transport\Http::makeRequest() does not specify type hint for items of its traversable parameter $urlParams.
Loading history...
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
202
     * @param bool $query_as_string
0 ignored issues
show
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
Coding Style introduced by
Expected "boolean" but found "bool" for parameter type
Loading history...
Coding Style introduced by
Expected 2 spaces after parameter type; 1 found
Loading history...
203
     * @return CurlerRequest
204
     * @throws \ClickHouseDB\Exception\TransportException
0 ignored issues
show
introduced by
Class \ClickHouseDB\Exception\TransportException 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...
205
     */
206 35
    private function makeRequest(Query $query, $urlParams = [], $query_as_string = false)
0 ignored issues
show
introduced by
Method \ClickHouseDB\Transport\Http::makeRequest() does not have parameter type hint for its parameter $urlParams but it should be possible to add it based on @param annotation "array".
Loading history...
introduced by
Method \ClickHouseDB\Transport\Http::makeRequest() does not have parameter type hint for its parameter $query_as_string but it should be possible to add it based on @param annotation "bool".
Loading history...
introduced by
Method \ClickHouseDB\Transport\Http::makeRequest() 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...
Coding Style introduced by
Type hint "array" missing for $urlParams
Loading history...
Coding Style introduced by
Type hint "bool" missing for $query_as_string
Loading history...
207
    {
208 35
        $sql = $query->toSql();
209
210 35
        if ($query_as_string) {
211 1
            $urlParams['query'] = $sql;
212
        }
213
214 35
        $url = $this->getUrl($urlParams);
215
216
        $extendinfo = [
217 35
            'sql' => $sql,
0 ignored issues
show
Coding Style introduced by
This array key does not seem to be aligned correctly; expected 23 spaces, but found 12.
Loading history...
Coding Style introduced by
Array double arrow not aligned correctly; expected 4 space(s) but found 1
Loading history...
218 35
            'query' => $query,
0 ignored issues
show
Coding Style introduced by
This array key does not seem to be aligned correctly; expected 23 spaces, but found 12.
Loading history...
Coding Style introduced by
Array double arrow not aligned correctly; expected 2 space(s) but found 1
Loading history...
219 35
            'format'=> $query->getFormat()
0 ignored issues
show
Coding Style introduced by
This array key does not seem to be aligned correctly; expected 23 spaces, but found 12.
Loading history...
Coding Style introduced by
Array double arrow not aligned correctly; expected 1 space(s) but found 0
Loading history...
introduced by
Multiline arrays must have a trailing comma after the last element.
Loading history...
220
        ];
0 ignored issues
show
Coding Style introduced by
The closing parenthesis does not seem to be aligned correctly; expected 22 space(s), but found 8.
Loading history...
221
222 35
        $new = $this->newRequest($extendinfo);
223 35
        $new->url($url);
224
0 ignored issues
show
Coding Style introduced by
Functions must not contain multiple empty lines in a row; found 4 empty lines
Loading history...
225
226
227
228 35
        if (!$query_as_string) {
0 ignored issues
show
Coding Style introduced by
There must be a single space after a NOT operator; 0 found
Loading history...
229 35
            $new->parameters_json($sql);
230
        }
0 ignored issues
show
Coding Style introduced by
No blank line found after control structure
Loading history...
231 35
        if ($this->settings()->isEnableHttpCompression()) {
232 35
            $new->httpCompression(true);
233
        }
234
235 35
        return $new;
236
    }
237
238
    /**
239
     * @param string|Query $sql
0 ignored issues
show
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
240
     * @return CurlerRequest
241
     */
242 3
    public function writeStreamData($sql)
0 ignored issues
show
introduced by
Method \ClickHouseDB\Transport\Http::writeStreamData() 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...
243
    {
0 ignored issues
show
Coding Style introduced by
Expected 0 blank lines after opening function brace; 1 found
Loading history...
244
245 3
        if ($sql instanceof Query) {
246 1
            $query=$sql;
0 ignored issues
show
Coding Style introduced by
Equals sign not aligned correctly; expected 1 space but found 0 spaces
Loading history...
247
        } else {
248 2
            $query = new Query($sql);
249
        }
250
251 3
        $url = $this->getUrl([
0 ignored issues
show
Coding Style introduced by
Equals sign not aligned with surrounding assignments; expected 8 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...
252 3
            'readonly' => 0,
0 ignored issues
show
Coding Style introduced by
This array key does not seem to be aligned correctly; expected 30 spaces, but found 12.
Loading history...
253 3
            'query' => $query->toSql()
0 ignored issues
show
Coding Style introduced by
This array key does not seem to be aligned correctly; expected 30 spaces, but found 12.
Loading history...
Coding Style introduced by
Array double arrow not aligned correctly; expected 4 space(s) but found 1
Loading history...
introduced by
Multiline arrays must have a trailing comma after the last element.
Loading history...
254
        ]);
0 ignored issues
show
Coding Style introduced by
The closing parenthesis does not seem to be aligned correctly; expected 29 space(s), but found 8.
Loading history...
255
        $extendinfo = [
256 3
            'sql' => $sql,
0 ignored issues
show
Coding Style introduced by
This array key does not seem to be aligned correctly; expected 23 spaces, but found 12.
Loading history...
Coding Style introduced by
Array double arrow not aligned correctly; expected 4 space(s) but found 1
Loading history...
257 3
            'query' => $query,
0 ignored issues
show
Coding Style introduced by
This array key does not seem to be aligned correctly; expected 23 spaces, but found 12.
Loading history...
Coding Style introduced by
Array double arrow not aligned correctly; expected 2 space(s) but found 1
Loading history...
258 3
            'format'=> $query->getFormat()
0 ignored issues
show
Coding Style introduced by
This array key does not seem to be aligned correctly; expected 23 spaces, but found 12.
Loading history...
Coding Style introduced by
Array double arrow not aligned correctly; expected 1 space(s) but found 0
Loading history...
introduced by
Multiline arrays must have a trailing comma after the last element.
Loading history...
259
        ];
0 ignored issues
show
Coding Style introduced by
The closing parenthesis does not seem to be aligned correctly; expected 22 space(s), but found 8.
Loading history...
260
261 3
        $request = $this->newRequest($extendinfo);
262 3
        $request->url($url);
263 3
        return $request;
264
    }
265
266
267
    /**
268
     * @param string $sql
0 ignored issues
show
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
269
     * @param string $file_name
0 ignored issues
show
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
270
     * @return Statement
271
     * @throws \ClickHouseDB\Exception\TransportException
0 ignored issues
show
introduced by
Class \ClickHouseDB\Exception\TransportException 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...
272
     */
273 7
    public function writeAsyncCSV($sql, $file_name)
0 ignored issues
show
introduced by
Method \ClickHouseDB\Transport\Http::writeAsyncCSV() does not have parameter type hint for its parameter $sql but it should be possible to add it based on @param annotation "string".
Loading history...
introduced by
Method \ClickHouseDB\Transport\Http::writeAsyncCSV() does not have parameter type hint for its parameter $file_name but it should be possible to add it based on @param annotation "string".
Loading history...
introduced by
Method \ClickHouseDB\Transport\Http::writeAsyncCSV() does not have return type hint for its return value but it should be possible to add it based on @return annotation "Statement".
Loading history...
Coding Style introduced by
Type hint "string" missing for $sql
Loading history...
Coding Style introduced by
Type hint "string" missing for $file_name
Loading history...
274
    {
275 7
        $query = new Query($sql);
276
277 7
        $url = $this->getUrl([
278 7
            'readonly' => 0,
0 ignored issues
show
Coding Style introduced by
This array key does not seem to be aligned correctly; expected 30 spaces, but found 12.
Loading history...
279 7
            'query' => $query->toSql()
0 ignored issues
show
Coding Style introduced by
This array key does not seem to be aligned correctly; expected 30 spaces, but found 12.
Loading history...
Coding Style introduced by
Array double arrow not aligned correctly; expected 4 space(s) but found 1
Loading history...
introduced by
Multiline arrays must have a trailing comma after the last element.
Loading history...
280
        ]);
0 ignored issues
show
Coding Style introduced by
The closing parenthesis does not seem to be aligned correctly; expected 29 space(s), but found 8.
Loading history...
281
282
        $extendinfo = [
283 7
            'sql' => $sql,
0 ignored issues
show
Coding Style introduced by
This array key does not seem to be aligned correctly; expected 23 spaces, but found 12.
Loading history...
Coding Style introduced by
Array double arrow not aligned correctly; expected 4 space(s) but found 1
Loading history...
284 7
            'query' => $query,
0 ignored issues
show
Coding Style introduced by
This array key does not seem to be aligned correctly; expected 23 spaces, but found 12.
Loading history...
Coding Style introduced by
Array double arrow not aligned correctly; expected 2 space(s) but found 1
Loading history...
285 7
            'format'=> $query->getFormat()
0 ignored issues
show
Coding Style introduced by
This array key does not seem to be aligned correctly; expected 23 spaces, but found 12.
Loading history...
Coding Style introduced by
Array double arrow not aligned correctly; expected 1 space(s) but found 0
Loading history...
introduced by
Multiline arrays must have a trailing comma after the last element.
Loading history...
286
        ];
0 ignored issues
show
Coding Style introduced by
The closing parenthesis does not seem to be aligned correctly; expected 22 space(s), but found 8.
Loading history...
287
288 7
        $request = $this->newRequest($extendinfo);
289 7
        $request->url($url);
290
291
        $request->setCallbackFunction(function(CurlerRequest $request) {
0 ignored issues
show
Coding Style introduced by
Expected 1 space after FUNCTION keyword; 0 found
Loading history...
introduced by
Closure does not have void return type hint.
Loading history...
292 7
            $handle = $request->getInfileHandle();
293 7
            if (is_resource($handle)) {
0 ignored issues
show
introduced by
Use early exit to reduce code nesting.
Loading history...
introduced by
Function is_resource() should not be referenced via a fallback global name, but via a use statement.
Loading history...
294 7
                fclose($handle);
0 ignored issues
show
introduced by
Function fclose() should not be referenced via a fallback global name, but via a use statement.
Loading history...
295
            }
296 7
        });
297
298 7
        $request->setInfile($file_name);
299 7
        $this->_curler->addQueLoop($request);
300
301 7
        return new Statement($request);
302
    }
303
304
    /**
305
     * get Count Pending Query in Queue
306
     *
307
     * @return int
0 ignored issues
show
Coding Style introduced by
Expected "integer" but found "int" for function return type
Loading history...
308
     */
309 11
    public function getCountPendingQueue()
0 ignored issues
show
introduced by
Method \ClickHouseDB\Transport\Http::getCountPendingQueue() does not have return type hint for its return value but it should be possible to add it based on @return annotation "int".
Loading history...
310
    {
311 11
        return $this->_curler->countPending();
312
    }
313
314
    /**
315
     * set Connect TimeOut in seconds [CURLOPT_CONNECTTIMEOUT] ( int )
316
     *
317
     * @param int $connectTimeOut
0 ignored issues
show
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
Coding Style introduced by
Expected "integer" but found "int" for parameter type
Loading history...
318
     */
0 ignored issues
show
Coding Style Documentation introduced by
Missing @return tag in function comment
Loading history...
319 2
    public function setConnectTimeOut($connectTimeOut)
0 ignored issues
show
introduced by
Method \ClickHouseDB\Transport\Http::setConnectTimeOut() does not have parameter type hint for its parameter $connectTimeOut but it should be possible to add it based on @param annotation "int".
Loading history...
introduced by
Method \ClickHouseDB\Transport\Http::setConnectTimeOut() does not have void return type hint.
Loading history...
Coding Style introduced by
Type hint "int" missing for $connectTimeOut
Loading history...
320
    {
321 2
        $this->_connectTimeOut = $connectTimeOut;
322 2
    }
323
324
    /**
325
     * get ConnectTimeOut in seconds
326
     *
327
     * @return int
0 ignored issues
show
Coding Style introduced by
Expected "integer" but found "int" for function return type
Loading history...
328
     */
329 36
    public function getConnectTimeOut()
0 ignored issues
show
introduced by
Method \ClickHouseDB\Transport\Http::getConnectTimeOut() does not have return type hint for its return value but it should be possible to add it based on @return annotation "int".
Loading history...
330
    {
331 36
        return $this->_connectTimeOut;
332
    }
333
334
335 1
    public function __findXClickHouseProgress($handle)
0 ignored issues
show
introduced by
Method \ClickHouseDB\Transport\Http::__findXClickHouseProgress() does not have parameter type hint nor @param annotation for its parameter $handle.
Loading history...
introduced by
Method \ClickHouseDB\Transport\Http::__findXClickHouseProgress() does not have return type hint nor @return annotation for its return value.
Loading history...
Coding Style Documentation introduced by
Missing doc comment for function __findXClickHouseProgress()
Loading history...
336
    {
337 1
        $code = curl_getinfo($handle, CURLINFO_HTTP_CODE);
0 ignored issues
show
introduced by
Function curl_getinfo() should not be referenced via a fallback global name, but via a use statement.
Loading history...
introduced by
Constant CURLINFO_HTTP_CODE should not be referenced via a fallback global name, but via a use statement.
Loading history...
338
339
        // Search X-ClickHouse-Progress
340 1
        if ($code == 200) {
0 ignored issues
show
introduced by
Use early exit to reduce code nesting.
Loading history...
introduced by
Operator == is disallowed, use === instead.
Loading history...
341 1
            $response = curl_multi_getcontent($handle);
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...
introduced by
Function curl_multi_getcontent() should not be referenced via a fallback global name, but via a use statement.
Loading history...
342 1
            $header_size = curl_getinfo($handle, CURLINFO_HEADER_SIZE);
0 ignored issues
show
introduced by
Function curl_getinfo() should not be referenced via a fallback global name, but via a use statement.
Loading history...
introduced by
Constant CURLINFO_HEADER_SIZE should not be referenced via a fallback global name, but via a use statement.
Loading history...
343 1
            if (!$header_size) {
0 ignored issues
show
Coding Style introduced by
There must be a single space after a NOT operator; 0 found
Loading history...
344
                return false;
345
            }
346
347 1
            $header = substr($response, 0, $header_size);
0 ignored issues
show
introduced by
Function substr() should not be referenced via a fallback global name, but via a use statement.
Loading history...
348 1
            if (!$header_size) {
0 ignored issues
show
Coding Style introduced by
There must be a single space after a NOT operator; 0 found
Loading history...
349
                return false;
350
            }
0 ignored issues
show
Coding Style introduced by
No blank line found after control structure
Loading history...
351 1
            $pos = strrpos($header, 'X-ClickHouse-Progress');
0 ignored issues
show
introduced by
Function strrpos() should not be referenced via a fallback global name, but via a use statement.
Loading history...
352
353 1
            if (!$pos) {
0 ignored issues
show
Coding Style introduced by
There must be a single space after a NOT operator; 0 found
Loading history...
354
                return false;
355
            }
356
357 1
            $last = substr($header, $pos);
0 ignored issues
show
introduced by
Function substr() should not be referenced via a fallback global name, but via a use statement.
Loading history...
358 1
            $data = @json_decode(str_ireplace('X-ClickHouse-Progress:', '', $last), true);
0 ignored issues
show
introduced by
Function json_decode() should not be referenced via a fallback global name, but via a use statement.
Loading history...
introduced by
Function str_ireplace() should not be referenced via a fallback global name, but via a use statement.
Loading history...
359
360 1
            if ($data && is_callable($this->xClickHouseProgress)) {
0 ignored issues
show
introduced by
Function is_callable() should not be referenced via a fallback global name, but via a use statement.
Loading history...
Coding Style introduced by
Blank line found at start of control structure
Loading history...
361
362 1
                if (is_array($this->xClickHouseProgress)) {
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...
363
                    call_user_func_array($this->xClickHouseProgress, [$data]);
0 ignored issues
show
introduced by
Function call_user_func_array() should not be referenced via a fallback global name, but via a use statement.
Loading history...
364
                } else {
365 1
                    call_user_func($this->xClickHouseProgress, $data);
0 ignored issues
show
introduced by
Function call_user_func() should not be referenced via a fallback global name, but via a use statement.
Loading history...
366
                }
0 ignored issues
show
Coding Style introduced by
Blank line found after control structure
Loading history...
367
0 ignored issues
show
Coding Style introduced by
Functions must not contain multiple empty lines in a row; found 2 empty lines
Loading history...
368
0 ignored issues
show
Coding Style introduced by
Blank line found at end of control structure
Loading history...
369
            }
0 ignored issues
show
Coding Style introduced by
Blank line found after control structure
Loading history...
370
0 ignored issues
show
Coding Style introduced by
Blank line found at end of control structure
Loading history...
371
        }
372
373 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...
374
375
    /**
376
     * @param Query $query
0 ignored issues
show
introduced by
Method \ClickHouseDB\Transport\Http::getRequestRead() has useless @param annotation for parameter $query.
Loading history...
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
Coding Style introduced by
Expected 12 spaces after parameter type; 1 found
Loading history...
377
     * @param null|WhereInFile $whereInFile
0 ignored issues
show
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
378
     * @param null|WriteToFile $writeToFile
0 ignored issues
show
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
379
     * @return CurlerRequest
380
     * @throws \Exception
0 ignored issues
show
Coding Style introduced by
Comment missing for @throws tag in function comment
Loading history...
381
     */
382 30
    public function getRequestRead(Query $query, $whereInFile = null, $writeToFile = null)
0 ignored issues
show
introduced by
Method \ClickHouseDB\Transport\Http::getRequestRead() does not have parameter type hint for its parameter $whereInFile but it should be possible to add it based on @param annotation "null|WhereInFile".
Loading history...
introduced by
Method \ClickHouseDB\Transport\Http::getRequestRead() does not have parameter type hint for its parameter $writeToFile but it should be possible to add it based on @param annotation "null|WriteToFile".
Loading history...
introduced by
Method \ClickHouseDB\Transport\Http::getRequestRead() 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...
383
    {
384 30
        $urlParams = ['readonly' => 1];
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...
385 30
        $query_as_string = false;
386
        // ---------------------------------------------------------------------------------
387 30
        if ($whereInFile instanceof WhereInFile && $whereInFile->size()) {
388
            // $request = $this->prepareSelectWhereIn($request, $whereInFile);
389 1
            $structure = $whereInFile->fetchUrlParams();
390
            // $structure = [];
391 1
            $urlParams = array_merge($urlParams, $structure);
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...
introduced by
Function array_merge() should not be referenced via a fallback global name, but via a use statement.
Loading history...
392 1
            $query_as_string = true;
393
        }
0 ignored issues
show
Coding Style introduced by
No blank line found after control structure
Loading history...
394
        // ---------------------------------------------------------------------------------
395
        // if result to file
396 30
        if ($writeToFile instanceof WriteToFile && $writeToFile->fetchFormat()) {
397 1
            $query->setFormat($writeToFile->fetchFormat());
398 1
            unset($urlParams['extremes']);
399
        }
0 ignored issues
show
Coding Style introduced by
No blank line found after control structure
Loading history...
400
        // ---------------------------------------------------------------------------------
401
        // makeRequest read
402 30
        $request = $this->makeRequest($query, $urlParams, $query_as_string);
403
        // ---------------------------------------------------------------------------------
404
        // attach files
405 30
        if ($whereInFile instanceof WhereInFile && $whereInFile->size()) {
406 1
            $request->attachFiles($whereInFile->fetchFiles());
407
        }
0 ignored issues
show
Coding Style introduced by
No blank line found after control structure
Loading history...
408
        // ---------------------------------------------------------------------------------
409
        // result to file
410 30
        if ($writeToFile instanceof WriteToFile && $writeToFile->fetchFormat()) {
0 ignored issues
show
Coding Style introduced by
Blank line found at start of control structure
Loading history...
411
412 1
            $fout = fopen($writeToFile->fetchFile(), 'w');
0 ignored issues
show
introduced by
Function fopen() should not be referenced via a fallback global name, but via a use statement.
Loading history...
413 1
            if (is_resource($fout)) {
0 ignored issues
show
introduced by
Function is_resource() should not be referenced via a fallback global name, but via a use statement.
Loading history...
Coding Style introduced by
Blank line found at start of control structure
Loading history...
414
415 1
                $isGz = $writeToFile->getGzip();
416
417 1
                if ($isGz) {
418
                    // write gzip header
419
                    // "\x1f\x8b\x08\x00\x00\x00\x00\x00"
420
                    // fwrite($fout, "\x1F\x8B\x08\x08".pack("V", time())."\0\xFF", 10);
421
                    // write the original file name
422
                    // $oname = str_replace("\0", "", basename($writeToFile->fetchFile()));
423
                    // fwrite($fout, $oname."\0", 1+strlen($oname));
424
425
                    fwrite($fout, "\x1f\x8b\x08\x00\x00\x00\x00\x00");
0 ignored issues
show
introduced by
Function fwrite() should not be referenced via a fallback global name, but via a use statement.
Loading history...
426
0 ignored issues
show
Coding Style introduced by
Blank line found at end of control structure
Loading history...
427
                }
428
0 ignored issues
show
Coding Style introduced by
Functions must not contain multiple empty lines in a row; found 2 empty lines
Loading history...
429
430
                $request->setResultFileHandle($fout, $isGz)->setCallbackFunction(function(CurlerRequest $request) {
0 ignored issues
show
Coding Style introduced by
Expected 1 space after FUNCTION keyword; 0 found
Loading history...
introduced by
Closure does not have void return type hint.
Loading history...
431
                    fclose($request->getResultFileHandle());
0 ignored issues
show
introduced by
Function fclose() should not be referenced via a fallback global name, but via a use statement.
Loading history...
432 1
                });
433
            }
434
        }
0 ignored issues
show
Coding Style introduced by
No blank line found after control structure
Loading history...
435 30
        if ($this->xClickHouseProgress)
436
        {
437 1
            $request->setFunctionProgress([$this, '__findXClickHouseProgress']);
438
        }
0 ignored issues
show
Coding Style introduced by
No blank line found after control structure
Loading history...
439
        // ---------------------------------------------------------------------------------
440 30
        return $request;
441
442
    }
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...
443
444 1
    public function cleanQueryDegeneration()
0 ignored issues
show
introduced by
Method \ClickHouseDB\Transport\Http::cleanQueryDegeneration() does not have return type hint nor @return annotation for its return value.
Loading history...
Coding Style Documentation introduced by
Missing doc comment for function cleanQueryDegeneration()
Loading history...
445
    {
446 1
        $this->_query_degenerations = [];
447 1
        return true;
448
    }
449
450 53
    public function addQueryDegeneration(Degeneration $degeneration)
0 ignored issues
show
introduced by
Method \ClickHouseDB\Transport\Http::addQueryDegeneration() does not have return type hint nor @return annotation for its return value.
Loading history...
Coding Style Documentation introduced by
Missing doc comment for function addQueryDegeneration()
Loading history...
451
    {
452 53
        $this->_query_degenerations[] = $degeneration;
453 53
        return true;
454
    }
455
456
    /**
457
     * @param Query $query
0 ignored issues
show
introduced by
Method \ClickHouseDB\Transport\Http::getRequestWrite() has useless @param annotation for parameter $query.
Loading history...
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
458
     * @return CurlerRequest
459
     * @throws \ClickHouseDB\Exception\TransportException
0 ignored issues
show
introduced by
Class \ClickHouseDB\Exception\TransportException 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...
460
     */
461 19
    public function getRequestWrite(Query $query)
0 ignored issues
show
introduced by
Method \ClickHouseDB\Transport\Http::getRequestWrite() 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...
462
    {
463 19
        $urlParams = ['readonly' => 0];
464 19
        return $this->makeRequest($query, $urlParams);
465
    }
466
467
    /**
468
     * @throws TransportException
0 ignored issues
show
Coding Style introduced by
Comment missing for @throws tag in function comment
Loading history...
469
     */
0 ignored issues
show
Coding Style Documentation introduced by
Missing @return tag in function comment
Loading history...
470 36
    public function ping() : bool
471
    {
472 36
        $request = new CurlerRequest();
473 36
        $request->url($this->getUri())->verbose(false)->GET()->connectTimeOut($this->getConnectTimeOut());
474 36
        $this->_curler->execOne($request);
475
476 36
        return $request->response()->body() === 'Ok.' . PHP_EOL;
477
    }
478
479
    /**
480
     * @param string $sql
0 ignored issues
show
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
481
     * @param array $bindings
0 ignored issues
show
introduced by
@param annotation of method \ClickHouseDB\Transport\Http::prepareQuery() does not specify type hint for items of its traversable parameter $bindings.
Loading history...
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
Coding Style introduced by
Expected 2 spaces after parameter type; 1 found
Loading history...
482
     * @return Query
483
     */
484 36
    private function prepareQuery($sql, $bindings)
0 ignored issues
show
introduced by
Method \ClickHouseDB\Transport\Http::prepareQuery() does not have parameter type hint for its parameter $sql but it should be possible to add it based on @param annotation "string".
Loading history...
introduced by
Method \ClickHouseDB\Transport\Http::prepareQuery() does not have parameter type hint for its parameter $bindings but it should be possible to add it based on @param annotation "array".
Loading history...
introduced by
Method \ClickHouseDB\Transport\Http::prepareQuery() does not have return type hint for its return value but it should be possible to add it based on @return annotation "Query".
Loading history...
Coding Style introduced by
Type hint "string" missing for $sql
Loading history...
Coding Style introduced by
Type hint "array" missing for $bindings
Loading history...
485
    {
0 ignored issues
show
Coding Style introduced by
Expected 0 blank lines after opening function brace; 1 found
Loading history...
486
487
        // add Degeneration query
488 36
        foreach ($this->_query_degenerations as $degeneration) {
489 36
            $degeneration->bindParams($bindings);
490
        }
491
492 36
        return new Query($sql, $this->_query_degenerations);
493
    }
494
495
496
    /**
497
     * @param Query|string $sql
0 ignored issues
show
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
Coding Style introduced by
Expected 5 spaces after parameter type; 1 found
Loading history...
498
     * @param array $bindings
0 ignored issues
show
introduced by
@param annotation of method \ClickHouseDB\Transport\Http::prepareSelect() does not specify type hint for items of its traversable parameter $bindings.
Loading history...
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
Coding Style introduced by
Expected 12 spaces after parameter type; 1 found
Loading history...
499
     * @param null|WhereInFile $whereInFile
0 ignored issues
show
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
500
     * @param null|WriteToFile $writeToFile
0 ignored issues
show
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
501
     * @return CurlerRequest
502
     * @throws \Exception
0 ignored issues
show
Coding Style introduced by
Comment missing for @throws tag in function comment
Loading history...
503
     */
504 29
    private function prepareSelect($sql, $bindings, $whereInFile, $writeToFile = null)
0 ignored issues
show
introduced by
Method \ClickHouseDB\Transport\Http::prepareSelect() 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...
Coding Style introduced by
Type hint "array" missing for $bindings
Loading history...
505
    {
506 29
        if ($sql instanceof Query) {
507
            return $this->getRequestWrite($sql);
508
        }
0 ignored issues
show
Coding Style introduced by
No blank line found after control structure
Loading history...
509 29
        $query = $this->prepareQuery($sql, $bindings);
510 29
        $query->setFormat('JSON');
511 29
        return $this->getRequestRead($query, $whereInFile, $writeToFile);
512
    }
513
514
515
516
517
    /**
518
     * @param Query|string $sql
0 ignored issues
show
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
519
     * @param array $bindings
0 ignored issues
show
introduced by
@param annotation of method \ClickHouseDB\Transport\Http::prepareWrite() does not specify type hint for items of its traversable parameter $bindings.
Loading history...
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
Coding Style introduced by
Expected 8 spaces after parameter type; 1 found
Loading history...
520
     * @return CurlerRequest
521
     * @throws \ClickHouseDB\Exception\TransportException
0 ignored issues
show
introduced by
Class \ClickHouseDB\Exception\TransportException 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...
522
     */
523 20
    private function prepareWrite($sql, $bindings = [])
0 ignored issues
show
introduced by
Method \ClickHouseDB\Transport\Http::prepareWrite() 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...
Coding Style introduced by
Type hint "array" missing for $bindings
Loading history...
524
    {
525 20
        if ($sql instanceof Query) {
526
            return $this->getRequestWrite($sql);
527
        }
528
529 20
        $query = $this->prepareQuery($sql, $bindings);
530 19
        return $this->getRequestWrite($query);
531
    }
532
533
    /**
534
     * @return bool
0 ignored issues
show
Coding Style introduced by
Expected "boolean" but found "bool" for function return type
Loading history...
535
     * @throws \ClickHouseDB\Exception\TransportException
0 ignored issues
show
introduced by
Class \ClickHouseDB\Exception\TransportException 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...
536
     */
537 9
    public function executeAsync()
0 ignored issues
show
introduced by
Method \ClickHouseDB\Transport\Http::executeAsync() 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...
538
    {
539 9
        return $this->_curler->execLoopWait();
540
    }
541
542
    /**
543
     * @param Query|string $sql
0 ignored issues
show
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
Coding Style introduced by
Expected 5 spaces after parameter type; 1 found
Loading history...
544
     * @param array $bindings
0 ignored issues
show
introduced by
@param annotation of method \ClickHouseDB\Transport\Http::select() does not specify type hint for items of its traversable parameter $bindings.
Loading history...
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
Coding Style introduced by
Expected 12 spaces after parameter type; 1 found
Loading history...
545
     * @param null|WhereInFile $whereInFile
0 ignored issues
show
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
546
     * @param null|WriteToFile $writeToFile
0 ignored issues
show
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
547
     * @return Statement
548
     * @throws \ClickHouseDB\Exception\TransportException
0 ignored issues
show
introduced by
Class \ClickHouseDB\Exception\TransportException 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...
549
     * @throws \Exception
0 ignored issues
show
Coding Style introduced by
Comment missing for @throws tag in function comment
Loading history...
550
     */
551 24
    public function select($sql, array $bindings = [], $whereInFile = null, $writeToFile = null)
0 ignored issues
show
introduced by
Method \ClickHouseDB\Transport\Http::select() does not have return type hint for its return value but it should be possible to add it based on @return annotation "Statement".
Loading history...
552
    {
553 24
        $request = $this->prepareSelect($sql, $bindings, $whereInFile, $writeToFile);
554 24
        $this->_curler->execOne($request);
555 24
        return new Statement($request);
556
    }
557
558
    /**
559
     * @param Query|string $sql
0 ignored issues
show
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
Coding Style introduced by
Expected 5 spaces after parameter type; 1 found
Loading history...
560
     * @param array $bindings
0 ignored issues
show
introduced by
@param annotation of method \ClickHouseDB\Transport\Http::selectAsync() does not specify type hint for items of its traversable parameter $bindings.
Loading history...
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
Coding Style introduced by
Expected 12 spaces after parameter type; 1 found
Loading history...
561
     * @param null|WhereInFile $whereInFile
0 ignored issues
show
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
562
     * @param null|WriteToFile $writeToFile
0 ignored issues
show
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
563
     * @return Statement
564
     * @throws \ClickHouseDB\Exception\TransportException
0 ignored issues
show
introduced by
Class \ClickHouseDB\Exception\TransportException 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...
565
     * @throws \Exception
0 ignored issues
show
Coding Style introduced by
Comment missing for @throws tag in function comment
Loading history...
566
     */
567 5
    public function selectAsync($sql, array $bindings = [], $whereInFile = null, $writeToFile = null)
0 ignored issues
show
introduced by
Method \ClickHouseDB\Transport\Http::selectAsync() does not have return type hint for its return value but it should be possible to add it based on @return annotation "Statement".
Loading history...
568
    {
569 5
        $request = $this->prepareSelect($sql, $bindings, $whereInFile, $writeToFile);
570 5
        $this->_curler->addQueLoop($request);
571 5
        return new Statement($request);
572
    }
573
574
    /**
575
     * @param callable $callback
0 ignored issues
show
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
576
     */
0 ignored issues
show
Coding Style Documentation introduced by
Missing @return tag in function comment
Loading history...
577 1
    public function setProgressFunction(callable $callback)
0 ignored issues
show
introduced by
Method \ClickHouseDB\Transport\Http::setProgressFunction() does not have void return type hint.
Loading history...
introduced by
Method \ClickHouseDB\Transport\Http::setProgressFunction() does not need documentation comment.
Loading history...
578
    {
579 1
        $this->xClickHouseProgress = $callback;
580 1
    }
581
582
    /**
583
     * @param string $sql
0 ignored issues
show
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
584
     * @param array $bindings
0 ignored issues
show
introduced by
@param annotation of method \ClickHouseDB\Transport\Http::write() does not specify type hint for items of its traversable parameter $bindings.
Loading history...
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
Coding Style introduced by
Expected 2 spaces after parameter type; 1 found
Loading history...
585
     * @param bool $exception
0 ignored issues
show
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
Coding Style introduced by
Expected "boolean" but found "bool" for parameter type
Loading history...
Coding Style introduced by
Expected 3 spaces after parameter type; 1 found
Loading history...
586
     * @return Statement
587
     * @throws \ClickHouseDB\Exception\TransportException
0 ignored issues
show
introduced by
Class \ClickHouseDB\Exception\TransportException 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...
588
     */
589 20
    public function write($sql, array $bindings = [], $exception = true)
0 ignored issues
show
introduced by
Method \ClickHouseDB\Transport\Http::write() does not have parameter type hint for its parameter $sql but it should be possible to add it based on @param annotation "string".
Loading history...
introduced by
Method \ClickHouseDB\Transport\Http::write() does not have parameter type hint for its parameter $exception but it should be possible to add it based on @param annotation "bool".
Loading history...
introduced by
Method \ClickHouseDB\Transport\Http::write() does not have return type hint for its return value but it should be possible to add it based on @return annotation "Statement".
Loading history...
Coding Style introduced by
Type hint "string" missing for $sql
Loading history...
Coding Style introduced by
Type hint "bool" missing for $exception
Loading history...
590
    {
591 20
        $request = $this->prepareWrite($sql, $bindings);
592 19
        $this->_curler->execOne($request);
593 19
        $response = new Statement($request);
594 19
        if ($exception) {
595 19
            if ($response->isError()) {
596 3
                $response->error();
597
            }
598
        }
0 ignored issues
show
Coding Style introduced by
No blank line found after control structure
Loading history...
599 17
        return $response;
600
    }
601
602
    /**
603
     * @param Stream $streamRW
0 ignored issues
show
introduced by
Method \ClickHouseDB\Transport\Http::streaming() has useless @param annotation for parameter $streamRW.
Loading history...
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
Coding Style introduced by
Expected 8 spaces after parameter type; 1 found
Loading history...
604
     * @param CurlerRequest $request
0 ignored issues
show
introduced by
Method \ClickHouseDB\Transport\Http::streaming() has useless @param annotation for parameter $request.
Loading history...
Coding Style Documentation introduced by
Missing parameter comment
Loading history...
605
     * @return Statement
606
     * @throws \ClickHouseDB\Exception\TransportException
0 ignored issues
show
introduced by
Class \ClickHouseDB\Exception\TransportException 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...
607
     */
608 2
    private function streaming(Stream $streamRW,CurlerRequest $request)
0 ignored issues
show
introduced by
Method \ClickHouseDB\Transport\Http::streaming() does not have return type hint for its return value but it should be possible to add it based on @return annotation "Statement".
Loading history...
Coding Style introduced by
Expected 1 space between comma and type hint "CurlerRequest"; 0 found
Loading history...
609
    {
610 2
        $callable=$streamRW->getClosure();
0 ignored issues
show
Coding Style introduced by
Equals sign not aligned with surrounding assignments; expected 1 space 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...
611 2
        $stream=$streamRW->getStream();
0 ignored issues
show
Coding Style introduced by
Equals sign not aligned with surrounding assignments; expected 3 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...
612
0 ignored issues
show
Coding Style introduced by
Functions must not contain multiple empty lines in a row; found 3 empty lines
Loading history...
613
614
615
        try {
0 ignored issues
show
Coding Style introduced by
Blank line found at start of control structure
Loading history...
616
0 ignored issues
show
Coding Style introduced by
Functions must not contain multiple empty lines in a row; found 2 empty lines
Loading history...
617
618 2
            if (!is_callable($callable)) {
0 ignored issues
show
Coding Style introduced by
There must be a single space after a NOT operator; 0 found
Loading history...
introduced by
Function is_callable() should not be referenced via a fallback global name, but via a use statement.
Loading history...
619
                if ($streamRW->isWrite())
620
                {
0 ignored issues
show
Coding Style introduced by
Blank line found at start of control structure
Loading history...
621
622
                    $callable = function ($ch, $fd, $length) use ($stream) {
623
                        return ($line = fread($stream, $length)) ? $line : '';
0 ignored issues
show
introduced by
Function fread() should not be referenced via a fallback global name, but via a use statement.
Loading history...
624
                    };
625
                } else {
626
                    $callable = function ($ch, $fd) use ($stream) {
627
                        return fwrite($stream, $fd);
0 ignored issues
show
introduced by
Function fwrite() should not be referenced via a fallback global name, but via a use statement.
Loading history...
628
                    };
629
                }
630
            }
631
632 2
            if ($streamRW->isGzipHeader()) {
0 ignored issues
show
Coding Style introduced by
Blank line found at start of control structure
Loading history...
633
634 1
                if ($streamRW->isWrite())
635
                {
636 1
                    $request->header('Content-Encoding', 'gzip');
637 1
                    $request->header('Content-Type', 'application/x-www-form-urlencoded');
638
                } else {
639
                    $request->header('Accept-Encoding', 'gzip');
640
                }
0 ignored issues
show
Coding Style introduced by
Blank line found after control structure
Loading history...
641
0 ignored issues
show
Coding Style introduced by
Blank line found at end of control structure
Loading history...
642
            }
643
0 ignored issues
show
Coding Style introduced by
Functions must not contain multiple empty lines in a row; found 3 empty lines
Loading history...
644
645
646 2
            $request->header('Transfer-Encoding', 'chunked');
647
0 ignored issues
show
Coding Style introduced by
Functions must not contain multiple empty lines in a row; found 2 empty lines
Loading history...
648
649 2
            if ($streamRW->isWrite())
650
            {
651 1
                $request->setReadFunction($callable);
652
            } else {
653 1
                $request->setWriteFunction($callable);
654
0 ignored issues
show
Coding Style introduced by
Functions must not contain multiple empty lines in a row; found 3 empty lines
Loading history...
655
656
657
//                $request->setHeaderFunction($callableHead);
658
            }
659
0 ignored issues
show
Coding Style introduced by
Functions must not contain multiple empty lines in a row; found 2 empty lines
Loading history...
660
661 2
            $this->_curler->execOne($request,true);
662 2
            $response = new Statement($request);
663 2
            if ($response->isError()) {
664
                $response->error();
665
            }
0 ignored issues
show
Coding Style introduced by
No blank line found after control structure
Loading history...
666 2
            return $response;
667
        } finally {
668 2
            if ($streamRW->isWrite())
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...
669 2
            fclose($stream);
0 ignored issues
show
introduced by
Function fclose() should not be referenced via a fallback global name, but via a use statement.
Loading history...
670
        }
671
672
673
    }
0 ignored issues
show
Coding Style introduced by
Function closing brace must go on the next line following the body; found 2 blank lines before brace
Loading history...
674
675
676
    /**
677
     * @param Stream $streamRead
678
     * @param string $sql
679
     * @param array $bindings
680
     * @return Statement
681
     * @throws \ClickHouseDB\Exception\TransportException
0 ignored issues
show
introduced by
Class \ClickHouseDB\Exception\TransportException should not be referenced via a fully qualified name, but via a use statement.
Loading history...
682
     */
683 1
    public function streamRead(Stream $streamRead,$sql,$bindings=[])
684
    {
685 1
        $sql=$this->prepareQuery($sql,$bindings);
686 1
        $request=$this->getRequestRead($sql);
687 1
        return $this->streaming($streamRead,$request);
688
689
    }
690
691
    /**
692
     * @param Stream $streamWrite
693
     * @param string $sql
694
     * @param array $bindings
695
     * @return Statement
696
     * @throws \ClickHouseDB\Exception\TransportException
0 ignored issues
show
introduced by
Class \ClickHouseDB\Exception\TransportException should not be referenced via a fully qualified name, but via a use statement.
Loading history...
697
     */
698 1
    public function streamWrite(Stream $streamWrite,$sql,$bindings=[])
699
    {
700 1
        $sql=$this->prepareQuery($sql,$bindings);
701 1
        $request = $this->writeStreamData($sql);
702 1
        return $this->streaming($streamWrite,$request);
703
    }
704
}
705