Domínio Kotlin 1.6.0
Acabamos de lançar o Realm Kotlin 1.6.0 para Maven Central e Gradle Plugin Portal . Esta versão inclui suporte para chamar Atlas Functions, novos tipos de dados RealmAny e Decimal128, backlinks para objetos incorporados, atualizações para o banco de dados Core que reduz significativamente o tamanho de bancos de dados pesados de gravação e muito mais.
Atlas Funções Suporte
Agora é possível chamar Atlas Functions diretamente pelo Kotlin SDK. Isso é feito por meio de uma nova functionspropriedade na Userclasse. Está disponível após o login.
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)
}
Objetos JSON também são suportados, tanto como entrada quanto como saída usando 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()
}
Tipos de dados RealmAny e Decimal128
RealmAnyé um tipo de dados que pode ser usado para modelar dados que possuem um esquema flexível e podem conter vários tipos diferentes. Valores nulos são expressos usando o sistema de tipo 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()
}
O Realm Kotlin 1.6.0 também atualiza o banco de dados Realm Core para a versão 13, que traz várias melhorias:
- O Realm agora usará muito menos memória e espaço em disco quando diferentes versões de objetos do realm forem usadas.
- O Realm agora rastreará continuamente e reduzirá o tamanho do arquivo Realm quando estiver em uso, em vez de apenas ao abrir o arquivo com
Configuration.compactOnLaunchativado. - O OpenSSL foi atualizado de 1.1.1n para 3.0.7.
Copiar objetos do Realm
Uma função de extensão chamada copyFromRealm()foi adicionada a todos os objetos, listas, conjuntos e resultados de consulta do Realm. Isso torna possível copiar todos os dados dentro do objeto do Realm para a memória e desanexá-los do ciclo de vida do Realm, criando uma cópia autônoma.
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()
Uma nova @PersistedNameanotação foi introduzida tornando possível remapear nomes de propriedade armazenados no Realm. Isso facilita o trabalho com nomes que não são idiomáticos da plataforma e reduz a necessidade de migrações. Os nomes originais e mapeados podem ser usados ao consultar dados.
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()
O Realm Kotlin 1.6.0 também traz melhorias para trabalhar com backlinks em objetos incorporados, suporte para dados de usuário personalizados ao trabalhar com Realms sincronizados, fazer cópias de domínios de sincronização flexível, fazer login usando funções de autenticação, redefinir senhas usando funções e muito mais.
Obrigado por ler. Agora vá em frente e crie aplicativos incríveis com o Realm! Como sempre, estamos no Github e no Twitter .





































![O que é uma lista vinculada, afinal? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)