summaryrefslogtreecommitdiff
path: root/sql/opt_range.cc
diff options
context:
space:
mode:
authorunknown <heikki@hundin.mysql.fi>2002-09-12 01:57:45 +0300
committerunknown <heikki@hundin.mysql.fi>2002-09-12 01:57:45 +0300
commitf3d5cb8b6a6b0c2c1a5a935ded5720c67e5a7233 (patch)
treea6946d961bf273b9923d7f26100425f3c2fa6b88 /sql/opt_range.cc
parent36cb35932f005f5081668895fa796eb0de41bbd3 (diff)
downloadmariadb-git-f3d5cb8b6a6b0c2c1a5a935ded5720c67e5a7233.tar.gz
opt_range.cc:
Fix the crash in InnoDB when WHERE primarykey < x ORDER BY primarykey is used sql/opt_range.cc: Fix the crash in InnoDB when WHERE primarykey < x ORDER BY primarykey is used
Diffstat (limited to 'sql/opt_range.cc')
-rw-r--r--sql/opt_range.cc8
1 files changed, 7 insertions, 1 deletions
diff --git a/sql/opt_range.cc b/sql/opt_range.cc
index 4d8290628a7..181d97ceacc 100644
--- a/sql/opt_range.cc
+++ b/sql/opt_range.cc
@@ -2623,13 +2623,19 @@ int QUICK_SELECT_DESC::get_next()
}
else
{
+ /* Heikki changed Sept 11, 2002: since InnoDB does not store the cursor
+ position if READ_KEY_EXACT is used to a primary key with all
+ key columns specified, we must use below HA_READ_KEY_OR_NEXT,
+ so that InnoDB stores the cursor position and is able to move
+ the cursor one step backward after the search. */
+
DBUG_ASSERT(range->flag & NEAR_MAX || range_reads_after_key(range));
/* Note: even if max_key is only a prefix, HA_READ_AFTER_KEY will
* do the right thing - go past all keys which match the prefix */
result=file->index_read(record, (byte*) range->max_key,
range->max_length,
((range->flag & NEAR_MAX) ?
- HA_READ_KEY_EXACT : HA_READ_AFTER_KEY));
+ HA_READ_KEY_OR_NEXT : HA_READ_AFTER_KEY));
result = file->index_prev(record);
}
if (result)