use Digest::MD5;
use File::Find 'find';
use Class::Unload ();
-use Data::Dumper::Concise;
+use DBIx::Class::Schema::Loader::Utils 'dumper_squashed';
use List::MoreUtils 'apply';
+use DBIx::Class::Schema::Loader::Optional::Dependencies ();
+use namespace::clean;
-my $DUMP_DIR = './t/_common_dump';
+use dbixcsl_test_dir qw/$tdir/;
+
+my $DUMP_DIR = "$tdir/common_dump";
rmtree $DUMP_DIR;
sub new {
# Optional extra tables and tests
$self->{extra} ||= {};
- $self->{date_datatype} ||= 'DATE';
+ $self->{basic_date_datatype} ||= 'DATE';
# Not all DBS do SQL-standard CURRENT_TIMESTAMP
$self->{default_function} ||= "current_timestamp";
my $extra_count = $self->{extra}{count} || 0;
- plan tests => @connect_info * (181 + $extra_count + ($self->{data_type_tests}{test_count} || 0));
+ plan tests => @connect_info * (182 + $extra_count + ($self->{data_type_tests}{test_count} || 0));
foreach my $info_idx (0..$#connect_info) {
my $info = $connect_info[$info_idx];
my $self = shift;
my $dbh = $self->dbconnect(0);
- $dbh->do($_) for @{ $self->{extra}{pre_drop_ddl} || [] };
+
+ {
+ local $SIG{__WARN__} = sub {}; # postgres notices
+ $dbh->do($_) for @{ $self->{extra}{pre_drop_ddl} || [] };
+ }
+
$dbh->do("DROP TABLE $_") for @{ $self->{extra}{drop} || [] };
foreach my $data_type_table (@{ $self->{data_type_tests}{table_names} || [] }) {
my $debug = ($self->{verbose} > 1) ? 1 : 0;
+ if (
+ $ENV{SCHEMA_LOADER_TESTS_USE_MOOSE}
+ &&
+ ! DBIx::Class::Schema::Loader::Optional::Dependencies->req_ok_for('use_moose')
+ ) {
+ die sprintf ("Missing dependencies for SCHEMA_LOADER_TESTS_USE_MOOSE: %s\n",
+ DBIx::Class::Schema::Loader::Optional::Dependencies->req_missing_for('use_moose')
+ );
+ }
+
my %loader_opts = (
constraint =>
- qr/^(?:\S+\.)?(?:(?:$self->{vendor}|extra)_?)?loader_?test[0-9]+(?!.*_)/i,
+ qr/^(?:\S+\.)?(?:(?:$self->{vendor}|extra)_?)?loader_?test[0-9]+(?!.*_)/i,
relationships => 1,
additional_classes => 'TestAdditional',
additional_base_classes => 'TestAdditionalBase',
dump_directory => $DUMP_DIR,
datetime_timezone => 'Europe/Berlin',
datetime_locale => 'de_DE',
+ use_moose => $ENV{SCHEMA_LOADER_TESTS_USE_MOOSE},
%{ $self->{loader_options} || {} },
);
isa_ok( $rsobj35, "DBIx::Class::ResultSet" );
my @columns_lt2 = $class2->columns;
- is_deeply( \@columns_lt2, [ qw/id dat dat2 set_primary_key dbix_class_testcomponent/ ], "Column Ordering" );
+ is_deeply( \@columns_lt2, [ qw/id dat dat2 set_primary_key dbix_class_testcomponent meta/ ], "Column Ordering" );
is $class2->column_info('set_primary_key')->{accessor}, undef,
'accessor for column name that conflicts with a result base class method removed';
is $class2->column_info('dbix_class_testcomponent')->{accessor}, undef,
'accessor for column name that conflicts with a component class method removed';
+ is $class2->column_info('meta')->{accessor}, undef,
+ 'accessor for column name that conflicts with Moose removed';
+
my %uniq1 = $class1->unique_constraints;
my $uniq1_test = 0;
foreach my $ucname (keys %uniq1) {
is $rsobj4->result_source->relationship_info('fkid_singular')->{attrs}{on_update}, 'CASCADE',
"on_update => 'CASCADE' on belongs_to by default";
- ok ((not exists $rsobj4->result_source->relationship_info('fkid_singular')->{attrs}{is_deferrable}),
- "is_deferrable => 1 not on belongs_to by default");
+ is $rsobj4->result_source->relationship_info('fkid_singular')->{attrs}{is_deferrable}, 1,
+ "is_deferrable => 1 on belongs_to by default";
ok ((not exists $rsobj4->result_source->relationship_info('fkid_singular')->{attrs}{cascade_delete}),
'belongs_to does not have cascade_delete');
find $find_cb, $DUMP_DIR;
# system "rm -f /tmp/before_rescan/* /tmp/after_rescan/*";
-# system "cp t/_common_dump/DBIXCSL_Test/Schema/*.pm /tmp/before_rescan";
+# system "cp $tdir/common_dump/DBIXCSL_Test/Schema/*.pm /tmp/before_rescan";
my $before_digest = $digest->b64digest;
my %info = %{ $rsrc->column_info($col_name) };
delete @info{qw/is_nullable timezone locale sequence/};
- my $text_col_def = do {
- my $dd = Dumper;
- $dd->Indent(0);
- $dd->Values([\%info]);
- $dd->Dump;
- };
+ my $text_col_def = dumper_squashed \%info;
- my $text_expected_info = do {
- my $dd = Dumper;
- $dd->Indent(0);
- $dd->Values([$expected_info]);
- $dd->Dump;
- };
+ my $text_expected_info = dumper_squashed $expected_info;
is_deeply \%info, $expected_info,
"test column $col_name has definition: $text_col_def expecting: $text_expected_info";
$self->{_created} = 1;
+ $self->drop_tables;
+
my $make_auto_inc = $self->{auto_inc_cb} || sub {};
@statements = (
qq{
dat2 VARCHAR(32) NOT NULL,
set_primary_key INTEGER $self->{null},
dbix_class_testcomponent INTEGER $self->{null},
+ meta INTEGER $self->{null},
UNIQUE (dat2, dat)
) $self->{innodb}
},
qq{
CREATE TABLE loader_test36 (
id INTEGER NOT NULL PRIMARY KEY,
- a_date $self->{date_datatype},
+ a_date $self->{basic_date_datatype},
b_char_as_data VARCHAR(100),
c_char_as_data VARCHAR(100)
) $self->{innodb}
);
$self->drop_tables;
- $self->drop_tables; # twice for good measure
my $dbh = $self->dbconnect(1);
my $self = shift;
my @tables = qw/
+ loader_test1
loader_test1s
loader_test2
LOADER_test23
my $drop_fk =
q{ALTER TABLE loader_test10 DROP CONSTRAINT loader_test11_fk};
- my $dbh = $self->dbconnect(0);
+ # For some reason some tests do this twice (I guess dependency issues?)
+ # do it twice for all drops
+ for (1,2) {
+ my $dbh = $self->dbconnect(0);
- $dbh->do($_) for @{ $self->{extra}{pre_drop_ddl} || [] };
- $dbh->do("DROP TABLE $_") for @{ $self->{extra}{drop} || [] };
+ {
+ local $SIG{__WARN__} = sub {}; # postgres notices
+ $dbh->do($_) for @{ $self->{extra}{pre_drop_ddl} || [] };
+ }
- my $drop_auto_inc = $self->{auto_inc_drop_cb} || sub {};
+ $dbh->do("DROP TABLE $_") for @{ $self->{extra}{drop} || [] };
- unless($self->{skip_rels}) {
+ my $drop_auto_inc = $self->{auto_inc_drop_cb} || sub {};
+
+ unless($self->{skip_rels}) {
$dbh->do("DROP TABLE $_") for (@tables_reltests);
$dbh->do("DROP TABLE $_") for (@tables_reltests);
if($self->{vendor} =~ /mysql/i) {
unless($self->{no_implicit_rels}) {
$dbh->do("DROP TABLE $_") for (@tables_implicit_rels);
}
- }
- $dbh->do($_) for map { $drop_auto_inc->(@$_) } @tables_auto_inc;
- $dbh->do("DROP TABLE $_") for (@tables, @tables_rescan);
+ }
+ $dbh->do($_) for map { $drop_auto_inc->(@$_) } @tables_auto_inc;
+ $dbh->do("DROP TABLE $_") for (@tables, @tables_rescan);
- foreach my $data_type_table (@{ $self->{data_type_tests}{table_names} || [] }) {
+ foreach my $data_type_table (@{ $self->{data_type_tests}{table_names} || [] }) {
$dbh->do("DROP TABLE $data_type_table");
- }
+ }
- my ($oqt, $cqt) = $self->get_oqt_cqt(always => 1);
+ my ($oqt, $cqt) = $self->get_oqt_cqt(always => 1);
- $dbh->do("DROP TABLE ${oqt}${_}${cqt}") for @tables_preserve_case_tests;
+ $dbh->do("DROP TABLE ${oqt}${_}${cqt}") for @tables_preserve_case_tests;
- $dbh->disconnect;
-
-# fixup for Firebird
- $dbh = $self->dbconnect(0);
- $dbh->do('DROP TABLE loader_test2');
- $dbh->disconnect;
+ $dbh->disconnect;
+ }
}
sub _custom_column_info {
my %DATA_TYPE_MULTI_TABLE_OVERRIDES = (
oracle => qr/\blong\b/i,
mssql => qr/\b(?:timestamp|rowversion)\b/i,
+ informix => qr/\b(?:bigserial|serial8)\b/i,
);
sub setup_data_type_tests {
sub DESTROY {
my $self = shift;
unless ($ENV{SCHEMA_LOADER_TESTS_NOCLEANUP}) {
- $self->drop_tables if $self->{_created};
- rmtree $DUMP_DIR
+ $self->drop_tables if $self->{_created};
+ rmtree $DUMP_DIR
}
}