Any objections to me committing below change? --8<--- --- DBI-svn/lib/DBD/File.pm 2009-12-03 17:47:15.000000000 +0100 +++ DBI-svn/lib/DBD/File.pm 2009-12-03 17:49:20.000000000 +0100 @@ -162,6 +162,7 @@ sub connect ($$;$$$) f_ext => 1, # file extension f_schema => 1, # schema name f_tables => 1, # base directory + f_lock => 1, # Table locking mode }; $this->{sql_valid_attrs} = { sql_handler => 1, # Nano or S:S @@ -725,12 +726,17 @@ sub open_table ($$$$$) } $fh and binmode $fh; if ($locking and $fh) { - if ($lockMode) { + my $lm = defined $data->{Database}{f_lock} + && $data->{Database}{f_lock} =~ m/^[012]$/ + ? $data->{Database}{f_lock} + : $lockMode ? 2 : 1; + if ($lm == 2) { flock $fh, 2 or croak "Cannot obtain exclusive lock on $file: $!"; } - else { + elsif ($lm == 1) { flock $fh, 1 or croak "Cannot obtain shared lock on $file: $!"; } + # $lm = 0 is forced no locking at all } my $columns = {}; my $array = []; @@ -929,6 +935,29 @@ tables into the same (or no) schema: Defining f_schema to the empty string is equal to setting it to C<undef>, this to enable the DSN to be C<dbi:CSV:f_schema=;f_dir=.>.
+=item f_lock + +With this attribute, you can force locking mode (if locking is supported +at all) for opening tables. By default, tables are opened with a shared +lock for reading, and with an exclusive lock for writing. The supported +modes are: + +=over 2 + +=item 0 + +Force no locking at all. + +=item 1 + +Only shared locks will be used. + +=item 2 + +Only exclusive locks will be used. + +=back + =back =head2 Driver private methods -->8--- -- H.Merijn Brand http://tux.nl Perl Monger http://amsterdam.pm.org/ using & porting perl 5.6.2, 5.8.x, 5.10.x, 5.11.x on HP-UX 10.20, 11.00, 11.11, 11.23, and 11.31, OpenSuSE 10.3, 11.0, and 11.1, AIX 5.2 and 5.3. http://mirrors.develooper.com/hpux/ http://www.test-smoke.org/ http://qa.perl.org http://www.goldmark.org/jeff/stupid-disclaimers/