mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
Manually merged
configure.in: Auto merged client/mysqlbinlog.cc: Auto merged mysql-test/mysql-test-run.pl: Auto merged mysql-test/r/archive.result: Auto merged mysql-test/r/auto_increment.result: Auto merged mysql-test/r/cast.result: Auto merged mysql-test/r/ctype_utf8.result: Auto merged mysql-test/r/func_group.result: Auto merged mysql-test/r/func_str.result: Auto merged mysql-test/r/func_time.result: Auto merged mysql-test/r/multi_update.result: Auto merged mysql-test/r/ndb_lock.result: Auto merged mysql-test/r/replace.result: Auto merged mysql-test/r/union.result: Auto merged mysql-test/t/archive.test: Auto merged mysql-test/t/auto_increment.test: Auto merged mysql-test/t/delayed.test: Auto merged mysql-test/t/func_time.test: Auto merged mysql-test/t/multi_update.test: Auto merged mysql-test/t/ndb_lock.test: Auto merged mysql-test/t/select.test: Auto merged sql/field.cc: Auto merged sql/ha_ndbcluster.cc: Auto merged sql/item.h: Auto merged sql/item_cmpfunc.h: Auto merged sql/item_func.cc: Auto merged sql/item_strfunc.cc: Auto merged sql/item_timefunc.cc: Auto merged sql/opt_range.cc: Auto merged sql/opt_sum.cc: Auto merged sql/sql_base.cc: Auto merged sql/sql_class.cc: Auto merged sql/sql_class.h: Auto merged sql/sql_insert.cc: Auto merged sql/sql_lex.cc: Auto merged sql/sql_lex.h: Auto merged sql/sql_parse.cc: Auto merged sql/sql_select.cc: Auto merged sql/sql_select.h: Auto merged sql/sql_yacc.yy: Auto merged sql/structs.h: Auto merged storage/archive/ha_archive.cc: Auto merged tests/mysql_client_test.c: Auto 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