public function testLimit()
 {
     MockDatabasePost::find('all', array('limit' => 15));
     $result = $this->db->sql;
     $expected = 'SELECT * FROM {mock_database_posts} AS {MockDatabasePost} LIMIT 15;';
     $this->assertEqual($expected, $result);
     MockDatabasePost::find('all', array('limit' => 10, 'page' => 3));
     $result = $this->db->sql;
     $expected = 'SELECT * FROM {mock_database_posts} AS {MockDatabasePost} LIMIT 10 OFFSET 20;';
     $this->assertEqual($expected, $result);
 }
示例#2
0
    public function testMultiHasManyRelationsWithLimit()
    {
        $this->_db->log = true;
        $this->_db->return['_execute'] = new MockResult(array('records' => array(array(0 => 5))));
        MockDatabasePost::find('first', array('conditions' => array('id' => 5, 'is_published' => true, 'MockDatabaseComment.is_spam' => false, 'MockDatabasePostRevision.title' => 'foo'), 'with' => array('MockDatabaseComment', 'MockDatabasePostRevision')));
        $this->_db->log = false;
        $result = $this->_db->logs;
        $expected[0] = <<<SQL
SELECT DISTINCT({MockDatabasePost}.{id}) AS _ID_
\tFROM {mock_database_posts} AS {MockDatabasePost}
\tLEFT JOIN {mock_database_comments} AS {MockDatabaseComment}
\t\tON {MockDatabasePost}.{id} = {MockDatabaseComment}.{mock_database_post_id}
\tLEFT JOIN {mock_database_post_revisions} AS {MockDatabasePostRevision}
\t\tON {MockDatabasePostRevision}.{deleted} IS NULL
\t\t\tAND {MockDatabasePost}.{id} = {MockDatabasePostRevision}.{mock_database_post_id}
\tWHERE
\t\t{MockDatabasePost}.{id} = 5
\t\tAND {MockDatabasePost}.{is_published} = 1
\t\tAND {MockDatabaseComment}.{is_spam} = 0
\t\tAND {MockDatabasePostRevision}.{title} = 'foo'
\tLIMIT 1;
SQL;
        $expected[1] = <<<SQL
SELECT * FROM {mock_database_posts} AS {MockDatabasePost}
\tLEFT JOIN {mock_database_comments} AS {MockDatabaseComment}
\t\tON {MockDatabasePost}.{id} = {MockDatabaseComment}.{mock_database_post_id}
\tLEFT JOIN {mock_database_post_revisions} AS {MockDatabasePostRevision}
\t\tON {MockDatabasePostRevision}.{deleted} IS NULL
\t\t\tAND {MockDatabasePost}.{id} = {MockDatabasePostRevision}.{mock_database_post_id}
\tWHERE
\t\t{MockDatabasePost}.{id} IN (5)
\t\tAND {MockDatabaseComment}.{is_spam} = 0
\t\tAND {MockDatabasePostRevision}.{title} = 'foo';
SQL;
        $expected = array_map(function ($v) {
            return preg_replace('/[\\t\\n]+/', ' ', $v);
        }, $expected);
        $this->assertEqual($expected, $result);
    }