All expected evals converted to try, except where no test is done,
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / Storage / DBI / Oracle.pm
1 package DBIx::Class::Storage::DBI::Oracle;
2
3 use strict;
4 use warnings;
5
6 use base qw/DBIx::Class::Storage::DBI/;
7 use mro 'c3';
8 use Try::Tiny;
9
10 sub _rebless {
11     my ($self) = @_;
12
13     my $caught;
14     my $version;
15     try { $self->_get_dbh->get_info(18); }
16     catch { $caught = 1 };
17
18     if ( ! $caught ) {
19         my ($major, $minor, $patchlevel) = split(/\./, $version);
20
21         # Default driver
22         my $class = $major <= 8
23           ? 'DBIx::Class::Storage::DBI::Oracle::WhereJoins'
24           : 'DBIx::Class::Storage::DBI::Oracle::Generic';
25
26         $self->ensure_class_loaded ($class);
27         bless $self, $class;
28     }
29 }
30
31 1;
32
33 =head1 NAME
34
35 DBIx::Class::Storage::DBI::Oracle - Base class for Oracle driver
36
37 =head1 DESCRIPTION
38
39 This class simply provides a mechanism for discovering and loading a sub-class
40 for a specific version Oracle backend. It should be transparent to the user.
41
42 For Oracle major versions <= 8 it loads the ::Oracle::WhereJoins subclass,
43 which unrolls the ANSI join style DBIC normally generates into entries in
44 the WHERE clause for compatibility purposes. To force usage of this version
45 no matter the database version, add
46
47   __PACKAGE__->storage_type('::DBI::Oracle::WhereJoins');
48
49 to your Schema class.
50
51 =head1 AUTHORS
52
53 David Jack Olrik C<< <djo@cpan.org> >>
54
55 =head1 LICENSE
56
57 You may distribute this code under the same terms as Perl itself.
58
59 =cut