From bd98eb612170f1ac401518de06b5aabdc1c80c70 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 14 Sep 2001 17:59:05 +0300 Subject: [PATCH] Fixed problem with "record not found" in BDB tables. Docs/manual.texi: Fixed wrong reference to --with-thread-safe-client mysql-test/r/bdb.result: New tests mysql-test/t/bdb.test: New tests --- Docs/manual.texi | 11 +- mysql-test/r/bdb.result | 5 + mysql-test/t/bdb.test | 19 +++ sql/ha_berkeley.cc | 8 +- sql/share/ukrainian/errmsg.txt | 221 +++++++++++++++++++++++++++++++++ 5 files changed, 255 insertions(+), 9 deletions(-) create mode 100644 sql/share/ukrainian/errmsg.txt diff --git a/Docs/manual.texi b/Docs/manual.texi index a61faa7647e..1aebc88d4c3 100644 --- a/Docs/manual.texi +++ b/Docs/manual.texi @@ -8218,7 +8218,7 @@ and that provides output about what is happening. @item If your client programs are using threads, you need to also compile a thread-safe version of the MySQL client library with the -@code{--with-thread-safe-client} configure options. This will create a +@code{--enable-thread-safe-client} configure options. This will create a @code{libmysqlclient_r} library with which you should link your threaded applications. @xref{Threaded clients}. @@ -11899,7 +11899,7 @@ If you are compiling with @code{gcc}, you can use the following @example CC=gcc CXX=gcc CXXFLAGS=-O3 \ -./configure --prefix=/usr/local/mysql --with-thread-safe-client --with-named-thread-libs=-lpthread +./configure --prefix=/usr/local/mysql --enable-thread-safe-client --with-named-thread-libs=-lpthread @end example On Irix 6.5.11 with native Irix C and C++ compilers ver. 7.3.1.2, the @@ -41997,11 +41997,11 @@ To make @code{mysql_real_connect()} thread safe, you must recompile the client library with this command: @example -shell> ./configure --with-thread-safe-client +shell> ./configure --enable-thread-safe-client @end example This will create a thread-safe client library @code{libmysqlclient_r}. -@code{--with-thread-safe-client}. This library is thread safe per +@code{--enable-thread-safe-client}. This library is thread safe per connection. You can let two threads share the same connection as long as you do the following: @@ -46853,6 +46853,9 @@ not yet 100% confident in this code. @appendixsubsec Changes in release 3.23.43 @itemize @bullet @item +Fixed problem with @code{BDB} tables and @code{UNIQUE} columns defined +as @code{NULL}. +@item Fixed problem with @code{myisampack} when using pre-space filled CHAR columns. @item Applied patch from Yuri Dario for OS2. diff --git a/mysql-test/r/bdb.result b/mysql-test/r/bdb.result index e66ca657484..4d26304db4c 100644 --- a/mysql-test/r/bdb.result +++ b/mysql-test/r/bdb.result @@ -527,3 +527,8 @@ a b id id2 id3 dummy1 id id2 id3 dummy1 NULL NULL NULL NULL +i p s +00000000-e6c4ddeaa6-003b8-83458387 programs/xxxxxxxx.wmv 00000000-e6c4ddeb32-003bc-83458387 +INFO_NOTE +INFO_NOTE +INFO_NOTE diff --git a/mysql-test/t/bdb.test b/mysql-test/t/bdb.test index 465dc9634cc..50698bb8df6 100644 --- a/mysql-test/t/bdb.test +++ b/mysql-test/t/bdb.test @@ -748,3 +748,22 @@ SELECT t1.* FROM t1 WHERE id IN (1); SELECT t1.* FROM t2 left outer join t1 on (t1.id=t2.id); delete from t1 where id3 >= 0 and id3 <= 0; drop table t1,t2; + +# +# Test problems with NULL +# + +CREATE TABLE t1 (i varchar(48) NOT NULL default '', p varchar(255) default NULL,s varchar(48) NOT NULL default '', PRIMARY KEY (i), UNIQUE(p,s)) TYPE=BDB; +INSERT INTO t1 VALUES ('00000000-e6c4ddeaa6-003b8-83458387','programs/xxxxxxxx.wmv','00000000-e6c4ddeb32-003bc-83458387'); +SELECT * FROM t1 WHERE p='programs/xxxxxxxx.wmv'; +drop table t1; + +# +# Test problem which gave error 'Can't find record in 't1'' +# + +CREATE TABLE t1 ( STR_DATE varchar(8) NOT NULL default '',INFO_NOTE varchar(200) default NULL,PRIMARY KEY (STR_DATE) ) TYPE=BerkeleyDB; +select INFO_NOTE from t1 where STR_DATE = '20010610'; +select INFO_NOTE from t1 where STR_DATE < '20010610'; +select INFO_NOTE from t1 where STR_DATE > '20010610'; +drop table t1; diff --git a/sql/ha_berkeley.cc b/sql/ha_berkeley.cc index 9a437607729..10866a1872b 100644 --- a/sql/ha_berkeley.cc +++ b/sql/ha_berkeley.cc @@ -365,11 +365,9 @@ berkeley_cmp_packed_key(DB *file, const DBT *new_key, const DBT *saved_key) { if (*new_key_ptr != *saved_key_ptr++) return ((int) *new_key_ptr - (int) saved_key_ptr[-1]); + key_length--; if (!*new_key_ptr++) - { - key_length--; continue; - } } if ((cmp=key_part->field->pack_cmp(new_key_ptr,saved_key_ptr, key_part->length))) @@ -1399,7 +1397,7 @@ int ha_berkeley::index_read_idx(byte * buf, uint keynr, const byte * key, statistic_increment(ha_read_key_count,&LOCK_status); DBUG_ENTER("index_read_idx"); current_row.flags=DB_DBT_REALLOC; - active_index= -1; + active_index= (uint) -1; DBUG_RETURN(read_row(key_file[keynr]->get(key_file[keynr], transaction, pack_key(&last_key, keynr, key_buff, key, key_len), @@ -1504,7 +1502,7 @@ int ha_berkeley::index_first(byte * buf) statistic_increment(ha_read_first_count,&LOCK_status); bzero((char*) &row,sizeof(row)); DBUG_RETURN(read_row(cursor->c_get(cursor, &last_key, &row, DB_FIRST), - (char*) buf, active_index, &row, &last_key, 0)); + (char*) buf, active_index, &row, &last_key, 1)); } int ha_berkeley::index_last(byte * buf) diff --git a/sql/share/ukrainian/errmsg.txt b/sql/share/ukrainian/errmsg.txt new file mode 100644 index 00000000000..db17f88f2c2 --- /dev/null +++ b/sql/share/ukrainian/errmsg.txt @@ -0,0 +1,221 @@ +/* Copyright Abandoned 1997 TCX DataKonsult AB & Monty Program KB & Detron HB + * This файл is public domain and comes with NO WARRANTY of any kind + * + * Ukrainian translation by Roman Festchook + * Encoding: KOI8-U + * Version: 13/09/2001 mysql-3.23.41 + */ + +"hashchk", +"isamchk", +"Н╤", +"ТАК", +"Не можу створити файл '%-.64s' (помилка: %d)", +"Не можу створити таблицю '%-.64s' (помилка: %d)", +"Не можу створити базу данних '%-.64s'. (помилка: %d)", +"Не можу створити базу данних '%-.64s'. База данних ╕сну╓", +"Не можу видалити базу данних '%-.64s'. База данних не ╕сну╓", +"Не можу видалити базу данних (Не можу видалити '%-.64s', помилка: %d)", +"Не можу видалити базу данних (Не можу видалити теку '%-.64s', помилка: %d)", +"Не можу видалити '%-.64s' (помилка: %d)", +"Не можу зчитати запис з системно╖ таблиц╕", +"Не можу отримати статус '%-.64s' (помилка: %d)", +"Не можу визначити робочу теку (помилка: %d)", +"Не можу заблокувати файл (помилка: %d)", +"Не можу в╕дкрити файл: '%-.64s' (помилка: %d)", +"Не можу знайти файл: '%-.64s' (помилка: %d)", +"Не можу прочитати теку '%-.64s' (помилка: %d)", +"Не можу перейти у теку '%-.64s' (помилка: %d)", +"Запис було зм╕нено з часу останнього читання з таблиц╕ '%-.64s'", +"Диск заповнений (%s). Вичикую, доки зв╕льниться трохи м╕сця...", +"Не можу записати, дублюючийся ключ в таблиц╕ '%-.64s'", +"Не можу закрити '%-.64s' (помилка: %d)", +"Не можу прочитати файл '%-.64s' (помилка: %d)", +"Не можу перейменувати '%-.64s' у '%-.64s' (помилка: %d)", +"Не можу записати файл '%-.64s' (помилка: %d)", +"'%-.64s' заблокований на внесення зм╕н", +"Сортування перервано", +"Вигляд '%-.64s' не ╕сну╓ для '%-.64s'", +"Отримано помилку %d в╕д дескриптора таблиц╕", +"Дескриптор таблиц╕ '%-.64s' не ма╓ ц╕╓╖ властивост╕", +"Не можу записати у '%-.64s'", +"Хибна ╕нформац╕я у файл╕: '%-.64s'", +"Хибний файл ключей для таблиц╕: '%-.64s'. Спробуйте його в╕дновити", +"Старий файл ключей для таблиц╕ '%-.64s'; В╕днов╕ть його!", +"Таблиця '%-.64s' т╕льки для читання", +"Брак пам'ят╕. Рестартуйте сервер та спробуйте знову (потр╕бно %d байт╕в)", +"Брак пам'ят╕ для сортування. Треба зб╕льшити розм╕р буфера сортування у сервера", +"Хибний к╕нець файлу '%-.64s' (помилка: %d)", +"Забагато з'╓днань", +"Брак пам'ят╕; Перев╕рте чи mysqld або як╕сь ╕нш╕ процеси використовують усю доступну пам'ять. Як н╕, то ви можете скористатися 'ulimit', аби дозволити mysqld використовувати б╕льше пам'ят╕ або ви можете додати б╕льше м╕сця п╕д свап", +"Не можу визначити ╕м'я хосту для вашо╖ адреси", +"Нев╕рна установка зв'язку", +"Доступ заборонено для користувача: '%-.32s@%-.64s' до бази данних '%-.64s'", +"Доступ заборонено для користувача: '%-.32s@%-.64s' (Використано пароль: %s)", +"Базу данних не вибрано", +"Нев╕дома команда", +"Стовбець '%-.64s' не може бути нульовим", +"Нев╕дома база данних '%-.64s'", +"Таблиця '%-.64s' вже ╕сну╓", +"Нев╕дома таблиця '%-.64s'", +"Стовбець '%-.64s' у %-.64s визначений неоднозначно", +"Завершу╓ться работа сервера", +"Нев╕домий стовбець '%-.64s' у '%-.64s'", +"'%-.64s' не ╓ у GROUP BY", +"Не можу групувати по '%-.64s'", +"У вираз╕ використано п╕дсумовуюч╕ функц╕╖ поряд з ╕менами стовбц╕в", +"К╕льк╕сть стовбц╕в не сп╕впада╓ з к╕льк╕стю значень", +"╤м'я ╕дентиф╕катора '%-.100s' задовге", +"Дублююче ╕м'я стовбця '%-.64s'", +"Дублююче ╕м'я ключа '%-.64s'", +"Дублюючий запис '%-.64s' для ключа %d", +"Нев╕рний специф╕катор стовбця '%-.64s'", +"%s б╕ля '%-.80s' в строц╕ %d", +"Пустий запит", +"Неун╕кальна таблиця/псевдон╕м: '%-.64s'", +"Нев╕рне значення по замовчуванню для '%-.64s'", +"Первинного ключа визначено неодноразово", +"Забагато ключ╕в зазначено. Дозволено не б╕льше %d ключ╕в", +"Забагато частин ключа зазначено. Дозволено не б╕льше %d частин", +"Зазначений ключ задовгий. Найб╕льша довжина ключа %d", +"Ключовий стовбець '%-.64s' не ╕сну╓ у таблиц╕", +"BLOB стовбець '%-.64s' не може бути використаний у визначенн╕ ключа в цьому тип╕ таблиц╕", +"Задовга довжина стовбця '%-.64s' (max = %d). Використайте тип BLOB", +"Нев╕рне визначення таблиц╕; Може бути лише один автоматичний стовбець, що повинен бути визначений як ключ", +"%s: Готовий для з'╓днань!\n", +"%s: Нормальне завершення\n", +"%s: Отримано сигнал %d. Перериваюсь!\n", +"%s: Роботу завершено\n", +"%s: Прискорюю закриття г╕лки %ld користувача: '%-.32s'\n", +"Не можу створити IP роз'╓м", +"Таблиця '%-.64s' ма╓ ╕ндекс, що не сп╕впада╓ з вказанним у CREATE INDEX. Створ╕ть таблицю знову", +"Хибний розд╕лювач пол╕в. Почитайте документац╕ю", +"Не можна використовувати сталу довжину строки з BLOB. Зкористайтеся 'fields terminated by'", +"Файл '%-.64s' повинен бути у тец╕ бази данних або мати встановлене право на читання для ус╕х", +"Файл '%-.80s' вже ╕сну╓", +"Запис╕в: %ld Видалено: %ld Пропущено: %ld Застережень: %ld", +"Запис╕в: %ld Дубл╕кат╕в: %ld", +"Нев╕рна частина ключа. Використана частина ключа не ╓ строкою, задовга або вказ╕вник таблиц╕ не п╕дтриму╓ ун╕кальних частин ключей", +"Не можливо видалити вс╕ стовбц╕ за допомогою ALTER TABLE. Для цього скористайтеся DROP TABLE", +"Не можу DROP '%-.64s'. Перев╕рте, чи цей стовбець/ключ ╕сну╓", +"Запис╕в: %ld Дубл╕кат╕в: %ld Застережень: %ld", +"INSERT TABLE '%-.64s' не дозволено у перел╕ку FROM TABLE", +"Нев╕домий ╕дентиф╕катор г╕лки: %lu", +"Ви не володар г╕лки %lu", +"Не використано таблиць", +"Забагато строк для стовбця %-.64s та SET", +"Не можу згенерувати ун╕кальне ╕м'я log-файлу %-.64s.(1-999)\n", +"Таблицю '%-.64s' заблоковано т╕льки для читання, тому ╖╖ не можна оновити", +"Таблицю '%-.64s' не було блоковано з LOCK TABLES", +"Стовбець BLOB '%-.64s' не може мати значення по замовчуванню", +"Нев╕рне ╕м'я бази данних '%-.100s'", +"Нев╕рне ╕м'я таблиц╕ '%-.100s'", +"Запиту SELECT потр╕бно обробити багато запис╕в, що, певне, займе дуже багато часу. Перев╕рте ваше WHERE та використовуйте SET OPTION SQL_BIG_SELECTS=1, якщо цей запит SELECT ╓ в╕рним", +"Нев╕дома помилка", +"Нев╕дома процедура '%-.64s'", +"Хибна к╕льк╕сть параметр╕в процедури '%-.64s'", +"Хибний параметер процедури '%-.64s'", +"Нев╕дома таблиця '%-.64s' у %-.32s", +"Стовбець '%-.64s' зазначено дв╕ч╕", +"Хибне використання функц╕╖ групування", +"Таблиця '%-.64s' використову╓ розширення, що не ╕сну╓ у ц╕й верс╕╖ MySQL", +"Таблиця повинна мати хочаб один стовбець", +"Таблиця '%-.64s' заповнена", +"Нев╕дома кодова таблиця: '%-.64s'", +"Забагато таблиць. MySQL може використовувати лише %d таблиць у об'╓днанн╕", +"Забагато стовбц╕в", +"Задовга строка. Найб╕льшою довжиною строки, не рахуючи BLOB, ╓ %d. Вам потр╕бно привести деяк╕ стовбц╕ до типу BLOB", +"Стек г╕лок переповнено: Використано: %ld з %ld. Використовуйте 'mysqld -O thread_stack=#' аби зазначити б╕льший стек, якщо необх╕дно", +"Перехресна залежн╕сть у OUTER JOIN. Перев╕рте умову ON", +"Стовбець '%-.64s' використову╓ться з UNIQUE або INDEX, але не визначений як NOT NULL", +"Не можу завантажити функц╕ю '%-.64s'", +"Не можу ╕н╕ц╕ал╕зувати функц╕ю '%-.64s'; %-.80s", +"Не дозволено використовувати пут╕ для розд╕люваних б╕бл╕отек", +"Функц╕я '%-.64s' вже ╕сну╓", +"Не можу в╕дкрити розд╕лювану б╕бл╕отеку '%-.64s' (помилка: %d %-.64s)", +"Не можу знайти функц╕ю '%-.64s' у б╕бл╕отец╕'", +"Функц╕ю '%-.64s' не визначено", +"Хост '%-.64s' заблоковано з причини велико╖ к╕лькост╕ помилок з'╓днання. Для розблокування використовуйте 'mysqladmin flush-hosts'", +"Хосту '%-.64s' не доволено зв'язуватись з цим сервером MySQL", +"Ви використову╓те MySQL як анон╕мний користувач, тому вам не дозволено зм╕нювати парол╕", +"Ви повин╕ мати право на оновлення таблиць у баз╕ данних mysql, аби мати можлив╕сть зм╕нювати пароль ╕ншим", +"Не можу знайти в╕дпов╕дних запис╕в у таблиц╕ користувача", +"Запис╕в в╕дпов╕да╓: %ld Зм╕нено: %ld Застережень: %ld", +"Не можу створити нову г╕лку (помилка %d). Якщо ви не використали усю пам'ять, то прочитайте документац╕ю до вашо╖ ОС - можливо це помилка ОС", +"К╕льк╕сть стовбц╕в не сп╕впада╓ з к╕льк╕стю значень у строц╕ %ld", +"Не можу перев╕дкрити таблицю: '%-.64s'", +"Хибне використання значення NULL", +"Отримано помилку '%-.64s' в╕д регулярного виразу", +"Зм╕шування GROUP стовбц╕в (MIN(),MAX(),COUNT()...) з не GROUP стовбцями ╓ забороненим, якщо не ма╓ GROUP BY", +"Повноважень не визначено для користувача '%-.32s' з хосту '%-.64s'", +"%-.16s команда заборонена користувачу: '%-.32s@%-.64s' у таблиц╕ '%-.64s'", +"%-.16s команда заборонена користувачу: '%-.32s@%-.64s' для стовбця '%-.64s' у таблиц╕ '%-.64s'", +"Хибна GRANT/REVOKE команда. Прочитайте документац╕ю стосовно того, як╕ права можна використовувати.", +"Аргумент host або user для GRANT задовгий", +"Таблиця '%-.64s.%-.64s' не ╕сну╓", +"Повноважень не визначено для користувача '%-.32s' з хосту '%-.64s' для таблиц╕ '%-.64s'", +"Використовувана команда не дозволена у ц╕й верс╕╖ MySQL", +"У вас помилка у синтаксис╕ SQL", +"Г╕лка для INSERT DELAYED не може отримати блокування для таблиц╕ %-.64s", +"Забагато затриманих г╕лок використову╓ться", +"Перервано з'╓днання %ld до бази данних: '%-.64s' користувача: '%-.32s' (%-.64s)", +"Отримано пакет б╕льший н╕ж max_allowed_packet", +"Отримано помилку читання з комун╕кац╕йного каналу", +"Отримано помилкку в╕д fcntl()", +"Отримано пакети у неналежному порядку", +"Не можу декомпресувати комун╕кац╕йний пакет", +"Отримано помилку читання комун╕кац╕йних пакет╕в", +"Отримано затримку читання комун╕кац╕йних пакет╕в", +"Отримано помилку запису комун╕кац╕йних пакет╕в", +"Отримано затримку запису комун╕кац╕йних пакет╕в", +"Строка результату довша н╕ж max_allowed_packet", +"Використаний тип таблиц╕ не п╕дтриму╓ BLOB/TEXT стовбц╕", +"Використаний тип таблиц╕ не п╕дтриму╓ AUTO_INCREMENT стовбц╕", +"INSERT DELAYED не може бути використано з таблицею '%-.64s', тому що ╖╖ заблоковано з LOCK TABLES", +"Нев╕рне ╕м'я стовбця '%-.100s'", +"Використаний вказ╕вник таблиц╕ не може ╕ндексувати стовбець '%-.64s'", +"Таблиц╕ у MERGE TABLE мають р╕зну структуру", +"Не можу записати до таблиц╕ '%-.64s', з причини вимог ун╕кальност╕", +"Стовбець BLOB '%-.64s' використано у визначенн╕ ключа без вказання довжини ключа", +"Ус╕ частини PRIMARY KEY повинн╕ бути NOT NULL; Якщо ви потребу╓те NULL у ключ╕, скористайтеся UNIQUE", +"Результат знаходиться у б╕льше н╕ж одн╕й строц╕", +"Цей тип таблиц╕ потребу╓ первинного ключа", +"Ця верс╕я MySQL не зкомп╕льована з п╕дтримкою RAID", +"Ви у режим╕ безпечного оновлення та намага╓тесь оновити таблицю без оператора WHERE, що використову╓ KEY стовбець", +"Ключ '%-.64s' не ╕сну╓ в таблиц╕ '%-.64s'", +"Не можу в╕дкрити таблицю", +"Вказ╕вник таблиц╕ не п╕дтримуе перев╕рку/в╕дновлення", +"Вам не дозволено виконувати цю команду в транзакц╕╖", +"Отримано помилку %d п╕д час COMMIT", +"Отримано помилку %d п╕д час ROLLBACK", +"Отримано помилку %d п╕д час FLUSH_LOGS", +"Отримано помилку %d п╕д час CHECKPOINT", +"Перервано з'╓днання %ld до бази данних: '%-.64s' користувач: '%-.32s' хост: `%-.64s' (%-.64s)", +"Цей тип таблиц╕ не п╕дтриму╓ б╕нарну передачу таблиц╕", +"Репл╕кац╕йний лог закрито, не можу виконати RESET MASTER", +"Невдале в╕дновлення ╕ндекса передано╖ таблиц╕ '%-.64s'", +"Помилка в╕д головного: '%-.64s'", +"Мережева помилка читання в╕д головного", +"Мережева помилка запису до головного", +"Не можу знайти FULLTEXT ╕ндекс, що в╕дпов╕да╓ перел╕ку стовбц╕в", +"Не можу виконати подану команду тому, що таблиця заблокована або викону╓ться транзакц╕я", +"Нев╕дома системна зм╕нна '%-.64'", +"Таблицю '%-.64s' марковано як з╕псовану та ╖╖ потр╕бно в╕дновити", +"Таблицю '%-.64s' марковано як з╕псовану та останн╓ (автоматичне?) в╕дновлення не вдалося", +"Застереження: Деяк╕ нетранзакц╕йн╕ зм╕ни таблиць не можна буде повернути", +"Транзакц╕я з багатьма виразами вимага╓ б╕льше н╕ж 'max_binlog_cache_size' байт╕в для збер╕гання. Зб╕льште цю зм╕нну mysqld та спробуйте знову', +"Операц╕я не може бути виконана з запущеним п╕длеглим, спочатку виконайте SLAVE STOP", +"Операц╕я вимага╓ запущеного п╕длеглого, зконф╕гуруйте п╕длеглого та виконайте SLAVE START", +"Сервер не зконф╕гуровано як п╕длеглий, виправте це у файл╕ конф╕гурац╕╖ або з CHANGE MASTER TO", +"Не можу ╕н╕ц╕ал╕зувати структуру информац╕╖ головного, перев╕рте права доступу на master.info", +"Не можу створити п╕длеглу г╕лку, перев╕рте системн╕ ресурси", +"Користувач %-.64s вже ма╓ б╕льше н╕ж 'max_user_connections' активних з'╓днань", +"Можна використовувати лише вирази з╕ сталими у SET", +"Затримку оч╕кування блокування вичерпано", +"Загальна к╕льк╕сть блокувань перевищила розм╕р блокувань для таблиц╕", +"Оновити блокування не можливо на протяз╕ транзакц╕╖ READ UNCOMMITTED", +"DROP DATABASE не дозволено доки г╕лка перебува╓ п╕д загальним блокуванням читання", +"CREATE DATABASE не дозволено доки г╕лка перебува╓ п╕д загальним блокуванням читання", +"Хибний аргумент для %s", +"Користувачу %-.32s@%-.64s не дозволено створювати нових користувач╕в", +"Incorrect table definition; All MERGE tables must be in the same database",