Kraina Kotlin 1.6.0

Jan 26 2023
Właśnie wydaliśmy Realm Kotlin 1.6.

Właśnie udostępniliśmy Realm Kotlin 1.6.0 dla Maven Central i Gradle Plugin Portal . Ta wersja zawiera obsługę wywoływania Atlas Functions, nowe typy danych RealmAny i Decimal128, łącza zwrotne dla osadzonych obiektów, aktualizacje bazy danych Core, które znacznie zmniejszają rozmiar baz danych intensywnie zapisujących i wiele więcej.

Obsługa funkcji Atlasu

Możliwe jest teraz wywoływanie Atlas Functions bezpośrednio przez Kotlin SDK. Odbywa się to poprzez nową functionswłaściwość w Userklasie. Jest dostępny po zalogowaniu.

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)
}

Obsługiwane są również obiekty JSON, zarówno jako dane wejściowe, jak i wyjściowe przy użyciu 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()
}

Typy danych RealmAny i Decimal128

RealmAnyto typ danych, który może być używany do modelowania danych, które mają elastyczny schemat i mogą zawierać kilka różnych typów. Wartości null są wyrażane przy użyciu systemu typów 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 aktualizuje również bazę danych Realm Core do wersji 13, co przynosi szereg ulepszeń:

  • Realm będzie teraz zużywać znacznie mniej pamięci i miejsca na dysku, gdy używane będą różne wersje obiektów Realm.
  • Realm będzie teraz stale śledzić i zmniejszać rozmiar pliku Realm, gdy jest on używany, a nie tylko podczas otwierania pliku z Configuration.compactOnLaunchwłączonym.
  • OpenSSL został zaktualizowany z wersji 1.1.1n do wersji 3.0.7.

Skopiuj obiekty z Realm

Funkcja rozszerzająca o nazwie copyFromRealm()została dodana do wszystkich obiektów Realm, list, zestawów i wyników zapytań. Umożliwia to skopiowanie wszystkich danych wewnątrz obiektu z Realm do pamięci i odłączenie go od cyklu życia Realm, tworząc samodzielną kopię.

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()

Wprowadzono nową @PersistedNameadnotację umożliwiającą zmianę mapowania nazw właściwości przechowywanych w Realm. Ułatwia to pracę z nazwami, które nie są idiomatyczne dla platformy, i zmniejsza potrzebę migracji. Podczas wyszukiwania danych można używać zarówno oryginalnych, jak i mapowanych nazw.

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 wprowadza również ulepszenia pracy z linkami zwrotnymi w obiektach osadzonych, obsługę niestandardowych danych użytkownika podczas pracy ze zsynchronizowanymi Realmami, tworzenie kopii domen Flexible Sync, logowanie za pomocą funkcji uwierzytelniania, resetowanie haseł za pomocą funkcji i nie tylko.

Dziękuje za przeczytanie. Teraz idź naprzód i twórz niesamowite aplikacje z Realm! Jak zawsze jesteśmy na Githubie i Twitterze .