summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysql-test/r/analyse.result3
-rw-r--r--mysql-test/r/handler.result2
-rw-r--r--mysql-test/t/analyse.test1
-rw-r--r--mysql-test/t/handler.test2
-rw-r--r--sql/sql_select.cc12
5 files changed, 15 insertions, 5 deletions
diff --git a/mysql-test/r/analyse.result b/mysql-test/r/analyse.result
index ede83afe4e1..0cb33526457 100644
--- a/mysql-test/r/analyse.result
+++ b/mysql-test/r/analyse.result
@@ -1,6 +1,9 @@
drop table if exists t1,t2;
create table t1 (i int, j int);
insert into t1 values (1,2), (3,4), (5,6), (7,8);
+select count(*) from t1 procedure analyse();
+Field_name Min_value Max_value Min_length Max_length Empties_or_zeros Nulls Avg_value_or_avg_length Std Optimal_fieldtype
+ -6510615555426900571 -6510615555426900571 -6510615555426900571 -6510615555426900571
select * from t1 procedure analyse();
Field_name Min_value Max_value Min_length Max_length Empties_or_zeros Nulls Avg_value_or_avg_length Std Optimal_fieldtype
t1.i 1 7 1 1 0 0 4.0000 2.2361 ENUM('1','3','5','7') NOT NULL
diff --git a/mysql-test/r/handler.result b/mysql-test/r/handler.result
index 35765c48049..b47f97e167f 100644
--- a/mysql-test/r/handler.result
+++ b/mysql-test/r/handler.result
@@ -5,6 +5,8 @@ insert into t1 values
(14,"aaa"),(15,"bbb"),(16,"ccc"),(16,"xxx"),
(20,"ggg"),(21,"hhh"),(22,"iii");
handler t1 open as t2;
+handler t2 read a=(SELECT 1);
+You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT 1)' at line 1
handler t2 read a first;
a b
14 aaa
diff --git a/mysql-test/t/analyse.test b/mysql-test/t/analyse.test
index ccbfb56a801..117ca40ce54 100644
--- a/mysql-test/t/analyse.test
+++ b/mysql-test/t/analyse.test
@@ -7,6 +7,7 @@ drop table if exists t1,t2;
--enable_warnings
create table t1 (i int, j int);
insert into t1 values (1,2), (3,4), (5,6), (7,8);
+select count(*) from t1 procedure analyse();
select * from t1 procedure analyse();
create table t2 select * from t1 procedure analyse();
select * from t2;
diff --git a/mysql-test/t/handler.test b/mysql-test/t/handler.test
index 2b0a6a7be8d..b72b739600e 100644
--- a/mysql-test/t/handler.test
+++ b/mysql-test/t/handler.test
@@ -12,6 +12,8 @@ insert into t1 values
(14,"aaa"),(15,"bbb"),(16,"ccc"),(16,"xxx"),
(20,"ggg"),(21,"hhh"),(22,"iii");
handler t1 open as t2;
+-- error 1064
+handler t2 read a=(SELECT 1);
handler t2 read a first;
handler t2 read a next;
handler t2 read a next;
diff --git a/sql/sql_select.cc b/sql/sql_select.cc
index e7784cad04d..58559f9901b 100644
--- a/sql/sql_select.cc
+++ b/sql/sql_select.cc
@@ -714,6 +714,13 @@ JOIN::exec()
int tmp_error;
DBUG_ENTER("JOIN::exec");
+
+ if (procedure)
+ {
+ if (procedure->change_columns(fields_list) ||
+ result->prepare(fields_list, unit))
+ DBUG_VOID_RETURN;
+ }
if (!tables_list)
{ // Only test of functions
@@ -768,8 +775,6 @@ JOIN::exec()
test_if_skip_sort_order(&join_tab[const_tables], order,
select_limit, 0))))
order=0;
- if (procedure)
- (void)result->prepare(fields_list, unit);
select_describe(this, need_tmp,
order != 0 && !skip_sort_order,
select_distinct);
@@ -989,9 +994,6 @@ JOIN::exec()
}
if (procedure)
{
- if (procedure->change_columns(fields_list) ||
- result->prepare(fields_list, unit))
- DBUG_VOID_RETURN;
count_field_types(&tmp_table_param, all_fields, 0);
}
if (group || tmp_table_param.sum_func_count ||