comparison vendor/symfony/var-dumper/Caster/PdoCaster.php @ 0:4c8ae668cc8c

Initial import (non-working)
author Chris Cannam
date Wed, 29 Nov 2017 16:09:58 +0000
parents
children 129ea1e6d783
comparison
equal deleted inserted replaced
-1:000000000000 0:4c8ae668cc8c
1 <?php
2
3 /*
4 * This file is part of the Symfony package.
5 *
6 * (c) Fabien Potencier <fabien@symfony.com>
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 */
11
12 namespace Symfony\Component\VarDumper\Caster;
13
14 use Symfony\Component\VarDumper\Cloner\Stub;
15
16 /**
17 * Casts PDO related classes to array representation.
18 *
19 * @author Nicolas Grekas <p@tchwork.com>
20 */
21 class PdoCaster
22 {
23 private static $pdoAttributes = array(
24 'CASE' => array(
25 \PDO::CASE_LOWER => 'LOWER',
26 \PDO::CASE_NATURAL => 'NATURAL',
27 \PDO::CASE_UPPER => 'UPPER',
28 ),
29 'ERRMODE' => array(
30 \PDO::ERRMODE_SILENT => 'SILENT',
31 \PDO::ERRMODE_WARNING => 'WARNING',
32 \PDO::ERRMODE_EXCEPTION => 'EXCEPTION',
33 ),
34 'TIMEOUT',
35 'PREFETCH',
36 'AUTOCOMMIT',
37 'PERSISTENT',
38 'DRIVER_NAME',
39 'SERVER_INFO',
40 'ORACLE_NULLS' => array(
41 \PDO::NULL_NATURAL => 'NATURAL',
42 \PDO::NULL_EMPTY_STRING => 'EMPTY_STRING',
43 \PDO::NULL_TO_STRING => 'TO_STRING',
44 ),
45 'CLIENT_VERSION',
46 'SERVER_VERSION',
47 'STATEMENT_CLASS',
48 'EMULATE_PREPARES',
49 'CONNECTION_STATUS',
50 'STRINGIFY_FETCHES',
51 'DEFAULT_FETCH_MODE' => array(
52 \PDO::FETCH_ASSOC => 'ASSOC',
53 \PDO::FETCH_BOTH => 'BOTH',
54 \PDO::FETCH_LAZY => 'LAZY',
55 \PDO::FETCH_NUM => 'NUM',
56 \PDO::FETCH_OBJ => 'OBJ',
57 ),
58 );
59
60 public static function castPdo(\PDO $c, array $a, Stub $stub, $isNested)
61 {
62 $attr = array();
63 $errmode = $c->getAttribute(\PDO::ATTR_ERRMODE);
64 $c->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
65
66 foreach (self::$pdoAttributes as $k => $v) {
67 if (!isset($k[0])) {
68 $k = $v;
69 $v = array();
70 }
71
72 try {
73 $attr[$k] = 'ERRMODE' === $k ? $errmode : $c->getAttribute(constant('PDO::ATTR_'.$k));
74 if ($v && isset($v[$attr[$k]])) {
75 $attr[$k] = new ConstStub($v[$attr[$k]], $attr[$k]);
76 }
77 } catch (\Exception $e) {
78 }
79 }
80 if (isset($attr[$k = 'STATEMENT_CLASS'][1])) {
81 if ($attr[$k][1]) {
82 $attr[$k][1] = new ArgsStub($attr[$k][1], '__construct', $attr[$k][0]);
83 }
84 $attr[$k][0] = new ClassStub($attr[$k][0]);
85 }
86
87 $prefix = Caster::PREFIX_VIRTUAL;
88 $a += array(
89 $prefix.'inTransaction' => method_exists($c, 'inTransaction'),
90 $prefix.'errorInfo' => $c->errorInfo(),
91 $prefix.'attributes' => new EnumStub($attr),
92 );
93
94 if ($a[$prefix.'inTransaction']) {
95 $a[$prefix.'inTransaction'] = $c->inTransaction();
96 } else {
97 unset($a[$prefix.'inTransaction']);
98 }
99
100 if (!isset($a[$prefix.'errorInfo'][1], $a[$prefix.'errorInfo'][2])) {
101 unset($a[$prefix.'errorInfo']);
102 }
103
104 $c->setAttribute(\PDO::ATTR_ERRMODE, $errmode);
105
106 return $a;
107 }
108
109 public static function castPdoStatement(\PDOStatement $c, array $a, Stub $stub, $isNested)
110 {
111 $prefix = Caster::PREFIX_VIRTUAL;
112 $a[$prefix.'errorInfo'] = $c->errorInfo();
113
114 if (!isset($a[$prefix.'errorInfo'][1], $a[$prefix.'errorInfo'][2])) {
115 unset($a[$prefix.'errorInfo']);
116 }
117
118 return $a;
119 }
120 }