Skip to content

Commit 0c52920

Browse files
clxmstaabstaabm
authored andcommitted
refactor: separated tests for quote
1 parent af19afc commit 0c52920

File tree

3 files changed

+84
-71
lines changed

3 files changed

+84
-71
lines changed

tests/DbaInferenceTest.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ public function dataFileAsserts(): iterable
1212
require_once __DIR__.'/data/pdo.php';
1313
yield from $this->gatherAssertTypes(__DIR__.'/data/pdo.php');
1414

15+
// make sure class constants can be resolved
16+
require_once __DIR__.'/data/pdo-quote.php';
17+
yield from $this->gatherAssertTypes(__DIR__.'/data/pdo-quote.php');
18+
1519
// make sure class constants can be resolved
1620
require_once __DIR__.'/data/pdo-prepare.php';
1721
yield from $this->gatherAssertTypes(__DIR__.'/data/pdo-prepare.php');

tests/data/pdo-quote.php

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
<?php
2+
3+
namespace PdoQuoteTest;
4+
5+
use PDO;
6+
use function PHPStan\Testing\assertType;
7+
8+
class Foo
9+
{
10+
/**
11+
* @param numeric $n
12+
* @param non-empty-string $nonE
13+
* @param numeric-string $numericString
14+
*/
15+
public function quote(PDO $pdo, int $i, float $f, $n, string $s, $nonE, string $numericString)
16+
{
17+
assertType('numeric-string', $pdo->quote((string) $i));
18+
assertType('numeric-string', $pdo->quote((string) $f));
19+
assertType('numeric-string', $pdo->quote((string) $n));
20+
assertType('numeric-string', $pdo->quote($numericString));
21+
assertType('non-empty-string', $pdo->quote($nonE));
22+
assertType('string', $pdo->quote($s));
23+
24+
assertType('numeric-string', $pdo->quote((string) $i, PDO::PARAM_STR));
25+
assertType('numeric-string', $pdo->quote((string) $f, PDO::PARAM_STR));
26+
assertType('numeric-string', $pdo->quote((string) $n, PDO::PARAM_STR));
27+
assertType('numeric-string', $pdo->quote($numericString, PDO::PARAM_STR));
28+
assertType('non-empty-string', $pdo->quote($nonE, PDO::PARAM_STR));
29+
assertType('string', $pdo->quote($s, PDO::PARAM_STR));
30+
31+
assertType('numeric-string', $pdo->quote((string) $i, PDO::PARAM_INT));
32+
assertType('numeric-string', $pdo->quote((string) $f, PDO::PARAM_INT));
33+
assertType('numeric-string', $pdo->quote((string) $n, PDO::PARAM_INT));
34+
assertType('numeric-string', $pdo->quote($numericString, PDO::PARAM_INT));
35+
assertType('non-empty-string', $pdo->quote($nonE, PDO::PARAM_INT));
36+
assertType('string', $pdo->quote($s, PDO::PARAM_INT));
37+
38+
assertType('numeric-string', $pdo->quote((string) $i, PDO::PARAM_BOOL));
39+
assertType('numeric-string', $pdo->quote((string) $f, PDO::PARAM_BOOL));
40+
assertType('numeric-string', $pdo->quote((string) $n, PDO::PARAM_BOOL));
41+
assertType('numeric-string', $pdo->quote($numericString, PDO::PARAM_BOOL));
42+
assertType('non-empty-string', $pdo->quote($nonE, PDO::PARAM_BOOL));
43+
assertType('string', $pdo->quote($s, PDO::PARAM_BOOL));
44+
45+
// not 100% sure, whether LOB is really not supported across the board
46+
assertType('numeric-string|false', $pdo->quote((string) $i, PDO::PARAM_LOB));
47+
assertType('numeric-string|false', $pdo->quote((string) $f, PDO::PARAM_LOB));
48+
assertType('numeric-string|false', $pdo->quote((string) $n, PDO::PARAM_LOB));
49+
assertType('numeric-string|false', $pdo->quote($numericString, PDO::PARAM_LOB));
50+
assertType('non-empty-string|false', $pdo->quote($nonE, PDO::PARAM_LOB));
51+
assertType('string|false', $pdo->quote($s, PDO::PARAM_LOB));
52+
}
53+
54+
/**
55+
* @param numeric $n
56+
* @param non-empty-string $nonE
57+
* @param numeric-string $numericString
58+
*/
59+
public function quotedArguments(PDO $pdo, int $i, float $f, $n, string $s, $nonE, string $numericString)
60+
{
61+
$stmt = $pdo->query('SELECT email, adaid FROM ada WHERE adaid='.$pdo->quote((string) $i), PDO::FETCH_ASSOC);
62+
assertType('PDOStatement<array{email: string, adaid: int<0, 4294967295>}>', $stmt);
63+
64+
$stmt = $pdo->query('SELECT email, adaid FROM ada WHERE adaid='.$pdo->quote((string) $f), PDO::FETCH_ASSOC);
65+
assertType('PDOStatement<array{email: string, adaid: int<0, 4294967295>}>', $stmt);
66+
67+
$stmt = $pdo->query('SELECT email, adaid FROM ada WHERE adaid='.$pdo->quote((string) $n), PDO::FETCH_ASSOC);
68+
assertType('PDOStatement<array{email: string, adaid: int<0, 4294967295>}>', $stmt);
69+
70+
$stmt = $pdo->query('SELECT email, adaid FROM ada WHERE adaid='.$pdo->quote($numericString), PDO::FETCH_ASSOC);
71+
assertType('PDOStatement<array{email: string, adaid: int<0, 4294967295>}>', $stmt);
72+
73+
// when quote() cannot return a numeric-string, we can't infer the precise result-type
74+
$stmt = $pdo->query('SELECT email, adaid FROM ada WHERE adaid='.$pdo->quote($s), PDO::FETCH_ASSOC);
75+
assertType('PDOStatement<array>|false', $stmt);
76+
77+
$stmt = $pdo->query('SELECT email, adaid FROM ada WHERE adaid='.$pdo->quote($nonE), PDO::FETCH_ASSOC);
78+
assertType('PDOStatement<array>|false', $stmt);
79+
}
80+
}

tests/data/pdo.php

Lines changed: 0 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -104,75 +104,4 @@ public function updateQuery(PDO $pdo)
104104
$stmt = $pdo->query($query, PDO::FETCH_ASSOC);
105105
assertType('PDOStatement<array>|false', $stmt);
106106
}
107-
108-
/**
109-
* @param numeric $n
110-
* @param non-empty-string $nonE
111-
* @param numeric-string $numericString
112-
*/
113-
public function quote(PDO $pdo, int $i, float $f, $n, string $s, $nonE, string $numericString)
114-
{
115-
assertType('numeric-string', $pdo->quote((string) $i));
116-
assertType('numeric-string', $pdo->quote((string) $f));
117-
assertType('numeric-string', $pdo->quote((string) $n));
118-
assertType('numeric-string', $pdo->quote($numericString));
119-
assertType('non-empty-string', $pdo->quote($nonE));
120-
assertType('string', $pdo->quote($s));
121-
122-
assertType('numeric-string', $pdo->quote((string) $i, PDO::PARAM_STR));
123-
assertType('numeric-string', $pdo->quote((string) $f, PDO::PARAM_STR));
124-
assertType('numeric-string', $pdo->quote((string) $n, PDO::PARAM_STR));
125-
assertType('numeric-string', $pdo->quote($numericString, PDO::PARAM_STR));
126-
assertType('non-empty-string', $pdo->quote($nonE, PDO::PARAM_STR));
127-
assertType('string', $pdo->quote($s, PDO::PARAM_STR));
128-
129-
assertType('numeric-string', $pdo->quote((string) $i, PDO::PARAM_INT));
130-
assertType('numeric-string', $pdo->quote((string) $f, PDO::PARAM_INT));
131-
assertType('numeric-string', $pdo->quote((string) $n, PDO::PARAM_INT));
132-
assertType('numeric-string', $pdo->quote($numericString, PDO::PARAM_INT));
133-
assertType('non-empty-string', $pdo->quote($nonE, PDO::PARAM_INT));
134-
assertType('string', $pdo->quote($s, PDO::PARAM_INT));
135-
136-
assertType('numeric-string', $pdo->quote((string) $i, PDO::PARAM_BOOL));
137-
assertType('numeric-string', $pdo->quote((string) $f, PDO::PARAM_BOOL));
138-
assertType('numeric-string', $pdo->quote((string) $n, PDO::PARAM_BOOL));
139-
assertType('numeric-string', $pdo->quote($numericString, PDO::PARAM_BOOL));
140-
assertType('non-empty-string', $pdo->quote($nonE, PDO::PARAM_BOOL));
141-
assertType('string', $pdo->quote($s, PDO::PARAM_BOOL));
142-
143-
// not 100% sure, whether LOB is really not supported across the board
144-
assertType('numeric-string|false', $pdo->quote((string) $i, PDO::PARAM_LOB));
145-
assertType('numeric-string|false', $pdo->quote((string) $f, PDO::PARAM_LOB));
146-
assertType('numeric-string|false', $pdo->quote((string) $n, PDO::PARAM_LOB));
147-
assertType('numeric-string|false', $pdo->quote($numericString, PDO::PARAM_LOB));
148-
assertType('non-empty-string|false', $pdo->quote($nonE, PDO::PARAM_LOB));
149-
assertType('string|false', $pdo->quote($s, PDO::PARAM_LOB));
150-
}
151-
152-
/**
153-
* @param numeric $n
154-
* @param non-empty-string $nonE
155-
* @param numeric-string $numericString
156-
*/
157-
public function quotedArguments(PDO $pdo, int $i, float $f, $n, string $s, $nonE, string $numericString)
158-
{
159-
$stmt = $pdo->query('SELECT email, adaid FROM ada WHERE adaid='.$pdo->quote((string) $i), PDO::FETCH_ASSOC);
160-
assertType('PDOStatement<array{email: string, adaid: int<0, 4294967295>}>', $stmt);
161-
162-
$stmt = $pdo->query('SELECT email, adaid FROM ada WHERE adaid='.$pdo->quote((string) $f), PDO::FETCH_ASSOC);
163-
assertType('PDOStatement<array{email: string, adaid: int<0, 4294967295>}>', $stmt);
164-
165-
$stmt = $pdo->query('SELECT email, adaid FROM ada WHERE adaid='.$pdo->quote((string) $n), PDO::FETCH_ASSOC);
166-
assertType('PDOStatement<array{email: string, adaid: int<0, 4294967295>}>', $stmt);
167-
168-
$stmt = $pdo->query('SELECT email, adaid FROM ada WHERE adaid='.$pdo->quote($numericString), PDO::FETCH_ASSOC);
169-
assertType('PDOStatement<array{email: string, adaid: int<0, 4294967295>}>', $stmt);
170-
171-
// when quote() cannot return a numeric-string, we can't infer the precise result-type
172-
$stmt = $pdo->query('SELECT email, adaid FROM ada WHERE adaid='.$pdo->quote($s), PDO::FETCH_ASSOC);
173-
assertType('PDOStatement<array>|false', $stmt);
174-
175-
$stmt = $pdo->query('SELECT email, adaid FROM ada WHERE adaid='.$pdo->quote($nonE), PDO::FETCH_ASSOC);
176-
assertType('PDOStatement<array>|false', $stmt);
177-
}
178107
}

0 commit comments

Comments
 (0)