1 | <?php |
||
2 | |||
3 | declare(strict_types=1); |
||
4 | |||
5 | namespace Yiisoft\Db\Pgsql; |
||
6 | |||
7 | use Yiisoft\Db\Syntax\AbstractSqlParser; |
||
8 | |||
9 | final class SqlParser extends AbstractSqlParser |
||
10 | { |
||
11 | public function getNextPlaceholder(int|null &$position = null): string|null |
||
12 | { |
||
13 | $result = null; |
||
14 | $length = $this->length - 1; |
||
15 | |||
16 | while ($this->position < $length) { |
||
17 | $pos = $this->position++; |
||
18 | |||
19 | match ($this->sql[$pos]) { |
||
20 | ':' => ($word = $this->parseWord()) === '' |
||
21 | ? $this->skipChars(':') |
||
22 | : $result = ':' . $word, |
||
23 | '"', "'" => $this->skipQuotedWithoutEscape($this->sql[$pos]), |
||
24 | 'e', 'E' => $this->sql[$this->position] === "'" |
||
25 | ? ++$this->position && $this->skipQuotedWithEscape("'") |
||
26 | : $this->skipIdentifier(), |
||
0 ignored issues
–
show
|
|||
27 | '$' => $this->skipQuotedWithDollar(), |
||
0 ignored issues
–
show
Are you sure the usage of
$this->skipQuotedWithDollar() targeting Yiisoft\Db\Pgsql\SqlParser::skipQuotedWithDollar() seems to always return null.
This check looks for function or method calls that always return null and whose return value is used. class A
{
function getObject()
{
return null;
}
}
$a = new A();
if ($a->getObject()) {
The method The reason is most likely that a function or method is imcomplete or has been reduced for debug purposes. ![]() |
|||
28 | '-' => $this->sql[$this->position] === '-' |
||
29 | ? ++$this->position && $this->skipToAfterChar("\n") |
||
30 | : null, |
||
31 | '/' => $this->sql[$this->position] === '*' |
||
32 | ? ++$this->position && $this->skipToAfterString('*/') |
||
33 | : null, |
||
34 | // Identifiers can contain dollar sign which can be used for quoting. Skip them. |
||
35 | '_','a', 'b', 'c', 'd', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', |
||
36 | 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', |
||
37 | 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' => $this->skipIdentifier(), |
||
0 ignored issues
–
show
Are you sure the usage of
$this->skipIdentifier() targeting Yiisoft\Db\Pgsql\SqlParser::skipIdentifier() seems to always return null.
This check looks for function or method calls that always return null and whose return value is used. class A
{
function getObject()
{
return null;
}
}
$a = new A();
if ($a->getObject()) {
The method The reason is most likely that a function or method is imcomplete or has been reduced for debug purposes. ![]() |
|||
38 | default => null, |
||
39 | }; |
||
40 | |||
41 | if ($result !== null) { |
||
42 | $position = $pos; |
||
43 | |||
44 | return $result; |
||
45 | } |
||
46 | } |
||
47 | |||
48 | return null; |
||
49 | } |
||
50 | |||
51 | /** |
||
52 | * Skips dollar-quoted string. |
||
53 | */ |
||
54 | private function skipQuotedWithDollar(): void |
||
55 | { |
||
56 | $pos = $this->position; |
||
57 | $identifier = $this->parseIdentifier(); |
||
58 | |||
59 | if ($this->sql[$this->position] !== '$') { |
||
60 | $this->position = $pos; |
||
61 | return; |
||
62 | } |
||
63 | |||
64 | ++$this->position; |
||
65 | |||
66 | $this->skipToAfterString('$' . $identifier . '$'); |
||
67 | } |
||
68 | |||
69 | /** |
||
70 | * Skips an identifier. Equals to `[$\w]+` in regular expressions. |
||
71 | */ |
||
72 | private function skipIdentifier(): void |
||
73 | { |
||
74 | $continue = true; |
||
75 | |||
76 | while ($continue && $this->position < $this->length) { |
||
77 | match ($this->sql[$this->position]) { |
||
78 | '$', '_', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', |
||
79 | 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', |
||
80 | 'v', 'w', 'x', 'y', 'z', |
||
81 | 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', |
||
82 | 'V', 'W', 'X', 'Y', 'Z' => ++$this->position, |
||
83 | default => $continue = false, |
||
84 | }; |
||
85 | } |
||
86 | } |
||
87 | } |
||
88 |
This check looks for function or method calls that always return null and whose return value is used.
The method
getObject()
can return nothing but null, so it makes no sense to use the return value.The reason is most likely that a function or method is imcomplete or has been reduced for debug purposes.