2022-03-23 16:56:11 +00:00
|
|
|
package org.signal.core.util
|
2021-12-01 18:34:21 +00:00
|
|
|
|
|
|
|
import android.database.Cursor
|
2022-03-14 19:49:46 +00:00
|
|
|
import java.util.Optional
|
2021-12-01 18:34:21 +00:00
|
|
|
|
|
|
|
fun Cursor.requireString(column: String): String? {
|
|
|
|
return CursorUtil.requireString(this, column)
|
|
|
|
}
|
|
|
|
|
|
|
|
fun Cursor.requireNonNullString(column: String): String {
|
|
|
|
return CursorUtil.requireString(this, column)!!
|
|
|
|
}
|
|
|
|
|
|
|
|
fun Cursor.optionalString(column: String): Optional<String> {
|
|
|
|
return CursorUtil.getString(this, column)
|
|
|
|
}
|
|
|
|
|
|
|
|
fun Cursor.requireInt(column: String): Int {
|
|
|
|
return CursorUtil.requireInt(this, column)
|
|
|
|
}
|
|
|
|
|
|
|
|
fun Cursor.optionalInt(column: String): Optional<Int> {
|
|
|
|
return CursorUtil.getInt(this, column)
|
|
|
|
}
|
|
|
|
|
|
|
|
fun Cursor.requireFloat(column: String): Float {
|
|
|
|
return CursorUtil.requireFloat(this, column)
|
|
|
|
}
|
|
|
|
|
|
|
|
fun Cursor.requireLong(column: String): Long {
|
|
|
|
return CursorUtil.requireLong(this, column)
|
|
|
|
}
|
|
|
|
|
2022-09-16 15:36:32 +00:00
|
|
|
fun Cursor.optionalLong(column: String): Optional<Long> {
|
|
|
|
return CursorUtil.getLong(this, column)
|
|
|
|
}
|
|
|
|
|
2021-12-01 18:34:21 +00:00
|
|
|
fun Cursor.requireBoolean(column: String): Boolean {
|
|
|
|
return CursorUtil.requireInt(this, column) != 0
|
|
|
|
}
|
|
|
|
|
|
|
|
fun Cursor.optionalBoolean(column: String): Optional<Boolean> {
|
|
|
|
return CursorUtil.getBoolean(this, column)
|
|
|
|
}
|
|
|
|
|
|
|
|
fun Cursor.requireBlob(column: String): ByteArray? {
|
|
|
|
return CursorUtil.requireBlob(this, column)
|
|
|
|
}
|
|
|
|
|
|
|
|
fun Cursor.requireNonNullBlob(column: String): ByteArray {
|
|
|
|
return CursorUtil.requireBlob(this, column)!!
|
|
|
|
}
|
|
|
|
|
|
|
|
fun Cursor.optionalBlob(column: String): Optional<ByteArray> {
|
|
|
|
return CursorUtil.getBlob(this, column)
|
|
|
|
}
|
|
|
|
|
|
|
|
fun Cursor.isNull(column: String): Boolean {
|
|
|
|
return CursorUtil.isNull(this, column)
|
|
|
|
}
|
2021-12-08 18:22:36 +00:00
|
|
|
|
2022-06-24 14:51:26 +00:00
|
|
|
fun <T> Cursor.requireObject(column: String, serializer: LongSerializer<T>): T {
|
|
|
|
return serializer.deserialize(CursorUtil.requireLong(this, column))
|
|
|
|
}
|
|
|
|
|
|
|
|
fun <T> Cursor.requireObject(column: String, serializer: StringSerializer<T>): T {
|
|
|
|
return serializer.deserialize(CursorUtil.requireString(this, column))
|
|
|
|
}
|
|
|
|
|
2022-10-20 02:11:31 +00:00
|
|
|
@JvmOverloads
|
|
|
|
fun Cursor.readToSingleLong(defaultValue: Long = 0): Long {
|
|
|
|
return use {
|
|
|
|
if (it.moveToFirst()) {
|
|
|
|
it.getLong(0)
|
|
|
|
} else {
|
|
|
|
defaultValue
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-06-24 14:51:26 +00:00
|
|
|
inline fun <T> Cursor.readToList(predicate: (T) -> Boolean = { true }, mapper: (Cursor) -> T): List<T> {
|
2022-05-11 18:33:54 +00:00
|
|
|
val list = mutableListOf<T>()
|
|
|
|
use {
|
|
|
|
while (moveToNext()) {
|
2022-06-24 14:51:26 +00:00
|
|
|
val record = mapper(this)
|
|
|
|
if (predicate(record)) {
|
|
|
|
list += mapper(this)
|
|
|
|
}
|
2022-05-11 18:33:54 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
return list
|
|
|
|
}
|
|
|
|
|
2021-12-08 18:22:36 +00:00
|
|
|
fun Boolean.toInt(): Int = if (this) 1 else 0
|