2012-01-09 46 views
8

我想在我的iOS項目中使用FTS。通過對SO(例如this)和其他來源(如this)這裏的問題的一些答案,我明白我將不得不在iOS上推出我自己構建的sqlite3,從而將依賴項替換爲默認libsqlite3.dylib。蘋果現在在標準/內置的sqlite庫中啓用了FTS嗎?

但是,當我直接運行查詢(在一個新的項目,只用「libsqlite3.dylib」鏈接標準,沒有自定義源碼編譯):通過使用創建的表「頁」

"SELECT rowid FROM pages WHERE textcontent MATCH 'jim';" 

查詢:

"CREATE VIRTUAL TABLE pages USING fts3(textcontent TEXT)", 

我沒有得到任何錯誤,相反,我得到正確的結果(該行的ROWID在「吉姆」字存在)彷彿FTS被defalt在啓用內置的iOS sqlite庫。

那麼,情況是這樣嗎?蘋果現在是否在標準/內置的sqlite庫中啓用了FTS?或者有什麼我在這裏失蹤?

謝謝。

PS。我在我的項目中使用FMDB作爲一個sqlite包裝,這裏是我用來測試上述代碼。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory ,  NSUserDomainMask, YES); 
NSString *documentsDir = [paths objectAtIndex:0]; 
NSString *dbDocumentsPath = [documentsDir stringByAppendingPathComponent:@"1.db"]; 

FMDatabase *db = [FMDatabase databaseWithPath:dbDocumentsPath]; 

if (![db open]) 
    NSLog(@"Could not open db."); 

if([db executeUpdate:@"CREATE VIRTUAL TABLE pages USING fts3(textcontent TEXT)"]) 
    NSLog(@"Virtual Table Created"); 

if([db executeUpdate:@"INSERT INTO pages(textcontent) VALUES ('Jack')"]) 
    NSLog(@"First Insert Done"); 
if([db executeUpdate:@"INSERT INTO pages(textcontent) VALUES ('jim is jam')"]) 
    NSLog(@"Second Insert Done"); 

FMResultSet* resultSet1 = [db executeQuery:@"SELECT rowid FROM pages WHERE textcontent MATCH 'jim';"]; 

while([resultSet1 next]) 
    NSLog(@"%@",[resultSet1 objectForColumnName:@"rowid"]); 
+1

好了,正如我所說的,試圖在蘋果編譯libsqlite3.dylib FTS查詢時我沒有得到任何錯誤,但是當我用我們自己的替換編譯靜態源碼具有庫FTS手動禁用(通過去除從sqlite.c宏的#define SQLITE_ENABLE_FTS3),我得到的follwing錯誤 「錯誤調用sqlite3_step(1:沒有這樣的模塊:FTS3)SQLITE_ERROR」。 當我再次手動啓用FTS通過從sqlite.c添加宏#define SQLITE_ENABLE_FTS3,錯誤消失,我得到所需的輸出。這讓我更相信,蘋果默認啓用了FTS。謝謝。 – archeopetrix 2012-01-09 16:16:49

+0

您使用的是哪個版本的iOS? – SK9 2012-01-31 09:48:22

+0

我正在使用iOS 5。 – archeopetrix 2012-01-31 13:26:12

回答

1

我有我的機器和獅子操作系統上測試這一點,它完美地工作,但構建不會任何其他機器(除了FTS所有查詢都可以)上執行FTS。 用Leopard OS構建的相同項目不會導致可用的FTS。
但是在項目中放置合併源(並啓用FTS)會導致在任何機器上構建並運行合併。

2

This guy在他的第二個博客更新斷言確認您的調查結果,即FTS3包含在iOS 5中的SQLite庫。 (我也測試了這一點,並得出了同樣的結論。)

相關問題