Skip to content

Commit 2100104

Browse files
committed
New tests + dummy SQL query which hopefully works on all DBs
1 parent d65bcca commit 2100104

6 files changed

+82
-8
lines changed

ext/pdo/tests/pdo_ATTR_STATEMENT_CLASS_ctor_arg_gc.phpt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ class Bar extends PDO {
3232

3333
$db = PDOTest::factory(Bar::class);
3434

35-
$stmt = $db->query('SELECT 1');
35+
$stmt = $db->query("SELECT 'Anto' as name, 12 as age UNION SELECT 'Linda', 9 UNION SELECT 'Mike', 10");
3636
var_dump($stmt);
3737

3838
?>
@@ -43,5 +43,5 @@ object(Bar)#1 (1) {
4343
}
4444
object(Foo)#2 (1) {
4545
["queryString"]=>
46-
string(8) "SELECT 1"
46+
string(80) "SELECT 'Anto' as name, 12 as age UNION SELECT 'Linda', 9 UNION SELECT 'Mike', 10"
4747
}

ext/pdo/tests/pdo_ATTR_STATEMENT_CLASS_ctor_arg_no-gc.phpt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,13 @@ class Foo extends PDOStatement {
2323
$db = PDOTest::factory();
2424

2525
$db->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('Foo', ['param1']));
26-
$stmt = $db->query('SELECT 1');
26+
$stmt = $db->query("SELECT 'Anto' as name, 12 as age UNION SELECT 'Linda', 9 UNION SELECT 'Mike', 10");
2727
var_dump($stmt);
2828

2929
?>
3030
--EXPECT--
3131
string(6) "param1"
3232
object(Foo)#2 (1) {
3333
["queryString"]=>
34-
string(8) "SELECT 1"
34+
string(80) "SELECT 'Anto' as name, 12 as age UNION SELECT 'Linda', 9 UNION SELECT 'Mike', 10"
3535
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
--TEST--
2+
PDO: Set PDOStatement class with ctor_args that are freed without GC intervention as a variable that is modified
3+
--EXTENSIONS--
4+
pdo
5+
--SKIPIF--
6+
<?php
7+
$dir = getenv('REDIR_TEST_DIR');
8+
if (false == $dir) die('skip no driver');
9+
require_once $dir . 'pdo_test.inc';
10+
PDOTest::skip();
11+
?>
12+
--FILE--
13+
<?php
14+
if (getenv('REDIR_TEST_DIR') === false) putenv('REDIR_TEST_DIR='.__DIR__ . '/../../pdo/tests/');
15+
require_once getenv('REDIR_TEST_DIR') . 'pdo_test.inc';
16+
17+
class Foo extends PDOStatement {
18+
private function __construct($v) {
19+
var_dump($v);
20+
}
21+
}
22+
23+
$db = PDOTest::factory();
24+
25+
$a = ['Foo', ['param1']];
26+
$db->setAttribute(PDO::ATTR_STATEMENT_CLASS, $a);
27+
$a[0] = 'Bar';
28+
$stmt = $db->query("SELECT 'Anto' as name, 12 as age UNION SELECT 'Linda', 9 UNION SELECT 'Mike', 10");
29+
var_dump($stmt);
30+
31+
?>
32+
--EXPECT--
33+
string(6) "param1"
34+
object(Foo)#2 (1) {
35+
["queryString"]=>
36+
string(80) "SELECT 'Anto' as name, 12 as age UNION SELECT 'Linda', 9 UNION SELECT 'Mike', 10"
37+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
--TEST--
2+
PDO: Set PDOStatement class with ctor_args that are freed without GC intervention as a variable that is unset
3+
--EXTENSIONS--
4+
pdo
5+
--SKIPIF--
6+
<?php
7+
$dir = getenv('REDIR_TEST_DIR');
8+
if (false == $dir) die('skip no driver');
9+
require_once $dir . 'pdo_test.inc';
10+
PDOTest::skip();
11+
?>
12+
--FILE--
13+
<?php
14+
if (getenv('REDIR_TEST_DIR') === false) putenv('REDIR_TEST_DIR='.__DIR__ . '/../../pdo/tests/');
15+
require_once getenv('REDIR_TEST_DIR') . 'pdo_test.inc';
16+
17+
class Foo extends PDOStatement {
18+
private function __construct($v) {
19+
var_dump($v);
20+
}
21+
}
22+
23+
$db = PDOTest::factory();
24+
25+
$a = ['Foo', ['param1']];
26+
$db->setAttribute(PDO::ATTR_STATEMENT_CLASS, $a);
27+
unset($a);
28+
$stmt = $db->query("SELECT 'Anto' as name, 12 as age UNION SELECT 'Linda', 9 UNION SELECT 'Mike', 10");
29+
var_dump($stmt);
30+
31+
?>
32+
--EXPECT--
33+
string(6) "param1"
34+
object(Foo)#2 (1) {
35+
["queryString"]=>
36+
string(80) "SELECT 'Anto' as name, 12 as age UNION SELECT 'Linda', 9 UNION SELECT 'Mike', 10"
37+
}

ext/pdo/tests/pdo_prepare_ATTR_STATEMENT_CLASS_ctor_arg_gc.phpt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ class Bar extends PDO {
3232

3333
$db = PDOTest::factory(Bar::class);
3434

35-
$stmt = $db->prepare('SELECT 1');
35+
$stmt = $db->prepare("SELECT 'Anto' as name, 12 as age UNION SELECT 'Linda', 9 UNION SELECT 'Mike', 10");
3636
var_dump($stmt);
3737
$r = $stmt->execute();
3838
var_dump($r);
@@ -45,6 +45,6 @@ object(Bar)#1 (1) {
4545
}
4646
object(Foo)#2 (1) {
4747
["queryString"]=>
48-
string(8) "SELECT 1"
48+
string(80) "SELECT 'Anto' as name, 12 as age UNION SELECT 'Linda', 9 UNION SELECT 'Mike', 10"
4949
}
5050
bool(true)

ext/pdo/tests/pdo_prepare_ATTR_STATEMENT_CLASS_ctor_arg_no-gc.phpt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ $db = PDOTest::factory();
2424
$db->setAttribute(PDO::ATTR_STATEMENT_CLASS, ['Foo', ['param1']]);
2525

2626
//$stmt = $db->prepare('SELECT 1', [PDO::ATTR_STATEMENT_CLASS => ['Foo', ['param1']] ]);
27-
$stmt = $db->prepare('SELECT 1');
27+
$stmt = $db->prepare("SELECT 'Anto' as name, 12 as age UNION SELECT 'Linda', 9 UNION SELECT 'Mike', 10");
2828
var_dump($stmt);
2929
$r = $stmt->execute();
3030
var_dump($r);
@@ -34,6 +34,6 @@ var_dump($r);
3434
string(6) "param1"
3535
object(Foo)#2 (1) {
3636
["queryString"]=>
37-
string(8) "SELECT 1"
37+
string(80) "SELECT 'Anto' as name, 12 as age UNION SELECT 'Linda', 9 UNION SELECT 'Mike', 10"
3838
}
3939
bool(true)

0 commit comments

Comments
 (0)