Annotation of embedaddon/php/ext/pdo/tests/pdo_011.phpt, revision 1.1.1.1
1.1 misho 1: --TEST--
2: PDO Common: PDO::FETCH_FUNC and statement overloading
3: --SKIPIF--
4: <?php # vim:ft=php
5: if (!extension_loaded('pdo')) die('skip');
6: $dir = getenv('REDIR_TEST_DIR');
7: if (false == $dir) die('skip no driver');
8: require_once $dir . 'pdo_test.inc';
9: PDOTest::skip();
10: ?>
11: --FILE--
12: <?php
13: if (getenv('REDIR_TEST_DIR') === false) putenv('REDIR_TEST_DIR='.dirname(__FILE__) . '/../../pdo/tests/');
14: require_once getenv('REDIR_TEST_DIR') . 'pdo_test.inc';
15: $db = PDOTest::factory();
16:
17: $db->exec('CREATE TABLE test(id int NOT NULL PRIMARY KEY, val VARCHAR(10), grp VARCHAR(10))');
18: $db->exec('INSERT INTO test VALUES(1, \'A\', \'Group1\')');
19: $db->exec('INSERT INTO test VALUES(2, \'B\', \'Group1\')');
20: $db->exec('INSERT INTO test VALUES(3, \'C\', \'Group2\')');
21: $db->exec('INSERT INTO test VALUES(4, \'D\', \'Group2\')');
22:
23: class DerivedStatement extends PDOStatement
24: {
25: private function __construct($name, $db)
26: {
27: $this->name = $name;
28: echo __METHOD__ . "($name)\n";
29: }
30:
31: function reTrieve($id, $val) {
32: echo __METHOD__ . "($id,$val)\n";
33: return array($id=>$val);
34: }
35: }
36:
37: $select1 = $db->prepare('SELECT grp, id FROM test');
38: $select2 = $db->prepare('SELECT id, val FROM test');
39: $derived = $db->prepare('SELECT id, val FROM test', array(PDO::ATTR_STATEMENT_CLASS=>array('DerivedStatement', array('Overloaded', $db))));
40:
41: class Test1
42: {
43: public function __construct($id, $val)
44: {
45: echo __METHOD__ . "($id,$val)\n";
46: $this->id = $id;
47: $this->val = $val;
48: }
49:
50: static public function factory($id, $val)
51: {
52: echo __METHOD__ . "($id,$val)\n";
53: return new self($id, $val);
54: }
55: }
56:
57: function test($id,$val='N/A')
58: {
59: echo __METHOD__ . "($id,$val)\n";
60: return array($id=>$val);
61: }
62:
63: $f = new Test1(0,0);
64:
65: $select1->execute();
66: var_dump($select1->fetchAll(PDO::FETCH_FUNC|PDO::FETCH_GROUP, 'test'));
67:
68: $select2->execute();
69: var_dump($select2->fetchAll(PDO::FETCH_FUNC, 'test'));
70:
71: $select2->execute();
72: var_dump($select2->fetchAll(PDO::FETCH_FUNC, array('Test1','factory')));
73:
74: $select2->execute();
75: var_dump($select2->fetchAll(PDO::FETCH_FUNC, array($f, 'factory')));
76:
77: var_dump(get_class($derived));
78: $derived->execute();
79: var_dump($derived->fetchAll(PDO::FETCH_FUNC, array($derived, 'retrieve')));
80: $derived->execute();
81: var_dump($derived->fetchAll(PDO::FETCH_FUNC, array($derived, 'reTrieve')));
82: $derived->execute();
83: var_dump($derived->fetchAll(PDO::FETCH_FUNC, array($derived, 'RETRIEVE')));
84:
85: ?>
86: --EXPECTF--
87: DerivedStatement::__construct(Overloaded)
88: Test1::__construct(0,0)
89: test(1,N/A)
90: test(2,N/A)
91: test(3,N/A)
92: test(4,N/A)
93: array(2) {
94: ["Group1"]=>
95: array(2) {
96: [0]=>
97: array(1) {
98: [1]=>
99: string(3) "N/A"
100: }
101: [1]=>
102: array(1) {
103: [2]=>
104: string(3) "N/A"
105: }
106: }
107: ["Group2"]=>
108: array(2) {
109: [0]=>
110: array(1) {
111: [3]=>
112: string(3) "N/A"
113: }
114: [1]=>
115: array(1) {
116: [4]=>
117: string(3) "N/A"
118: }
119: }
120: }
121: test(1,A)
122: test(2,B)
123: test(3,C)
124: test(4,D)
125: array(4) {
126: [0]=>
127: array(1) {
128: [1]=>
129: string(1) "A"
130: }
131: [1]=>
132: array(1) {
133: [2]=>
134: string(1) "B"
135: }
136: [2]=>
137: array(1) {
138: [3]=>
139: string(1) "C"
140: }
141: [3]=>
142: array(1) {
143: [4]=>
144: string(1) "D"
145: }
146: }
147: Test1::factory(1,A)
148: Test1::__construct(1,A)
149: Test1::factory(2,B)
150: Test1::__construct(2,B)
151: Test1::factory(3,C)
152: Test1::__construct(3,C)
153: Test1::factory(4,D)
154: Test1::__construct(4,D)
155: array(4) {
156: [0]=>
157: object(Test1)#%d (2) {
158: ["id"]=>
159: string(1) "1"
160: ["val"]=>
161: string(1) "A"
162: }
163: [1]=>
164: object(Test1)#%d (2) {
165: ["id"]=>
166: string(1) "2"
167: ["val"]=>
168: string(1) "B"
169: }
170: [2]=>
171: object(Test1)#%d (2) {
172: ["id"]=>
173: string(1) "3"
174: ["val"]=>
175: string(1) "C"
176: }
177: [3]=>
178: object(Test1)#%d (2) {
179: ["id"]=>
180: string(1) "4"
181: ["val"]=>
182: string(1) "D"
183: }
184: }
185: Test1::factory(1,A)
186: Test1::__construct(1,A)
187: Test1::factory(2,B)
188: Test1::__construct(2,B)
189: Test1::factory(3,C)
190: Test1::__construct(3,C)
191: Test1::factory(4,D)
192: Test1::__construct(4,D)
193: array(4) {
194: [0]=>
195: object(Test1)#%d (2) {
196: ["id"]=>
197: string(1) "1"
198: ["val"]=>
199: string(1) "A"
200: }
201: [1]=>
202: object(Test1)#%d (2) {
203: ["id"]=>
204: string(1) "2"
205: ["val"]=>
206: string(1) "B"
207: }
208: [2]=>
209: object(Test1)#%d (2) {
210: ["id"]=>
211: string(1) "3"
212: ["val"]=>
213: string(1) "C"
214: }
215: [3]=>
216: object(Test1)#%d (2) {
217: ["id"]=>
218: string(1) "4"
219: ["val"]=>
220: string(1) "D"
221: }
222: }
223: string(16) "DerivedStatement"
224: DerivedStatement::reTrieve(1,A)
225: DerivedStatement::reTrieve(2,B)
226: DerivedStatement::reTrieve(3,C)
227: DerivedStatement::reTrieve(4,D)
228: array(4) {
229: [0]=>
230: array(1) {
231: [1]=>
232: string(1) "A"
233: }
234: [1]=>
235: array(1) {
236: [2]=>
237: string(1) "B"
238: }
239: [2]=>
240: array(1) {
241: [3]=>
242: string(1) "C"
243: }
244: [3]=>
245: array(1) {
246: [4]=>
247: string(1) "D"
248: }
249: }
250: DerivedStatement::reTrieve(1,A)
251: DerivedStatement::reTrieve(2,B)
252: DerivedStatement::reTrieve(3,C)
253: DerivedStatement::reTrieve(4,D)
254: array(4) {
255: [0]=>
256: array(1) {
257: [1]=>
258: string(1) "A"
259: }
260: [1]=>
261: array(1) {
262: [2]=>
263: string(1) "B"
264: }
265: [2]=>
266: array(1) {
267: [3]=>
268: string(1) "C"
269: }
270: [3]=>
271: array(1) {
272: [4]=>
273: string(1) "D"
274: }
275: }
276: DerivedStatement::reTrieve(1,A)
277: DerivedStatement::reTrieve(2,B)
278: DerivedStatement::reTrieve(3,C)
279: DerivedStatement::reTrieve(4,D)
280: array(4) {
281: [0]=>
282: array(1) {
283: [1]=>
284: string(1) "A"
285: }
286: [1]=>
287: array(1) {
288: [2]=>
289: string(1) "B"
290: }
291: [2]=>
292: array(1) {
293: [3]=>
294: string(1) "C"
295: }
296: [3]=>
297: array(1) {
298: [4]=>
299: string(1) "D"
300: }
301: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>