summaryrefslogtreecommitdiff
path: root/sql/table.h
diff options
context:
space:
mode:
authorSergey Vojtovich <svoj@sun.com>2010-02-09 12:53:13 +0400
committerSergey Vojtovich <svoj@sun.com>2010-02-09 12:53:13 +0400
commit0897669cba1b314c36f41a8a31ee73b6d0d11115 (patch)
tree4399c5a586ac17afc75f2a3776d0bf12b75315fe /sql/table.h
parentc12c9780cdbe965bcdce0326b14a171d2f2b8635 (diff)
downloadmariadb-git-0897669cba1b314c36f41a8a31ee73b6d0d11115.tar.gz
BUG#49902 - SELECT returns incorrect results
Queries optimized with GROUP_MIN_MAX didn't cleanup KEYREAD optimization properly. As a result subsequent queries may return incomplete rows (fields are initialized to default values). mysql-test/r/group_min_max.result: A test case for BUG#49902. mysql-test/t/group_min_max.test: A test case for BUG#49902. sql/opt_range.cc: Refactor of KEYREAD optimization switch so that KEYREAD handler state is in sync with st_table::key_read flag. All SQL code is supposed to switch KEYREAD optimization via st_table::set_keyread(). sql/opt_sum.cc: Refactor of KEYREAD optimization switch so that KEYREAD handler state is in sync with st_table::key_read flag. All SQL code is supposed to switch KEYREAD optimization via st_table::set_keyread(). sql/sql_select.cc: Refactor of KEYREAD optimization switch so that KEYREAD handler state is in sync with st_table::key_read flag. All SQL code is supposed to switch KEYREAD optimization via st_table::set_keyread(). sql/sql_update.cc: Refactor of KEYREAD optimization switch so that KEYREAD handler state is in sync with st_table::key_read flag. All SQL code is supposed to switch KEYREAD optimization via st_table::set_keyread(). sql/table.cc: Refactor of KEYREAD optimization switch so that KEYREAD handler state is in sync with st_table::key_read flag. All SQL code is supposed to switch KEYREAD optimization via st_table::set_keyread(). sql/table.h: Refactor of KEYREAD optimization switch so that KEYREAD handler state is in sync with st_table::key_read flag. All SQL code is supposed to switch KEYREAD optimization via st_table::set_keyread().
Diffstat (limited to 'sql/table.h')
-rw-r--r--sql/table.h14
1 files changed, 14 insertions, 0 deletions
diff --git a/sql/table.h b/sql/table.h
index eae261cc97d..e797ef2b2de 100644
--- a/sql/table.h
+++ b/sql/table.h
@@ -902,6 +902,20 @@ struct st_table {
inline bool needs_reopen_or_name_lock()
{ return s->version != refresh_version; }
bool is_children_attached(void);
+ inline void set_keyread(bool flag)
+ {
+ DBUG_ASSERT(file);
+ if (flag && !key_read)
+ {
+ key_read= 1;
+ file->extra(HA_EXTRA_KEYREAD);
+ }
+ else if (!flag && key_read)
+ {
+ key_read= 0;
+ file->extra(HA_EXTRA_NO_KEYREAD);
+ }
+ }
};
enum enum_schema_table_state