diff options
author | unknown <serg@serg.mysql.com> | 2000-10-07 13:59:47 +0200 |
---|---|---|
committer | unknown <serg@serg.mysql.com> | 2000-10-07 13:59:47 +0200 |
commit | c286021a376e4111a63d21b653232f80993f201b (patch) | |
tree | 018ca6f78a4db5409c547e761090d77c1b0422dd | |
parent | 47d38f680b5ec271a5eb88577c4c343c56db2740 (diff) | |
download | mariadb-git-c286021a376e4111a63d21b653232f80993f201b.tar.gz |
ORDER BY works with FULLTEXT keys
-rw-r--r-- | sql/Makefile.am | 4 | ||||
-rw-r--r-- | sql/filesort.cc | 16 | ||||
-rw-r--r-- | sql/opt_range.cc | 6 | ||||
-rw-r--r-- | sql/opt_range.h | 10 | ||||
-rw-r--r-- | sql/sql_select.cc | 7 |
5 files changed, 24 insertions, 19 deletions
diff --git a/sql/Makefile.am b/sql/Makefile.am index 20208b10da5..72a8643bd41 100644 --- a/sql/Makefile.am +++ b/sql/Makefile.am @@ -45,7 +45,7 @@ noinst_HEADERS = item.h item_func.h item_sum.h item_cmpfunc.h \ sql_map.h sql_string.h unireg.h \ field.h handler.h ha_isammrg.h ha_isam.h ha_myisammrg.h\ ha_heap.h ha_myisam.h ha_berkeley.h\ - opt_range.h \ + opt_range.h opt_ft.h \ sql_select.h structs.h table.h sql_udf.h hash_filo.h\ lex.h lex_symbol.h sql_acl.h sql_crypt.h md5.h \ log_event.h mini_client.h sql_repl.h @@ -62,7 +62,7 @@ mysqld_SOURCES = sql_lex.cc \ sql_update.cc sql_delete.cc \ procedure.cc item_uniq.cc sql_test.cc \ log.cc init.cc derror.cc sql_acl.cc unireg.cc \ - time.cc opt_range.cc opt_sum.cc \ + time.cc opt_range.cc opt_sum.cc opt_ft.cc \ records.cc filesort.cc handler.cc \ ha_isam.cc ha_isammrg.cc ha_heap.cc \ ha_myisam.cc ha_myisammrg.cc ha_berkeley.cc \ diff --git a/sql/filesort.cc b/sql/filesort.cc index 96ce57fc683..ad17cb6aa6d 100644 --- a/sql/filesort.cc +++ b/sql/filesort.cc @@ -1,15 +1,15 @@ /* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB - + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ @@ -115,10 +115,10 @@ ha_rows filesort(TABLE **table, SORT_FIELD *sortorder, uint s_length, param.ref_length= table[0]->file->ref_length; param.sort_length=sortlength(sortorder,s_length)+ param.ref_length; param.max_rows= max_rows; - + if (select && select->quick) { - statistic_increment(filesort_range_count, &LOCK_status); + statistic_increment(filesort_range_count, &LOCK_status); } else { @@ -336,6 +336,10 @@ static ha_rows find_all_keys(SORTPARAM *param, SQL_SELECT *select, file->extra(HA_EXTRA_CACHE); /* Quicker reads */ } + if (quick_select) + error=select->quick->init(); + + if (!error) for (;;) { if (quick_select) @@ -369,7 +373,7 @@ static ha_rows find_all_keys(SORTPARAM *param, SQL_SELECT *select, record+=sort_form->db_record_offset; } else - file->position(sort_form->record[0]); + file->position(sort_form->record[0]); } if (error && error != HA_ERR_RECORD_DELETED) break; diff --git a/sql/opt_range.cc b/sql/opt_range.cc index 0ba5bd0cf8f..6ff74b436aa 100644 --- a/sql/opt_range.cc +++ b/sql/opt_range.cc @@ -19,11 +19,11 @@ Fix that MAYBE_KEY are stored in the tree so that we can detect use of full hash keys for queries like: - select s.id, kws.keyword_id from sites as s,kws where s.id=kws.site_id and kws.keyword_id in (204,205); - + select s.id, kws.keyword_id from sites as s,kws where s.id=kws.site_id and kws.keyword_id in (204,205); + */ - + #ifdef __GNUC__ #pragma implementation // gcc: Class implementation diff --git a/sql/opt_range.h b/sql/opt_range.h index 06775874494..8e3bb6c83bf 100644 --- a/sql/opt_range.h +++ b/sql/opt_range.h @@ -1,15 +1,15 @@ /* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB - + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ @@ -73,12 +73,12 @@ public: QUICK_SELECT(TABLE *table,uint index_arg,bool no_alloc=0); ~QUICK_SELECT(); void reset(void) { next=0; it.rewind(); } - int get_next(); + virtual int init() { return 0; } + virtual int get_next(); int cmp_next(QUICK_RANGE *range); bool unique_key_range(); }; - class SQL_SELECT :public Sql_alloc { public: QUICK_SELECT *quick; // If quick-select used diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 450efb84e5d..32b0def43da 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -23,6 +23,7 @@ #include "mysql_priv.h" #include "sql_select.h" +#include "opt_ft.h" #include <m_ctype.h> #include <hash.h> #include <ft_global.h> @@ -4357,7 +4358,7 @@ join_ft_read_first(JOIN_TAB *tab) #if 0 if (cp_buffer_from_ref(&tab->ref)) // as ft-key doesn't use store_key's - return -1; + return -1; // see also FT_SELECT::init() #endif if ((error=table->file->ft_init(tab->ref.key, tab->ref.key_buff, @@ -5052,13 +5053,13 @@ create_sort_index(JOIN_TAB *tab,ORDER *order,ha_rows select_limit) } } else - if (tab->type != JT_FT) /* Beware! SerG */ +// if (tab->type != JT_FT) /* Beware! SerG */ { /* We have a ref on a const; Change this to a range that filesort can use. */ - if (!(select->quick=get_quick_select_for_ref(table, &tab->ref))) + if (!(select->quick=get_ft_or_quick_select_for_ref(table, tab))) goto err; } } |