Odinakachukwu Omaka-chukwu
10/30/2024, 9:03 PMasFlow
but it only emits for the first result. According to the docs, it emits a new value when the expected result changes.
fun main() {
val driver = HikariDataSource().apply {
jdbcUrl = "jdbc:<postgresql://localhost:5432/postgres>"
username = name
password = pass
}.asJdbcDriver()
Database.Schema.create(driver)
val database = Database(driver)
runBlocking {
delay(700)
launch {
repeat(10) {
database.exampleQueries.create("CONTENT$it")
delay(100)
}
}
launch {
database.exampleQueries.getAll().asFlow().mapToList(<http://Dispatchers.IO|Dispatchers.IO>).collect { messages ->
println(messages)
}
}
}
}
CREATE TABLE IF NOT EXISTS example (
content TEXT NOT NULL
);
create:
INSERT INTO example(content) VALUES (?);
getAll:
SELECT * FROM example;
I am using Postgres, and I am not sure what I am doing wrong.griffio
10/31/2024, 9:06 AMgriffio
10/31/2024, 9:23 AMclass JdbcDriverNotify(val driver: SqlDriver) : SqlDriver by driver {
private val listeners = linkedMapOf<String, MutableSet<Query.Listener>>()
override fun addListener(vararg queryKeys: String, listener: Query.Listener) {
synchronized(listeners) {
queryKeys.forEach {
listeners.getOrPut(it, { linkedSetOf() }).add(listener)
}
}
}
override fun removeListener(vararg queryKeys: String, listener: Query.Listener) {
synchronized(listeners) {
queryKeys.forEach {
listeners[it]?.remove(listener)
}
}
}
override fun notifyListeners(vararg queryKeys: String) {
val listenersToNotify = linkedSetOf<Query.Listener>()
synchronized(listeners) {
queryKeys.forEach { listeners[it]?.let(listenersToNotify::addAll) }
}
listenersToNotify.forEach(Query.Listener::queryResultsChanged)
}
}
griffio
10/31/2024, 9:24 AM// delegate to original driver
val notifyDriver = JdbcDriverNotify(driver)
Database.Schema.create(notifyDriver)
val database = Database(notifyDriver)
Odinakachukwu Omaka-chukwu
10/31/2024, 9:27 AM