use warnings;
use base qw/DBIx::Class::Storage::DBI/;
+use mro 'c3';
+use Try::Tiny;
+use namespace::clean;
sub _rebless {
- my ($self) = @_;
+ my ($self) = @_;
- my $version = eval { $self->_dbh->get_info(18); };
+ # Default driver
+ my $class = $self->_server_info->{normalized_dbms_version} < 9
+ ? 'DBIx::Class::Storage::DBI::Oracle::WhereJoins'
+ : 'DBIx::Class::Storage::DBI::Oracle::Generic';
- if ( !$@ ) {
- my ($major, $minor, $patchlevel) = split(/\./, $version);
-
- # Default driver
- my $class = $major >= 8
- ? 'DBIx::Class::Storage::DBI::Oracle::WhereJoins'
- : 'DBIx::Class::Storage::DBI::Oracle::Generic';
-
- # Load and rebless
- eval "require $class";
-
- bless $self, $class unless $@;
- }
+ $self->ensure_class_loaded ($class);
+ bless $self, $class;
}
-
1;
=head1 NAME
DBIx::Class::Storage::DBI::Oracle - Base class for Oracle driver
-=head1 SYNOPSIS
-
- # In your table classes
- __PACKAGE__->load_components(qw/Core/);
-
=head1 DESCRIPTION
This class simply provides a mechanism for discovering and loading a sub-class
-for a specific version Oracle backend. It should be transparent to the user.
+for a specific version Oracle backend. It should be transparent to the user.
+
+For Oracle major versions < 9 it loads the ::Oracle::WhereJoins subclass,
+which unrolls the ANSI join style DBIC normally generates into entries in
+the WHERE clause for compatibility purposes. To force usage of this version
+no matter the database version, add
+ __PACKAGE__->storage_type('::DBI::Oracle::WhereJoins');
-=head1 AUTHORS
+to your Schema class.
-David Jack Olrik C<< <djo@cpan.org> >>
+=head1 FURTHER QUESTIONS?
-=head1 LICENSE
+Check the list of L<additional DBIC resources|DBIx::Class/GETTING HELP/SUPPORT>.
-You may distribute this code under the same terms as Perl itself.
+=head1 COPYRIGHT AND LICENSE
-=cut
+This module is free software L<copyright|DBIx::Class/COPYRIGHT AND LICENSE>
+by the L<DBIx::Class (DBIC) authors|DBIx::Class/AUTHORS>. You can
+redistribute it and/or modify it under the same terms as the
+L<DBIx::Class library|DBIx::Class/COPYRIGHT AND LICENSE>.