[Jiemamy-dev:56] データ型について

Back to archive index

MIYAMOTO Daisuke daisuke_m****@yahoo*****
2008年 6月 9日 (月) 13:18:54 JST


都元です。

次の問題提起はデータ型について。
データ型(VARCHARとかINTEGER等)はDataType型のinterfaceを持ち、
それに対する実装の1つがドメイン定義である、というのは地豆会でも説明したとおり。

ではVARCHARとかINTEGERってのの実装は? というと、PrimitiveDataTypeという型に
なると思います。

bacchusでは、JiemamyTypeという型(enum)まで登場し、中のコードはスパゲッチ化
しています。もしかしたら一番ヒドいところかもしれないw
申し訳ない事に、もう俺もわからないんだ、あそこ>< だから説明しなかった、
というのもあるw


では、なぜ複雑になってしまったのか。
とりあえず地豆内で扱うときのオブジェクト、というのが欲しかった。Oracleだろうと
MySQLだろうと、可変長文字列といえばコレ、というオブジェクトが欲しかった。
それがbacchusで言う JiemamyType.VARCHAR ですね。
これが、ホゲホゲされる(俺が忘れた部分w)と、Oracleの場合はVARCHAR2になったり
する訳ですよ。

さらに、Oracleモードでテーブルを作って、途中でPostgreSQLに変えたらどうなる?
というところにも対応したかった。VARCHAR2をVARCHARに変えるとか、TIMESTAMPを
TIMESTAMPにそのまま持っていくならば分かりやすいが、
例えばPostgreSQLのTIME型がしていされていて、Oracleに切り替わった場合は?
Oracleには無いので、互換しうるTIMESTAMP型に持っていってやるのが親切。

参考(データ型)
PostgreSQL  http://www.postgresql.jp/document/pg721doc/user/datatype-datetime.html
Oracle  http://www.shift-the-oracle.com/element/data-type/

こんなことを考えているうちに、スパゲッチ化してしまった訳ですorz
当時enumの使い方にもなれてなかったから酷いってのもあるなぁ。

で、上手く対策しないと、artemisでも同じ轍を踏みかねない。
今回の相談は、選択肢があるわけじゃないです。どうしたもんだろなー、と。

bacchusでは、enum JiemamyTypeがあって、class PrimitiveTypeがあった。
で、Dialect定義の中で、new PrimitiveType(JiemamyType.VARCHAR, "VARCHAR2")
というような記述を登録していっていた「気がする」。ごめんなさいごめんなさいごめ(ガッ

今回は、

interface DataType
class DomainModel extends TypeDefModel implements DataType
enum PrimitiveDataType implements DataType

という構成でうまくいけないかと考えている。のだが。enumって外から拡張できない
んすよねー。。。例えば妙なデータ型あるじゃないですか。PostgreSQLって結構
その辺の拡張がひどくて。

何なんだよこの辺...と言いたくなる始末。
http://www.postgresql.jp/document/pg721doc/user/datatype-geometric.html
http://www.postgresql.jp/document/pg721doc/user/datatype-net-types.html

なんか、混乱してるだけあって、まとまらない相談なんですが。
一言ください><  質問とかして、俺から情報引っ張り出してくださいw

-- 
MIYAMOTO Daisuke
skype: cuervo1800




Jiemamy-dev メーリングリストの案内
Back to archive index