Subscribed unsubscribe Subscribe Subscribe

Islands in the byte stream

Technical notes by a software engineer

Android-Orma 進捗(v0.18.0時点)

gfx.hatenablog.com

このエントリの続きです。あれから順調に開発は進み、だいたいやりたいことができるようになりました。

gfx/Android-Orma · GitHub

先日行われた 天下一「AndroidのORM」武道会(2015年版) - Qiita では好成績を残し、RealmにはかなわないもののSQLiteベースのORMとしてはトップクラスの速度を出しています。もっとも、RealmやGreenDAOに負けることがあるのは、ビルトイン以外の型(ベンチマークだと Date)のサポートを十分に最適化していないためでしょう。とはいえORMは「使うのをためらうほど遅くない」ということが重要なので、Ormaはすでに十分なパフォーマンスであるといえます。

最近はパフォーマンスは一旦置きで、プロダクションで使えるようにするための機能追加を行っています。最近はこんな感じの機能を実装しました(順不同)。

  • 基本的な has-one association / has-may association のサポート
  • 型安全なクエリビルダ(condition query helpers)
  • ListAdapterのための get(int position) など
  • 自動マイグレーションの強化
    • SQLパーサの置き換え によるSQLite拡張構文を含んだDDLのサポート
    • schema diffをcase insensitiveで行うように
  • テーブルに任意の制約(constraints)を書けるように
  • カラム定義における PRIMARY KEY ON CONFLICT ...UNIQUE ON CONFLICT ... のサポート(SQLiteの拡張機能)
  • FOREIGN KEY制約のサポート
    • has-one associationで自動的に有効化
    • ただし ON UPDATE CASCADE ON DELETE CASCADE のみで、他のオプションは必要性に応じて足していく
  • @Setter / @Getter でprivateフィールドをもつモデルを管理可能に
  • コンストラクタに @Setter アノテーションをつけることによってimmutableなモデルを管理可能に
  • TypeAdapterに BigInteger, BidDecimal, java.sql.Timestamp などを追加

タスクリストは github issues で管理しています。

Issues · gfx/Android-Orma · GitHub

v1.0.0までは互換性のないインターフェイスの変更があるかもしれませんが、よければ使ってみて意見をいただけると嬉しいです。

導入は以下のように既存のPOJOにアノテーションをつけるだけでDBに入れられるようになります(なおこのPRはクエリビルダ導入前のバージョンで、現在はクエリビルダを使っています)。

Timeline cache by gfx · Pull Request #27 · gfx/Android-Helium · GitHub