From d0ef6556010d661336e4894d4998c4b09c0a35e0 Mon Sep 17 00:00:00 2001 From: Jose Lorenzo Rodriguez Date: Tue, 21 Jun 2011 18:58:33 -0430 Subject: [PATCH] Using the field name for aliasing for Sqlsrv as in Postgres, removing dead code --- .../Model/Datasource/Database/Sqlserver.php | 38 ++----------- .../Datasource/Database/SqlserverTest.php | 54 +++++++++---------- 2 files changed, 31 insertions(+), 61 deletions(-) diff --git a/lib/Cake/Model/Datasource/Database/Sqlserver.php b/lib/Cake/Model/Datasource/Database/Sqlserver.php index 73120901106..6798d60a903 100644 --- a/lib/Cake/Model/Datasource/Database/Sqlserver.php +++ b/lib/Cake/Model/Datasource/Database/Sqlserver.php @@ -257,7 +257,6 @@ public function fields($model, $alias = null, $fields = array(), $quote = true) $prepend = 'DISTINCT '; $fields[$i] = trim(str_replace('DISTINCT', '', $fields[$i])); } - $fieldAlias = count($this->_fieldMappings); if (!preg_match('/\s+AS\s+/i', $fields[$i])) { if (substr($fields[$i], -1) == '*') { @@ -274,14 +273,14 @@ public function fields($model, $alias = null, $fields = array(), $quote = true) } if (strpos($fields[$i], '.') === false) { - $this->_fieldMappings[$alias . '__' . $fieldAlias] = $alias . '.' . $fields[$i]; + $this->_fieldMappings[$alias . '__' . $fields[$i]] = $alias . '.' . $fields[$i]; $fieldName = $this->name($alias . '.' . $fields[$i]); - $fieldAlias = $this->name($alias . '__' . $fieldAlias); + $fieldAlias = $this->name($alias . '__' . $fields[$i]); } else { $build = explode('.', $fields[$i]); - $this->_fieldMappings[$build[0] . '__' . $fieldAlias] = $fields[$i]; + $this->_fieldMappings[$build[0] . '__' .$build[1]] = $fields[$i]; $fieldName = $this->name($build[0] . '.' . $build[1]); - $fieldAlias = $this->name(preg_replace("/^\[(.+)\]$/", "$1", $build[0]) . '__' . $fieldAlias); + $fieldAlias = $this->name(preg_replace("/^\[(.+)\]$/", "$1", $build[0]) . '__' . $build[1]); } if ($model->getColumnType($fields[$i]) == 'datetime') { $fieldName = "CONVERT(VARCHAR(20), {$fieldName}, 20)"; @@ -510,35 +509,6 @@ public function renderStatement($type, $data) { } } -/** - * Reverses the sort direction of ORDER statements to get paging offsets to work correctly - * - * @param string $order - * @return string - */ - private function __switchSort($order) { - $order = preg_replace('/\s+ASC/i', '__tmp_asc__', $order); - $order = preg_replace('/\s+DESC/i', ' ASC', $order); - return preg_replace('/__tmp_asc__/', ' DESC', $order); - } - -/** - * Translates field names used for filtering and sorting to shortened names using the field map - * - * @param string $sql A snippet of SQL representing an ORDER or WHERE statement - * @return string The value of $sql with field names replaced - */ - private function __mapFields($sql) { - if (empty($sql) || empty($this->_fieldMappings)) { - return $sql; - } - foreach ($this->_fieldMappings as $key => $val) { - $sql = preg_replace('/' . preg_quote($val) . '/', $this->name($key), $sql); - $sql = preg_replace('/' . preg_quote($this->name($val)) . '/', $this->name($key), $sql); - } - return $sql; - } - /** * Returns an array of all result rows for a given SQL query. * Returns false if no rows matched. diff --git a/lib/Cake/Test/Case/Model/Datasource/Database/SqlserverTest.php b/lib/Cake/Test/Case/Model/Datasource/Database/SqlserverTest.php index b1c47642fda..32ad54e750e 100644 --- a/lib/Cake/Test/Case/Model/Datasource/Database/SqlserverTest.php +++ b/lib/Cake/Test/Case/Model/Datasource/Database/SqlserverTest.php @@ -304,24 +304,24 @@ public function testQuoting() { */ public function testFields() { $fields = array( - '[SqlserverTestModel].[id] AS [SqlserverTestModel__0]', - '[SqlserverTestModel].[client_id] AS [SqlserverTestModel__1]', - '[SqlserverTestModel].[name] AS [SqlserverTestModel__2]', - '[SqlserverTestModel].[login] AS [SqlserverTestModel__3]', - '[SqlserverTestModel].[passwd] AS [SqlserverTestModel__4]', - '[SqlserverTestModel].[addr_1] AS [SqlserverTestModel__5]', - '[SqlserverTestModel].[addr_2] AS [SqlserverTestModel__6]', - '[SqlserverTestModel].[zip_code] AS [SqlserverTestModel__7]', - '[SqlserverTestModel].[city] AS [SqlserverTestModel__8]', - '[SqlserverTestModel].[country] AS [SqlserverTestModel__9]', - '[SqlserverTestModel].[phone] AS [SqlserverTestModel__10]', - '[SqlserverTestModel].[fax] AS [SqlserverTestModel__11]', - '[SqlserverTestModel].[url] AS [SqlserverTestModel__12]', - '[SqlserverTestModel].[email] AS [SqlserverTestModel__13]', - '[SqlserverTestModel].[comments] AS [SqlserverTestModel__14]', - 'CONVERT(VARCHAR(20), [SqlserverTestModel].[last_login], 20) AS [SqlserverTestModel__15]', - '[SqlserverTestModel].[created] AS [SqlserverTestModel__16]', - 'CONVERT(VARCHAR(20), [SqlserverTestModel].[updated], 20) AS [SqlserverTestModel__17]' + '[SqlserverTestModel].[id] AS [SqlserverTestModel__id]', + '[SqlserverTestModel].[client_id] AS [SqlserverTestModel__client_id]', + '[SqlserverTestModel].[name] AS [SqlserverTestModel__name]', + '[SqlserverTestModel].[login] AS [SqlserverTestModel__login]', + '[SqlserverTestModel].[passwd] AS [SqlserverTestModel__passwd]', + '[SqlserverTestModel].[addr_1] AS [SqlserverTestModel__addr_1]', + '[SqlserverTestModel].[addr_2] AS [SqlserverTestModel__addr_2]', + '[SqlserverTestModel].[zip_code] AS [SqlserverTestModel__zip_code]', + '[SqlserverTestModel].[city] AS [SqlserverTestModel__city]', + '[SqlserverTestModel].[country] AS [SqlserverTestModel__country]', + '[SqlserverTestModel].[phone] AS [SqlserverTestModel__phone]', + '[SqlserverTestModel].[fax] AS [SqlserverTestModel__fax]', + '[SqlserverTestModel].[url] AS [SqlserverTestModel__url]', + '[SqlserverTestModel].[email] AS [SqlserverTestModel__email]', + '[SqlserverTestModel].[comments] AS [SqlserverTestModel__comments]', + 'CONVERT(VARCHAR(20), [SqlserverTestModel].[last_login], 20) AS [SqlserverTestModel__last_login]', + '[SqlserverTestModel].[created] AS [SqlserverTestModel__created]', + 'CONVERT(VARCHAR(20), [SqlserverTestModel].[updated], 20) AS [SqlserverTestModel__updated]' ); $result = $this->db->fields($this->model); @@ -336,18 +336,18 @@ public function testFields() { $this->db->clearFieldMappings(); $result = $this->db->fields($this->model, null, array('*', 'AnotherModel.id', 'AnotherModel.name')); $expected = array_merge($fields, array( - '[AnotherModel].[id] AS [AnotherModel__18]', - '[AnotherModel].[name] AS [AnotherModel__19]')); + '[AnotherModel].[id] AS [AnotherModel__id]', + '[AnotherModel].[name] AS [AnotherModel__name]')); $this->assertEqual($expected, $result); $this->db->clearFieldMappings(); $result = $this->db->fields($this->model, null, array('*', 'SqlserverClientTestModel.*')); $expected = array_merge($fields, array( - '[SqlserverClientTestModel].[id] AS [SqlserverClientTestModel__18]', - '[SqlserverClientTestModel].[name] AS [SqlserverClientTestModel__19]', - '[SqlserverClientTestModel].[email] AS [SqlserverClientTestModel__20]', - 'CONVERT(VARCHAR(20), [SqlserverClientTestModel].[created], 20) AS [SqlserverClientTestModel__21]', - 'CONVERT(VARCHAR(20), [SqlserverClientTestModel].[updated], 20) AS [SqlserverClientTestModel__22]')); + '[SqlserverClientTestModel].[id] AS [SqlserverClientTestModel__id]', + '[SqlserverClientTestModel].[name] AS [SqlserverClientTestModel__name]', + '[SqlserverClientTestModel].[email] AS [SqlserverClientTestModel__email]', + 'CONVERT(VARCHAR(20), [SqlserverClientTestModel].[created], 20) AS [SqlserverClientTestModel__created]', + 'CONVERT(VARCHAR(20), [SqlserverClientTestModel].[updated], 20) AS [SqlserverClientTestModel__updated]')); $this->assertEqual($expected, $result); } @@ -358,11 +358,11 @@ public function testFields() { */ public function testDistinctFields() { $result = $this->db->fields($this->model, null, array('DISTINCT Car.country_code')); - $expected = array('DISTINCT [Car].[country_code] AS [Car__0]'); + $expected = array('DISTINCT [Car].[country_code] AS [Car__country_code]'); $this->assertEqual($expected, $result); $result = $this->db->fields($this->model, null, 'DISTINCT Car.country_code'); - $expected = array('DISTINCT [Car].[country_code] AS [Car__1]'); + $expected = array('DISTINCT [Car].[country_code] AS [Car__country_code]'); $this->assertEqual($expected, $result); }