Merge 'trunk' into 'replication_dedux'
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / Storage / DBI / Oracle.pm
index ea956ba..64bf9f1 100644 (file)
@@ -5,33 +5,39 @@ use warnings;
 
 use base qw/DBIx::Class::Storage::DBI/;
 
-print STDERR "Oracle.pm got called.\n";
-
 sub _rebless {
     my ($self) = @_;
 
-    print STDERR "Rebless got called.\n";
-
     my $version = eval { $self->_dbh->get_info(18); };
 
     if ( !$@ ) {
         my ($major, $minor, $patchlevel) = split(/\./, $version);
 
         # Default driver
-        my $class = $major >= 8
+        my $class = $major <= 8
           ? 'DBIx::Class::Storage::DBI::Oracle::WhereJoins'
           : 'DBIx::Class::Storage::DBI::Oracle::Generic';
 
-        print STDERR "Class: $class\n";
-
         # Load and rebless
         eval "require $class";
 
-        print STDERR "\$@: $@\n";
         bless $self, $class unless $@;
     }
 }
 
+sub _svp_begin {
+    my ($self, $name) = @_;
+    $self->dbh->do("SAVEPOINT $name");
+}
+
+# Would've implemented _svp_release here, but Oracle doesn't support it.
+
+sub _svp_rollback {
+    my ($self, $name) = @_;
+
+    $self->dbh->do("ROLLBACK TO SAVEPOINT $name")
+}
 
 1;
 
@@ -47,8 +53,16 @@ DBIx::Class::Storage::DBI::Oracle - Base class for Oracle driver
 =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 <= 8 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');
 
+to your Schema class.
 
 =head1 AUTHORS