Index: ChangeLog =================================================================== --- ChangeLog (revision 557) +++ ChangeLog (working copy) @@ -9,6 +9,9 @@ if value is null. Now returns SQL_ERROR w/state 22002. Bugs fixed: + * SQLGetTypeInfo() returned incorrect information for date and time + fields, and would not return results when queried for the SQL_DATETIME + type. (Bug #28657) * Multiple result sets were not correctly flushed when a statement handle was closed. (Bug #16817) * SQLProcedures() did not handle NULL parameters, which could lead to Index: driver/info.c =================================================================== --- driver/info.c (revision 557) +++ driver/info.c (working copy) @@ -939,7 +939,7 @@ sql_float[6], sql_real[6], sql_double[6], sql_char[6], sql_varchar[6], sql_longvarchar[6], sql_timestamp[6], sql_decimal[6], sql_numeric[6], sql_varbinary[6], sql_time[6], sql_date[6], sql_binary[6], - sql_longvarbinary[6]; + sql_longvarbinary[6], sql_datetime[6]; char *SQL_GET_TYPE_INFO_values[MYSQL_DATA_TYPES][19]= { @@ -1022,17 +1022,17 @@ {"double auto_increment",sql_double,"15",NULL,NULL,NULL,sql_no_nulls,"0",sql_searchable,"0","0","1","double auto_increment","0","4",sql_double,NULL,"10",NULL}, /* SQL_TYPE_DATE= 91 */ - {"date",sql_date,"10","'","'",NULL,sql_nullable,"0",sql_searchable,"0","0","0","date",NULL,NULL,sql_date,NULL,NULL,NULL}, + {"date",sql_date,"10","'","'",NULL,sql_nullable,"0",sql_searchable,"0","0","0","date",NULL,NULL,sql_datetime,sql_date,NULL,NULL}, /* SQL_TYPE_TIME= 92 */ - {"time",sql_time,"6","'","'",NULL,sql_nullable,"0",sql_searchable,"0","0","0","time",NULL,NULL,sql_time,NULL,NULL,NULL}, + {"time",sql_time,"6","'","'",NULL,sql_nullable,"0",sql_searchable,"0","0","0","time",NULL,NULL,sql_datetime,sql_time,NULL,NULL}, /* YEAR - SQL_SMALLINT */ {"year",sql_smallint,"4",NULL,NULL,NULL,sql_nullable,"0",sql_searchable,"0","0","0","year",NULL,NULL,sql_smallint,NULL,"10",NULL}, /* SQL_TYPE_TIMESTAMP= 93 */ - {"datetime",sql_timestamp,"21","'","'",NULL,sql_nullable,"0",sql_searchable,"0","0","0","datetime","0","0",sql_timestamp,NULL,NULL,NULL}, - {"timestamp",sql_timestamp,"14","'","'",NULL,sql_no_nulls,"0",sql_searchable,"0","0","0","timestamp","0","0",sql_timestamp,NULL,NULL,NULL}, + {"datetime",sql_timestamp,"21","'","'",NULL,sql_nullable,"0",sql_searchable,"0","0","0","datetime","0","0",sql_datetime,sql_timestamp,NULL,NULL}, + {"timestamp",sql_timestamp,"14","'","'",NULL,sql_no_nulls,"0",sql_searchable,"0","0","0","timestamp","0","0",sql_datetime,sql_timestamp,NULL,NULL}, /* SQL_VARCHAR= 12 */ #if TO_BE_DELETED /* NO NEED OF THIS, causes problems for DM */ @@ -1082,7 +1082,8 @@ { for (i= 0 ; i < MYSQL_DATA_TYPES ; i++) { - if (atoi(SQL_GET_TYPE_INFO_values[i][1]) == fSqlType) + if (atoi(SQL_GET_TYPE_INFO_values[i][1]) == fSqlType || + atoi(SQL_GET_TYPE_INFO_values[i][15]) == fSqlType) { memcpy((gptr)&stmt->result_array[stmt->result->row_count++ * SQL_GET_TYPE_INFO_FIELDS], @@ -1125,6 +1126,7 @@ int2str(SQL_LONGVARBINARY,sql_longvarbinary,-10,0); int2str(SQL_VARBINARY,sql_varbinary,-10,0); int2str(SQL_BINARY,sql_binary,-10,0); + int2str(SQL_DATETIME,sql_datetime,-10,0); int2str(SQL_TYPE_TIMESTAMP,sql_timestamp,-10,0); int2str(SQL_TYPE_DATE,sql_date,-10,0); int2str(SQL_TYPE_TIME,sql_time,-10,0); @@ -1153,6 +1155,7 @@ int2str(SQL_LONGVARBINARY,sql_longvarbinary,-10); int2str(SQL_VARBINARY,sql_varbinary,-10); int2str(SQL_BINARY,sql_binary,-10); + int2str(SQL_DATETIME,sql_datetime,-10); int2str(SQL_TYPE_TIMESTAMP,sql_timestamp,-10); int2str(SQL_TYPE_DATE,sql_date,-10); int2str(SQL_TYPE_TIME,sql_time,-10); Index: test/my_info.c =================================================================== --- test/my_info.c (revision 557) +++ test/my_info.c (working copy) @@ -128,12 +128,30 @@ } +/** + Bug #28657: ODBC Connector returns FALSE on SQLGetTypeInfo with DATETIME (wxWindows latest) +*/ +DECLARE_TEST(t_bug28657) +{ + SQLSMALLINT pccol; + + ok_stmt(hstmt, SQLGetTypeInfo(hstmt, SQL_DATETIME)); + + is(myrowcount(hstmt) > 1); + + ok_stmt(hstmt, SQLFreeStmt(hstmt, SQL_CLOSE)); + + return OK; +} + + BEGIN_TESTS ADD_TEST(sqlgetinfo) ADD_TEST(t_gettypeinfo) ADD_TEST(t_stmt_attr_status) ADD_TEST(t_msdev_bug) ADD_TEST(t_bug27591) + ADD_TEST(t_bug28657) END_TESTS