DBIx-QuickORM

 view release on metacpan or  search on metacpan

t/builder.t  view on Meta::CPAN

    table aliases => sub {
        column alias_id => sub {
            primary_key;
            serial;
            sql_spec type => 'INTEGER';
        };

        column person_id => sub {
            sql_spec type => 'INTEGER';

            references person => (on_delete => 'cascade');
        };

        column alias => sub {
            sql_spec(type => 'VARCHAR(128)');
        };

        unique(qw/person_id alias/);

        index unnecessary_index => qw/person_id alias/;

        relation person_way2 => (table => 'person', using => 'person_id', on_delete => 'cascade');
        relation sub { as 'person_way3'; table 'person'; using 'person_id'; on_delete 'cascade' };
        relation as 'person_way4', rtable 'person', on {'person_id' => 'person_id'}, on_delete 'cascade';
        relation as 'person_way5', rtable('person'), using 'person_id',               on_delete 'cascade';
        relation person_way6 => ('person' => ['person_id'], on_delete => 'cascade');
    };
};

my ($pg_sql, $mariadb_sql, $sqlite_sql, $mysql_sql, $percona_sql);
subtest PostgreSQL => sub {
    skip_all "Could not find PostgreSQL" unless $psql;
    my $pdb = db('postgresql');
    isa_ok($pdb, ['DBIx::QuickORM::DB', 'DBIx::QuickORM::DB::PostgreSQL'], "Got a database instance");

    my $orm = orm('simple_pg', schema => 'simple', db => 'postgresql');
    isa_ok($orm, ['DBIx::QuickORM::ORM'], "Got correct ORM type");
    ref_is(orm('simple_pg'), $orm, "Instance cached");
    is($orm->db, $pdb, "Orm uses the postgresql database");

    $pg_sql = $orm->generate_schema_sql;

    like($pg_sql, qr/CREATE EXTENSION "uuid-ossp";/, "Added extension");
    like($pg_sql, qr/CREATE TYPE choice AS ENUM\('foo', 'bar', 'baz'\)/, "Added enum type");
    like($pg_sql, qr/FOREIGN KEY\(person_id\) REFERENCES person\(person_id\) ON DELETE cascade/, "Added foreign key");

    ok(lives { $orm->load_schema_sql($pg_sql) }, "loaded schema");
    is([sort $orm->connection->tables], [qw/aliases person/], "Loaded both tables");
};

subtest MySQL => sub {
    skip_all "Could not find MySQL" unless $mysql;
    my $pdb = db('mysql');
    isa_ok($pdb, ['DBIx::QuickORM::DB', 'DBIx::QuickORM::DB::MySQL'], "Got a database instance");

    my $orm = orm('simple_mysql', schema => 'simple', db => 'mysql');
    isa_ok($orm, ['DBIx::QuickORM::ORM'], "Got correct ORM type");
    ref_is(orm('simple_mysql'), $orm, "Instance cached");
    is($orm->db, $pdb, "Orm uses the mysql database");

    $mysql_sql = $orm->generate_schema_sql;
    like($mysql_sql, qr/FOREIGN KEY\(person_id\) REFERENCES person\(person_id\) ON DELETE cascade/, "Added foreign key");
    ok(lives { $orm->load_schema_sql($mysql_sql) }, "loaded schema");

    is([sort $orm->connection->tables], [qw/aliases person/], "Loaded both tables");
};

subtest Percona => sub {
    skip_all "Could not find Percona" unless $percona;
    my $pdb = db('percona');
    isa_ok($pdb, ['DBIx::QuickORM::DB', 'DBIx::QuickORM::DB::MySQL', 'DBIx::QuickORM::DB::Percona'], "Got a database instance");

    my $orm = orm('simple_percona', schema => 'simple', db => 'percona');
    isa_ok($orm, ['DBIx::QuickORM::ORM'], "Got correct ORM type");
    ref_is(orm('simple_percona'), $orm, "Instance cached");
    is($orm->db, $pdb, "Orm uses the percona database");

    $percona_sql = $orm->generate_schema_sql;
    like($percona_sql, qr/FOREIGN KEY\(person_id\) REFERENCES person\(person_id\) ON DELETE cascade/, "Added foreign key");
    ok(lives { $orm->load_schema_sql($percona_sql) }, "loaded schema");

    is([sort $orm->connection->tables], [qw/aliases person/], "Loaded both tables");
};

subtest MariaDB => sub {
    skip_all "Could not find MariaDB" unless $mariadb;
    my $pdb = db('mariadb');
    isa_ok($pdb, ['DBIx::QuickORM::DB', 'DBIx::QuickORM::DB::MySQL', 'DBIx::QuickORM::DB::MariaDB'], "Got a database instance");

    my $orm = orm('simple_mariadb', schema => 'simple', db => 'mariadb');
    isa_ok($orm, ['DBIx::QuickORM::ORM'], "Got correct ORM type");
    ref_is(orm('simple_mariadb'), $orm, "Instance cached");
    is($orm->db, $pdb, "Orm uses the mariadb database");

    $mariadb_sql = $orm->generate_schema_sql;
    like($mariadb_sql, qr/FOREIGN KEY\(person_id\) REFERENCES person\(person_id\) ON DELETE cascade/, "Added foreign key");
    ok(lives { $orm->load_schema_sql($mariadb_sql) }, "loaded schema");

    is([sort $orm->connection->tables], [qw/aliases person/], "Loaded both tables");
};

subtest SQLite => sub {
    skip_all "Could not find SQLite" unless $sqlite;
    my $pdb = db('sqlite');
    isa_ok($pdb, ['DBIx::QuickORM::DB', 'DBIx::QuickORM::DB::SQLite'], "Got a database instance");

    my $orm = orm('simple_sqlite', schema => 'simple', db => 'sqlite');
    isa_ok($orm, ['DBIx::QuickORM::ORM'], "Got correct ORM type");
    ref_is(orm('simple_sqlite'), $orm, "Instance cached");
    is($orm->db, $pdb, "Orm uses the sqlite database");

    $sqlite_sql = $orm->generate_schema_sql;
    like($sqlite_sql, qr/FOREIGN KEY\(person_id\) REFERENCES person\(person_id\) ON DELETE cascade/, "Added foreign key");
    ok(lives { $orm->load_schema_sql($sqlite_sql) }, "loaded schema");

    is([sort $orm->connection->tables], [qw/aliases person/], "Loaded both tables");
};

done_testing;

t/simple.t  view on Meta::CPAN

    };

    table aliases => sub {
        column alias_id => sub {
            primary_key;
            serial;
        };

        column person_id => sub {
            sql_type 'biginteger';
            references person => (on_delete => 'cascade', prefetch => 1);
        };

        column alias => sub {
            sql_type \'VARCHAR(128)'; # Just verifying escape works, nothing special about it.
        };

        unique(qw/person_id alias/);

        relation person_way2 => (table => 'person', using => 'person_id', on_delete => 'cascade');
        relation sub { as 'person_way3'; table 'person'; using 'person_id'; on_delete 'cascade' };
        relation as 'person_way4', rtable 'person', on {'person_id' => 'person_id'}, on_delete 'cascade';
        relation as 'person_way5', rtable('person'), using 'person_id',               on_delete 'cascade';
        relation person_way6 => ('person' => ['person_id'], on_delete => 'cascade');
    };

    relate(
        person  => ['aliases_link', ['person_id'], method => 'select'],
        aliases => {as => 'person_link', on => {'person_id' => 'person_id'}, method => 'find', on_delete => 'cascade'},
    );
}

orm postgresql_auto => sub {
    autofill 1;
    db_class 'PostgreSQL';
    db_name 'quickdb';
    db_connect sub { $psql->connect };

    _schema();



( run in 0.462 second using v1.01-cache-2.11-cpan-49f99fa48dc )