Hi Tim,
here is the style patch I spoke about in IRC (channel #dbi on irc.perl.org
for everyone who still misses IRC). It should help me applying future
patches sent in via RT for the new DBI version. I think, I need to invest
more time into the module now ...
Jens
Index: lib/DBD/DBM.pm
===================================================================
--- lib/DBD/DBM.pm (revision 13932)
+++ lib/DBD/DBM.pm (working copy)
@@ -24,14 +24,15 @@
#################
use base qw( DBD::File );
use vars qw($VERSION $ATTRIBUTION $drh $methods_already_installed);
-$VERSION = '0.03';
+$VERSION = '0.04';
$ATTRIBUTION = 'DBD::DBM by Jeff Zucker';
# no need to have driver() unless you need private methods
#
-sub driver ($;$) {
- my($class, $attr) = @_;
- return $drh if $drh;
+sub driver ($;$)
+{
+ my ( $class, $attr ) = @_;
+ return $drh if ($drh);
# do the real work in DBD::File
#
@@ -44,7 +45,8 @@
# but you can write private methods before official registration
# by hacking the $dbd_prefix_registry in a private copy of DBI.pm
#
- if ( $DBI::VERSION >= 1.37 and !$methods_already_installed++ ) {
+ if ( $DBI::VERSION >= 1.37 and !$methods_already_installed++ )
+ {
DBD::DBM::db->install_method('dbm_versions');
DBD::DBM::st->install_method('dbm_schema');
}
@@ -52,7 +54,8 @@
$this;
}
-sub CLONE {
+sub CLONE
+{
undef $drh;
}
@@ -60,22 +63,24 @@
package DBD::DBM::dr;
#####################
$DBD::DBM::dr::imp_data_size = 0;
-...@dbd::DBM::dr::ISA = qw(DBD::File::dr);
+...@dbd::DBM::dr::ISA = qw(DBD::File::dr);
# you can get by without connect() if you don't have to check private
# attributes, DBD::File will gather the connection string arguments for you
#
-sub connect ($$;$$$) {
- my($drh, $dbname, $user, $auth, $attr)= @_;
+sub connect ($$;$$$)
+{
+ my ( $drh, $dbname, $user, $auth, $attr ) = @_;
# create a 'blank' dbh
-# my $this = DBI::_new_dbh($drh, {
-# Name => $dbname,
-# });
+ # my $this = DBI::_new_dbh($drh, {
+ # Name => $dbname,
+ # });
my $this = $drh->SUPER::connect( $dbname, $user, $auth, $attr );
# parse the connection string for name=value pairs
- if ($this) {
+ if ($this)
+ {
# define valid private attributes
#
# attempts to set non-valid attrs in connect() or
@@ -86,44 +91,48 @@
# see the STORE methods below for how to check these attrs
#
$this->{dbm_valid_attrs} = {
- dbm_tables => 1, # per-table information
- dbm_type => 1, # the global DBM type e.g. SDBM_File
- dbm_mldbm => 1, # the global MLDBM serializer
- dbm_cols => 1, # the global column names
- dbm_version => 1, # verbose DBD::DBM version
- dbm_ext => 1, # file extension
- dbm_lockfile => 1, # lockfile extension
- dbm_store_metadata => 1, # column names, etc.
- dbm_berkeley_flags => 1, # for BerkeleyDB
- };
+ dbm_tables => 1, # per-table
information
+ dbm_type => 1, # the global
DBM type e.g. SDBM_File
+ dbm_mldbm => 1, # the global
MLDBM serializer
+ dbm_cols => 1, # the global
column names
+ dbm_version => 1, # verbose
DBD::DBM version
+ dbm_ext => 1, # file
extension
+ dbm_lockfile => 1, # lockfile
extension
+ dbm_store_metadata => 1, # column
names, etc.
+ dbm_berkeley_flags => 1, # for
BerkeleyDB
+ };
- my($var, $val);
- $this->{f_dir} = $DBD::File::haveFileSpec ? File::Spec->curdir() : '.';
- while (length($dbname)) {
- if ($dbname =~ s/^((?:[^\\;]|\\.)*?);//s) {
- $var = $1;
- } else {
- $var = $dbname;
- $dbname = '';
- }
- if ($var =~ /^(.+?)=(.*)/s) {
- $var = $1;
- ($val = $2) =~ s/\\(.)/$1/g;
+ my ( $var, $val );
+ $this->{f_dir} = $DBD::File::haveFileSpec ? File::Spec->curdir() : '.';
+ while ( length($dbname) )
+ {
+ if ( $dbname =~ s/^((?:[^\\;]|\\.)*?);//s )
+ {
+ $var = $1;
+ }
+ else
+ {
+ $var = $dbname;
+ $dbname = '';
+ }
+ if ( $var =~ /^(.+?)=(.*)/s )
+ {
+ $var = $1;
+ ( $val = $2 ) =~ s/\\(.)/$1/g;
# in the connect string the attr names
# can either have dbm_ (or foo_) prepended or not
# this will add the prefix if it's missing
#
- $var = 'dbm_' . $var unless $var =~ /^dbm_/
- or $var eq 'f_dir';
- # XXX should pass back to DBI via $attr for connect() to STORE
- $this->{$var} = $val;
- }
- }
- $this->{f_version} = $DBD::File::VERSION;
+ $var = 'dbm_' . $var unless ( $var =~ /^dbm_/ or $var eq
'f_dir' );
+ # XXX should pass back to DBI via $attr for connect() to STORE
+ $this->{$var} = $val;
+ }
+ }
+ $this->{f_version} = $DBD::File::VERSION;
$this->{dbm_version} = $DBD::DBM::VERSION;
}
- $this->STORE('Active',1);
+ $this->STORE( 'Active', 1 );
return $this;
}
@@ -137,7 +146,7 @@
package DBD::DBM::db;
#####################
$DBD::DBM::db::imp_data_size = 0;
-...@dbd::DBM::db::ISA = qw(DBD::File::db);
+...@dbd::DBM::db::ISA = qw(DBD::File::db);
# the ::db::STORE method is what gets called when you set
# a lower-cased database handle attribute such as $dbh->{somekey}=$someval;
@@ -147,81 +156,94 @@
# You can also check for valid values for the attributes if needed
# and/or perform other operations
#
-sub STORE ($$$) {
- my ($dbh, $attrib, $value) = @_;
+sub STORE ($$$)
+{
+ my ( $dbh, $attrib, $value ) = @_;
# use DBD::File's STORE unless its one of our own attributes
#
- return $dbh->SUPER::STORE($attrib,$value) unless $attrib =~ /^dbm_/;
+ return $dbh->SUPER::STORE( $attrib, $value ) unless ( $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} ) {
- return $dbh->set_err( $DBI::stderr,"Invalid attribute '$attrib'!");
+ if (
+ $attrib ne 'dbm_valid_attrs' # gotta start somewhere :-)
+ and !$dbh->{dbm_valid_attrs}->{$attrib}
+ )
+ {
+ return $dbh->set_err( $DBI::stderr, "Invalid attribute '$attrib'!" );
}
- else {
+ else
+ {
# check here if you need to validate values
# or conceivably do other things as well
#
- $dbh->{$attrib} = $value;
+ $dbh->{$attrib} = $value;
return 1;
}
}
# and FETCH is done similar to STORE
#
-sub FETCH ($$) {
- my ($dbh, $attrib) = @_;
+sub FETCH ($$)
+{
+ my ( $dbh, $attrib ) = @_;
return $dbh->SUPER::FETCH($attrib) unless $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} ) {
- return $dbh->set_err( $DBI::stderr,"Invalid attribute '$attrib'");
+ if (
+ $attrib ne 'dbm_valid_attrs' # gotta start somewhere :-)
+ and !$dbh->{dbm_valid_attrs}->{$attrib}
+ )
+ {
+ return $dbh->set_err( $DBI::stderr, "Invalid attribute '$attrib'" );
}
- else {
+ else
+ {
# check here if you need to validate values
# or conceivably do other things as well
#
- return $dbh->{$attrib};
+ return $dbh->{$attrib};
}
}
-
# this is an example of a private method
# these used to be done with $dbh->func(...)
# see above in the driver() sub for how to install the method
#
-sub dbm_versions {
- my $dbh = shift;
+sub dbm_versions
+{
+ my $dbh = shift;
my $table = shift || '';
- my $dtype = $dbh->{dbm_tables}->{$table}->{type}
- || $dbh->{dbm_type}
- || 'SDBM_File';
- my $mldbm = $dbh->{dbm_tables}->{$table}->{mldbm}
- || $dbh->{dbm_mldbm}
- || '';
- $dtype .= ' + MLDBM + ' . $mldbm if $mldbm;
+ my $dtype =
+ $dbh->{dbm_tables}->{$table}->{type}
+ || $dbh->{dbm_type}
+ || 'SDBM_File';
+ my $mldbm =
+ $dbh->{dbm_tables}->{$table}->{mldbm}
+ || $dbh->{dbm_mldbm}
+ || '';
+ $dtype .= ' + MLDBM + ' . $mldbm if ($mldbm);
my %version = ( DBI => $DBI::VERSION );
- $version{"DBI::PurePerl"} = $DBI::PurePerl::VERSION if
$DBI::PurePerl;
- $version{OS} = "$^O ($Config::Config{osvers})";
- $version{Perl} = "$] ($Config::Config{archname})";
- my $str = sprintf "%-16s %s\n%-16s %s\n%-16s %s\n",
- 'DBD::DBM' , $dbh->{Driver}->{Version} . " using $dtype"
- , ' DBD::File' , $dbh->{f_version}
- , ' DBI::SQL::Nano' , $dbh->{sql_nano_version}
- ;
- $str .= sprintf "%-16s %s\n",
- , ' SQL::Statement' , $dbh->{sql_statement_version}
- if $dbh->{sql_handler} eq 'SQL::Statement';
- for (sort keys %version) {
- $str .= sprintf "%-16s %s\n", $_, $version{$_};
+ $version{"DBI::PurePerl"} = $DBI::PurePerl::VERSION if ($DBI::PurePerl);
+ $version{OS} = "$^O ($Config::Config{osvers})";
+ $version{Perl} = "$] ($Config::Config{archname})";
+ my $str = sprintf( "%-16s %s\n%-16s %s\n%-16s %s\n",
+ 'DBD::DBM', $dbh->{Driver}->{Version} . " using $dtype",
+ ' DBD::File', $dbh->{f_version},
+ ' DBI::SQL::Nano',
+ $dbh->{sql_nano_version} );
+ $str .= sprintf( "%-16s %s\n", ' SQL::Statement',
$dbh->{sql_statement_version} )
+ if ( $dbh->{sql_handler} eq 'SQL::Statement' );
+
+ for ( sort keys %version )
+ {
+ $str .= sprintf( "%-16s %s\n", $_, $version{$_} );
}
return "$str\n";
}
@@ -234,14 +256,15 @@
package DBD::DBM::st;
#####################
$DBD::DBM::st::imp_data_size = 0;
-...@dbd::DBM::st::ISA = qw(DBD::File::st);
+...@dbd::DBM::st::ISA = qw(DBD::File::st);
-sub dbm_schema {
- my($sth,$tname)=...@_;
- return $sth->set_err($DBI::stderr,'No table name supplied!') unless $tname;
- return $sth->set_err($DBI::stderr,"Unknown table '$tname'!")
- unless $sth->{Database}->{dbm_tables}
- and $sth->{Database}->{dbm_tables}->{$tname};
+sub dbm_schema
+{
+ my ( $sth, $tname ) = @_;
+ return $sth->set_err( $DBI::stderr, 'No table name supplied!' ) unless
$tname;
+ return $sth->set_err( $DBI::stderr, "Unknown table '$tname'!" )
+ unless ( $sth->{Database}->{dbm_tables}
+ and $sth->{Database}->{dbm_tables}->{$tname} );
return $sth->{Database}->{dbm_tables}->{$tname}->{schema};
}
# you could put some :st private methods here
@@ -255,7 +278,7 @@
############################
use base qw( DBD::File::Statement );
use Carp qw(croak);
-use IO::File; # for locking only
+use IO::File; # for locking only
use Fcntl;
my $HAS_FLOCK = eval { flock STDOUT, 0; 1 };
@@ -271,13 +294,14 @@
# see also the comments inside open_table() showing the difference
# between global, per-table, and default settings
#
-sub open_table ($$$$$) {
- my($self, $data, $table, $createMode, $lockMode) = @_;
+sub open_table ($$$$$)
+{
+ my ( $self, $data, $table, $createMode, $lockMode ) = @_;
my $dbh = $data->{Database};
my $tname = $table || $self->{tables}->[0]->{name};
my $file;
- ($table,$file) = $self->get_file_name($data,$tname);
+ ( $table, $file ) = $self->get_file_name( $data, $tname );
# note the use of three levels of attribute settings below
# first it looks for a per-table setting
@@ -286,45 +310,44 @@
#
# your DBD may not need this, globals and defaults may be enough
#
- my $dbm_type = $dbh->{dbm_tables}->{$tname}->{type}
- || $dbh->{dbm_type}
- || 'SDBM_File';
+ my $dbm_type =
+ $dbh->{dbm_tables}->{$tname}->{type}
+ || $dbh->{dbm_type}
+ || 'SDBM_File';
$dbh->{dbm_tables}->{$tname}->{type} = $dbm_type;
- my $serializer = $dbh->{dbm_tables}->{$tname}->{mldbm}
- || $dbh->{dbm_mldbm}
- || '';
+ my $serializer =
+ $dbh->{dbm_tables}->{$tname}->{mldbm}
+ || $dbh->{dbm_mldbm}
+ || '';
$dbh->{dbm_tables}->{$tname}->{mldbm} = $serializer if $serializer;
- my $ext = '' if $dbm_type eq 'GDBM_File'
- or $dbm_type eq 'DB_File'
- or $dbm_type eq 'BerkeleyDB';
+ my $ext = '' if ( $dbm_type eq 'GDBM_File' or $dbm_type eq 'DB_File' or
$dbm_type eq 'BerkeleyDB' );
# XXX NDBM_File on FreeBSD (and elsewhere?) may actually be Berkeley
# behind the scenes and so create a single .db file.
- $ext = '.pag' if $dbm_type eq 'NDBM_File'
- or $dbm_type eq 'SDBM_File'
- or $dbm_type eq 'ODBM_File';
- $ext = $dbh->{dbm_ext} if defined $dbh->{dbm_ext};
- $ext = $dbh->{dbm_tables}->{$tname}->{ext}
- if defined $dbh->{dbm_tables}->{$tname}->{ext};
- $ext = '' unless defined $ext;
+ $ext = '.pag' if ( $dbm_type eq 'NDBM_File' or $dbm_type eq 'SDBM_File' or
$dbm_type eq 'ODBM_File' );
+ $ext = $dbh->{dbm_ext} if ( defined $dbh->{dbm_ext} );
+ $ext = $dbh->{dbm_tables}->{$tname}->{ext} if ( defined
$dbh->{dbm_tables}->{$tname}->{ext} );
+ $ext = '' unless ( defined $ext );
my $open_mode = O_RDONLY;
- $open_mode = O_RDWR if $lockMode;
- $open_mode = O_RDWR|O_CREAT|O_TRUNC if $createMode;
+ $open_mode = O_RDWR if ($lockMode);
+ $open_mode = O_RDWR | O_CREAT | O_TRUNC if ($createMode);
- my($tie_type);
+ my ($tie_type);
- if ( $serializer ) {
- require 'MLDBM.pm';
- $MLDBM::UseDB = $dbm_type;
- $MLDBM::UseDB = 'BerkeleyDB::Hash' if $dbm_type eq 'BerkeleyDB';
- $MLDBM::Serializer = $serializer;
- $tie_type = 'MLDBM';
+ if ($serializer)
+ {
+ require 'MLDBM.pm';
+ $MLDBM::UseDB = $dbm_type;
+ $MLDBM::UseDB = 'BerkeleyDB::Hash' if ( $dbm_type eq 'BerkeleyDB'
);
+ $MLDBM::Serializer = $serializer;
+ $tie_type = 'MLDBM';
}
- else {
- require "$dbm_type.pm";
- $tie_type = $dbm_type;
+ else
+ {
+ require "$dbm_type.pm";
+ $tie_type = $dbm_type;
}
# Second-guessing the file extension isn't great here (or in general)
@@ -332,27 +355,27 @@
# first and dieing if that succeeds.
# Currently this test doesn't work where NDBM is actually Berkeley (.db)
croak "Cannot CREATE '$file$ext' because it already exists"
- if $createMode and (-e "$file$ext");
+ if ( $createMode and ( -e "$file$ext" ) );
# LOCKING
#
- my($nolock,$lockext,$lock_table);
+ my ( $nolock, $lockext, $lock_table );
$lockext = $dbh->{dbm_tables}->{$tname}->{lockfile};
$lockext = $dbh->{dbm_lockfile} if !defined $lockext;
- if ( (defined $lockext and $lockext == 0) or !$HAS_FLOCK
- ) {
+ if ( ( defined $lockext and $lockext == 0 ) or !$HAS_FLOCK )
+ {
undef $lockext;
$nolock = 1;
}
- else {
+ else
+ {
$lockext ||= '.lck';
}
# open and flock the lockfile, creating it if necessary
#
- if (!$nolock) {
- $lock_table = $self->SUPER::open_table(
- $data, "$table$lockext", $createMode, $lockMode
- );
+ if ( !$nolock )
+ {
+ $lock_table = $self->SUPER::open_table( $data, "$table$lockext",
$createMode, $lockMode );
}
# TIEING
@@ -360,77 +383,86 @@
# allow users to pass in a pre-created tied object
#
my @tie_args;
- if ($dbm_type eq 'BerkeleyDB') {
- my $DB_CREATE = 1; # but import constants if supplied
- my $DB_RDONLY = 16; #
- my %flags;
- if (my $f = $dbh->{dbm_berkeley_flags}) {
- $DB_CREATE = $f->{DB_CREATE} if $f->{DB_CREATE};
- $DB_RDONLY = $f->{DB_RDONLY} if $f->{DB_RDONLY};
- delete $f->{DB_CREATE};
- delete $f->{DB_RDONLY};
- %flags = %$f;
- }
- $flags{'-Flags'} = $DB_RDONLY;
- $flags{'-Flags'} = $DB_CREATE if $lockMode or $createMode;
+ if ( $dbm_type eq 'BerkeleyDB' )
+ {
+ my $DB_CREATE = 1; # but import constants if supplied
+ my $DB_RDONLY = 16; #
+ my %flags;
+ if ( my $f = $dbh->{dbm_berkeley_flags} )
+ {
+ $DB_CREATE = $f->{DB_CREATE} if ( $f->{DB_CREATE} );
+ $DB_RDONLY = $f->{DB_RDONLY} if ( $f->{DB_RDONLY} );
+ delete $f->{DB_CREATE};
+ delete $f->{DB_RDONLY};
+ %flags = %$f;
+ }
+ $flags{'-Flags'} = $DB_RDONLY;
+ $flags{'-Flags'} = $DB_CREATE if ( $lockMode or $createMode );
my $t = 'BerkeleyDB::Hash';
- $t = 'MLDBM' if $serializer;
- @tie_args = ($t, -Filename=>$file, %flags);
+ $t = 'MLDBM' if ($serializer);
+ @tie_args = (
+ $t,
+ -Filename => $file,
+ %flags
+ );
}
- else {
- @tie_args = ($tie_type, $file, $open_mode, 0666);
+ else
+ {
+ @tie_args = ( $tie_type, $file, $open_mode, 0666 );
}
my %h;
- if ( $self->{command} ne 'DROP') {
- my $tie_class = shift @tie_args;
- eval { tie %h, $tie_class, @tie_args };
- croak "Cannot tie(%h $tie_class @tie_args): $@" if $@;
+ if ( $self->{command} ne 'DROP' )
+ {
+ my $tie_class = shift @tie_args;
+ eval { tie %h, $tie_class, @tie_args };
+ croak "Cannot tie(%h $tie_class @tie_args): $@" if ($@);
}
-
# COLUMN NAMES
#
my $store = $dbh->{dbm_tables}->{$tname}->{store_metadata};
- $store = $dbh->{dbm_store_metadata} unless defined $store;
- $store = 1 unless defined $store;
+ $store = $dbh->{dbm_store_metadata} unless ( defined $store );
+ $store = 1 unless ( defined $store );
$dbh->{dbm_tables}->{$tname}->{store_metadata} = $store;
- my($meta_data,$schema,$col_names);
+ my ( $meta_data, $schema, $col_names );
$meta_data = $col_names = $h{"_metadata \0"} if $store;
- if ($meta_data and $meta_data =~ m~<dbd_metadata>(.+)</dbd_metadata>~is) {
- $schema = $col_names = $1;
- $schema =~ s~.*<schema>(.+)</schema>.*~$1~is;
+ if ( $meta_data and $meta_data =~ m~<dbd_metadata>(.+)</dbd_metadata>~is )
+ {
+ $schema = $col_names = $1;
+ $schema =~ s~.*<schema>(.+)</schema>.*~$1~is;
$col_names =~ s~.*<col_names>(.+)</col_names>.*~$1~is;
}
- $col_names ||= $dbh->{dbm_tables}->{$tname}->{c_cols}
- || $dbh->{dbm_tables}->{$tname}->{cols}
- || $dbh->{dbm_cols}
- || ['k','v'];
- $col_names = [split /,/,$col_names] if (ref $col_names ne 'ARRAY');
+ $col_names ||=
+ $dbh->{dbm_tables}->{$tname}->{c_cols}
+ || $dbh->{dbm_tables}->{$tname}->{cols}
+ || $dbh->{dbm_cols}
+ || [ 'k', 'v' ];
+ $col_names = [ split /,/, $col_names ] if ( ref $col_names ne 'ARRAY' );
$dbh->{dbm_tables}->{$tname}->{cols} = $col_names;
$dbh->{dbm_tables}->{$tname}->{schema} = $schema;
my $i;
- my %col_nums = map { $_ => $i++ } @$col_names;
+ my %col_nums = map { $_ => $i++ } @$col_names;
my $tbl = {
- table_name => $tname,
- file => $file,
- ext => $ext,
- hash => \%h,
- dbm_type => $dbm_type,
- store_metadata => $store,
- mldbm => $serializer,
- lock_fh => $lock_table->{fh},
- lock_ext => $lockext,
- nolock => $nolock,
- col_nums => \%col_nums,
- col_names => $col_names
- };
+ table_name => $tname,
+ file => $file,
+ ext => $ext,
+ hash => \%h,
+ dbm_type => $dbm_type,
+ store_metadata => $store,
+ mldbm => $serializer,
+ lock_fh => $lock_table->{fh},
+ lock_ext => $lockext,
+ nolock => $nolock,
+ col_nums => \%col_nums,
+ col_names => $col_names
+ };
my $class = ref($self);
$class =~ s/::Statement/::Table/;
- bless($tbl, $class);
+ bless( $tbl, $class );
$tbl;
}
@@ -442,17 +474,17 @@
# you must define drop
# it is called from execute of a SQL DROP statement
#
-sub drop ($$) {
- my($self,$data) = @_;
- untie %{$self->{hash}} if $self->{hash};
+sub drop ($$)
+{
+ my ( $self, $data ) = @_;
+ untie %{ $self->{hash} } if ( $self->{hash} );
my $ext = $self->{ext};
- unlink $self->{file}.$ext if -f $self->{file}.$ext;
- unlink $self->{file}.'.dir' if -f $self->{file}.'.dir'
- and $ext eq '.pag';
- if (!$self->{nolock}) {
- $self->{lock_fh}->close if $self->{lock_fh};
- unlink $self->{file}.$self->{lock_ext}
- if -f $self->{file}.$self->{lock_ext};
+ unlink $self->{file} . $ext if ( -f $self->{file} . $ext );
+ unlink $self->{file} . '.dir' if ( -f $self->{file} . '.dir' and $ext eq
'.pag' );
+ if ( !$self->{nolock} )
+ {
+ $self->{lock_fh}->close if ( $self->{lock_fh} );
+ unlink $self->{file} . $self->{lock_ext} if ( -f $self->{file} .
$self->{lock_ext} );
}
return 1;
}
@@ -464,20 +496,18 @@
# as Janis might say: "undef's just another word for
# nothing left to fetch" :-)
#
-sub fetch_row ($$$) {
- my($self, $data, $row) = @_;
+sub fetch_row ($$$)
+{
+ my ( $self, $data, $row ) = @_;
# fetch with %each
#
- my @ary = each %{$self->{hash}};
- @ary = each %{$self->{hash}} if $self->{store_metadata}
- and $ary[0]
- and $ary[0] eq "_metadata \0";
+ my @ary = each %{ $self->{hash} };
+ @ary = each %{ $self->{hash} } if ( $self->{store_metadata} and $ary[0]
and $ary[0] eq "_metadata \0" );
- my($key,$val) = @ary;
- return undef unless $key;
- my @row = (ref($val) eq 'ARRAY') ? ($key,@$val) : ($key,$val);
- return (@row) if wantarray;
- return \...@row;
+ my ( $key, $val ) = @ary;
+ return undef unless ($key);
+ my @row = ( ref($val) eq 'ARRAY' ) ? ( $key, @$val ) : ( $key, $val );
+ return wantarray ? @row : \...@row;
# fetch without %each
#
@@ -502,14 +532,17 @@
# you must define push_row
# it is called on inserts and updates
#
-sub push_row ($$$) {
- my($self, $data, $row_aryref) = @_;
+sub push_row ($$$)
+{
+ my ( $self, $data, $row_aryref ) = @_;
my $key = shift @$row_aryref;
- if ( $self->{mldbm} ) {
- $self->{hash}->{$key}= $row_aryref;
+ if ( $self->{mldbm} )
+ {
+ $self->{hash}->{$key} = $row_aryref;
}
- else {
- $self->{hash}->{$key}=$row_aryref->[0];
+ else
+ {
+ $self->{hash}->{$key} = $row_aryref->[0];
}
1;
}
@@ -517,21 +550,18 @@
# this is where you grab the column names from a CREATE statement
# if you don't need to do that, it must be defined but can be empty
#
-sub push_names ($$$) {
- my($self, $data, $row_aryref) = @_;
- $data->{Database}->{dbm_tables}->{$self->{table_name}}->{c_cols}
- = $row_aryref;
+sub push_names ($$$)
+{
+ my ( $self, $data, $row_aryref ) = @_;
+ $data->{Database}->{dbm_tables}->{ $self->{table_name} }->{c_cols} =
$row_aryref;
return unless $self->{store_metadata};
- my $stmt = $data->{f_stmt};
- my $col_names = join ',', @{$row_aryref};
- my $schema = $data->{Database}->{Statement};
- $schema =~ s/^[^\(]+\((.+)\)$/$1/s;
- $schema = $stmt->schema_str if $stmt->can('schema_str');
- $self->{hash}->{"_metadata \0"} = "<dbd_metadata>"
- . "<schema>$schema</schema>"
- . "<col_names>$col_names</col_names>"
- . "</dbd_metadata>"
- ;
+ my $stmt = $data->{f_stmt};
+ my $col_names = join( ',', @{$row_aryref} );
+ my $schema = $data->{Database}->{Statement};
+ $schema =~ s/^[^\(]+\((.+)\)$/$1/s;
+ $schema = $stmt->schema_str() if ( $stmt->can('schema_str') );
+ $self->{hash}->{"_metadata \0"} =
+ "<dbd_metadata>" . "<schema>$schema</schema>" .
"<col_names>$col_names</col_names>" . "</dbd_metadata>";
}
# fetch_one_row, delete_one_row, update_one_row
@@ -540,41 +570,41 @@
# but, in that case you may need to define
# truncate() and seek(), see below
#
-sub fetch_one_row ($$;$) {
- my($self,$key_only,$key) = @_;
- return $self->{col_names}->[0] if $key_only;
- return undef unless exists $self->{hash}->{$key};
+sub fetch_one_row ($$;$)
+{
+ my ( $self, $key_only, $key ) = @_;
+ return $self->{col_names}->[0] if ($key_only);
+ return undef unless ( exists $self->{hash}->{$key} );
my $val = $self->{hash}->{$key};
- $val = (ref($val)eq'ARRAY') ? $val : [$val];
- my $row = [$key, @$val];
- return @$row if wantarray;
- return $row;
+ $val = ( ref($val) eq 'ARRAY' ) ? $val : [$val];
+ my $row = [ $key, @$val ];
+ return wantarray ? @{$row} : $row;
}
-sub delete_one_row ($$$) {
- my($self,$data,$aryref) = @_;
- delete $self->{hash}->{$aryref->[0]};
+
+sub delete_one_row ($$$)
+{
+ my ( $self, $data, $aryref ) = @_;
+ delete $self->{hash}->{ $aryref->[0] };
}
-sub update_one_row ($$$) {
- my($self,$data,$aryref) = @_;
+
+sub update_one_row ($$$)
+{
+ my ( $self, $data, $aryref ) = @_;
my $key = shift @$aryref;
return undef unless defined $key;
- my $row = (ref($aryref)eq'ARRAY') ? $aryref : [$aryref];
- if ( $self->{mldbm} ) {
- $self->{hash}->{$key}= $row;
- }
- else {
- $self->{hash}->{$key}=$row->[0];
- }
+ my $row = ( ref($aryref) eq 'ARRAY' ) ? $aryref : [$aryref];
+ $self->{hash}->{$key} = $self->{mldbm} ? $row : $row->[0];
}
# you may not need to explicitly DESTROY the ::Table
# put cleanup code to run when the execute is done
#
-sub DESTROY ($) {
- my $self=shift;
- untie %{$self->{hash}} if $self->{hash};
+sub DESTROY ($)
+{
+ my $self = shift;
+ untie %{ $self->{hash} } if ( $self->{hash} );
# release the flock on the lock file
- $self->{lock_fh}->close if !$self->{nolock} and $self->{lock_fh};
+ $self->{lock_fh}->close if ( !$self->{nolock} and $self->{lock_fh} );
}
# truncate() and seek() must be defined to satisfy DBI::SQL::Nano
@@ -587,8 +617,9 @@
# deletes or updates, you can put it in truncate()
# which is called at the end of executing
#
-sub truncate ($$) {
- my($self,$data) = @_;
+sub truncate ($$)
+{
+ my ( $self, $data ) = @_;
1;
}
@@ -596,8 +627,9 @@
# though it could be used for other non-file operations
# that you need to do before "writes" or truncate()
#
-sub seek ($$$$) {
- my($self, $data, $pos, $whence) = @_;
+sub seek ($$$$)
+{
+ my ( $self, $data, $pos, $whence ) = @_;
}
# Th, th, th, that's all folks! See DBD::File and DBD::CSV for other