-
Notifications
You must be signed in to change notification settings - Fork 81
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
接入GRDB库的问题 #91
Comments
不好意思我不太懂iOS,你可以参考 #73 |
这个错误是哪个库的 |
这个库的;你编译流程有问题 这个库里有很多文档你看看吧 |
引入.a文件,然后注册组件,最后grdb create fts的时候指定这个组件 t.tokenizer = FTS5TokenizerDescriptor(components: ["simple"]) 就可以 |
|
需要把你建表和插入数据的 SQL 我看下;理论上 simple 和 porter 这些没有区别,如果你只是改了 tokenizer 但是数据不一样,不太可能 |
try db.create(table: "ADDRESSBOOK") { t in
t.column("id", .integer).primaryKey(onConflict: .replace, autoincrement: true)
t.column("user_id", .text).unique(onConflict: .replace).indexed().notNull()
t.column("pid", .text).notNull()
t.column("label", .text).notNull()
t.column("pinyin", .text)
t.column("login_name", .text).notNull()
t.column("mobile", .text)
t.column("email", .text)
t.column("portrait", .text)
t.column("abbrev", .text)
t.column("is_resign", .boolean).defaults(to: false)
t.column("is_master", .boolean).defaults(to: false)
t.column("remarks", .text)
t.column("desc", .text)
t.column("flag", .text).defaults(to: "Y")
}
// try db.execute(sql: """
// CREATE VIRTUAL TABLE ADDRESSBOOK_FTS USING fts5 (
// label,
// pinyin,
// email,
// abbrev,
// remarks,
// desc,
// content=ADDRESSBOOK,
// content_rowid=id,
// tokenize='simple'
// )
// """)
try db.create(virtualTable: "ADDRESSBOOK_FTS", using: FTS5()) { t in
t.column("label")
t.column("pinyin")
t.column("email")
t.column("abbrev")
t.column("remarks")
t.column("desc")
// t.content = "ADDRESSBOOK"
// t.contentRowID = "ADDRESSBOOK.id"
t.synchronize(withTable: "ADDRESSBOOK")
t.tokenizer = FTS5TokenizerDescriptor(components: ["simple"])
} 我是用的grdb,第二部分注释的是raw sql创建的fts,第三部分是grdb创建的fts,这样写tokenize创建出的fts表没有内容,但是正常搜索 |
你用的是 https://www.sqlite.org/fts5.html#external_content_tables 这个,理论上内容就是不会存在fts 表里面 也不能直接往 fts 表里面插入数据,而要通过上面链接中提到的 trigger 来保持数据同步 |
好的,感觉有点奇怪,我用的自带的,fts表里面是可以看到东西的[破涕为笑] |
看 fts 表建的是哪种类型。你现在的用法是比较推荐的用法,只要记得配置好 trigger 就好 |
如果你的项目也是开源的,做好了可以分享一下,让其他 iOS 的人也能学习 |
公司的项目,接入grdb基本就是上面那些了,加上本工程下的两个静态库和oc文件,就可以了,很方便使用,trigger grdb已经封装好了; |
那很奇怪,就像名字里面说的 external content table,理论上content在其他表里面,不应该在fts里面也有内容。 fts返回的是rowid,要内容需要关联查询 |
如果 fts 表里也有内容,那么所有数据就相当于存储了两遍,这样是浪费存储空间的。那用external content table也就没意义了 |
@fakerlogic 可以问下,GRDB.swift 中如何使用这个库的吗,
|
|
大佬有没有接入GRDB库的例子,按照你这个流程无从下手,从demo下载编译文件也是一大堆错误,有点懵逼(C++小白)
The text was updated successfully, but these errors were encountered: