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側は以下のようなことを言っているようだ.
これが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にサンプルがあるので,そちらを読めばすぐわかると思う.
The comments to this entry are closed.
Comments
GPLのは元の話題が2005年なんですね。今は公式サイトから原文が見つからないぽいです。
そういえば知り合いがそんな心配をしており、僕は最初その話を聞いて「いやそんなわけないはず」と答えたのですが、MySQL側はマジなんですか。
びっくりして調べたのですが案外日本以外では反応が鈍く、
http://lists.debian.org/debian-legal/2005/10/msg00080.html
こっからのスレで一瞬議論されてた程度でした。「プロトコルそのものに著作権はない」「MPEGデコーダはMPEG仕様書の複製でも派生でもないでしょ」といった普通の反応で沈静化してます。
これが通ったら、GPLなHTTPdを作るだけで、IEやOperaを全部GPL汚染させられそうです。
「特許はアイディアや概念そのもの利用を保護し、著作権は文字や絵として具体的に固定された表現の複製や派生を保護する」という初歩的な理解から崩れそう。
Posted by: naruto | Sunday, October 18, 2009 02:32 AM