mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Manually merged
This commit is contained in:
@ -651,7 +651,8 @@ static bool matching_cond(bool max_fl, TABLE_REF *ref, KEY *keyinfo,
|
||||
}
|
||||
else
|
||||
{
|
||||
store_val_in_field(part->field, args[between && max_fl ? 2 : 1]);
|
||||
store_val_in_field(part->field, args[between && max_fl ? 2 : 1],
|
||||
CHECK_FIELD_IGNORE);
|
||||
if (part->null_bit)
|
||||
*key_ptr++= (byte) test(part->field->is_null());
|
||||
part->field->get_key_image((char*) key_ptr, part->length, Field::itRAW);
|
||||
@ -706,6 +707,8 @@ static bool matching_cond(bool max_fl, TABLE_REF *ref, KEY *keyinfo,
|
||||
field BETWEEN const1 AND const2
|
||||
3. all references to the columns from the same table as column field
|
||||
occur only in conjucts mentioned above.
|
||||
4. each of k first components the index is not partial, i.e. is not
|
||||
defined on a fixed length proper prefix of the field.
|
||||
|
||||
If such an index exists the function through the ref parameter
|
||||
returns the key value to find max/min for the field using the index,
|
||||
@ -715,8 +718,8 @@ static bool matching_cond(bool max_fl, TABLE_REF *ref, KEY *keyinfo,
|
||||
of the whole search key)
|
||||
|
||||
NOTE
|
||||
This function may set table->key_read to 1, which must be reset after
|
||||
index is used! (This can only happen when function returns 1)
|
||||
This function may set table->key_read to 1, which must be reset after
|
||||
index is used! (This can only happen when function returns 1)
|
||||
|
||||
RETURN
|
||||
0 Index can not be used to optimize MIN(field)/MAX(field)
|
||||
@ -750,6 +753,12 @@ static bool find_key_for_maxmin(bool max_fl, TABLE_REF *ref,
|
||||
if (!(table->file->index_flags(idx, jdx, 0) & HA_READ_ORDER))
|
||||
return 0;
|
||||
|
||||
/* Check whether the index component is partial */
|
||||
Field *part_field= table->field[part->fieldnr-1];
|
||||
if ((part_field->flags & BLOB_FLAG) ||
|
||||
part->length < part_field->key_length())
|
||||
break;
|
||||
|
||||
if (field->eq(part->field))
|
||||
{
|
||||
ref->key= idx;
|
||||
|
Reference in New Issue
Block a user