Subversion-Projekte lars-tiefland.laravel_shop

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
148 lars 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
 * @final
22
 */
23
class PdoCaster
24
{
25
    private const PDO_ATTRIBUTES = [
26
        'CASE' => [
27
            \PDO::CASE_LOWER => 'LOWER',
28
            \PDO::CASE_NATURAL => 'NATURAL',
29
            \PDO::CASE_UPPER => 'UPPER',
30
        ],
31
        'ERRMODE' => [
32
            \PDO::ERRMODE_SILENT => 'SILENT',
33
            \PDO::ERRMODE_WARNING => 'WARNING',
34
            \PDO::ERRMODE_EXCEPTION => 'EXCEPTION',
35
        ],
36
        'TIMEOUT',
37
        'PREFETCH',
38
        'AUTOCOMMIT',
39
        'PERSISTENT',
40
        'DRIVER_NAME',
41
        'SERVER_INFO',
42
        'ORACLE_NULLS' => [
43
            \PDO::NULL_NATURAL => 'NATURAL',
44
            \PDO::NULL_EMPTY_STRING => 'EMPTY_STRING',
45
            \PDO::NULL_TO_STRING => 'TO_STRING',
46
        ],
47
        'CLIENT_VERSION',
48
        'SERVER_VERSION',
49
        'STATEMENT_CLASS',
50
        'EMULATE_PREPARES',
51
        'CONNECTION_STATUS',
52
        'STRINGIFY_FETCHES',
53
        'DEFAULT_FETCH_MODE' => [
54
            \PDO::FETCH_ASSOC => 'ASSOC',
55
            \PDO::FETCH_BOTH => 'BOTH',
56
            \PDO::FETCH_LAZY => 'LAZY',
57
            \PDO::FETCH_NUM => 'NUM',
58
            \PDO::FETCH_OBJ => 'OBJ',
59
        ],
60
    ];
61
 
62
    public static function castPdo(\PDO $c, array $a, Stub $stub, bool $isNested)
63
    {
64
        $attr = [];
65
        $errmode = $c->getAttribute(\PDO::ATTR_ERRMODE);
66
        $c->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
67
 
68
        foreach (self::PDO_ATTRIBUTES as $k => $v) {
69
            if (!isset($k[0])) {
70
                $k = $v;
71
                $v = [];
72
            }
73
 
74
            try {
75
                $attr[$k] = 'ERRMODE' === $k ? $errmode : $c->getAttribute(\constant('PDO::ATTR_'.$k));
76
                if ($v && isset($v[$attr[$k]])) {
77
                    $attr[$k] = new ConstStub($v[$attr[$k]], $attr[$k]);
78
                }
79
            } catch (\Exception) {
80
            }
81
        }
82
        if (isset($attr[$k = 'STATEMENT_CLASS'][1])) {
83
            if ($attr[$k][1]) {
84
                $attr[$k][1] = new ArgsStub($attr[$k][1], '__construct', $attr[$k][0]);
85
            }
86
            $attr[$k][0] = new ClassStub($attr[$k][0]);
87
        }
88
 
89
        $prefix = Caster::PREFIX_VIRTUAL;
90
        $a += [
91
            $prefix.'inTransaction' => method_exists($c, 'inTransaction'),
92
            $prefix.'errorInfo' => $c->errorInfo(),
93
            $prefix.'attributes' => new EnumStub($attr),
94
        ];
95
 
96
        if ($a[$prefix.'inTransaction']) {
97
            $a[$prefix.'inTransaction'] = $c->inTransaction();
98
        } else {
99
            unset($a[$prefix.'inTransaction']);
100
        }
101
 
102
        if (!isset($a[$prefix.'errorInfo'][1], $a[$prefix.'errorInfo'][2])) {
103
            unset($a[$prefix.'errorInfo']);
104
        }
105
 
106
        $c->setAttribute(\PDO::ATTR_ERRMODE, $errmode);
107
 
108
        return $a;
109
    }
110
 
111
    public static function castPdoStatement(\PDOStatement $c, array $a, Stub $stub, bool $isNested)
112
    {
113
        $prefix = Caster::PREFIX_VIRTUAL;
114
        $a[$prefix.'errorInfo'] = $c->errorInfo();
115
 
116
        if (!isset($a[$prefix.'errorInfo'][1], $a[$prefix.'errorInfo'][2])) {
117
            unset($a[$prefix.'errorInfo']);
118
        }
119
 
120
        return $a;
121
    }
122
}