Commit 70dfa422 authored by Sinisa@sinisa.nasamreza.org's avatar Sinisa@sinisa.nasamreza.org

resolve fix

parents 4fa14086 3e302c52
drop table if exists t1,t2; drop table if exists t1,t2;
create table t1 (i int, j int); create table t1 (i int, j int);
insert into t1 values (1,2), (3,4), (5,6), (7,8); 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(); 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 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 t1.i 1 7 1 1 0 0 4.0000 2.2361 ENUM('1','3','5','7') NOT NULL
......
...@@ -5,6 +5,8 @@ insert into t1 values ...@@ -5,6 +5,8 @@ insert into t1 values
(14,"aaa"),(15,"bbb"),(16,"ccc"),(16,"xxx"), (14,"aaa"),(15,"bbb"),(16,"ccc"),(16,"xxx"),
(20,"ggg"),(21,"hhh"),(22,"iii"); (20,"ggg"),(21,"hhh"),(22,"iii");
handler t1 open as t2; 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; handler t2 read a first;
a b a b
14 aaa 14 aaa
......
...@@ -7,6 +7,7 @@ drop table if exists t1,t2; ...@@ -7,6 +7,7 @@ drop table if exists t1,t2;
--enable_warnings --enable_warnings
create table t1 (i int, j int); create table t1 (i int, j int);
insert into t1 values (1,2), (3,4), (5,6), (7,8); insert into t1 values (1,2), (3,4), (5,6), (7,8);
select count(*) from t1 procedure analyse();
select * from t1 procedure analyse(); select * from t1 procedure analyse();
create table t2 select * from t1 procedure analyse(); create table t2 select * from t1 procedure analyse();
select * from t2; select * from t2;
......
...@@ -12,6 +12,8 @@ insert into t1 values ...@@ -12,6 +12,8 @@ insert into t1 values
(14,"aaa"),(15,"bbb"),(16,"ccc"),(16,"xxx"), (14,"aaa"),(15,"bbb"),(16,"ccc"),(16,"xxx"),
(20,"ggg"),(21,"hhh"),(22,"iii"); (20,"ggg"),(21,"hhh"),(22,"iii");
handler t1 open as t2; handler t1 open as t2;
-- error 1064
handler t2 read a=(SELECT 1);
handler t2 read a first; handler t2 read a first;
handler t2 read a next; handler t2 read a next;
handler t2 read a next; handler t2 read a next;
......
...@@ -970,11 +970,12 @@ int select_dumpvar::prepare(List<Item> &list, SELECT_LEX_UNIT *u) ...@@ -970,11 +970,12 @@ int select_dumpvar::prepare(List<Item> &list, SELECT_LEX_UNIT *u)
my_error(ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT, MYF(0)); my_error(ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT, MYF(0));
return 1; return 1;
} }
unit=u;
while ((item=li++)) while ((item=li++))
{ {
ls= gl++; ls= gl++;
Item_func_set_user_var *xx = new Item_func_set_user_var(*ls,item); Item_func_set_user_var *xx = new Item_func_set_user_var(*ls,item);
xx->fix_fields(current_thd,(TABLE_LIST*) current_thd->lex.select_lex.table_list.first,&item); xx->fix_fields(thd,(TABLE_LIST*) thd->lex.select_lex.table_list.first,&item);
xx->fix_length_and_dec(); xx->fix_length_and_dec();
vars.push_back(xx); vars.push_back(xx);
} }
...@@ -986,6 +987,11 @@ bool select_dumpvar::send_data(List<Item> &items) ...@@ -986,6 +987,11 @@ bool select_dumpvar::send_data(List<Item> &items)
Item_func_set_user_var *xx; Item_func_set_user_var *xx;
DBUG_ENTER("send_data"); DBUG_ENTER("send_data");
if (unit->offset_limit_cnt)
{ // Using limit offset,count
unit->offset_limit_cnt--;
DBUG_RETURN(0);
}
if (row_count++) if (row_count++)
{ {
my_error(ER_TOO_MANY_ROWS, MYF(0)); my_error(ER_TOO_MANY_ROWS, MYF(0));
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
#include "sql_select.h" #include "sql_select.h"
#include "sql_acl.h" #include "sql_acl.h"
extern const char *any_db="*any*"; // Special symbol for check_access extern const char *any_db; // Special symbol for check_access
/* /*
Resolve derived tables in all queries Resolve derived tables in all queries
......
...@@ -714,6 +714,13 @@ JOIN::exec() ...@@ -714,6 +714,13 @@ JOIN::exec()
int tmp_error; int tmp_error;
DBUG_ENTER("JOIN::exec"); DBUG_ENTER("JOIN::exec");
if (procedure)
{
if (procedure->change_columns(fields_list) ||
result->prepare(fields_list, unit))
DBUG_VOID_RETURN;
}
if (!tables_list) if (!tables_list)
{ // Only test of functions { // Only test of functions
...@@ -768,8 +775,6 @@ JOIN::exec() ...@@ -768,8 +775,6 @@ JOIN::exec()
test_if_skip_sort_order(&join_tab[const_tables], order, test_if_skip_sort_order(&join_tab[const_tables], order,
select_limit, 0)))) select_limit, 0))))
order=0; order=0;
if (procedure)
(void)result->prepare(fields_list, unit);
select_describe(this, need_tmp, select_describe(this, need_tmp,
order != 0 && !skip_sort_order, order != 0 && !skip_sort_order,
select_distinct); select_distinct);
...@@ -989,9 +994,6 @@ JOIN::exec() ...@@ -989,9 +994,6 @@ JOIN::exec()
} }
if (procedure) 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); count_field_types(&tmp_table_param, all_fields, 0);
} }
if (group || tmp_table_param.sum_func_count || if (group || tmp_table_param.sum_func_count ||
......
...@@ -2573,6 +2573,12 @@ select_derived: ...@@ -2573,6 +2573,12 @@ select_derived:
{ {
LEX *lex= Lex; LEX *lex= Lex;
lex->derived_tables= 1; lex->derived_tables= 1;
if (((int)lex->sql_command >= (int)SQLCOM_HA_OPEN &&
lex->sql_command <= (int)SQLCOM_HA_READ) || lex->sql_command == (int)SQLCOM_KILL)
{
send_error(lex->thd, ER_SYNTAX_ERROR);
YYABORT;
}
if (lex->current_select->linkage == GLOBAL_OPTIONS_TYPE || if (lex->current_select->linkage == GLOBAL_OPTIONS_TYPE ||
mysql_new_select(lex, 1)) mysql_new_select(lex, 1))
YYABORT; YYABORT;
...@@ -4643,6 +4649,12 @@ in_subselect_init: ...@@ -4643,6 +4649,12 @@ in_subselect_init:
subselect_start: subselect_start:
'(' SELECT_SYM '(' SELECT_SYM
{ {
LEX *lex=Lex;
if (((int)lex->sql_command >= (int)SQLCOM_HA_OPEN &&
lex->sql_command <= (int)SQLCOM_HA_READ) || lex->sql_command == (int)SQLCOM_KILL) {
send_error(lex->thd, ER_SYNTAX_ERROR);
YYABORT;
}
if (mysql_new_select(Lex, 1)) if (mysql_new_select(Lex, 1))
YYABORT; YYABORT;
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment