MySQL/Ruby
[English]
これは MySQL の Ruby API です。MySQL の C API とほぼ同等の機能があります。
必要なもの
- MySQL 3.23.58以上
- Ruby 1.6.8 以上
これら以外でも make できるかもしれませんが、確認してません。
ライセンス
このプログラムは Ruby ライセンス に従います。
インストール
次を実行してください。
% ruby extconf.rb
または
% ruby extconf.rb --with-mysql-dir=/usr/local/mysql
または
% ruby extconf.rb --with-mysql-config
それから
% make
extconf.rb には次のオプションを指定できます。
- --with-mysql-include=dir
-
MySQL のへッダファイルの場所として /usr/local/include の代わりのディレクトリを指定します。
- --with-mysql-lib=dir
-
MySQL のライブラリの場所として /usr/local/lib の代わりのディレクトリを指定します。
- --with-mysql-dir=dir
- --with-mysql-include=dir/include, --with-mysql-lib=dir/lib と同じです。
- --with-mysql-config[=/path/to/mysql_config]
- mysql_config コマンドの結果からコンパイルパラメータを得ます。
次で簡単なテストができます。
% ruby -I. ./test.rb hostname user passwd
test.rb に与える hostname, user, passwd は MySQL サーバと、そのサーバ上でデータベースを作成することができるユーザ/パスワードを指定してください。
問題なければ、スーパーユーザでインストールしてください。
# make install
注意
テスト時にライブラリ libmysqlclient が見つからないというエラーが出る場合は、make 時にライブラリの場所を指定する必要があります。次のようにして make してみてください。
% env LD_RUN_PATH=libmysqlclient.soの場所 make
使い方
メソッド名は C API の関数から mysql_ 接頭辞を除いたものと同じです。メソッドの使用方法も基本的に対応する C API 関数と同様ですので、詳細は MySQL のマニュアルを見てください。
メソッド中でエラーが発生した場合は Mysql::Error 例外が発生します。
特に意味のある値を返さない関数は self を返します。
Mysql クラス
MySQL を操作するためのクラスです。
クラスメソッド
- init()
-
Mysql クラスオブジェクトを返します。mysqld に接続はしません。
Mysql#options() が必要な場合は、これを呼んだ後に行ないます。
- real_connect(host=nil, user=nil, passwd=nil, db=nil, port=nil, sock=nil, flag=nil)
- connect(host=nil, user=nil, passwd=nil, db=nil, port=nil, sock=nil, flag=nil)
- new(host=nil, user=nil, passwd=nil, db=nil, port=nil, sock=nil, flag=nil)
-
mysqld に接続し、Mysql クラスオブジェクトを返します。
flag の定数は C API のものと同じです。
例) Mysql::CLIENT_FOUND_ROWS
- escape_string(str)
- quote(str)
-
insert, update 用に文字列をクオートします。
- get_client_info()
- client_info()
-
クライアントバージョン情報の文字列を返します。
- get_client_version()
- client_version()
-
クライアントバージョン情報を数値で返します。
- debug(str)
-
C API mysql_debug() と同じ。
オブジェクトメソッド
- options(opt, val=nil)
-
C API の mysql_options() と同じです。
opt に指定する定数は C API から MYSQL_ 接頭辞を取り除いたものです。
例) Mysql::OPT_CONNECT_TIMEOUT
- real_connect(host=nil, user=nil, passwd=nil, db=nil, port=nil, sock=nil, flag=nil)
- connect(host=nil, user=nil, passwd=nil, db=nil, port=nil, sock=nil, flag=nil)
-
Mysql::real_connect() と同じです。Mysql::init() で生成したオブジェクトをサーバに接続するために使用します。
- affected_rows()
-
影響された行数を返します。
- autocommit(mode)
-
autocommit モードを mode に設定します。mode が nil, false, 0 の時はオフ、それ以外の場合はオンです。
- change_user(user=nil, passwd=nil, db=nil)
-
接続ユーザを変更します。
- character_set_name()
-
現在の文字セットを返します。
- close()
-
接続を切断します。
- commit()
-
トランザクションをコミットします。
- create_db(db)
-
データベースを作成します。
- drop_db(db)
-
データベースを破棄します。
- dump_debug_info()
-
C API mysql_dump_debug_info() と同じ。
- errno()
-
エラー番号を返します。
- error()
-
エラーメッセージを返します。
- escape_string(str)
- quote(str)
-
insert, update 用に文字列をクオートします。
C API の mysql_real_escape_string() と同じ。
- field_count()
-
最後に実行されたクエリの項目数を返します。
- get_client_info()
- client_info()
-
クライアントバージョン情報の文字列を返します。
- get_client_version()
- client_version()
-
クライアントバージョン情報を数値で返します。
- get_host_info()
- host_info()
-
接続情報を文字列で返します。
- get_proto_info()
- proto_info()
-
接続プロトコルバージョンを数値で返します。
- get_server_info()
- server_info()
-
サーバのバージョン情報を文字列で返します。
- get_server_version()
- server_version()
-
サーバのバージョン情報を数値で返します。
- info()
-
直前のクエリの情報を文字列で返します。特に情報がなければ nil が返ります。
- insert_id()
-
最後に生成された AUTO_INCREMENT 項目の値を返します。
- kill(id)
-
id で指定したスレッドを殺します。
- list_dbs(db=nil)
-
データベースの一覧を配列で返します。
- list_fields(table, field=nil)
-
テーブル内の項目情報の一覧を示す Mysql::Result クラスオブジェクトを返します。
- list_processes()
-
サーバ上の現在のスレッドの一覧を示す Mysql::Result クラスオブジェクトを返します。
- list_tables(table=nil)
-
テーブルの一覧を配列で返します。
- ping()
-
サーバが生きているかどうかをチェックします。
- query(q)
-
クエリを実行します。Ruby では文字列の長さを判断できるので、real_query() はありません。
クエリが結果を返す場合、自動的に store_result() も実行して、Mysql::Result クラスオブジェクトを返します。
query_with_result に false が設定されていれば、store_result() は実行しません。
- refresh(r)
-
サーバのログやキャッシュ等をフラッシュします。
- reload()
-
アクセス権テーブルを再読み込みします。
- rollback()
-
トランザクションをロールバックします。
- select_db(db)
-
データベースを選択します。
- shutdown()
-
サーバを停止します。
- stat()
-
サーバの状態を文字列で返します。
- store_result()
-
クエリの結果の Mysql::Result クラスオブジェクトを返します。
- thread_id()
-
現在の接続のスレッドIDを返します。
- use_result()
-
クエリの結果の Mysql::Result クラスオブジェクトを返します。
- warning_count()
-
直前のクエリの警告数を返します。
オブジェクト変数
- query_with_result
-
true に設定すると query() 時に store_result() も実行して、Mysql::Result クラスオブジェクトを返します。
false に設定するとその動作は行われません。デフォルトは true です。
Mysql::Result クラス
クエリ結果のクラスです。
オブジェクトメソッド
- free()
-
結果テーブル用メモリを解放します。
- data_seek(offset)
-
現在の行の位置を offset 番目の行にします。
- fetch_field()
-
現在の項目の Mysql::Field クラスオブジェクトを返します。
次に呼ばれた時は次の項目を返します。
- fetch_fields()
-
項目全体を表す Mysql::Field クラスオブジェクトの配列を返します。
- fetch_field_direct(fieldnr)
-
fieldnr 番目の項目の Mysql::Field クラスオブジェクトを返します。
- fetch_lengths()
-
現在の行の各項目値の長さの配列を返します。
- fetch_row()
-
検索結果の1行を返します。次に呼ばれた時は次の行を返します。
戻り値は項目値の配列です。
- fetch_hash(with_table=false)
-
検索結果の1行を返します。次に呼ばれた時は次の行を返します。
戻り値は項目名をキーとした項目値のハッシュです。
with_table が true の場合はキーにテーブル名も付加され、"テーブル名.項目名" という形式のキーになります。
- field_seek(offset)
-
現在の項目位置を offset 番目の項目にします。
- field_tell()
-
現在の項目の位置を返します。
- num_fields()
-
項目数を返します。
- num_rows()
-
検索件数を返します。
- row_seek(offset)
-
現在の行の位置を設定します。
offset は内部表現で row_tell() が返した値です。
- row_tell()
-
現在の行の位置を内部表現で返します。
イテレータ
- each() {|x| 〜}
-
検索結果の各行ごとに {〜} を繰り返します。x は項目値の配列です。
- each_hash(with_table=false) {|x| 〜}
-
検索結果の各行ごとに {〜} を繰り返します。
x は項目名をキーとした項目値のハッシュです。
with_table が true の場合はキーにテーブル名も付加され、"テーブル名.項目名" という形式のキーになります。
Mysql::Field クラス
項目の詳細を表すクラスです。C API と異なり、オブジェクトは Mysql::Result とは独立して存在するので、Mysql::Result クラスオブジェクトが解放された後でも利用できます。が、そのため C API よりもメモリを使用します。
オブジェクト変数(読み出しのみ)
- name
- 項目名
- table
- テーブル名
- def
- デフォルト値
- type
- 項目の型
- length
- 項目の長さ
- max_length
- 検索結果中の項目値の最大長
- flags
- フラグ
- decimals
- 小数部桁数
type に対応する定数は C API のものから FIELD_ 接頭辞を除いたものです。
例) Mysql::Field::TYPE_STRING
flag に対応する定数は C API のものと同じです。
例) Mysql::Field::BLOB_FLAG
オブジェクトメソッド
- hash()
-
上記の変数名をキーとするハッシュを返します。
例) obj.name == obj.hash['name']
- is_not_null?()
-
フィールドが "NOT NULL" と定義されていれば真を返します。
- is_num?()
-
フィールドが数値の場合は真を返します。
- is_pri_key?()
-
フィールドがプライマリキーの場合は真を返します。
- inspect()
-
文字列 "#<Mysql::Field:項目名>" を返します。
Mysql::Error クラス
MySQL のエラーを表わすクラスです。
MySQL のエラーが発生した場合に例外として生成されます。
オブジェクト変数(読み出しのみ)
- error
- エラーメッセージ
- errno
- エラー番号
errno に対応する定数は C API のものと同じです。
例) Mysql::Error::CR_UNKNOWN_HOST
履歴
- 2004-08-23
-
version 2.5
- MySQL 4.1.x 対応
- MysqlRes, MysqlField, MysqlError を Mysql::Result, Mysql::Field,
Mysql::Error に変更。
- Mysql.client_version(), Mysql.get_client_version(),
Mysql#client_version(), Mysql#get_client_version(),
Mysql#server_version(), Mysql#get_server_version(),
Mysql#warning_count(), Mysql#commit(), Mysql#rollback(),
Mysql#autocommit() 追加。
- Mysql::Field#is_not_null?(), Mysql::Field#is_pri_key?(),
Mysql::Field#is_num?() 追加。
- MysqlField::TYPE_VAR_STRING 追加。
- 2003-08-10
-
version 2.4.5
- extconf.rb: MySQL 4.1 対応。
- mysql.c.in: Ruby 1.8 対応。
- 2003-02-23
-
version 2.4.4a
- extconf.rb の Ruby 1.8.0 対応。
- 2003-01-29
-
version 2.4.4
- Mysql::OPT_LOCAL_INFILE を追加。
- extconf.rb に --with-mysql-config オプションを追加
- extconf.rb 時に主なライブラリを自動検出するようにした。
- 2003-01-05
-
version 2.4.3c
- 英語の README の改版。Paul DuBois に感謝。
- 2002-12-24
-
version 2.4.3b
- extconf.rb の Ruby 1.6.8 対応。
- 2002-11-07
-
version 2.4.3a
- 2002-09-10
-
version 2.4.3
- ER_ で始まるエラー定数にも対応した。
- errmsg.h と mysqld_error.h から自動的にエラー定数を取得するようにした。
- 2002-01-07
-
version 2.4.2
- MySQL 4.0 対応。
- uint を unsigned int に変更(mswin対応)。
- 2001-12-02
-
version 2.4.1
- 不要な extern を削除(Cygiwn対応)。
- extconf.rb のオプションを変更。
- 2001-10-12
-
version 2.4.0
- Ruby 1.7 に対応。
- Mysql::debug(), Mysql#change_user(), Mysql#character_set_name(),
Mysql#dump_debug_info() を追加。
- 2001-03-25
-
version 2.3.2a
- 2001-03-19
-
version 2.3.2
- 一定数(20回) MysqlRes オブジェクトを生成したら、強制的に GC するようにした。
- Mysql#escape_string(), Mysql#quote() は mysql_real_escape_string() を使用するようにした。
- 2000-09-02
-
version 2.3.1
- Mysql#initialize() を追加(Ruby 1.6 対応)。
- 2000-07-22
-
version 2.3.0
- MysqlRes#free() を追加。
- Mysql#initialize(), MysqlRes#initialize() を有効にした。
- true を返していたメソッドを、self を返すようにした。
- 2000-05-27
-
version 2.2.1a
- test.rb を引数でパラメータを指定できるようにした。
- 2000-05-10
-
version 2.2.1
- データベースからのデータを「汚染された」文字列に変更。
- テストスクリプト追加。
- 1999-09-28
-
version 2.2.0
- Mysql::init(), Mysql#options(), Mysql#real_connect() を追加。
- Mysql#field_count を追加。
- 1999-09-24
-
version 2.1.7
- MySQL 3.22.26 に対応。
- MysqlField#inspect() を追加。
- 1999-06-17
-
version 2.1.6
- 1999-06-12
-
version 2.1.5
- 1999-05-30
-
version 2.1.4
- 1999-04-13
-
version 2.1.3
- fetch_hash/each_hash の引数の数の定義が間違っていた。
- fetch_hash/each_hash に true を指定した時の項目名が欠けていた。
- NULL値の項目があると fetch_hash/each_hash の動きがおかしかった。
- 1999-02-01
-
version 2.1.2
- Mysql#refresh() と Mysql::REFRESH_* を追加。
- MySQL 3.21.xx にも対応(させたつもり…)。
- 1999-01-24
-
version 2.1.1
- MysqlError#error(), MysqlError#errno() を追加。
- MysqlError::CR_* を追加。
- 1999-01-17
-
version 2.1
- fetch_hash, each_hash を C ソースに移動。
- MysqlField#hash() を追加。
- escape_string, get_client_info をオブジェクトメソッドとしても使えるようにした。
- 1998-11-29
-
version 2.0.1
- fetch_hash, each_hash に with_table 引数を追加。
- やっぱり get_* メソッド名も C API と同じにした。
- mysql-compat.rb を alias で書き直した。
- Mysql の定数 CLIENT_* が MysqlField の定数になっていた。
- 1998-11-15
-
version 2.0
- メソッド名を C API と同じにした。
- C++ でも通るように書き直した。
- 1998-08-13
-
version 1.0
作者
e-mail: とみたまさひろ tommy@tmtm.org
http://tmtm.org
TOMITA Masahiro
Last modified: Mon Aug 30 00:09:11 JST 2004