Skip to content

Commit

Permalink
Using the field name for aliasing for Sqlsrv as in Postgres, removing…
Browse files Browse the repository at this point in the history
… dead code
  • Loading branch information
lorenzo committed Jun 21, 2011
1 parent 97e51f1 commit d0ef655
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 61 deletions.
38 changes: 4 additions & 34 deletions lib/Cake/Model/Datasource/Database/Sqlserver.php
Expand Up @@ -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) == '*') {
Expand All @@ -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)";
Expand Down Expand Up @@ -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.
Expand Down
54 changes: 27 additions & 27 deletions lib/Cake/Test/Case/Model/Datasource/Database/SqlserverTest.php
Expand Up @@ -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);
Expand All @@ -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);
}

Expand All @@ -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);
}

Expand Down

0 comments on commit d0ef655

Please sign in to comment.