Implement RecentSearchQueryDao

pull/1323/head
lihenggui 2 years ago
parent b758f6073d
commit 147baf2043

@ -16,23 +16,43 @@
package com.google.samples.apps.nowinandroid.core.database.dao
import androidx.room.Dao
import androidx.room.Query
import androidx.room.Upsert
import app.cash.sqldelight.coroutines.asFlow
import app.cash.sqldelight.coroutines.mapToList
import com.google.samples.apps.nowinandroid.core.database.NiaDatabase
import com.google.samples.apps.nowinandroid.core.database.Recent_search_query
import com.google.samples.apps.nowinandroid.core.database.model.RecentSearchQueryEntity
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.flow.Flow
import kotlinx.datetime.Instant
/**
* DAO for [RecentSearchQueryEntity] access
*/
@Dao
interface RecentSearchQueryDao {
@Query(value = "SELECT * FROM recentSearchQueries ORDER BY queriedDate DESC LIMIT :limit")
fun getRecentSearchQueryEntities(limit: Int): Flow<List<RecentSearchQueryEntity>>
class RecentSearchQueryDao(db: NiaDatabase, private val dispatcher: CoroutineDispatcher) {
@Upsert
suspend fun insertOrReplaceRecentSearchQuery(recentSearchQuery: RecentSearchQueryEntity)
private val query = db.recentSearchQueryQueries
@Query(value = "DELETE FROM recentSearchQueries")
suspend fun clearRecentSearchQueries()
fun getRecentSearchQueryEntities(limit: Int): Flow<List<RecentSearchQueryEntity>> {
return query.getRecentSearchQueryEntities(limit.toLong()) { query, timestamp ->
RecentSearchQueryEntity(
query = query,
queriedDate = Instant.fromEpochMilliseconds(timestamp ?: 0L),
)
}
.asFlow()
.mapToList(dispatcher)
}
suspend fun insertOrReplaceRecentSearchQuery(recentSearchQuery: RecentSearchQueryEntity) {
query.insertOrReplaceRecentSearchQuery(
recent_search_query = Recent_search_query(
query = recentSearchQuery.query,
queried_date = recentSearchQuery.queriedDate.toEpochMilliseconds(),
)
)
}
suspend fun clearRecentSearchQueries() {
query.clearRecentSearchQueries()
}
}

@ -1,6 +1,5 @@
CREATE TABLE recent_search_query (
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
query TEXT NOT NULL,
query TEXT NOT NULL PRIMARY KEY,
queried_date INTEGER DEFAULT CURRENT_TIMESTAMP
);
@ -8,7 +7,7 @@ getRecentSearchQueryEntities:
SELECT * FROM recent_search_query ORDER BY queried_date DESC LIMIT :limit;
insertOrReplaceRecentSearchQuery:
INSERT OR REPLACE INTO recent_search_query (query) VALUES (:query);
INSERT OR REPLACE INTO recent_search_query (query) VALUES :query;
clearRecentSearchQueries:
DELETE FROM recent_search_query;

Loading…
Cancel
Save