OracleのDialectなるものをいじってみゆ その1

Jiemamyって何よってのは、
都元ダイスケ🍅 on Twitter: "Jiemamyってなんぞ(3) http://bit.ly/7QGwP"
こちらから御確認下さいませw


そんなこんなで主催者様より頂いた命題に少し手をつけてようと思います
まずは、頂戴した命題は、
 『Oracleに対応させたいんだよね〜( ̄ー+ ̄)』
とのことなので
 jiemamy-dialect-oracle
なるプロジェクトをいじり倒すこととなりました。


このDialectって前にも書きましたが、DBへ実行されるSQLやERで設計するテーブルやカラム情報で
DB間の方言を吸収するものになっています。


なので、
 jiemamy-dialect-mysql
 jiemamy-dialect-postgresql
ってのが既存であるのでこちらを参考にはじめてみます。


はてはて何から手をつけたらいいのやら><
と思っていたら心優しい主催者様は、
 『まずは、型指定からかな・・・』
との貴重なヒントを頂き、早速実装部分を先のMySQLPostgreSQLから確認してみました。

static {
List list = CollectionsUtil.newArrayList();
・・・
OracleDialect.typeList = UnmodifiableList.decorate(list);
}

ほほぅ、このlist君になにやら型っぽいものをつめていくのですね^^


ということで、Oracleの型一覧をグーグル先生に聞きながら並べてみたw

static {
List list = CollectionsUtil.newArrayList();
list.add(new BuiltinDataTypeMoldImpl(OTHER, "NUMBER", PrecisionedDataTypeAdapter.class));
list.add(new BuiltinDataTypeMoldImpl(OTHER, "RAW", SizedDataTypeAdapter.class));
list.add(new BuiltinDataTypeMoldImpl(OTHER, "LONGRAW", SizedDataTypeAdapter.class));
list.add(new BuiltinDataTypeMoldImpl(CHARACTER, "CHAR", SizedDataTypeAdapter.class));
list.add(new BuiltinDataTypeMoldImpl(VARCHAR, "VARCHAR2", SizedDataTypeAdapter.class));
list.add(new BuiltinDataTypeMoldImpl(CHARACTER, "LONG", SizedDataTypeAdapter.class));
list.add(new BuiltinDataTypeMoldImpl(BLOB));
list.add(new BuiltinDataTypeMoldImpl(CLOB));
list.add(new BuiltinDataTypeMoldImpl(CLOB, "XML Type"));
list.add(new BuiltinDataTypeMoldImpl(DATE));
OracleDialect.typeList = UnmodifiableList.decorate(list);
}

当然完成ではないですが、こんな感じで列挙することで
テーブルプロパティの画面のプルダウンで確認でけたv^^


このBuiltinDataTypeMoldImplってのが型それぞれ用の入れ物で
型独自の情報を並べていくようですなぁ〜
んで、PrecisionedDataTypeAdapterってのが精度とかのプロパティを型に持たせるオブジェクトで
SizedDataTypeAdapterってのがサイズを持たせるオブジェクトのようでした。


詳しくは、もっと理解でけてからまとめていこうと思います。


おっと、今日のじまめんじゃーTimeLimitがきたようなので、今日はここまで!


今日の成果