LoginSignup
7
7

More than 5 years have passed since last update.

vimからdbにアクセスするためのplugin作りました

Last updated at Posted at 2014-06-17

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
7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7