src/Exceptions/PDOException.php
<?php namespace Finesse\MicroDB\Exceptions; use Finesse\MicroDB\IException;use PDOException as BasePDOException;use Throwable; /** * {@inheritDoc} * * @author Surgie */class PDOException extends BasePDOException implements IException{ /** * @var string|null SQL query which caused the error (if caused by a query) */ protected $query; /** * @var array|null Bound values (if caused by a query) */ protected $values; /** * {@inheritDoc} * @param string|null $query SQL query which caused the error (if caused by a query) * @param array|null $values Bound values (if caused by a query) */ public function __construct(Method `__construct` has 5 arguments (exceeds 4 allowed). Consider refactoring. $message = "", $code = 0, Throwable $previous = null, string $query = null, array $values = null ) { if ($query !== null) { $message .= '; SQL query: ('.$query.')'; } if ($values !== null) { $message .= '; bound values: '.$this->valueToString($values); } parent::__construct($message, 0, $previous); // The constructor doesn't except string as a $code value so we have to set it manually $this->code = $code; $this->query = $query; $this->values = $values; } /** * Makes a self instance based on a base PDOException instance. * * @param BasePDOException $exception Original exception * @param string|null $query SQL query which caused the error (if caused by a query) * @param array|null $values Bound values (if caused by a query) * @return self */ public static function wrapBaseException(BasePDOException $exception, string $query = null, array $values = null) { $newException = new static($exception->getMessage(), $exception->getCode(), $exception, $query, $values); $newException->errorInfo = $exception->errorInfo; return $newException; } /** * @return string SQL query which caused the error (empty if the error is not caused by a query) */ public function getQuery(): string { return $this->query ?? ''; } /** * @return array Bound values (empty if the error is not caused by a query) */ public function getValues(): array { return $this->values ?? []; } /** * Converts an arbitrary value to string for a debug message. */Function `valueToString` has a Cognitive Complexity of 7 (exceeds 5 allowed). Consider refactoring. protected function valueToString($value): string { if ($value === false) { return 'false'; } if ($value === true) { return 'true'; } if ($value === null) { return 'null'; } if (is_string($value)) { return $this->stringValueToString($value); } if (is_object($value)) {Avoid too many `return` statements within this method. return 'a '.get_class($value).' instance'; } if (is_array($value)) {Avoid too many `return` statements within this method. return $this->arrayValueToString($value); } if (is_resource($value)) {Avoid too many `return` statements within this method. return 'a resource'; }Avoid too many `return` statements within this method. return (string)$value; } /** * Converts an string value to string for a debug message. */ protected function stringValueToString(string $value): string { if (call_user_func(function_exists('mb_strlen') ? 'mb_strlen' : 'strlen', $value) > 100) { $value = call_user_func(function_exists('mb_substr') ? 'mb_substr' : 'substr', $value, 0, 97).'...'; } return '"'.$value.'"'; } /** * Converts an array value to string for a debug message. */ protected function arrayValueToString(array $value): string { $keys = array_keys($value); $isAssociative = $keys !== array_keys($keys); $valuesStrings = []; foreach ($value as $key => $subValue) { $valuesStrings[] = ($isAssociative ? $this->valueToString($key).' => ' : '') . $this->valueToString($subValue); } return '['.implode(', ', $valuesStrings).']'; }}