[ Index ]

PHP Cross Reference of Joomla 4.2.2 documentation

title

Body

[close]

/libraries/vendor/symfony/var-dumper/Caster/ -> PdoCaster.php (source)

   1  <?php
   2  
   3  /*
   4   * This file is part of the Symfony package.
   5   *
   6   * (c) Fabien Potencier <[email protected]>
   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 <[email protected]>
  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 $e) {
  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  }


Generated: Wed Sep 7 05:41:13 2022 Chilli.vc Blog - For Webmaster,Blog-Writer,System Admin and Domainer