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";
$expected .= " ('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";
$expected .= " {mock_database_posts} AS {MockDatabasePost} WHERE ({Post}.{id} NOT IN";
$expected .= " (SELECT {MockDatabaseTagging}.{post_id} FROM {mock_database_taggings} AS ";
$expected .= "{MockDatabaseTagging} WHERE {MockDatabaseTag}.{tag} IN ";
$expected .= "('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));
}