В приведенном ниже коде кажется, что поток генерируется между deleteAll и InsertAll. Я ожидал, что эти методы будут выполняться вместе как транзакция. Я что-то упустил?
private const val RECENT_UPDATE_THRESHOLD_MS = 60_000L
@Dao
interface InboxMessageDao {
@Query(
"SELECT * FROM inbox_message " +
"WHERE toEmail == (SELECT email FROM email_address WHERE isCurrent = 1) " +
"AND (strftime('%s', 'now') * 1000 - cacheLastUpdate) < $RECENT_UPDATE_THRESHOLD_MS"
)
fun getAllFlow(): Flow
@Insert
suspend fun insertAll(messages: List)
@Query("DELETE FROM inbox_message")
suspend fun deleteAll()
@Query("SELECT cacheLastUpdate FROM inbox_message WHERE toEmail == :toEmail LIMIT 1")
suspend fun getCacheLastUpdate(toEmail: String): Long?
@Transaction // TODO: This fails tests sometimes, why?
suspend fun refreshInboxMessages(newMessages: List) {
deleteAll()
// Flow seems to be propagated here giving me sometimes empty list in androidTests
insertAll(newMessages)
}
}
Я ожидаю, что поток будет создан после выполнения всей транзакции.
PS. runInTransaction {} не решает эту проблему.
В приведенном ниже коде кажется, что поток генерируется между deleteAll и InsertAll. Я ожидал, что эти методы будут выполняться вместе как транзакция. Я что-то упустил? [code]private const val RECENT_UPDATE_THRESHOLD_MS = 60_000L
@Dao interface InboxMessageDao { @Query( "SELECT * FROM inbox_message " + "WHERE toEmail == (SELECT email FROM email_address WHERE isCurrent = 1) " + "AND (strftime('%s', 'now') * 1000 - cacheLastUpdate) < $RECENT_UPDATE_THRESHOLD_MS" ) fun getAllFlow(): Flow
@Insert suspend fun insertAll(messages: List)
@Query("DELETE FROM inbox_message") suspend fun deleteAll()
@Query("SELECT cacheLastUpdate FROM inbox_message WHERE toEmail == :toEmail LIMIT 1") suspend fun getCacheLastUpdate(toEmail: String): Long?
@Transaction // TODO: This fails tests sometimes, why? suspend fun refreshInboxMessages(newMessages: List) { deleteAll() // Flow seems to be propagated here giving me sometimes empty list in androidTests insertAll(newMessages) } } [/code] Я ожидаю, что поток будет создан после выполнения всей транзакции. PS. runInTransaction {} не решает эту проблему.
В приведенном ниже коде кажется, что поток генерируется между deleteAll и InsertAll. Я ожидал, что эти методы будут выполняться вместе как транзакция. Я что-то упустил?
private const val RECENT_UPDATE_THRESHOLD_MS = 60_000L
На моей домашней странице, т. е. «/», перечислены все названия комнат со ссылками, которые должны перенаправлять на эту конкретную комнату с этим именем. Например, нажатие на «Test Room1» должно перенаправить меня в «/room/1» с таким именем. Но он...
На моей домашней странице, т. е. «/», перечислены все названия комнат со ссылками, которые должны перенаправлять на эту конкретную комнату с этим именем. Например, нажатие на «Test Room1» должно перенаправить меня в «/room/1» с таким именем. Но он...
Я добавляю комнату и Sqlite-связанную в приложение Compose Multiplatform, теперь я получаю эту проблему при синхронизации проекта:
:composeApp:wasmJsMain: Could not resolve androidx.room:room-runtime:2.7.0-beta01.
Required by:
project :composeApp...
У меня есть Atomikos (6.0.0) в Springboot 3 и я использую Java 21. Он работает, но использует @Deprecated класс «ChainedTransactionManager(transactionManagerOne, transactionManagerTwo)». На самом деле этот способ показывает мне много предупреждений,...