On Thu, Feb 07, 2002 at 11:13:22AM +0100, Steffen Goeldner wrote:
> Tim Bunce wrote:
> > 
> > On Wed, Feb 06, 2002 at 09:48:54AM +0100, Steffen Goeldner wrote:
> [...]
> 
> > > I'm not sure if we can cache *every* value. Is it possible that a DBMS
> > > allows to change some properties at runtime (something like 'ALTER
> > > SESSION SET ...')?
> > 
> > Umm [grumble], you're right.  How about this:
> > 
> >         if (ref $v eq 'CODE') {
> >             my $get_info_cache = $dbh->{dbd_get_info_cache} ||= {};
> >             return $get_info_cache->{$info_type} if exists 
>$get_info_cache->{$info_type};
> >             $v = $v->($dbh);
> >             $get_info_cache->{$info_type} = ($v=$$v) if ref $v eq 'SCALAR';
>                                               ---------------------
> Here, the SCALAR-ref indicates: Cache it! (missing 'not'?)
> I'd rather replace the pragma 'use short;' with 'no obfuscate;' ;-)

:-)

> + sub sql_identifier_quote_char {
> +     my $dbh = shift;
> +     my $sth = $dbh->func('adSchemaDBInfoLiterals','OpenSchema');
> +     while ( my $row = $sth->fetch ) {
> +             return $row->[1] if $row->[0] eq 'QUOTE'; # XXX QUOTE_PREFIX, 
>QUOTE_SUFFIX
> +     }
> +     return undef;
> + }

Probably need a $sth->finish in there.

> + sub sql_keywords {
> +     my $dbh = shift;
> +     my $sth = $dbh->func('adSchemaDBInfoKeywords','OpenSchema');
> +     my @Keywords = ();
> +     while ( my $row = $sth->fetch ) {
> +             push @Keywords, $row->[0];
> +     }
> +     return join ',', @Keywords;
> + }

Or maybe:
    return join ',', @{ $dbh->selectcol_arrayref($sth)||[] };

> + %info = (
> +      22 => \&sql_concat_null_behavior     # SQL_CONCAT_NULL_BEHAVIOR
> + ,     6 => 'DBD/ADO.pm'                   # SQL_DRIVER_NAME               # XXX

Maybe $INC{"DBD/ADO.pm"} instead.
        
> --- DBD-ADO-2.4.02/lib/DBD/ADO.pm     Wed Feb 06 20:20:22 2002
>   
> +     sub get_info {
> +             my($dbh, $info_type) = @_;
> +             require DBD::ADO::GetInfo;
> +             if ( exists $DBD::ADO::GetInfo::odbc2ado{$info_type} ) {

int($info_type) like:

> +             my $v = $DBD::ADO::GetInfo::info{int($info_type)};


Many thanks again Steffen.

Tim.

Reply via email to