diff options
-rw-r--r-- | myisam/ft_search.c | 2 | ||||
-rw-r--r-- | sql/ha_myisam.cc | 12 | ||||
-rw-r--r-- | sql/ha_myisam.h | 1 | ||||
-rw-r--r-- | sql/item_func.cc | 9 | ||||
-rw-r--r-- | sql/opt_range.cc | 7 | ||||
-rw-r--r-- | sql/opt_range.h | 2 | ||||
-rw-r--r-- | sql/share/russian/errmsg.txt | 44 |
7 files changed, 48 insertions, 29 deletions
diff --git a/myisam/ft_search.c b/myisam/ft_search.c index 9baab10df1e..4ca1551e809 100644 --- a/myisam/ft_search.c +++ b/myisam/ft_search.c @@ -158,6 +158,7 @@ FT_DOCLIST * ft_init_search(void *info, uint keynr, byte *key, ALL_IN_ONE aio; FT_DOCLIST *dlist; FT_DOC *dptr; + my_off_t saved_lastpos=((MI_INFO *)info)->lastpos; /* black magic ON */ if ((int) (keynr = _mi_check_index((MI_INFO *)info,keynr)) < 0) @@ -204,6 +205,7 @@ err: delete_tree(&aio.dtree); delete_tree(wtree); my_free((char*) wtree,MYF(0)); + ((MI_INFO *)info)->lastpos=saved_lastpos; return dlist; } diff --git a/sql/ha_myisam.cc b/sql/ha_myisam.cc index 7f658303a4c..43e71293009 100644 --- a/sql/ha_myisam.cc +++ b/sql/ha_myisam.cc @@ -1094,7 +1094,17 @@ int ha_myisam::ft_read(byte * buf) if (error=ft_read_next((FT_DOCLIST *) ft_handler,(char*) buf)) ft_handler=NULL; // Magic here ! See Item_func_match::val() - + // and ha_myisam::index_init() table->status=error ? STATUS_NOT_FOUND: 0; return error; } + +int ha_myisam::index_init(uint idx) +{ + if (idx != active_index) + ft_handler=NULL; // Magic here ! + + active_index=idx; + return 0; +} + diff --git a/sql/ha_myisam.h b/sql/ha_myisam.h index d9f322fe9ca..c72b29ed3c7 100644 --- a/sql/ha_myisam.h +++ b/sql/ha_myisam.h @@ -71,6 +71,7 @@ class ha_myisam: public handler int index_first(byte * buf); int index_last(byte * buf); int index_next_same(byte *buf, const byte *key, uint keylen); + int index_init(uint idx); int ft_init() { if(!ft_handler) return 1; ft_reinit_search(ft_handler); return 0; } void *ft_init_ext(uint inx,const byte *key, uint keylen, bool presort) diff --git a/sql/item_func.cc b/sql/item_func.cc index 3d002e5c9d9..ac1e3298d02 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -1840,9 +1840,12 @@ err: double Item_func_match::val() { - // Don't know how to return an error from val(), so NULL will be returned - if ((null_value=(ft_handler==NULL))) - return 0.0; + /* If called uninitialized we should return neither NULL nor 0 (important + for const_tables) so, let's return -1, which is obviously incorrect + for normal operation, and could be easily spotted */ + + if (ft_handler==NULL) + return -1.0; if (join_key) { diff --git a/sql/opt_range.cc b/sql/opt_range.cc index 442597bbfad..d0310bf58e5 100644 --- a/sql/opt_range.cc +++ b/sql/opt_range.cc @@ -393,7 +393,7 @@ QUICK_SELECT::QUICK_SELECT(TABLE *table,uint key_nr,bool no_alloc) else bzero((char*) &alloc,sizeof(alloc)); file=head->file; - error=file->index_init(index); + // error=file->index_init(index); record=head->record[0]; } @@ -403,13 +403,16 @@ QUICK_SELECT::~QUICK_SELECT() free_root(&alloc,MYF(0)); } +int QUICK_SELECT::init() +{ + return error=file->index_init(index); +} QUICK_RANGE::QUICK_RANGE() :min_key(0),max_key(0),min_length(0),max_length(0), flag(NO_MIN_RANGE | NO_MAX_RANGE) {} - SEL_ARG::SEL_ARG(SEL_ARG &arg) :Sql_alloc() { type=arg.type; diff --git a/sql/opt_range.h b/sql/opt_range.h index 586c35f397f..2005773eca7 100644 --- a/sql/opt_range.h +++ b/sql/opt_range.h @@ -73,7 +73,7 @@ public: QUICK_SELECT(TABLE *table,uint index_arg,bool no_alloc=0); virtual ~QUICK_SELECT(); void reset(void) { next=0; it.rewind(); } - virtual int init() { return 0; } + virtual int init(); virtual int get_next(); int cmp_next(QUICK_RANGE *range); bool unique_key_range(); diff --git a/sql/share/russian/errmsg.txt b/sql/share/russian/errmsg.txt index 79f113030e5..8138c40f563 100644 --- a/sql/share/russian/errmsg.txt +++ b/sql/share/russian/errmsg.txt @@ -163,7 +163,7 @@ "Получен пакет в неправильном порядке", "Не могу распаковать пакет", "Ошибка при чтении пакетов" -"Timeout при чтении пакетов", +"Таймаут при чтении пакетов", "Ошибка при отправке пакетов", "Ошибка при отправке пакетов", "Результирующая строка больше чем max_allowed_packet", @@ -171,25 +171,25 @@ "Используемая таблица не поддерживает поля AUTO_INCREMENT", "INSERT DELAYED не может использоваться с таблицей '%-.64s', она занята использованием LOCK TABLES", "Неверное имя поля '%-.100s'", -"Используемый table handler не может индексировать поле '%-.64s'", -"All tables in the MERGE table are not defined identically", -"Can't write, because of unique constraint, to table '%-.64s'", -"BLOB column '%-.64s' used in key specification without a key length", -"All parts of a PRIMARY KEY must be NOT NULL; If you need NULL in a key, use UNIQUE instead", -"Result consisted of more than one row", -"This table type requires a primary key", -"This version of MySQL is not compiled with RAID support", +"Таблица используемого типа не может индексировать поле '%-.64s'", +"Не все таблицы в MERGE определены одинаково", +"Не могу писать в таблицу '%-.64s' из-за UNIQUE условий", +"Поле типа BLOB '%-.64s' в определении индекса без указания длины", +"Все части PRIMARY KEY должны быть NOT NULL; если NULL в индексе необходим, используйте UNIQUE", +"Результат содержит больше одной строки", +"Таблица этого типа обязана иметь PRIMARY KEY", +"Эта копия MySQL скомпилирована без поддержки RAID", "You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column", -"Key '%-.64s' doesn't exist in table '%-.64s'", -"Can't open table", -"The handler for the table doesn't support check/repair", -"You are not allowed to execute this command in a transaction", -"Got error %d during COMMIT", -"Got error %d during ROLLBACK", -"Got error %d during FLUSH_LOGS", -"Got error %d during CHECKPOINT", -"Aborted connection %ld to db: '%-.64s' user: '%-.32s' host: `%-.64s' (%-.64s)", -"The handler for the table does not support binary table dump", +"Индекс '%-.64s' не найден в таблице '%-.64s'", +"Не могу открыть таблицу", +"Данный тип таблиц не поддерживает check/repair", +"Эта команда внутри транзакции запрещена", +"Ошибка %d во время COMMIT", +"Ошибка %d во время ROLLBACK", +"Ошибка %d во время FLUSH_LOGS", +"Ошибка %d во время CHECKPOINT", +"Прерванное соединение %ld к базе данных: '%-.64s' пользователь: '%-.32s' хост: `%-.64s' (%-.64s)", +"Этот тип таблиц не поддерживает binary table dump", "Binlog closed while trying to FLUSH MASTER", "Failed rebuilding the index of dumped table '%-.64s'", "Error from master: '%-.64s'", @@ -197,6 +197,6 @@ "Net error writing to master", "FULLTEXT индекс, соответствующий заданному списку столбцов, не найден", "Can't execute the given command because you have active locked tables or an active transaction", -"Unknown system variable '%-.64'", -"Table '%-.64s' is marked as crashed and should be repaired", -"Table '%-.64s' is marked as crashed and last (automatic?) repair failed", +"Неизвестная системная переменная '%-.64'", +"Таблица '%-.64s' помечена как испорченная и должна быть исправлена", +"Таблица '%-.64s' помечена как испорченная и последняя попытка исправления (автоматическая?) не удалась", |