Skip to content

Export simple_query, pinyin_dict, jieba_dict and jieba_query#203

Open
xuxiaocheng0201 wants to merge 1 commit intowangfenjin:masterfrom
xuxiaocheng0201:master
Open

Export simple_query, pinyin_dict, jieba_dict and jieba_query#203
xuxiaocheng0201 wants to merge 1 commit intowangfenjin:masterfrom
xuxiaocheng0201:master

Conversation

@xuxiaocheng0201
Copy link

rusqlite/rusqlite#1813
sqlcipher/sqlcipher#586

我在 rust 层重新实现了一遍 sqlite3_simple_init,发现这四个函数没导出,希望合并

@wangfenjin
Copy link
Owner

为什么要重新实现 sqlite3_simple_init?感觉如果想做一个 rust 版本的话可以选择把所有函数都实现一遍

@xuxiaocheng0201
Copy link
Author

不是想做rust版本,我在用sqlcipher,如果用auto-extension就没法在sqlite3_simple_init之前设置key,而fts5扩展要执行SELECT fts5(?),sqlcipher中没设置key执行select会报错,如果手动调用,最后一个参数pApi又不能为null,只好重新在rust层手动实现一个pApi可以为null的版本
sqlcipher官方的建议是重构sqlite3_simple_init,把fts5分词器的注册单独创建一个函数,想jieba_dict那样,但是我想这样对api的变更太大了,不方便实现

@xuxiaocheng0201
Copy link
Author

刚发现不对,重新在rust层手动实现一个pApi可以为null的版本其实做不到,我再想想还有没有什么办法

@wangfenjin
Copy link
Owner

ok 那我先不 merge 了,理论上这几个函数不用对外的,sqlite 能加载的函数就那几个

@wangfenjin
Copy link
Owner

你可以解释下具体问题,我看怎么弄,看起来跟加载机制无关

@xuxiaocheng0201
Copy link
Author

问题出在用 sqlcipher 时,你可以试一下,没法加载分词器,会报错。先用 sqlite3_auto_extension 注册这个扩展,然后正常打开连接,设置 key 和 wal,然后关闭连接,再次打开,就报错了 automatic extension loading failed: file is not a database

@xuxiaocheng0201
Copy link
Author

理论上这几个函数不用对外的

不过像 fts5_simple_xCreate 这种都导出了,这几个函数应该也可以导出吧?

@xuxiaocheng0201
Copy link
Author

目前我的解决办法是这样,不过这么大的 api 变更也不太好合并吧

Index: src/simple_tokenizer.h
<+>UTF-8
===================================================================
diff --git a/src/simple_tokenizer.h b/src/simple_tokenizer.h
--- a/src/simple_tokenizer.h
+++ b/src/simple_tokenizer.h
@@ -50,5 +50,6 @@
 extern "C" void fts5_simple_xDelete(Fts5Tokenizer *tokenizer_ptr);
 
 extern "C" int sqlite3_simple_init(sqlite3 *db, char **pzErrMsg, const sqlite3_api_routines *pApi);
+extern "C" int sqlite3_simpletokenizer_init(sqlite3 *db, char **pzErrMsg, const sqlite3_api_routines *pApi);
 
 #endif  // SIMPLE_TOKENIZER_H_
Index: src/entry.cc
<+>UTF-8
===================================================================
diff --git a/src/entry.cc b/src/entry.cc
--- a/src/entry.cc
+++ b/src/entry.cc
@@ -129,6 +129,12 @@
   rc = sqlite3_create_function(db, "jieba_dict", 1, SQLITE_UTF8 | SQLITE_DETERMINISTIC, NULL, &jieba_dict, NULL, NULL);
 #endif
 
+  return rc;
+}
+
+int sqlite3_simpletokenizer_init(sqlite3 *db, char **pzErrMsg, const sqlite3_api_routines *pApi) {
+  int rc = SQLITE_OK;
+
   // fts5_tokenizer tokenizer = {fts5AsciiCreate, fts5AsciiDelete, fts5AsciiTokenize };
   fts5_tokenizer tokenizer = {fts5_simple_xCreate, fts5_simple_xDelete, fts5_simple_xTokenize};
   fts5_api *fts5api;

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants