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