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;

Reply via email to