in reply to Re: Metadata with Recordset
in thread Metadata with Recordset

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.

Replies are listed 'Best First'.
Re: Re: Re: Metadata with Recordset
by jZed (Prior) on Oct 11, 2003 at 23:16 UTC
    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.