Таблицы Sqlite и FTS с ошибкой токенизатора ICU или нет? - PullRequest
0 голосов
/ 12 июня 2011

У меня странная проблема с таблицей FTS в моей базе данных sqlite.Я создаю таблицу следующим образом:

CREATE VIRTUAL TABLE table01 USING fts4(name, content, tokenize=icu ru_RU);

Затем вставляю две строки, одну с именем и содержимым, а другую только с именем.

INSERT INTO table01(name, content) VALUES('Abc1', 'asdasd');
INSERT INTO table01(name) VALUES('Abc2');

И когда я пытаюсь обновить илиудалить строку, заполненную только именем столбца Я получаю сообщение об ошибке «Нарушение прав доступа по адресу 7244CF96 в модуле« sqlite3.dll ». Чтение адреса 00000000.».С другим рядом все в порядке, я могу его обновить или удалить как обычно.Неважно, какую локаль я использую, я пробовал en_US и многие другие.И нет никакой разницы между fts3 и fts4.Это похоже на ошибку ICU, потому что нет проблем со встроенными токенизаторами sqlite.Это ошибка ICU или sqlite, или я делаю что-то не так?Я пробовал это на SQLite Expert и в моем проекте со всеми необходимыми параметрами компиляции и всеми включенными библиотеками.


Последнее в стеке:

msvcr100d.dll!strlen(unsigned char * buf)  Line 81  Asm
my_prog.exe!icuOpen(sqlite3_tokenizer * pTokenizer, const char * zInput, int nInput, sqlite3_tokenizer_cursor * * ppCursor)  Line 60276 + 0x9 bytes
my_prog.exe!fts3PendingTermsAdd(Fts3Table * p, const char * zText, int iCol, unsigned int * pnWord)  Line 52616 + 0x18 bytes    C
my_prog.exe!fts3DeleteTerms(int * pRC, Fts3Table * p, Mem * * apVal, unsigned int * aSz)  Line 52828 + 0x1a bytes   C

fts3DeleteTerms становится нулевымуказатель вместо строки и передача его вниз.Я не могу отладить его пошагово прямо сейчас (я использую объединение, а VS 2010 не может отладить более 65535 строк кода).

1 Ответ

0 голосов
/ 13 июня 2011

Адрес 00000000 - это, конечно, нулевой указатель. Похоже на ошибку sqlite3 (по крайней мере, в клее fts4 / icu), если он пытается передать null токенизатору ICU. Можете ли вы собрать все в режиме отладки и выяснить, кто получает нарушение прав доступа?

...