package DBD::ADO::GetInfo; use strict; my $fmt = '%02d.%02d.%1d%1d%1d%1d'; # ODBC version string: ##.##.##### my $sql_driver_ver = sprintf $fmt, split(/[\._]/,"$DBD::ADO::VERSION.0.0.0.0.0"); our %info = ( 41 => \&sql_catalog_name_separator # SQL_CATALOG_NAME_SEPARATOR , 22 => \&sql_concat_null_behavior # SQL_CONCAT_NULL_BEHAVIOR , 6 => $INC{'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 , 36 => \&sql_mult_result_sets # SQL_MULT_RESULT_SETS ); our %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 ); sub sql_catalog_name_separator { my $dbh = shift; DBD::ADO::db::ado_schema_dbinfo_literal( $dbh,'CATALOG_SEPARATOR') ||'.'; } 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; DBD::ADO::db::ado_schema_dbinfo_literal( $dbh,'QUOTE') || DBD::ADO::db::ado_schema_dbinfo_literal( $dbh,'QUOTE_PREFIX') ||'"'; } 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; } sub sql_mult_result_sets { $_[0]->{ado_conn}->Properties->{'Multiple Results'}{Value} ? 'Y':'N'; } 1;