[DoctrineBridge] catch errors while converting to db values in data collector

This commit is contained in:
Alessandro Chitolina 2018-11-24 18:30:29 +01:00
parent e4a7fd8eed
commit 61c4531292
No known key found for this signature in database
GPG Key ID: 245FF08D9662DB42
2 changed files with 18 additions and 2 deletions

View File

@ -13,6 +13,7 @@ namespace Symfony\Bridge\Doctrine\DataCollector;
use Doctrine\Common\Persistence\ManagerRegistry;
use Doctrine\DBAL\Logging\DebugStack;
use Doctrine\DBAL\Types\ConversionException;
use Doctrine\DBAL\Types\Type;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
@ -132,7 +133,14 @@ class DoctrineDataCollector extends DataCollector
}
if ($type instanceof Type) {
$query['types'][$j] = $type->getBindingType();
$param = $type->convertToDatabaseValue($param, $this->registry->getConnection($connectionName)->getDatabasePlatform());
try {
$param = $type->convertToDatabaseValue($param, $this->registry->getConnection($connectionName)->getDatabasePlatform());
} catch (\TypeError $e) {
// Error thrown while processing params, query is not explainable.
$query['explainable'] = false;
} catch (ConversionException $e) {
$query['explainable'] = false;
}
}
}

View File

@ -12,6 +12,7 @@
namespace Symfony\Bridge\Doctrine\Tests\DataCollector;
use Doctrine\DBAL\Platforms\MySqlPlatform;
use Doctrine\DBAL\Version;
use PHPUnit\Framework\TestCase;
use Symfony\Bridge\Doctrine\DataCollector\DoctrineDataCollector;
use Symfony\Component\HttpFoundation\Request;
@ -120,7 +121,7 @@ class DoctrineDataCollectorTest extends TestCase
public function paramProvider()
{
return array(
$tests = array(
array('some value', array(), 'some value', true),
array(1, array(), 1, true),
array(true, array(), true, true),
@ -129,6 +130,13 @@ class DoctrineDataCollectorTest extends TestCase
array(fopen(__FILE__, 'r'), array(), 'Resource(stream)', false),
array(new \SplFileInfo(__FILE__), array(), 'Object(SplFileInfo)', false),
);
if (version_compare(Version::VERSION, '2.6', '>=')) {
$tests[] = array('this is not a date', array('date'), 'this is not a date', false);
$tests[] = array(new \stdClass(), array('date'), 'Object(stdClass)', false);
}
return $tests;
}
private function createCollector($queries)