« 基本設計と見積もり | トップページ | Java SE 7 は .NET アセンブリの夢を見るのか »

2009年2月26日 (木)

CREATE TABLE 文の「差分」をとる

JJTree を使って、 CREATE TABLE 文の「差分」をとるプログラムを作ってみました。2つの CREATE TABLE 文から、両者間で追加・変更・削除されたカラムを抜き出して、 ALTER TABLE 文を作る、という Toy プログラムです。

>SqlDDLDiff test\file001_1.sql test\file001_2.sql
ALTER TABLE author DROP COLUMN a_bio;
ALTER TABLE author ALTER COLUMN a_fname TYPE varchar(10);
ALTER TABLE author ADD COLUMN a_lname varchar(20);
/* file001_1.sql */
create table author (
a_id numeric(10),
a_fname varchar(10), /* 20 -> 10 */
a_lname varchar(20), /* add */
a_mname varchar(20),
a_dob date,
--a_bio varchar(500), /* drop */
primary key (a_id) );

/* file001_2.sql */
create table author (
a_id numeric(10),
a_fname varchar(20),
--a_lname varchar(20),
a_mname varchar(20),
a_dob date,
a_bio varchar(500),
primary key (a_id) );

JJTree を使ってみて、構文木を作るツールが流行らない訳が、なんとなく分かりました。

Parser -> 構文木 (AST) -> アプリケーション・データ

とまあ、汎用のデータ構造を経てアプリケーション独自のデータへと変換する訳ですけど、これって無駄に感じるのですよね。

Parser -> アプリケーション・データ

Parser からアプリケーション・データを直接作ればいいじゃない、となる訳です。

でも、 SQL の場合は、汎用の構文木を作る意味がありそう。 RDBMS ごとに独自の「方言」がありますからね。特に、 CREATE TABLE 文 のような、 DDL 系は、 RDBMS 実装による違いが出やすいところです。汎用の構文木を間に挟むことで、 Parser を RDBMS ごとに差し替え可能にする、という風に使えそうですね。

|

« 基本設計と見積もり | トップページ | Java SE 7 は .NET アセンブリの夢を見るのか »

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/80472/28381466

この記事へのトラックバック一覧です: CREATE TABLE 文の「差分」をとる:

« 基本設計と見積もり | トップページ | Java SE 7 は .NET アセンブリの夢を見るのか »