From 7075aa5e868a2ee8a5ae19dc4f67eb0dd07c149d Mon Sep 17 00:00:00 2001 From: Mark Story Date: Sat, 20 Feb 2010 11:42:17 -0500 Subject: [PATCH] Fixing DboSource not quoting table/field names with - in them. Tests expanded . Fixes #323 --- cake/libs/model/datasources/dbo_source.php | 11 ++++------- .../cases/libs/model/datasources/dbo_source.test.php | 4 ++++ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/cake/libs/model/datasources/dbo_source.php b/cake/libs/model/datasources/dbo_source.php index 3795d6f9c..ab63108a6 100755 --- a/cake/libs/model/datasources/dbo_source.php +++ b/cake/libs/model/datasources/dbo_source.php @@ -472,9 +472,6 @@ class DboSource extends DataSource { if (is_object($data) && isset($data->type)) { return $data->value; } - if ($data == '*') { - return '*'; - } if ($data === '*') { return '*'; } @@ -492,20 +489,20 @@ class DboSource extends DataSource { return $this->methodCache[__FUNCTION__][$cacheKey]; } $data = trim($data); - if (preg_match('/^\w+(\.\w+)*$/', $data)) { // string, string.string + if (preg_match('/^[\w-]+(\.[\w-]+)*$/', $data)) { // string, string.string if (strpos($data, '.') === false) { // string return $this->startQuote . $data . $this->endQuote; } $items = explode('.', $data); return $this->startQuote . implode($this->endQuote . '.' . $this->startQuote, $items) . $this->endQuote; } - if (preg_match('/^\w+\.\*$/', $data)) { // string.* + if (preg_match('/^[\w-]+\.\*$/', $data)) { // string.* return $this->startQuote . str_replace('.*', $this->endQuote . '.*', $data); } - if (preg_match('/^(\w+)\((.*)\)$/', $data, $matches)) { // Functions + if (preg_match('/^([\w-]+)\((.*)\)$/', $data, $matches)) { // Functions return $matches[1] . '(' . $this->name($matches[2]) . ')'; } - if (preg_match('/^(\w+(\.\w+|\(.*\))*)\s+' . preg_quote($this->alias) . '\s*(\w+)$/', $data, $matches)) { + if (preg_match('/^([\w-]+(\.[\w-]+|\(.*\))*)\s+' . preg_quote($this->alias) . '\s*([\w-]+)$/', $data, $matches)) { return preg_replace('/\s{2,}/', ' ', $this->name($matches[1]) . ' ' . $this->alias . ' ' . $this->name($matches[3])); } return $this->methodCache[__FUNCTION__][$cacheKey] = $data; 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 59fc56e66..f143820ce 100644 --- a/cake/tests/cases/libs/model/datasources/dbo_source.test.php +++ b/cake/tests/cases/libs/model/datasources/dbo_source.test.php @@ -4037,6 +4037,10 @@ class DboSourceTest extends CakeTestCase { $result = $this->testDb->name('name-with-minus'); $expected = '`name-with-minus`'; $this->assertEqual($result, $expected); + + $result = $this->testDb->name(array('my-name', 'Foo-Model.*')); + $expected = array('`my-name`', '`Foo-Model`.*'); + $this->assertEqual($result, $expected); } /**