1--TEST--
2PDO Common: PDO::FETCH_CLASSTYPE and GROUP/UNIQUE
3--SKIPIF--
4<?php # vim:ft=php
5if (!extension_loaded('pdo')) die('skip');
6$dir = getenv('REDIR_TEST_DIR');
7if (false == $dir) die('skip no driver');
8require_once $dir . 'pdo_test.inc';
9PDOTest::skip();
10?>
11--FILE--
12<?php
13if (getenv('REDIR_TEST_DIR') === false) putenv('REDIR_TEST_DIR='.dirname(__FILE__) . '/../../pdo/tests/');
14require_once getenv('REDIR_TEST_DIR') . 'pdo_test.inc';
15$db = PDOTest::factory();
16
17$db->exec('CREATE TABLE classtypes(id int NOT NULL PRIMARY KEY, name VARCHAR(10) NOT NULL UNIQUE)');
18$db->exec('INSERT INTO classtypes VALUES(0, \'stdClass\')');
19$db->exec('INSERT INTO classtypes VALUES(1, \'Test1\')');
20$db->exec('INSERT INTO classtypes VALUES(2, \'Test2\')');
21$db->exec('CREATE TABLE test(id int NOT NULL PRIMARY KEY, classtype int, val VARCHAR(10), grp VARCHAR(10))');
22$db->exec('INSERT INTO test VALUES(1, 0, \'A\', \'Group1\')');
23$db->exec('INSERT INTO test VALUES(2, 1, \'B\', \'Group1\')');
24$db->exec('INSERT INTO test VALUES(3, 2, \'C\', \'Group2\')');
25$db->exec('INSERT INTO test VALUES(4, 3, \'D\', \'Group2\')');
26
27$stmt = $db->prepare('SELECT classtypes.name, test.grp AS grp, test.id AS id, test.val AS val FROM test LEFT JOIN classtypes ON test.classtype=classtypes.id');
28
29class Test1
30{
31	public function __construct()
32	{
33		echo __METHOD__ . "()\n";
34	}
35}
36
37class Test2
38{
39	public function __construct()
40	{
41		echo __METHOD__ . "()\n";
42	}
43}
44
45class Test3
46{
47	public function __construct()
48	{
49		echo __METHOD__ . "()\n";
50	}
51}
52
53
54$stmt->execute();
55var_dump($stmt->fetchAll(PDO::FETCH_CLASS|PDO::FETCH_CLASSTYPE|PDO::FETCH_GROUP, 'Test3'));
56
57$stmt->execute();
58var_dump($stmt->fetchAll(PDO::FETCH_CLASS|PDO::FETCH_CLASSTYPE|PDO::FETCH_UNIQUE, 'Test3'));
59
60?>
61--EXPECTF--
62Test1::__construct()
63Test2::__construct()
64Test3::__construct()
65array(2) {
66  ["Group1"]=>
67  array(2) {
68    [0]=>
69    object(stdClass)#%d (2) {
70      ["id"]=>
71      string(1) "1"
72      ["val"]=>
73      string(1) "A"
74    }
75    [1]=>
76    object(Test1)#%d (2) {
77      ["id"]=>
78      string(1) "2"
79      ["val"]=>
80      string(1) "B"
81    }
82  }
83  ["Group2"]=>
84  array(2) {
85    [0]=>
86    object(Test2)#%d (2) {
87      ["id"]=>
88      string(1) "3"
89      ["val"]=>
90      string(1) "C"
91    }
92    [1]=>
93    object(Test3)#%d (2) {
94      ["id"]=>
95      string(1) "4"
96      ["val"]=>
97      string(1) "D"
98    }
99  }
100}
101Test1::__construct()
102Test2::__construct()
103Test3::__construct()
104array(2) {
105  ["Group1"]=>
106  object(Test1)#%d (2) {
107    ["id"]=>
108    string(1) "2"
109    ["val"]=>
110    string(1) "B"
111  }
112  ["Group2"]=>
113  object(Test3)#%d (2) {
114    ["id"]=>
115    string(1) "4"
116    ["val"]=>
117    string(1) "D"
118  }
119}
120