Author: REHSACK
Date: Thu May  6 02:31:36 2010
New Revision: 13945

Modified:
   dbi/trunk/lib/DBD/DBM.pm

Log:
- do not fill column names on CREATE TABLE
- use {row} member for fetching (SQL::Eval::Table expects it)
- "return undef" -> "return" (won't produces array containing 1
  undef element in list context).


Modified: dbi/trunk/lib/DBD/DBM.pm
==============================================================================
--- dbi/trunk/lib/DBD/DBM.pm    (original)
+++ dbi/trunk/lib/DBD/DBM.pm    Thu May  6 02:31:36 2010
@@ -24,7 +24,7 @@
 #################
 use base qw( DBD::File );
 use vars qw($VERSION $ATTRIBUTION $drh $methods_already_installed);
-$VERSION     = '0.04';
+$VERSION     = '0.05';
 $ATTRIBUTION = 'DBD::DBM by Jeff Zucker';
 
 # no need to have driver() unless you need private methods
@@ -418,33 +418,11 @@
         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 );
     $dbh->{dbm_tables}->{$tname}->{store_metadata} = $store;
 
-    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;
-        $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' );
-    $dbh->{dbm_tables}->{$tname}->{cols}   = $col_names;
-    $dbh->{dbm_tables}->{$tname}->{schema} = $schema;
-
-    my $i;
-    my %col_nums = map { $_ => $i++ } @$col_names;
-
     my $tbl = {
                 table_name     => $tname,
                 file           => $file,
@@ -456,10 +434,38 @@
                 lock_fh        => $lock_table->{fh},
                 lock_ext       => $lockext,
                 nolock         => $nolock,
-                col_nums       => \%col_nums,
-                col_names      => $col_names
+               col_names      => {},
+               col_nums       => [],
               };
 
+    # COLUMN NAMES
+    #
+    unless( $createMode )
+    {
+       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;
+           $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' );
+       $dbh->{dbm_tables}->{$tname}->{cols}   = $col_names;
+       $dbh->{dbm_tables}->{$tname}->{schema} = $schema;
+
+       my $i;
+       my %col_nums = map { $_ => $i++ } @$col_names;
+
+       $tbl->{col_nums} = \%col_nums;
+       $tbl->{col_names} = $col_names;
+    }
+
     my $class = ref($self);
     $class =~ s/::Statement/::Table/;
     bless( $tbl, $class );
@@ -505,28 +511,14 @@
     @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);
+    unless ($key)
+    {
+       delete $self->{row};
+       return;
+    }
     my @row = ( ref($val) eq 'ARRAY' ) ? ( $key, @$val ) : ( $key, $val );
+    $self->{row} = @row ? \...@row : undef;
     return wantarray ? @row : \...@row;
-
-    # fetch without %each
-    #
-    # $self->{keys} = [sort keys %{$self->{hash}}] unless $self->{keys};
-    # my $key = shift @{$self->{keys}};
-    # $key = shift @{$self->{keys}} if $self->{store_metadata}
-    #                             and $key
-    #                             and $key eq "_metadata \0";
-    # return undef unless defined $key;
-    # my @ary;
-    # $row = $self->{hash}->{$key};
-    # if (ref $row eq 'ARRAY') {
-    #   @ary = ( $key, @{$row} );
-    # }
-    # else {
-    #    @ary = ($key,$row);
-    # }
-    # return (@ary) if wantarray;
-    # return \...@ary;
 }
 
 # you must define push_row
@@ -591,7 +583,7 @@
 {
     my ( $self, $data, $aryref ) = @_;
     my $key = shift @$aryref;
-    return undef unless defined $key;
+    return unless(defined $key);
     my $row = ( ref($aryref) eq 'ARRAY' ) ? $aryref : [$aryref];
     $self->{hash}->{$key} = $self->{mldbm} ? $row : $row->[0];
 }

Reply via email to