mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
Portability fixes
Fixed bug in end space handle for WHERE text_column="constant"
This commit is contained in:
@ -833,7 +833,8 @@ JOIN::optimize()
|
||||
((group_list && const_tables != tables &&
|
||||
(!simple_group ||
|
||||
!test_if_skip_sort_order(&join_tab[const_tables], group_list,
|
||||
unit->select_limit_cnt, 0))) || select_distinct) &&
|
||||
unit->select_limit_cnt, 0))) ||
|
||||
select_distinct) &&
|
||||
tmp_table_param.quick_group && !procedure)
|
||||
{
|
||||
need_tmp=1; simple_order=simple_group=0; // Force tmp table without sort
|
||||
@ -2163,22 +2164,32 @@ add_key_field(KEY_FIELD **key_fields,uint and_level, COND *cond,
|
||||
number. cmp_type() is checked to allow compare of dates to numbers.
|
||||
eq_func is NEVER true when num_values > 1
|
||||
*/
|
||||
if (!eq_func ||
|
||||
field->result_type() == STRING_RESULT &&
|
||||
(*value)->result_type() != STRING_RESULT &&
|
||||
field->cmp_type() != (*value)->result_type())
|
||||
return;
|
||||
|
||||
/*
|
||||
We can't use indexes if the effective collation
|
||||
of the operation differ from the field collation.
|
||||
*/
|
||||
if (field->result_type() == STRING_RESULT &&
|
||||
(*value)->result_type() == STRING_RESULT &&
|
||||
field->cmp_type() == STRING_RESULT &&
|
||||
((Field_str*)field)->charset() != cond->compare_collation())
|
||||
return;
|
||||
if (!eq_func)
|
||||
return;
|
||||
if (field->result_type() == STRING_RESULT)
|
||||
{
|
||||
if ((*value)->result_type() != STRING_RESULT)
|
||||
{
|
||||
if (field->cmp_type() != (*value)->result_type())
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
We can't use indexes if the effective collation
|
||||
of the operation differ from the field collation.
|
||||
|
||||
We can also not used index on a text column, as the column may
|
||||
contain 'x' 'x\t' 'x ' and 'read_next_same' will stop after
|
||||
'x' when searching for WHERE col='x '
|
||||
*/
|
||||
if (field->cmp_type() == STRING_RESULT &&
|
||||
(((Field_str*)field)->charset() != cond->compare_collation() ||
|
||||
((*value)->type() != Item::NULL_ITEM &&
|
||||
(field->flags & BLOB_FLAG) && !field->binary())))
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
DBUG_ASSERT(num_values == 1);
|
||||
@ -5564,9 +5575,7 @@ bool create_myisam_from_heap(THD *thd, TABLE *table, TMP_TABLE_PARAM *param,
|
||||
table->file->info(HA_STATUS_VARIABLE); /* update table->file->records */
|
||||
new_table.file->start_bulk_insert(table->file->records);
|
||||
#else
|
||||
/*
|
||||
HA_EXTRA_WRITE_CACHE can stay until close, no need to disable it explicitly.
|
||||
*/
|
||||
/* HA_EXTRA_WRITE_CACHE can stay until close, no need to disable it */
|
||||
new_table.file->extra(HA_EXTRA_WRITE_CACHE);
|
||||
#endif
|
||||
|
||||
@ -7234,9 +7243,9 @@ test_if_skip_sort_order(JOIN_TAB *tab,ORDER *order,ha_rows select_limit,
|
||||
keys.merge(table->used_keys);
|
||||
|
||||
/*
|
||||
We are adding here also the index speified in FORCE INDEX clause,
|
||||
We are adding here also the index specified in FORCE INDEX clause,
|
||||
if any.
|
||||
This is to allow users to use index in ORDER BY.
|
||||
This is to allow users to use index in ORDER BY.
|
||||
*/
|
||||
if (table->force_index)
|
||||
keys.merge(table->keys_in_use_for_query);
|
||||
|
Reference in New Issue
Block a user