Commit c44d6124 authored by monty@mysql.com's avatar monty@mysql.com

Merge mysql.com:/home/my/mysql-4.0

into  mysql.com:/home/my/mysql-4.1
parents f7d6fa6f fd4a0403
...@@ -384,27 +384,6 @@ int mysql_ha_read(THD *thd, TABLE_LIST *tables, ...@@ -384,27 +384,6 @@ int mysql_ha_read(THD *thd, TABLE_LIST *tables,
DBUG_PRINT("info-in-hash",("'%s'.'%s' as '%s' tab %p", DBUG_PRINT("info-in-hash",("'%s'.'%s' as '%s' tab %p",
hash_tables->db, hash_tables->real_name, hash_tables->db, hash_tables->real_name,
hash_tables->alias, table)); hash_tables->alias, table));
/* Table might have been flushed. */
if (table && (table->version != refresh_version))
{
/*
We must follow the thd->handler_tables chain, as we need the
address of the 'next' pointer referencing this table
for close_thread_table().
*/
for (table_ptr= &(thd->handler_tables);
*table_ptr && (*table_ptr != table);
table_ptr= &(*table_ptr)->next)
{}
VOID(pthread_mutex_lock(&LOCK_open));
if (close_thread_table(thd, table_ptr))
{
/* Tell threads waiting for refresh that something has happened */
VOID(pthread_cond_broadcast(&COND_refresh));
}
VOID(pthread_mutex_unlock(&LOCK_open));
table= hash_tables->table= NULL;
}
if (!table) if (!table)
{ {
/* /*
...@@ -451,6 +430,13 @@ int mysql_ha_read(THD *thd, TABLE_LIST *tables, ...@@ -451,6 +430,13 @@ int mysql_ha_read(THD *thd, TABLE_LIST *tables,
} }
tables->table=table; tables->table=table;
HANDLER_TABLES_HACK(thd);
lock= mysql_lock_tables(thd, &tables->table, 1, 0);
HANDLER_TABLES_HACK(thd);
if (!lock)
goto err0; // mysql_lock_tables() printed error message already
if (cond && ((!cond->fixed && if (cond && ((!cond->fixed &&
cond->fix_fields(thd, tables, &cond)) || cond->check_cols(1))) cond->fix_fields(thd, tables, &cond)) || cond->check_cols(1)))
goto err0; goto err0;
...@@ -468,16 +454,6 @@ int mysql_ha_read(THD *thd, TABLE_LIST *tables, ...@@ -468,16 +454,6 @@ int mysql_ha_read(THD *thd, TABLE_LIST *tables,
if (insert_fields(thd,tables,tables->db,tables->alias,&it)) if (insert_fields(thd,tables,tables->db,tables->alias,&it))
goto err0; goto err0;
select_limit+=offset_limit;
protocol->send_fields(&list,1);
HANDLER_TABLES_HACK(thd);
lock= mysql_lock_tables(thd, &tables->table, 1, 0);
HANDLER_TABLES_HACK(thd);
if (!lock)
goto err0; // mysql_lock_tables() printed error message already
/* /*
In ::external_lock InnoDB resets the fields which tell it that In ::external_lock InnoDB resets the fields which tell it that
the handle is used in the HANDLER interface. Tell it again that the handle is used in the HANDLER interface. Tell it again that
......
...@@ -5292,7 +5292,14 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields, ...@@ -5292,7 +5292,14 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields,
*(reg_field++) =new_field; *(reg_field++) =new_field;
} }
if (!--hidden_field_count) if (!--hidden_field_count)
{
hidden_null_count=null_count; hidden_null_count=null_count;
/*
We need to update hidden_field_count as we may have stored group
functions with constant arguments
*/
param->hidden_field_count= (uint) (reg_field - table->field);
}
} }
DBUG_ASSERT(field_count >= (uint) (reg_field - table->field)); DBUG_ASSERT(field_count >= (uint) (reg_field - table->field));
field_count= (uint) (reg_field - table->field); field_count= (uint) (reg_field - table->field);
...@@ -5488,7 +5495,7 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields, ...@@ -5488,7 +5495,7 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields,
} }
} }
if (distinct) if (distinct && field_count != param->hidden_field_count)
{ {
/* /*
Create an unique key or an unique constraint over all columns Create an unique key or an unique constraint over all columns
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment