diff options
author | unknown <evgen@moonbone.local> | 2005-09-22 01:38:39 +0400 |
---|---|---|
committer | unknown <evgen@moonbone.local> | 2005-09-22 01:38:39 +0400 |
commit | 1b02a815dde1379635fb1c76065fc056c084705a (patch) | |
tree | 855aa772951e6545174d3ef67ecc3d5d677db4ee | |
parent | 2a5505c7f6e0e41dfe0d85c2d9dd2f5e6eebf222 (diff) | |
download | mariadb-git-1b02a815dde1379635fb1c76065fc056c084705a.tar.gz |
Fix bug #13180 thd->allow_sum_funcs wasn't reset before query processing.
thd->allow_sum_func was left 'true' after previous statement thus allowing
sum funcs to be present in conditions.
thd->allow_sum_func should be set to 0 for each query and each prepared
statement reinitialization. This is done in lex_start() and
reset_stmt_for_execute().
sql/sql_lex.cc:
Fix bug#13180 thd->allow_sum_func wasn't reset obefore query processing.
thd->allow_sum_func is set to 0 in lex_start().
sql/sql_prepare.cc:
Fix bug#13180 thd->allow_sum_func wasn't reset obefore query processing.
thd->allow_sum_func is set to 0 in reset_stmt_for_execute().
mysql-test/t/update.test:
Test case for bug#13180 thd->allow_sum_funcs wasn't reset before query
processing.
mysql-test/r/update.result:
Test case for bug#13180 thd->allow_sum_funcs wasn't reset before query
processing.
-rw-r--r-- | mysql-test/r/update.result | 12 | ||||
-rw-r--r-- | mysql-test/t/update.test | 12 | ||||
-rw-r--r-- | sql/sql_lex.cc | 1 | ||||
-rw-r--r-- | sql/sql_prepare.cc | 1 |
4 files changed, 26 insertions, 0 deletions
diff --git a/mysql-test/r/update.result b/mysql-test/r/update.result index e35d4e29fe4..d6c1118f90c 100644 --- a/mysql-test/r/update.result +++ b/mysql-test/r/update.result @@ -251,3 +251,15 @@ f1 f2 1 1 2 2 drop table t1,t2; +create table t1(f1 int); +select DATABASE(); +DATABASE() +test +update t1 set f1=1 where count(*)=1; +ERROR HY000: Invalid use of group function +select DATABASE(); +DATABASE() +test +delete from t1 where count(*)=1; +ERROR HY000: Invalid use of group function +drop table t1; diff --git a/mysql-test/t/update.test b/mysql-test/t/update.test index e4e751862f1..84e9ced2017 100644 --- a/mysql-test/t/update.test +++ b/mysql-test/t/update.test @@ -215,4 +215,16 @@ UPDATE t1 SET t1.f2=(SELECT MAX(t2.f4) FROM t2 WHERE t2.f3=t1.f1); select * from t1; drop table t1,t2; +# +# Bug #13180 sometimes server accepts sum func in update/delete where condition +# +create table t1(f1 int); +select DATABASE(); +--error 1111 +update t1 set f1=1 where count(*)=1; +select DATABASE(); +--error 1111 +delete from t1 where count(*)=1; +drop table t1; + # End of 4.1 tests diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index 8636b6542fc..07017451bad 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -160,6 +160,7 @@ void lex_start(THD *thd, uchar *buf,uint length) lex->duplicates= DUP_ERROR; lex->ignore= 0; lex->proc_list.first= 0; + thd->allow_sum_func= 0; } void lex_end(LEX *lex) diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc index 8a50d0bd50e..c8f417c9b9b 100644 --- a/sql/sql_prepare.cc +++ b/sql/sql_prepare.cc @@ -1738,6 +1738,7 @@ static void reset_stmt_for_execute(Prepared_statement *stmt) lex->current_select= &lex->select_lex; if (lex->result) lex->result->cleanup(); + thd->allow_sum_func= 0; } |