EOMappingMethods

2007/03/30 (Fri) 22:07:46 JST

EOFはフェッチ時と保存時にデータベースとオブジェクトの変換作業を行います。 主なデータ変換の処理はEOAttributeとアダプタ間で行われます。 EOFでは規定のクラス(String, Nubmer, NSData, NSTimestampなど)以外のカスタムクラスにもマッピングできますが、ここではまず基本的なデータ変換の流れについて整理します。

以下にデータ変換で使われる主なメソッドをまとめました。 メソッドが多くて複雑なので、具体的な処理と照らし合わせながら読んでください。

EOAttribute.valueClassName
オブジェクトのクラス名。 クラス名はNSString, NSNumber, ?NSDecimalNumber, NSData, ?NSCalendarDateかカスタムクラスになるが、実際にフェッチしたデータはString, Number, ?BigDecimal, NSData, NSTimestampかカスタムクラスに変換される。 NSNumberや?NSCalendarDateなどのクラスはObjective-C版の名残。
EOAttribute.valueType
オブジェクトのデータ型。 valueClassNameがNSNumberかカスタムクラスの場合に使われる。 例えばフェッチした数字をNumberクラスに変換するとき、int型やdouble型を判断するのに使う。 内容は"i"や"l"などの文字だが、これはObjective-Cでデータ型を判別するのに使われていたもの。
EOAttribute.externalType
varcharやshortなどの、データベース上のデータ型。 データベースによって値が異なる。
EOAttribute.adaptorValueType
アダプタが扱うデータの種類。 定数である?AdaptorNumberType, ?AdaptorCharactersType, ?AdaptorBytesType, ?AdaptorDateTypeのいずれか。
EOAttribute.adaptorValueByConvertingAttributeValue
カスタムデータをアダプタが扱えるデータに変換する。 adaptorValueTypeの値に従って、String, Number, NSData, NSTimestampのどれかに変換する。 もしこれらの基本的なデータを与えても何もしない。
EOAttribute.newValueForBytes
フェッチした生データをNSDataかカスタムクラスに変換する。
EOAttribute.newValueForString
フェッチした生データ(文字列)を文字列かカスタムクラスに変換する。
?EOAdaptorChannel.evaluateExpression
SQLを実行する。 実行時にカスタムデータをバイナリか文字列に変換する。
?EOAdaptorChannel.fetchRow
フェッチしたデータ行を1行返す。
EOSQLExpression.formatValueForAttribute
EOAttributeの設定に従って、SQL文に埋め込むためにデータを変換する。 どのデータ型に変換されるかはexternalTypeによる。 EOQualifierをWHERE句に変換するのに使われるらしい(が、属性に合わせてStringやInteger渡してもNULLしか返ってこないんだけど…)。

Inverse Pages: フェッチと保存