更新状況

4月 26

MySQLで外部SQLファイルを読み込ませてデータベースやテーブルを作成するときによく使うのが、下記のコマンド。

mysql> SOURCE <外部ファイル名>;

この「SOURCE」がくせ者で、MySQLクライアントのビルドインツールなんですぅ。(ようは、MySQLクライアントの構文内でのみ有効ってこと)
MySQL Connector/C++なんかでプログラムを組むときやMySQL Query Browserで試験的にクエリを実行したいとき、この「SOURCE」をクエリとして使えると勘違いしやすいんです。
mysql クライアント上ではさもクエリのように振る舞うのに、プログラム内では「シンタックスエラー」となり、思考がスパイラル状態になります。

どうしても、プログラム内から外部ファイルで管理されているSQLを実行したい場合は、

    • 外部ファイルを読み込んでクエリをぶん投げる。
      [難点] 外部SQLファイルを同時配布したくない場合にどうするか。
    • mysql 構文をシェル(コンソール)プロセスに直接ぶん投げる。
      [難点] 外部プロセス発動になるので管理が面倒。
    • (時と場合によっては)ストアドプロシージャを使う。
      [難点] 後からアタッチするようなサブプログラムの場合、組み込むために外部からの供給が必要となり、堂々巡り。

だと思う。(他にもあると思うが手っ取り早い順で・・・)

開発にあたっていろいろ制約があり、外部SQLファイルは同時配布しないことになっていたので、外部のSQLファイルをプログラム内のリソースに取り込み、読み込んだリソーステキストをサーバにぶん投げることで「SOURCE」と同じような処理を実現したでやんす。まだ未検証だけど、読み込む外部ファイル(今回はリソースとして組み込んだファイル)のコメント等は無い方がいいか、もしくは読み込んだ先で余分なものを取っ払ってからクエリを投げた方が無難じゃないかなぁ~と思われ。

今回特殊な事情で、MySQLの「CREATE~FEDERATED」を使用しなくちゃいけなかったんだが、その話はまた後で出来ればと。

written by hiro \\ tags: , ,

7月 25

当方のサイトはawstatsで簡単なアクセス解析をしているのですが、生成される解析結果のトップページからのサブページへのリンクと実際にawstatsがはき出すhtmlファイル名が異なっており、リンク切れを起こしておりました。まぁ、外部からはアクセスできないので、放置しておいても問題ないのだが・・・
トップページ(index.html)からサブページのリンクは、「ホスト名.yyyymm.カテゴリ.html」なのだが、実際に作成されるファイル名は、「awstats.ホスト名.yyyymm.カテゴリ.html」。つまり、実際に作成されるファイルに「awstats」が付帯している。
調べてみると、バージョン6.9.5以降のバグらしく、当方が使用しているバージョンは7.0.3 in Fedora15。ビンゴでした。
さて、どうしたものかと思案した結果、awstatsのソースを弄っても、バージョンアップごとに手入れ部分を修正するのも面倒だったので、外的処置で逃げることに。
そうです、生成されたindex.htmlのリンクを強制的に書き換える方法です。
何らかのスクリプトで解析ページ生成をしていると思うので、そのスクリプトの最後に下記を挿入。
(解析ページ保存先やホスト名は適当に書き換えてください)

pushd <解析ページ生成ディレクトリ>
sed -i "s/href=\"witkitty\.com\./href=\"awstats\.witkitty\.com\./g" index.html
popd

言わなくてもお分かりかと思いますが、注意点は「置換文字列中の特殊文字にご注意を!」です。
上記sedコマンドでは、ダブルクォーテーション(”)とピリオド(.)は特殊文字になるので、特殊文字として認識しないようバックスラッシュ(\)で意図的に指定しています。

とまぁ、これで一時的に回避しておいて、また問題が出たらその時にでも。

written by hiro

6月 04
XPERIAのアプリ:ジョルテを使ってGoogleカレンダーと同期しているのだが、5月末あたりに何故かカレンダーが更新されない事象が発生。
なんで?といろいろアプリを変更して見るも同期せず。
しかし、Googleカレンダー側で新たに予定を入れるとそこだけ更新される・・・ということは、Googleカレンダーの過去データに何か問題が生じていると思われ、以下の手順で復旧を試みることに。(Googleカレンダー側のデータは表示されているのでどういう壊れ方をしたのかさっぱり検討がつかんw)

Googleカレンダー設定画面から、

  • カレンダーをエクスポート(カレンダーデータをファイルとして保存)
  • カレンダーを削除
  • エクスポートしたデータをインポート(保存されたカレンダーデータを登録)

ここで、おもむろにXPERIAから「カレンダー同期」を実行~。
「むふふ、同期したぉ」

さて、では何故Googleカレンダー側のデータに問題が生じたかについては・・・・・「不明」です。
もし再発するようであれば、その時の当方の操作も含め再現できたらなぁ~と。

同じ現象が出ている人はお試しあれ。

written by hiro \\ tags: , , ,