use strict;
+use warnings;
use Test::More;
use lib qw(t/lib);
use dbixcsl_common_tests;
my $tester = dbixcsl_common_tests->new(
vendor => 'SQLite',
auto_inc_pk => 'INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT',
- dsn => "dbi:$class:dbname=$tdir/sqlite_test",
+ dsn => "dbi:$class:dbname=$tdir/sqlite_test.db",
user => '',
password => '',
connect_info_opts => {
on_connect_do => [ 'PRAGMA foreign_keys = ON', 'PRAGMA synchronous = OFF', ]
},
loader_options => { preserve_case => 1 },
+ default_is_deferrable => 0,
+ default_on_clause => 'NO ACTION',
data_types => {
# SQLite ignores data types aside from INTEGER pks.
# We just test that they roundtrip sanely.
PRIMARY KEY (id1, id2)
)
},
+ q{
+ create table extra_loader_test8 (
+ id integer primary key
+ )
+ },
+ q{
+ create table extra_loader_test9 (
+ id integer primary key,
+ eight_id int,
+ foreign key (eight_id) references extra_loader_test8(id)
+ on delete restrict on update set null deferrable
+ )
+ },
+ # test inline constraint
+ q{
+ create table extra_loader_test10 (
+ id integer primary key,
+ eight_id int references extra_loader_test8(id) on delete restrict on update set null deferrable
+ )
+ },
],
pre_drop_ddl => [ 'DROP VIEW extra_loader_test5' ],
- drop => [ qw/extra_loader_test1 extra_loader_test2 extra_loader_test3
- extra_loader_test4 extra_loader_test6 extra_loader_test7/ ],
- count => 11,
+ drop => [ qw/extra_loader_test1 extra_loader_test2 extra_loader_test3
+ extra_loader_test4 extra_loader_test6 extra_loader_test7
+ extra_loader_test8 extra_loader_test9 extra_loader_test10 / ],
+ count => 20,
run => sub {
my ($schema, $monikers, $classes) = @_;
is $schema->resultset($monikers->{extra_loader_test5})->result_source->column_info('person_id')->{data_type}, 'integer',
'columns for views are introspected';
+ # test that views are marked as such
+ isa_ok $schema->resultset($monikers->{extra_loader_test5})->result_source, 'DBIx::Class::ResultSource::View',
+ 'view result source';
+
isnt $schema->resultset($monikers->{extra_loader_test6})->result_source->column_info('id1')->{is_auto_increment}, 1,
q{two integer PKs don't get marked autoinc};
isnt $schema->resultset($monikers->{extra_loader_test7})->result_source->column_info('id1')->{is_auto_increment}, 1,
q{composite integer PK with non-integer PK doesn't get marked autoinc};
+
+ # test on delete/update fk clause introspection
+ ok ((my $rel_info = $schema->source('ExtraLoaderTest9')->relationship_info('eight')),
+ 'got rel info');
+
+ is $rel_info->{attrs}{on_delete}, 'RESTRICT',
+ 'ON DELETE clause introspected correctly';
+
+ is $rel_info->{attrs}{on_update}, 'SET NULL',
+ 'ON UPDATE clause introspected correctly';
+
+ is $rel_info->{attrs}{is_deferrable}, 1,
+ 'DEFERRABLE clause introspected correctly';
+
+ ok (($rel_info = $schema->source('ExtraLoaderTest10')->relationship_info('eight')),
+ 'got rel info');
+
+ is $rel_info->{attrs}{on_delete}, 'RESTRICT',
+ 'ON DELETE clause introspected correctly for inline FK';
+
+ is $rel_info->{attrs}{on_update}, 'SET NULL',
+ 'ON UPDATE clause introspected correctly for inline FK';
+
+ is $rel_info->{attrs}{is_deferrable}, 1,
+ 'DEFERRABLE clause introspected correctly for inline FK';
},
},
);
$tester->run_tests();
END {
- unlink "$tdir/sqlite_test";
+ unlink "$tdir/sqlite_test.db" unless $ENV{SCHEMA_LOADER_TESTS_NOCLEANUP};
}