CREATE TABLEの解析

EntityGeneratorに使っていたSQLの解析ルーチンが仕事に使えそうなので、Oracle対応なんかしてみたり。

Oracle Developer Tools for Visual Studio .NETが吐き出すCREATE TABLE文は、こんな感じ。

CREATE TABLE "MY"."USERS" ("NAME" VARCHAR2(32 BYTE),"AGE" NUMBER) 
TABLESPACE "USERS" PCTFREE 10 INITRANS 1 MAXTRANS 255 
STORAGE (  INITIAL 65536 MAXEXTENTS 2147483645 MINEXTENTS 1 ) 
/
CREATE  UNIQUE  INDEX "MY"."SYS_C007336" ON "MY"."USERS" ("NAME"  ) TABLESPACE "USERS" 
/
ALTER TABLE "MY"."USERS" ADD (  CONSTRAINT "SYS_C007336" PRIMARY KEY ("NAME")  
USING INDEX "MY"."SYS_C007336" ENABLE  VALIDATE  )
/

これを解析させるために、以下の修正を追加。

  • ダブルクォテーションに括られた識別子に対応
  • VARCHAR2、NUMBERに対応
  • VARCHAR2のサイズ指定のBYTEやCHARに対応
  • TABLE SPACE句やSTORAGE句を無視
  • CREATE TABLE文がセミコロンで終わらなくても良い
  • CREATE TABLE文以外が含まれていても無視

しかし、ここまでやってから言うのも何ですが、データベースアクセスしてスキーマ情報取得した方が簡単だよね・・・

(追記)
http://www.asahi-net.or.jp/~sy7a-ht/diary/EntityBuilder.zip
ソースコードと使い方のサンプルを転がしておきます。