Modified:
trunk/ChangeLog
trunk/driver/myodbc3.h
trunk/driver/utility.c
trunk/setup/MYODBCSetupDataSourceDialog.cpp
trunk/setup/MYODBCSetupDataSourceTab3.cpp
trunk/setup/MYODBCSetupDataSourceTab3a.cpp
trunk/setup/MYODBCSetupDataSourceTab3a.h
trunk/test/my_types.c
Log:
Added a new connection option FLAG_NO_BINARY_RESULT. Fixed field type charset 63 problem.
(Bug #29402)
Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog 2008-06-17 14:19:55 UTC (rev 1123)
+++ trunk/ChangeLog 2008-07-02 14:43:38 UTC (rev 1124)
@@ -3,6 +3,8 @@
Bugs fixed:
* Access Violation in myodbc3.dll (Bug #30770)
* Truncation of "SHOW CREATE TABLE" result (Bug #24131)
+ * Added a new connection option FLAG_NO_BINARY_RESULT. Fixed
+ field type charset 63 problem. (Bug #29402)
----
Modified: trunk/driver/myodbc3.h
===================================================================
--- trunk/driver/myodbc3.h 2008-06-17 14:19:55 UTC (rev 1123)
+++ trunk/driver/myodbc3.h 2008-07-02 14:43:38 UTC (rev 1124)
@@ -161,6 +161,7 @@
#define FLAG_MIN_DATE_TO_ZERO (1 << 25) /* Convert ODBC min date to 0000-00-00 on
query */
#define FLAG_MULTI_STATEMENTS (1 << 26) /* Allow multiple statements in a query */
#define FLAG_COLUMN_SIZE_S32 (1 << 27) /* Limit column size to a signed 32-bit
value (automatically set for ADO) */
+#define FLAG_NO_BINARY_RESULT (1 << 28) /* Disables charset 63 for columns with
empty org_table */
/* We don't make any assumption about what the default may be. */
#ifndef DEFAULT_TXN_ISOLATION
Modified: trunk/driver/utility.c
===================================================================
--- trunk/driver/utility.c 2008-06-17 14:19:55 UTC (rev 1123)
+++ trunk/driver/utility.c 2008-07-02 14:43:38 UTC (rev 1124)
@@ -371,7 +371,9 @@
*/
SQLSMALLINT get_sql_data_type(STMT *stmt, MYSQL_FIELD *field, char *buff)
{
- my_bool field_is_binary= test(field->charsetnr == 63);
+ my_bool field_is_binary= test(field->charsetnr == 63) &&
+ (test(field->org_table_length > 0) ||
+ ((stmt->dbc->flag & FLAG_NO_BINARY_RESULT) == 0));
switch (field->type) {
case MYSQL_TYPE_BIT:
Modified: trunk/setup/MYODBCSetupDataSourceDialog.cpp
===================================================================
--- trunk/setup/MYODBCSetupDataSourceDialog.cpp 2008-06-17 14:19:55 UTC (rev 1123)
+++ trunk/setup/MYODBCSetupDataSourceDialog.cpp 2008-07-02 14:43:38 UTC (rev 1124)
@@ -431,6 +431,7 @@
ptab3->ptab3a->pcheckboxAutoIncrementIsNull->setChecked( nOptions &
(1 << 23) ? TRUE : FALSE );
ptab3->ptab3c->pcheckboxMultiStatements->setChecked( nOptions & (1
<< 26) ? TRUE : FALSE );
ptab3->ptab3c->pcheckboxCapColumnSize->setChecked( nOptions & (1
<< 27) ? TRUE : FALSE );
+ ptab3->ptab3a->pcheckboxDisableBinaryResult->setChecked( nOptions &
(1 << 28) ? TRUE : FALSE );
}
connect( ppushbuttonTest, SIGNAL(clicked()), SLOT(slotTest()) );
@@ -467,6 +468,7 @@
connect( ptab3->ptab3a->pcheckboxSafe, SIGNAL(signalAssistText(const
QString&)), ptextbrowserAssist, SLOT(setHtml(const QString&)) );
connect( ptab3->ptab3a->pcheckboxEnableReconnect, SIGNAL(signalAssistText(const
QString&)), ptextbrowserAssist, SLOT(setHtml(const QString&)) );
connect( ptab3->ptab3a->pcheckboxAutoIncrementIsNull,
SIGNAL(signalAssistText(const QString&)), ptextbrowserAssist, SLOT(setHtml(const
QString&)) );
+ connect( ptab3->ptab3a->pcheckboxDisableBinaryResult,
SIGNAL(signalAssistText(const QString&)), ptextbrowserAssist, SLOT(setHtml(const
QString&)) );
connect( ptab3->ptab3b->pcheckboxDontPromptOnConnect,
SIGNAL(signalAssistText(const QString&)), ptextbrowserAssist, SLOT(setHtml(const
QString&)) );
connect( ptab3->ptab3b->pcheckboxEnableDynamicCursor,
SIGNAL(signalAssistText(const QString&)), ptextbrowserAssist, SLOT(setHtml(const
QString&)) );
connect( ptab3->ptab3b->pcheckboxIgnorePoundInTable,
SIGNAL(signalAssistText(const QString&)), ptextbrowserAssist, SLOT(setHtml(const
QString&)) );
Modified: trunk/setup/MYODBCSetupDataSourceTab3.cpp
===================================================================
--- trunk/setup/MYODBCSetupDataSourceTab3.cpp 2008-06-17 14:19:55 UTC (rev 1123)
+++ trunk/setup/MYODBCSetupDataSourceTab3.cpp 2008-07-02 14:43:38 UTC (rev 1124)
@@ -98,6 +98,8 @@
nFlags |= 1 << 26;
if ( ptab3c->pcheckboxCapColumnSize->isChecked() )
nFlags |= 1 << 27;
+ if ( ptab3a->pcheckboxDisableBinaryResult->isChecked() )
+ nFlags |= 1 << 28;
return nFlags;
}
Modified: trunk/setup/MYODBCSetupDataSourceTab3a.cpp
===================================================================
--- trunk/setup/MYODBCSetupDataSourceTab3a.cpp 2008-06-17 14:19:55 UTC (rev 1123)
+++ trunk/setup/MYODBCSetupDataSourceTab3a.cpp 2008-07-02 14:43:38 UTC (rev 1124)
@@ -30,6 +30,7 @@
QString stringSafe( tr("Add some extra safety checks (should not be needed
but...).") );
QString stringEnableReconnect( tr("Enables automatic reconnect. Attention: it
is strongly not recommended to set this flag for transactional operations!") );
QString stringAutoIncrementIsNull( tr("Turns on/off the handling of searching
for the last inserted row with WHERE auto_increment_column IS NULL") );
+ QString stringDisableBinaryResult( tr("Always handle binary function results
as character data") );
#if QT_VERSION >= 0x040000
QVBoxLayout * playoutFields = new QVBoxLayout;
setLayout( playoutFields );
@@ -103,6 +104,15 @@
QToolTip::add( pcheckboxAutoIncrementIsNull, stringAutoIncrementIsNull );
#endif
+ pcheckboxDisableBinaryResult = new MYODBCSetupCheckBox( tr("Always handle binary
function results as character data"), this );
+ pcheckboxDisableBinaryResult->setAssistText( stringDisableBinaryResult );
+ playoutFields->addWidget( pcheckboxDisableBinaryResult );
+#if QT_VERSION >= 0x040000
+ pcheckboxDisableBinaryResult->setToolTip( stringDisableBinaryResult );
+#else
+ QToolTip::add( pcheckboxDisableBinaryResult, stringDisableBinaryResult );
+#endif
+
playoutFields->addStretch( 10 );
}
Modified: trunk/setup/MYODBCSetupDataSourceTab3a.h
===================================================================
--- trunk/setup/MYODBCSetupDataSourceTab3a.h 2008-06-17 14:19:55 UTC (rev 1123)
+++ trunk/setup/MYODBCSetupDataSourceTab3a.h 2008-07-02 14:43:38 UTC (rev 1124)
@@ -49,6 +49,7 @@
MYODBCSetupCheckBox *pcheckboxSafe;
MYODBCSetupCheckBox *pcheckboxEnableReconnect;
MYODBCSetupCheckBox *pcheckboxAutoIncrementIsNull;
+ MYODBCSetupCheckBox *pcheckboxDisableBinaryResult;
};
#endif
Modified: trunk/test/my_types.c
===================================================================
--- trunk/test/my_types.c 2008-06-17 14:19:55 UTC (rev 1123)
+++ trunk/test/my_types.c 2008-07-02 14:43:38 UTC (rev 1124)
@@ -744,6 +744,45 @@
}
+/**
+ Bug #29402: field type charset 63 problem
+*/
+DECLARE_TEST(t_bug29402)
+{
+ SQLSMALLINT name_length, data_type, decimal_digits, nullable;
+ SQLCHAR column_name[SQL_MAX_COLUMN_NAME_LEN];
+ SQLULEN column_size;
+ SQLHENV henv1;
+ SQLHDBC hdbc1;
+ SQLHSTMT hstmt1;
+
+ /* First check how the option FLAG_NO_BINARY_RESULT works */
+ SET_DSN_OPTION(1 << 28);
+
+ alloc_basic_handles(&henv1, &hdbc1, &hstmt1);
+
+ ok_sql(hstmt1, "SELECT CONCAT('ABCDEFG', 20) concated");
+
+ ok_stmt(hstmt1, SQLDescribeCol(hstmt1, 1, column_name, sizeof(column_name),
+ &name_length, &data_type, &column_size,
+ &decimal_digits, &nullable));
+
+ is_num(data_type, SQL_VARCHAR);
+ ok_stmt(hstmt1, SQLFreeStmt(hstmt1, SQL_CLOSE));
+ free_basic_handles(&henv1, &hdbc1, &hstmt1);
+
+ /* Check without FLAG_NO_BINARY_RESULT */
+ ok_sql(hstmt, "SELECT CONCAT('ABCDEFG', 20) concated");
+
+ ok_stmt(hstmt, SQLDescribeCol(hstmt, 1, column_name, sizeof(column_name),
+ &name_length, &data_type, &column_size,
+ &decimal_digits, &nullable));
+
+ is_num(data_type, SQL_VARBINARY);
+ return OK;
+}
+
+
BEGIN_TESTS
ADD_TEST(t_longlong1)
ADD_TEST(t_numeric)
@@ -760,6 +799,7 @@
ADD_TEST(bit)
ADD_TEST(t_bug32171)
ADD_TEST(t_bug31220)
+ ADD_TEST(t_bug29402)
END_TESTS
| Thread |
|---|
| • Connector/ODBC 3.51 commit: r1124 - in trunk: . driver setup test | bdegtyariov | 2 Jul |