OracleDialectなるものをいじってみゆ その2

Jiemamyってなんぞ(7) - Dialect - 都元ダイスケ IT-PRESS


にて主催者様にちょっといいじられたBlakyManです^^;
前回の続きをまとめてみゆ


前回とりあえず、候補となる型のリストを作成してみて
晒したわけですが、その後、タバコ部屋で主催者様と密談をしてみました。


何をお話したかというと型リストにあった

org.jiemamy.dialect.internal.BuiltinDataTypeMoldImpl

の引数についてです。

new BuiltinDataTypeMoldImpl(カテゴリ [, 表示名][, Adapter各種]);

と前回さらしたソースでは、上記のものを

List list = CollectionsUtil.newArrayList();
lise.add(XXXX);

のXXXXのところで追加していっていました。


正直内容物を同使うのか分からず、それの密談でした。


では、それぞれまとめてみゆ

[カテゴリ]:org.jiemamy.model.datatype.DataTypeCategoryのENUMな値であり型をカテゴリする為に設定する
[表示名]:必要な場合に型の表示名として指定する。主にカテゴリで表現できない名称を文字列で設定する
[Adapter各種]:必要な場合にその型で指定する必要のある項目を設定する
 ※別途Adapterを作成する必要がある場合は、それぞれのDialectで作成する

となります。


インポート時の型指定の処理として

JDBCから型名を取得し
①Dialectのカテゴリと表示名が取得した型名を比較

②Dialectの表示名と取得した型名を比較

③Dialectのカテゴリと取得した型名を比較

という順番で比較するようになっているとのことでした。


でも、大きな問題があって、DB確定する前にもER図って書きたい時あるじゃないですか
そんな時に適当なDialect使ってデザインしたらどうなります?
型でOracleにあって、PostgreSQLにないものや、ごの逆もしかりです。


そういったことがないようにJiemamyでは、

org.jiemamy.dialect.generic.GenericDialect
というのがあり、そこでカタログされる型にすべてのDialectで対応しておくことで
その後DBが確定して設定しなおしても大丈夫にする!

という仕様があります。


よって、前回晒した型リストを再掲しておきます。

list.add(new BuiltinDataTypeMoldImpl(DECIMAL, "NUMBER", PrecisionedDataTypeAdapter.class));
list.add(new BuiltinDataTypeMoldImpl(INTEGER, "NUMBER - INTEGER", PrecisionedDataTypeAdapter.class));
list.add(new BuiltinDataTypeMoldImpl(SMALLINT, "NUMBER - SMALLINT", PrecisionedDataTypeAdapter.class));
list.add(new BuiltinDataTypeMoldImpl(NUMERIC, "NUMBER - NUMERIC", PrecisionedDataTypeAdapter.class));
list.add(new BuiltinDataTypeMoldImpl(FLOAT, "NUMBER - FLOAT", PrecisionedDataTypeAdapter.class));
list.add(new BuiltinDataTypeMoldImpl(REAL, "NUMBER - REAL", PrecisionedDataTypeAdapter.class));
list.add(new BuiltinDataTypeMoldImpl(DOUBLE, "NUMBER - DOUBLE", PrecisionedDataTypeAdapter.class));
list.add(new BuiltinDataTypeMoldImpl(BIT, "NUMBER - BIT", PrecisionedDataTypeAdapter.class));
list.add(new BuiltinDataTypeMoldImpl(VARBIT, "NUMBER - VARBIT", PrecisionedDataTypeAdapter.class));
list.add(new BuiltinDataTypeMoldImpl(BOOLEAN, "NUMBER - BOOLEAN", 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(CLOB, SizedDataTypeAdapter.class));
list.add(new BuiltinDataTypeMoldImpl(BLOB, SizedDataTypeAdapter.class));
list.add(new BuiltinDataTypeMoldImpl(DATE));
list.add(new BuiltinDataTypeMoldImpl(TIME, "DATE - TIME", TimezonedDataTypeAdapter.class));
list.add(new BuiltinDataTypeMoldImpl(TIMESTAMP, "DATE - TIMESTAMP", TimezonedDataTypeAdapter.class));
list.add(new BuiltinDataTypeMoldImpl(INTERVAL, "DATE - INTERVAL"));


これでとりあえずは、GenericDialectの型には対応したことになりますが、、、
プルダウンに同じ型が並んじゃうのですT_T


主催者様と相談して今のところこんな形ですすめて、もう少し仕様が固まったら
それにあわせるようにしようと思います。


ちゅうことで、宣言は終ったので、次回からは、画面でテーブルをデザインしたり
インポートしたりして稼動確認するのだぁ!!


※さすがに稼動確認前なのでコミットは自重してしまいますた^^;