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'; } } }