mariadb/myisam/ft_search.c
unknown 8dd2e5b8d9 Added all changes from old 4.0 version:
PSTACK, libmysqld and MySQL filesystem
UPDATE ... ORDER BY
DELETE ... ORDER BY
New faster fulltext handling
Faster compressed keys



Makefile.am:
  Added support for pstack and libmysqld_dir
acconfig.h:
  MySQL filesystem and PSTACK
acinclude.m4:
  MySQL File system
client/mysql.cc:
  Support for --xml
configure.in:
  Pstack, MySQL FS and libmysqld_dir
include/ft_global.h:
  Faster fulltext
include/my_pthread.h:
  Made c++ safe
include/myisam.h:
  Update for faster fulltext
include/mysql_com.h:
  new my_net_read()
include/violite.h:
  libmysqld
libmysql/net.c:
  New protocol that supports big packets
myisam/Makefile.am:
  Faster fulltext
myisam/ft_parser.c:
  Faster fulltext
myisam/ft_search.c:
  Faster fulltext
myisam/ft_update.c:
  Faster fulltext
myisam/ftdefs.h:
  Faster fulltext
myisam/mi_check.c:
  Faster fulltext
myisam/mi_open.c:
  Faster compressed keys
myisam/mi_search.c:
  Faster compressed keys
myisam/mi_update.c:
  Faster compressed keys
myisam/myisamdef.h:
  Faster compressed keys
myisam/sort.c:
  Faster compressed keys
mysql-test/mysql-test-run.sh:
  --skip-innobase and --skip-bdb
sql/ChangeLog:
  Changelog
sql/Makefile.am:
  PSTACK
sql/mysql_priv.h:
  New ORDER BY options and libmysqld
sql/mysqld.cc:
  PSTACK
sql/net_serv.cc:
  New protocol that supports big packets
sql/share/estonian/errmsg.txt:
  New error messages
sql/sql_base.cc:
  Better list_open_tabels
sql/sql_delete.cc:
  ORDER BY for delete
sql/sql_lex.cc:
  Added language convertation of all strings
sql/sql_parse.cc:
  Changes for libmysqld
  Use new ORDER BY options
sql/sql_show.cc:
  Character set convertations
  Use new list_open_tables function.
sql/sql_update.cc:
  UPDATE ... ORDER BY
sql/sql_yacc.yy:
  Clean up symbol definitions
  DELETE .. ORDER BY
  UPDATE .. ORDER BY
sql/table.h:
  new OPEN_TABLE_LIST structure
BitKeeper/etc/logging_ok:
  Logging to logging@openlogging.org accepted
2001-04-11 13:04:03 +02:00

74 lines
2.1 KiB
C

/* 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 */
/* Written by Sergei A. Golubchik, who has a shared copyright to this code */
#include "ftdefs.h"
/* queries myisam and returns list of documents matched */
static int FT_DOC_cmp(FT_DOC *a, FT_DOC *b)
{
return sgn(b->weight - a->weight);
}
FT_DOCLIST *ft_init_search(void *info, uint keynr, byte *query,
uint query_len, my_bool presort)
{
FT_DOCLIST *dlist;
my_off_t saved_lastpos=((MI_INFO *)info)->lastpos;
/* black magic ON */
if ((int) (keynr = _mi_check_index((MI_INFO *)info,keynr)) < 0)
return NULL;
if (_mi_readinfo((MI_INFO *)info,F_RDLCK,1))
return NULL;
/* black magic OFF */
if (is_boolean(query, query_len))
dlist=ft_boolean_search(info,keynr,query,query_len);
else
dlist=ft_nlq_search(info,keynr,query,query_len);
if(dlist && presort)
{
qsort(dlist->doc, dlist->ndocs, sizeof(FT_DOC), (qsort_cmp)&FT_DOC_cmp);
}
((MI_INFO *)info)->lastpos=saved_lastpos;
return dlist;
}
int ft_read_next(FT_DOCLIST *handler, char *record)
{
MI_INFO *info=handler->info;
if (++handler->curdoc >= handler->ndocs)
{
--handler->curdoc;
return HA_ERR_END_OF_FILE;
}
info->update&= (HA_STATE_CHANGED | HA_STATE_ROW_CHANGED);
info->lastpos=handler->doc[handler->curdoc].dpos;
if (!(*info->read_record)(info,info->lastpos,record))
{
info->update|= HA_STATE_AKTIV; /* Record is read */
return 0;
}
return my_errno;
}