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