Loading sql/sql_union.cc +13 −2 Original line number Diff line number Diff line Loading @@ -689,7 +689,17 @@ bool st_select_lex_unit::change_result(select_subselect *result, List<Item> *st_select_lex_unit::get_unit_column_types() { bool is_union= test(first_select()->next_select()); SELECT_LEX *sl= first_select(); bool is_union= test(sl->next_select()); bool is_procedure= test(sl->join->procedure); if (is_procedure) { /* Types for "SELECT * FROM t1 procedure analyse()" are generated during execute */ return &sl->join->procedure_fields_list; } if (is_union) { Loading @@ -697,7 +707,8 @@ List<Item> *st_select_lex_unit::get_unit_column_types() /* Types are generated during prepare */ return &types; } return &first_select()->item_list; return &sl->item_list; } bool st_select_lex::cleanup() Loading tests/mysql_client_test.c +14 −0 Original line number Diff line number Diff line Loading @@ -11977,6 +11977,19 @@ static void test_cursors_with_union() fetch_n(queries, sizeof(queries)/sizeof(*queries), USE_STORE_RESULT); } static void test_cursors_with_procedure() { const char *queries[]= { "SELECT * FROM t1 procedure analyse()" }; myheader("test_cursors_with_procedure"); fetch_n(queries, sizeof(queries)/sizeof(*queries), USE_ROW_BY_ROW_FETCH); fetch_n(queries, sizeof(queries)/sizeof(*queries), USE_STORE_RESULT); } /* Altough mysql_create_db(), mysql_rm_db() are deprecated since 4.0 they should not crash server and should not hang in case of errors. Loading Loading @@ -15501,6 +15514,7 @@ static struct my_tests_st my_tests[]= { { "test_view_insert_fields", test_view_insert_fields }, { "test_basic_cursors", test_basic_cursors }, { "test_cursors_with_union", test_cursors_with_union }, { "test_cursors_with_procedure", test_cursors_with_procedure }, { "test_truncation", test_truncation }, { "test_truncation_option", test_truncation_option }, { "test_client_character_set", test_client_character_set }, Loading Loading
sql/sql_union.cc +13 −2 Original line number Diff line number Diff line Loading @@ -689,7 +689,17 @@ bool st_select_lex_unit::change_result(select_subselect *result, List<Item> *st_select_lex_unit::get_unit_column_types() { bool is_union= test(first_select()->next_select()); SELECT_LEX *sl= first_select(); bool is_union= test(sl->next_select()); bool is_procedure= test(sl->join->procedure); if (is_procedure) { /* Types for "SELECT * FROM t1 procedure analyse()" are generated during execute */ return &sl->join->procedure_fields_list; } if (is_union) { Loading @@ -697,7 +707,8 @@ List<Item> *st_select_lex_unit::get_unit_column_types() /* Types are generated during prepare */ return &types; } return &first_select()->item_list; return &sl->item_list; } bool st_select_lex::cleanup() Loading
tests/mysql_client_test.c +14 −0 Original line number Diff line number Diff line Loading @@ -11977,6 +11977,19 @@ static void test_cursors_with_union() fetch_n(queries, sizeof(queries)/sizeof(*queries), USE_STORE_RESULT); } static void test_cursors_with_procedure() { const char *queries[]= { "SELECT * FROM t1 procedure analyse()" }; myheader("test_cursors_with_procedure"); fetch_n(queries, sizeof(queries)/sizeof(*queries), USE_ROW_BY_ROW_FETCH); fetch_n(queries, sizeof(queries)/sizeof(*queries), USE_STORE_RESULT); } /* Altough mysql_create_db(), mysql_rm_db() are deprecated since 4.0 they should not crash server and should not hang in case of errors. Loading Loading @@ -15501,6 +15514,7 @@ static struct my_tests_st my_tests[]= { { "test_view_insert_fields", test_view_insert_fields }, { "test_basic_cursors", test_basic_cursors }, { "test_cursors_with_union", test_cursors_with_union }, { "test_cursors_with_procedure", test_cursors_with_procedure }, { "test_truncation", test_truncation }, { "test_truncation_option", test_truncation_option }, { "test_client_character_set", test_client_character_set }, Loading