From a5b72766964cca7919e3e7f917d45a38603d9482 Mon Sep 17 00:00:00 2001 From: nate Date: Thu, 18 Dec 2008 20:49:25 +0000 Subject: [PATCH] Correcting DboSource::order() identifier quoting, correcting bad DboSource tests, fixes #5900 git-svn-id: https://svn.cakephp.org/repo/branches/1.2.x.x@7942 3807eeeb-6ff5-0310-8944-8be069107fe0 --- cake/libs/model/datasources/dbo_source.php | 15 ++++++--------- .../libs/model/datasources/dbo_source.test.php | 8 ++++++-- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/cake/libs/model/datasources/dbo_source.php b/cake/libs/model/datasources/dbo_source.php index ad6f65e49..543c00441 100644 --- a/cake/libs/model/datasources/dbo_source.php +++ b/cake/libs/model/datasources/dbo_source.php @@ -2004,17 +2004,12 @@ class DboSource extends DataSource { } if (is_array($keys)) { - foreach ($keys as $key => $val) { - if (is_numeric($key) && empty($val)) { - unset($keys[$key]); - } - } + $keys = array_filter($keys); } if (empty($keys) || (is_array($keys) && count($keys) && isset($keys[0]) && empty($keys[0]))) { return ''; } - $flag = (isset($keys[0]) && $keys[0] == '(Model.field > 100) DESC'); if (is_array($keys)) { $keys = (Set::countDim($keys) > 1) ? array_map(array(&$this, 'order'), $keys) : $keys; @@ -2034,9 +2029,11 @@ class DboSource extends DataSource { } else { $dir = ''; } - Configure::write('flag', $flag); - $key = trim($this->name(trim($key)) . ' ' . trim($dir)); - Configure::write('flag', false); + $key = trim($key); + if (!preg_match('/\s/', $key)) { + $key = $this->name($key); + } + $key .= ' ' . trim($dir); } $order[] = $this->order($key . $value); } diff --git a/cake/tests/cases/libs/model/datasources/dbo_source.test.php b/cake/tests/cases/libs/model/datasources/dbo_source.test.php index 1a898c4c1..6a56f2851 100644 --- a/cake/tests/cases/libs/model/datasources/dbo_source.test.php +++ b/cake/tests/cases/libs/model/datasources/dbo_source.test.php @@ -3196,10 +3196,10 @@ class DboSourceTest extends CakeTestCase { $this->assertPattern('/^\s*ORDER BY\s+`title`\s+ASC\s*$/', $result); $result = $this->testDb->order("Dealer.id = 7 desc, Dealer.id = 3 desc, Dealer.title asc"); - $expected = " ORDER BY Dealer`.`id` = 7 desc, Dealer`.`id` = 3 desc, `Dealer`.`title` asc"; + $expected = " ORDER BY `Dealer`.`id` = 7 desc, `Dealer`.`id` = 3 desc, `Dealer`.`title` asc"; $this->assertEqual($result, $expected); - $result = $this->testDb->order(array("Page.name"=>"='test' DESC")); + $result = $this->testDb->order(array("Page.name" => "='test' DESC")); $this->assertPattern("/^\s*ORDER BY\s+`Page`\.`name`\s*='test'\s+DESC\s*$/", $result); $result = $this->testDb->order("Page.name = 'view' DESC"); @@ -3227,6 +3227,10 @@ class DboSourceTest extends CakeTestCase { $result = $this->testDb->order("3963.191 * id"); $expected = ' ORDER BY 3963.191 * id ASC'; $this->assertEqual($result, $expected); + + $result = $this->testDb->order(array('Property.sale_price IS NULL')); + $expected = ' ORDER BY `Property`.`sale_price` IS NULL ASC'; + $this->assertEqual($result, $expected); } /** * testComplexSortExpression method