Attached is a possible implementation for DBD::ADO. Only a few information types are supported, but it's a beginning. I'm somewhat unsure about SQL_DRIVER_*, because two layers (DBD::ADO and an ADO Provider) are involved.
Steffen
*** DBD-ADO-2.4.02/lib/DBD/ADO.pm Thu Dec 13 01:17:30 2001 --- ADO.pm Sun Dec 16 09:41:35 2001 *************** *** 754,759 **** --- 754,795 ---- $sth; } + sub get_info { + my($dbh, $info_type) = @_; + + # XXX Caching + if ( $info_type eq 'SQL_KEYWORDS') { + my $sth = $dbh->func('adSchemaDBInfoKeywords','OpenSchema'); + my @Keywords = (); + while ( my $row = $sth->fetch ) { + push @Keywords, $row->[0]; + } + return join ',', @Keywords; + } + if ( $info_type eq 'SQL_IDENTIFIER_QUOTE_CHAR') { + my $sth = $dbh->func('adSchemaDBInfoLiterals','OpenSchema'); + while ( my $row = $sth->fetch ) { + return $row->[1] if $row->[0] eq 'QUOTE'; # XXX +QUOTE_PREFIX, QUOTE_SUFFIX + } + } + my %gi = ( + SQL_CATALOG_TERM => 'Catalog Term' + , SQL_DATA_SOURCE_NAME => 'Data Source Name' # XXX SQL_DATABASE_NAME + , SQL_DBMS_NAME => 'DBMS Name' + , SQL_DBMS_VERSION => 'DBMS Version' + , SQL_DRIVER_NAME => 'Provider Name' # XXX __FILE__ + , SQL_DRIVER_VER => 'Provider Version' # XXX $DBD::ADO::VERSION + , SQL_PROCEDURE_TERM => 'Procedure Term' + , SQL_SCHEMA_TERM => 'Schema Term' + , SQL_TABLE_TERM => 'Table Term' + , SQL_USER_NAME => 'User Name' + ); + if ( exists $gi{$info_type} ) { + return $dbh->{ado_conn}->Properties->{$gi{$info_type}}{Value}; + } + return undef; + } + sub table_info { my($dbh, $attribs) = @_;