objectbox / objectbox/objectbox-java

Support Kotlin inline classes for ids

オープン
#706 コメント 3 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

enhancement
主要言語
Java
スター
4.6k
フォーク
311
PR マージ指標
30日以内にマージされた PR はありません

説明

Inline classes are a good way to add compile time type safety to database queries. They would prevent error caused by querying a box with the wrong id type.

@Entity
data class EntityA(
    val str: String,
    val id: EntityAId
)

inline class EntityAId(val value: Long)

@Entity
data class EntityB(
    val str: String,
    val id: EntityBId
)

inline class EntityBId(val value: Long)

val unsafeId: Long = getSomeId() //returns an id meant for EntityA
boxStore.boxFor<EntityB>()[unsafeId] //Runtime error

val safeId: EntityAId = getSomeId()
boxStore.boxFor<EntityB>()[safeId] //Compile time error

And the unsafe call only crashes if you're lucky, other times it might just seem like the database is returning garbage data, since you queried it with the wrong ids.

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

EntityAId や EntityBId などの inline classes を使用している Kotlin の例から始め、boxStore.boxFor()[id] の呼び出しを追跡してください。完了条件は、サポートされる inline-class id がエンティティ ID 型間のコンパイル時の分離を維持し、間違った型の id をコンパイル時に拒否することです。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
kotlin
領域
databases
issue の種類
機能追加
難易度
5/5
見積もり時間
1週間以上
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
30/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。