[DoctrineMongoDBBundle] fixed pretty queries
This commit is contained in:
parent
129d7c7c5f
commit
51106a8540
@ -54,7 +54,7 @@ class DoctrineMongoDBLogger
|
||||
*
|
||||
* @param array $query A query log array from Doctrine
|
||||
*/
|
||||
public function logQuery($query)
|
||||
public function logQuery(array $query)
|
||||
{
|
||||
$this->queries[] = $query;
|
||||
$this->processed = false;
|
||||
@ -107,6 +107,12 @@ class DoctrineMongoDBLogger
|
||||
$grouped = array();
|
||||
$ordered = array();
|
||||
foreach ($this->queries as $query) {
|
||||
if (!isset($query['query']) || !isset($query['fields'])) {
|
||||
// no grouping necessary
|
||||
$ordered[] = array($query);
|
||||
continue;
|
||||
}
|
||||
|
||||
$cursor = serialize($query['query']).serialize($query['fields']);
|
||||
|
||||
// append if issued from cursor (currently just "sort")
|
||||
@ -180,15 +186,21 @@ class DoctrineMongoDBLogger
|
||||
} elseif (isset($log['execute'])) {
|
||||
$query .= '.execute()';
|
||||
} elseif (isset($log['find'])) {
|
||||
$query .= '.find('.static::bsonEncode($log['query']);
|
||||
if (!empty($log['fields'])) {
|
||||
$query .= ', '.static::bsonEncode($log['fields']);
|
||||
$query .= '.find(';
|
||||
if ($log['query'] || $log['fields']) {
|
||||
$query .= static::bsonEncode($log['query']);
|
||||
if ($log['fields']) {
|
||||
$query .= ', '.static::bsonEncode($log['fields']);
|
||||
}
|
||||
}
|
||||
$query .= ')';
|
||||
} elseif (isset($log['findOne'])) {
|
||||
$query .= '.findOne('.static::bsonEncode($log['query']);
|
||||
if (!empty($log['fields'])) {
|
||||
$query .= ', '.static::bsonEncode($log['fields']);
|
||||
$query .= '.findOne(';
|
||||
if ($log['query'] || $log['fields']) {
|
||||
$query .= static::bsonEncode($log['query']);
|
||||
if ($log['fields']) {
|
||||
$query .= ', '.static::bsonEncode($log['fields']);
|
||||
}
|
||||
}
|
||||
$query .= ')';
|
||||
} elseif (isset($log['getDBRef'])) {
|
||||
@ -215,6 +227,15 @@ class DoctrineMongoDBLogger
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($query)) {
|
||||
if ('.' == $query[0]) {
|
||||
$query = 'db'.$query;
|
||||
}
|
||||
|
||||
$this->formattedQueries[$i++] = $query.';';
|
||||
++$this->nbRealQueries;
|
||||
}
|
||||
}
|
||||
|
||||
static protected function bsonEncode($query, $array = true)
|
||||
|
@ -0,0 +1,50 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien.potencier@symfony-project.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Bundle\DoctrineMongoDBBundle\Tests\Logger;
|
||||
|
||||
use Symfony\Bundle\DoctrineMongoDBBundle\Logger\DoctrineMongoDBLogger;
|
||||
|
||||
class DoctrineMongoDBLoggerTest extends \PHPUnit_Framework_TestCase
|
||||
{
|
||||
protected $logger;
|
||||
|
||||
protected function setUp()
|
||||
{
|
||||
$this->logger = new DoctrineMongoDBLogger();
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider getQueries
|
||||
*/
|
||||
public function testLogger($query, $formatted)
|
||||
{
|
||||
$this->logger->logQuery($query);
|
||||
|
||||
$this->assertEquals($formatted, $this->logger->getQueries());
|
||||
}
|
||||
|
||||
public function getQueries()
|
||||
{
|
||||
return array(
|
||||
// batchInsert
|
||||
array(
|
||||
array('db' => 'foo', 'collection' => 'bar', 'batchInsert' => true, 'num' => 1, 'data' => array('foo'), 'options' => array()),
|
||||
array('use foo;', 'db.bar.batchInsert(**1 item(s)**);'),
|
||||
),
|
||||
// find
|
||||
array(
|
||||
array('db' => 'foo', 'collection' => 'bar', 'find' => true, 'query' => array(), 'fields' => array()),
|
||||
array('use foo;', 'db.bar.find();'),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user