Mercurial > hg > isophonics-drupal-site
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 } |