Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

fix a DboDataSource buildJoinStatement bug that table prefix is appen…

…ded to subquery
  • Loading branch information...
commit 5ac5e784deef2ce45a9eb645505c5bd8850f4c46 1 parent ee08fe5
@perrywky perrywky authored
View
5 lib/Cake/Model/Datasource/DboSource.php
@@ -1691,9 +1691,8 @@ public function buildJoinStatement($join) {
if (!empty($data['conditions'])) {
$data['conditions'] = trim($this->conditions($data['conditions'], true, false));
}
- if (!empty($data['table'])) {
- $schema = !(is_string($data['table']) && strpos($data['table'], '(') === 0);
- $data['table'] = $this->fullTableName($data['table'], true, $schema);
+ if (!empty($data['table']) && (!is_string($data['table']) || strpos($data['table'], '(') !== 0)){
+ $data['table'] = $this->fullTableName($data['table']);
}
return $this->renderJoinStatement($data);
}
View
36 lib/Cake/Test/Case/Model/Datasource/DboSourceTest.php
@@ -1122,6 +1122,42 @@ public function testBuildJoinStatement($join, $expected) {
}
/**
+ * data provider for testBuildJoinStatementWithTablePrefix
+ *
+ * @return array
+ */
+ public static function joinStatementsWithPrefix($schema) {
+ return array(
+ array(array(
+ 'type' => 'LEFT',
+ 'alias' => 'PostsTag',
+ 'table' => 'posts_tags',
+ 'conditions' => array('PostsTag.post_id = Post.id')
+ ), 'LEFT JOIN pre_posts_tags AS PostsTag ON (PostsTag.post_id = Post.id)'),
+ array(array(
+ 'type' => 'LEFT',
+ 'alias' => 'Stock',
+ 'table' => '(SELECT Stock.article_id, sum(quantite) quantite FROM stocks AS Stock GROUP BY Stock.article_id)',
+ 'conditions' => 'Stock.article_id = Article.id'
+ ), 'LEFT JOIN (SELECT Stock.article_id, sum(quantite) quantite FROM stocks AS Stock GROUP BY Stock.article_id) AS Stock ON (Stock.article_id = Article.id)')
+ );
+ }
+
+/**
+ * Test buildJoinStatement()
+ * ensure that prefix is not added when table value is a subquery
+ *
+ * @dataProvider joinStatementsWithPrefix
+ * @return void
+ */
+ public function testBuildJoinStatementWithTablePrefix($join, $expected) {
+ $db = new DboTestSource;
+ $db->config['prefix'] = 'pre_';
+ $result = $db->buildJoinStatement($join);
+ $this->assertEquals($expected, $result);
+ }
+
+/**
* Test conditionKeysToString()
*
* @return void
Please sign in to comment.
Something went wrong with that request. Please try again.