Relational DataBaseに対して、低レベルなクエリ実行系を提供するためのpluginです。
現状サポートしているRDBMSは、PostgreSQLとSQLite3です。
特定のdbに依存しない作りになってるはずなので、driverというモジュールを追加することによって、対応dbを増やせます。
標準添付のdriverは、
-
pg
- psqlコマンドに依存
- vimprocに依存
-
pg_libpq
- コンパイルが必要
-
sqlite3
- sqlite3コマンドに依存
- vimprocに依存
-
sqlite3_libsqlite3
-
コンパイルが必要
win64用のコンパイル済バイナリを同梱しているので、win64環境ならばコンパイルせずに最初から利用できます。
またsqlite3のソースを同梱しているため、*nix環境でのコンパイルも、コンパイラがあればOKです。
-
です。
sqlite3サポートは、mattnさんが即座にpr送ってくれました。ありがとうございます。
mysqlや他のdbについては、patches wellcomeなスタンスです。
使い方について少しだけ。
細かいところは :help
から参照してください。
try
" コネクションの取得
" 文字列のみで接続情報を渡すためには、↓
" sqlite3* というのは、ドライバ名称をワイルドカードで指定可能でかつ、driverが持つ優先度の設定に従ってドライバを自動で選択します
let C= vdbc#connect_by_dsn('vdbc:sqlite3*:dbname=:memory:')
" または、辞書で接続情報を渡すこともできます
" この方法だと、ドライバのワイルドカード指定はできません
let C= vdbc#connect({
\ 'driver': 'sqlite3_libsqlite3',
\ 'dbname': ':memory:',
\})
" prepared statementを実行する
" まず、statement handleを構築します
let stmt= C.prepare('insert into a_table (column1, column2) values (?, ?)')
" prepared文に対して、パラメータを渡して実行します
call stmt.execute(['value1', 'value2'])
call stmt.execute([1, 'value2'])
" 使い終わったら、開放します
call stmt.finish()
" select結果をリストで取得します
" この書き方はprepared文を作成し、その後パラメータを渡して実行、最後に開放という、↑で行ったやり方の簡易版です
echo C.select_as_list('select * from a_table') " => [[value1, value2], [value1, value2], ...]
" なので、パラメータを渡すことができます
echo C.select_as_list('select * from a_table where column1 = ?', ['value1'])
" select結果を辞書で取得します
echo C.select_as_dict('select * from a_table') " => [{'column1': value1, 'column2': value2}, {'column1': value1, 'column2': value2}, ...]
" こちらも同様に、パラメータを渡すことができます
echo C.select_as_dict('select * from a_table where column1 = ?', ['value1'])
finally
" 切断します
" vim終了時に自動的にすべてのコネクションは開放されますが、明示的にやったほうが良いです
if exists('C')
call C.disconnect()
endif
endtry