diff options
author | bell@sanja.is.com.ua <> | 2003-10-24 19:42:39 +0300 |
---|---|---|
committer | bell@sanja.is.com.ua <> | 2003-10-24 19:42:39 +0300 |
commit | caa9645c2492b907b8a6d690602e9dc40261356e (patch) | |
tree | e00df504170847937e2a2a9fb369d9e3aa53173a | |
parent | f349adf8de5be3d5f1a5ba09913828795a59c8d3 (diff) | |
parent | 6300a0190901623aac4286dd89250844fb5de751 (diff) | |
download | mariadb-git-caa9645c2492b907b8a6d690602e9dc40261356e.tar.gz |
Merge
-rw-r--r-- | mysql-test/r/subselect.result | 7 | ||||
-rw-r--r-- | mysql-test/t/subselect.test | 11 | ||||
-rw-r--r-- | sql/item_subselect.cc | 17 | ||||
-rw-r--r-- | sql/item_sum.cc | 1 |
4 files changed, 31 insertions, 5 deletions
diff --git a/mysql-test/r/subselect.result b/mysql-test/r/subselect.result index 5e960ac4681..a196b05b142 100644 --- a/mysql-test/r/subselect.result +++ b/mysql-test/r/subselect.result @@ -1475,6 +1475,13 @@ dbid name -1 Valid -1 Valid 2 drop table t1,t2,t3,t4; +CREATE TABLE t1 (id int(11) default NULL) TYPE=MyISAM CHARSET=latin1; +INSERT INTO t1 VALUES (1),(5); +CREATE TABLE t2 (id int(11) default NULL) TYPE=MyISAM CHARSET=latin1; +INSERT INTO t2 VALUES (2),(6); +select * from t1 where (1,2,6) in (select * from t2); +ERROR 21000: Operand should contain 3 column(s) +DROP TABLE t1,t2; create table t1 (s1 int); insert into t1 values (1); insert into t1 values (2); diff --git a/mysql-test/t/subselect.test b/mysql-test/t/subselect.test index adc0e7a88e3..e585375b385 100644 --- a/mysql-test/t/subselect.test +++ b/mysql-test/t/subselect.test @@ -990,6 +990,17 @@ SELECT dbid, name FROM t3 a, t2 b, t4 WHERE dbid = - 1 AND primary_uid = '1' AND drop table t1,t2,t3,t4; # +# cardinality check +# +CREATE TABLE t1 (id int(11) default NULL) TYPE=MyISAM CHARSET=latin1; +INSERT INTO t1 VALUES (1),(5); +CREATE TABLE t2 (id int(11) default NULL) TYPE=MyISAM CHARSET=latin1; +INSERT INTO t2 VALUES (2),(6); +-- error 1240 +select * from t1 where (1,2,6) in (select * from t2); +DROP TABLE t1,t2; + +# # DO and SET with errors # create table t1 (s1 int); diff --git a/sql/item_subselect.cc b/sql/item_subselect.cc index 704681dd511..6ac191af267 100644 --- a/sql/item_subselect.cc +++ b/sql/item_subselect.cc @@ -514,6 +514,12 @@ Item_in_subselect::single_value_transformer(JOIN *join, THD *thd= join->thd; thd->where= "scalar IN/ALL/ANY subquery"; + if (select_lex->item_list.elements > 1) + { + my_error(ER_OPERAND_COLUMNS, MYF(0), 1); + DBUG_RETURN(RES_ERROR); + } + if ((abort_on_null || (upper_not && upper_not->top_level())) && !select_lex->master_unit()->dependent && (func == &Item_bool_func2::gt_creator || @@ -606,11 +612,6 @@ Item_in_subselect::single_value_transformer(JOIN *join, select_lex->dependent= 1; Item *item; - if (select_lex->item_list.elements > 1) - { - my_error(ER_OPERAND_COLUMNS, MYF(0), 1); - DBUG_RETURN(RES_ERROR); - } item= (Item*) select_lex->item_list.head(); @@ -710,6 +711,12 @@ Item_in_subselect::row_value_transformer(JOIN *join, SELECT_LEX *select_lex= join->select_lex; + if (select_lex->item_list.elements != left_expr->cols()) + { + my_error(ER_OPERAND_COLUMNS, MYF(0), left_expr->cols()); + DBUG_RETURN(RES_ERROR); + } + if (!substitution) { //first call for this unit diff --git a/sql/item_sum.cc b/sql/item_sum.cc index 672126a2664..9da1b21db72 100644 --- a/sql/item_sum.cc +++ b/sql/item_sum.cc @@ -1795,6 +1795,7 @@ Item_func_group_concat::fix_fields(THD *thd, TABLE_LIST *tables, Item **ref) */ for (i= 0 ; i < arg_count_order ; i++) { + // order_item->item can be changed by fix_fields() call ORDER *order_item= order[i]; if ((*order_item->item)->fix_fields(thd, tables, order_item->item) || (*order_item->item)->check_cols(1)) |