職場実習8日目

掲示板の実装部分の作業が遅れ気味。
作業ペースを上げようにも、SQLとのアクセスが中々うまく行かない。

DBアクセス部分の実装

改行コードの扱い

特に、問い合わせ文の中に変数名を入れて展開する場合、変数の中に改行コードが含まれている事がある。フォーム入力内容を変数に入れる場合や、標準入力からパラメータを受け取る場合など。
フォームからの場合は環境変数から受け取る形になるが、改行はテキストエリアからのものにのみ含まれるので、そこだけ気を付ければいい。
しかし、テストのために標準入力からパラメータを受け取る場合、意図しない形で末端の改行コードが入る場合がある。
標準入力は改行しないで終わらせる場合、Linuxの場合はCTRL+Dを2回押さなければならない。改行してからCTRL+Dを1回押すほうがしっくりくるのだが、それをやると末端に改行が含まれてしまい、末端の改行コードを取り除かないとエラーの原因となる。

多次元配列の扱い

そして、SQLはきちんと動作するようになったのだが、取得したテーブルを多次元配列に参照可能な形で格納したり、格納した後に参照するのに意外と手間取る事になる。
多次元配列の場合、配列に配列を追加したり、スカラー値や配列の要素を取り出すのに一工夫要るようだ。
配列に配列を要素として追加しようとしても、要素がバラバラに追加されてしまい、多次元配列にならない場合がある。
また、配列の配列から、配列をそのまま取り出す事はできず、変数による参照のような形でしか取り出す事ができず、後で配列にキャストする必要がある。

ハッシュ配列の扱い

テーブル内容を取得する時に列名が分かれば、レコードをハッシュとしてまとめる事ができる。データの項目名だけ覚えておき、後で順番を変えて使いたい場合は、こちらのほうが便利だろう。
PostgreSQLで列名を取得する方法を調べていたら、次のサイトを見付けた。
Postgres : テーブルの列名(カラム名)を調べる(PostgreSQL)--WEBシステム開発 技術的備忘録(通称 技忘録)
ただし、ハッシュの配列を作る場合も、ハッシュを追加したり、ハッシュの中に要素を追加するのに一工夫要るようだ。配列の中にハッシュをそのままでは追加できず、配列の要素をハッシュとして初期化する準備がいるわけだが、ハッシュにキャストした上で初期化しないとエラーになる。
配列からハッシュを取り出すの場合、多次元配列の時と同様、配列から変数として取り出した後、ハッシュに変える必要がある。
perlって難しい。

日時をSQLデータとして扱う

日時をperlのlocaltimeで取得した後、PostgreSQLのtimestamp形式に変換する方法を調べていたら、次のサイトに書かれていた。
日付の書式指定

表結合

PostgreSQLでの表結合の書式を調べたら、次のサイトを見付けた。
PostgreSQL 編8 - 表結合(join)、単純結合、等価結合、外部結合、再帰結合 - SAK Streets
表結合は問い合わせ毎に行うと効率が悪いので、予めビューを作っておき、その中で行う。

テストの反復自動化

DB入出力テストをシェル上で短時間で行うため、シェルスクリプトで繰り返し処理を実行する方法を調べたら、次のサイトを見付けた。
シェルスクリプト実践テクニック〜bash編
標準入力から流し込むデータファイルを複数用意して、データファイル毎に出力ファイルを作る。
データファイル名は命名規則を設け、XXXX(番号).txtのようにし、cgi、シェルスプリプトと同じフォルダ内に置き、同じフォルダ内の全てのXXXX(番号).txtを1個ずつ入力ファイルに指定して、出力ファイル名は入力ファイル名に.output.txtを追加したものとし、cgiを繰り返し実行する。
これにより、DB上に作成した全ての表とビューをperlからSELECT文で参照する事に成功した。
次はINSERT・UPDATE・DELETEが問題無くできれば、いよいよ掲示板の実装に取り掛かる事ができる。