[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
|
* @param array $query A query log array from Doctrine
|
||||||
*/
|
*/
|
||||||
public function logQuery($query)
|
public function logQuery(array $query)
|
||||||
{
|
{
|
||||||
$this->queries[] = $query;
|
$this->queries[] = $query;
|
||||||
$this->processed = false;
|
$this->processed = false;
|
||||||
@ -107,6 +107,12 @@ class DoctrineMongoDBLogger
|
|||||||
$grouped = array();
|
$grouped = array();
|
||||||
$ordered = array();
|
$ordered = array();
|
||||||
foreach ($this->queries as $query) {
|
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']);
|
$cursor = serialize($query['query']).serialize($query['fields']);
|
||||||
|
|
||||||
// append if issued from cursor (currently just "sort")
|
// append if issued from cursor (currently just "sort")
|
||||||
@ -180,15 +186,21 @@ class DoctrineMongoDBLogger
|
|||||||
} elseif (isset($log['execute'])) {
|
} elseif (isset($log['execute'])) {
|
||||||
$query .= '.execute()';
|
$query .= '.execute()';
|
||||||
} elseif (isset($log['find'])) {
|
} elseif (isset($log['find'])) {
|
||||||
$query .= '.find('.static::bsonEncode($log['query']);
|
$query .= '.find(';
|
||||||
if (!empty($log['fields'])) {
|
if ($log['query'] || $log['fields']) {
|
||||||
$query .= ', '.static::bsonEncode($log['fields']);
|
$query .= static::bsonEncode($log['query']);
|
||||||
|
if ($log['fields']) {
|
||||||
|
$query .= ', '.static::bsonEncode($log['fields']);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
$query .= ')';
|
$query .= ')';
|
||||||
} elseif (isset($log['findOne'])) {
|
} elseif (isset($log['findOne'])) {
|
||||||
$query .= '.findOne('.static::bsonEncode($log['query']);
|
$query .= '.findOne(';
|
||||||
if (!empty($log['fields'])) {
|
if ($log['query'] || $log['fields']) {
|
||||||
$query .= ', '.static::bsonEncode($log['fields']);
|
$query .= static::bsonEncode($log['query']);
|
||||||
|
if ($log['fields']) {
|
||||||
|
$query .= ', '.static::bsonEncode($log['fields']);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
$query .= ')';
|
$query .= ')';
|
||||||
} elseif (isset($log['getDBRef'])) {
|
} 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)
|
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