summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorbell@sanja.is.com.ua <>2002-06-07 21:26:43 +0300
committerbell@sanja.is.com.ua <>2002-06-07 21:26:43 +0300
commitbd7e31bc5349c078391fac8ae00546521d0b9c2c (patch)
tree5084c3aaf267a045d459aa5bcca489dcb7f45ffc /sql
parentb9ad4b015e53e079c22884c3ce0b55d4ea0aa28e (diff)
downloadmariadb-git-bd7e31bc5349c078391fac8ae00546521d0b9c2c.tar.gz
temporary preventing subselect in HAVING clause
Diffstat (limited to 'sql')
-rw-r--r--sql/item_subselect.cc7
-rw-r--r--sql/sql_class.cc4
-rw-r--r--sql/sql_class.h2
-rw-r--r--sql/sql_select.cc6
4 files changed, 16 insertions, 3 deletions
diff --git a/sql/item_subselect.cc b/sql/item_subselect.cc
index fc0228455ff..c2349ed414c 100644
--- a/sql/item_subselect.cc
+++ b/sql/item_subselect.cc
@@ -102,6 +102,13 @@ void Item_subselect::make_field (Send_field *tmp_field)
bool Item_subselect::fix_fields(THD *thd,TABLE_LIST *tables)
{
+
+ if (thd->having_fix_field)
+ {
+ //TODO: subselects in having do not suported now
+ my_printf_error(ER_SYNTAX_ERROR, ER(ER_SYNTAX_ERROR), MYF(0));
+ return 1;
+ }
// Is it one field subselect?
if (select_lex->item_list.elements != 1)
{
diff --git a/sql/sql_class.cc b/sql/sql_class.cc
index cd548f36cff..86e4e6896e6 100644
--- a/sql/sql_class.cc
+++ b/sql/sql_class.cc
@@ -80,8 +80,8 @@ static void free_var(user_var_entry *entry)
****************************************************************************/
THD::THD():user_time(0),fatal_error(0),last_insert_id_used(0),
- insert_id_used(0),in_lock_tables(0),
- global_read_lock(0),bootstrap(0)
+ insert_id_used(0), in_lock_tables(0),
+ global_read_lock(0), bootstrap(0), having_fix_field(0)
{
host=user=priv_user=db=query=ip=0;
host_or_ip="unknown ip";
diff --git a/sql/sql_class.h b/sql/sql_class.h
index 019217cb656..8a1a299ceee 100644
--- a/sql/sql_class.h
+++ b/sql/sql_class.h
@@ -428,6 +428,8 @@ public:
bool query_error, bootstrap, cleanup_done;
bool safe_to_cache_query;
bool volatile killed;
+ // TRUE when having fix field called
+ bool having_fix_field;
/*
If we do a purge of binary logs, log index info of the threads
that are currently reading it needs to be adjusted. To do that
diff --git a/sql/sql_select.cc b/sql/sql_select.cc
index d4f6504ec32..c10174a7b71 100644
--- a/sql/sql_select.cc
+++ b/sql/sql_select.cc
@@ -229,7 +229,11 @@ JOIN::prepare(TABLE_LIST *tables_init,
{
thd->where="having clause";
thd->allow_sum_func=1;
- if (having->fix_fields(thd,tables_list) || thd->fatal_error)
+ bool having_fix_field_store= thd->having_fix_field;
+ thd->having_fix_field= 1;
+ bool having_fix_rc= having->fix_fields(thd,tables_list);
+ thd->having_fix_field= having_fix_field_store;
+ if (having_fix_rc || thd->fatal_error)
DBUG_RETURN(-1); /* purecov: inspected */
if (having->with_sum_func)
having->split_sum_func(all_fields);