On Wed, 30 Jun 2010 08:37:33 +0200, "H.Merijn Brand"
<h.m.br...@xs4all.nl> wrote:

> On Tue, 29 Jun 2010 19:12:19 +0000, Jens Rehsack
> <rehs...@googlemail.com> wrote:
> 
> > Hi,
> > 
> > because of a bogus implementation for PRECISION, NULLABLE etc.
> > attributes in DBD::CSV (forced by limitations of SQL::Statement)
> > we have a new attribute for tables in DBD::File meta data:
> > 'table_defs'. This is filled when a 'CREATE TABLE ...' is executed
> > and copies the $stmt->{table_defs} structure (containing column
> > name and some more information - what ever could be specified
> > using (ANSI) SQL to create tables).
> > 
> > Could it makes sense to have a DBD::File supported way to store
> > and load this meta-data (serialized, of course)?
> 
> I'm all in favor of saving data-dictionary info in some persistent
> way, but as Tim said, not by default.
> 
> It should be a user option, and the interface should be configurable
> DBD::File should support what is installed, but only *if* it is
> installed and available. I personally would prefer JSON, with YAML
> on second position both very well fit the bill for DBD dict storage
> YAML is available for CPAN
> 
>   my $dbh = DBI->connect ("dbi:CSV:", undef, undef, {
>       f_dir      => "data",
>       f_ext      => ".csv/r",
>       f_encoding => "utf8",
>       f_schema   => undef,
>       f_dict     => $dict,
>       }) or die DBI->errstr;
> 
> where $dict is
> 1. A hash           see below
> 2. A hashref        ref to 1.
> 3. A filename       filename
> 4. A listref        [ filename, storage type ]
> 
> The hash/ref from the DDD can be read from or written to file in case
> of 3 or 4. this way we are backward compatible and support more than
> ever before. The content of the hash should be very well documented and
> all errors in it should optionally be ignored.
> 
> "storage type" can be any means of persistence: "JSON", "YAML",
> "Storable", "Freeze", where "Storable" is the default as it is
> available in CORE since ages.
> 
> The hash could be something like ...
> 
> my $hash = {
>     foo  => [
>         [ "bar",    [ "numeric", 4 ], [ "not null", "primary key" ] ],
>         [ "baz",    [ "integer"    ],                               ],
>         [ "drz",    [ "char",   60 ],                               ],
>         [ "fbg",    [ "numeric", 2, 2 ], [ ], [ "default", 0.0 ],   ],
>         [ "c_base", [ "numeric", 4 ], [ "not null" ]                ],
>         ],
>     base => [
>         [ "c_base", [ "numeric", 4 ], [ "not null", "primary key" ] ],
>         [ ...
>     :
>     "\cA:links" => [
>         [ "foo.bar" => "base.c_base" ],
>         :

A bit more thought leads to better portability ...

my $hash = {

    meta => {
        f_dir       => "data",
        f_schema    => undef,
        f_ext       => ".csv/r",
        f_encoding  => "utf8",
        f_lock      => 1,
        },
        
    tables => {

        foo => {
            meta => {
                file  => "foo.csv",
                key   => [ "c_foo" ],
                },
            fields => [
                [ c_foo => {
                      NAME       => "c_foo",
                      NAME_lc    => "c_foo",
                      NAME_uc    => "C_FOO",
                      NULLABLE   => 0,
                      PRECISION  => 2,
                      SCALE      => undef,
                      TYPE       => 5,
                      TYPE_NAME  => "NUMERIC"
                      }],

                [ foo => {
                      NAME       => "foo",
                      NAME_lc    => "foo",
                      NAME_uc    => "FOO",
                      NULLABLE   => 1,
                      PRECISION  => 40,
                      SCALE      => undef,
                      TYPE       => 12,
                      TYPE_NAME  => "VARCHAR"
                      }],
                :
                :
                ],
            },
        :
        :
        },

    links => {
        "bar.c_foo"     => "foo.c_foo",
        :
        },

    indices => {
        foo => [
            [ "c_foo", "foo DESC" ],
            :
            ],
        :

-- 
H.Merijn Brand  http://tux.nl      Perl Monger  http://amsterdam.pm.org/
using 5.00307 through 5.12 and porting perl5.13.x on HP-UX 10.20, 11.00,
11.11, 11.23, and 11.31, OpenSuSE 10.3, 11.0, and 11.1, AIX 5.2 and 5.3.
http://mirrors.develooper.com/hpux/           http://www.test-smoke.org/
http://qa.perl.org      http://www.goldmark.org/jeff/stupid-disclaimers/

Reply via email to