Below is the list of changes that have just been committed into a local
4.1 repository of evgen. When evgen 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.2491 06/06/16 23:46:37 evgen@stripped +2 -0
item_strfunc.cc:
Fix for bug#16716 for --ps-protocol mode.
item_cmpfunc.cc:
Fix for a memory allocation/freeing problem in agg_cmp_type() after fix
for bug#16377. Few language corrections.
sql/item_strfunc.cc
1.244 06/06/16 23:42:46 evgen@stripped +2 -1
Fix for bug#16716 for --ps-protocol mode.
sql/item_cmpfunc.cc
1.210 06/06/16 23:41:19 evgen@stripped +11 -21
Fix for a memory allocation/freeing problem in agg_cmp_type(). Few language
corrections.
# 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: evgen
# Host: moonbone.local
# Root: /work/16377-postfix-4.1-opt-mysql
--- 1.209/sql/item_cmpfunc.cc 2006-06-13 19:04:46 +04:00
+++ 1.210/sql/item_cmpfunc.cc 2006-06-16 23:41:19 +04:00
@@ -83,21 +83,21 @@
items will be used for aggregation.
If there are DATE/TIME fields/functions in the list and no string
fields/functions in the list then:
- The INT_RESULT type will be used for aggregation instead of orginal
+ The INT_RESULT type will be used for aggregation instead of original
result type of any DATE/TIME field/function in the list
All constant items in the list will be converted to a DATE/TIME using
found field or result field of found function.
Implementation notes:
- The code is equvalent to:
- 1. Check the list for presense of a STRING field/function.
+ The code is equivalent to:
+ 1. Check the list for presence of a STRING field/function.
Collect the is_const flag.
2. Get a Field* object to use for type coercion
3. Perform type conversion.
1 and 2 are implemented in 2 loops. The first searches for a DATE/TIME
- field/function and checks presense of a STRING field/function.
+ field/function and checks presence of a STRING field/function.
The second loop works only if a DATE/TIME field/function is found.
- It checks presense of a STRING field/function in the rest of the list.
+ It checks presence of a STRING field/function in the rest of the list.
TODO
1) The current implementation can produce false comparison results for
@@ -120,8 +120,9 @@
static void agg_cmp_type(THD *thd, Item_result *type, Item **items, uint nitems)
{
uint i;
- Item::Type res;
- char *buff= NULL;
+ Item::Type res= (Item::Type)0;
+ /* Used only for date/time fields, max_length = 19 */
+ char buff[20];
uchar null_byte;
Field *field= NULL;
@@ -147,28 +148,20 @@
{
field= items[i]->tmp_table_field_from_field_type(0);
if (field)
- buff= alloc_root(thd->mem_root, field->max_length());
- if (!buff || !field)
- {
- if (field)
- delete field;
- if (buff)
- my_free(buff, MYF(MY_WME));
- field= 0;
- }
- else
field->move_field(buff, &null_byte, 0);
break;
}
}
if (field)
{
- /* Check the rest of the list for presense of a string field/function. */
+ /* Check the rest of the list for presence of a string field/function. */
for (i++ ; i < nitems; i++)
{
if (!items[i]->const_item() && items[i]->result_type() ==
STRING_RESULT &&
!items[i]->result_as_longlong())
{
+ if (res == Item::FUNC_ITEM)
+ delete field;
field= 0;
break;
}
@@ -205,10 +198,7 @@
}
if (res == Item::FUNC_ITEM && field)
- {
delete field;
- my_free(buff, MYF(MY_WME));
- }
}
static void my_coll_agg_error(DTCollation &c1, DTCollation &c2,
--- 1.243/sql/item_strfunc.cc 2006-06-15 14:57:52 +04:00
+++ 1.244/sql/item_strfunc.cc 2006-06-16 23:42:46 +04:00
@@ -274,7 +274,8 @@
if (!(res=args[0]->val_str(str)))
goto null;
use_as_buff= &tmp_value;
- is_const= args[0]->const_item();
+ /* Item_subselect in --ps-protocol mode will state it as a non-const */
+ is_const= args[0]->const_item() || !args[0]->used_tables();
for (i=1 ; i < arg_count ; i++)
{
if (res->length() == 0)
| Thread |
|---|
| • bk commit into 4.1 tree (evgen:1.2491) BUG#16377 | eugene | 17 Jun |