Session database: add count query.
This commit is contained in:
@@ -50,6 +50,11 @@ interface SessionStore {
|
||||
*/
|
||||
suspend fun getAllSessions(): List<SessionData>
|
||||
|
||||
/**
|
||||
* Get the number of sessions.
|
||||
*/
|
||||
suspend fun numberOfSessions(): Int
|
||||
|
||||
/**
|
||||
* Get the latest session, or null if no session exists.
|
||||
*/
|
||||
|
||||
@@ -161,6 +161,15 @@ class DatabaseSessionStore(
|
||||
}
|
||||
}
|
||||
|
||||
override suspend fun numberOfSessions(): Int {
|
||||
return sessionDataMutex.withLock {
|
||||
database.sessionDataQueries.count()
|
||||
.executeAsOneOrNull()
|
||||
?.toInt()
|
||||
?: 0
|
||||
}
|
||||
}
|
||||
|
||||
override fun sessionsFlow(): Flow<List<SessionData>> {
|
||||
return database.sessionDataQueries.selectAll()
|
||||
.asFlow()
|
||||
|
||||
@@ -47,6 +47,9 @@ SELECT * FROM SessionData ORDER BY lastUsageIndex DESC LIMIT 1;
|
||||
selectAll:
|
||||
SELECT * FROM SessionData ORDER BY lastUsageIndex DESC;
|
||||
|
||||
count:
|
||||
SELECT count(*) FROM SessionData;
|
||||
|
||||
selectByUserId:
|
||||
SELECT * FROM SessionData WHERE userId = ?;
|
||||
|
||||
|
||||
@@ -52,6 +52,7 @@ class DatabaseSessionStoreTest {
|
||||
|
||||
assertThat(database.sessionDataQueries.selectLatest().executeAsOneOrNull()).isEqualTo(aSessionData)
|
||||
assertThat(database.sessionDataQueries.selectAll().executeAsList().size).isEqualTo(1)
|
||||
assertThat(database.sessionDataQueries.count().executeAsOneOrNull()).isEqualTo(1)
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -109,6 +110,7 @@ class DatabaseSessionStoreTest {
|
||||
|
||||
assertThat(foundSession).isEqualTo(aSessionData)
|
||||
assertThat(database.sessionDataQueries.selectAll().executeAsList().size).isEqualTo(2)
|
||||
assertThat(database.sessionDataQueries.count().executeAsOneOrNull()).isEqualTo(2)
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -196,12 +198,16 @@ class DatabaseSessionStoreTest {
|
||||
position = 1,
|
||||
lastUsageIndex = 1,
|
||||
)
|
||||
assertThat(database.sessionDataQueries.count().executeAsOneOrNull()).isEqualTo(1)
|
||||
databaseSessionStore.addSession(secondSessionData.toApiModel())
|
||||
assertThat(awaitItem().size).isEqualTo(2)
|
||||
assertThat(database.sessionDataQueries.count().executeAsOneOrNull()).isEqualTo(2)
|
||||
databaseSessionStore.removeSession(aSessionData.userId)
|
||||
assertThat(awaitItem().size).isEqualTo(1)
|
||||
assertThat(database.sessionDataQueries.count().executeAsOneOrNull()).isEqualTo(1)
|
||||
databaseSessionStore.removeSession(secondSessionData.userId)
|
||||
assertThat(awaitItem()).isEmpty()
|
||||
assertThat(database.sessionDataQueries.count().executeAsOneOrNull()).isEqualTo(0)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -67,6 +67,10 @@ class InMemorySessionStore(
|
||||
return sessionDataListFlow.value
|
||||
}
|
||||
|
||||
override suspend fun numberOfSessions(): Int {
|
||||
return sessionDataListFlow.value.size
|
||||
}
|
||||
|
||||
override suspend fun getLatestSession(): SessionData? {
|
||||
return sessionDataListFlow.value.firstOrNull()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user