mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into moonbone.local:/work/27990-bug-5.0-opt-mysql
This commit is contained in:
16
sql/field.cc
16
sql/field.cc
@ -1356,15 +1356,25 @@ void Field_num::add_zerofill_and_unsigned(String &res) const
|
|||||||
|
|
||||||
void Field::make_field(Send_field *field)
|
void Field::make_field(Send_field *field)
|
||||||
{
|
{
|
||||||
if (orig_table->s->table_cache_key && *(orig_table->s->table_cache_key))
|
if (orig_table && orig_table->s->table_cache_key &&
|
||||||
|
*(orig_table->s->table_cache_key))
|
||||||
{
|
{
|
||||||
field->org_table_name= orig_table->s->table_name;
|
field->org_table_name= orig_table->s->table_name;
|
||||||
field->db_name= orig_table->s->table_cache_key;
|
field->db_name= orig_table->s->table_cache_key;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
field->org_table_name= field->db_name= "";
|
field->org_table_name= field->db_name= "";
|
||||||
field->table_name= orig_table->alias;
|
if (orig_table)
|
||||||
field->col_name= field->org_col_name= field_name;
|
{
|
||||||
|
field->table_name= orig_table->alias;
|
||||||
|
field->org_col_name= field_name;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
field->table_name= "";
|
||||||
|
field->org_col_name= "";
|
||||||
|
}
|
||||||
|
field->col_name= field_name;
|
||||||
field->charsetnr= charset()->number;
|
field->charsetnr= charset()->number;
|
||||||
field->length=field_length;
|
field->length=field_length;
|
||||||
field->type=type();
|
field->type=type();
|
||||||
|
@ -14330,6 +14330,9 @@ change_to_use_tmp_fields(THD *thd, Item **ref_pointer_array,
|
|||||||
item_field= (Item*) new Item_field(field);
|
item_field= (Item*) new Item_field(field);
|
||||||
if (!item_field)
|
if (!item_field)
|
||||||
DBUG_RETURN(TRUE); // Fatal error
|
DBUG_RETURN(TRUE); // Fatal error
|
||||||
|
|
||||||
|
if (item->real_item()->type() != Item::FIELD_ITEM)
|
||||||
|
field->orig_table= 0;
|
||||||
item_field->name= item->name;
|
item_field->name= item->name;
|
||||||
if (item->type() == Item::REF_ITEM)
|
if (item->type() == Item::REF_ITEM)
|
||||||
{
|
{
|
||||||
|
@ -15490,7 +15490,7 @@ static void test_bug21635()
|
|||||||
char *query_end;
|
char *query_end;
|
||||||
MYSQL_RES *result;
|
MYSQL_RES *result;
|
||||||
MYSQL_FIELD *field;
|
MYSQL_FIELD *field;
|
||||||
unsigned int field_count, i;
|
unsigned int field_count, i, j;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
DBUG_ENTER("test_bug21635");
|
DBUG_ENTER("test_bug21635");
|
||||||
@ -15506,28 +15506,35 @@ static void test_bug21635()
|
|||||||
myquery(rc);
|
myquery(rc);
|
||||||
rc= mysql_query(mysql, "CREATE TABLE t1 (i INT)");
|
rc= mysql_query(mysql, "CREATE TABLE t1 (i INT)");
|
||||||
myquery(rc);
|
myquery(rc);
|
||||||
rc= mysql_query(mysql, "INSERT INTO t1 VALUES (1)");
|
/*
|
||||||
myquery(rc);
|
We need this loop to ensure correct behavior with both constant and
|
||||||
|
non-constant tables.
|
||||||
rc= mysql_real_query(mysql, query, query_end - query);
|
*/
|
||||||
myquery(rc);
|
for (j= 0; j < 2 ; j++)
|
||||||
|
|
||||||
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);
|
rc= mysql_query(mysql, "INSERT INTO t1 VALUES (1)");
|
||||||
printf("%s -> %s ... ", expr[i * 2], field->name);
|
myquery(rc);
|
||||||
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_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");
|
rc= mysql_query(mysql, "DROP TABLE t1");
|
||||||
myquery(rc);
|
myquery(rc);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user