2011-06-12 72 views
0

我在我的sqlite數據庫中有一個FTS表的奇怪問題。我正在創建這樣的表格:Sqlite和FTS表與ICU分詞器錯誤與否?

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'); 

,當我試圖更新或只有名字列刪除行充滿我「模塊‘sqlite3.dll’。地址爲00000000的讀訪問衝突在地址7244CF96」得到一個錯誤。其他行都可以,我可以更新它或像往常一樣刪除。我使用哪種語言環境並不重要,我嘗試了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行的代碼)。

回答

0

地址00000000當然是空指針。聽起來像一個sqlite3錯誤(至少在fts4/icu膠水中),如果它試圖將null傳遞給ICU標記器。你可以在調試模式下構建所有的東西,並找出誰在訪問違規?

+0

我已更新主帖子。所以有一個空指針會出現一些問題,但是很遺憾我找不到問題所在,因爲我無法調試它。 – Anonymous 2011-06-14 07:11:28

+0

@匿名文件sqlite3的錯誤 - 他們不應該傳遞NULL到strlen。 – 2011-06-14 17:16:09