Realm Kotlin 1.6.0

Jan 26 2023
Kami baru saja merilis Realm Kotlin 1.6.

Kami baru saja merilis Realm Kotlin 1.6.0 ke Maven Central dan Gradle Plugin Portal . Rilis ini mencakup dukungan untuk memanggil Atlas Functions, tipe data RealmAny dan Decimal128 baru, backlink untuk objek yang disematkan, pembaruan ke database Core yang secara signifikan mengurangi ukuran database yang banyak menulis, dan banyak lagi.

Dukungan Fungsi Atlas

Sekarang Anda dapat memanggil Atlas Functions secara langsung melalui Kotlin SDK. Ini dilakukan melalui functionsproperti baru di Userkelas. Ini tersedia setelah masuk.

runBlocking {
  val app = App("my-app-id")
  val credentials = Credentials.usernamePassword("my-email", "my-password")
  val user: User = app.login(credentials)
  
  // Call a function configured on Atlas App Services
  val response: String = user.functions.call("function-name", "foo", 42)
}

Objek JSON juga didukung, baik sebagai input maupun output dengan menggunakan BsonDocument.

runBlocking {
  val user: User = getUser()
  val inputObj = BsonDocument("param1" to BsonString("value1"), "param2" to BsonInt32(42))
  val responseObj: BsonDocument = functions.call("foo", inputObj)
  val name: BsonString = responseObj["name"]!!.asString()
  val age: BsonInt32 = responseObj["age"]!!.asInt32()
}

Tipe data RealmAny dan Decimal128

RealmAnyadalah tipe data yang dapat digunakan untuk memodelkan data yang memiliki skema fleksibel dan dapat berisi beberapa tipe berbeda. Nilai nol diekspresikan menggunakan sistem tipe Kotlin:

import io.realm.kotlin.types.RealmAny

class Person: RealmObject {
  var mixed: RealmAny? = null // Must be marked with `?`
}

val obj: Person = realm.write {
  copyToRealm(Person().apply {
    mixed = RealmAny.create("stringValue")
  })
}

when (obj.mixed?.type) {
  RealmAny.Type.INT -> showInteger(obj.mixed.asInt())
  RealmAny.Type.STRING -> showString(obj.mixed.asString())
  null -> showNull()
  else -> throw IllegalStateException()
}

import org.mongodb.kbson.Decimal128

// Usage in model classes 
class Person: RealmObject {
  var floatingPoint: Decimal128 = Decimal128("0.73e-7")
  var list: RealmList<Decimal128> = realmListOf()
}

Realm Kotlin 1.6.0 juga memutakhirkan basis data Realm Core ke versi 13, yang membawa sejumlah peningkatan:

  • Realm sekarang akan menggunakan lebih sedikit memori dan ruang disk ketika versi yang berbeda dari objek realme digunakan.
  • Realm sekarang akan terus melacak dan mengurangi ukuran file Realm saat sedang digunakan daripada hanya saat membuka file dengan Configuration.compactOnLaunchdiaktifkan.
  • OpenSSL telah ditingkatkan dari 1.1.1n ke 3.0.7.

Salin objek dari Realm

Fungsi ekstensi yang dipanggil copyFromRealm()telah ditambahkan ke semua objek, daftar, set, dan hasil kueri Realm. Ini memungkinkan untuk menyalin semua data di dalam objek dari Realm ke dalam memori dan melepaskannya dari siklus hidup Realm membuat salinan yang berdiri sendiri.

class Person: RealmObject {
  var name: String = ""
  var children: RealmList<Person> = realmListOf() 
}

val configuration = RealmConfiguration.create(schema = setOf(Person::class))
val realm = Realm.open(configuration)

val managedObj: Person = realm.writeBlocking {
  copyToRealm(Person())
}

// Copy managed objects
val unmanagedObj = managedObj.copyFromRealm()
assertFalse(unmanagedObj.isManaged())

// Copy collections list RealmList and RealmSet
val copiedList: List<Person> = managedObj.children.copyFromRealm()

// Copy query results
val persons: List<Person> = realm.query<Person>().find().copyFromRealm()

Anotasi baru @PersistedNametelah diperkenalkan sehingga memungkinkan untuk memetakan ulang nama properti yang disimpan di Realm. Ini membuatnya lebih mudah untuk bekerja dengan nama yang bukan idiomatis platform dan mengurangi kebutuhan akan migrasi. Nama asli dan yang dipetakan dapat digunakan saat meminta data.

class Person: RealmObject {
  @PersistedName("_id")
  var id = ObjectId()
}

// Both of these will work
val person1 = realm.query<Person>("_id = $0", getId()).first().find()
val person2 = realm.query<Person>("id = $0", getId()).first().find()

Realm Kotlin 1.6.0 juga menghadirkan peningkatan untuk bekerja dengan backlink di objek yang disematkan, dukungan untuk data pengguna khusus saat bekerja dengan Realm yang disinkronkan, membuat salinan dari realm Sinkronisasi Fleksibel, masuk menggunakan fungsi autentikasi, mengatur ulang kata sandi menggunakan fungsi, dan banyak lagi.

Terima kasih sudah membaca. Sekarang maju dan bangun aplikasi luar biasa dengan Realm! Seperti biasa, kami ada di Github dan Twitter .