diff options
| author | fukachan <fukachan> | 2003-03-14 02:57:43 +0000 |
|---|---|---|
| committer | fukachan <fukachan> | 2003-03-14 02:57:43 +0000 |
| commit | 0f6cc50e32bfcf4bd0d1d9dc29bf4d34e129a497 (patch) | |
| tree | 962b75d14fe1b35549de94ce8dd5bab12a812b8b /fml/doc/ja/tutorial/module/IO.sgml | |
| parent | ff84920668f5b09ee88af8b2910f44d0080684dd (diff) | |
| download | fml8-0f6cc50e32bfcf4bd0d1d9dc29bf4d34e129a497.tar.gz fml8-0f6cc50e32bfcf4bd0d1d9dc29bf4d34e129a497.tar.bz2 fml8-0f6cc50e32bfcf4bd0d1d9dc29bf4d34e129a497.zip | |
merge 01_RFC_SQL into tutorial/internals/
Diffstat (limited to 'fml/doc/ja/tutorial/module/IO.sgml')
| -rw-r--r-- | fml/doc/ja/tutorial/module/IO.sgml | 128 |
1 files changed, 125 insertions, 3 deletions
diff --git a/fml/doc/ja/tutorial/module/IO.sgml b/fml/doc/ja/tutorial/module/IO.sgml index ac2e070b..10592c7c 100644 --- a/fml/doc/ja/tutorial/module/IO.sgml +++ b/fml/doc/ja/tutorial/module/IO.sgml @@ -1,5 +1,5 @@ <!-- - $FML: IO::Adapter.sgml,v 1.7 2002/09/28 14:14:06 fukachan Exp $ + $FML: IO.sgml,v 1.1 2003/02/18 02:29:14 fukachan Exp $ --> <chapter id="module.io.adapter"> @@ -220,7 +220,8 @@ NIS/YP から group にあたるものを引っ張ってくるところだけが異なります。 </title> <para> -&fmldevel; の設定では .cf の中にSQL の設定を書いておきたいと思います。 +保守性をあげるためには、一箇所に設定をまとめておきたい。 +&fmldevel; の設定では .cf の中にSQL の設定を書いておきたい。 つまり一つの cf ファイルにいろいろ書けるようにしておきたい。 </para> @@ -228,7 +229,7 @@ NIS/YP から group にあたるものを引っ張ってくるところだけが異なります。 そこで、[mysql:members] (から終りまで、もしくは次の =head 文まで)の ブロックで、マップのタイプと識別子を表現しています。 <screen> -config.cf の例 +config.cf の記述例 member_maps = mysql:members @@ -269,6 +270,127 @@ FML::Config は .cf から上のようなハッシュを構成します。 FML::Config のオブジェクトを引数で渡せば OK です。 </para> + +<sect2> + <title> + 議論: + SQL 構文を config.cf に書くには? + (参照: fml-devel 204) + </title> + +<para> +関数が呼ばれた時に始めて決まる変数もあるので +cf で全部定義することはできない。 +そこで、lexical scope で取り扱われる変数の表現があれば解決だろうか? +現在では &varname 記法(下記)を使っている。 +</para> + +<para> +例: +以下は、受信者リストとメンバーリストが食い違う例なので、 +アドレスの登録をする際に、fml_recepient という値が異なる。 +その場合、member と recipient は少し異なる SQL 命令になるので +別々に定義する。 +off/on 命令を無視するとか、 +fml は sql からデータを読むだけで、 +書き込むことはしないなら、 +話は簡単になる。 +<screen> +member_maps = mysql:members + +recipient_maps = mysql:recipients + + +[mysql:members] + +sql_server = localhost +sql_user = fml +sql_password = uja +sql_database = fml +sql_table = ml + +sql_get_next_key = select fml_address from $sql_table + where fml_ml = '$ml_name' + and + fml_domain = '$ml_domain' + +sql_getline = select * from $sql_table + where fml_ml = '$ml_name' + and + fml_domain = '$ml_domain' + +sql_add = insert into $sql_table + values ('$ml_name', '$ml_domain', '&address', 1, 1) + +sql_delete = delete from $sql_table + where fml_ml = '$ml_name' + and + fml_domain = '$ml_domain' + and + fml_address = '&address' + +sql_find = select * from $sql_table + where fml_ml = '$ml_name' + and + fml_domain = '$ml_domain' + and + fml_address like '®exp' + + + +[mysql:recipients] + +sql_server = localhost +sql_user = fml +sql_password = uja +sql_database = fml +sql_table = ml + +sql_get_next_key = select fml_address from $sql_table + where fml_ml = '$ml_name' + and + fml_domain = '$ml_domain' + and + fml_recipient = '1' + +sql_getline = select * from $sql_table + where fml_ml = '$ml_name' + and + fml_domain = '$ml_domain' + and + fml_recipient = '1' + +sql_add = update ml + set recipient = 1 + where fml_ml = '$ml_name' + and + fml_domain = '$ml_domain' + and + fml_address = '&address' + +sql_delete = update ml + set recipient = 0 + where fml_ml = '$ml_name' + and + fml_domain = '$ml_domain' + and + fml_address = '&address' + + +sql_find = select * from $sql_table + where fml_ml = '$ml_name' + and + fml_domain = '$ml_domain' + and + fml_recipient = '1' + and + fml_address like '®exp' +</screen> +</para> + +</sect2> + + </sect1> |
