Tim Bunce wrote:
> 
> Umm, carrying on from there... move %get_info_constants into DBD::Oracle::GetInfo
> and make get_info do:
> 
>   sub get_info {
>     my($dbh, $info_type) = @_;
>     require DBD::Oracle::GetInfo;
>     my $v = $DBD::Oracle::GetInfo::info{int($info_type)};
>     $v = &$v($dbh, $info_type) if ref $v eq 'CODE';
                     ----------
The implementation (currently) doesn't need that parameter.


Steffen
diff -Nrc DBD-Oracle-1.12.orig/Oracle/GetInfo.pm DBD-Oracle-1.12/Oracle/GetInfo.pm
*** DBD-Oracle-1.12.orig/Oracle/GetInfo.pm      Thu Jan 01 01:00:00 1970
--- DBD-Oracle-1.12/Oracle/GetInfo.pm   Sun Feb 03 21:36:11 2002
***************
*** 0 ****
--- 1,66 ----
+ package DBD::Oracle::GetInfo;
+ 
+ use DBD::Oracle();
+ 
+ my $fmt = '%02d.%02d.%1d%1d%1d%1d';   # ODBC version string: ##.##.#####
+ 
+ my $sql_driver_ver = sprintf $fmt, split (/\./, $DBD::Oracle::VERSION);
+ 
+ sub sql_dbms_version {
+     my $dbh = shift;
+     return sprintf $fmt, @{DBD::Oracle::db::ora_server_version($dbh)};
+ }
+ sub sql_data_source_name {
+     my $dbh = shift;
+     return 'dbi:Oracle:' . $dbh->{Name};
+ }
+ sub sql_user_name {
+     my $dbh = shift;
+     # XXX OPS$
+     return $dbh->{CURRENT_USER};
+ }
+ 
+ %info = (
+     117 =>  0                         # SQL_ALTER_DOMAIN
+ ,   114 =>  2                         # SQL_CATALOG_LOCATION
+ , 10003 => 'N'                        # SQL_CATALOG_NAME
+ ,    41 => '@'                        # SQL_CATALOG_NAME_SEPARATOR
+ ,    42 => 'Database Link'            # SQL_CATALOG_TERM
+ ,    87 => 'Y'                        # SQL_COLUMN_ALIAS
+ ,    22 =>  1                         # SQL_CONCAT_NULL_BEHAVIOR
+ ,   127 =>  0                         # SQL_CREATE_ASSERTION
+ ,   130 =>  0                         # SQL_CREATE_DOMAIN
+ ,     2 => \&sql_data_source_name     # SQL_DATA_SOURCE_NAME
+ ,    17 => 'Oracle'                   # SQL_DBMS_NAME
+ ,    18 => \&sql_dbms_version         # SQL_DBMS_VERSION
+ ,     6 => 'DBD/Oracle.pm'            # SQL_DRIVER_NAME
+ ,     7 =>  $sql_driver_ver           # SQL_DRIVER_VER
+ ,   136 =>  0                         # SQL_DROP_ASSERTION
+ ,   139 =>  0                         # SQL_DROP_DOMAIN
+ ,    28 =>  1                         # SQL_IDENTIFIER_CASE
+ ,    29 => '"'                        # SQL_IDENTIFIER_QUOTE_CHAR
+ ,    34 =>  0                         # SQL_MAX_CATALOG_NAME_LEN
+ ,    30 => 30                         # SQL_MAX_COLUMN_NAME_LEN
+ , 10005 => 30                         # SQL_MAX_IDENTIFIER_LEN
+ ,    32 => 30                         # SQL_MAX_OWNER_NAME_LEN
+ ,    34 =>  0                         # SQL_MAX_QUALIFIER_NAME_LEN
+ ,    32 => 30                         # SQL_MAX_SCHEMA_NAME_LEN
+ ,    35 => 30                         # SQL_MAX_TABLE_NAME_LEN
+ ,   107 => 30                         # SQL_MAX_USER_NAME_LEN
+ ,    90 => 'N'                        # SQL_ORDER_BY_COLUMNS_IN_SELECT
+ ,    39 => 'Owner'                    # SQL_OWNER_TERM
+ ,    40 => 'Procedure'                # SQL_PROCEDURE_TERM
+ ,   114 =>  2                         # SQL_QUALIFIER_LOCATION
+ ,    41 => '@'                        # SQL_QUALIFIER_NAME_SEPARATOR
+ ,    42 => 'Database Link'            # SQL_QUALIFIER_TERM
+ ,    93 =>  3                         # SQL_QUOTED_IDENTIFIER_CASE
+ ,    39 => 'Owner'                    # SQL_SCHEMA_TERM
+ ,    14 => '\\'                       # SQL_SEARCH_PATTERN_ESCAPE
+ ,    13 =>  sub {"$_[0]->{Name}"}     # SQL_SERVER_NAME
+ ,    94 => '$#'                       # SQL_SPECIAL_CHARACTERS
+ ,    45 => 'Table'                    # SQL_TABLE_TERM
+ ,    46 =>  3                         # SQL_TXN_CAPABLE
+ ,    47 => \&sql_user_name            # SQL_USER_NAME
+ );
+ 
+ 1;
diff -Nrc DBD-Oracle-1.12.orig/Oracle.pm DBD-Oracle-1.12/Oracle.pm
*** DBD-Oracle-1.12.orig/Oracle.pm      Fri Aug 31 18:27:18 2001
--- DBD-Oracle-1.12/Oracle.pm   Sun Feb 03 21:32:21 2002
***************
*** 313,318 ****
--- 313,327 ----
      }
  
  
+     sub get_info {
+       my($dbh, $info_type) = @_;
+       require DBD::Oracle::GetInfo;
+       my $v = $DBD::Oracle::GetInfo::info{int($info_type)};
+       $v = $v->($dbh) if ref $v eq 'CODE';
+       return $v;
+     }
+ 
+ 
      sub table_info {
        my($dbh, $attr) = @_;
        # XXX add knowledge of temp tables, etc
***************
*** 578,583 ****
--- 587,603 ----
        $sth->bind_param_inout(":param",      \$msg->[2], 4000);
        $sth->execute or return undef;
        return 1;
+     }
+ 
+     sub ora_server_version {
+       my $dbh = shift;
+       return $dbh->{ora_server_version} if defined $dbh->{ora_server_version};
+       $dbh->{ora_server_version} =
+          [ split /\./, $dbh->selectrow_array(<<'SQL', undef, 'Oracle%') .''];
+ SELECT version
+   FROM product_component_version
+  WHERE product LIKE ?
+ SQL
      }
  
  }   # end of package DBD::Oracle::db

Reply via email to