summaryrefslogtreecommitdiff
path: root/sql/opt_range.h
diff options
context:
space:
mode:
authorunknown <tim@white.box>2001-06-28 03:06:23 -0400
committerunknown <tim@white.box>2001-06-28 03:06:23 -0400
commit3e6f87ce7b4b3b5cf727485e8a3b4ecf2aadadf8 (patch)
tree8e1c3a62991f2a6d938de086708b15282d727add /sql/opt_range.h
parent237b4bed6046e39a7118b834db6952964712eb7a (diff)
downloadmariadb-git-3e6f87ce7b4b3b5cf727485e8a3b4ecf2aadadf8.tar.gz
Implement ORDER BY DESC optimization, which reads values in descending
order directly from the index instead of using a filesort. mysql-test/mysql-test-run.sh: [ -n $SKIP_TEST ] --> [ -n "$SKIP_TEST" ]; portability fix mysql-test/r/order_by.result: Added test for ORDER BY DESC optimization mysql-test/t/order_by.test: Added test for ORDER BY DESC optimization sql/opt_range.cc: Added QUICK_SELECT_DESC class which implements ORDER BY DESC optimization. sql/opt_range.h: Added QUICK_SELECT_DESC class which implements ORDER BY DESC optimization. sql/sql_select.cc: Added QUICK_SELECT_DESC class which implements ORDER BY DESC optimization. BitKeeper/etc/ignore: Added .gdbinit .vimrc to the ignore list BitKeeper/etc/logging_ok: Logging to logging@openlogging.org accepted
Diffstat (limited to 'sql/opt_range.h')
-rw-r--r--sql/opt_range.h14
1 files changed, 14 insertions, 0 deletions
diff --git a/sql/opt_range.h b/sql/opt_range.h
index 247dd260817..0c8dcf7fed3 100644
--- a/sql/opt_range.h
+++ b/sql/opt_range.h
@@ -80,6 +80,20 @@ public:
bool unique_key_range();
};
+class QUICK_SELECT_DESC: public QUICK_SELECT
+{
+public:
+ QUICK_SELECT_DESC(QUICK_SELECT *q);
+ int get_next();
+private:
+ int cmp_prev(QUICK_RANGE *range);
+ bool range_reads_after_key(QUICK_RANGE *range);
+
+ QUICK_SELECT *quick;
+ List<QUICK_RANGE> rev_ranges;
+ List_iterator<QUICK_RANGE> rev_it;
+};
+
class SQL_SELECT :public Sql_alloc {
public:
QUICK_SELECT *quick; // If quick-select used