Author: REHSACK
Date: Fri Dec 21 02:13:49 2012
New Revision: 15535

Modified:
   dbi/branches/sqlengine/lib/DBD/File/HowTo.pod
   dbi/branches/sqlengine/lib/DBI/DBD/SqlEngine/HowTo.pod

Log:
move meta compat description from DBD::File::HowTo to DBI::DBD::SqlEngine::HowTo

Modified: dbi/branches/sqlengine/lib/DBD/File/HowTo.pod
==============================================================================
--- dbi/branches/sqlengine/lib/DBD/File/HowTo.pod       (original)
+++ dbi/branches/sqlengine/lib/DBD/File/HowTo.pod       Fri Dec 21 02:13:49 2012
@@ -140,32 +140,11 @@
 =head2 User comfort
 
 C<DBD::File> since C<0.39> consolidates all persistent meta data of a table
-into a single structure stored in C<< $dbh->{f_meta} >>. While DBD::File
-provides only readonly access to this structure, modifications are still
-allowed.
-
-Primarily DBD::File provides access via setters C<get_file_meta>,
-C<set_file_meta> and C<clear_file_meta>. Those methods are easily
-accessible by the users via the C<< $dbh->func () >> interface provided
-by DBI. Well, many users don't feel comfortize when calling
-
-    # don't require extension for tables cars
-    $dbh->func ("cars", "f_ext", ".csv", "set_file_meta");
-
-DBD::File will inject a method into your driver to increase the user
-comfort to allow:
-
-    # don't require extension for tables cars
-    $dbh->foo_set_meta ("cars", "f_ext", ".csv");
-
-Better, but here and there users likes to do:
-
-    # don't require extension for tables cars
-    $dbh->{foo_tables}->{cars}->{f_ext} = ".csv";
-
-This interface is provided when derived DBD's define following in
-C<init_valid_attributes> (please compare carefully with the example in
-DBI::DBD::SqlEngine::HowTo):
+into a single structure stored in C<< $dbh->{f_meta} >>. With C<DBD::File>
+version C<0.41> and C<DBI::DBD::SqlEngine> version C<0.05>, this
+consolidation moves to L<DBI::DBD::SqlEngine>. It's still the
+C<< $dbh->{$drv_prefix . "_meta"} >> attribute which cares, so what you
+learned at this place before, is still valid.
 
     sub init_valid_attributes
     {
@@ -173,73 +152,15 @@
 
        $dbh->SUPER::init_valid_attributes ();
 
-       $dbh->{foo_valid_attrs} = {
-           foo_version         => 1,   # contains version of this driver
-           foo_valid_attrs     => 1,   # contains the valid attributes of foo 
drivers
-           foo_readonly_attrs  => 1,   # contains immutable attributes of foo 
drivers
-           foo_bar             => 1,   # contains the bar attribute
-           foo_baz             => 1,   # contains the baz attribute
-           foo_manager         => 1,   # contains the manager of the driver 
instance
-           foo_manager_type    => 1,   # contains the manager class of the 
driver instance
-           foo_meta            => 1,   # contains the public interface to 
modify table meta attributes
-       };
-       $dbh->{foo_readonly_attrs} = {
-           foo_version         => 1,   # ensure no-one modifies the driver 
version
-           foo_valid_attrs     => 1,   # do not permit to add more valid 
attributes ...
-           foo_readonly_attrs  => 1,   # ... or make the immutable mutable
-           foo_manager         => 1,   # manager is set internally only
-           foo_meta            => 1,   # ensure public interface to modify 
table meta attributes are immutable
-       };
+       $dbh->{foo_valid_attrs} = { ... };
+       $dbh->{foo_readonly_attrs} = { ...  };
 
        $dbh->{foo_meta} = "foo_tables";
 
        return $dbh;
     }
 
-This provides a tied hash in C<< $dbh->{foo_tables} >> and a tied hash for
-each table's meta data in C<< $dbh->{foo_tables}->{$table_name} >>.
-Modifications on the table meta attributes are done using the table
-methods:
-
-    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
-doing 
-
-    my %reset_on_modify = (
-                           foo_xyz => "foo_bar",
-                           foo_abc => "foo_bar",
-                         );
-    __PACKAGE__->register_reset_on_modify( \%reset_on_modify );
-
-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.
+See updates at L<DBI::DBD::SqlEngine::HowTo/User comfort>.
 
 =head2 Testing
 

Modified: dbi/branches/sqlengine/lib/DBI/DBD/SqlEngine/HowTo.pod
==============================================================================
--- dbi/branches/sqlengine/lib/DBI/DBD/SqlEngine/HowTo.pod      (original)
+++ dbi/branches/sqlengine/lib/DBI/DBD/SqlEngine/HowTo.pod      Fri Dec 21 
02:13:49 2012
@@ -179,6 +179,110 @@
 still can't do anything. It can do less than nothing - meanwhile it's
 not a stupid storage area anymore.
 
+=head2 User comfort
+
+C<DBI::DBD::SqlEngine> since C<0.05> consolidates all persistent meta data
+of a table into a single structure stored in C<< $dbh->{sql_meta} >>. While
+DBI::DBD::SqlEngine provides only readonly access to this structure,
+modifications are still allowed.
+
+Primarily DBI::DBD::SqlEngine provides access via the setters
+C<get_sql_engine_meta>, C<get_single_table_meta>, C<set_single_table_meta>,
+C<set_sql_engine_meta> and C<clear_sql_engine_meta>. Those methods are
+easily accessible by the users via the C<< $dbh->func () >> interface
+provided by DBI. Well, many users don't feel comfortize when calling
+
+    # don't require extension for tables cars
+    $dbh->func ("cars", "f_ext", ".csv", "set_sql_engine_meta");
+
+DBI::DBD::SqlEngine will inject a method into your driver to increase the
+user comfort to allow:
+
+    # don't require extension for tables cars
+    $dbh->foo_set_meta ("cars", "f_ext", ".csv");
+
+Better, but here and there users likes to do:
+
+    # don't require extension for tables cars
+    $dbh->{foo_tables}->{cars}->{f_ext} = ".csv";
+
+This interface is provided when derived DBD's define following in
+C<init_valid_attributes> (re-capture L</Deal with own attributes>):
+
+    sub init_valid_attributes
+    {
+       my $dbh = $_[0];
+
+       $dbh->SUPER::init_valid_attributes ();
+
+       $dbh->{foo_valid_attrs} = {
+           foo_version         => 1,   # contains version of this driver
+           foo_valid_attrs     => 1,   # contains the valid attributes of foo 
drivers
+           foo_readonly_attrs  => 1,   # contains immutable attributes of foo 
drivers
+           foo_bar             => 1,   # contains the bar attribute
+           foo_baz             => 1,   # contains the baz attribute
+           foo_manager         => 1,   # contains the manager of the driver 
instance
+           foo_manager_type    => 1,   # contains the manager class of the 
driver instance
+           foo_meta            => 1,   # contains the public interface to 
modify table meta attributes
+       };
+       $dbh->{foo_readonly_attrs} = {
+           foo_version         => 1,   # ensure no-one modifies the driver 
version
+           foo_valid_attrs     => 1,   # do not permit to add more valid 
attributes ...
+           foo_readonly_attrs  => 1,   # ... or make the immutable mutable
+           foo_manager         => 1,   # manager is set internally only
+           foo_meta            => 1,   # ensure public interface to modify 
table meta attributes are immutable
+       };
+
+       $dbh->{foo_meta} = "foo_tables";
+
+       return $dbh;
+    }
+
+This provides a tied hash in C<< $dbh->{foo_tables} >> and a tied hash for
+each table's meta data in C<< $dbh->{foo_tables}->{$table_name} >>.
+Modifications on the table meta attributes are done using the table
+methods:
+
+    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<DBI::DBD::SqlEngine> these are the attributes
+C<f_file>, C<f_dir>, C<f_ext> and C<f_lockfile>), inform DBI::DBD::SqlEngine by
+doing 
+
+    my %reset_on_modify = (
+                           foo_xyz => "foo_bar",
+                           foo_abc => "foo_bar",
+                         );
+    __PACKAGE__->register_reset_on_modify( \%reset_on_modify );
+
+The next access to the table meta data will force DBI::DBD::SqlEngine 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 Dealing with Tables
 
 Let's put some life into it - it's going to be time for it.
@@ -188,6 +292,10 @@
 SQL::Statement::Embed regarding embedding in own DBD's works pretty
 fine with SQL::Statement and DBI::SQL::Nano.
 
+Second look should go to L<DBI::DBD::SqlEngine::Developers> to get a
+picture over the driver part of the table API. Usually there isn't much
+to do for an easy driver.
+
 =head2 Testing
 
 Now you should have your first own DBD. Was easy, wasn't it?  But does

Reply via email to