annotate vendor/symfony/var-dumper/Caster/PdoCaster.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 129ea1e6d783
children
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 /*
Chris@0 4 * This file is part of the Symfony package.
Chris@0 5 *
Chris@0 6 * (c) Fabien Potencier <fabien@symfony.com>
Chris@0 7 *
Chris@0 8 * For the full copyright and license information, please view the LICENSE
Chris@0 9 * file that was distributed with this source code.
Chris@0 10 */
Chris@0 11
Chris@0 12 namespace Symfony\Component\VarDumper\Caster;
Chris@0 13
Chris@0 14 use Symfony\Component\VarDumper\Cloner\Stub;
Chris@0 15
Chris@0 16 /**
Chris@0 17 * Casts PDO related classes to array representation.
Chris@0 18 *
Chris@0 19 * @author Nicolas Grekas <p@tchwork.com>
Chris@0 20 */
Chris@0 21 class PdoCaster
Chris@0 22 {
Chris@17 23 private static $pdoAttributes = [
Chris@17 24 'CASE' => [
Chris@0 25 \PDO::CASE_LOWER => 'LOWER',
Chris@0 26 \PDO::CASE_NATURAL => 'NATURAL',
Chris@0 27 \PDO::CASE_UPPER => 'UPPER',
Chris@17 28 ],
Chris@17 29 'ERRMODE' => [
Chris@0 30 \PDO::ERRMODE_SILENT => 'SILENT',
Chris@0 31 \PDO::ERRMODE_WARNING => 'WARNING',
Chris@0 32 \PDO::ERRMODE_EXCEPTION => 'EXCEPTION',
Chris@17 33 ],
Chris@0 34 'TIMEOUT',
Chris@0 35 'PREFETCH',
Chris@0 36 'AUTOCOMMIT',
Chris@0 37 'PERSISTENT',
Chris@0 38 'DRIVER_NAME',
Chris@0 39 'SERVER_INFO',
Chris@17 40 'ORACLE_NULLS' => [
Chris@0 41 \PDO::NULL_NATURAL => 'NATURAL',
Chris@0 42 \PDO::NULL_EMPTY_STRING => 'EMPTY_STRING',
Chris@0 43 \PDO::NULL_TO_STRING => 'TO_STRING',
Chris@17 44 ],
Chris@0 45 'CLIENT_VERSION',
Chris@0 46 'SERVER_VERSION',
Chris@0 47 'STATEMENT_CLASS',
Chris@0 48 'EMULATE_PREPARES',
Chris@0 49 'CONNECTION_STATUS',
Chris@0 50 'STRINGIFY_FETCHES',
Chris@17 51 'DEFAULT_FETCH_MODE' => [
Chris@0 52 \PDO::FETCH_ASSOC => 'ASSOC',
Chris@0 53 \PDO::FETCH_BOTH => 'BOTH',
Chris@0 54 \PDO::FETCH_LAZY => 'LAZY',
Chris@0 55 \PDO::FETCH_NUM => 'NUM',
Chris@0 56 \PDO::FETCH_OBJ => 'OBJ',
Chris@17 57 ],
Chris@17 58 ];
Chris@0 59
Chris@0 60 public static function castPdo(\PDO $c, array $a, Stub $stub, $isNested)
Chris@0 61 {
Chris@17 62 $attr = [];
Chris@0 63 $errmode = $c->getAttribute(\PDO::ATTR_ERRMODE);
Chris@0 64 $c->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
Chris@0 65
Chris@0 66 foreach (self::$pdoAttributes as $k => $v) {
Chris@0 67 if (!isset($k[0])) {
Chris@0 68 $k = $v;
Chris@17 69 $v = [];
Chris@0 70 }
Chris@0 71
Chris@0 72 try {
Chris@17 73 $attr[$k] = 'ERRMODE' === $k ? $errmode : $c->getAttribute(\constant('PDO::ATTR_'.$k));
Chris@0 74 if ($v && isset($v[$attr[$k]])) {
Chris@0 75 $attr[$k] = new ConstStub($v[$attr[$k]], $attr[$k]);
Chris@0 76 }
Chris@0 77 } catch (\Exception $e) {
Chris@0 78 }
Chris@0 79 }
Chris@0 80 if (isset($attr[$k = 'STATEMENT_CLASS'][1])) {
Chris@0 81 if ($attr[$k][1]) {
Chris@0 82 $attr[$k][1] = new ArgsStub($attr[$k][1], '__construct', $attr[$k][0]);
Chris@0 83 }
Chris@0 84 $attr[$k][0] = new ClassStub($attr[$k][0]);
Chris@0 85 }
Chris@0 86
Chris@0 87 $prefix = Caster::PREFIX_VIRTUAL;
Chris@17 88 $a += [
Chris@0 89 $prefix.'inTransaction' => method_exists($c, 'inTransaction'),
Chris@0 90 $prefix.'errorInfo' => $c->errorInfo(),
Chris@0 91 $prefix.'attributes' => new EnumStub($attr),
Chris@17 92 ];
Chris@0 93
Chris@0 94 if ($a[$prefix.'inTransaction']) {
Chris@0 95 $a[$prefix.'inTransaction'] = $c->inTransaction();
Chris@0 96 } else {
Chris@0 97 unset($a[$prefix.'inTransaction']);
Chris@0 98 }
Chris@0 99
Chris@0 100 if (!isset($a[$prefix.'errorInfo'][1], $a[$prefix.'errorInfo'][2])) {
Chris@0 101 unset($a[$prefix.'errorInfo']);
Chris@0 102 }
Chris@0 103
Chris@0 104 $c->setAttribute(\PDO::ATTR_ERRMODE, $errmode);
Chris@0 105
Chris@0 106 return $a;
Chris@0 107 }
Chris@0 108
Chris@0 109 public static function castPdoStatement(\PDOStatement $c, array $a, Stub $stub, $isNested)
Chris@0 110 {
Chris@0 111 $prefix = Caster::PREFIX_VIRTUAL;
Chris@0 112 $a[$prefix.'errorInfo'] = $c->errorInfo();
Chris@0 113
Chris@0 114 if (!isset($a[$prefix.'errorInfo'][1], $a[$prefix.'errorInfo'][2])) {
Chris@0 115 unset($a[$prefix.'errorInfo']);
Chris@0 116 }
Chris@0 117
Chris@0 118 return $a;
Chris@0 119 }
Chris@0 120 }