summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--myisam/ft_search.c2
-rw-r--r--sql/ha_myisam.cc12
-rw-r--r--sql/ha_myisam.h1
-rw-r--r--sql/item_func.cc9
-rw-r--r--sql/opt_range.cc7
-rw-r--r--sql/opt_range.h2
-rw-r--r--sql/share/russian/errmsg.txt44
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' помечена как испорченная и последняя попытка исправления (автоматическая?) не удалась",