Browse Source

Merge remote-tracking branch 'origin/1.3' into merger

Conflicts:
	cake/libs/controller/controller.php
	cake/libs/model/datasources/dbo/dbo_mysqli.php
	cake/tests/cases/libs/controller/controller.test.php
	cake/tests/cases/libs/model/datasources/dbo/dbo_mysql.test.php
	cake/tests/lib/cake_test_suite_dispatcher.php
	lib/Cake/Model/Behavior/TranslateBehavior.php
	lib/Cake/Model/Datasource/DataSource.php
	lib/Cake/Model/Datasource/Database/Mysql.php
mark_story 14 years ago
parent
commit
055224ef68

+ 3 - 3
lib/Cake/Controller/Component/PaginatorComponent.php

@@ -340,7 +340,7 @@ class PaginatorComponent extends Component {
 		}
 
 		if (!empty($options['order']) && is_array($options['order'])) {
-			$alias = $object->alias ;
+			$alias = $object->alias;
 			$key = $field = key($options['order']);
 
 			if (strpos($key, '.') !== false) {
@@ -351,7 +351,7 @@ class PaginatorComponent extends Component {
 
 			if ($object->hasField($field)) {
 				$options['order'][$alias . '.' . $field] = $value;
-			} elseif ($object->hasField($field, true)) {
+			} elseif ($object->hasField($key, true)) {
 				$options['order'][$field] = $value;
 			} elseif (isset($object->{$alias}) && $object->{$alias}->hasField($field)) {
 				$options['order'][$alias . '.' . $field] = $value;
@@ -375,4 +375,4 @@ class PaginatorComponent extends Component {
 		$options['limit'] = min((int)$options['limit'], $options['maxLimit']);
 		return $options;
 	}
-}
+}

+ 3 - 3
lib/Cake/Model/AclNode.php

@@ -85,7 +85,7 @@ class AclNode extends AppModel {
 					$db->name("{$type}.rght") . ' >= ' . $db->name("{$type}0.rght")),
 				'fields' => array('id', 'parent_id', 'model', 'foreign_key', 'alias'),
 				'joins' => array(array(
-					'table' => $db->fullTableName($this),
+					'table' => $table,
 					'alias' => "{$type}0",
 					'type' => 'LEFT',
 					'conditions' => array("{$type}0.alias" => $start)
@@ -97,7 +97,7 @@ class AclNode extends AppModel {
 				$j = $i - 1;
 
 				$queryData['joins'][] = array(
-					'table' => $db->fullTableName($this),
+					'table' => $table,
 					'alias' => "{$type}{$i}",
 					'type'  => 'LEFT',
 					'conditions' => array(
@@ -163,7 +163,7 @@ class AclNode extends AppModel {
 				'conditions' => $ref,
 				'fields' => array('id', 'parent_id', 'model', 'foreign_key', 'alias'),
 				'joins' => array(array(
-					'table' => $db->fullTableName($this),
+					'table' => $table,
 					'alias' => "{$type}0",
 					'type' => 'LEFT',
 					'conditions' => array(

+ 6 - 7
lib/Cake/Model/Behavior/TranslateBehavior.php

@@ -99,17 +99,16 @@ class TranslateBehavior extends ModelBehavior {
 		} else {
 			$tablePrefix = $db->config['prefix'];
 		}
-
-		if ($tablePrefix == $db->config['prefix']) {
-			$tablePrefix = null;
-		}
+		$joinTable = new StdClass();
+		$joinTable->tablePrefix = $tablePrefix;
+		$joinTable->table = $RuntimeModel->table;
 
 		if (is_string($query['fields']) && 'COUNT(*) AS '.$db->name('count') == $query['fields']) {
 			$query['fields'] = 'COUNT(DISTINCT('.$db->name($model->alias . '.' . $model->primaryKey) . ')) ' . $db->alias . 'count';
 			$query['joins'][] = array(
 				'type' => 'INNER',
 				'alias' => $RuntimeModel->alias,
-				'table' => $db->fullTableName($tablePrefix . $RuntimeModel->useTable),
+				'table' => $joinTable,
 				'conditions' => array(
 					$model->alias . '.' . $model->primaryKey => $db->identifier($RuntimeModel->alias.'.foreign_key'),
 					$RuntimeModel->alias.'.model' => $model->name,
@@ -155,7 +154,7 @@ class TranslateBehavior extends ModelBehavior {
 						$query['joins'][] = array(
 							'type' => 'LEFT',
 							'alias' => 'I18n__'.$field.'__'.$_locale,
-							'table' => $db->fullTableName($tablePrefix . $RuntimeModel->useTable),
+							'table' => $joinTable,
 							'conditions' => array(
 								$model->alias . '.' . $model->primaryKey => $db->identifier("I18n__{$field}__{$_locale}.foreign_key"),
 								'I18n__'.$field.'__'.$_locale.'.model' => $model->name,
@@ -172,7 +171,7 @@ class TranslateBehavior extends ModelBehavior {
 					$query['joins'][] = array(
 						'type' => 'LEFT',
 						'alias' => 'I18n__'.$field,
-						'table' => $db->fullTableName($tablePrefix . $RuntimeModel->useTable),
+						'table' => $joinTable,
 						'conditions' => array(
 							$model->alias . '.' . $model->primaryKey => $db->identifier("I18n__{$field}.foreign_key"),
 							'I18n__'.$field.'.model' => $model->name,

+ 2 - 4
lib/Cake/Model/Datasource/DataSource.php

@@ -223,13 +223,11 @@ class DataSource extends Object {
  * To-be-overridden in subclasses.
  *
  * @param Model $model The model class having record(s) deleted
- * @param mixed $id Primary key of the model
+ * @param mixed $conditions The conditions to use for deleting.
  * @return void
  */
 	public function delete(Model $model, $id = null) {
-		if ($id == null) {
-			$id = $model->id;
-		}
+		return false;
 	}
 
 /**

+ 1 - 1
lib/Cake/Model/Datasource/DboSource.php

@@ -328,7 +328,7 @@ class DboSource extends DataSource {
 					return 'NULL';
 				}
 				if (is_float($data)) {
-					return str_replace(',', '.', sprintf('%G', $data));
+					return str_replace(',', '.', strval($data));
 				}
 				if ((is_int($data) || $data === '0') || (
 					is_numeric($data) && strpos($data, ',') === false &&

+ 1 - 1
lib/Cake/Model/Model.php

@@ -1326,7 +1326,7 @@ class Model extends Object {
 		}
 		if (strpos($field, '.') !== false) {
 			list($model, $field) = explode('.', $field);
-			if (isset($this->virtualFields[$field])) {
+			if ($model == $this->alias && isset($this->virtualFields[$field])) {
 				return true;
 			}
 		}

+ 31 - 0
lib/Cake/Test/Case/Controller/Component/PaginatorComponentTest.php

@@ -742,5 +742,36 @@ class PaginatorComponentTest extends CakeTestCase {
 		$Controller->request->params['named'] = array('contain' => array('ControllerComment'), 'limit' => '5000');
 		$result = $Controller->paginate('PaginatorControllerPost');
 		$this->assertEqual($Controller->params['paging']['PaginatorControllerPost']['options']['limit'], 2000);
+	 }
+
+/**
+ * test paginate() and virtualField overlapping with real fields.
+ *
+ * @return void
+ */
+	function testPaginateOrderVirtualFieldSharedWithRealField() {
+		$Controller =& new Controller();
+		$Controller->uses = array('ControllerPost', 'ControllerComment');
+		$Controller->request->params['url'] = array();
+		$Controller->constructClasses();
+		$Controller->ControllerComment->virtualFields = array(
+			'title' => 'ControllerComment.comment'
+		);
+		$Controller->ControllerComment->bindModel(array(
+			'belongsTo' => array(
+				'ControllerPost' => array(
+					'className' => 'ControllerPost',
+					'foreignKey' => 'article_id'
+				)
+			)
+		), false);
+
+		$Controller->paginate = array(
+			'fields' => array('ControllerComment.id', 'title', 'ControllerPost.title'),
+		);
+		$Controller->passedArgs = array('sort' => 'ControllerPost.title', 'dir' => 'asc');
+		$result = $Controller->paginate('ControllerComment');
+		$this->assertEqual(Set::extract($result, '{n}.ControllerComment.id'), array(1, 2, 3, 4, 5, 6));
 	}
+
 }

+ 12 - 0
lib/Cake/Test/Case/Model/Datasource/Database/MysqlTest.php

@@ -155,6 +155,18 @@ class MysqlTest extends CakeTestCase {
 		$result = $this->Dbo->value(3.141593);
 		$this->assertTrue(strpos((string)$result, ',') === false);
 
+		$result = $this->db->value(3.141593);
+		$this->assertEqual('3.141593', $result);
+
+		$result = $this->db->value(1234567.11, 'float');
+		$this->assertEqual('1234567.11', $result);
+
+		$result = $this->db->value(123456.45464748, 'float');
+		$this->assertEqual('123456.454647', $result);
+
+		$result = $this->db->value(0.987654321, 'float');
+		$this->assertEqual('0.987654321', (string)$result);
+
 		$result = $this->db->value(2.2E-54, 'float');
 		$this->assertEqual('2.2E-54', (string)$result);
 

+ 1 - 0
lib/Cake/Test/Case/Model/ModelReadTest.php

@@ -7535,6 +7535,7 @@ class ModelReadTest extends BaseModelTest {
 
 		$this->assertTrue($Post->isVirtualField('other_field'));
 		$this->assertTrue($Post->isVirtualField('Post.other_field'));
+		$this->assertFalse($Post->isVirtualField('Comment.other_field'), 'Other models should not match.');
 		$this->assertFalse($Post->isVirtualField('id'));
 		$this->assertFalse($Post->isVirtualField('Post.id'));
 		$this->assertFalse($Post->isVirtualField(array()));