[[コネクションクラス]]を拡張するためのモジュール

$(apollo)/lib/rdb/rdb.rb で定義されている。

----

 require 'phi'
 require "rdb/rdb"
 require "methods_for_wiki"
 puts RDB::Connection_ex.methods_for_wiki

!!! execute_ex ( *args )

各コネクションクラスの execute メソッドを呼び出すが、例外が生成したときに実行内容をエラーメッセージに追加して表示する。

!!! internal_query ( *args ){| query | .. }

内部的に用意された[[クエリクラス]]のオブジェクトをブロック引数に送って実行する。ブロック終了時にはクエリオブジェクトは close される。

args は各クエリクラスの open メソッドに送られる。

作成されるクエリオブジェクトは、各コネクションクラスの [[new_queryメソッド]]が返したオブジェクト。

!!! internal_table ( table_name=nil ){| table | .. }

内部的に用意された[[テーブルクラス]]のオブジェクトをブロック引数に送って実行する。ブロック終了時にはテーブルオブジェクトは close される。

作成されるクエリオブジェクトは、各コネクションクラスの [[new_tableメソッド]]が返したオブジェクト。

!!! lookup ( what, from, where, params=[] )

internal_query を使って[[データセット]]を取り出し、そのデータセットの最初の[[行]]の最初の[[項目]]の値を返す。

引数:

what は項目名、

from は[[テーブル]]名

where は[[SQLの条件句]]

params は[[SQLパラメータ]]の値の配列。

説明:

"SELECT #{what} FROM #{from} WHERE #{where}"

といったSQL文を作成して、openしてデータセットを取り出す。

利用例:

名前に対応したidを取り出すといった簡単な作業を行うのに便利。

  id = DB.lookup( "id", "apollo-users", "name=:name",["たけ(tk)"])

合計値を取り出す場合

  sum = DB.lookup "SUM(budget)", "department", "head_dept='#{val}'"

カウンタを取り出す場合

  sid = DB.lookup "GEN_ID(#{gen_name},1)", "dummy_for_gen", nil

などにも使える。

!!! rec_count ( from, where=nil, mark='*' )

指定されたテーブルのレコード数を返す。

where が指定された場合には、その条件にマッチするレコード数を返す。

mark は別の形での条件を指定する。

* "*" であれば NULL を含んだすべてのレコード数を返す。
* 'ALL' であれば NULL 以外のレコード数を返す。
* 'DISTINCT' であれば重複を取り除き、NULLを除外したレコード数を返す。

内部処理:

 lookup( "COUNT(#{mark})" , from, where )

と同じ。

!!! rec_exist? ( from, where=nil )

指定された条件にマッチする行があるかどうかを返す。

内部処理:

 rec_count(from, where) != 0

と同じ。

!!! select ( what, from, where, params=[] )

"SELECT #{what} FROM #{from} WHERE #{where}" というSQL文を作成し、オープンして、データセットを取り出し、ハッシュの配列にして返す。(データセットを返すのでないことに注意)。

!!! table_create ( table_name, col_def )

"CREATE TABLE #{table_name} ( #{col_def} )" というSQL文を実行するのとほぼ同じ。

!!! table_drop ( table_name )

テーブルを削除する。

!!! table_exist? ( table_name )

テーブルがあるかどうかを返す。

!!! table_recreate ( table_name, col_def )

テーブルを削除して作りなおす。

!!! transaction { .. }

ブロック内で[[トランザクション]]を実行する。

ブロック終了時にトランザクション実行中(in_transaction)である場合にはcommitする。

ブロック内で例外が生成された場合には rollback する。

----