From fdc2b921cc529076de68d099b809cb1cb29dfa67 Mon Sep 17 00:00:00 2001 From: "evgen@moonbone.local" <> Date: Tue, 30 May 2006 23:05:34 +0400 Subject: [PATCH] item_cmpfunc.cc, func_in.result, multi_update.result: After merge fix --- mysql-test/r/func_in.result | 8 ++++++++ mysql-test/r/multi_update.result | 1 + sql/item_cmpfunc.cc | 23 +++++++++++++++++++++++ 3 files changed, 32 insertions(+) diff --git a/mysql-test/r/func_in.result b/mysql-test/r/func_in.result index dd355c693d..f758e2adfd 100644 --- a/mysql-test/r/func_in.result +++ b/mysql-test/r/func_in.result @@ -212,12 +212,20 @@ select f2 from t1 where f2 in (1,'z'); f2 0 1 +Warnings: +Warning 1292 Truncated incorrect INTEGER value: 'z' select f1 from t1 where 'z' in (1,f1); f1 z select * from t1 where 'z' in (f2,f1); f1 f2 +1 0 +a 1 z 2 +Warnings: +Warning 1292 Truncated incorrect DOUBLE value: 'z' +Warning 1292 Truncated incorrect DOUBLE value: 'z' +Warning 1292 Truncated incorrect DOUBLE value: 'z' select * from t1 where 1 in (f2,f1); f1 f2 1 0 diff --git a/mysql-test/r/multi_update.result b/mysql-test/r/multi_update.result index 8d56cf6f2d..b4a7aa5cb7 100644 --- a/mysql-test/r/multi_update.result +++ b/mysql-test/r/multi_update.result @@ -480,6 +480,7 @@ create table t1(a int); create table t2(a int); delete from t1,t2 using t1,t2 where t1.a=(select a from t1); ERROR HY000: You can't specify target table 't1' for update in FROM clause +drop table t1, t2; create table t1 ( c char(8) not null ) engine=innodb; insert into t1 values ('0'),('1'),('2'),('3'),('4'),('5'),('6'),('7'),('8'),('9'); insert into t1 values ('A'),('B'),('C'),('D'),('E'),('F'); diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc index 1701af2325..cbf77507b8 100644 --- a/sql/item_cmpfunc.cc +++ b/sql/item_cmpfunc.cc @@ -63,6 +63,27 @@ static void agg_result_type(Item_result *type, Item **items, uint nitems) } +/* + Aggregates result types from the array of items. + + SYNOPSIS: + agg_cmp_type() + type [out] the aggregated type + items array of items to aggregate the type from + nitems number of items in the array + + DESCRIPTION + This function aggregates result types from the array of items. Found type + supposed to be used later for comparison of values of these items. + Aggregation itself is performed by the item_cmp_type() function. + + NOTES + Aggregation rules: + If all items are constants the type will be aggregated from all items. + If there are some non-constant items then only types of non-constant + items will be used for aggregation. +*/ + static void agg_cmp_type(THD *thd, Item_result *type, Item **items, uint nitems) { uint i; @@ -89,6 +110,8 @@ static void agg_cmp_type(THD *thd, Item_result *type, Item **items, uint nitems) } else if (is_const) type[0]= item_cmp_type(type[0], items[i]->result_type()); + else if (field && convert_constant_item(thd, field, &items[i])) + type[0]= INT_RESULT; } } -- 2.30.9