in reply to Metadata with Recordset

most that is done via DBIx::Database in the DBIx::Recordset distro... I will dig up an example and get back at ya in a skinny.

Carter's compass: I know I'm on the right track when by deleting something, I'm adding functionality.

Replies are listed 'Best First'.
Re: Re: Metadata with Recordset
by princepawn (Parson) on Oct 10, 2003 at 19:47 UTC
    The DBIx::Connect management of database connection is optional --- but hey I like it! :)
    use DBIx::Database; use DBIx::Connect; use Data::Dumper; my %mdb = DBIx::Connect->data_hash('mdb'); $db = DBIx::Database -> new ({'!DataSource' => $mdb{dsn}, '!Username' => $mdb{user}, '!Password' => $mdb{pass}, '!KeepOpen' => 1}) ; my $field = $db -> AllNames ('customer'); #die Dumper($field); print "fields in database order:\n @field"; print join("\n", @$field); @$field = sort @$field; print "\n\n"; print "fields in alphabetical order:\n ", join "\n", @$field;

    Carter's compass: I know I'm on the right track when by deleting something, I'm adding functionality.

      How does this method handle the case of the fields? The SQL standard does not specify whether field names are stored in lower, mixed, or upper case and each DBMS has its own choice. (This is how they're stored and returned from a query , not how they're used in SQL which must be case insensitive unless quoted). DBI makes this explicit with (and recommends the use of) $sth->{NAME_lc} and $sth->{NAME_uc} rather than the kind of generic query that Recordset seems to use. Also, presumbably Recordset has equivalents of DBI's table_info() and type_info(), etc. for other kinds of metadata?
        How does this method handle the case of the fields?
        It depends on how you set !PreserveCase when you called it.
        # line 231 of DBIx::Database my $fields = $sth?$sth -> FETCH ($PreserveCase?'NAME':'NAME_lc'):[] +;
        The SQL standard does not specify whether field names are stored in lower, mixed, or upper case and each DBMS has its own choice. (This is how they're stored and returned from a query , not how they're used in SQL which must be case insensitive unless quoted)
        Actually Oracle always returns field names in uppercase

        DBI makes this explicit with (and recommends the use of) $sth->{NAME_lc} and $sth->{NAME_uc} rather than the kind of generic query that Recordset seems to use.
        After looking at line 231, you _know_ what Recordset does. And you know that !PreserveCase allows one to force lowercase or take the field name as it is... it does not appear to support NAME_uc

        Carter's compass: I know I'm on the right track when by deleting something, I'm adding functionality.