2021-07-09 05:18:48 +02:00
|
|
|
package org.thoughtcrime.securesms.database
|
2019-06-04 04:12:40 +02:00
|
|
|
|
2019-06-17 03:57:40 +02:00
|
|
|
import android.content.ContentValues
|
2021-05-11 09:05:04 +02:00
|
|
|
import androidx.core.database.getStringOrNull
|
2019-06-04 04:12:40 +02:00
|
|
|
import net.sqlcipher.Cursor
|
|
|
|
import net.sqlcipher.database.SQLiteDatabase
|
2021-02-01 01:35:53 +01:00
|
|
|
import org.session.libsignal.utilities.Base64
|
2019-06-04 04:12:40 +02:00
|
|
|
|
2020-08-06 08:32:14 +02:00
|
|
|
fun <T> SQLiteDatabase.get(table: String, query: String?, arguments: Array<String>?, get: (Cursor) -> T): T? {
|
2019-06-04 04:12:40 +02:00
|
|
|
var cursor: Cursor? = null
|
|
|
|
try {
|
2019-06-19 07:45:40 +02:00
|
|
|
cursor = query(table, null, query, arguments, null, null, null)
|
2019-06-04 04:12:40 +02:00
|
|
|
if (cursor != null && cursor.moveToFirst()) { return get(cursor) }
|
|
|
|
} catch (e: Exception) {
|
|
|
|
// Do nothing
|
|
|
|
} finally {
|
|
|
|
cursor?.close()
|
|
|
|
}
|
|
|
|
return null
|
|
|
|
}
|
|
|
|
|
2020-08-06 08:32:14 +02:00
|
|
|
fun <T> SQLiteDatabase.getAll(table: String, query: String?, arguments: Array<String>?, get: (Cursor) -> T): List<T> {
|
2019-10-07 07:22:13 +02:00
|
|
|
val result = mutableListOf<T>()
|
2019-09-24 05:33:42 +02:00
|
|
|
var cursor: Cursor? = null
|
|
|
|
try {
|
|
|
|
cursor = query(table, null, query, arguments, null, null, null)
|
|
|
|
while (cursor != null && cursor.moveToNext()) {
|
2019-10-07 07:22:13 +02:00
|
|
|
result.add(get(cursor))
|
2019-09-24 05:33:42 +02:00
|
|
|
}
|
2019-10-07 07:22:13 +02:00
|
|
|
return result
|
2019-09-24 05:33:42 +02:00
|
|
|
} catch (e: Exception) {
|
|
|
|
// Do nothing
|
|
|
|
} finally {
|
|
|
|
cursor?.close()
|
|
|
|
}
|
|
|
|
return listOf()
|
|
|
|
}
|
|
|
|
|
2019-06-24 06:10:09 +02:00
|
|
|
fun SQLiteDatabase.insertOrUpdate(table: String, values: ContentValues, query: String, arguments: Array<String>) {
|
2019-06-19 07:45:40 +02:00
|
|
|
val id = insertWithOnConflict(table, null, values, SQLiteDatabase.CONFLICT_IGNORE).toInt()
|
2019-06-17 03:57:40 +02:00
|
|
|
if (id == -1) {
|
2019-06-24 06:10:09 +02:00
|
|
|
update(table, values, query, arguments)
|
2019-06-17 03:57:40 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-06-04 04:12:40 +02:00
|
|
|
fun Cursor.getInt(columnName: String): Int {
|
2019-06-19 07:45:40 +02:00
|
|
|
return getInt(getColumnIndexOrThrow(columnName))
|
2019-06-04 04:12:40 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
fun Cursor.getString(columnName: String): String {
|
2019-06-19 07:45:40 +02:00
|
|
|
return getString(getColumnIndexOrThrow(columnName))
|
2019-06-04 04:12:40 +02:00
|
|
|
}
|
|
|
|
|
2019-10-10 02:38:43 +02:00
|
|
|
fun Cursor.getLong(columnName: String): Long {
|
|
|
|
return getLong(getColumnIndexOrThrow(columnName))
|
|
|
|
}
|
|
|
|
|
2019-06-04 06:16:09 +02:00
|
|
|
fun Cursor.getBase64EncodedData(columnName: String): ByteArray {
|
2019-06-19 07:45:40 +02:00
|
|
|
return Base64.decode(getString(columnName))
|
2021-05-11 09:05:04 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
fun Cursor.getStringOrNull(columnName: String): String? {
|
|
|
|
return getStringOrNull(getColumnIndexOrThrow(columnName))
|
2019-06-04 04:12:40 +02:00
|
|
|
}
|