8000 [VarDumper] casters for PDO related objects · symfony/symfony@0a92c08 · GitHub
[go: up one dir, main page]

Skip to content

Commit 0a92c08

Browse files
[VarDumper] casters for PDO related objects
1 parent da3e50a commit 0a92c08

File tree

2 files changed

+115
-0
lines changed

2 files changed

+115
-0
lines changed
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
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+
/**
15+
* Casts PDO related classes to array representation.
16+
*
17+
* @author Nicolas Grekas <p@tchwork.com>
18+
*/
19+
class PdoCaster
20+
{
21+
private static $pdoAttributes = array(
22+
'CASE' => array(
23+
\PDO::CASE_LOWER => 'LOWER',
24+
\PDO::CASE_NATURAL => 'NATURAL',
25+
\PDO::CASE_UPPER => 'UPPER',
26+
),
27+
'ERRMODE' => array(
28+
\PDO::ERRMODE_SILENT => 'SILENT',
29+
\PDO::ERRMODE_WARNING => 'WARNING',
30+
\PDO::ERRMODE_EXCEPTION => 'EXCEPTION',
31+
),
32+
'TIMEOUT',
33+
'PREFETCH',
34+
'AUTOCOMMIT',
35+
'PERSISTENT',
36+
'DRIVER_NAME',
37+
'SERVER_INFO',
38+
'ORACLE_NULLS' => array(
39+
\PDO::NULL_NATURAL => 'NATURAL',
40+
\PDO::NULL_EMPTY_STRING => 'EMPTY_STRING',
41+
\PDO::NULL_TO_STRING => 'TO_STRING',
42+
),
43+
'CLIENT_VERSION',
44+
'SERVER_VERSION',
45+
'STATEMENT_CLASS',
46+
'EMULATE_PREPARES',
47+
'CONNECTION_STATUS',
48+
'STRINGIFY_FETCHES',
49+
'DEFAULT_FETCH_MODE' => array(
50+
\PDO::FETCH_ASSOC => 'ASSOC',
51+
\PDO::FETCH_BOTH => 'BOTH',
52+
\PDO::FETCH_LAZY => 'LAZY',
53+
\PDO::FETCH_NUM => 'NUM',
54+
\PDO::FETCH_OBJ => 'OBJ',
55+
),
56+
);
57+
58+
public static function castPdo(\PDO $c, array $a)
59+
{
60+
$a = array();
61+
$errmode = $c->getAttribute(\PDO::ATTR_ERRMODE);
62+
$c->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
63+
64+
foreach (self::$pdoAttributes as $attr => $values) {
65+
if (!isset($attr[0])) {
66+
$attr = $values;
< 8000 code>67+
$values = array();
68+
}
69+
70+
try {
71+
$a[$attr] = 'ERRMODE' === $attr ? $errmode : $c->getAttribute(constant("PDO::ATTR_{$attr}"));
72+
if (isset($values[$a[$attr]])) {
73+
$a[$attr] = $values[$a[$attr]];
74+
}
75+
} catch (\Exception $m) {
76+
}
77+
}
78+
79+
$m = "\0~\0";
80+
$a = (array) $c + array(
81+
$m.'inTransaction' => method_exists($c, 'inTransaction'),
82+
$m.'errorInfo' => $c->errorInfo(),
83+
$m.'attributes' => $a,
84+
);
85+
86+
if ($a[$m.'inTransaction']) {
87+
$a[$m.'inTransaction'] = $c->inTransaction();
88+
} else {
89+
unset($a[$m.'inTransaction']);
90+
}
91+
92+
if (!isset($a[$m.'errorInfo'][1], $a[$m.'errorInfo'][2])) {
93+
unset($a[$m.'errorInfo']);
94+
}
95+
96+
$c->setAttribute(\PDO::ATTR_ERRMODE, $errmode);
97+
98+
return $a;
99+
}
100+
101+
public static function castPdoStatement(\PDOStatement $c, array $a)
102+
{
103+
$m = "\0~\0";
104+
$a[$m.'errorInfo'] = $c->errorInfo();
105+
106+
if (!isset($a[$m.'errorInfo'][1], $a[$m.'errorInfo'][2])) {
107+
unset($a[$m.'errorInfo']);
108+
}
109+
110+
return $a;
111+
}
112+
}

src/Symfony/Component/VarDumper/Cloner/AbstractCloner.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ abstract class AbstractCloner implements ClonerInterface
2929
'o:Symfony\Component\VarDumper\Exception\ThrowingCasterException'
3030
=> 'Symfony\Component\VarDumper\Caster\ExceptionCaster::castThrowingCasterException',
3131

32+
'o:PDO' => 'Symfony\Component\VarDumper\Caster\PdoCaster::castPdo',
33+
'o:PDOStatement' => 'Symfony\Component\VarDumper\Caster\PdoCaster::castPdoStatement',
34+
3235
'o:ArrayObject' => 'Symfony\Component\VarDumper\Caster\SplCaster::castArrayObject',
3336
'o:SplDoublyLinkedList' => 'Symfony\Component\VarDumper\Caster\SplCaster::castDoublyLinkedList',
3437
'o:SplFixedArray' => 'Symfony\Component\VarDumper\Caster\SplCaster::castFixedArray',

0 commit comments

Comments
 (0)
0