# #2023/03
## 事象
[[telescope-frecency.nvim]]をインストールした状態で、[[telescope.nvim]]の`:Telescope frecency`コマンドを実行すると以下のエラーになる。
```error
Error executing Lua callback: ...a\Local\nvim-data\plugged\sqlite.lua/lua/sqlite/defs.lua:55: cannot load module 'libsqlite3': <8e>w<92>肳<82>ꂽ<83><82><83>W<83><85><81>[<83><8b><82><aa><8c><a9><82><82><a9><82><e8><82>܂<b9><82><f1><81>B
```
[[init.lua]]の設定は以下。
```lua
local Plug = vim.fn['plug#']
vim.call('plug#begin')
-- 中略 --
-- telescope
Plug 'nvim-lua/plenary.nvim'
Plug('nvim-telescope/telescope.nvim', { tag = '0.1.1' })
Plug 'kkharji/sqlite.lua'
Plug 'nvim-telescope/telescope-frecency.nvim'
-- 中略 --
vim.call('plug#end')
local actions = require("telescope.actions")
require("telescope").setup {
defaults = {
mappings = {
i = { ["<esc>"] = actions.close },
n = { ["q"] = actions.close },
},
layout_strategy = 'vertical'
}
}
require('telescope').load_extension('frecency')
local builtin = require('telescope.builtin')
vim.keymap.set('n', '<C-j>f', builtin.find_files, {})
vim.keymap.set('n', '<C-j>e', builtin.oldfiles, {})
```
## 原因
[[SQLite]]がインストールされていないか、ライブラリ([[Windows]]なら`sqlite3.dll`)のパスを認識できていないから。
## 解決方法
### [[Windows]]
https://www.sqlite.org/download.html から`sqlite-dll-win64-x64-xxxxxx.zip`をダウンロードし、解凍して[[DLL]]ファイルを任意の場所に配置する。(今回は `~/lib/sqlite3.dll` に配置)
そして、以下の2行を設定として追加する。
```lua
local home = os.getenv("USERPROFILE")
vim.g.sqlite_clib_path = home .. "/lib/sqlite3.dll"
```
### [[Linux]]
```console
sudo apt-get install -y sqlite3 libsqlite3-dev
```
以下を記載する。
```console
vim.g.sqlite_clib_path = "/usr/lib/x86_64-linux-gnu/libsqlite3.so"
```
## 参考
- [using in Windows system get error "cannot load module 'libsqlite3'" · Issue \#63 · nvim\-telescope/telescope\-frecency\.nvim](https://github.com/nvim-telescope/telescope-frecency.nvim/issues/63)
# #2023/08
## 事象
[[telescope-frecency.nvim]]をインストールした状態で、[[telescope.nvim]]の`:Telescope frecency`コマンドを実行すると以下のエラーになる。
```error
Failed to run `config` for telescope.nvim
...Data/Local/nvim-data/lazy/sqlite.lua/lua/sqlite/defs.lua:56: cannot load module 'libsqlite3': 指定されたモジュールが見つかりません。^M
# stacktrace:
- sqlite.lua\lua\sqlite\defs.lua:56
- sqlite.lua\lua\sqlite\utils.lua:252 _in_ **__index**
- sqlite.lua\lua\sqlite\db.lua:667
- sqlite.lua\lua\sqlite\init.lua:66 _in_ **__index**
- telescope-frecency.nvim\lua\frecency\database.lua:38 _in_ **new**
- telescope-frecency.nvim\lua\frecency\frecency.lua:53 _in_ **new**
- telescope-frecency.nvim\lua\frecency\init.lua:7 _in_ **setup**
- telescope.nvim\lua\telescope\_extensions\init.lua:64 _in_ **load_extension**
- ~\AppData\Local\nvim\init.lua:180 _in_ **config**
```
## 原因
`vim.g.sqlite_clib.path`に値が設定される前に[[telescope-frecency.nvim]]をロードしていたから。
[[init.lua]]は以下のようになっていた。(一部カットしている)
```lua
{
'nvim-telescope/telescope.nvim',
dependencies = { 'nvim-lua/plenary.nvim', "nvim-telescope/telescope-frecency.nvim", "kkharji/sqlite.lua" },
config = function()
local actions = require("telescope.actions")
require("telescope").setup {
defaults = {
mappings = {
i = {
["<esc>"] = actions.close,
["<F12>"] = actions.select_vertical,
},
n = { ["q"] = actions.close },
},
layout_strategy = 'vertical'
},
extensions = {
frecency = {
show_scores = true
}
}
}
require("telescope").load_extension("frecency")
require("telescope").load_extension("file_browser")
if is_windows then
local home = os.getenv("USERPROFILE")
vim.g.sqlite_clib_path = home .. "/lib/sqlite3.dll"
else
vim.g.sqlite_clib_path = "/usr/lib/x86_64-linux-gnu/libsqlite3.so"
end
end
},
```
`vim.g.sqlite_clib_path`の設定より前に`load_extension`が実行されている。
## 対策
[[init.lua]]を以下のようにする。
```lua
{
'nvim-telescope/telescope.nvim',
dependencies = { 'nvim-lua/plenary.nvim', "nvim-telescope/telescope-frecency.nvim", "kkharji/sqlite.lua" },
config = function()
local actions = require("telescope.actions")
require("telescope").setup {
defaults = {
mappings = {
i = {
["<esc>"] = actions.close,
["<F12>"] = actions.select_vertical,
},
n = { ["q"] = actions.close },
},
layout_strategy = 'vertical'
},
extensions = {
frecency = {
show_scores = true
}
}
}
if is_windows then
local home = os.getenv("USERPROFILE")
vim.g.sqlite_clib_path = home .. "/lib/sqlite3.dll"
else
vim.g.sqlite_clib_path = "/usr/lib/x86_64-linux-gnu/libsqlite3.so"
end
require("telescope").load_extension("frecency")
require("telescope").load_extension("file_browser")
end
},
```
## 備考
以前はなぜ問題なかったかは不明。[[telescope.nvim]]か[[telescope-frecency.nvim]]のアップデートで処理が変わった?
### 調査の過程
`C:\Users\syoum\AppData\Local\nvim-data\lazy\sqlite.lua\lua\sqlite\defs.lua` の処理をプリンとデバッグしてみた。
```lua
--- Load clib
local clib = (function()
local path, _
if vim then
if vim.g.sql_clib_path then
error [[ sqlite.lua: vim.g.sql_clib_path is deprecated. Use vim.g.sqlite_clib_path instead. ]]
end
path = vim.g.sqlite_clib_path
vim.api.nvim_out_write(tostring(path) .. "\n")
end
```
この出力結果が[[nil (Lua)|nil]]になっていた。[[Lua]]のプリントデバッグは[[📕Luaで書かれたNeovimプラグインをprintデバッグする方法]]にまとめた。