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: フェッチと保存