fix and regression test for RT #62642
[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 use namespace::clean;
10
11 sub _rebless {
12     my ($self) = @_;
13
14     try {
15       my $version = $self->_get_dbh->get_info(18);
16
17       my ($major, $minor, $patchlevel) = split(/\./, $version);
18
19       # Default driver
20       my $class = $major <= 8
21         ? 'DBIx::Class::Storage::DBI::Oracle::WhereJoins'
22         : 'DBIx::Class::Storage::DBI::Oracle::Generic';
23
24       $self->ensure_class_loaded ($class);
25       bless $self, $class;
26     };
27 }
28
29 1;
30
31 =head1 NAME
32
33 DBIx::Class::Storage::DBI::Oracle - Base class for Oracle driver
34
35 =head1 DESCRIPTION
36
37 This class simply provides a mechanism for discovering and loading a sub-class
38 for a specific version Oracle backend. It should be transparent to the user.
39
40 For Oracle major versions <= 8 it loads the ::Oracle::WhereJoins subclass,
41 which unrolls the ANSI join style DBIC normally generates into entries in
42 the WHERE clause for compatibility purposes. To force usage of this version
43 no matter the database version, add
44
45   __PACKAGE__->storage_type('::DBI::Oracle::WhereJoins');
46
47 to your Schema class.
48
49 =head1 AUTHORS
50
51 David Jack Olrik C<< <djo@cpan.org> >>
52
53 =head1 LICENSE
54
55 You may distribute this code under the same terms as Perl itself.
56
57 =cut