Я полагаю, что вы можете добавить к Дао следующее: -
@Transaction
fun getAndDelete() {
get()
delete()
}
Очевидно, что вы можете вызывать функцию по своему желанию. Однако get кажется бесполезным.
Так что вы можете захотеть что-то вроде: -
@Query("SELECT * FROM history_packet_table WHERE timestamp = (SELECT min(timestamp) FROM history_packet_table)")
fun get() :HistoryPacketTable
@Query("DELETE FROM history_packet_table WHERE timestamp = (SELECT min(timestamp) FROM history_packet_table)")
fun delete() :Int
@Transaction
fun getAndDelete() :HistoryPacketTable {
// Anything inside this method runs in a single transaction.
var rv: HistoryPacketTable = get()
val rowsDeleted: Int = delete()
if (rowsDeleted < 1) {
rv = HistoryPacketTable();
//....... set values of rv to indicate not deleted if needed
}
return rv
}
- Обратите внимание, что LIMIT при удалении по умолчанию отключен,запросы могут быть такими же, как указано выше, это предполагает, что отметка времени уникальна, в противном случае может быть удалено несколько строк, и в этом случае Dao может быть чем-то вроде
: -
@Delete
fun delete(historyPacketTable: HistoryPacketTable) :Int
@Transaction
fun getAndDelete() :HistoryPacketTable {
// Anything inside this method runs in a single transaction.
var rv: HistoryPacketTable = get()
val rowsDeleted: Int = delete(rv)
if (rowsDeleted < 1) {
rv = HistoryPacketTable();
//....... set values to indicate not deleted
}
return rv
}