summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <monty@mysql.com>2006-01-10 18:03:54 +0200
committerunknown <monty@mysql.com>2006-01-10 18:03:54 +0200
commit159eaf4f0a68e216267b28eb13f8b4f9bbd2fec6 (patch)
treeed49069d3d1a7f5f33a004d515fe41f0e960aa62
parent29818203eb54980c4ceeca4681592617882505df (diff)
parentce221a703cfdf106c237fece7e480bcdfbef0198 (diff)
downloadmariadb-git-159eaf4f0a68e216267b28eb13f8b4f9bbd2fec6.tar.gz
Merge bk-internal.mysql.com:/home/bk/mysql-4.1
into mysql.com:/home/my/mysql-4.1 sql/sql_select.cc: Auto merged
-rw-r--r--sql/sql_handler.cc35
-rw-r--r--sql/sql_select.cc9
2 files changed, 15 insertions, 29 deletions
diff --git a/sql/sql_handler.cc b/sql/sql_handler.cc
index 12acf344c31..765a057f740 100644
--- a/sql/sql_handler.cc
+++ b/sql/sql_handler.cc
@@ -384,27 +384,6 @@ int mysql_ha_read(THD *thd, TABLE_LIST *tables,
DBUG_PRINT("info-in-hash",("'%s'.'%s' as '%s' tab %p",
hash_tables->db, hash_tables->real_name,
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)
{
/*
@@ -451,6 +430,13 @@ int mysql_ha_read(THD *thd, TABLE_LIST *tables,
}
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 &&
cond->fix_fields(thd, tables, &cond)) || cond->check_cols(1)))
goto err0;
@@ -471,13 +457,6 @@ int mysql_ha_read(THD *thd, TABLE_LIST *tables,
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
the handle is used in the HANDLER interface. Tell it again that
diff --git a/sql/sql_select.cc b/sql/sql_select.cc
index 09900c89307..74677a81ad3 100644
--- a/sql/sql_select.cc
+++ b/sql/sql_select.cc
@@ -5292,7 +5292,14 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields,
*(reg_field++) =new_field;
}
if (!--hidden_field_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));
field_count= (uint) (reg_field - table->field);
@@ -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