有馬総一郎のブログ

(彼氏の事情)

2018年11月14日 21:43:27 JST - 5 minute read - Vim

VimからDB操作できるトホホな"cosminadrianpopescu/vim-sql-workbench"を使ってみた

VimからDB操作をしたい。 vim-scripts/dbext.vimは、対象DBがSQL Serverで言語が日本語だと文字化けで表示されるので、困る。

それで、 cosminadrianpopescu/vim-sql-workbench)を使ってみた。以下、Windows環境 SQL Serverでの話。多分、Linuxは罠?が少ない。

まず SQL Workbench/JというSQLクエリツールが必要。このツール、初めて知った。海外では有名なんだろうか?

私は A5:SQL Mk-2をよく使っているので。そう、こちらにも最近、オプション -> 全般 -> テキストエディタでVIMに似た操作モードを使うというオプションが付いたんだよ!でもやっぱり 似た 操作なんだけどね。

で、 vim-sql-workbench だけど、例のごとく英語に不自由なもので、導入にいくつか詰まる。

とりあえずは、インストール。で、いくつか実行ファイルあるけど、普通に(GUIを)使う場合は SQLWorkbench64.exe (勿論、64bitのOSの場合)を叩く。

File -> Connect Window -> Create a new connection profileprofile を作成。

そしてMacros -> Manage macros -> create a new entrymarco 作成。グループ名、マクロ名以外特に何も書かなくてよい。

SQL Workbench/Jの設定フォルダ(%USERPROFILE%\.sqlworkbench)に WbProfiles.xml、WbMacros.xmlが出来ているはず。

でもって vimrc に以下を記述する。

" vim-sql-workbench
let g:sw_config_dir = 'C:\\Users\\ユーザー名\\.sqlworkbench'
let g:sw_exe = 'C:\\Users\\ユーザー名\\Downloads\\software\\Workbench\\sqlwbconsole.cmd'
let g:sw_cache = 'C:\\Users\\ユーザー名\\.sqlworkbench\\cache'
let g:sw_tmp = 'C:\\Users\\ユーザー名\\AppData\\Local\\Temp'

sw_config_dirWbProfiles.xml、WbMacros.xml などが格納された場所。sw_exesqlwbconsole.cmd 実行ファイルを含めたのパス。sw_cachesw_tmpはどこでも。

Unixでのパス表記はNG。Windowsでのパス表記、それも環境変数など使わずに書かないと動作しない。

そうしないと、

~/Workbench/sqlwbconsole.cmd is not readable. Make sure the setting g:sw_exe is set and the file exists.
~/Workbench/sqlwbconsole.cmd is not executable. Make sure the permissions are set correctly.

There was a problem fetching the profiles for Sql Workbench (maybe the g:sw_cache) variable is not set? Please note that you need to either create the default folder (~/.cache/sw) either to set the variable to an existing folder for autocomplete or CtrlP integration to work

function sw#server#handle_message[40]..sw#dbexplorer#message_handler[20]..<SNR>145_process_result_1[20]..sw#put_lines_in_buffer の処理中にエラーが検出されました:
行    4:
E482: ファイル %TEMP%/row-GVIM を作成できません
行    5:

上記のようなエラーを吐かれる。特にsw_tmpについては必要なさそうに書かれているのに?

WbMacros.xmlのマクロファイルもないと以下のメッセージが出力される。

The output of the command was SQL Workbench/J (124) console interface started.<00>Enter exit to quit.<00>Enter WbHelp for a list of SQL Workbench/J specific commands<00>Config directory: C:\Users\ユーザー名\.sqlworkbench<00><00>File "C:\Users\ユーザー名\.sqlworkbench\WbMacros.xml" not found!<00><00>Execution time: 0.01s

通常のSQL操作は新規バッファを普通に開いて、:SWSqlBufferConnectを実行する。すると sqlwbconsole を起動した状態になる。下に新規のバッファが分割表示されて、コンソール画面が表示される。

SQL Workbench/J (124) console interface started.
Enter exit to quit.
Enter WbHelp for a list of SQL Workbench/J specific commands
Config directory: 設定ディレクトリ

次に、バッファにWbConnect プロファイル名を入力して<Leader><C-Space>または<Leader><C-@>どちらかのキーを押下、もしくは:SWSqlExecuteCurrentを実行。すると接続された状態になる。

Connection to "User=ユーザー名, Database=データベース名, URL=jdbc:sqlserver://localhost:1433" successful
Execution time: 0.83s

ようやくSQLを記述して、先程と同様のキー押下、もしくはコマンド実行すると、SQLが実行される。なんでDB接続までのコマンド無いんだ、とか思ったけど kien/ctrlp.vimとかインストールしてると簡単になるっぽい。

日本語もキチンと表示されるのだけど、そもそもの sqlwbconsole が、マルチバイトを考慮してなくて整形がズレる。じゃあ、整形しようとするも'modifiable' がオフなので、変更できませんとなる。

まあ、これも百歩譲って良いとしても、結果が帰って来るのが恐ろしく遅い。たかが1500行のレコードに120秒位かかる。その上、全行表示されない?!

sqlwbconsoleは勿論、一瞬で帰ってくる…Vim scriptのせいなのか。また、キャンセルしようにも、結果は既に帰ってきているのでSWSqlBufferDisconnectとかしても無駄である。はっきり言って使い物にならない。

というトホホな結果に。

そんなトホホなツールだが、SWDbExplorer プロファイル名でDBエクスプローラーが開いて、サッとテーブル、プロシージャ、トリガーの確認をしたいときに活用することが出来る。

上部にエクスプローラー操作対象

Objects (O) | Procedures (P) | Triggers (T) | Row Counts (W)

左下に対象オブジェク

---- List of database objects
NAME                         | TYPE  | DATABASE     | SCHEMA       | REMARKS
-----------------------------+-------+--------------+--------------+--------

---- Procedures
PROCEDURE_NAME               | TYPE      | DATABASE     | SCHEMA       | REMARKS
-----------------------------+-----------+--------------+--------------+--------

---- Triggers
TRIGGER | TYPE | EVENT | TABLE | REMARKS | STATUS | LEVEL
--------+------+-------+-------+---------+--------+------

---- WbRowCount
ROWCOUNT | NAME                         | TYPE  | DATABASE     | SCHEMA      
---------+------------------------------+-------+--------------+-------------

右下に対象オブジェクトに対する詳細が表示される。

Objectの場合

Columns (C) | SQL Source (S) | Data (D) | Filtered Data (F) | Indexes (I) | Referenced by (Y) | References (R)

Procedures、Triggersの場合

SQL Source (S)

Row Countsはなし。出力したは内容は

Available shortcuts in the right panel:: Export (E) \| Open in new buffer (B)

とxml, html, odsと様々形式で出力出来る。

とはいえ、おとなしく SQL Workbench/J、または、 A5:SQL Mk-2を使うべき。