mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Merge branch '10.1' into 10.2
This commit is contained in:
@ -449,7 +449,7 @@ bool handle_select(THD *thd, LEX *lex, select_result *result,
|
||||
this field from inner subqueries.
|
||||
|
||||
@return Status
|
||||
@retval true An error occured.
|
||||
@retval true An error occurred.
|
||||
@retval false OK.
|
||||
*/
|
||||
|
||||
@ -12866,7 +12866,7 @@ bool Item_func_eq::check_equality(THD *thd, COND_EQUAL *cond_equal,
|
||||
equality predicates that is equivalent to the conjunction.
|
||||
Thus, =(a1,a2,a3) can substitute for ((a1=a3) AND (a2=a3) AND (a2=a1)) as
|
||||
it is equivalent to ((a1=a2) AND (a2=a3)).
|
||||
The function always makes a substitution of all equality predicates occured
|
||||
The function always makes a substitution of all equality predicates occurred
|
||||
in a conjuction for a minimal set of multiple equality predicates.
|
||||
This set can be considered as a canonical representation of the
|
||||
sub-conjunction of the equality predicates.
|
||||
@ -15641,8 +15641,6 @@ const_expression_in_where(COND *cond, Item *comp_item, Field *comp_field,
|
||||
the record in the original table.
|
||||
If item == NULL then fill_record() will update
|
||||
the temporary table
|
||||
@param convert_blob_length If >0 create a varstring(convert_blob_length)
|
||||
field instead of blob.
|
||||
|
||||
@retval
|
||||
NULL on error
|
||||
@ -15652,23 +15650,12 @@ const_expression_in_where(COND *cond, Item *comp_item, Field *comp_field,
|
||||
|
||||
Field *create_tmp_field_from_field(THD *thd, Field *org_field,
|
||||
const char *name, TABLE *table,
|
||||
Item_field *item, uint convert_blob_length)
|
||||
Item_field *item)
|
||||
{
|
||||
Field *new_field;
|
||||
|
||||
/*
|
||||
Make sure that the blob fits into a Field_varstring which has
|
||||
2-byte lenght.
|
||||
*/
|
||||
if (convert_blob_length && convert_blob_length <= Field_varstring::MAX_SIZE &&
|
||||
(org_field->flags & BLOB_FLAG))
|
||||
new_field= new Field_varstring(convert_blob_length,
|
||||
org_field->maybe_null(),
|
||||
org_field->field_name, table->s,
|
||||
org_field->charset());
|
||||
else
|
||||
new_field= org_field->make_new_field(thd->mem_root, table,
|
||||
table == org_field->table);
|
||||
new_field= org_field->make_new_field(thd->mem_root, table,
|
||||
table == org_field->table);
|
||||
if (new_field)
|
||||
{
|
||||
new_field->init(table);
|
||||
@ -15695,9 +15682,7 @@ Field *create_tmp_field_from_field(THD *thd, Field *org_field,
|
||||
}
|
||||
|
||||
|
||||
Field *Item::create_tmp_field(bool group, TABLE *table,
|
||||
uint convert_blob_length,
|
||||
uint convert_int_length)
|
||||
Field *Item::create_tmp_field(bool group, TABLE *table, uint convert_int_length)
|
||||
{
|
||||
Field *UNINIT_VAR(new_field);
|
||||
MEM_ROOT *mem_root= table->in_use->mem_root;
|
||||
@ -15731,16 +15716,6 @@ Field *Item::create_tmp_field(bool group, TABLE *table,
|
||||
*/
|
||||
if (field_type() == MYSQL_TYPE_GEOMETRY)
|
||||
new_field= tmp_table_field_from_field_type(table, true, false);
|
||||
/*
|
||||
Make sure that the blob fits into a Field_varstring which has
|
||||
2-byte lenght.
|
||||
*/
|
||||
else if (max_length / collation.collation->mbmaxlen > 255 &&
|
||||
convert_blob_length <= Field_varstring::MAX_SIZE &&
|
||||
convert_blob_length)
|
||||
new_field= new (mem_root)
|
||||
Field_varstring(convert_blob_length, maybe_null,
|
||||
name, table->s, collation.collation);
|
||||
else
|
||||
new_field= make_string_field(table);
|
||||
new_field->set_derivation(collation.derivation);
|
||||
@ -15786,12 +15761,11 @@ Field *Item::create_tmp_field(bool group, TABLE *table,
|
||||
*/
|
||||
|
||||
static Field *create_tmp_field_from_item(THD *thd, Item *item, TABLE *table,
|
||||
Item ***copy_func, bool modify_item,
|
||||
uint convert_blob_length)
|
||||
Item ***copy_func, bool modify_item)
|
||||
{
|
||||
Field *UNINIT_VAR(new_field);
|
||||
DBUG_ASSERT(thd == table->in_use);
|
||||
new_field= item->Item::create_tmp_field(false, table, convert_blob_length);
|
||||
new_field= item->Item::create_tmp_field(false, table);
|
||||
|
||||
if (copy_func && item->real_item()->is_result_field())
|
||||
*((*copy_func)++) = item; // Save for copy_funcs
|
||||
@ -15854,8 +15828,6 @@ Field *Item::create_field_for_schema(THD *thd, TABLE *table)
|
||||
the record in the original table.
|
||||
If modify_item is 0 then fill_record() will update
|
||||
the temporary table
|
||||
@param convert_blob_length If >0 create a varstring(convert_blob_length)
|
||||
field instead of blob.
|
||||
|
||||
@retval
|
||||
0 on error
|
||||
@ -15868,8 +15840,7 @@ Field *create_tmp_field(THD *thd, TABLE *table,Item *item, Item::Type type,
|
||||
Field **default_field,
|
||||
bool group, bool modify_item,
|
||||
bool table_cant_handle_bit_fields,
|
||||
bool make_copy_field,
|
||||
uint convert_blob_length)
|
||||
bool make_copy_field)
|
||||
{
|
||||
Field *result;
|
||||
Item::Type orig_type= type;
|
||||
@ -15886,7 +15857,7 @@ Field *create_tmp_field(THD *thd, TABLE *table,Item *item, Item::Type type,
|
||||
switch (type) {
|
||||
case Item::SUM_FUNC_ITEM:
|
||||
{
|
||||
result= item->create_tmp_field(group, table, convert_blob_length);
|
||||
result= item->create_tmp_field(group, table);
|
||||
if (!result)
|
||||
my_error(ER_OUT_OF_RESOURCES, MYF(ME_FATALERROR));
|
||||
return result;
|
||||
@ -15922,7 +15893,7 @@ Field *create_tmp_field(THD *thd, TABLE *table,Item *item, Item::Type type,
|
||||
item->maybe_null= orig_item->maybe_null;
|
||||
}
|
||||
result= create_tmp_field_from_item(thd, item, table, NULL,
|
||||
modify_item, convert_blob_length);
|
||||
modify_item);
|
||||
*from_field= field->field;
|
||||
if (result && modify_item)
|
||||
field->result_field= result;
|
||||
@ -15934,7 +15905,7 @@ Field *create_tmp_field(THD *thd, TABLE *table,Item *item, Item::Type type,
|
||||
{
|
||||
*from_field= field->field;
|
||||
result= create_tmp_field_from_item(thd, item, table, copy_func,
|
||||
modify_item, convert_blob_length);
|
||||
modify_item);
|
||||
if (result && modify_item)
|
||||
field->result_field= result;
|
||||
}
|
||||
@ -15944,8 +15915,7 @@ Field *create_tmp_field(THD *thd, TABLE *table,Item *item, Item::Type type,
|
||||
item->name,
|
||||
table,
|
||||
modify_item ? field :
|
||||
NULL,
|
||||
convert_blob_length);
|
||||
NULL);
|
||||
if (orig_type == Item::REF_ITEM && orig_modify)
|
||||
((Item_ref*)orig_item)->set_result_field(result);
|
||||
/*
|
||||
@ -15979,8 +15949,7 @@ Field *create_tmp_field(THD *thd, TABLE *table,Item *item, Item::Type type,
|
||||
sp_result_field,
|
||||
item_func_sp->name,
|
||||
table,
|
||||
NULL,
|
||||
convert_blob_length);
|
||||
NULL);
|
||||
|
||||
if (modify_item)
|
||||
item->set_result_field(result_field);
|
||||
@ -16012,7 +15981,7 @@ Field *create_tmp_field(THD *thd, TABLE *table,Item *item, Item::Type type,
|
||||
}
|
||||
return create_tmp_field_from_item(thd, item, table,
|
||||
(make_copy_field ? 0 : copy_func),
|
||||
modify_item, convert_blob_length);
|
||||
modify_item);
|
||||
case Item::TYPE_HOLDER:
|
||||
result= ((Item_type_holder *)item)->make_field_by_type(table);
|
||||
result->set_derivation(item->collation.derivation);
|
||||
@ -16322,8 +16291,7 @@ create_tmp_table(THD *thd, TMP_TABLE_PARAM *param, List<Item> &fields,
|
||||
create_tmp_field(thd, table, arg, arg->type(), ©_func,
|
||||
tmp_from_field, &default_field[fieldnr],
|
||||
group != 0,not_all_columns,
|
||||
distinct, 0,
|
||||
param->convert_blob_length);
|
||||
distinct, false);
|
||||
if (!new_field)
|
||||
goto err; // Should be OOM
|
||||
tmp_from_field++;
|
||||
@ -16393,8 +16361,7 @@ create_tmp_table(THD *thd, TMP_TABLE_PARAM *param, List<Item> &fields,
|
||||
to be usable in this case too.
|
||||
*/
|
||||
item->marker == 4 || param->bit_fields_as_long,
|
||||
force_copy_fields,
|
||||
param->convert_blob_length);
|
||||
force_copy_fields);
|
||||
|
||||
if (!new_field)
|
||||
{
|
||||
@ -21775,7 +21742,11 @@ find_order_in_list(THD *thd, Item **ref_pointer_array, TABLE_LIST *tables,
|
||||
*/
|
||||
if (order_item->type() == Item::INT_ITEM && order_item->basic_const_item())
|
||||
{ /* Order by position */
|
||||
uint count= (uint) order_item->val_int();
|
||||
uint count;
|
||||
if (order->counter_used)
|
||||
count= order->counter; // counter was once resolved
|
||||
else
|
||||
count= (uint) order_item->val_int();
|
||||
if (!count || count > fields.elements)
|
||||
{
|
||||
my_error(ER_BAD_FIELD_ERROR, MYF(0),
|
||||
@ -21792,7 +21763,7 @@ find_order_in_list(THD *thd, Item **ref_pointer_array, TABLE_LIST *tables,
|
||||
select_item= find_item_in_list(order_item, fields, &counter,
|
||||
REPORT_EXCEPT_NOT_FOUND, &resolution);
|
||||
if (!select_item)
|
||||
return TRUE; /* The item is not unique, or some other error occured. */
|
||||
return TRUE; /* The item is not unique, or some other error occurred. */
|
||||
|
||||
|
||||
/* Check whether the resolved field is not ambiguos. */
|
||||
@ -25122,7 +25093,7 @@ void JOIN::restore_query_plan(Join_plan_state *restore_from)
|
||||
|
||||
@retval REOPT_NEW_PLAN there is a new plan.
|
||||
@retval REOPT_OLD_PLAN no new improved plan was produced, use the old one.
|
||||
@retval REOPT_ERROR an irrecovarable error occured during reoptimization.
|
||||
@retval REOPT_ERROR an irrecovarable error occurred during reoptimization.
|
||||
*/
|
||||
|
||||
JOIN::enum_reopt_result
|
||||
|
Reference in New Issue
Block a user