Fixed up so that SQLite is supported
[dbsrgits/DBM-Deep.git] / lib / DBM / Deep.pm
index 3998791..20efded 100644 (file)
@@ -5,16 +5,13 @@ use 5.006_000;
 use strict;
 use warnings FATAL => 'all';
 
-our $VERSION = q(1.0015);
+our $VERSION = q(1.0019_002);
 
 use Scalar::Util ();
 
+use DBM::Deep::Engine::DBI ();
 use DBM::Deep::Engine::File ();
 
-use DBM::Deep::SQL::Util;
-use DBM::Deep::SQL::Array;
-use DBM::Deep::SQL::Hash;
-
 use overload
     '""' => sub { overload::StrVal( $_[0] ) },
     fallback => 1;
@@ -56,71 +53,6 @@ sub new {
     my $args = $class->_get_args( @_ );
     my $self;
     
-    if (exists $args->{dbi}) {
-        eval {
-            require DBIx::Abstract;
-        }; if ( $@ ) {
-            __PACKAGE__->_throw_error('DBIx::Abstract not installed. You cannot use the SQL mode.');
-        }
-        unless (UNIVERSAL::isa($args->{dbi}, 'DBIx::Abstract')) {
-            $args->{dbi} = DBIx::Abstract->connect($args->{dbi});
-        }
-
-        if (defined $args->{id}) {
-            unless ($args->{id} =~ /^\d+$/ && $args->{id} > 0) {
-                __PACKAGE__->_throw_error('Invalid SQL record id');
-            }
-            my $util = {dbi => $args->{dbi}};
-            bless $util, 'DBM::Deep::SQL::Util';
-            my $q = $util->_select(
-                table  => 'rec_item',
-                fields => 'item_type',
-                where  => {id => $args->{id}},
-            );
-            if ($q->[0]->[0] eq 'array') {
-                $args->{type} = TYPE_ARRAY;
-            }
-            elsif ($q->[0]->[0] eq 'hash') {
-                $args->{type} = TYPE_HASH;
-            }
-            else {
-                DBM::Deep->_throw_error('Unknown SQL record id');
-            }
-        }
-        else {
-            my $util = {dbi => $args->{dbi}};
-            bless $util, 'DBM::Deep::SQL::Util';
-            if (defined($args->{type}) && $args->{type} eq TYPE_ARRAY) {
-                $args->{id} = $util->_create('array');
-            }
-            else {
-                $args->{id} = $util->_create('hash');
-            }
-        }
-
-        if (defined($args->{type}) && $args->{type} eq TYPE_ARRAY) {
-            $class = 'DBM::Deep::SQL::Array';
-            require DBM::Deep::SQL::Array;
-            tie @$self, $class, %$args;
-            if ($args->{prefetch}) {
-                (tied(@$self))->_prefetch();
-            }
-            return bless $self, $class;
-        }
-        else {
-            $class = 'DBM::Deep::SQL::Hash';
-            require DBM::Deep::SQL::Hash;
-            tie %$self, $class, %$args;
-            if ($args->{prefetch}) {
-                (tied(%$self))->_prefetch();
-            }
-            return bless $self, $class;
-        }
-    }
-
-    ##
-    # Check if we want a tied hash or array.
-    ##
     if (defined($args->{type}) && $args->{type} eq TYPE_ARRAY) {
         $class = 'DBM::Deep::Array';
         require DBM::Deep::Array;
@@ -443,6 +375,11 @@ sub clone {
     );
 }
 
+sub supports {
+    my $self = shift;
+    return $self->_engine->supports( @_ );
+}
+
 #XXX Migrate this to the engine, where it really belongs and go through some
 # API - stop poking in the innards of someone else..
 {
@@ -552,7 +489,12 @@ sub STORE {
         $value = $self->_engine->storage->{filter_store_value}->( $value );
     }
 
-    $self->_engine->write_value( $self, $key, $value );
+    eval {
+        $self->_engine->write_value( $self, $key, $value );
+    }; if ( my $e = $@ ) {
+        $self->unlock;
+        die $e;
+    }
 
     $self->unlock;