public function testNestedQueryConditions() {
$query = new Query(array(
'type' => 'read',
'model' => $this->_model,
'fields' => array('MockDatabasePost.title', 'MockDatabasePost.body'),
'conditions' => array('Post.id' => new Query(array(
'type' => 'read',
'fields' => array('post_id'),
'model' => 'lithium\tests\mocks\data\model\MockDatabaseTagging',
'conditions' => array('MockDatabaseTag.tag' => array('foo', 'bar', 'baz'))
)))
));
$result = $this->db->renderCommand($query);
$expected = "SELECT MockDatabasePost.title, MockDatabasePost.body FROM";
$expected .= " {mock_database_posts} AS {MockDatabasePost} WHERE Post.id IN";
$expected .= " (SELECT MockDatabaseTagging.post_id FROM {mock_database_taggings} AS ";
$expected .= "{MockDatabaseTagging} WHERE MockDatabaseTag.tag IN ('foo', 'bar', 'baz'));";
$this->assertEqual($expected, $result);
$query = new Query(array(
'type' => 'read',
'model' => $this->_model,
'fields' => array('MockDatabasePost.title', 'MockDatabasePost.body'),
'conditions' => array('Post.id' => array('!=' => new Query(array(
'type' => 'read',
'fields' => array('post_id'),
'model' => 'lithium\tests\mocks\data\model\MockDatabaseTagging',
'conditions' => array('MockDatabaseTag.tag' => array('foo', 'bar', 'baz'))
))))
));
$result = $this->db->renderCommand($query);
$expected = "SELECT MockDatabasePost.title, MockDatabasePost.body FROM" .
" {mock_database_posts} AS {MockDatabasePost} WHERE ({Post}.{id} NOT IN" .
" (SELECT MockDatabaseTagging.post_id FROM {mock_database_taggings} AS " .
"{MockDatabaseTagging} WHERE MockDatabaseTag.tag IN " .
"('foo', 'bar', 'baz')));";
$this->assertEqual($expected, $result);
$query = new Query(array(
'type' => 'read', 'model' => $this->_model,
'conditions' => array(
'or' => array(
'{MockDatabasePost}.{id}' => 'value1',
'{MockDatabasePost}.{title}' => 'value2'
)
)
));
$sql = "SELECT * FROM {mock_database_posts} AS {MockDatabasePost} WHERE ";
$sql .= "({MockDatabasePost}.{id} = 'value1' OR {MockDatabasePost}.{title} = 'value2');";
$this->assertEqual($sql, $this->db->renderCommand($query));
}