アーカイブ

Posts Tagged ‘SQLite’

CocoaSQLMapperについて発表してきました

2013年1月26日 1件のコメント

Cocoa勉強会で、CocoaSQLMapperについて発表してきました。

「NSDecimalNumberをサポートしないの?」という話と、「外部結合でツリー状の親子オブジェクトを取得したいよね」という突っ込みがありまして、とりあえず前者はなんとかしようと思います。
後者は、上手いインターフェースを思いつかないです。

カテゴリー:開発 タグ: , ,

CocoaSQLMapperでレコードの数を数える

英語圏のエンジニアからメールで、「CocoaSQLMapperを使って”select count(*) from foo”はどーするんだよ?」と質問があり、サンプルを更新した後にその三倍の時間を使って英文の返事を書きました_| ̄|○

さてSQLの集約関数ですが、下記のようなコードを書きます。

@interface Count : NSObject
@property (nonatomic) int value;
@end

NSError *error = nil;
Count *count = [database selectObjectBySQL:@"SELECT COUNT(*) AS value FROM Person" parameter:parameter resultClass:[Count class] error:&error];
if (count) {
    NSLog(@"%i", count.value);
}

ポイントはSQLの「AS句」ですが、それ以前に整数型の値を一個受け取る為に新しいクラス定義を行っているあたりが、大変残念な気持ちを誘っています。
CocoaSQLMapperは本業でも用いていて、この残念感には以前から気がついていたのですが、忙しくて放置プレイになっていました。

今の所、二つのプランがあります。

  • 整数、文字列、日付を一つ受け取る為のクラスを、予めライブラリに含める。
  • 結果セットの列が一つの場合に、resultClassにNSNumberなどの指定を許す。

どうした物でしょうね。
http://github.com/marvelph/CocoaSQLMapper

カテゴリー:開発 タグ: , ,

「CocoaSQLMapper」でNSNumberをサポートしました

パラメータ及びリザルトにおいて、整数・浮動小数・論理値のNULLを表現したい場合に、NSNumberを使う事ができるようになりました。
http://github.com/marvelph/CocoaSQLMapper

リザルトにおいてビット幅を仮定する事はできないので、NSNumberの内部表現はBOOLとintはlong long intになり、floatはdoubleになります。
しかし使用時には、boolValueやintValue、あるいはfloatValueを呼び出した時点で適切に変換されます。

カテゴリー:開発 タグ: , ,

「CocoaSQLMapper」にトランザクションサポートを実装しました

blocks構文を使ったトランザクションサポートを実装しました。
http://github.com/marvelph/CocoaSQLMapper

パラメータでエラーオブジェクトを扱う必要があったので、思ったよりもシンプルにはなりませんでしたが、それも例外に頼らないObjectve-Cかなぁと思います。

他には、SELECT文の結果をNSArrayで受け取らずに、一行ずつblocksによるコールバックで受け取るメソッドと、DDL実行用のメソッドを追加しています。

カテゴリー:開発 タグ: , ,

「CocoaSQLMapper」を更新しました

必要に駆られて更新しました。
http://github.com/marvelph/CocoaSQLMapper

  • NSString、NSDate、NSDataにおけるnil値の取り扱いを実装。
  • Automatic Reference Countingに対応。
  • iOS環境でビルドできない問題を修正。
  • コードを整理。

やり残しと考えている部分は、

  • パラメータおよびリザルトにおいて、NSNumberをサポートする。
  • パラメータに通常のモデルクラスの代わりとして、NSDictionaryを使えるようにする。
  • トランザクションをblocksを使って記述できるようにする。

です。

カテゴリー:開発 タグ: , ,

iBATIS風のCocoa用O/RM「CocoaSQLMapper」を書いてみた

http://github.com/marvelph/CocoaSQLMapper

勢いで書いたので、

  • SQLのNULLの扱いが考え抜かれていない
  • トランザクション操作が未実装
  • コードが整理されてない
  • ドキュメントが無い

とかありますが、基本のデータベース操作は揃っています。
使い方は、CocoaSQLMapper.mのテストコードを読むと大体判ると思います。

Objective-Cのランタイムを弄ると、色々面白いですね。

カテゴリー:開発 タグ: , ,