4 * This file is part of the Symfony package.
6 * (c) Fabien Potencier <fabien@symfony.com>
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
12 namespace Symfony\Component\VarDumper\Caster;
14 use Symfony\Component\VarDumper\Cloner\Stub;
17 * Casts PDO related classes to array representation.
19 * @author Nicolas Grekas <p@tchwork.com>
23 private static $pdoAttributes = array(
25 \PDO::CASE_LOWER => 'LOWER',
26 \PDO::CASE_NATURAL => 'NATURAL',
27 \PDO::CASE_UPPER => 'UPPER',
30 \PDO::ERRMODE_SILENT => 'SILENT',
31 \PDO::ERRMODE_WARNING => 'WARNING',
32 \PDO::ERRMODE_EXCEPTION => 'EXCEPTION',
40 'ORACLE_NULLS' => array(
41 \PDO::NULL_NATURAL => 'NATURAL',
42 \PDO::NULL_EMPTY_STRING => 'EMPTY_STRING',
43 \PDO::NULL_TO_STRING => 'TO_STRING',
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',
60 public static function castPdo(\PDO $c, array $a, Stub $stub, $isNested)
63 $errmode = $c->getAttribute(\PDO::ATTR_ERRMODE);
64 $c->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
66 foreach (self::$pdoAttributes as $k => $v) {
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]);
77 } catch (\Exception $e) {
81 $prefix = Caster::PREFIX_VIRTUAL;
83 $prefix.'inTransaction' => method_exists($c, 'inTransaction'),
84 $prefix.'errorInfo' => $c->errorInfo(),
85 $prefix.'attributes' => new EnumStub($attr),
88 if ($a[$prefix.'inTransaction']) {
89 $a[$prefix.'inTransaction'] = $c->inTransaction();
91 unset($a[$prefix.'inTransaction']);
94 if (!isset($a[$prefix.'errorInfo'][1], $a[$prefix.'errorInfo'][2])) {
95 unset($a[$prefix.'errorInfo']);
98 $c->setAttribute(\PDO::ATTR_ERRMODE, $errmode);
103 public static function castPdoStatement(\PDOStatement $c, array $a, Stub $stub, $isNested)
105 $prefix = Caster::PREFIX_VIRTUAL;
106 $a[$prefix.'errorInfo'] = $c->errorInfo();
108 if (!isset($a[$prefix.'errorInfo'][1], $a[$prefix.'errorInfo'][2])) {
109 unset($a[$prefix.'errorInfo']);