diff options
author | mikef@nslinux.bedford.progress.com <> | 2001-03-21 15:34:16 -0500 |
---|---|---|
committer | mikef@nslinux.bedford.progress.com <> | 2001-03-21 15:34:16 -0500 |
commit | d145a6b97e3306abf6ed36725748f255dcfa4ba5 (patch) | |
tree | 5306fccfc0c0c42aabf0e2dd6bf883cdecc3ed03 /sql/opt_range.cc | |
parent | 3c48448042457edca9c7559d9a6bed24485ddc86 (diff) | |
download | mariadb-git-d145a6b97e3306abf6ed36725748f255dcfa4ba5.tar.gz |
Add support for Gemini table handler, Monty has checked and approved
Fix bug when read return error
Diffstat (limited to 'sql/opt_range.cc')
-rw-r--r-- | sql/opt_range.cc | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/sql/opt_range.cc b/sql/opt_range.cc index 92dca25c3c5..4c1a0db72b7 100644 --- a/sql/opt_range.cc +++ b/sql/opt_range.cc @@ -2400,15 +2400,22 @@ int QUICK_SELECT::get_next() for (;;) { + int result; if (range) { // Already read through key - int result=((range->flag & EQ_RANGE) ? - file->index_next_same(record, (byte*) range->min_key, - range->min_length) : - file->index_next(record)); - if (!result && !cmp_next(*it.ref())) - DBUG_RETURN(0); + result=((range->flag & EQ_RANGE) ? + file->index_next_same(record, (byte*) range->min_key, + range->min_length) : + file->index_next(record)); + if (!result) + { + if (!cmp_next(*it.ref())) + DBUG_RETURN(0); + } + else if (result != HA_ERR_END_OF_FILE) + DBUG_RETURN(result); } + if (!(range=it++)) DBUG_RETURN(HA_ERR_END_OF_FILE); // All ranges used if (range->flag & NO_MIN_RANGE) // Read first record @@ -2421,15 +2428,17 @@ int QUICK_SELECT::get_next() range=0; // To next range continue; } - if (file->index_read(record,(byte*) range->min_key, + if ((result = file->index_read(record,(byte*) range->min_key, range->min_length, ((range->flag & NEAR_MIN) ? HA_READ_AFTER_KEY: (range->flag & EQ_RANGE) ? HA_READ_KEY_EXACT : - HA_READ_KEY_OR_NEXT))) + HA_READ_KEY_OR_NEXT)))) { + if (result != HA_ERR_KEY_NOT_FOUND) + DBUG_RETURN(result); range=0; // Not found, to next range continue; } |