Yaffs site version 1.1
[yaffs-website] / vendor / symfony / var-dumper / Caster / PdoCaster.php
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
81         $prefix = Caster::PREFIX_VIRTUAL;
82         $a += array(
83             $prefix.'inTransaction' => method_exists($c, 'inTransaction'),
84             $prefix.'errorInfo' => $c->errorInfo(),
85             $prefix.'attributes' => new EnumStub($attr),
86         );
87
88         if ($a[$prefix.'inTransaction']) {
89             $a[$prefix.'inTransaction'] = $c->inTransaction();
90         } else {
91             unset($a[$prefix.'inTransaction']);
92         }
93
94         if (!isset($a[$prefix.'errorInfo'][1], $a[$prefix.'errorInfo'][2])) {
95             unset($a[$prefix.'errorInfo']);
96         }
97
98         $c->setAttribute(\PDO::ATTR_ERRMODE, $errmode);
99
100         return $a;
101     }
102
103     public static function castPdoStatement(\PDOStatement $c, array $a, Stub $stub, $isNested)
104     {
105         $prefix = Caster::PREFIX_VIRTUAL;
106         $a[$prefix.'errorInfo'] = $c->errorInfo();
107
108         if (!isset($a[$prefix.'errorInfo'][1], $a[$prefix.'errorInfo'][2])) {
109             unset($a[$prefix.'errorInfo']);
110         }
111
112         return $a;
113     }
114 }