-
Type: Improvement
-
Resolution: Fixed
-
Priority: Unknown
-
None
-
Affects Version/s: None
-
Component/s: None
Problem
Version: android io.realm:realm-gradle-plugin:10.13.0
add posibility to override fun deleteFromRealm, then I will add my implementation of deleting the parent object like this:
override fun deleteFromRealm() {
childs?.deleteAllFromRealm()
super,deleteFromRealm()
}
I have:
RParent:
open class RParent constructor( @PrimaryKey @Required var id: String = "", var childs: RealmList<RChild>? = null ) : RealmObject() { override fun equals(other: Any?): Boolean { if (this === other) return true if (javaClass != other?.javaClass) return false other as RParent if (id != other.id) return false return true } override fun hashCode(): Int { return id.hashCode() } }
RChild:
open class RChild constructor( @PrimaryKey @Required var id: String = UUID.randomUUID().toString(), var name: String = "" ) : RealmObject() { override fun equals(other: Any?): Boolean { if (this === other) return true if (javaClass != other?.javaClass) return false other as RChild if (id != other.id) return false return true } override fun hashCode(): Int { return id.hashCode() } }
Currently to remove RParent by id I use this func, also nested objects needs to be removed:
val realm = Realm.getDefaultInstance() val event = realm.where(RParent::class.java) .equalTo("id", "parent1") .findFirst() event?.childs?.deleteAllFromRealm() // Removing all childs of the parent. I think the method needs to be improved. event?.deleteFromRealm() realm.close()
I want to write common func for all my databases like this, but method deleteAllFromRealm doesn't remove nested list:
suspend inline fun <reified T : RealmObject> inlineRemoveItemBySuspend( fieldName: String, fieldValue: String ): Boolean { return withContext(AppDispatchers.IO) { val realm = getRealm() try { realm.executeTransaction { realm -> realm .where(T::class.java) .equalTo(fieldName, fieldValue) .findAll() ?.deleteAllFromRealm() } } finally { if (!realm.isClosed) { realm.close() } } true } } fun getRealm() = Realm.getInstance( RealmConfiguration.Builder() .deleteRealmIfMigrationNeeded() .schemaVersion(dbVersionNumber.toLong()) .encryptionKey(encryptionKey) .modules(baseModule, *additionalModules) .name("$name.realm").build() )
The same for func io.realm.Realm#insertOrUpdate(io.realm.RealmModel)
Solution
No response
Alternatives
No response
How important is this improvement for you?
Would be a major improvement
Feature would mainly be used with
Local Database only