lithium\tests\cases\data\source\DatabaseTest::testNestedQueryConditions PHP Method

testNestedQueryConditions() public method

    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));
    }
DatabaseTest