5 use Data::Dumper::Concise;
11 'DBIx::Class::Storage::DBI' =>
12 # no default quote_char
15 'DBIx::Class::Storage::DBI::MSSQL' =>
16 { quote_char => [ '[', ']' ], name_sep => '.' },
18 'DBIx::Class::Storage::DBI::DB2' =>
19 { quote_char => '"', name_sep => '.' },
21 'DBIx::Class::Storage::DBI::Informix' =>
22 { quote_char => '"', name_sep => '.' },
24 'DBIx::Class::Storage::DBI::InterBase' =>
25 { quote_char => '"', name_sep => '.' },
27 'DBIx::Class::Storage::DBI::mysql' =>
28 { quote_char => '`', name_sep => '.' },
30 'DBIx::Class::Storage::DBI::Pg' =>
31 { quote_char => '"', name_sep => '.' },
33 'DBIx::Class::Storage::DBI::ODBC::ACCESS' =>
34 { quote_char => [ '[', ']' ], name_sep => '.' },
36 # Not testing this one, it's a pain.
37 # 'DBIx::Class::Storage::DBI::ODBC::DB2_400_SQL' =>
38 # { quote_char => '"', name_sep => qr/must be connected/ },
40 'DBIx::Class::Storage::DBI::Oracle::Generic' =>
41 { quote_char => '"', name_sep => '.' },
43 'DBIx::Class::Storage::DBI::SQLAnywhere' =>
44 { quote_char => '"', name_sep => '.' },
46 'DBIx::Class::Storage::DBI::SQLite' =>
47 { quote_char => '"', name_sep => '.' },
49 'DBIx::Class::Storage::DBI::Sybase::ASE' =>
50 { quote_char => [ '[', ']' ], name_sep => '.' },
53 for my $class (keys %expected) { SKIP: {
54 eval "require ${class}"
55 or skip "Skipping test of quotes for $class due to missing dependencies", 1;
57 my $mapping = $expected{$class};
58 my ($quote_char, $name_sep) = @$mapping{qw/quote_char name_sep/};
59 my $instance = $class->new;
61 my $quote_char_text = dumper($quote_char);
63 if (exists $mapping->{quote_char}) {
64 is_deeply $instance->sql_quote_char, $quote_char,
65 "sql_quote_char for $class is $quote_char_text";
68 is $instance->sql_name_sep, $name_sep,
69 "sql_name_sep for $class is '$name_sep'";
72 # Try quote_names with available DBs.
74 # Env var to base class mapping, these are the DBs I actually have.
75 # the SQLITE is a fake memory dsn
76 local $ENV{DBICTEST_SQLITE_DSN} = 'dbi:SQLite::memory:';
78 SQLITE => 'DBIx::Class::Storage::DBI::SQLite',
79 ORA => 'DBIx::Class::Storage::DBI::Oracle::Generic',
80 PG => 'DBIx::Class::Storage::DBI::Pg',
81 MYSQL => 'DBIx::Class::Storage::DBI::mysql',
82 DB2 => 'DBIx::Class::Storage::DBI::DB2',
83 SYBASE => 'DBIx::Class::Storage::DBI::Sybase::ASE',
84 SQLANYWHERE => 'DBIx::Class::Storage::DBI::SQLAnywhere',
85 SQLANYWHERE_ODBC => 'DBIx::Class::Storage::DBI::SQLAnywhere',
86 FIREBIRD => 'DBIx::Class::Storage::DBI::InterBase',
87 FIREBIRD_ODBC => 'DBIx::Class::Storage::DBI::InterBase',
88 INFORMIX => 'DBIx::Class::Storage::DBI::Informix',
89 MSSQL_ODBC => 'DBIx::Class::Storage::DBI::MSSQL',
92 # Make sure oracle is tried last - some clients (e.g. 10.2) have symbol
93 # clashes with libssl, and will segfault everything coming after them
99 my ($dsn, $user, $pass) = map $ENV{"DBICTEST_${db}_$_"}, qw/DSN USER PASS/;
106 $schema = DBICTest::Schema->connect($dsn, $user, $pass, {
109 $schema->storage->ensure_connected;
113 my ($exp_quote_char, $exp_name_sep) =
114 @{$expected{$dbs{$db}}}{qw/quote_char name_sep/};
116 my ($quote_char_text, $name_sep_text) = map { dumper($_) }
117 ($exp_quote_char, $exp_name_sep);
119 is_deeply $schema->storage->sql_maker->quote_char,
121 "$db quote_char with quote_names => 1 is $quote_char_text";
124 is $schema->storage->sql_maker->name_sep,
126 "$db name_sep with quote_names => 1 is $name_sep_text";
134 my $dd = DumperObject;
136 return $dd->Values([ $val ])->Dump;