From 0f6cc50e32bfcf4bd0d1d9dc29bf4d34e129a497 Mon Sep 17 00:00:00 2001 From: fukachan Date: Fri, 14 Mar 2003 02:57:43 +0000 Subject: merge 01_RFC_SQL into tutorial/internals/ --- fml/doc/ja/01_RFC_SQL.txt | 119 ---------------------------------- fml/doc/ja/tutorial/module/IO.sgml | 128 ++++++++++++++++++++++++++++++++++++- 2 files changed, 125 insertions(+), 122 deletions(-) delete mode 100644 fml/doc/ja/01_RFC_SQL.txt diff --git a/fml/doc/ja/01_RFC_SQL.txt b/fml/doc/ja/01_RFC_SQL.txt deleted file mode 100644 index 4060213f..00000000 --- a/fml/doc/ja/01_RFC_SQL.txt +++ /dev/null @@ -1,119 +0,0 @@ -X-Sequence: fml-devel 204 - -Q: sql の設定を一つの cf ファイルに書けるようにしておきたい - -A1: グルーピングの表現 - - mysql:ID などと書いた時に、その ID でのグルーピングを表現でき - れば良い? じゃ .ini 形式か? :-) - -A2: SQL 構文も書けるようにしておけばよい? - - 関数が呼ばれた時に始めて決まる変数もあるので - cf で全部定義することはできない。 - - lexical scope で取り扱われる変数の表現があれば解決? - 例: &varname 記法(下記) - - 注: IO::Adapter は - - my $obj = new IO::Adapter $mapname, $config; - - とする - - XXX 以下の例では - useradd() するとき、members recipients - の順で map を変更しないといけない - -○ cf の例: - -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' - 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 @@ @@ -220,7 +220,8 @@ NIS/YP -&fmldevel; の設定では .cf の中にSQL の設定を書いておきたいと思います。 +保守性をあげるためには、一箇所に設定をまとめておきたい。 +&fmldevel; の設定では .cf の中にSQL の設定を書いておきたい。 つまり一つの cf ファイルにいろいろ書けるようにしておきたい。 @@ -228,7 +229,7 @@ NIS/YP そこで、[mysql:members] (から終りまで、もしくは次の =head 文まで)の ブロックで、マップのタイプと識別子を表現しています。 -config.cf の例 +config.cf の記述例 member_maps = mysql:members @@ -269,6 +270,127 @@ FML::Config FML::Config のオブジェクトを引数で渡せば OK です。 + + + + 議論: + SQL 構文を config.cf に書くには? + (参照: fml-devel 204) + + + +関数が呼ばれた時に始めて決まる変数もあるので +cf で全部定義することはできない。 +そこで、lexical scope で取り扱われる変数の表現があれば解決だろうか? +現在では &varname 記法(下記)を使っている。 + + + +例: +以下は、受信者リストとメンバーリストが食い違う例なので、 +アドレスの登録をする際に、fml_recepient という値が異なる。 +その場合、member と recipient は少し異なる SQL 命令になるので +別々に定義する。 +off/on 命令を無視するとか、 +fml は sql からデータを読むだけで、 +書き込むことはしないなら、 +話は簡単になる。 + +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' + + + + + + -- cgit v1.2.1