cf. https://github.com/syl20bnr/spacemacs/tree/develop/layers/%2Blang/sql
Ubuntu18.04LTS on WSL2 on Windows10でやった。
予約語を大文字に自動変換する
SELECT
や FROM
などのキーワードを入力して半角スペースを空けた時、自動的に大文字へ変換させる。
name
や user
など「カラム名として使っているから大文字にしたくない」キーワードがあれば、 sql-capitalize-keywords-blacklist
設定で除外できる。
(defun dotspacemacs/layers ()
(setq-default
dotspacemacs-configuration-layers
'(
(sql :variables
sql-capitalize-keywords t
sql-capitalize-keywords-blacklist '("name" "user"))
)
)
)
LSPを利用して自動補完などを行う
バックエンドにLSPを使う。
サポートされているLSPは sqls。
sqls
sqlsが解説されている記事 => すべてのエディタでSQLの自動補完をするためにSQL Language Server(sqls)を作った
sqlsをインストール
Go (golang)をインストールして、Go経由でsqlsをインストールする。
Goのインストールとパス設定は、Terraform Layerを参照
cf. SpacemacsでTerraformの自動補完やフォーマット機能を使う - Goをインストール
さらに、Go経由でインストールするコマンドのディレクトリやパス設定を行う。
-
GOPATH
でインストール先ディレクトリ (たとえば~/.go_path_packages
とか)を指定 - そのディレクトリ下のbinディレクトリにパスを通す
# Go
export GOPATH=$HOME/.go_path_packages
export PATH=$PATH:$HOME/.go_path_packages/bin
source ~/.bash_profile
コマンドで設定を反映しておく。
そして満を持してsqlsインストール。
go get github.com/lighttiger2505/sqls
GOPATH
で指定したディレクトリ内のbin下にsqlsコマンドが入り、使えるようになる。
.spacemacsの設定
(defun dotspacemacs/layers ()
(setq-default
dotspacemacs-configuration-layers
'(
(sql :variables
sql-backend 'lsp
sql-lsp-sqls-workspace-config-path 'workspace)
)
)
)
sqlsで自動補完を行うためには、DBに接続する必要がある。
workspace configurationで設定する場合は、 sql-lsp-sqls-workspace-config-path
を 'workspace
or 'root
に指定し、JSONで書いた設定ファイルを置いておく。
※ sql-lsp-sqls-workspace-config-path
のデフォルト値は 'workspace
-
'workspace
:{ワークディレクトリ}/.sqls/config.json
-
'root
:{ワークスペースのルートディレクトリ}/.sqls/config.json
JSON設定ファイルはこんな構成。 driver
と dataSourceName
の対で置いていく。
{
"sqls": {
"connections": [
{
"driver": "mysql",
"dataSourceName": "user1:password1@tcp(localhost:3306)/sample_db"
}
]
}
}
sqlsの機能としては、自動補完以外にも Execute SQL
や Switch Connection
などあるが、Spacemacsではこれらを codeActions (, a a)
から選んでもエラーが出て実行できない。
executeCommand
は許可されていない模様。どうして。。。
lsp--send-request-async: The connected server(s) does not support method workspace/executeCommand