Commit: 996e7bed03ce9ce1f909865a41581a9c4993a768
Author: Nate Abele | Date: 2010-07-11 12:43:58 -0400
diff --git a/libraries/lithium/data/source/database/adapter/MySql.php b/libraries/lithium/data/source/database/adapter/MySql.php
index 5d0b4ad..c5c0fa2 100644
--- a/libraries/lithium/data/source/database/adapter/MySql.php
+++ b/libraries/lithium/data/source/database/adapter/MySql.php
@@ -156,12 +156,20 @@ class MySql extends \lithium\data\source\Database {
* @filter This method can be filtered.
*/
public function entities($model = null) {
- $config = $this->_config;
- $method = function($self, $params, $chain) use ($config) {
- $name = $this->name($config['database']);
- return $self->query("SHOW TABLES FROM {$name};");
- };
- return $this->_filter(__METHOD__, compact('model'), $method);
+ $_config = $this->_config;
+ $params = compact('model');
+
+ return $this->_filter(__METHOD__, $params, function($self, $params) use ($_config) {
+ $name = $self->name($_config['database']);
+ $result = $self->invokeMethod('_execute', array("SHOW TABLES FROM {$name};"));
+ $entities = array();
+
+ while ($data = $self->result('next', $result, null)) {
+ list($entities[]) = $data;
+ }
+ $self->result('close', $result, null);
+ return $entities;
+ });
}
/**
diff --git a/libraries/lithium/tests/cases/data/source/database/adapter/MySqlTest.php b/libraries/lithium/tests/cases/data/source/database/adapter/MySqlTest.php
index 5cd6ec6..f03de65 100644
--- a/libraries/lithium/tests/cases/data/source/database/adapter/MySqlTest.php
+++ b/libraries/lithium/tests/cases/data/source/database/adapter/MySqlTest.php
@@ -9,6 +9,7 @@
namespace lithium\tests\cases\data\source\database\adapter;
use \lithium\data\Connections;
+use \lithium\data\model\Query;
use \lithium\data\source\database\adapter\MySql;
use \lithium\tests\mocks\data\source\database\adapter\MockMySql;
@@ -157,6 +158,69 @@ class MySqlTest extends \lithium\test\Unit {
$this->expectException();
$this->db->read('SELECT deliberate syntax error');
}
+
+ public function testEnabledFeatures() {
+ $this->assertTrue(MySql::enabled());
+ $this->assertTrue(MySql::enabled('relationships'));
+ $this->assertFalse(MySql::enabled('arrays'));
+ }
+
+ public function testEntityQuerying() {
+ $sources = $this->db->entities();
+ $this->assertTrue(is_array($sources));
+ $this->assertFalse(empty($sources));
+ }
+
+ public function testQueryOrdering() {
+ $insert = new Query(array(
+ 'type' => 'create',
+ 'source' => 'companies',
+ 'data' => array(
+ 'name' => 'Foo',
+ 'active' => true,
+ 'created' => date('Y-m-d H:i:s')
+ )
+ ));
+ $this->assertIdentical(true, $this->db->create($insert));
+
+ $insert->data(array(
+ 'name' => 'Bar',
+ 'created' => date('Y-m-d H:i:s', strtotime('-5 minutes'))
+ ));
+ $this->assertIdentical(true, $this->db->create($insert));
+
+ $insert->data(array(
+ 'name' => 'Baz',
+ 'created' => date('Y-m-d H:i:s', strtotime('-10 minutes'))
+ ));
+ $this->assertIdentical(true, $this->db->create($insert));
+
+ $read = new Query(array(
+ 'type' => 'read',
+ 'source' => 'companies',
+ 'fields' => array('name'),
+ 'order' => array('created' => 'asc')
+ ));
+ $result = $this->db->read($read, array('return' => 'array'));
+ $expected = array(
+ array('name' => 'Baz'),
+ array('name' => 'Bar'),
+ array('name' => 'Foo')
+ );
+ $this->assertEqual($expected, $result);
+
+ $read->order(array('created' => 'desc'));
+ $result = $this->db->read($read, array('return' => 'array'));
+ $expected = array(
+ array('name' => 'Foo'),
+ array('name' => 'Bar'),
+ array('name' => 'Baz')
+ );
+ $this->assertEqual($expected, $result);
+
+ $delete = new Query(array('type' => 'delete', 'source' => 'companies'));
+ $this->assertTrue($this->db->delete($delete));
+ }
}
?>
\ No newline at end of file