Author: REHSACK
Date: Tue Jun 15 02:04:28 2010
New Revision: 14148

Modified:
   dbi/trunk/lib/DBD/File.pm
   dbi/trunk/t/49dbd_file.t

Log:
Add ability to set multiple meta data for one or more tables (with test)


Modified: dbi/trunk/lib/DBD/File.pm
==============================================================================
--- dbi/trunk/lib/DBD/File.pm   (original)
+++ dbi/trunk/lib/DBD/File.pm   Tue Jun 15 02:04:28 2010
@@ -554,6 +554,7 @@
        return &$gstm ($dbh, $table, $attr);
        }
     else {
+       ref $table or $table = [ $table ];
        ref $attr or $attr = [ $attr ];
        "ARRAY" eq ref $table or
            croak "Invalid argument for \$table - SCALAR, Regexp or ARRAY 
expected but got " . ref $table;
@@ -573,7 +574,7 @@
        }
     } # get_file_meta
 
-sub set_file_meta
+sub set_single_table_meta
 {
     my ($dbh, $table, $attr, $value) = @_;
     my $meta;
@@ -585,7 +586,44 @@
     $class =~ s/::db$/::Table/;
     (undef, $meta) = $class->get_table_meta ($dbh, $table, 1);
     $meta or croak "No such table '$table'";
-    return $class->set_table_meta_attr ($meta, $attr, $value);
+    $class->set_table_meta_attr ($meta, $attr, $value);
+
+    return $dbh;
+    } # set_single_table_meta
+
+sub set_file_meta
+{
+    my ($dbh, $table, $attr, $value) = @_;
+
+    my $sstm = $dbh->{ImplementorClass}->can ("set_single_table_meta");
+
+    $table eq "*" and
+       $table = [ ".", keys %{$dbh->{f_meta}} ];
+    $table eq "+" and
+       $table = [ grep { m/^[_A-Za-z0-9]+$/ } keys %{$dbh->{f_meta}} ];
+    ref ($table) eq "Regexp" and
+       $table = [ grep { $_ =~ $table } keys %{$dbh->{f_meta}} ];
+
+    unless (ref ($table) or ref ($attr)) {
+       return &$sstm ($dbh, $table, $attr, $value);
+       }
+    else {
+       ref $table or $table = [ $table ];
+       ref $attr or $attr = { $attr => $value };
+       "ARRAY" eq ref $table or
+           croak "Invalid argument for \$table - SCALAR, Regexp or ARRAY 
expected but got " . ref $table;
+       "HASH" eq ref $attr or
+           croak "Invalid argument for \$attr - SCALAR or HASH expected but 
got " . ref $attr;
+
+       foreach my $tname (@{$table}) {
+           my %tattrs;
+           while (my ($aname, $aval) = each %$attr) {
+               &$sstm ($dbh, $tname, $aname, $aval);
+               }
+           }
+
+       return $dbh;
+       }
     } # set_file_meta
 
 sub clear_file_meta

Modified: dbi/trunk/t/49dbd_file.t
==============================================================================
--- dbi/trunk/t/49dbd_file.t    (original)
+++ dbi/trunk/t/49dbd_file.t    Tue Jun 15 02:04:28 2010
@@ -120,6 +120,14 @@
 my @layer = grep { $_ eq "encoding($encoding)" } @tfhl;
 is (scalar @layer, 1, "encoding shows in layer");
 
+SKIP: {
+    $using_dbd_gofer and skip "modifying meta data doesn't work with 
Gofer-AutoProxy", 4;
+    ok ($dbh->f_set_meta ($tbl, "f_dir", $dir), "set single meta datum");
+    is ($tbl_file, $dbh->f_get_meta ($tbl, "f_fqfn"), "verify set single meta 
datum");
+    ok ($dbh->f_set_meta ($tbl, { f_dir => $dir }), "set multiple meta data");
+    is ($tbl_file, $dbh->f_get_meta ($tbl, "f_fqfn"), "verify set multiple 
meta attributes");
+    }
+
 ok ($sth = $dbh->prepare ("select * from $tbl"), "Prepare select * from $tbl");
 $rowidx = 0;
 SKIP: {

Reply via email to