名前

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を
まだサポートしていません。