[svn:dbd-oracle] r15138 - in dbd-oracle/trunk: . lib/DBD lib/DBD/Oracle t

[email protected] Fri, 10 Feb 2012 11:17:16 -0800 (PST)
Newsgroups perl.dbd.oracle.changes
Message-ID <[email protected]>
Author: yanick
Date: Fri Feb 10 11:17:15 2012
New Revision: 15138

Modified:
   dbd-oracle/trunk/Changes
   dbd-oracle/trunk/dbdimp.c
   dbd-oracle/trunk/lib/DBD/Oracle.pm
   dbd-oracle/trunk/lib/DBD/Oracle/GetInfo.pm
   dbd-oracle/trunk/t/rt74753-utf8-encoded.t

Log:
rt74753 for truncated strings

with some code tidying

Modified: dbd-oracle/trunk/Changes
==============================================================================
--- dbd-oracle/trunk/Changes	(original)
+++ dbd-oracle/trunk/Changes	Fri Feb 10 11:17:15 2012
@@ -1,6 +1,6 @@
 Revision history for DBD::Oracle
 
-NEXT      2012-02-08
+NEXT      
 
  [BUG FIXES]
  - TAF supports now conditional to presence of OCI_ATTR_TAF_ENABLED

Modified: dbd-oracle/trunk/dbdimp.c
==============================================================================
--- dbd-oracle/trunk/dbdimp.c	(original)
+++ dbd-oracle/trunk/dbdimp.c	Fri Feb 10 11:17:15 2012
@@ -3222,6 +3222,13 @@
 				SvCUR_set(sv, phs->alen);
 				*SvEND(sv) = '\0';
 				SvPOK_only_UTF8(sv);
+                if (CSFORM_IMPLIES_UTF8(SQLCS_IMPLICIT)) {
+#ifdef sv_utf8_decode
+                    sv_utf8_decode(sv);
+#else
+                    SvUTF8_on(sv);
+#endif
+                }
 			}
 			else {	/* shouldn't happen */
 				debug = 2;

Modified: dbd-oracle/trunk/lib/DBD/Oracle.pm
==============================================================================
--- dbd-oracle/trunk/lib/DBD/Oracle.pm	(original)
+++ dbd-oracle/trunk/lib/DBD/Oracle.pm	Fri Feb 10 11:17:15 2012
@@ -59,42 +59,50 @@
     }
 
     sub driver{
-	return $drh if $drh;
-	my($class, $attr) = @_;
-	my $oci = DBD::Oracle::ORA_OCI();
-
-	$class .= "::dr";
-
-	# not a 'my' since we use it above to prevent multiple drivers
-
-	$drh = DBI::_new_drh($class, {
-	    'Name' => 'Oracle',
-	    'Version' => $VERSION,
-	    'Err'    => \my $err,
-	    'Errstr' => \my $errstr,
-	    'Attribution' => "DBD::Oracle $VERSION using OCI$oci by Tim Bunce",
-	    });
-	DBD::Oracle::dr::init_oci($drh) ;
-	$drh->STORE('ShowErrorStatement', 1);
-	DBD::Oracle::db->install_method("ora_lob_read");
-	DBD::Oracle::db->install_method("ora_lob_write");
-	DBD::Oracle::db->install_method("ora_lob_append");
-	DBD::Oracle::db->install_method("ora_lob_trim");
-	DBD::Oracle::db->install_method("ora_lob_length");
-	DBD::Oracle::db->install_method("ora_lob_chunk_size");
-	DBD::Oracle::db->install_method("ora_lob_is_init");
-	DBD::Oracle::db->install_method("ora_nls_parameters");
-	DBD::Oracle::db->install_method("ora_can_unicode");
-	DBD::Oracle::db->install_method("ora_can_taf");
-	DBD::Oracle::db->install_method("ora_db_startup");
-        DBD::Oracle::db->install_method("ora_db_shutdown");
-        DBD::Oracle::st->install_method("ora_fetch_scroll");
-	DBD::Oracle::st->install_method("ora_scroll_position");
-	DBD::Oracle::st->install_method("ora_ping");
-	DBD::Oracle::st->install_method("ora_stmt_type_name");
-	DBD::Oracle::st->install_method("ora_stmt_type");
-	$drh;
+        return $drh if $drh;
+
+        my($class, $attr) = @_;
+        my $oci = DBD::Oracle::ORA_OCI();
+
+        $class .= "::dr";
+
+        # not a 'my' since we use it above to prevent multiple drivers
+
+        $drh = DBI::_new_drh($class, {
+            'Name' => 'Oracle',
+            'Version' => $VERSION,
+            'Err'    => \my $err,
+            'Errstr' => \my $errstr,
+            'Attribution' => "DBD::Oracle $VERSION using OCI$oci by Tim Bunce",
+        });
+
+        DBD::Oracle::dr::init_oci($drh) ;
+        $drh->STORE('ShowErrorStatement', 1);
+
+        DBD::Oracle::db->install_method($_) for qw/
+            ora_lob_read
+            ora_lob_write
+            ora_lob_append
+            ora_lob_trim
+            ora_lob_length
+            ora_lob_chunk_size
+            ora_lob_is_init
+            ora_nls_parameters
+            ora_can_unicode
+            ora_can_taf
+            ora_db_startup
+            ora_db_shutdown
+        /;
+
+        DBD::Oracle::st->install_method($_) for qw/
+            ora_fetch_scroll
+            ora_scroll_position
+            ora_ping
+            ora_stmt_type_name
+            ora_stmt_type
+        /;
 
+        $drh;
     }
 
 
@@ -1095,24 +1103,21 @@
        return $sth->set_err($DBI::stderr, "executing $tuple_count generated $err_count errors")
        	   if $err_count;
 
-       if (!wantarray) {
-	   return $tuple_count;
-       }
-
-       return ($tuple_count, defined $row_count ? $row_count : undef);
-
-
+       return wantarray 
+                ? ($tuple_count, defined $row_count ? $row_count : undef)
+                : $tuple_count;
 
     }
 
     sub private_attribute_info {
-	return {ora_lengths		=> undef,
-		ora_types		=> undef,
-		ora_rowid		=> undef,
-		ora_est_row_width	=> undef,
-		ora_type		=> undef,
-		ora_fail_over		=> undef,
-    };
+        return { map { $_ => undef } qw/ 
+            ora_lengths 
+            ora_types 
+            ora_rowid
+            ora_est_row_width 
+            ora_type 
+            ora_fail_over
+        / };
    }
 }
 

Modified: dbd-oracle/trunk/lib/DBD/Oracle/GetInfo.pm
==============================================================================
--- dbd-oracle/trunk/lib/DBD/Oracle/GetInfo.pm	(original)
+++ dbd-oracle/trunk/lib/DBD/Oracle/GetInfo.pm	Fri Feb 10 11:17:15 2012
@@ -96,27 +96,59 @@
 
 
 our %info = (
-     20 => 'Y',                           # SQL_ACCESSIBLE_PROCEDURES
+      0 => 0,                             # SQL_MAX_DRIVER_CONNECTIONS
+      1 => 0,                             # SQL_MAX_CONCURRENT_ACTIVITIES
+      2 => \&sql_data_source_name,        # SQL_DATA_SOURCE_NAME
+      3 => 147209344,                     # SQL_DRIVER_HDBC
+      4 => 147212776,                     # SQL_DRIVER_HENV
+#     5 => undef,                         # SQL_DRIVER_HSTMT
+      6 => $INC{'DBD/Oracle.pm'},         # SQL_DRIVER_NAME
+      7 => $sql_driver_ver,               # SQL_DRIVER_VER
+      8 => 191,                           # SQL_FETCH_DIRECTION
+      9 => 1,                             # SQL_ODBC_API_CONFORMANCE
+     10 => '03.52',                       # SQL_ODBC_VER
+     11 => 'Y',                           # SQL_ROW_UPDATES
+     12 => 0,                             # SQL_ODBC_SAG_CLI_CONFORMANCE
+     13 => sub {"$_[0]->{Name}"},         # SQL_SERVER_NAME
+     14 => '\\',                          # SQL_SEARCH_PATTERN_ESCAPE
+     15 => 1,                             # SQL_ODBC_SQL_CONFORMANCE
+     16 => 'DEVEL',                       # SQL_DATABASE_NAME
+     17 => 'Oracle',                      # SQL_DBMS_NAME
+     18 => \&sql_dbms_version,            # SQL_DBMS_VERSION
      19 => 'Y',                           # SQL_ACCESSIBLE_TABLES
-      0 => 0,                             # SQL_ACTIVE_CONNECTIONS
-    116 => 0,                             # SQL_ACTIVE_ENVIRONMENTS
-      1 => 0,                             # SQL_ACTIVE_STATEMENTS
-    169 => 64,                            # SQL_AGGREGATE_FUNCTIONS
-    117 => 0,                             # SQL_ALTER_DOMAIN
-     86 => 1029739,                       # SQL_ALTER_TABLE
-  10021 => 2,                             # SQL_ASYNC_MODE
-    120 => 0,                             # SQL_BATCH_ROW_COUNT
-    121 => 0,                             # SQL_BATCH_SUPPORT
-     82 => 88,                            # SQL_BOOKMARK_PERSISTENCE
-    114 => 2,                             # SQL_CATALOG_LOCATION
-  10003 => 'N',                           # SQL_CATALOG_NAME
-     41 => '@',                           # SQL_CATALOG_NAME_SEPARATOR
-     42 => 'Database Link',               # SQL_CATALOG_TERM
-     92 => 3,                             # SQL_CATALOG_USAGE
-  10004 => '',                            # SQL_COLLATING_SEQUENCE
-  10004 => '',                            # SQL_COLLATION_SEQ
-     87 => 'Y',                           # SQL_COLUMN_ALIAS
+     20 => 'Y',                           # SQL_ACCESSIBLE_PROCEDURES
+     21 => 'Y',                           # SQL_PROCEDURES
      22 => 1,                             # SQL_CONCAT_NULL_BEHAVIOR
+     23 => 2,                             # SQL_CURSOR_COMMIT_BEHAVIOR
+     24 => 2,                             # SQL_CURSOR_ROLLBACK_BEHAVIOR
+     25 => 'N',                           # SQL_DATA_SOURCE_READ_ONLY
+     26 => 8,                             # SQL_DEFAULT_TRANSACTION_ISOLATION
+     27 => 'Y',                           # SQL_EXPRESSIONS_IN_ORDERBY
+     28 => 1,                             # SQL_IDENTIFIER_CASE
+     29 => '"',                           # SQL_IDENTIFIER_QUOTE_CHAR
+     30 => 30,                            # SQL_MAXIMUM_COLUMN_NAME_LENGTH
+     31 => 30,                            # SQL_MAXIMUM_CURSOR_NAME_LENGTH
+     32 => 30,                            # SQL_MAXIMUM_SCHEMA_NAME_LENGTH
+     33 => 92,                            # SQL_MAX_PROCEDURE_NAME_LEN
+     34 => 0,                             # SQL_MAXIMUM_CATALOG_NAME_LENGTH
+     35 => 30,                            # SQL_MAXIMUM_TABLE_NAME_LENGTH
+     36 => 'Y',                           # SQL_MULT_RESULT_SETS
+     37 => 'Y',                           # SQL_MULTIPLE_ACTIVE_TXN
+     38 => 'Y',                           # SQL_OUTER_JOINS
+     39 => 'Owner',                       # SQL_SCHEMA_TERM
+     40 => 'Procedure',                   # SQL_PROCEDURE_TERM
+     41 => '@',                           # SQL_QUALIFIER_NAME_SEPARATOR
+     42 => 'Database Link',               # SQL_QUALIFIER_TERM
+     43 => 7,                             # SQL_SCROLL_CONCURRENCY
+     44 => 19,                            # SQL_SCROLL_OPTIONS
+     45 => 'Table',                       # SQL_TABLE_TERM
+     46 => 3,                             # SQL_TRANSACTION_CAPABLE
+     47 => \&sql_user_name,               # SQL_USER_NAME
+     48 => 1,                             # SQL_CONVERT_FUNCTIONS
+     49 => 16646015,                      # SQL_NUMERIC_FUNCTIONS
+     50 => 8355839,                       # SQL_STRING_FUNCTIONS
+     51 => 7,                             # SQL_SYSTEM_FUNCTIONS
+     52 => 1023999,                       # SQL_TIMEDATE_FUNCTIONS
      53 => 10518015,                      # SQL_CONVERT_BIGINT
      54 => 10775839,                      # SQL_CONVERT_BINARY
      55 => 10518015,                      # SQL_CONVERT_BIT
@@ -125,12 +157,7 @@
      58 => 10518015,                      # SQL_CONVERT_DECIMAL
      59 => 10514943,                      # SQL_CONVERT_DOUBLE
      60 => 10514943,                      # SQL_CONVERT_FLOAT
-     48 => 1,                             # SQL_CONVERT_FUNCTIONS
-    173 => 0,                             # SQL_CONVERT_GUID
      61 => 10518015,                      # SQL_CONVERT_INTEGER
-    123 => 0,                             # SQL_CONVERT_INTERVAL_DAY_TIME
-    124 => 0,                             # SQL_CONVERT_INTERVAL_YEAR_MONTH
-     71 => 265216,                        # SQL_CONVERT_LONGVARBINARY
      62 => 14680833,                      # SQL_CONVERT_LONGVARCHAR
      63 => 10518015,                      # SQL_CONVERT_NUMERIC
      64 => 10514943,                      # SQL_CONVERT_REAL
@@ -140,10 +167,62 @@
      68 => 10518015,                      # SQL_CONVERT_TINYINT
      69 => 10775839,                      # SQL_CONVERT_VARBINARY
      70 => 15204351,                      # SQL_CONVERT_VARCHAR
+     71 => 265216,                        # SQL_CONVERT_LONGVARBINARY
+     72 => 10,                            # SQL_TRANSACTION_ISOLATION_OPTION
+     73 => 'N',                           # SQL_ODBC_SQL_OPT_IEF
+     74 => 2,                             # SQL_CORRELATION_NAME
+     75 => 1,                             # SQL_NON_NULLABLE_COLUMNS
+#    76 => undef,                         # SQL_DRIVER_HLIB
+     77 => '03.52',                       # SQL_DRIVER_ODBC_VER
+     78 => 1,                             # SQL_LOCK_TYPES
+     79 => 1,                             # SQL_POS_OPERATIONS
+     80 => 7,                             # SQL_POSITIONED_STATEMENTS
+     81 => 15,                            # SQL_GETDATA_EXTENSIONS
+     82 => 88,                            # SQL_BOOKMARK_PERSISTENCE
+     83 => 0,                             # SQL_STATIC_SENSITIVITY
+     84 => 0,                             # SQL_FILE_USAGE
+     85 => 1,                             # SQL_NULL_COLLATION
+     86 => 1029739,                       # SQL_ALTER_TABLE
+     87 => 'Y',                           # SQL_COLUMN_ALIAS
+     88 => 2,                             # SQL_GROUP_BY
+     89 => \&sql_keywords,                # SQL_KEYWORDS
+     90 => 'N',                           # SQL_ORDER_BY_COLUMNS_IN_SELECT
+     91 => 31,                            # SQL_SCHEMA_USAGE
+     92 => 3,                             # SQL_QUALIFIER_USAGE
+     93 => 3,                             # SQL_QUOTED_IDENTIFIER_CASE
+     94 => '$#',                          # SQL_SPECIAL_CHARACTERS
+     95 => 31,                            # SQL_SUBQUERIES
+     96 => 3,                             # SQL_UNION_STATEMENT
+     97 => 0,                             # SQL_MAXIMUM_COLUMNS_IN_GROUP_BY
+     98 => 0,                             # SQL_MAXIMUM_COLUMNS_IN_INDEX
+     99 => 0,                             # SQL_MAXIMUM_COLUMNS_IN_ORDER_BY
+    100 => 1000,                          # SQL_MAXIMUM_COLUMNS_IN_SELECT
+    101 => 1000,                          # SQL_MAXIMUM_COLUMNS_IN_TABLE
+    102 => 0,                             # SQL_MAXIMUM_INDEX_SIZE
+    103 => 'N',                           # SQL_MAX_ROW_SIZE_INCLUDES_LONG
+    104 => 0,                             # SQL_MAXIMUM_ROW_SIZE
+    105 => 0,                             # SQL_MAXIMUM_STATEMENT_LENGTH
+    106 => 0,                             # SQL_MAXIMUM_TABLES_IN_SELECT
+    107 => 30,                            # SQL_MAXIMUM_USER_NAME_LENGTH
+    108 => 0,                             # SQL_MAX_CHAR_LITERAL_LEN
+    109 => 0,                             # SQL_TIMEDATE_ADD_INTERVALS
+    110 => 0,                             # SQL_TIMEDATE_DIFF_INTERVALS
+    111 => 'N',                           # SQL_NEED_LONG_DATA_LEN
+    112 => 0,                             # SQL_MAX_BINARY_LITERAL_LEN
+    113 => 'Y',                           # SQL_LIKE_ESCAPE_CLAUSE
+    114 => 2,                             # SQL_QUALIFIER_LOCATION
+    115 => 127,                           # SQL_OUTER_JOIN_CAPABILITIES
+    116 => 0,                             # SQL_ACTIVE_ENVIRONMENTS
+    117 => 0,                             # SQL_ALTER_DOMAIN
+    118 => 1,                             # SQL_SQL_CONFORMANCE
+    119 => 0,                             # SQL_DATETIME_LITERALS
+    120 => 0,                             # SQL_BATCH_ROW_COUNT
+    121 => 0,                             # SQL_BATCH_SUPPORT
     122 => 15106047,                      # SQL_CONVERT_WCHAR
+    123 => 0,                             # SQL_CONVERT_INTERVAL_DAY_TIME
+    124 => 0,                             # SQL_CONVERT_INTERVAL_YEAR_MONTH
     125 => 14680833,                      # SQL_CONVERT_WLONGVARCHAR
     126 => 15106047,                      # SQL_CONVERT_WVARCHAR
-     74 => 2,                             # SQL_CORRELATION_NAME
     127 => 0,                             # SQL_CREATE_ASSERTION
     128 => 0,                             # SQL_CREATE_CHARACTER_SET
     129 => 0,                             # SQL_CREATE_COLLATION
@@ -152,29 +231,7 @@
     132 => 14305,                         # SQL_CREATE_TABLE
     133 => 0,                             # SQL_CREATE_TRANSLATION
     134 => 3,                             # SQL_CREATE_VIEW
-     23 => 2,                             # SQL_CURSOR_COMMIT_BEHAVIOR
-     24 => 2,                             # SQL_CURSOR_ROLLBACK_BEHAVIOR
-  10001 => 1,                             # SQL_CURSOR_SENSITIVITY
-     16 => 'DEVEL',                       # SQL_DATABASE_NAME
-      2 => \&sql_data_source_name,        # SQL_DATA_SOURCE_NAME
-     25 => 'N',                           # SQL_DATA_SOURCE_READ_ONLY
-    119 => 0,                             # SQL_DATETIME_LITERALS
-     17 => 'Oracle',                      # SQL_DBMS_NAME
-     18 => \&sql_dbms_version,            # SQL_DBMS_VER
-     18 => \&sql_dbms_version,            # SQL_DBMS_VERSION
-    170 => 3,                             # SQL_DDL_INDEX
-     26 => 8,                             # SQL_DEFAULT_TRANSACTION_ISOLATION
-     26 => 8,                             # SQL_DEFAULT_TXN_ISOLATION
-  10002 => 'Y',                           # SQL_DESCRIBE_PARAMETER
-    171 => '03.52.0002.0002',             # SQL_DM_VER
-      3 => 147209344,                     # SQL_DRIVER_HDBC
 #   135 => undef,                         # SQL_DRIVER_HDESC
-      4 => 147212776,                     # SQL_DRIVER_HENV
-#    76 => undef,                         # SQL_DRIVER_HLIB
-#     5 => undef,                         # SQL_DRIVER_HSTMT
-      6 => $INC{'DBD/Oracle.pm'},         # SQL_DRIVER_NAME
-     77 => '03.52',                       # SQL_DRIVER_ODBC_VER
-      7 => $sql_driver_ver,               # SQL_DRIVER_VER
     136 => 0,                             # SQL_DROP_ASSERTION
     137 => 0,                             # SQL_DROP_CHARACTER_SET
     138 => 0,                             # SQL_DROP_COLLATION
@@ -185,107 +242,15 @@
     143 => 1,                             # SQL_DROP_VIEW
     144 => 0,                             # SQL_DYNAMIC_CURSOR_ATTRIBUTES1
     145 => 0,                             # SQL_DYNAMIC_CURSOR_ATTRIBUTES2
-     27 => 'Y',                           # SQL_EXPRESSIONS_IN_ORDERBY
-      8 => 191,                           # SQL_FETCH_DIRECTION
-     84 => 0,                             # SQL_FILE_USAGE
     146 => 57345,                         # SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1
     147 => 2183,                          # SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2
-     81 => 15,                            # SQL_GETDATA_EXTENSIONS
-     88 => 2,                             # SQL_GROUP_BY
-     28 => 1,                             # SQL_IDENTIFIER_CASE
-     29 => '"',                           # SQL_IDENTIFIER_QUOTE_CHAR
     148 => 3,                             # SQL_INDEX_KEYWORDS
     149 => 65568,                         # SQL_INFO_SCHEMA_VIEWS
-    172 => 7,                             # SQL_INSERT_STATEMENT
-     73 => 'N',                           # SQL_INTEGRITY
     150 => 0,                             # SQL_KEYSET_CURSOR_ATTRIBUTES1
     151 => 0,                             # SQL_KEYSET_CURSOR_ATTRIBUTES2
-     89 => \&sql_keywords,                # SQL_KEYWORDS
-    113 => 'Y',                           # SQL_LIKE_ESCAPE_CLAUSE
-     78 => 1,                             # SQL_LOCK_TYPES
-     34 => 0,                             # SQL_MAXIMUM_CATALOG_NAME_LENGTH
-     97 => 0,                             # SQL_MAXIMUM_COLUMNS_IN_GROUP_BY
-     98 => 0,                             # SQL_MAXIMUM_COLUMNS_IN_INDEX
-     99 => 0,                             # SQL_MAXIMUM_COLUMNS_IN_ORDER_BY
-    100 => 1000,                          # SQL_MAXIMUM_COLUMNS_IN_SELECT
-    101 => 1000,                          # SQL_MAXIMUM_COLUMNS_IN_TABLE
-     30 => 30,                            # SQL_MAXIMUM_COLUMN_NAME_LENGTH
-      1 => 0,                             # SQL_MAXIMUM_CONCURRENT_ACTIVITIES
-     31 => 30,                            # SQL_MAXIMUM_CURSOR_NAME_LENGTH
-      0 => 0,                             # SQL_MAXIMUM_DRIVER_CONNECTIONS
-  10005 => 30,                            # SQL_MAXIMUM_IDENTIFIER_LENGTH
-    102 => 0,                             # SQL_MAXIMUM_INDEX_SIZE
-    104 => 0,                             # SQL_MAXIMUM_ROW_SIZE
-     32 => 30,                            # SQL_MAXIMUM_SCHEMA_NAME_LENGTH
-    105 => 0,                             # SQL_MAXIMUM_STATEMENT_LENGTH
-# 20000 => undef,                         # SQL_MAXIMUM_STMT_OCTETS
-# 20001 => undef,                         # SQL_MAXIMUM_STMT_OCTETS_DATA
-# 20002 => undef,                         # SQL_MAXIMUM_STMT_OCTETS_SCHEMA
-    106 => 0,                             # SQL_MAXIMUM_TABLES_IN_SELECT
-     35 => 30,                            # SQL_MAXIMUM_TABLE_NAME_LENGTH
-    107 => 30,                            # SQL_MAXIMUM_USER_NAME_LENGTH
-  10022 => 0,                             # SQL_MAX_ASYNC_CONCURRENT_STATEMENTS
-    112 => 0,                             # SQL_MAX_BINARY_LITERAL_LEN
-     34 => 0,                             # SQL_MAX_CATALOG_NAME_LEN
-    108 => 0,                             # SQL_MAX_CHAR_LITERAL_LEN
-     97 => 0,                             # SQL_MAX_COLUMNS_IN_GROUP_BY
-     98 => 0,                             # SQL_MAX_COLUMNS_IN_INDEX
-     99 => 0,                             # SQL_MAX_COLUMNS_IN_ORDER_BY
-    100 => 1000,                          # SQL_MAX_COLUMNS_IN_SELECT
-    101 => 1000,                          # SQL_MAX_COLUMNS_IN_TABLE
-     30 => 30,                            # SQL_MAX_COLUMN_NAME_LEN
-      1 => 0,                             # SQL_MAX_CONCURRENT_ACTIVITIES
-     31 => 30,                            # SQL_MAX_CURSOR_NAME_LEN
-      0 => 0,                             # SQL_MAX_DRIVER_CONNECTIONS
-  10005 => 30,                            # SQL_MAX_IDENTIFIER_LEN
-    102 => 0,                             # SQL_MAX_INDEX_SIZE
-     32 => 30,                            # SQL_MAX_OWNER_NAME_LEN
-     33 => 92,                            # SQL_MAX_PROCEDURE_NAME_LEN
-     34 => 0,                             # SQL_MAX_QUALIFIER_NAME_LEN
-    104 => 0,                             # SQL_MAX_ROW_SIZE
-    103 => 'N',                           # SQL_MAX_ROW_SIZE_INCLUDES_LONG
-     32 => 30,                            # SQL_MAX_SCHEMA_NAME_LEN
-    105 => 0,                             # SQL_MAX_STATEMENT_LEN
-    106 => 0,                             # SQL_MAX_TABLES_IN_SELECT
-     35 => 30,                            # SQL_MAX_TABLE_NAME_LEN
-    107 => 30,                            # SQL_MAX_USER_NAME_LEN
-     37 => 'Y',                           # SQL_MULTIPLE_ACTIVE_TXN
-     36 => 'Y',                           # SQL_MULT_RESULT_SETS
-    111 => 'N',                           # SQL_NEED_LONG_DATA_LEN
-     75 => 1,                             # SQL_NON_NULLABLE_COLUMNS
-     85 => 1,                             # SQL_NULL_COLLATION
-     49 => 16646015,                      # SQL_NUMERIC_FUNCTIONS
-      9 => 1,                             # SQL_ODBC_API_CONFORMANCE
     152 => 3,                             # SQL_ODBC_INTERFACE_CONFORMANCE
-     12 => 0,                             # SQL_ODBC_SAG_CLI_CONFORMANCE
-     15 => 1,                             # SQL_ODBC_SQL_CONFORMANCE
-     73 => 'N',                           # SQL_ODBC_SQL_OPT_IEF
-     10 => '03.52',                       # SQL_ODBC_VER
-    115 => 127,                           # SQL_OJ_CAPABILITIES
-     90 => 'N',                           # SQL_ORDER_BY_COLUMNS_IN_SELECT
-     38 => 'Y',                           # SQL_OUTER_JOINS
-    115 => 127,                           # SQL_OUTER_JOIN_CAPABILITIES
-     39 => 'Owner',                       # SQL_OWNER_TERM
-     91 => 31,                            # SQL_OWNER_USAGE
     153 => 2,                             # SQL_PARAM_ARRAY_ROW_COUNTS
     154 => 3,                             # SQL_PARAM_ARRAY_SELECTS
-     80 => 7,                             # SQL_POSITIONED_STATEMENTS
-     79 => 1,                             # SQL_POS_OPERATIONS
-     21 => 'Y',                           # SQL_PROCEDURES
-     40 => 'Procedure',                   # SQL_PROCEDURE_TERM
-    114 => 2,                             # SQL_QUALIFIER_LOCATION
-     41 => '@',                           # SQL_QUALIFIER_NAME_SEPARATOR
-     42 => 'Database Link',               # SQL_QUALIFIER_TERM
-     92 => 3,                             # SQL_QUALIFIER_USAGE
-     93 => 3,                             # SQL_QUOTED_IDENTIFIER_CASE
-     11 => 'Y',                           # SQL_ROW_UPDATES
-     39 => 'Owner',                       # SQL_SCHEMA_TERM
-     91 => 31,                            # SQL_SCHEMA_USAGE
-     43 => 7,                             # SQL_SCROLL_CONCURRENCY
-     44 => 19,                            # SQL_SCROLL_OPTIONS
-     14 => '\\',                          # SQL_SEARCH_PATTERN_ESCAPE
-     13 => sub {"$_[0]->{Name}"},         # SQL_SERVER_NAME
-     94 => '$#',                          # SQL_SPECIAL_CHARACTERS
     155 => 0,                             # SQL_SQL92_DATETIME_FUNCTIONS
     156 => 0,                             # SQL_SQL92_FOREIGN_KEY_DELETE_RULE
     157 => 0,                             # SQL_SQL92_FOREIGN_KEY_UPDATE_RULE
@@ -297,26 +262,25 @@
     163 => 0,                             # SQL_SQL92_ROW_VALUE_CONSTRUCTOR
     164 => 0,                             # SQL_SQL92_STRING_FUNCTIONS
     165 => 1,                             # SQL_SQL92_VALUE_EXPRESSIONS
-    118 => 1,                             # SQL_SQL_CONFORMANCE
     166 => 3,                             # SQL_STANDARD_CLI_CONFORMANCE
     167 => 57935,                         # SQL_STATIC_CURSOR_ATTRIBUTES1
     168 => 4231,                          # SQL_STATIC_CURSOR_ATTRIBUTES2
-     83 => 0,                             # SQL_STATIC_SENSITIVITY
-     50 => 8355839,                       # SQL_STRING_FUNCTIONS
-     95 => 31,                            # SQL_SUBQUERIES
-     51 => 7,                             # SQL_SYSTEM_FUNCTIONS
-     45 => 'Table',                       # SQL_TABLE_TERM
-    109 => 0,                             # SQL_TIMEDATE_ADD_INTERVALS
-    110 => 0,                             # SQL_TIMEDATE_DIFF_INTERVALS
-     52 => 1023999,                       # SQL_TIMEDATE_FUNCTIONS
-     46 => 3,                             # SQL_TRANSACTION_CAPABLE
-     72 => 10,                            # SQL_TRANSACTION_ISOLATION_OPTION
-     46 => 3,                             # SQL_TXN_CAPABLE
-     72 => 10,                            # SQL_TXN_ISOLATION_OPTION
-     96 => 3,                             # SQL_UNION
-     96 => 3,                             # SQL_UNION_STATEMENT
-     47 => \&sql_user_name,               # SQL_USER_NAME
+    169 => 64,                            # SQL_AGGREGATE_FUNCTIONS
+    170 => 3,                             # SQL_DDL_INDEX
+    171 => '03.52.0002.0002',             # SQL_DM_VER
+    172 => 7,                             # SQL_INSERT_STATEMENT
+    173 => 0,                             # SQL_CONVERT_GUID
   10000 => 1995,                          # SQL_XOPEN_CLI_YEAR
+  10001 => 1,                             # SQL_CURSOR_SENSITIVITY
+  10002 => 'Y',                           # SQL_DESCRIBE_PARAMETER
+  10003 => 'N',                           # SQL_CATALOG_NAME
+  10004 => '',                            # SQL_COLLATING_SEQUENCE
+  10005 => 30,                            # SQL_MAXIMUM_IDENTIFIER_LENGTH
+  10021 => 2,                             # SQL_ASYNC_MODE
+  10022 => 0,                             # SQL_MAX_ASYNC_CONCURRENT_STATEMENTS
+# 20000 => undef,                         # SQL_MAXIMUM_STMT_OCTETS
+# 20001 => undef,                         # SQL_MAXIMUM_STMT_OCTETS_DATA
+# 20002 => undef,                         # SQL_MAXIMUM_STMT_OCTETS_SCHEMA
 );
 
 1;

Modified: dbd-oracle/trunk/t/rt74753-utf8-encoded.t
==============================================================================
--- dbd-oracle/trunk/t/rt74753-utf8-encoded.t	(original)
+++ dbd-oracle/trunk/t/rt74753-utf8-encoded.t	Fri Feb 10 11:17:15 2012
@@ -3,7 +3,7 @@
 use strict;
 use warnings;
 
-use Test::More tests => 2;
+use Test::More tests => 3;
 
 use DBI;
 use Encode;
@@ -57,18 +57,13 @@
 
 is Encode::is_utf8($val) => 1, "utf8 encoded";
 
-$dbh->disconnect;
-
-
-__END__
-
-undef $val;
-
 $sth = $dbh->prepare(<<'END_SQL');
 declare
     l_ret       varchar2(10);
 begin
-    select  ltrim(rtrim(to_char(0, 'L')))
+    select ltrim(rtrim(to_char(0, 'L'))) 
+        || ltrim(rtrim(to_char(0, 'L'))) 
+        || ltrim(rtrim(to_char(0, 'L'))) 
     into    l_ret
     from    dual;
     --
@@ -76,11 +71,13 @@
 end;
 END_SQL
 
-$sth->bind_param_inout( ':ret', \$val, 100 );
-$sth->execute;
+$val = undef;
 
-diag  "val=[$val] len=@{[ length($val) ]}" while $sth->fetch;
+# WARNING: does *not* truncate. DBD::Oracle doesn't heed the 3rd parameter
+$sth->bind_param_inout(':ret', \$val, 1);
+$sth->execute;
 
-diag "utf8 is ", Encode::is_utf8($val) ? 'on' : 'off';
+is Encode::is_utf8($val) => 1, "truncated, yet utf8 encoded";
 
 $dbh->disconnect;
+