Commit eda2ebef authored by Sergei Golubchik's avatar Sergei Golubchik

MDEV-11784 View is created with invalid definition which causes ERROR 1241...

MDEV-11784 View is created with invalid definition which causes ERROR 1241 (21000): Operand should contain 1 column(s)

set the correct print precedence for IN subqueries
parent cf003933
drop table if exists t1,t2,t3,t4,t5,t6,t9,`t1a``b`,v1,v2,v3,v4,v5,v6;
drop view if exists t1,t2,t3,t4,t5,t6,t9,`t1a``b`,v1,v2,v3,v4,v5,v6;
drop database if exists mysqltest;
use test;
SET @save_optimizer_switch=@@optimizer_switch;
SET optimizer_switch='outer_join_with_cache=off';
create view v1 (c,d) as select a,b from t1;
......@@ -6325,6 +6321,17 @@ INSERT INTO v (f1, f3) VALUES (1,1), (2,2);
ERROR HY000: Can not modify more than one base table through a join view 'test.v'
drop view v;
drop tables t1,t2,t3;
create table t1 (i int, j int);
insert t1 values (1,1),(2,2);
create view v1 as select (2, 3) not in (select i, j from t1);
select * from v1;
(2, 3) not in (select i, j from t1)
1
show create view v1;
View Create View character_set_client collation_connection
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select !((2,3) in (select `t1`.`i`,`t1`.`j` from `t1`)) AS `(2, 3) not in (select i, j from t1)` latin1 latin1_swedish_ci
drop view v1;
drop table t1;
#
# End of 10.2 tests
#
--disable_warnings
drop table if exists t1,t2,t3,t4,t5,t6,t9,`t1a``b`,v1,v2,v3,v4,v5,v6;
drop view if exists t1,t2,t3,t4,t5,t6,t9,`t1a``b`,v1,v2,v3,v4,v5,v6;
drop database if exists mysqltest;
--enable_warnings
use test;
# Save the initial number of concurrent sessions.
--source include/count_sessions.inc
......@@ -6066,6 +6058,17 @@ INSERT INTO v (f1, f3) VALUES (1,1), (2,2);
drop view v;
drop tables t1,t2,t3;
#
# MDEV-11784 View is created with invalid definition which causes ERROR 1241 (21000): Operand should contain 1 column(s)
#
create table t1 (i int, j int);
insert t1 values (1,1),(2,2);
create view v1 as select (2, 3) not in (select i, j from t1);
select * from v1;
show create view v1;
drop view v1;
drop table t1;
--echo #
--echo # End of 10.2 tests
--echo #
......@@ -399,7 +399,7 @@ class Item_exists_subselect :public Item_subselect
bool val_bool();
bool fix_fields(THD *thd, Item **ref);
void fix_length_and_dec();
virtual void print(String *str, enum_query_type query_type);
void print(String *str, enum_query_type query_type);
bool select_transformer(JOIN *join);
void top_level_item() { abort_on_null=1; }
inline bool is_top_level_item() { return abort_on_null; }
......@@ -616,7 +616,8 @@ class Item_in_subselect :public Item_exists_subselect
void update_null_value () { (void) val_bool(); }
bool val_bool();
bool test_limit(st_select_lex_unit *unit);
virtual void print(String *str, enum_query_type query_type);
void print(String *str, enum_query_type query_type);
enum precedence precedence() const { return CMP_PRECEDENCE; }
bool fix_fields(THD *thd, Item **ref);
void fix_length_and_dec();
void fix_after_pullout(st_select_lex *new_parent, Item **ref);
......@@ -740,7 +741,7 @@ class Item_allany_subselect :public Item_in_subselect
subs_type substype() { return all?ALL_SUBS:ANY_SUBS; }
bool select_transformer(JOIN *join);
void create_comp_func(bool invert) { func= func_creator(invert); }
virtual void print(String *str, enum_query_type query_type);
void print(String *str, enum_query_type query_type);
bool is_maxmin_applicable(JOIN *join);
bool transform_into_max_min(JOIN *join);
void no_rows_in_result();
......@@ -849,7 +850,7 @@ class subselect_single_select_engine: public subselect_engine
uint8 uncacheable();
void exclude();
table_map upper_select_const_tables();
virtual void print (String *str, enum_query_type query_type);
void print (String *str, enum_query_type query_type);
bool change_result(Item_subselect *si,
select_result_interceptor *result,
bool temp);
......@@ -883,7 +884,7 @@ class subselect_union_engine: public subselect_engine
uint8 uncacheable();
void exclude();
table_map upper_select_const_tables();
virtual void print (String *str, enum_query_type query_type);
void print (String *str, enum_query_type query_type);
bool change_result(Item_subselect *si,
select_result_interceptor *result,
bool temp= FALSE);
......@@ -940,7 +941,7 @@ class subselect_uniquesubquery_engine: public subselect_engine
uint8 uncacheable() { return UNCACHEABLE_DEPENDENT_INJECTED; }
void exclude();
table_map upper_select_const_tables() { return 0; }
virtual void print (String *str, enum_query_type query_type);
void print (String *str, enum_query_type query_type);
bool change_result(Item_subselect *si,
select_result_interceptor *result,
bool temp= FALSE);
......@@ -998,7 +999,7 @@ class subselect_indexsubquery_engine: public subselect_uniquesubquery_engine
having(having_arg)
{}
int exec();
virtual void print (String *str, enum_query_type query_type);
void print (String *str, enum_query_type query_type);
virtual enum_engine_type engine_type() { return INDEXSUBQUERY_ENGINE; }
};
......@@ -1073,11 +1074,8 @@ class subselect_hash_sj_engine : public subselect_engine
void cleanup();
int prepare(THD *);
int exec();
virtual void print(String *str, enum_query_type query_type);
uint cols()
{
return materialize_engine->cols();
}
void print(String *str, enum_query_type query_type);
uint cols() { return materialize_engine->cols(); }
uint8 uncacheable() { return materialize_engine->uncacheable(); }
table_map upper_select_const_tables() { return 0; }
bool no_rows() { return !tmp_table->file->stats.records; }
......
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