1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-30 16:24:05 +03:00

fix for bug #11904 (select statement, cursor, grouping wrong results)

This commit is contained in:
andrey@lmy004.
2005-08-26 09:45:30 +02:00
parent d4a25c1b36
commit 7b1b3997a8
2 changed files with 87 additions and 2 deletions

View File

@ -14179,6 +14179,81 @@ static void test_bug11901()
myquery(rc);
}
/* Bug#11904: mysql_stmt_attr_set CURSOR_TYPE_READ_ONLY grouping wrong result */
static void test_bug11904()
{
MYSQL_STMT *stmt1;
int rc;
const char *stmt_text;
const ulong type= (ulong)CURSOR_TYPE_READ_ONLY;
MYSQL_BIND bind[2];
int country_id=0;
char row_data[11]= {0};
myheader("test_bug11904");
/* create tables */
rc= mysql_query(mysql, "DROP TABLE IF EXISTS bug11904b");
myquery(rc);
rc= mysql_query(mysql, "CREATE TABLE bug11904b (id int, name char(10), primary key(id, name))");
myquery(rc);
rc= mysql_query(mysql, "INSERT INTO bug11904b VALUES (1, 'sofia'), (1,'plovdiv'),"
" (1,'varna'), (2,'LA'), (2,'new york'), (3,'heidelberg'),"
" (3,'berlin'), (3, 'frankfurt')");
myquery(rc);
mysql_commit(mysql);
/* create statement */
stmt1= mysql_stmt_init(mysql);
mysql_stmt_attr_set(stmt1, STMT_ATTR_CURSOR_TYPE, (const void*) &type);
stmt_text= "SELECT id, MIN(name) FROM bug11904b GROUP BY id";
rc= mysql_stmt_prepare(stmt1, stmt_text, strlen(stmt_text));
check_execute(stmt1, rc);
memset(bind, 0, sizeof(bind));
bind[0].buffer_type= MYSQL_TYPE_LONG;
bind[0].buffer=& country_id;
bind[0].buffer_length= 0;
bind[0].length= 0;
bind[1].buffer_type= MYSQL_TYPE_STRING;
bind[1].buffer=& row_data;
bind[1].buffer_length= sizeof(row_data) - 1;
bind[1].length= 0;
rc= mysql_stmt_bind_result(stmt1, bind);
check_execute(stmt1, rc);
rc= mysql_stmt_execute(stmt1);
check_execute(stmt1, rc);
rc= mysql_stmt_fetch(stmt1);
check_execute(stmt1, rc);
DIE_UNLESS(country_id == 1);
DIE_UNLESS(memcmp(row_data, "plovdiv", 7) == 0);
rc= mysql_stmt_fetch(stmt1);
check_execute(stmt1, rc);
DIE_UNLESS(country_id == 2);
DIE_UNLESS(memcmp(row_data, "LA", 2) == 0);
rc= mysql_stmt_fetch(stmt1);
check_execute(stmt1, rc);
DIE_UNLESS(country_id == 3);
DIE_UNLESS(memcmp(row_data, "berlin", 6) == 0);
rc= mysql_stmt_close(stmt1);
check_execute(stmt1, rc);
rc= mysql_query(mysql, "drop table bug11904b");
myquery(rc);
}
/* Bug#12243: multiple cursors, crash in a fetch after commit. */
static void test_bug12243()
@ -14487,6 +14562,7 @@ static struct my_tests_st my_tests[]= {
{ "test_bug12001", test_bug12001 },
{ "test_bug11909", test_bug11909 },
{ "test_bug11901", test_bug11901 },
{ "test_bug11904", test_bug11904 },
{ "test_bug12243", test_bug12243 },
{ 0, 0 }
};