No tests?

Tim.

On Wed, Sep 15, 2010 at 10:48:36PM -0700, rehs...@cvs.perl.org wrote:
> Author: REHSACK
> Date: Wed Sep 15 22:48:35 2010
> New Revision: 14407
> 
> Modified:
>    dbi/trunk/Changes
>    dbi/trunk/lib/DBD/DBM.pm
>    dbi/trunk/lib/DBD/File.pm
>    dbi/trunk/lib/DBD/File/Developers.pod
>    dbi/trunk/lib/DBD/File/HowTo.pod
> 
> Log:
> Added register_compat_map() and table_meta_attr_changed() to DBD::File::Table
> 
> 
> Modified: dbi/trunk/Changes
> ==============================================================================
> --- dbi/trunk/Changes (original)
> +++ dbi/trunk/Changes Wed Sep 15 22:48:35 2010
> @@ -31,6 +31,8 @@
>    Added improved developers documentation for DBI::DBD::SqlEngine
>    Added guides how to write DBI drivers using DBI::DBD::SqlEngine
>      or DBD::File 
> +  Added register_compat_map() and table_meta_attr_changed() to
> +    DBD::File::Table
>  
>  =head2 Changes in DBI 1.613 (svn r14271) 22nd July 2010
>  
> 
> Modified: dbi/trunk/lib/DBD/DBM.pm
> ==============================================================================
> --- dbi/trunk/lib/DBD/DBM.pm  (original)
> +++ dbi/trunk/lib/DBD/DBM.pm  Wed Sep 15 22:48:35 2010
> @@ -271,6 +271,14 @@
>                        );
>  __PACKAGE__->register_reset_on_modify( \%reset_on_modify );
>  
> +my %compat_map = (
> +    map { $_ => "dbm_$_" } qw(type mldbm store_metadata),
> +    dbm_ext => 'f_ext',
> +    dbm_file => 'f_file',
> +    dbm_lockfile => ' f_lockfile',
> +    );
> +__PACKAGE__->register_compat_map (\%compat_map);
> +
>  sub bootstrap_table_meta
>  {
>      my ( $self, $dbh, $meta, $table ) = @_;
> 
> Modified: dbi/trunk/lib/DBD/File.pm
> ==============================================================================
> --- dbi/trunk/lib/DBD/File.pm (original)
> +++ dbi/trunk/lib/DBD/File.pm Wed Sep 15 22:48:35 2010
> @@ -881,6 +881,10 @@
>      f_lockfile => "f_fqfn", # forces new file2table call
>      );
>  
> +my %compat_map = (
> +    map { $_ => "f_$_" } qw( file ext lock lockfile )
> +);
> +
>  sub register_reset_on_modify
>  {
>      my ($proto, $extra_resets) = @_;
> @@ -888,9 +892,18 @@
>      return;
>      } # register_reset_on_modify
>  
> +sub register_compat_map
> +{
> +    my ($proto, $extra_compat_map) = @_;
> +    %compat_map = (%compat_map, %$extra_compat_map);
> +    return;
> +    } # register_compat_map
> +
>  sub get_table_meta_attr
>  {
>      my ($class, $meta, $attrib) = @_;
> +    exists $compat_map{$attrib} and
> +     $attrib = $compat_map{$attrib};
>      exists $meta->{$attrib} and
>       return $meta->{$attrib};
>      return;
> @@ -899,11 +912,19 @@
>  sub set_table_meta_attr
>  {
>      my ($class, $meta, $attrib, $value) = @_;
> +    exists $compat_map{$attrib} and
> +     $attrib = $compat_map{$attrib};
> +    $class->table_meta_attr_changed ($meta, $attrib, $value);
> +    $meta->{$attrib} = $value;
> +    } # set_table_meta_attr
> +
> +sub table_meta_attr_changed
> +{
> +    my ($class, $meta, $attrib, $value) = @_;
>      defined $reset_on_modify{$attrib} and
>       delete $meta->{$reset_on_modify{$attrib}} and
>       delete $meta->{initialized};
> -    $meta->{$attrib} = $value;
> -    } # set_table_meta_attr
> +    } # table_meta_attr_changed
>  
>  # ====== FILE OPEN 
> =============================================================
>  
> 
> Modified: dbi/trunk/lib/DBD/File/Developers.pod
> ==============================================================================
> --- dbi/trunk/lib/DBD/File/Developers.pod     (original)
> +++ dbi/trunk/lib/DBD/File/Developers.pod     Wed Sep 15 22:48:35 2010
> @@ -56,9 +56,15 @@
>                           myd_mno => "myd_bar",
>                         );
>      __PACKAGE__->register_reset_on_modify( \%reset_on_modify );
> +    my %compat_map = (
> +                    abc => 'foo_abc',
> +                    xyz => 'foo_xyz',
> +                  );
> +    __PACKAGE__->register_compat_map( \%compat_map );
>  
>      sub bootstrap_table_meta { ... }
>      sub init_table_meta { ... }
> +    sub table_meta_attr_changed { ... }
>      sub open_file { ... }
>  
>      sub fetch_row { ... }
> @@ -432,19 +438,24 @@
>  
>  =item get_table_meta_attr
>  
> -Returns a single attribute from the table meta data. This method should
> -be overridden when mapped attribute names should be returned for
> -compatibility reasons.
> +Returns a single attribute from the table meta data. If the attribute
> +name appears in C<%compat_map>, the attribute name is updated from
> +there.
>  
>  =item set_table_meta_attr
>  
> -Sets a single attribute in the table meta data. This method should
> -be overridden when mapped attribute names should be modified for
> -compatibility reasons.
> +Sets a single attribute in the table meta data. If the attribute
> +name appears in C<%compat_map>, the attribute name is updated from
> +there.
> +
> +=item table_meta_attr_changed
> +
> +Called when an attribute of the meta data is modified.
>  
>  If the modified attribute requires to reset a calculated attribute, the
>  calculated attribute is reset (deleted from meta data structure) and
> -the I<initialized> flag is removed, too.
> +the I<initialized> flag is removed, too. The decision is made based on
> +C<%register_reset_on_modify>.
>  
>  =item register_reset_on_modify
>  
> @@ -459,6 +470,15 @@
>      my %reset_on_modify = ( "xxx_foo" => "xxx_bar" );
>      __PACKAGE__->register_reset_on_modify( \%reset_on_modify );
>  
> +=item register_compat_map
> +
> +Allows C<get_table_meta_attr> and C<set_table_meta_attr> to update the
> +attribute name to the current favored one:
> +
> +    # from DBD::DBM
> +    my %compat_map = ( "dbm_ext" => "f_ext" );
> +    __PACKAGE__->register_compat_map( \%compat_map );
> +
>  =item open_file
>  
>  Called to open the table's data file.
> 
> Modified: dbi/trunk/lib/DBD/File/HowTo.pod
> ==============================================================================
> --- dbi/trunk/lib/DBD/File/HowTo.pod  (original)
> +++ dbi/trunk/lib/DBD/File/HowTo.pod  Wed Sep 15 22:48:35 2010
> @@ -204,6 +204,16 @@
>      sub get_table_meta_attr { ... }
>      sub set_table_meta_attr { ... }
>  
> +Both methods can adjust the attribute name for compatibility reasons, e.g.
> +when former versions of the DBD allowed different names to be used for the
> +same flag:
> +
> +    my %compat_map = (
> +                    abc => 'foo_abc',
> +                    xyz => 'foo_xyz',
> +                  );
> +    __PACKAGE__->register_compat_map( \%compat_map );
> +
>  If any user modification on a meta attribute needs reinitialization of
>  the meta structure (in case of C<DBD::File> these are the attributes
>  C<f_file>, C<f_dir>, C<f_ext> and C<f_lockfile>), inform DBD::File by
> @@ -218,6 +228,19 @@
>  The next access to the table meta data will force DBD::File to re-do the
>  entire meta initialization process.
>  
> +Any further action which needs to be taken can handled in
> +C<table_meta_attr_changed>:
> +
> +    sub table_meta_attr_changed
> +    {
> +     my ($class, $meta, $attrib, $value) = @_;
> +     ...
> +     $class->SUPER::table_meta_attr_changed ($meta, $attrib, $value);
> +    }
> +
> +This is done before the new value is set in C<$meta>, so the attribute
> +changed handler can act depending on the old value.
> +
>  =head2 Testing
>  
>  Now you should have your own DBD::File based driver. Was easy, wasn't it?
> 

Reply via email to