5 use Data::Dumper::Concise;
10 'DBIx::Class::Storage::DBI' =>
11 # no default quote_char
14 'DBIx::Class::Storage::DBI::MSSQL' =>
15 { quote_char => [ '[', ']' ], name_sep => '.' },
17 'DBIx::Class::Storage::DBI::DB2' =>
18 { quote_char => '"', name_sep => '.' },
20 'DBIx::Class::Storage::DBI::Informix' =>
21 { quote_char => '"', name_sep => '.' },
23 'DBIx::Class::Storage::DBI::InterBase' =>
24 { quote_char => '"', name_sep => '.' },
26 'DBIx::Class::Storage::DBI::mysql' =>
27 { quote_char => '`', name_sep => '.' },
29 'DBIx::Class::Storage::DBI::Pg' =>
30 { quote_char => '"', name_sep => '.' },
32 'DBIx::Class::Storage::DBI::ODBC::ACCESS' =>
33 { quote_char => [ '[', ']' ], name_sep => '.' },
35 # Not testing this one, it's a pain.
36 # 'DBIx::Class::Storage::DBI::ODBC::DB2_400_SQL' =>
37 # { quote_char => '"', name_sep => qr/must be connected/ },
39 'DBIx::Class::Storage::DBI::Oracle::Generic' =>
40 { quote_char => '"', name_sep => '.' },
42 'DBIx::Class::Storage::DBI::SQLAnywhere' =>
43 { quote_char => '"', name_sep => '.' },
45 'DBIx::Class::Storage::DBI::SQLite' =>
46 { quote_char => '"', name_sep => '.' },
48 'DBIx::Class::Storage::DBI::Sybase::ASE' =>
49 { quote_char => [ '[', ']' ], name_sep => '.' },
52 for my $class (keys %expected) { SKIP: {
53 eval "require ${class}"
54 or skip "Skipping test of quotes for $class due to missing dependencies", 1;
56 my $mapping = $expected{$class};
57 my ($quote_char, $name_sep) = @$mapping{qw/quote_char name_sep/};
58 my $instance = $class->new;
60 my $quote_char_text = dumper($quote_char);
62 if (exists $mapping->{quote_char}) {
63 is_deeply $instance->sql_quote_char, $quote_char,
64 "sql_quote_char for $class is $quote_char_text";
67 is $instance->sql_name_sep, $name_sep,
68 "sql_name_sep for $class is '$name_sep'";
71 # Try quote_names with available DBs.
75 my $schema = DBICTest->init_schema(quote_names => 1);
77 is $schema->storage->sql_maker->quote_char, '"',
78 q{quote_names => 1 sets correct quote_char for SQLite ('"')};
80 is $schema->storage->sql_maker->name_sep, '.',
81 q{quote_names => 1 sets correct name_sep for SQLite (".")};
85 # Env var to base class mapping, these are the DBs I actually have.
88 ORA => 'DBIx::Class::Storage::DBI::Oracle::Generic',
89 PG => 'DBIx::Class::Storage::DBI::Pg',
90 MYSQL => 'DBIx::Class::Storage::DBI::mysql',
91 DB2 => 'DBIx::Class::Storage::DBI::DB2',
92 SYBASE => 'DBIx::Class::Storage::DBI::Sybase::ASE',
93 SQLANYWHERE => 'DBIx::Class::Storage::DBI::SQLAnywhere',
94 SQLANYWHERE_ODBC => 'DBIx::Class::Storage::DBI::SQLAnywhere',
95 FIREBIRD => 'DBIx::Class::Storage::DBI::InterBase',
96 FIREBIRD_ODBC => 'DBIx::Class::Storage::DBI::InterBase',
97 INFORMIX => 'DBIx::Class::Storage::DBI::Informix',
98 MSSQL_ODBC => 'DBIx::Class::Storage::DBI::MSSQL',
101 while (my ($db, $base_class) = each %dbs) {
102 my ($dsn, $user, $pass) = map $ENV{"DBICTEST_${db}_$_"}, qw/DSN USER PASS/;
106 my $schema = DBICTest::Schema->connect($dsn, $user, $pass, {
110 my $expected_quote_char = $expected{$base_class}{quote_char};
111 my $quote_char_text = dumper($expected_quote_char);
113 is_deeply $schema->storage->sql_maker->quote_char,
114 $expected_quote_char,
115 "$db quote_char with quote_names => 1 is $quote_char_text";
117 my $expected_name_sep = $expected{$base_class}{name_sep};
119 is $schema->storage->sql_maker->name_sep,
121 "$db name_sep with quote_names => 1 is '$expected_name_sep'";
129 my $dd = DumperObject;
131 return $dd->Values([ $val ])->Dump;