Tim Bunce wrote:
> 
> You won't get far without providing a strong case for *why*.
> 
I have tried on a number of occasions but got no response so I decied to
have a ago a creating a working, patched version and offering it up for
RFC.

And even if these changes are not accepted by the DBI community I might
want to implement them locally and so it woul dbe nice to know how to do
it.

I want to add the following two methods and modify the tables method. 
These changes require four new attributes (see attached).

The idea is that by using sensible default values for these attributes
nothing will break.  But as time goes by, we can start to use the
build_identifier and quote_identifier methods wherever a method returns
a database identifier.  This will become more of an issue as more schema
methods are added to the DBI specification.  I expect the next release
will contain methods like column_info, foreign_key_info and as we start
to use this meta-data we will need a database independent way of
identifying database objects.

--
  Simon Oliver

IdentifierColumns => [0,1,2]
IdentifierSeparator => q{.}
IdentifierQuoteStart => q{"}
IdentifierQuoteEnd => q{"}


    sub build_identifier {
        my ($dbh, @ids) = @_;
        my $id = join $dbh->{IdentifierSeparator}, 
                map($dbh->quote_identifier($_), @ids);
        return $id;
        }

    sub quote_identifier {
        my ($dbh, $id, $qs, qe) = @_;
        return $id unless $dbh->{QuotedIdentifiers};
        my $id ||= '';
        my $qs ||= $dbh->{IdentifierQuoteStart};
        my $qe ||= $qs 
               ||  $dbh->{IdentifierQuoteEnd} 
               ||  $dbh->{IdentifierQuoteStart};
        return "$qs$id$qe";
        }

    sub tables {
        my ($dbh, @args) = @_;
        my $sth = $dbh->table_info(@args);
        return unless $sth;
        my ($row, @tables);
        while($row = $sth->fetch) {
                my @ids = ();
                foreach my $id (@$row[@{$dbh->{IdentifierColumns}}]) {
                        push(@ids, $id) if defined $id;
                }
                push @tables, $dbh->build_identifier(@ids);
        }
        return @tables;
    }

Reply via email to