From 7228130c73087d6f65b09d4ae908f1bc7370f44a Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Fri, 12 Apr 2019 14:55:36 +0200 Subject: [PATCH 1/2] fix migration to version 2 issue --- .../migrations/PokerAnalyticsMigration.kt | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt b/app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt index 2d41451d..02748a29 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/migrations/PokerAnalyticsMigration.kt @@ -35,9 +35,6 @@ class PokerAnalyticsMigration : RealmMigration { // Migrate to version 2 if (currentVersion == 1) { Timber.d("*** Running migration ${currentVersion + 1}") - schema.get("Session")?.let { - it.addField("blinds", String::class.java).setNullable("blinds", true) - } schema.rename("FilterElement", "FilterCondition") schema.get("Filter")?.let { it.renameField("filterElements", "filterConditions") @@ -52,7 +49,20 @@ class PokerAnalyticsMigration : RealmMigration { if (currentVersion == 2) { Timber.d("*** Running migration ${currentVersion + 1}") schema.rename("Report", "ReportSetup") - currentVersion++ + + schema.get("Session")?.let { + it.addField("blinds", String::class.java).setNullable("blinds", true) + } + + schema.get("FilterCondition")?.let { + it.addRealmListField("booleanValues", Boolean::class.java).setNullable("booleanValues", true) + } + + schema.get("FilterCondition")?.let { + it.removeField("blindValues") + } + + currentVersion++ } } From 659d421660e161ba9fd4486d9a846aaf9996cfaa Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Fri, 12 Apr 2019 16:05:48 +0200 Subject: [PATCH 2/2] add new comparator enum --- .../android/model/comparison/Comparator.kt | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 app/src/main/java/net/pokeranalytics/android/model/comparison/Comparator.kt diff --git a/app/src/main/java/net/pokeranalytics/android/model/comparison/Comparator.kt b/app/src/main/java/net/pokeranalytics/android/model/comparison/Comparator.kt new file mode 100644 index 00000000..90e4f6f0 --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/model/comparison/Comparator.kt @@ -0,0 +1,73 @@ +package net.pokeranalytics.android.model.comparison + +import io.realm.Realm +import io.realm.RealmQuery +import io.realm.kotlin.where +import net.pokeranalytics.android.exceptions.PokerAnalyticsException +import net.pokeranalytics.android.model.filter.Filterable +import net.pokeranalytics.android.model.filter.QueryCondition + +enum class Comparator { + DAY_OF_WEEK, + MONTH, + BLIND, + ; + + val queryConditions: List + get() { + return when (this) { + DAY_OF_WEEK -> listOf() + else -> throw PokerAnalyticsException.QueryTypeUnhandled + } + } + +} + +fun List.combined(): List> { + val comparatorList = ArrayList>() + this.forEach { + comparatorList.add(it.queryConditions) + } + return getCombinations(comparatorList) +} + +inline fun List.query(realm: Realm): RealmQuery { + var realmQuery = realm.where() + this.forEach { + realmQuery = it.filter(realmQuery) + } + return realmQuery +} + +fun getCombinations(lists: List>): List> { + var combinations: MutableSet> = HashSet() + var newCombinations: MutableSet> + + var index = 0 + + // extract each of the integers in the first list + // and add each to ints as a new list + for (i in lists[0]) { + val newList = ArrayList() + newList.add(i) + combinations.add(newList) + } + index++ + while (index < lists.size) { + val nextList = lists[index] + newCombinations = HashSet() + for (first in combinations) { + for (second in nextList) { + val newList = ArrayList() + newList.addAll(first) + newList.add(second) + newCombinations.add(newList) + } + } + combinations = newCombinations + + index++ + } + + return combinations.toList() +} \ No newline at end of file