[svn:dbi] r14018 - in dbi/trunk: lib/DBD t

[email protected]
Newsgroups perl.dbi.changes
Message-ID <[email protected]>
Author: REHSACK
Date: Mon May 24 01:54:39 2010
New Revision: 14018

Modified:
   dbi/trunk/lib/DBD/DBM.pm
   dbi/trunk/lib/DBD/File.pm
   dbi/trunk/t/50dbm_simple.t

Log:
move dbm_lockfile attribute and behaviour from DBD::DBM into
DBD::File as f_lockfile


Modified: dbi/trunk/lib/DBD/DBM.pm
==============================================================================
--- dbi/trunk/lib/DBD/DBM.pm	(original)
+++ dbi/trunk/lib/DBD/DBM.pm	Mon May 24 01:54:39 2010
@@ -78,7 +78,7 @@
     #    });
     my $this = $drh->SUPER::connect( $dbname, $user, $auth, $attr );
 
-    $this->STORE( 'dbm_lockfile', '.lck' );
+    $this->STORE( 'f_lockfile', '.lck' );
     $this->STORE( 'Active', 1 );
     return $this;
 }
@@ -114,31 +114,32 @@
 	# carp "Usage of '$attrib' is depreciated, use 'dbm_$attrib' instead" if( $^W );
         $attrib = "dbm_" . $attrib;    # backward compatibility - would like to carp here
     }
-    if( $attrib eq "dbm_ext" )
+    if( $attrib eq "dbm_ext" or $attrib eq "dbm_lockfile" )
     {
-	# carp "Attribute 'dbm_ext' is depreciated, use 'f_ext' instead" if( $^W );
-	$attrib = 'f_ext';
+	( my $newattrib = $attrib ) =~ s/^dbm_/f_/g
+	# carp "Attribute '$attrib' is depreciated, use '$newattrib' instead" if( $^W );
+	$attrib = $newattrib;
     }
     return $dbh->SUPER::STORE( $attrib, $value ) unless ( 0 == index( $attrib, 'dbm_' ) );
 
     # throw an error if it has our prefix but isn't a valid attr name
     #
     if (
-        $attrib ne 'dbm_valid_attrs'    # gotta start somewhere :-)
-        and !$dbh->{dbm_valid_attrs}->{$attrib}
+        $dbh->{dbm_valid_attrs}->{$attrib}
+        or $attrib eq 'dbm_valid_attrs'    # gotta start somewhere :-)
        )
     {
-        return $dbh->set_err( $DBI::stderr, "Invalid attribute '$attrib'!" );
-    }
-    else
-    {
-
         # check here if you need to validate values
         # or conceivably do other things as well
         #
         $dbh->{$attrib} = $value;
         return 1;
     }
+    else
+    {
+	# throw an error if it has our prefix but isn't a valid attr name
+        return $dbh->set_err( $DBI::stderr, "Invalid attribute '$attrib'!" );
+    }
 }
 
 # and FETCH is done similar to STORE
@@ -151,25 +152,29 @@
     {
         $attrib = "dbm_" . $attrib;    # backward compatibility - would like to carp here
     }
+    if( $attrib eq "dbm_ext" or $attrib eq "dbm_lockfile" )
+    {
+	( my $newattrib = $attrib ) =~ s/^dbm_/f_/g
+	# carp "Attribute '$attrib' is depreciated, use '$newattrib' instead" if( $^W );
+	$attrib = $newattrib;
+    }
     return $dbh->SUPER::FETCH($attrib) unless ( 0 == index( $attrib, 'dbm_' ) );
 
-    # throw an error if it has our prefix but isn't a valid attr name
-    #
     if (
-        $attrib ne 'dbm_valid_attrs'    # gotta start somewhere :-)
-        and !$dbh->{dbm_valid_attrs}->{$attrib}
+        $dbh->{dbm_valid_attrs}->{$attrib}
+        or $attrib eq 'dbm_valid_attrs'    # gotta start somewhere :-)
        )
     {
-        return $dbh->set_err( $DBI::stderr, "Invalid attribute '$attrib'" );
-    }
-    else
-    {
-
         # check here if you need to validate values
         # or conceivably do other things as well
         #
         return $dbh->{$attrib};
     }
+    else
+    {
+	# throw an error if it has our prefix but isn't a valid attr name
+        return $dbh->set_err( $DBI::stderr, "Invalid attribute '$attrib'" );
+    }
 }
 
 sub set_versions
@@ -197,7 +202,6 @@
                                 dbm_mldbm          => 1,    # the global MLDBM serializer
                                 dbm_cols           => 1,    # the global column names
                                 dbm_version        => 1,    # verbose DBD::DBM version
-                                dbm_lockfile       => 1,    # lockfile extension
                                 dbm_store_metadata => 1,    # column names, etc.
                                 dbm_berkeley_flags => 1,    # for BerkeleyDB
                               };
@@ -316,10 +320,6 @@
 
     my $tbl = $self->SUPER::file2table( $meta, $file, $file_is_table, $quoted ) or return;
 
-    if( !defined($meta->{dbm_lockfile}) and $meta->{dbm_lockfile} )
-    {
-	$meta->{f_fqln} = $meta->{f_fqbn} . $meta->{dbm_lockfile};
-    }
     $meta->{f_dontopen} = 1;
 
     return $tbl;
@@ -335,8 +335,6 @@
     $meta->{dbm_type} ||= $dbh->{dbm_type} || 'SDBM_File';
     $meta->{dbm_mldbm} ||= $dbh->{dbm_mldbm} if ( $dbh->{dbm_mldbm} );
     $meta->{dbm_berkeley_flags} ||= $dbh->{dbm_berkeley_flags};
-    exists $meta->{dbm_lockfile} or
-        $meta->{dbm_lockfile} = $dbh->{dbm_lockfile};
 
     unless ( defined( $meta->{f_ext} ) )
     {
@@ -822,19 +820,6 @@
 lockfile.  In that case, DBD::DBM and your other program will respect each
 other's locks.
 
-If you wish to use a lockfile extension other than '.lck', simply specify
-the dbm_lockfile attribute:
-
-  $dbh = DBI->connect('dbi:DBM:dbm_lockfile=.foo');
-  $dbh->{dbm_lockfile} = '.foo';
-  $dbh->{f_meta}->{qux}->{dbm_lockfile} = '.foo';
-
-If you wish to disable locking, set the dbm_lockfile equal to 0.
-
-  $dbh = DBI->connect('dbi:DBM:dbm_lockfile=0');
-  $dbh->{dbm_lockfile} = 0;
-  $dbh->{f_meta}->{qux}->{dbm_lockfile} = 0;
-
 =head2 Specifying the DBM type
 
 Each "flavor" of DBM stores its files in a different format and has

Modified: dbi/trunk/lib/DBD/File.pm
==============================================================================
--- dbi/trunk/lib/DBD/File.pm	(original)
+++ dbi/trunk/lib/DBD/File.pm	Mon May 24 01:54:39 2010
@@ -726,6 +726,10 @@
 
     $meta->{f_fqfn} = $fqfn;
     $meta->{f_fqbn} = $file;
+    if( !defined($meta->{f_lockfile}) and $meta->{f_lockfile} ) {
+	$meta->{f_fqln} = $meta->{f_fqbn} . $meta->{f_lockfile};
+	}
+
     return $tbl;
     } # file2table
 
@@ -740,14 +744,16 @@
     defined $dbh->{f_meta}->{$table} and "HASH" eq ref $dbh->{f_meta}->{$table} or
         $dbh->{f_meta}->{$table} = {};
     my $meta = $dbh->{f_meta}->{$table};
-    defined $meta->{f_dir} or
+    exists $meta->{f_dir} or
 	$meta->{f_dir} = $dbh->{f_dir};
     defined $meta->{f_ext} or
 	$meta->{f_ext} = $dbh->{f_ext};
-    defined $meta->{f_encoding} or
+    exists $meta->{f_encoding} or
 	$meta->{f_encoding} = $dbh->{f_encoding};
-    defined $meta->{f_lock} or
+    exists $meta->{f_lock} or
 	$meta->{f_lock} = $dbh->{f_lock};
+    exists $meta->{dbm_lockfile} or
+        $meta->{dbm_lockfile} = $dbh->{dbm_lockfile};
     defined $meta->{f_fqfn} or
 	$self->file2table ($meta, $table, $file_is_table, $quoted);
     } # init_table_meta
@@ -1088,6 +1094,21 @@
 
 But see L</"KNOWN BUGS"> below.
 
+=item f_lockfile
+
+If you wish to use a lockfile extension other than '.lck', simply specify
+the f_lockfile attribute:
+
+  $dbh = DBI->connect('dbi:DBM:f_lockfile=.foo');
+  $dbh->{f_lockfile} = '.foo';
+  $dbh->{f_meta}->{qux}->{f_lockfile} = '.foo';
+
+If you wish to disable locking, set the f_lockfile equal to 0.
+
+  $dbh = DBI->connect('dbi:DBM:f_lockfile=0');
+  $dbh->{f_lockfile} = 0;
+  $dbh->{f_meta}->{qux}->{f_lockfile} = 0;
+
 =item f_encoding
 
 With this attribute, you can set the encoding in which the file is opened.

Modified: dbi/trunk/t/50dbm_simple.t
==============================================================================
--- dbi/trunk/t/50dbm_simple.t	(original)
+++ dbi/trunk/t/50dbm_simple.t	Mon May 24 01:54:39 2010
@@ -158,6 +158,7 @@
     # on systems with broken NFS locking daemons.
     # (This test script doesn't test that locking actually works anyway.)
 
+    # use f_lockfile in next release - use it here as test case only
     my $dsn ="dbi:DBM(RaiseError=0,PrintError=1):dbm_type=$dtype;dbm_mldbm=$mldbm;dbm_lockfile=.lck";
 
     if ($using_dbd_gofer) {
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.