はじめてのMySQL Workbenchプラグイン

はじめに

世の中にはMySQL Workbenchというものがあり、ビジュアルにごにょごにょできたりして便利らしいです。

なんかのきっかけでプラグインで拡張できると知りちょっといじってみることにしました。ぜんぜんMySQL Workbench使ったこと無いのに。

以下のバージョンを前提にしています。

なんとなくソースを落としてきてビルドしました。ビルドの詳細は割愛。

サンプルを実行する

まずは適当なサンプルプラグインを実行してみようと思い、ソースに含まれていたdoc/scripting_sample_grt.pyをインストールしてみました。

f:id:kenhys:20140508224836p:plain

きちんとインストールできていることをプラグインマネージャから確認できました。データベースに接続していると、Tools/UtilitiesメニューからFill Random Queryが実行できる、はずです。

しかし、試しに実行してみると見事に失敗します。

f:id:kenhys:20140508224827p:plain

activeQueryBufferがないとかエラー吐いているので、見なかったことにしましょう。世の中そんなこともあります。MySQL Bugsに報告済みの既知なやつかは確認していません。

Hello MySQL Workbench

ひとまず、これを参考にして、ダイアログを表示するサンプルを書いてみました。Hello World的なアレです。メッセージを表示して終了するだけです。

Luaでも拡張できるっぽいですが、ひとまずPythonでやってみました。

# coding:utf-8

from wb import *
import grt
import mforms

ModuleInfo = DefineModule(name= "HelloWorld", author= "HAYASHI Kentaro", version="1.0")

@ModuleInfo.plugin("org.gigo-ice.helloworld", caption= "Hello MySQL Workbench", input= [wbinputs.currentQueryBuffer()], pluginMenu= "SQL/Utilities")
@ModuleInfo.export(grt.INT, grt.classes.db_query_QueryBuffer)
def helloworld(qbuffer):
    result = mforms.Utilities.show_message(u"タイトル", 
                                           '''Hello MySQL Workbench''',
                                           u"オーケー",
                                           u"キャンセル",
                                           u"その他")
    if result == mforms.ResultCancel:
        return 0
    elif result == mforms.ResultOk:
        return 1
    elif result == mforms.ResultOther:
        return -1

これをhello_world_grt.pyとかに保存して、MySQL Workbenchからインストールするとこんな感じになります。

f:id:kenhys:20140508224846p:plain

実行してみましょう。

f:id:kenhys:20140508224850p:plain

きちんとダイアログを表示でき、ボタンを選択すると終了します。

おわりに

MySQL Workbenchではmformsというのが用意されていて、GUI部品もPythonであれこれ叩けるようになっているみたいです。便利そうな気がしてきましたね。

ちなみに、mysql-workbenchを起動するときは、--log-to-stderrをつけておきましょう。プラグインが認識されないとかプラグインが動かないとか、実行したらエラーになるとかいろいろわかります。