mirror of
https://github.com/kamilwylegala/cakephp2-php8.git
synced 2024-11-15 03:18:26 +00:00
Refactoring schema test and fixing formatting, refactoring Model::_findCount() to use DboSource::calculate() in all cases, closes #4501
git-svn-id: https://svn.cakephp.org/repo/branches/1.2.x.x@7684 3807eeeb-6ff5-0310-8944-8be069107fe0
This commit is contained in:
parent
1a0299d257
commit
2bfd5a4b3e
5 changed files with 83 additions and 48 deletions
|
@ -390,6 +390,9 @@ class DboSource extends DataSource {
|
||||||
if ($data == '*') {
|
if ($data == '*') {
|
||||||
return '*';
|
return '*';
|
||||||
}
|
}
|
||||||
|
if (is_object($data) && isset($data->type)) {
|
||||||
|
return $data->value;
|
||||||
|
}
|
||||||
$array = is_array($data);
|
$array = is_array($data);
|
||||||
$data = (array)$data;
|
$data = (array)$data;
|
||||||
$count = count($data);
|
$count = count($data);
|
||||||
|
|
|
@ -1870,11 +1870,13 @@ class Model extends Overloadable {
|
||||||
*/
|
*/
|
||||||
function _findCount($state, $query, $results = array()) {
|
function _findCount($state, $query, $results = array()) {
|
||||||
if ($state == 'before') {
|
if ($state == 'before') {
|
||||||
|
$db =& ConnectionManager::getDataSource($this->useDbConfig);
|
||||||
if (empty($query['fields'])) {
|
if (empty($query['fields'])) {
|
||||||
$db =& ConnectionManager::getDataSource($this->useDbConfig);
|
|
||||||
$query['fields'] = $db->calculate($this, 'count');
|
$query['fields'] = $db->calculate($this, 'count');
|
||||||
} elseif (is_string($query['fields']) && !preg_match('/count/i', $query['fields'])) {
|
} elseif (is_string($query['fields']) && !preg_match('/count/i', $query['fields'])) {
|
||||||
$query['fields'] = "COUNT({$query['fields']}) as count";
|
$query['fields'] = $db->calculate($this, 'count', array(
|
||||||
|
$db->expression($query['fields']), 'count'
|
||||||
|
));
|
||||||
}
|
}
|
||||||
$query['order'] = false;
|
$query['order'] = false;
|
||||||
return $query;
|
return $query;
|
||||||
|
|
|
@ -250,8 +250,15 @@ class CakeSchema extends Object {
|
||||||
}
|
}
|
||||||
$table = str_replace($prefix, '', $table);
|
$table = str_replace($prefix, '', $table);
|
||||||
}
|
}
|
||||||
$Object = new AppModel(array('name' => Inflector::classify($table), 'table' => $table, 'ds' => $connection));
|
$Object = new AppModel(array(
|
||||||
if (in_array($table, array('aros', 'acos', 'aros_acos', Configure::read('Session.table'), 'i18n'))) {
|
'name' => Inflector::classify($table), 'table' => $table, 'ds' => $connection
|
||||||
|
));
|
||||||
|
|
||||||
|
$systemTables = array(
|
||||||
|
'aros', 'acos', 'aros_acos', Configure::read('Session.table'), 'i18n'
|
||||||
|
);
|
||||||
|
|
||||||
|
if (in_array($table, $systemTables)) {
|
||||||
$tables[$Object->table] = $this->__columns($Object);
|
$tables[$Object->table] = $this->__columns($Object);
|
||||||
$tables[$Object->table]['indexes'] = $db->index($Object);
|
$tables[$Object->table]['indexes'] = $db->index($Object);
|
||||||
} elseif ($models === false) {
|
} elseif ($models === false) {
|
||||||
|
|
|
@ -3213,10 +3213,17 @@ class DboSourceTest extends CakeTestCase {
|
||||||
function testCalculations() {
|
function testCalculations() {
|
||||||
$result = $this->testDb->calculate($this->Model, 'count');
|
$result = $this->testDb->calculate($this->Model, 'count');
|
||||||
$this->assertEqual($result, 'COUNT(*) AS `count`');
|
$this->assertEqual($result, 'COUNT(*) AS `count`');
|
||||||
|
|
||||||
$result = $this->testDb->calculate($this->Model, 'count', array('id'));
|
$result = $this->testDb->calculate($this->Model, 'count', array('id'));
|
||||||
$this->assertEqual($result, 'COUNT(`id`) AS `count`');
|
$this->assertEqual($result, 'COUNT(`id`) AS `count`');
|
||||||
|
|
||||||
|
$result = $this->testDb->calculate(
|
||||||
|
$this->Model,
|
||||||
|
'count',
|
||||||
|
array($this->testDb->expression('DISTINCT id'))
|
||||||
|
);
|
||||||
|
$this->assertEqual($result, 'COUNT(DISTINCT id) AS `count`');
|
||||||
|
|
||||||
$result = $this->testDb->calculate($this->Model, 'count', array('id', 'id_count'));
|
$result = $this->testDb->calculate($this->Model, 'count', array('id', 'id_count'));
|
||||||
$this->assertEqual($result, 'COUNT(`id`) AS `id_count`');
|
$this->assertEqual($result, 'COUNT(`id`) AS `id_count`');
|
||||||
|
|
||||||
|
|
|
@ -122,15 +122,15 @@ class TestAppSchema extends CakeSchema {
|
||||||
* @access public
|
* @access public
|
||||||
*/
|
*/
|
||||||
var $comments = array(
|
var $comments = array(
|
||||||
'id' => array('type' => 'integer', 'null' => false, 'default' => 0,'key' => 'primary'),
|
'id' => array('type' => 'integer', 'null' => false, 'default' => 0,'key' => 'primary'),
|
||||||
'article_id' => array('type' => 'integer', 'null' => false),
|
'article_id' => array('type' => 'integer', 'null' => false),
|
||||||
'user_id' => array('type' => 'integer', 'null' => false),
|
'user_id' => array('type' => 'integer', 'null' => false),
|
||||||
'comment' => array('type' => 'text', 'null' => true, 'default' => null),
|
'comment' => array('type' => 'text', 'null' => true, 'default' => null),
|
||||||
'published' => array('type' => 'string', 'null' => true, 'default' => 'N', 'length' => 1),
|
'published' => array('type' => 'string', 'null' => true, 'default' => 'N', 'length' => 1),
|
||||||
'created' => array('type' => 'datetime', 'null' => true, 'default' => null),
|
'created' => array('type' => 'datetime', 'null' => true, 'default' => null),
|
||||||
'updated' => array('type' => 'datetime', 'null' => true, 'default' => null),
|
'updated' => array('type' => 'datetime', 'null' => true, 'default' => null),
|
||||||
'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => true)),
|
'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => true)),
|
||||||
);
|
);
|
||||||
/**
|
/**
|
||||||
* posts property
|
* posts property
|
||||||
*
|
*
|
||||||
|
@ -138,15 +138,15 @@ class TestAppSchema extends CakeSchema {
|
||||||
* @access public
|
* @access public
|
||||||
*/
|
*/
|
||||||
var $posts = array(
|
var $posts = array(
|
||||||
'id' => array('type' => 'integer', 'null' => false, 'default' => 0, 'key' => 'primary'),
|
'id' => array('type' => 'integer', 'null' => false, 'default' => 0, 'key' => 'primary'),
|
||||||
'author_id' => array('type' => 'integer', 'null' => false),
|
'author_id' => array('type' => 'integer', 'null' => false),
|
||||||
'title' => array('type' => 'string', 'null' => false),
|
'title' => array('type' => 'string', 'null' => false),
|
||||||
'body' => array('type' => 'text', 'null' => true, 'default' => null),
|
'body' => array('type' => 'text', 'null' => true, 'default' => null),
|
||||||
'published' => array('type' => 'string', 'null' => true, 'default' => 'N', 'length' => 1),
|
'published' => array('type' => 'string', 'null' => true, 'default' => 'N', 'length' => 1),
|
||||||
'created' => array('type' => 'datetime', 'null' => true, 'default' => null),
|
'created' => array('type' => 'datetime', 'null' => true, 'default' => null),
|
||||||
'updated' => array('type' => 'datetime', 'null' => true, 'default' => null),
|
'updated' => array('type' => 'datetime', 'null' => true, 'default' => null),
|
||||||
'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => true)),
|
'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => true)),
|
||||||
);
|
);
|
||||||
/**
|
/**
|
||||||
* posts_tags property
|
* posts_tags property
|
||||||
*
|
*
|
||||||
|
@ -154,8 +154,8 @@ class TestAppSchema extends CakeSchema {
|
||||||
* @access public
|
* @access public
|
||||||
*/
|
*/
|
||||||
var $posts_tags = array(
|
var $posts_tags = array(
|
||||||
'post_id' => array('type' => 'integer', 'null' => false, 'key' => 'primary'),
|
'post_id' => array('type' => 'integer', 'null' => false),
|
||||||
'tag_id' => array('type' => 'string', 'null' => false),
|
'tag_id' => array('type' => 'string', 'null' => false, 'key' => 'primary'),
|
||||||
'indexes' => array()
|
'indexes' => array()
|
||||||
);
|
);
|
||||||
/**
|
/**
|
||||||
|
@ -169,7 +169,7 @@ class TestAppSchema extends CakeSchema {
|
||||||
'tag' => array('type' => 'string', 'null' => false),
|
'tag' => array('type' => 'string', 'null' => false),
|
||||||
'created' => array('type' => 'datetime', 'null' => true, 'default' => null),
|
'created' => array('type' => 'datetime', 'null' => true, 'default' => null),
|
||||||
'updated' => array('type' => 'datetime', 'null' => true, 'default' => null),
|
'updated' => array('type' => 'datetime', 'null' => true, 'default' => null),
|
||||||
'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => true)),
|
'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => true))
|
||||||
);
|
);
|
||||||
/**
|
/**
|
||||||
* datatypes property
|
* datatypes property
|
||||||
|
@ -180,7 +180,7 @@ class TestAppSchema extends CakeSchema {
|
||||||
var $datatypes = array(
|
var $datatypes = array(
|
||||||
'id' => array('type' => 'integer', 'null' => false, 'default' => 0, 'key' => 'primary'),
|
'id' => array('type' => 'integer', 'null' => false, 'default' => 0, 'key' => 'primary'),
|
||||||
'float_field' => array('type' => 'float', 'null' => false, 'length' => '5,2'),
|
'float_field' => array('type' => 'float', 'null' => false, 'length' => '5,2'),
|
||||||
'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => true)),
|
'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => true))
|
||||||
);
|
);
|
||||||
/**
|
/**
|
||||||
* setup method
|
* setup method
|
||||||
|
@ -383,11 +383,19 @@ class CakeSchemaTest extends CakeTestCase {
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
function testSchemaRead() {
|
function testSchemaRead() {
|
||||||
$read = $this->Schema->read(array('connection' => 'test_suite', 'name' => 'TestApp', 'models' => array('SchemaPost', 'SchemaComment', 'SchemaTag', 'SchemaDatatype')));
|
$read = $this->Schema->read(array(
|
||||||
|
'connection' => 'test_suite',
|
||||||
|
'name' => 'TestApp',
|
||||||
|
'models' => array('SchemaPost', 'SchemaComment', 'SchemaTag', 'SchemaDatatype')
|
||||||
|
));
|
||||||
unset($read['tables']['missing']);
|
unset($read['tables']['missing']);
|
||||||
|
|
||||||
$this->assertEqual($read['tables'], $this->Schema->tables);
|
$this->assertEqual($read['tables'], $this->Schema->tables);
|
||||||
$this->assertIdentical($read['tables']['datatypes']['float_field'], $this->Schema->tables['datatypes']['float_field']);
|
$this->assertIdentical(
|
||||||
|
$read['tables']['datatypes']['float_field'],
|
||||||
|
$this->Schema->tables['datatypes']['float_field']
|
||||||
|
);
|
||||||
|
|
||||||
$db =& ConnectionManager::getDataSource('test_suite');
|
$db =& ConnectionManager::getDataSource('test_suite');
|
||||||
$config = $db->config;
|
$config = $db->config;
|
||||||
$config['prefix'] = 'schema_test_prefix_';
|
$config['prefix'] = 'schema_test_prefix_';
|
||||||
|
@ -421,23 +429,27 @@ class CakeSchemaTest extends CakeTestCase {
|
||||||
$New = new MyAppSchema();
|
$New = new MyAppSchema();
|
||||||
$compare = $New->compare($this->Schema);
|
$compare = $New->compare($this->Schema);
|
||||||
$expected = array(
|
$expected = array(
|
||||||
'comments' => array(
|
'comments' => array(
|
||||||
'add' => array('post_id' => array('type' => 'integer', 'null' => false, 'default' => 0),
|
'add' => array(
|
||||||
'title' => array('type' => 'string', 'null' => false, 'length' => 100)
|
'post_id' => array('type' => 'integer', 'null' => false, 'default' => 0),
|
||||||
),
|
'title' => array('type' => 'string', 'null' => false, 'length' => 100)
|
||||||
'drop' => array('article_id' => array('type' => 'integer', 'null' => false)),
|
),
|
||||||
'change' => array('comment' => array('type' => 'text', 'null' => false, 'default' => null))
|
'drop' => array('article_id' => array('type' => 'integer', 'null' => false)),
|
||||||
|
'change' => array(
|
||||||
),
|
'comment' => array('type' => 'text', 'null' => false, 'default' => null)
|
||||||
'posts' => array(
|
)
|
||||||
'add' => array('summary' => array('type' => 'text', 'null' => 1)),
|
),
|
||||||
'change' => array('author_id' => array('type' => 'integer', 'null' => true, 'default' => ''),
|
'posts' => array(
|
||||||
'title' => array('type' => 'string', 'null' => false, 'default' => 'Title'),
|
'add' => array('summary' => array('type' => 'text', 'null' => 1)),
|
||||||
'published' => array('type' => 'string', 'null' => true, 'default' => 'Y', 'length' => '1')
|
'change' => array(
|
||||||
),
|
'author_id' => array('type' => 'integer', 'null' => true, 'default' => ''),
|
||||||
),
|
'title' => array('type' => 'string', 'null' => false, 'default' => 'Title'),
|
||||||
);
|
'published' => array(
|
||||||
|
'type' => 'string', 'null' => true, 'default' => 'Y', 'length' => '1'
|
||||||
|
)
|
||||||
|
)
|
||||||
|
),
|
||||||
|
);
|
||||||
$this->assertEqual($expected, $compare);
|
$this->assertEqual($expected, $compare);
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
|
@ -461,7 +473,11 @@ class CakeSchemaTest extends CakeTestCase {
|
||||||
$db =& ConnectionManager::getDataSource('test_suite');
|
$db =& ConnectionManager::getDataSource('test_suite');
|
||||||
$db->cacheSources = false;
|
$db->cacheSources = false;
|
||||||
|
|
||||||
$db->query('CREATE TABLE ' . $db->fullTableName('testdescribes') . ' (id int(11) AUTO_INCREMENT, int_null int(10) unsigned NULL, int_not_null int(10) unsigned NOT NULL, primary key(id));');
|
$db->query(
|
||||||
|
'CREATE TABLE ' . $db->fullTableName('testdescribes') . ' (id int(11) AUTO_INCREMENT' .
|
||||||
|
', int_null int(10) unsigned NULL, int_not_null int(10) unsigned NOT NULL, primary ' .
|
||||||
|
'key(id));'
|
||||||
|
);
|
||||||
|
|
||||||
$Schema =& new CakeSchema(array('connection' => 'test_suite'));
|
$Schema =& new CakeSchema(array('connection' => 'test_suite'));
|
||||||
$read = $Schema->read(array('models' => array('Testdescribe')));
|
$read = $Schema->read(array('models' => array('Testdescribe')));
|
||||||
|
|
Loading…
Reference in a new issue