caisse-bliss/vendor/doctrine/migrations/lib/Doctrine/Migrations/InlineParameterFormatter.php

96 lines
2.3 KiB
PHP

<?php
declare(strict_types=1);
namespace Doctrine\Migrations;
use Doctrine\DBAL\Connection;
use Doctrine\DBAL\Types\Type;
use function array_map;
use function implode;
use function is_array;
use function is_bool;
use function is_int;
use function is_string;
use function sprintf;
/**
* The InlineParameterFormatter class is responsible for formatting SQL query parameters to a string
* for display output.
*
* @internal
*/
final class InlineParameterFormatter implements ParameterFormatter
{
private Connection $connection;
public function __construct(Connection $connection)
{
$this->connection = $connection;
}
/**
* @param mixed[] $params
* @param mixed[] $types
*/
public function formatParameters(array $params, array $types): string
{
if ($params === []) {
return '';
}
$formattedParameters = [];
foreach ($params as $key => $value) {
$type = $types[$key] ?? 'string';
$formattedParameter = '[' . $this->formatParameter($value, $type) . ']';
$formattedParameters[] = is_string($key)
? sprintf(':%s => %s', $key, $formattedParameter)
: $formattedParameter;
}
return sprintf('with parameters (%s)', implode(', ', $formattedParameters));
}
/**
* @param string|int $value
* @param string|int $type
*
* @return string|int
*/
private function formatParameter($value, $type)
{
if (is_string($type) && Type::hasType($type)) {
return Type::getType($type)->convertToDatabaseValue(
$value,
$this->connection->getDatabasePlatform()
);
}
return $this->parameterToString($value);
}
/**
* @param int[]|bool[]|string[]|array|int|string|bool $value
*/
private function parameterToString($value): string
{
if (is_array($value)) {
return implode(', ', array_map(function ($value): string {
return $this->parameterToString($value);
}, $value));
}
if (is_int($value) || is_string($value)) {
return (string) $value;
}
if (is_bool($value)) {
return $value === true ? 'true' : 'false';
}
}
}