NAME

Ssm::Db - ssm2対応 データベース関連モジュール

NOTES

  $Id: Ssm-Db1_25.html,v 1.2 2018/08/12 23:34:55 sugu Exp $
  Please do 'perldoc -t Ssm::Common' if you get MOJIBAKE.


SYNOPSIS

  <SSM FUNCTION="Ssm::Db::getvalue" 
     MODE="begin" 
     TABLE="CONTACT" 
     CONDCOLUMN="keycolumn" 
     COND_INPUT_NAME="key">
  <P>keycolumn の 値は %_keycolumn_% です。</P>
  <SSM MODE="end">
  etc...
  ミドルウェアSSM用のデータベース関連モジュールです。対応しているのは ssm2 です。
  主として、テンプレート中のSSMタグで指定し、データベース内のデータを表示するのに使用します。


DESCRIPTION

関数内では、ssm2(実行ファイル)で定義するパッケージ main または Ssm::Config 内の変数を使用します。

sub db_disconnect() (SSM内部使用関数)

機能
コネクションが切断された時のデータベース接続ハンドリングを指定

引数
なし

戻り値
なし

sub getlist($$$)

機能
データベースの指定したテーブル(またはビュー)から値を引き出し、 リストを書き出す関数。 セレクタやラジオボタンなどの書き出しを想定している。

引数
SSMタグで挟まれた文字列, クエリーオブジェクトへの参照, SSMタグ属性値の入ったハッシュへの参照

戻り値
1

指定できるSSMタグ属性
TABLE
  データを選択するテーブル名またはビュー名。必須属性。
  以下のようにクエリー内で使用される。
  SLECT [COLUMNS] from [TABLE] (条件式)
COLUMNS
  データを選択するテーブルまたはビュー内のカラム名。必須属性。
  以下のようにクエリー内で使用される。
  SLECT [COLUMNS] from [TABLE] (条件式)
  カンマ区切で複数指定可。クエリー内でそのままの文字列が使用される。
COND
  クエリーの条件がある場合に、WHERE 句から指定する。非必須。
PARSE_SELECTED
  書き出すリストがセレクタ(<OPTION>)、ラジオボタン、チェックボックスの
  いずれかの場合に、送信されたフォーム項目の内容をデフォルトの
  選択状態として反映させるかを指定。非必須。
  (反映させる場合、SSMタグに挟む文字列に、
    一定の文字列を指定しておく必要がある。
    詳細は「機能」の項の指定方法を参照。)
真の値
選択状態を反映

指定しないか、または偽の値(0または空文字列)
反映させない

SELECTNAME
  書き出すリストがセレクタ(<OPTION>)の場合で、かつ、
  送信されたフォーム項目の内容をデフォルトの選択状態として
  反映させる場合(PARSE_SELECTEDに真の値を指定した場合)に、
  そのセレクタ名を指定。
  PARSE_SELECTEDに真の値を指定した場合は必須属性。
  指定しないと、PARSE_SELECTEDに真の値を指定しても
  選択状態は反映されない。
NEWCONN
  真の値を指定すれば、関数が呼ばれた時に毎回新しい接続を作成して処理を行い、処理が終了したら接続を切断する。
  指定しないか偽の値を指定すれば、同一セッション内で作成された接続があればそれを使用して処理を行う。
HIDE_ERROR
データベース接続エラーの際のエラーメッセージの表示設定。非必須。
指定しないか、または偽の値(0または空文字列)
HTMLページ上に表示

``1''を指定
HTMLのコメントとして出力

``2''を指定
標準エラーに出力

上記以外すべて
何もしない

RESULTVALUE
  RESULTVALUE属性を指定すると、結果出力を名前が __(指定された文字列)__ のクエリ変数に格納する。
  (名前は、指定された文字列の前後にアンダースコア2つずつ。)
  指定しなければ、標準出力に print する(標準の動作)。
  非必須。
セレクタリストを書き出す例(選択状態を反映させる)
  <SELECT NAME="contact_group_id">
  <SSM FUNCTION="getlist" MODE="begin" 
    TABLE="CONTACT_GROUP" 
    COLUMNS="contact_group_id,description" 
    PARSE_SELECTED="1" 
    COND="WHERE mode=1" 
    SELECTNAME="contact_group_id">
  <OPTION VALUE="%_contact_group_id_%" %_selected_%>%_description_%</OPTION>
  <SSM MODE="end">
  </SELECT>

文字列 %_selected_% は、選択状態を反映させるときに、「selected」という 文字列と置換させる位置に指定しておく。

PARSE_SELECTEDを指定しなかった場合に文字列 %_selected_% が指定してあっても、 エラーにはなない。

ラジオボタンを書き出す例(選択状態を反映させる)
  <SSM FUNCTION="getlist" MODE="begin" 
    TABLE="URGENCY" 
    COLUMNS="urgency_id,description" 
    PARSE_SELECTED="1">
  <INPUT TYPE="radio" NAME="urgency_id" VALUE="%_urgency_id_%" %_selected_%> %_description_% 
  <SSM MODE="end">

文字列 %_selected_% は、選択状態を反映させるときに、「checked」という 文字列と置換させる位置に指定しておく。

PARSE_SELECTEDを指定しなかった場合に文字列 %_selected_% が指定してあっても、 エラーにはなない。

チェックボックスを書き出す例(選択状態を反映させない)
  <SSM FUNCTION="getlist" MODE="begin" 
    TABLE="GROUP_MASTER" 
    COLUMNS="group_id,group_name"
    HIDE_ERROR="2"> 
  <input type="checkbox" name="group_id" value="%_group_id_%" %_selected_%>
  [%_group_id_%] %_group_name_% 
  <SSM MODE="end"> 

文字列 %_selected_% は、選択状態を反映させるときに、「checked」という 文字列と置換させる位置に指定しておく。

PARSE_SELECTEDを指定しなかった場合に文字列 %_selected_% が指定してあっても、 エラーにはなない。

sub getvalue($$$)

機能
データベースの指定したテーブル(またはビュー)から値を引き出し、 リストを書き出す関数。

引き出す値(カラム)は、SSMタグで挟む文字列内に、'%_' と '_%' で挟んで指定する。

'%_' と '_%' で挟まれた文字列と同一のカラム名がない場合、エラーとなる。

指定された条件で複数のローが検索された場合、すべてのローの値を繰り返し書き出す。

引数
SSMタグで挟まれた文字列, クエリーオブジェクトへの参照, SSMタグ属性値の入ったハッシュへの参照

戻り値
1

指定できるSSMタグ属性
TABLE
  データを選択するテーブル名またはビュー名。必須属性。
  以下のようにクエリー内で使用される。
  SLECT (カラム名) from [TABLE] (条件式)
COND
  クエリーの条件がある場合に、WHERE 句から指定する。非必須。
  CONDCOLUMN も指定してある場合、CONDCOLUMN によって指定される
  条件全体との AND 検索となる。
CONDCOLUMN
  COND以外に、送信された値を条件式を指定したい場合に、
  条件にするカラム名を指定する。非必須。
  複数指定不可。
  COND_INPUT_NAME が指定されていた場合は、その指定された名前(NAME)の
  送信値が、指定されていなければ、CONDCOLUMN と同じ名前の送信値が
  条件として使用される。
  送信値が複数ある場合は、OR 検索となる。
  COND も指定してある場合、COND の条件との AND 検索となる。
COND_INPUT_NAME
  CONDCOLUMN を指定した時に、CONDCOLUMN 以外の名前の送信値を条件として
  使用する場合にその名前(NAME)を指定する。非必須。
NEWCONN
  真の値を指定すれば、関数が呼ばれた時に毎回新しい接続を作成して処理を行い、処理が終了したら接続を切断する。
  指定しないか偽の値を指定すれば、同一セッション内で作成された接続があればそれを使用して処理を行う。
HIDE_ERROR
データベース接続エラーの際のエラーメッセージの表示設定。非必須。
指定しないか、または偽の値(0または空文字列)
HTMLページ上に表示

``1''を指定
HTMLのコメントとして出力

``2''を指定
標準エラーに出力

上記以外すべて
何もしない

RESULTVALUE
  RESULTVALUE属性を指定すると、結果出力を名前が __(指定された文字列)__ のクエリ変数に格納する。
  (名前は、指定された文字列の前後にアンダースコア2つずつ。)
  指定しなければ、標準出力に print する(標準の動作)。
  非必須。
指定例
  <TABLE>
  <SSM FUNCTION="getvalue" MODE="begin" 
    TABLE="userdata" 
    COND="mode=1" 
    CONDCOLUMN="login_id" 
    COND_INPUT_NAME="target_id" 
    HIDE_ERROR="2">
  <TR>
  <TD>%_login_id_%</TD>
  <TD>%_name_%</TD>
  <TD>%_company_%</TD>
  <TD>%_address_%</TD>
  </TR>
  <SSM MODE="end">
  </TABLE>
SQL文への展開
上記「指定例」のように指定した場合、以下のSQL文が実行される。 (target_id として、1 と 2 が送られているとする。)
  SELECT login_id, name, company, address 
  FROM userdata 
  WHERE mode=1 AND
  (login_id = 1 OR login_id = 2)

sub prepare_table_value($$$)

機能
データベースの指定したテーブル(またはビュー)から値を引き出し、 その値をクエリーオブジェクト内に代入する。

COLUMNSで指定したカラム名が指定したテーブル(またはビュー)上に無い場合、エラーとなる。

指定された条件で複数のローが検索された場合、 最初のローの値のみをクエリーオブジェクト内に代入する。

通常は、1件のみ検索されることが想定される条件を指定し、 指定した条件の値をページ上に表示する目的で使用することを想定している。

複数のSSMタグを指定することにより、 1つのページ内で表示する値を複数のテーブル(またはビュー)から選択 することができる。

1つのページ内で表示する値を1つのテーブル(またはビュー)から取得出来る場合は、 getvalue()を代わりに使用することができる。

引数
SSMタグで挟まれた文字列, クエリーオブジェクトへの参照, SSMタグ属性値の入ったハッシュへの参照

戻り値
1 + (指定された条件で検索されたデータ件数)

指定できるSSMタグ属性
TABLE
  データを選択するテーブル名またはビュー名。必須属性。
  以下のようにクエリー内で使用される。
  SLECT [COLUMNS] from [TABLE] (条件式)
COLUMNS
  データを選択するテーブルまたはビューのカラム名。非必須。
  以下のようにクエリー内で使用される。
  SLECT [COLUMNS] from [TABLE] (条件式)
  カンマ区切で複数指定可。クエリー内でそのままの文字列が使用される。
  指定しない場合、すべてのカラム(*)が選択対象となる。
COND
  クエリーの条件がある場合に、WHERE 句から指定する。非必須。
  CONDCOLUMN も指定してある場合、CONDCOLUMN によって指定される
  条件全体との AND 検索となる。
CONDCOLUMN
  COND以外に、送信された値を条件式を指定したい場合に、
  条件にするカラム名を指定する。非必須。
  複数指定不可。
  COND_INPUT_NAME が指定されていた場合は、その指定された名前(NAME)の
  送信値が、指定されていなければ、CONDCOLUMN と同じ名前の送信値が
  条件として使用される。
  送信値が複数ある場合は、OR 検索となる。
  COND も指定してある場合、COND の条件との AND 検索となる。
COND_INPUT_NAME
  CONDCOLUMN を指定した時に、CONDCOLUMN 以外の名前の送信値を条件として
  使用する場合にその名前(NAME)を指定する。非必須。
NEWCONN
  真の値を指定すれば、関数が呼ばれた時に毎回新しい接続を作成して処理を行い、処理が終了したら接続を切断する。
  指定しないか偽の値を指定すれば、同一セッション内で作成された接続があればそれを使用して処理を行う。
HIDE_ERROR
データベース接続エラーの際のエラーメッセージの表示設定。非必須。
指定しないか、または偽の値(0または空文字列)
HTMLページ上に表示

``1''を指定
HTMLのコメントとして出力

``2''を指定
標準エラーに出力

上記以外すべて
何もしない

FORMAT
出力の形式を指定する。非必須。
html
文字列の中のHTML特殊文字のエンティティへの変換を行う

上記以外、および無指定
文字列の変換を行わない

指定例
  <SSM FUNCTION="prepare_table_value" MODE="begin" 
    TABLE="PERSONAL_DATA" 
    COND="WHERE mode = 0" 
    CONDCOLUMN="login_id"
    COLUMNS="name">
  <SSM MODE="end">
  <SSM FUNCTION="prepare_table_value" MODE="begin" 
    TABLE="LOGIN_MASTER" 
    COND="WHERE mode = 0" 
    CONDCOLUMN="login_id" 
    COLUMNS="login_name">
  <SSM MODE="end">
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  <HTML>
  ...(略)
  <BODY>
  <SSM ACTION="once" FUNCTION="Ssm::Common::printvalue" MODE="begin">
  <FORM ACTION="next.cgi" METHOD="post">
  <input type="hidden" name="login_id" value="%_login_id_%">
  <input type="hidden" name="login_name" value="%_login_name_%">
  <input type="hidden" name="name" value="%_name_%">
  </FORM>
  <SSM MODE="end">

sub get_dbh()

機能
DBIモジュールを使用しデータベースに接続し、ハンドラの参照を返す。 実行中のユーザ関数が含まれるパッケージ内で既存のハンドラがあれば、新たな接続は行わず、既存のハンドラの参照を返す。

引数
数値 (省略可能。真の値を与えると、常に新しい接続を作成する。)

戻り値
DBIデータベースハンドラの参照。 接続に失敗した場合、 undef を返す。

sub gen_unique_key($number)

機能
引数で指定された桁数(=バイト数)のランダムな文字列を返す。 HTMLのエンティティ変換が不要、および、SQL文中でのエスケープが不要な範囲の文字列のみを使用。

引数が 5〜30 の範囲で無い場合、15桁の文字列を返す。

引数
数値 (省略可能。範囲 = 5〜30。デフォルト = 15。)

戻り値
文字列

sub postgres_escape($)

機能
引数のシングルクオート、\マーク(バックスラッシュ)をエスケープする。 エスケープした文字列を返す。

正規表現の検索文字列を作成する時など、DBI モジュールで提供する quote 関数が使えない場合の使用を想定。

引数
文字列

戻り値
文字列


AUTHOR

  Miyabiko INOUE <miy@web-ware.org>
  バグ等の御連絡は mailto:miy@web-ware.org までお願いいたします。


COPYRIGHT

  Copyright (c) Miyabiko INOUE <miy@web-ware.org>.
  All rights reserved.
  このモジュールは無償でご利用いただけます。
  改変、再配布などの使用許諾に関しては、Perl の Artistic License を適用します。
  This program is free software; you can redistribute it
  and/or modify it under Perl Artistic License.


NOTES

  Further information: http://www.web-ware.org/


SEE ALSO

perl(1).