Index: driver/catalog.c =================================================================== --- driver/catalog.c (Revision 488) +++ driver/catalog.c (Arbeitskopie) @@ -2123,6 +2123,7 @@ SQLRETURN rc; STMT *stmt= (STMT *)hstmt; + MYODBCDbgEnter; CLEAR_STMT_ERROR(hstmt); @@ -2155,7 +2156,7 @@ look up procedures from the current database. (This is not standard behavior, but seems useful.) */ - if (szCatalogName) + if (szCatalogName && szProcName) rc= my_SQLPrepare(hstmt, (SQLCHAR *) "SELECT ROUTINE_SCHEMA AS PROCEDURE_CAT," "NULL AS PROCEDURE_SCHEM," @@ -2166,10 +2167,10 @@ "ROUTINE_COMMENT AS REMARKS," "IF(ROUTINE_TYPE = 'FUNCTION', 2," "IF(ROUTINE_TYPE= 'PROCEDURE', 1, 0)) AS PROCEDURE_TYPE" - " FROM INFORMATION_SCHEMA.ROUTINES" + " FROM INFORMATION_SCHEMA.ROUTINES" " WHERE ROUTINE_NAME LIKE ? AND ROUTINE_SCHEMA = ?", SQL_NTS); - else + else if (szProcName) rc= my_SQLPrepare(hstmt, (SQLCHAR *) "SELECT ROUTINE_SCHEMA AS PROCEDURE_CAT," "NULL AS PROCEDURE_SCHEM," @@ -2180,19 +2181,36 @@ "ROUTINE_COMMENT AS REMARKS," "IF(ROUTINE_TYPE = 'FUNCTION', 2," "IF(ROUTINE_TYPE= 'PROCEDURE', 1, 0)) AS PROCEDURE_TYPE" - " FROM INFORMATION_SCHEMA.ROUTINES" + " FROM INFORMATION_SCHEMA.ROUTINES" " WHERE ROUTINE_NAME LIKE ?" " AND ROUTINE_SCHEMA = DATABASE()", SQL_NTS); + else + rc= my_SQLPrepare(hstmt, (SQLCHAR *) + "SELECT ROUTINE_SCHEMA AS PROCEDURE_CAT," + "NULL AS PROCEDURE_SCHEM," + "ROUTINE_NAME AS PROCEDURE_NAME," + "NULL AS NUM_INPUT_PARAMS," + "NULL AS NUM_OUTPUT_PARAMS," + "NULL AS NUM_RESULT_SETS," + "ROUTINE_COMMENT AS REMARKS," + "IF(ROUTINE_TYPE = 'FUNCTION', 2," + " IF(ROUTINE_TYPE= 'PROCEDURE', 1, 0)) AS PROCEDURE_TYPE" + " FROM INFORMATION_SCHEMA.ROUTINES" + " WHERE ROUTINE_SCHEMA = DATABASE()", + SQL_NTS); if (!SQL_SUCCEEDED(rc)) return rc; - if (cbProcName == SQL_NTS) - cbProcName= strlen((const char *)szProcName); - rc= my_SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_C_CHAR, - 0, 0, szProcName, cbProcName, NULL); - if (!SQL_SUCCEEDED(rc)) - return rc; + if (szProcName) + { + if (cbProcName == SQL_NTS) + cbProcName= strlen((const char *)szProcName); + rc= my_SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_C_CHAR, + 0, 0, szProcName, cbProcName, NULL); + if (!SQL_SUCCEEDED(rc)) + return rc; + } if (szCatalogName) { Index: test/my_catalog.c =================================================================== --- test/my_catalog.c (Revision 488) +++ test/my_catalog.c (Arbeitskopie) @@ -1276,7 +1276,16 @@ return OK; } +DECLARE_TEST(t_bug28316) +{ + SQLRETURN rc; + ok_stmt(hstmt, SQLProcedures(hstmt, NULL, SQL_NTS, NULL, SQL_NTS, NULL, SQL_NTS)); + + return OK; +} + + BEGIN_TESTS ADD_TEST(my_columns_null) ADD_TEST(my_drop_table) @@ -1296,6 +1305,7 @@ ADD_TEST(t_bug4518) ADD_TEST(empty_set) ADD_TEST(t_bug23031) + ADD_TEST(t_bug28316) END_TESTS