Compare commits

...

14 Commits

9 changed files with 57 additions and 12 deletions

View File

@@ -1,5 +1,20 @@
# Changelog # Changelog
## 0.9.20
* `Repos`:
* `Common`:
* Fixes in `OneToManyAndroidRepo`
* New `CursorIterator`
## 0.9.19
* `Versions`:
* `Coroutines`: `1.6.0` -> `1.6.1`
* `Repos`:
* `Exposed`:
* Fixes in `ExposedStandardVersionsRepoProxy`
## 0.9.18 ## 0.9.18
* `Common` * `Common`

View File

@@ -51,7 +51,6 @@ class EitherSerializer<T1, T2>(
private val t1EitherSerializer = EitherFirst.serializer(t1Serializer, t2Serializer) private val t1EitherSerializer = EitherFirst.serializer(t1Serializer, t2Serializer)
private val t2EitherSerializer = EitherSecond.serializer(t1Serializer, t2Serializer) private val t2EitherSerializer = EitherSecond.serializer(t1Serializer, t2Serializer)
@OptIn(ExperimentalSerializationApi::class, InternalSerializationApi::class)
override fun deserialize(decoder: Decoder): Either<T1, T2> { override fun deserialize(decoder: Decoder): Either<T1, T2> {
return decoder.decodeStructure(descriptor) { return decoder.decodeStructure(descriptor) {
var type: String? = null var type: String? = null
@@ -83,7 +82,6 @@ class EitherSerializer<T1, T2>(
} }
@OptIn(ExperimentalSerializationApi::class, InternalSerializationApi::class)
override fun serialize(encoder: Encoder, value: Either<T1, T2>) { override fun serialize(encoder: Encoder, value: Either<T1, T2>) {
encoder.encodeStructure(descriptor) { encoder.encodeStructure(descriptor) {
when (value) { when (value) {

View File

@@ -14,5 +14,5 @@ crypto_js_version=4.1.1
# Project data # Project data
group=dev.inmo group=dev.inmo
version=0.9.18 version=0.9.20
android_code_version=108 android_code_version=110

View File

@@ -2,7 +2,7 @@
kt = "1.6.10" kt = "1.6.10"
kt-serialization = "1.3.2" kt-serialization = "1.3.2"
kt-coroutines = "1.6.0" kt-coroutines = "1.6.1"
jb-compose = "1.1.1" jb-compose = "1.1.1"
jb-exposed = "0.37.3" jb-exposed = "0.37.3"

View File

@@ -6,7 +6,7 @@ import dev.inmo.micro_utils.pagination.*
* Example: * Example:
* *
* * `|__f__l_______________________|` will be transformed to `|_______________________f__l__|` * * `|__f__l_______________________|` will be transformed to `|_______________________f__l__|`
* * `|__f__l_|` will be transformed to `|__f__l_|` * * `|__f__l_|` will be transformed to `|_f__l__|`
* *
* @return Reversed version of this [Pagination] * @return Reversed version of this [Pagination]
*/ */

View File

@@ -13,12 +13,12 @@ interface VersionsRepo<T> : Repo {
* By default, instance of this interface will check that version of table with name [tableName] is less than * By default, instance of this interface will check that version of table with name [tableName] is less than
* [version] or is absent * [version] or is absent
* *
* * In case if [tableName] didn't found, will be called [onCreate] and version of table will be set up to [version] * In case if [tableName] didn't found, will be called [onCreate]. Then in case if [tableName] have version less
* * In case if [tableName] have version less than parameter [version], it will increase version one-by-one * than parameter [version] or null, it will increase version one-by-one until database version will be equal to
* until database version will be equal to [version] * [version]
* *
* @param version Current version of table * @param version Current version of table
* @param onCreate This callback will be called in case when table have no information about table * @param onCreate This callback will be called in case when repo have no information about table
* @param onUpdate This callback will be called after **iterative** changing of version. It is expected that parameter * @param onUpdate This callback will be called after **iterative** changing of version. It is expected that parameter
* "to" will always be greater than "from" * "to" will always be greater than "from"
*/ */

View File

@@ -0,0 +1,27 @@
package dev.inmo.micro_utils.repos
import android.database.Cursor
class CursorIterator(
private val c: Cursor
) : Iterator<Cursor> {
private var i = 0
init {
c.moveToFirst()
}
override fun hasNext(): Boolean {
return i < c.count
}
override fun next(): Cursor {
i++
return if (c.moveToNext()) {
c
} else {
throw NoSuchElementException()
}
}
}
operator fun Cursor.iterator(): CursorIterator = CursorIterator(this)

View File

@@ -143,7 +143,12 @@ class OneToManyAndroidRepo<Key, Value>(
}.toLong() }.toLong()
override suspend fun count(k: Key): Long = helper.blockingReadableTransaction { override suspend fun count(k: Key): Long = helper.blockingReadableTransaction {
selectDistinct(tableName, columns = valueColumnArray, selection = "$idColumnName=?", selectionArgs = arrayOf(k.keyAsString()), limit = FirstPagePagination(1).limitClause()).use { selectDistinct(
tableName,
columns = valueColumnArray,
selection = "$idColumnName=?",
selectionArgs = arrayOf(k.keyAsString())
).use {
it.count it.count
} }
}.toLong() }.toLong()

View File

@@ -19,7 +19,7 @@ class ExposedStandardVersionsRepoProxy(
override val database: Database override val database: Database
) : StandardVersionsRepoProxy<Database>, Table("ExposedVersionsProxy"), ExposedRepo { ) : StandardVersionsRepoProxy<Database>, Table("ExposedVersionsProxy"), ExposedRepo {
val tableNameColumn = text("tableName") val tableNameColumn = text("tableName")
val tableVersionColumn = integer("tableName") val tableVersionColumn = integer("tableVersion")
init { init {
initTable() initTable()