From 87a43166c9f87a86bf070518ddadb943b6a0a19e Mon Sep 17 00:00:00 2001 From: "heikki@hundin.mysql.fi" <> Date: Thu, 12 Sep 2002 01:57:45 +0300 Subject: [PATCH] opt_range.cc: Fix the crash in InnoDB when WHERE primarykey < x ORDER BY primarykey is used --- sql/opt_range.cc | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) 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)