BigDb.php

<?php

namespace Tlf\BigDb\Test;

class BigDb extends \Tlf\Tester {



    public function prepare(){
        require_once($this->file('test/input/BigDbApp/ArticleDb.php'));
        require_once($this->file('test/input/BigDbApp/orm/Article.php'));
        require_once($this->file('test/input/BigDbApp/orm/Author.php'));
        require_once($this->file('test/input/BigDbApp/orm/Tag.php'));
    }


    public function testQueryWithBind(){
        $pdo = $this->getPdo();
        $db = new \Tlf\BigDb\Test\ArticlesDb($pdo);
        $db->recompile_sql();
        $db->migrate(0,1);
        
        $articles = $db->query('article', 'get_where', ['status'=>'public']);

        $rows = [];
        foreach ($articles as $a){
            $rows[] = ['id'=>$a->id, 'title'=>$a->title];
        }

        $this->test("Binding to SELECT works");
        $this->compare_arrays(
            [   
                ['id'=>1, 'title'=>'One'],
                ['id'=>2, 'title'=>'Two'],
                ['id'=>3, 'title'=>'Three'],
            ],
            $rows
        );

        $rowCount = $db->exec('article.insert_with_status', ['status'=>'pumpkin']);
        $this->test("Binding to INSERT works");
        $this->is_int($rowCount);

        $dirty_rows = $db->select('article', ['title'=>'Status']);
        $rows = [];
        foreach ($dirty_rows as $a){
            $a = (object)$a;
            $rows[] = ['id'=>$a->id, 'title'=>$a->title, 'status'=>$a->status];
        }
        $this->compare_arrays(
            [
                ['id'=>5, 'title'=>'Status', 'status'=>'pumpkin'],
            ],
            $rows
        );

    }

    public function testQueryArticles(){
        $pdo = $this->getPdo();
        $db = new \Tlf\BigDb\Test\ArticlesDb($pdo);
        $db->recompile_sql();
        $db->migrate(0,1);
        
        $articles = $db->query('article', 'get_public');

        $rows = [];
        foreach ($articles as $a){
            $rows[] = ['id'=>$a->id, 'title'=>$a->title];
        }

        $this->test("Use stored query to get public articles");
        $this->compare_arrays(
            [   ['id'=>1, 'title'=>'One'],
                ['id'=>2, 'title'=>'Two'],
                ['id'=>3, 'title'=>'Three'],
            ],
            $rows
        );


        $private_articles = $db->query('article', 'get_private');

        $rows = [];
        foreach ($private_articles as $a){
            $rows[] = ['id'=>$a->id, 'title'=>$a->title];
        }

        $this->test("Use stored query to get private articles");
        $this->compare_arrays(
            [   
                ['id'=>4, 'title'=>'Four, Private'],
            ],
            $rows
        );
    }

    public function testMain(){

        $pdo = $this->getPdo();
        $db = new \Tlf\BigDb\Test\ArticlesDb($pdo);
        $db->recompile_sql();
        $db->migrate(0,1);

        $articles = $db->get('article');

        $rows = [];
        foreach ($articles as $a){
            $rows[] = ['id'=>$a->id, 'title'=>$a->title];
        }

        $this->compare_arrays(
            [   ['id'=>1, 'title'=>'One'],
                ['id'=>2, 'title'=>'Two'],
                ['id'=>3, 'title'=>'Three'],
                ['id'=>4, 'title'=>'Four, Private'],
            ],
            $rows
        );


    }

}