Below is the list of changes that have just been committed into a local
4.1 repository of jimw. When jimw does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html
ChangeSet
1.2476 05/11/29 11:52:58 jimw@stripped +1 -0
Merge mysql.com:/home/jimw/my/mysql-4.1-14216
into mysql.com:/home/jimw/my/mysql-4.1-clean
sql/item.cc
1.230 05/11/29 11:52:56 jimw@stripped +0 -0
Auto merged
# This is a BitKeeper patch. What follows are the unified diffs for the
# set of deltas contained in the patch. The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User: jimw
# Host: rama.(none)
# Root: /home/jimw/my/mysql-4.1-clean/RESYNC
--- 1.229/sql/item.cc 2005-10-28 18:12:48 -07:00
+++ 1.230/sql/item.cc 2005-11-29 11:52:56 -08:00
@@ -211,16 +211,8 @@
Item *Item::safe_charset_converter(CHARSET_INFO *tocs)
{
- /*
- Allow conversion from and to "binary".
- Don't allow automatic conversion to non-Unicode charsets,
- as it potentially loses data.
- */
- if (collation.collation != &my_charset_bin &&
- tocs != &my_charset_bin &&
- !(tocs->state & MY_CS_UNICODE))
- return NULL; // safe conversion is not possible
- return new Item_func_conv_charset(this, tocs);
+ Item_func_conv_charset *conv= new Item_func_conv_charset(this, tocs, 1);
+ return conv->safe ? conv : NULL;
}
@@ -2863,7 +2855,7 @@
void resolve_const_item(THD *thd, Item **ref, Item *comp_item)
{
Item *item= *ref;
- Item *new_item;
+ Item *new_item= NULL;
if (item->basic_const_item())
return; // Can't be better
Item_result res_type=item_cmp_type(comp_item->result_type(),
@@ -2892,8 +2884,17 @@
new_item= (null_value ? (Item*) new Item_null(name) :
(Item*) new Item_int(name, result, length));
}
- else if (res_type == ROW_RESULT)
+ else if (res_type == ROW_RESULT && item->type() == Item::ROW_ITEM &&
+ comp_item->type() == Item::ROW_ITEM)
{
+ /*
+ Substitute constants only in Item_rows. Don't affect other Items
+ with ROW_RESULT (eg Item_singlerow_subselect).
+
+ For such Items more optimal is to detect if it is constant and replace
+ it with Item_row. This would optimize queries like this:
+ SELECT * FROM t1 WHERE (a,b) = (SELECT a,b FROM t2 LIMIT 1);
+ */
Item_row *item_row= (Item_row*) item;
Item_row *comp_item_row= (Item_row*) comp_item;
uint col;
@@ -2910,7 +2911,7 @@
while (col-- > 0)
resolve_const_item(thd, item_row->addr(col), comp_item_row->el(col));
}
- else
+ else if (res_type == REAL_RESULT)
{ // It must REAL_RESULT
double result=item->val();
uint length=item->max_length,decimals=item->decimals;
| Thread |
|---|
| • bk commit into 4.1 tree (jimw:1.2476) | Jim Winstead | 29 Nov |