« August 2009 | Main | February 2010 »

Saturday, October 17, 2009

ErlangからMySQLにODBC接続する

ErlangにはMySQLに繋げる方法はいくつかあるけれど,ODBC経由で利用する方法を試してみた.

直接ドライバで繋げる場合はこの辺が使えるかもしれない.
http://yarivsblog.com/articles/2006/09/13/erlang-mysql-driver-reloaded/
http://code.google.com/p/erlang-mysql-driver/

ただ,この辺を使うとライセンス的になんか言われそうなのが微妙.
プロトコルにはGPLライセンスは影響しないはずだが,MySQL側は以下のようなことを言っているようだ.

それでもMySQLを使いますか?より


これがGPLプロトコルであるので、MySQLサーバーに接続するかあるいはMySQLサーバーをエミュレートするためにそれを用いるすべての製品、あるいはプロトコルを用いるか、任意の同様の目的のために、GPLによって拘束されるすべてのクライアントとサーバーの間に間に入るために。
したがって、プログラムを書くためにこの記述を用いる場合、GPLとしてプログラムをリリースしなければなりません。

Erlangには標準でODBCのモジュールがあり,これを使う場合はおそらくセーフだとわたしは思うので,ライセンス的にはこちらの方が安全だと思う.


ODBCモジュールを使う場合は,以下のような構成になる.

・Erlangエミュレータプロセス(ユーザのコードはここで動く)
・ODBCドライバプロセス(odbcserverという名前のOS上のプロセスが別に作成される)
 - unixODBCライブラリを利用(LGPL)
  - MyODBC-unixODBCライブラリを利用(最新版のVer3系はGPL.Ver2系まではLGPL)

odbcserverプロセスはGPLの影響を受けるかもしれないけれど,Erlangエミュレータ自体は別プロセスであり,かつMyODBCと一体となって動くわけではないと言えると思うので,おそらく大丈夫じゃないかなぁ.
ErlangエミュレータとODBCドライバプロセスの間は,MySQL関係なく,汎用的なODBCを利用するための通信でしかないので.
(もちろん最終的には裁判でしか白黒は付かないんだろうけども.)

MyODBC-unixODBCをVer2系にすればGPLのものはないので,これならば確実に安全.

手元では,Ver3系の方でテストしてみた.


■ 使い方

● ErlangをODBCライブラリ付きでインストール

Erlangはインストール時にODBCライブラリがあるか確認し,あればODBCモジュールをインストールする.
このため,もしODBCモジュールが既に入っていない場合は,unixODBC(rpmなどで入れる場合はdevelパッケージも)をインストールした上で,Erlangをインストールし直す必要がある.

ODBCモジュールが入っているかは,erlシェルから以下のように確認できる.

1> application:start(odbc).
ok

上記のようにokがでればODBCモジュールが入っている.

● MyODBCのインストールと設定

MyODBC-unixODBCをrpmなどでインストールする.

その後,設定ファイルを作る.

/etc/unixODBC/odbc.ini は以下のような感じ

[myodbc]
Driver       = myodbcdriver
Description  = MySQL ODBC 3 Driver DSN
SERVER       = localhost
PORT         =
USER         = root
Password     =
Database     = test
OPTION       = 3
SOCKET       =

/etc/unixODBC/odbcinst.ini は以下のように.
Driverはmyodbcのライブラリのパスを指定する必要がある.

[myodbcdriver]
Description  = MySQL ODBC 3 Driver DSN
Driver       = /usr/lib64/unixODBC/libmyodbc3.so

● Erlangから使う

準備ができたら後は普通に使うだけ.

1> application:start(odbc).
ok
2> {ok, Ref} = odbc:connect("DSN=myodbc", []).
{ok,<0.39.0>}
3> odbc:sql_query(Ref, "SELECT now()").
{selected,["now()"],[{"2009-10-17 19:43:20"}]}
4> odbc:param_query(Ref, "SELECT ?, ?", [{sql_integer, [12]}, {{sql_varchar, 100}, ["12345"]}]).
{selected,["12","12345"],[{"12","12345"}]}

数字も文字列として返ってきてしまうようだけど,後は普通に使える.
1行ずつ取り出す方法などは,Erlang ODBC User's Guideにサンプルがあるので,そちらを読めばすぐわかると思う.

| | Comments (1) | TrackBack (0)

Wednesday, October 14, 2009

jQuery History プラグイン更新

Ajaxで履歴を使えるようにする jquery history plugin は,今まで IE8 でモードによってコードを少し変えないとうまく動かなかったのですが,serpereさんよりいい解決方法をいただきました.ありがとうございます.

Twitterでコメントもらってから少し時間が経ってしまいましたが(^^;,先ほどページの方を更新しました.
IE8でどのモードでもちゃんと動くようになりました.

また,BBSの方でIE6でhttps領域で使うとアラートがでる問題の解決方法もいただいたので,それも反映しました.

jquery history plugin

ページも英語だし,英語で連絡をいただくことが多いので,どうしても更新に時間がかかってしまい(^^;
excite翻訳とかで翻訳しながらの更新なのでなかなか.英語がもっとできたら良かったんですが...

| | Comments (1) | TrackBack (0)

« August 2009 | Main | February 2010 »