mirror of
https://github.com/MariaDB/server.git
synced 2025-12-24 11:21:21 +03:00
Merge
sql/ha_ndbcluster.cc: Auto merged sql/handler.cc: Auto merged sql/handler.h: Auto merged sql/sql_table.cc: Auto merged sql/ha_ndbcluster.h: SCCS merged
This commit is contained in:
@@ -1213,7 +1213,7 @@ int handler::index_next_same(byte *buf, const byte *key, uint keylen)
|
||||
int error;
|
||||
if (!(error=index_next(buf)))
|
||||
{
|
||||
if (key_cmp(table, key, active_index, keylen))
|
||||
if (key_cmp_if_same(table, key, active_index, keylen))
|
||||
{
|
||||
table->status=STATUS_NOT_FOUND;
|
||||
error=HA_ERR_END_OF_FILE;
|
||||
@@ -1417,6 +1417,7 @@ int ha_discover(const char* dbname, const char* name,
|
||||
read_range_first()
|
||||
start_key Start key. Is 0 if no min range
|
||||
end_key End key. Is 0 if no max range
|
||||
eq_range_arg Set to 1 if start_key == end_key
|
||||
sorted Set to 1 if result should be sorted per key
|
||||
|
||||
NOTES
|
||||
@@ -1430,11 +1431,12 @@ int ha_discover(const char* dbname, const char* name,
|
||||
|
||||
int handler::read_range_first(const key_range *start_key,
|
||||
const key_range *end_key,
|
||||
bool sorted)
|
||||
bool eq_range_arg, bool sorted)
|
||||
{
|
||||
int result;
|
||||
DBUG_ENTER("handler::read_range_first");
|
||||
|
||||
eq_range= eq_range_arg;
|
||||
end_range= 0;
|
||||
if (end_key)
|
||||
{
|
||||
@@ -1445,7 +1447,6 @@ int handler::read_range_first(const key_range *start_key,
|
||||
}
|
||||
range_key_part= table->key_info[active_index].key_part;
|
||||
|
||||
|
||||
if (!start_key) // Read first record
|
||||
result= index_first(table->record[0]);
|
||||
else
|
||||
@@ -1467,7 +1468,6 @@ int handler::read_range_first(const key_range *start_key,
|
||||
|
||||
SYNOPSIS
|
||||
read_range_next()
|
||||
eq_range Set to 1 if start_key == end_key
|
||||
|
||||
NOTES
|
||||
Record is read into table->record[0]
|
||||
@@ -1478,17 +1478,19 @@ int handler::read_range_first(const key_range *start_key,
|
||||
# Error code
|
||||
*/
|
||||
|
||||
int handler::read_range_next(bool eq_range)
|
||||
int handler::read_range_next()
|
||||
{
|
||||
int result;
|
||||
DBUG_ENTER("handler::read_range_next");
|
||||
|
||||
if (eq_range)
|
||||
result= index_next_same(table->record[0],
|
||||
end_range->key,
|
||||
end_range->length);
|
||||
else
|
||||
result= index_next(table->record[0]);
|
||||
{
|
||||
/* We trust that index_next_same always gives a row in range */
|
||||
DBUG_RETURN(index_next_same(table->record[0],
|
||||
end_range->key,
|
||||
end_range->length));
|
||||
}
|
||||
result= index_next(table->record[0]);
|
||||
if (result)
|
||||
DBUG_RETURN(result);
|
||||
DBUG_RETURN(compare_key(end_range) <= 0 ? 0 : HA_ERR_END_OF_FILE);
|
||||
@@ -1496,16 +1498,18 @@ int handler::read_range_next(bool eq_range)
|
||||
|
||||
|
||||
/*
|
||||
Compare if found key is over max-value
|
||||
Compare if found key (in row) is over max-value
|
||||
|
||||
SYNOPSIS
|
||||
compare_key
|
||||
range key to compare to row
|
||||
range range to compare to row. May be 0 for no range
|
||||
|
||||
NOTES
|
||||
For this to work, the row must be stored in table->record[0]
|
||||
See key.cc::key_cmp() for details
|
||||
|
||||
RETURN
|
||||
The return value is SIGN(key_in_row - range_key):
|
||||
|
||||
0 Key is equal to range or 'range' == 0 (no range)
|
||||
-1 Key is less than range
|
||||
1 Key is larger than range
|
||||
@@ -1513,37 +1517,11 @@ int handler::read_range_next(bool eq_range)
|
||||
|
||||
int handler::compare_key(key_range *range)
|
||||
{
|
||||
KEY_PART_INFO *key_part= range_key_part;
|
||||
uint store_length;
|
||||
|
||||
int cmp;
|
||||
if (!range)
|
||||
return 0; // No max range
|
||||
|
||||
for (const char *key= (const char*) range->key, *end=key+range->length;
|
||||
key < end;
|
||||
key+= store_length, key_part++)
|
||||
{
|
||||
int cmp;
|
||||
store_length= key_part->store_length;
|
||||
if (key_part->null_bit)
|
||||
{
|
||||
if (*key)
|
||||
{
|
||||
if (!key_part->field->is_null())
|
||||
return 1;
|
||||
continue;
|
||||
}
|
||||
else if (key_part->field->is_null())
|
||||
return 0;
|
||||
key++; // Skip null byte
|
||||
store_length--;
|
||||
}
|
||||
if ((cmp=key_part->field->key_cmp((byte*) key, key_part->length)) < 0)
|
||||
return -1;
|
||||
if (cmp > 0)
|
||||
return 1;
|
||||
}
|
||||
return key_compare_result_on_equal;
|
||||
cmp= key_cmp(range_key_part, range->key, range->length);
|
||||
if (!cmp)
|
||||
cmp= key_compare_result_on_equal;
|
||||
return cmp;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user