mirror of
https://github.com/Aviortheking/Neo-Store.git
synced 2025-04-23 19:32:16 +00:00
Update: Migrate temporary tables (4.5/5 in replacing SQLite with Room)
This commit is contained in:
parent
a59bd2bd8a
commit
6aab888c0f
@ -177,4 +177,56 @@ interface InstalledDao : BaseDao<Installed> {
|
|||||||
interface LockDao : BaseDao<Lock> {
|
interface LockDao : BaseDao<Lock> {
|
||||||
@Query("DELETE FROM 'memory.lock' WHERE package_name = :packageName")
|
@Query("DELETE FROM 'memory.lock' WHERE package_name = :packageName")
|
||||||
fun delete(packageName: String)
|
fun delete(packageName: String)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Dao
|
||||||
|
interface ProductTempDao : BaseDao<ProductTemp> {
|
||||||
|
@get:Query("SELECT * FROM `product.temporary`")
|
||||||
|
val all: Array<ProductTemp>
|
||||||
|
|
||||||
|
@Query("DELETE FROM `product.temporary`")
|
||||||
|
fun emptyTable()
|
||||||
|
|
||||||
|
@Insert
|
||||||
|
fun insertCategory(vararg product: CategoryTemp)
|
||||||
|
|
||||||
|
@Transaction
|
||||||
|
fun putTemporary(products: List<com.looker.droidify.entity.Product>) {
|
||||||
|
products.forEach {
|
||||||
|
val signatures = it.signatures.joinToString { ".$it" }
|
||||||
|
.let { if (it.isNotEmpty()) "$it." else "" }
|
||||||
|
insert(it.let {
|
||||||
|
ProductTemp().apply {
|
||||||
|
repository_id = it.repositoryId
|
||||||
|
package_name = it.packageName
|
||||||
|
name = it.name
|
||||||
|
summary = it.summary
|
||||||
|
description = it.description
|
||||||
|
added = it.added
|
||||||
|
updated = it.updated
|
||||||
|
version_code = it.versionCode
|
||||||
|
this.signatures = signatures
|
||||||
|
compatible = if (it.compatible) 1 else 0
|
||||||
|
data = it
|
||||||
|
data_item = it.item()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
it.categories.forEach { category ->
|
||||||
|
insertCategory(CategoryTemp().apply {
|
||||||
|
repository_id = it.repositoryId
|
||||||
|
package_name = it.packageName
|
||||||
|
name = category
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Dao
|
||||||
|
interface CategoryTempDao : BaseDao<CategoryTemp> {
|
||||||
|
@get:Query("SELECT * FROM `category.temporary`")
|
||||||
|
val all: Array<CategoryTemp>
|
||||||
|
|
||||||
|
@Query("DELETE FROM `category.temporary`")
|
||||||
|
fun emptyTable()
|
||||||
}
|
}
|
@ -761,7 +761,7 @@ object Database {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO add temporary tables
|
// Done
|
||||||
object UpdaterAdapter {
|
object UpdaterAdapter {
|
||||||
private val Table.temporaryName: String
|
private val Table.temporaryName: String
|
||||||
get() = "${name}_temporary"
|
get() = "${name}_temporary"
|
||||||
@ -774,6 +774,7 @@ object Database {
|
|||||||
db.execSQL(Schema.Category.formatCreateTable(Schema.Category.temporaryName))
|
db.execSQL(Schema.Category.formatCreateTable(Schema.Category.temporaryName))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Done
|
||||||
fun putTemporary(products: List<Product>) {
|
fun putTemporary(products: List<Product>) {
|
||||||
db.beginTransaction()
|
db.beginTransaction()
|
||||||
try {
|
try {
|
||||||
@ -812,6 +813,7 @@ object Database {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Done
|
||||||
fun finishTemporary(repository: Repository, success: Boolean) {
|
fun finishTemporary(repository: Repository, success: Boolean) {
|
||||||
if (success) {
|
if (success) {
|
||||||
db.beginTransaction()
|
db.beginTransaction()
|
||||||
|
@ -1,16 +1,16 @@
|
|||||||
package com.looker.droidify.database
|
package com.looker.droidify.database
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import androidx.room.*
|
||||||
import androidx.room.Database
|
import androidx.room.Database
|
||||||
import androidx.room.Room
|
|
||||||
import androidx.room.RoomDatabase
|
|
||||||
import androidx.room.TypeConverters
|
|
||||||
|
|
||||||
@Database(
|
@Database(
|
||||||
entities = [
|
entities = [
|
||||||
Repository::class,
|
Repository::class,
|
||||||
Product::class,
|
Product::class,
|
||||||
|
ProductTemp::class,
|
||||||
Category::class,
|
Category::class,
|
||||||
|
CategoryTemp::class,
|
||||||
Installed::class,
|
Installed::class,
|
||||||
Lock::class
|
Lock::class
|
||||||
], version = 1
|
], version = 1
|
||||||
@ -19,7 +19,9 @@ import androidx.room.TypeConverters
|
|||||||
abstract class DatabaseX : RoomDatabase() {
|
abstract class DatabaseX : RoomDatabase() {
|
||||||
abstract val repositoryDao: RepositoryDao
|
abstract val repositoryDao: RepositoryDao
|
||||||
abstract val productDao: ProductDao
|
abstract val productDao: ProductDao
|
||||||
|
abstract val productTempDao: ProductTempDao
|
||||||
abstract val categoryDao: CategoryDao
|
abstract val categoryDao: CategoryDao
|
||||||
|
abstract val categoryTempDao: CategoryTempDao
|
||||||
abstract val installedDao: InstalledDao
|
abstract val installedDao: InstalledDao
|
||||||
abstract val lockDao: LockDao
|
abstract val lockDao: LockDao
|
||||||
|
|
||||||
@ -45,6 +47,7 @@ abstract class DatabaseX : RoomDatabase() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Transaction
|
||||||
fun cleanUp(pairs: Set<Pair<Long, Boolean>>) {
|
fun cleanUp(pairs: Set<Pair<Long, Boolean>>) {
|
||||||
val result = pairs.windowed(10, 10, true).map {
|
val result = pairs.windowed(10, 10, true).map {
|
||||||
val ids = it.map { it.first }.toLongArray()
|
val ids = it.map { it.first }.toLongArray()
|
||||||
@ -59,4 +62,17 @@ abstract class DatabaseX : RoomDatabase() {
|
|||||||
com.looker.droidify.database.Database.notifyChanged(com.looker.droidify.database.Database.Subject.Products)
|
com.looker.droidify.database.Database.notifyChanged(com.looker.droidify.database.Database.Subject.Products)
|
||||||
}*/
|
}*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Transaction
|
||||||
|
fun finishTemporary(repository: com.looker.droidify.entity.Repository, success: Boolean) {
|
||||||
|
if (success) {
|
||||||
|
productDao.deleteById(repository.id)
|
||||||
|
categoryDao.deleteById(repository.id)
|
||||||
|
productDao.insert(*(productTempDao.all))
|
||||||
|
categoryDao.insert(*(categoryTempDao.all))
|
||||||
|
repositoryDao.put(repository)
|
||||||
|
}
|
||||||
|
productTempDao.emptyTable()
|
||||||
|
categoryTempDao.emptyTable()
|
||||||
|
}
|
||||||
}
|
}
|
@ -6,7 +6,6 @@ import androidx.room.PrimaryKey
|
|||||||
import androidx.room.TypeConverter
|
import androidx.room.TypeConverter
|
||||||
import com.looker.droidify.database.Database.jsonGenerate
|
import com.looker.droidify.database.Database.jsonGenerate
|
||||||
import com.looker.droidify.database.Database.jsonParse
|
import com.looker.droidify.database.Database.jsonParse
|
||||||
import com.looker.droidify.entity.Product
|
|
||||||
import com.looker.droidify.entity.ProductItem
|
import com.looker.droidify.entity.ProductItem
|
||||||
import com.looker.droidify.entity.Repository
|
import com.looker.droidify.entity.Repository
|
||||||
|
|
||||||
@ -32,25 +31,28 @@ class Repository {
|
|||||||
|
|
||||||
@Entity(tableName = "product", primaryKeys = ["repository_id", "package_name"])
|
@Entity(tableName = "product", primaryKeys = ["repository_id", "package_name"])
|
||||||
open class Product {
|
open class Product {
|
||||||
var repository_id: Long = 0
|
var repository_id = 0L
|
||||||
var package_name = ""
|
var package_name = ""
|
||||||
|
|
||||||
var name = ""
|
var name = ""
|
||||||
var summary = ""
|
var summary = ""
|
||||||
var description = ""
|
var description = ""
|
||||||
var added = 0
|
var added = 0L
|
||||||
var updated = 0
|
var updated = 0L
|
||||||
var version_code = 0
|
var version_code = 0L
|
||||||
var signatures = ""
|
var signatures = ""
|
||||||
var compatible = 0
|
var compatible = 0
|
||||||
|
|
||||||
@ColumnInfo(typeAffinity = ColumnInfo.BLOB)
|
@ColumnInfo(typeAffinity = ColumnInfo.BLOB)
|
||||||
var data: Product? = null
|
var data: com.looker.droidify.entity.Product? = null
|
||||||
|
|
||||||
@ColumnInfo(typeAffinity = ColumnInfo.BLOB)
|
@ColumnInfo(typeAffinity = ColumnInfo.BLOB)
|
||||||
var data_item: ProductItem? = null
|
var data_item: ProductItem? = null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Entity(tableName = "product.temporary")
|
||||||
|
class ProductTemp : Product()
|
||||||
|
|
||||||
@Entity(tableName = "category", primaryKeys = ["repository_id", "package_name", "name"])
|
@Entity(tableName = "category", primaryKeys = ["repository_id", "package_name", "name"])
|
||||||
open class Category {
|
open class Category {
|
||||||
var repository_id: Long = 0
|
var repository_id: Long = 0
|
||||||
@ -58,6 +60,9 @@ open class Category {
|
|||||||
var name = ""
|
var name = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Entity(tableName = "category.temporary")
|
||||||
|
class CategoryTemp : Category()
|
||||||
|
|
||||||
@Entity(tableName = "memory.installed")
|
@Entity(tableName = "memory.installed")
|
||||||
class Installed {
|
class Installed {
|
||||||
@PrimaryKey
|
@PrimaryKey
|
||||||
@ -87,11 +92,12 @@ object Converters {
|
|||||||
|
|
||||||
@TypeConverter
|
@TypeConverter
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun toProduct(byteArray: ByteArray) = byteArray.jsonParse { Product.deserialize(it) }
|
fun toProduct(byteArray: ByteArray) =
|
||||||
|
byteArray.jsonParse { com.looker.droidify.entity.Product.deserialize(it) }
|
||||||
|
|
||||||
@TypeConverter
|
@TypeConverter
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun toByteArray(product: Product) = jsonGenerate(product::serialize)
|
fun toByteArray(product: com.looker.droidify.entity.Product) = jsonGenerate(product::serialize)
|
||||||
|
|
||||||
@TypeConverter
|
@TypeConverter
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
|
Loading…
x
Reference in New Issue
Block a user