mirror of
https://github.com/MariaDB/server.git
synced 2025-07-27 18:02:13 +03:00
BUG#21635: MYSQL_FIELD struct's member strings seem to misbehave for
expression cols. The problem was that MYSQL_FIELD::org_name was set for MIN() and MAX() functions (COUNT() is also mentioned in the bug report but was already fixed). After this patch for expressions MYSQL_FIELD::name is set to either expression itself or its alias, and other data origin fields of MYSQL_FILED (db, org_table, table, org_name) are empty strings.
This commit is contained in:
@ -11945,6 +11945,73 @@ static void test_bug21726()
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
BUG#21635: MYSQL_FIELD struct's member strings seem to misbehave for
|
||||
expression cols
|
||||
|
||||
Check that for MIN(), MAX(), COUNT() only MYSQL_FIELD::name is set
|
||||
to either expression or its alias, and db, org_table, table,
|
||||
org_name fields are empty strings.
|
||||
*/
|
||||
static void test_bug21635()
|
||||
{
|
||||
const char *expr[]=
|
||||
{
|
||||
"MIN(i)", "MIN(i)",
|
||||
"MIN(i) AS A1", "A1",
|
||||
"MAX(i)", "MAX(i)",
|
||||
"MAX(i) AS A2", "A2",
|
||||
"COUNT(i)", "COUNT(i)",
|
||||
"COUNT(i) AS A3", "A3",
|
||||
};
|
||||
const char *query_end;
|
||||
MYSQL_RES *result;
|
||||
MYSQL_FIELD *field;
|
||||
unsigned int field_count, i;
|
||||
int rc;
|
||||
|
||||
DBUG_ENTER("test_bug21635");
|
||||
myheader("test_bug21635");
|
||||
|
||||
query_end= strxmov(query, "SELECT ", NullS);
|
||||
for (i= 0; i < sizeof(expr) / sizeof(*expr) / 2; ++i)
|
||||
query_end= strxmov(query_end, expr[i * 2], ", ", NullS);
|
||||
query_end= strxmov(query_end - 2, " FROM t1 GROUP BY i", NullS);
|
||||
DIE_UNLESS(query_end - query < MAX_TEST_QUERY_LENGTH);
|
||||
|
||||
rc= mysql_query(mysql, "DROP TABLE IF EXISTS t1");
|
||||
myquery(rc);
|
||||
rc= mysql_query(mysql, "CREATE TABLE t1 (i INT)");
|
||||
myquery(rc);
|
||||
rc= mysql_query(mysql, "INSERT INTO t1 VALUES (1)");
|
||||
myquery(rc);
|
||||
|
||||
rc= mysql_real_query(mysql, query, query_end - query);
|
||||
myquery(rc);
|
||||
|
||||
result= mysql_use_result(mysql);
|
||||
DIE_UNLESS(result);
|
||||
|
||||
field_count= mysql_field_count(mysql);
|
||||
for (i= 0; i < field_count; ++i)
|
||||
{
|
||||
field= mysql_fetch_field_direct(result, i);
|
||||
printf("%s -> %s ... ", expr[i * 2], field->name);
|
||||
fflush(stdout);
|
||||
DIE_UNLESS(field->db[0] == 0 && field->org_table[0] == 0 &&
|
||||
field->table[0] == 0 && field->org_name[0] == 0);
|
||||
DIE_UNLESS(strcmp(field->name, expr[i * 2 + 1]) == 0);
|
||||
puts("OK");
|
||||
}
|
||||
|
||||
mysql_free_result(result);
|
||||
rc= mysql_query(mysql, "DROP TABLE t1");
|
||||
myquery(rc);
|
||||
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Read and parse arguments and MySQL options from my.cnf
|
||||
*/
|
||||
@ -12172,6 +12239,7 @@ static struct my_tests_st my_tests[]= {
|
||||
{ "test_bug15613", test_bug15613 },
|
||||
{ "test_bug20152", test_bug20152 },
|
||||
{ "test_bug21726", test_bug21726 },
|
||||
{ "test_bug21635", test_bug21635 },
|
||||
{ 0, 0 }
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user