summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbell@sanja.is.com.ua <>2003-10-24 19:42:39 +0300
committerbell@sanja.is.com.ua <>2003-10-24 19:42:39 +0300
commitcaa9645c2492b907b8a6d690602e9dc40261356e (patch)
treee00df504170847937e2a2a9fb369d9e3aa53173a
parentf349adf8de5be3d5f1a5ba09913828795a59c8d3 (diff)
parent6300a0190901623aac4286dd89250844fb5de751 (diff)
downloadmariadb-git-caa9645c2492b907b8a6d690602e9dc40261356e.tar.gz
Merge
-rw-r--r--mysql-test/r/subselect.result7
-rw-r--r--mysql-test/t/subselect.test11
-rw-r--r--sql/item_subselect.cc17
-rw-r--r--sql/item_sum.cc1
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))