[DoctrineMongoDBBundle] fixed pretty queries

This commit is contained in:
Kris Wallsmith 2011-03-10 12:53:35 -08:00
parent 129d7c7c5f
commit 51106a8540
2 changed files with 78 additions and 7 deletions

View File

@ -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)

View File

@ -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();'),
),
);
}
}