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;
+
|