Similar to DBD::Oracle, here a implementation for DBD::ADO.
Steffen
diff -Nrc DBD-ADO-2.4.02-orig/lib/DBD/ADO/GetInfo.pm DBD-ADO-2.4.02/lib/DBD/ADO/GetInfo.pm *** DBD-ADO-2.4.02-orig/lib/DBD/ADO/GetInfo.pm Thu Jan 01 01:00:00 1970 --- DBD-ADO-2.4.02/lib/DBD/ADO/GetInfo.pm Mon Feb 04 20:37:27 2002 *************** *** 0 **** --- 1,62 ---- + package DBD::ADO::GetInfo; + + use DBD::ADO(); + + my $fmt = '%02d.%02d.%1d%1d%1d%1d'; # ODBC version string: ##.##.##### + + my $sql_driver_ver = sprintf $fmt, split (/\./, $DBD::ADO::VERSION); + + sub sql_concat_null_behavior { + { 1 => 0 # SQL_CB_NULL + , 2 => 1 # SQL_CB_NON_NULL + }->{$_[0]->{ado_conn}->Properties->{'NULL Concatenation Behavior'}{Value}}; + } + sub sql_identifier_case { + { 1 => 1 # SQL_IC_UPPER + , 2 => 2 # SQL_IC_LOWER + , 4 => 3 # SQL_IC_SENSITIVE + , 8 => 4 # SQL_IC_MIXED + }->{$_[0]->{ado_conn}->Properties->{'Identifier Case Sensitivity'}{Value}}; + } + 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; + } + 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; + } + + %info = ( + 22 => \&sql_concat_null_behavior # SQL_CONCAT_NULL_BEHAVIOR + , 6 => 'DBD/ADO.pm' # SQL_DRIVER_NAME # XXX + , 7 => $sql_driver_ver # SQL_DRIVER_VER # XXX + , 28 => \&sql_identifier_case # SQL_IDENTIFIER_CASE + , 29 => \&sql_identifier_quote_char # SQL_IDENTIFIER_QUOTE_CHAR + , 89 => \&sql_keywords # SQL_KEYWORDS + ); + + %odbc2ado = ( + 114 => 'Catalog Location' # SQL_CATALOG_LOCATION + , 42 => 'Catalog Term' # SQL_CATALOG_TERM + , 2 => 'Data Source Name' # SQL_DATA_SOURCE_NAME + , 17 => 'DBMS Name' # SQL_DBMS_NAME + , 18 => 'DBMS Version' # SQL_DBMS_VERSION + # 6 => 'Provider Name' # SQL_DRIVER_NAME # XXX + # 7 => 'Provider Version' # SQL_DRIVER_VER # XXX + , 40 => 'Procedure Term' # SQL_PROCEDURE_TERM + , 39 => 'Schema Term' # SQL_SCHEMA_TERM + , 45 => 'Table Term' # SQL_TABLE_TERM + , 47 => 'User Name' # SQL_USER_NAME + ); + + 1; diff -Nrc DBD-ADO-2.4.02-orig/lib/DBD/ADO.pm DBD-ADO-2.4.02/lib/DBD/ADO.pm *** DBD-ADO-2.4.02-orig/lib/DBD/ADO.pm Thu Dec 13 01:17:30 2001 --- DBD-ADO-2.4.02/lib/DBD/ADO.pm Mon Feb 04 20:45:18 2002 *************** *** 755,760 **** --- 755,771 ---- } + sub get_info { + my($dbh, $info_type) = @_; + require DBD::ADO::GetInfo; + if ( exists $DBD::ADO::GetInfo::odbc2ado{$info_type} ) { + return +$dbh->{ado_conn}->Properties->{$DBD::ADO::GetInfo::odbc2ado{$info_type}}{Value}; + } + my $v = $DBD::ADO::GetInfo::info{int($info_type)}; + $v = $v->($dbh) if ref $v eq 'CODE'; + return $v; + } + sub table_info { my($dbh, $attribs) = @_; my @tp;