From 61f7f717f78cd0742c2d10fb0d0c871cc5c202e3 Mon Sep 17 00:00:00 2001 From: Liang Ding Date: Tue, 23 Aug 2022 10:06:58 +0800 Subject: [PATCH] =?UTF-8?q?:art:=20=E6=95=B0=E6=8D=AE=E5=8E=86=E5=8F=B2?= =?UTF-8?q?=E6=96=87=E6=A1=A3=E5=92=8C=E8=B5=84=E6=BA=90=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=88=86=E9=A1=B5=E5=92=8C=E6=90=9C=E7=B4=A2?= =?UTF-8?q?=20https://github.com/siyuan-note/siyuan/issues/4901?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/sql/database.go | 32 +++++++++++++++++++++++++++++++- kernel/util/working.go | 2 ++ kernel/util/working_mobile.go | 1 + 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/kernel/sql/database.go b/kernel/sql/database.go index 6e4616055..2d8d6e18c 100644 --- a/kernel/sql/database.go +++ b/kernel/sql/database.go @@ -38,7 +38,10 @@ import ( "github.com/siyuan-note/siyuan/kernel/util" ) -var db *sql.DB +var ( + db *sql.DB + historyDB *sql.DB +) func init() { regex := func(re, s string) (bool, error) { @@ -141,6 +144,12 @@ func initDBTables() { if nil != err { logging.LogFatalf("create table [refs] failed: %s", err) } + + historyDB.Exec("DROP TABLE history_fts_case_insensitive") + _, err = db.Exec("CREATE VIRTUAL TABLE history_fts_case_insensitive USING fts5(type UNINDEXED, op UNINDEXED, title, content, created UNINDEXED, path UNINDEXED, tokenize=\"siyuan case_insensitive\")") + if nil != err { + logging.LogFatalf("create table [history_fts_case_insensitive] failed: %s", err) + } } func IndexMode() { @@ -192,6 +201,27 @@ func initDBConnection() { db.SetMaxIdleConns(20) db.SetMaxOpenConns(20) db.SetConnMaxLifetime(365 * 24 * time.Hour) + + if nil != historyDB { + historyDB.Close() + } + dsn = util.HistoryDBPath + "?_journal_mode=OFF" + + "&_synchronous=OFF" + + "&_secure_delete=OFF" + + "&_cache_size=-20480" + + "&_page_size=8192" + + "&_busy_timeout=7000" + + "&_ignore_check_constraints=ON" + + "&_temp_store=MEMORY" + + "&_case_sensitive_like=OFF" + + "&_locking_mode=EXCLUSIVE" + historyDB, err = sql.Open("sqlite3_extended", dsn) + if nil != err { + logging.LogFatalf("create database failed: %s", err) + } + historyDB.SetMaxIdleConns(1) + historyDB.SetMaxOpenConns(1) + historyDB.SetConnMaxLifetime(365 * 24 * time.Hour) } func SetCaseSensitive(b bool) { diff --git a/kernel/util/working.go b/kernel/util/working.go index 1c66e5aae..fe1c9a670 100644 --- a/kernel/util/working.go +++ b/kernel/util/working.go @@ -168,6 +168,7 @@ var ( LogPath string // 配置目录下的日志文件 siyuan.log 路径 DBName = "siyuan.db" // SQLite 数据库文件名 DBPath string // SQLite 数据库文件路径 + HistoryDBPath string // SQLite 历史数据库文件路径 BlockTreePath string // 区块树文件路径 AppearancePath string // 配置目录下的外观目录 appearance/ 路径 ThemesPath string // 配置目录下的外观目录下的 themes/ 路径 @@ -271,6 +272,7 @@ func initWorkspaceDir(workspaceArg string) { os.Setenv("TEMP", osTmpDir) os.Setenv("TMP", osTmpDir) DBPath = filepath.Join(TempDir, DBName) + HistoryDBPath = filepath.Join(TempDir, "history.db") BlockTreePath = filepath.Join(TempDir, "blocktree.msgpack") } diff --git a/kernel/util/working_mobile.go b/kernel/util/working_mobile.go index caf753912..e3beefc9b 100644 --- a/kernel/util/working_mobile.go +++ b/kernel/util/working_mobile.go @@ -51,6 +51,7 @@ func BootMobile(container, appDir, workspaceDir, nativeLibDir, privateDataDir, l os.RemoveAll(filepath.Join(TempDir, "repo")) os.Setenv("TMPDIR", osTmpDir) DBPath = filepath.Join(TempDir, DBName) + HistoryDBPath = filepath.Join(TempDir, "history.db") BlockTreePath = filepath.Join(TempDir, "blocktree.msgpack") AndroidNativeLibDir = nativeLibDir AndroidPrivateDataDir = privateDataDir