ラベル ツール類 の投稿を表示しています。 すべての投稿を表示
ラベル ツール類 の投稿を表示しています。 すべての投稿を表示

2009年7月9日木曜日

コードジェネレータと云ふもの

いま、XoopsCube向けのコードジェネレータを
PHPで作成しています。(間隙を見つけて。)

一番うっとうしいのは、DBテーブルの各フィールドを
意識しなければいけない箇所です。

フレームワークがあっても、DBのフィールドを
まったく意識しないでコーディングすることは
余程ショボいアプリでない限りは、
有り得ないと思います。

現在、ADOdbを使って、DBのメタ情報を取得して
DBの各フィールドに関するコード部分を
ジェネレートするよう開発しているところです。

今回の開発で一番の難所だと思われます。

別に仕事というより、ただの自社開発なので
タイムリミットに追いまくられることがないだけ
気楽ではありますが、いま開発しているものを
今後の開発で大いに活かしていくつもりなので
気が張る開発になっています。

CMSというものをより深く知る機会にもなっていて
大変勉強になっています。

CMSに関連した開発をされている方は、
コードジェネレータを一度作ってみては
いかがでしょうか?

かなり、おススメです。

2009年6月16日火曜日

[PHP]SQL文からテーブル名を取得する

言語は、PHPです。

元ネタは、コチラ。


$tables = array();
if (preg_match_all("/(.*\s+from\s+(\w+(\.\w+)?).*)|(.*\s+join\s+(\w+(\.\w+)?).*)/i", $sqlstr, $matches)) {
  foreach($matches as $varry) {
    if (is_array($varry)) {
      foreach($varry as $v) {
        if (!empty($v)
          && !preg_match("/^(\.)|(\s*)(SELECT|JOIN|FROM).*/i", $v)) {
          $tables[] = $v;
        }
      }
    } else {
      if (!empty($varry)
        && !preg_match("/^(\.)|(\s*)(SELECT|JOIN|FROM).*/i", $varry)) {
        $tables[] = $varry;
      }
    }
  }
}


正規表現一発でテーブル名を取得しようと思っても、
サブクエリ使ってたりJOIN使ってたりしたら、
なかなか上手くいかないですよね。。。

正規表現一発ではうまくいかなくても
何とか取って来れないかと試行錯誤しました。

なんとか取得できてるっぽいです。
↓こんなSQLでもちゃんとテーブル名だけを返してくれます。

SELECT
a.usage_amount -- test1
,b.charge #test2
,c.* /*
test3
*/
from (
SELECT shop_id, sum(usage_amount) as usage_amount
FROM v0.usagex
GROUP BY (shop_id)
) a
LEFT OUTER JOIN (
SELECT shop_id, sum(charge) as charge
FROM v0.history
GROUP BY (shop_id)
)b on a.shop_id = b.shop_id
INNER JOIN v0.contract c on c.shop_id = a.shop_id


※↑この例の場合、先のコーディングで、$tablesには
  ・v0.usagex
  ・v0.history
  ・v0.contract
 が返されます。

2009年5月2日土曜日

フリーのERツール

A5:SQL Mk-2



機能の説明を読んでて、

「ああ、そうそう、こういうのが欲しかった」

と思わずにはいられない、秀逸な仕様の一品。



お一人で開発されてるっぽいけど、

願わくば、ずっとずっとメンテし続けて欲しい。