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 profile
で profile を作成。
そしてMacros -> Manage macros -> create a new entry
で marco 作成。グループ名、マクロ名以外特に何も書かなくてよい。
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_dir
は WbProfiles.xml、WbMacros.xml などが格納された場所。sw_exe
は sqlwbconsole.cmd 実行ファイルを含めたのパス。sw_cache
、sw_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を使うべき。