summaryrefslogtreecommitdiff
path: root/sql/sql_derived.cc
diff options
context:
space:
mode:
authorunknown <sanja@askmonty.org>2013-12-18 15:59:51 +0200
committerunknown <sanja@askmonty.org>2013-12-18 15:59:51 +0200
commit57400ee6819e7dbb601b19f0ac223c491ef7359f (patch)
tree6284a8c2ad2ca3bc00f897f2d5a96169d66ac55d /sql/sql_derived.cc
parent3ec4296ec413e866c3efabc8dfa94172ad5f7c04 (diff)
downloadmariadb-git-57400ee6819e7dbb601b19f0ac223c491ef7359f.tar.gz
MDEV-5414: RAND() in a subselect : different behavior in MariaDB and MySQL
Materialization forced in case if rand() used in view or derived table to avoud several calls of rand for gting value of a field. Fixed set variable uncachable flag from - it shouldbe a side effect not a random value.
Diffstat (limited to 'sql/sql_derived.cc')
-rw-r--r--sql/sql_derived.cc8
1 files changed, 8 insertions, 0 deletions
diff --git a/sql/sql_derived.cc b/sql/sql_derived.cc
index 9d04beaf73e..5227ec2d958 100644
--- a/sql/sql_derived.cc
+++ b/sql/sql_derived.cc
@@ -357,6 +357,14 @@ bool mysql_derived_merge(THD *thd, LEX *lex, TABLE_LIST *derived)
if (derived->merged)
return FALSE;
+ if (dt_select->uncacheable & UNCACHEABLE_RAND)
+ {
+ /* There is random function => fall back to materialization. */
+ derived->change_refs_to_fields();
+ derived->set_materialized_derived();
+ return FALSE;
+ }
+
if (thd->lex->sql_command == SQLCOM_UPDATE_MULTI ||
thd->lex->sql_command == SQLCOM_DELETE_MULTI)
thd->save_prep_leaf_list= TRUE;