Author: REHSACK
Date: Sun May 23 09:31:21 2010
New Revision: 14012

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

Log:
- add support for st attributes TYPE and NULLABLE
- apply style


Modified: dbi/trunk/lib/DBD/DBM.pm
==============================================================================
--- dbi/trunk/lib/DBD/DBM.pm    (original)
+++ dbi/trunk/lib/DBD/DBM.pm    Sun May 23 09:31:21 2010
@@ -245,6 +245,35 @@
 $DBD::DBM::st::imp_data_size = 0;
 @DBD::DBM::st::ISA           = qw(DBD::File::st);
 
+sub FETCH
+{
+    my ( $sth, $attr ) = @_;
+
+    # Being a bit dirty here, as neither SQL::Statement::Structure nor
+    # DBI::SQL::Nano::Statement_ does not offer an interface to the
+    # required data
+    my @colnames;
+    if ( $sth->{f_stmt}->isa('SQL::Statement') )
+    {
+        my $struct = $sth->{f_stmt}{struct} || {};
+        my @coldefs = @{ $struct->{column_defs} || [] };
+        @colnames = map { $_->{name} || $_->{value} } @coldefs;
+    }
+    @colnames = $sth->{f_stmt}->column_names() unless (@colnames);
+
+    $attr eq "TYPE" and return [ map { "CHAR" } @colnames ];
+
+    # XXX not really known ...
+    # $attr eq "PRECISION" and
+
+    # XXX only BerkeleyDB fails having NULL values for non-MLDBM databases,
+    #     none accept it for key - but it requires more knowledge between
+    #     queries and tables storage to return fully correct information
+    $attr eq "NULLABLE" and return [ map { 0 } @colnames ];
+
+    return $sth->SUPER::FETCH($attr);
+}    # FETCH
+
 sub dbm_schema
 {
     my ( $sth, $tname ) = @_;
@@ -289,8 +318,8 @@
 sub init_table_meta ($$$$$)
 {
     my ( $self, $dbh, $table, $file_is_table, $quoted ) = @_;
-    defined $dbh->{f_meta}->{$table} and "HASH" eq ref 
$dbh->{f_meta}->{$table} or
-        $dbh->{f_meta}->{$table} = {};
+    defined $dbh->{f_meta}->{$table} and "HASH" eq ref $dbh->{f_meta}->{$table}
+      or $dbh->{f_meta}->{$table} = {};
     my $meta = $dbh->{f_meta}->{$table};
 
     $meta->{dbm_type} ||= $dbh->{dbm_type} || 'SDBM_File';
@@ -330,8 +359,8 @@
         if ( $meta->{dbm_mldbm} )
         {
             require "MLDBM.pm" unless ( $INC{"MLDBM.pm"} );
-           $meta->{dbm_usedb} = $tie_type;
-            $tie_type          = 'MLDBM';
+            $meta->{dbm_usedb} = $tie_type;
+            $tie_type = 'MLDBM';
         }
 
         $meta->{dbm_tietype} = $tie_type;
@@ -484,7 +513,7 @@
 {
     my ( $self, $data, $row_aryref ) = @_;
     my $meta = $self->{meta};
-    my $key = shift @$row_aryref;
+    my $key  = shift @$row_aryref;
     if ( $meta->{dbm_mldbm} )
     {
         $meta->{hash}->{$key} = $row_aryref;
@@ -543,7 +572,7 @@
 {
     my ( $self, $data, $aryref ) = @_;
     my $meta = $self->{meta};
-    my $key = shift @$aryref;
+    my $key  = shift @$aryref;
     return unless ( defined $key );
     my $row = ( ref($aryref) eq 'ARRAY' ) ? $aryref : [$aryref];
     $meta->{hash}->{$key} = $meta->{dbm_mldbm} ? $row : $row->[0];
@@ -552,7 +581,7 @@
 sub update_specific_row ($$$$)
 {
     my ( $self, $data, $aryref, $origary ) = @_;
-    my $meta = $self->{meta};
+    my $meta   = $self->{meta};
     my $key    = shift @$origary;
     my $newkey = shift @$aryref;
     return unless ( defined $key );

Reply via email to