名前
Msql Perlアダプタ:
mSQLデータベースへのシンプルなPerlインターフェース
シノプシス
use Msql;
$dbh = Connect Msql;
$dbh = Connect Msql $host;
$dbh = Connect Msql $host, $database;
SelectDB $dbh $database;
$sth = ListFields $dbh $table;
$sth = Query $dbh $sql_statement;
@arr = ListDBs $dbh;
@arr = ListTables $dbh;
@arr = FetchRow $sth;
DataSeek $sth $row_number;
解説
このパッケージは、C APIの類似パッケージとできるだけ似せて作成してあ
ります。したがって、mSQLに添付されたマニュアルを参照すれば、必要な
情報が得られるはずです。
内的には、MsqlステートメントとMsql::ステートメントの2つのクラスを
扱うことになります。ただし、後者を見ることはありません。なぜならば、
クエリーまたはListFieldsステートメントが返したステートメント・ハン
ドルによって処理するからです。ユーザー自身が明示的に使用するのは、
Msqlだけです。これによって、Connectが使用できます。
$dbh = Connect Msql;
$dbh = Connect Msql $host;
$dbh = Connect Msql $host, $database;
上記のConnectコマンドによって、希望するホストまたはデータベースに
接続します。引数を指定しない場合、あるいは、最初の引数が空白文字
であった場合、UNIXソケットの/dev/msqlに接続します。これによって、
処理速度が大幅に上がります。第2の引数としてデータベース名を指定
すると、指定したデータベースが選択されます。接続が正常に実行される
と、リターン値として、データベース・ハンドルが返されます。接続が
失敗すると、リターン値はundefとなります。
さらにデータベースにアクセスするには、このハンドルが必要とされ
ます。複数のConnectステートメントを発行することができます。
SelectDB $dbh $database;
Connectコマンドにデータベースを指定していない場合、あるいは、前の
接続によって得られたデータベース・ハンドルを使用して別のデータベー
スに接続したい場合、SelectDBを使ってください。
$sth = ListFields $dbh $table;
$sth = Query $dbh $sql_statement;
mSQLマニュアルに解説してある通り、上記の2つは同じような処理を実行
します。これらによって返されたステートメント・ハンドルによって、
ユーザーはサーバーでの処理を実行できます。エラーの場合、リターン
値はundefとなります。
@arr = ListDBs $dbh;
@arr = ListTables $dbh;
詳細情報は含まないで、リクエストした名前が配列で返されます。
@arr = FetchRow $sth;
サーバーから得た次行の値が配列で返されます。
DataSeek $sth $row_number;
ステートメント・ハンドルに関連したデータについて、特定のオフセッ
トを指定できます。次のFetchRowは、適切な行を返します。(最初の
行は0です。)
No closeステートメント
データベース・ハンドルまたはステートメント・ハンドルを記録した
スケーラーが値を失った場合、Msqlは適切な処理を実行します(処理
結果を無効にして、データベースの接続を解除します)。したがって、
処理結果を無効にしたり、接続を解除したい場合には、次のいずれかを
行ってください。
ハンドルの値をundefにする。
ハンドルを別の目的に使う。
ブロック内のハンドルを使って、自分の()で宣言する。
プログラムを終了する。
メタデータ
メタデータを考慮に入れて、上記の方法を考え直してみましょう。
データベース・ハンドル
上記で解説したとおり、次のステートメントでデータベース・ハンド
ルが返されます。
$dbh = Connect Msql $host, $database;
データベース・ハンドルには、接続したソケット、ホスト、データ
ベースの情報が含まれています。
こうして、3つの値が返されています。
$scalar = $dbh->sock;
$scalar = $dbh->host;
$scalar = $dbh->database;
引数を指定していなかった場合、たった1つだけを指定していた場合、
リターン値はundefとなります。
ステートメント・ハンドル
次の2つの構築方法で、ステートメント・ハンドルが返されます。
$sth = ListFields $dbh $table;
$sth = Query $dbh $sql_statement;
$sthにはAPIによって提供されるすべてのメタデータが含まれます。
$scalar = $sth->数値行;
$scalar = $sth->数値フィールド;
$arrref = $sth->テーブル; 各列
のテーブル名です。
$arrref = $sth->名前; 列の名前です。
各カラムのタイプで、msql.hに定義します。次のものでアクセス可能。
&Msql::CHAR_TYPE,
&Msql::INT_TYPE,
&Msql::REAL_TYPE,
$arrref = $sth->ヌル値は認めません; ブーレアン演算子の配列です。
$arrref = $sth->主キーです。ブーレアン演算子の配列です。
$arrref = $sth->長さ; 各フィールドの長さをバイトで表した値の配列です。
-wスィッチ
Msqlでは、-wスィッチを大いに活用できます! -wスィッチを指定して
Perlプログラムを実行した場合、STDERRの$Msql::db_errstrに通常は保存
される警告メッセージがユーザーに出力されます。これによって、プログ
ラムにコーディングすることなく、msqlサーバーから簡単にエラー・メッ
セージを表示させることができます。処理状況について詳細メッセージを
出力させたい場合は、環境変数を設定してください。環境変数について
は、デビッドのマニュアルに解説されています。デバッグに関するデビッ
ドの資料は優れているので、ここで補足すべき事項はありません。
-wスィッチを使う一方で、msqlデーモンからのエラー・メッセージは
表示させたくない場合は、$Msql::QUIET変数を設定して無表示に
指定することができます。
必要条件
mSQLは、デビッド・ヒューイ(bambi@Bond.edu.au)が開発した
libmsql.aライブラリです。入手するには、ftp://Bond.edu.au/pub/
Minerva/msqlにアクセスしてください。
このアダプターを使用するには、上記のライブラリをまずインストール
する必要があります。
作者
アンドレア・コーニング
koenig@franz.ww.TU-Berlin.DE
バグ
Msqlは、ティム・バンスのデータベース・インターフェースDBIを
まだサポートしていません。