Skip to content

Commit

Permalink
Improve addListener api
Browse files Browse the repository at this point in the history
  • Loading branch information
hfhbd committed Jun 8, 2023
1 parent 60938e2 commit 928427a
Show file tree
Hide file tree
Showing 35 changed files with 161 additions and 177 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -81,23 +81,23 @@ class AndroidSqliteDriver private constructor(

private val listeners = linkedMapOf<String, MutableSet<Query.Listener>>()

override fun addListener(listener: Query.Listener, queryKeys: Array<String>) {
override fun addListener(vararg queryKeys: String, listener: Query.Listener) {
synchronized(listeners) {
queryKeys.forEach {
listeners.getOrPut(it, { linkedSetOf() }).add(listener)
}
}
}

override fun removeListener(listener: Query.Listener, queryKeys: Array<String>) {
override fun removeListener(vararg queryKeys: String, listener: Query.Listener) {
synchronized(listeners) {
queryKeys.forEach {
listeners[it]?.remove(listener)
}
}
}

override fun notifyListeners(queryKeys: Array<String>) {
override fun notifyListeners(vararg queryKeys: String) {
val listenersToNotify = linkedSetOf<Query.Listener>()
synchronized(listeners) {
queryKeys.forEach { listeners[it]?.let(listenersToNotify::addAll) }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -137,31 +137,23 @@ abstract class QueryTest {
@Test fun notifyDataChangedNotifiesListeners() {
val notifies = AtomicInt(0)
val query = testDataQuery()
val listener = object : Query.Listener {
override fun queryResultsChanged() {
notifies.incrementAndGet()
}
}
val listener = Query.Listener { notifies.incrementAndGet() }

query.addListener(listener)
assertEquals(0, notifies.get())

driver.notifyListeners(arrayOf("test"))
driver.notifyListeners("test")
assertEquals(1, notifies.get())
}

@Test fun removeListenerActuallyRemovesListener() {
val notifies = AtomicInt(0)
val query = testDataQuery()
val listener = object : Query.Listener {
override fun queryResultsChanged() {
notifies.incrementAndGet()
}
}
val listener = Query.Listener { notifies.incrementAndGet() }

query.addListener(listener)
query.removeListener(listener)
driver.notifyListeners(arrayOf("test"))
driver.notifyListeners("test")
assertEquals(0, notifies.get())
}

Expand All @@ -179,11 +171,11 @@ abstract class QueryTest {
}

override fun addListener(listener: Listener) {
driver.addListener(listener, arrayOf("test"))
driver.addListener("test", listener = listener)
}

override fun removeListener(listener: Listener) {
driver.removeListener(listener, arrayOf("test"))
driver.removeListener("test", listener = listener)
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,15 +26,15 @@ fun DataSource.asJdbcDriver() = object : JdbcDriver() {
connection.close()
}

override fun addListener(listener: Query.Listener, queryKeys: Array<String>) {
override fun addListener(vararg queryKeys: String, listener: Query.Listener) {
// No-op. JDBC Driver is not set up for observing queries by default.
}

override fun removeListener(listener: Query.Listener, queryKeys: Array<String>) {
override fun removeListener(vararg queryKeys: String, listener: Query.Listener) {
// No-op. JDBC Driver is not set up for observing queries by default.
}

override fun notifyListeners(queryKeys: Array<String>) {
override fun notifyListeners(vararg queryKeys: String) {
// No-op. JDBC Driver is not set up for observing queries by default.
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -172,19 +172,19 @@ class NativeSqliteDriver(
}
}

override fun addListener(listener: Query.Listener, queryKeys: Array<String>) {
override fun addListener(vararg queryKeys: String, listener: Query.Listener) {
queryKeys.forEach {
listeners.getOrPut(it) { mutableMapOf() }.put(listener, Unit)
}
}

override fun removeListener(listener: Query.Listener, queryKeys: Array<String>) {
override fun removeListener(vararg queryKeys: String, listener: Query.Listener) {
queryKeys.forEach {
listeners.get(it)?.remove(listener)
}
}

override fun notifyListeners(queryKeys: Array<String>) {
override fun notifyListeners(vararg queryKeys: String) {
val listenersToNotify = mutableSetOf<Query.Listener>()
queryKeys.forEach { key -> listeners.get(key)?.let { listenersToNotify.addAll(it.keys) } }
listenersToNotify.forEach(Query.Listener::queryResultsChanged)
Expand Down Expand Up @@ -303,15 +303,15 @@ internal class SqliterWrappedConnection(
block: ThreadConnection.() -> R,
): R = threadConnection.block()

override fun addListener(listener: Query.Listener, queryKeys: Array<String>) {
override fun addListener(vararg queryKeys: String, listener: Query.Listener) {
// No-op
}

override fun removeListener(listener: Query.Listener, queryKeys: Array<String>) {
override fun removeListener(vararg queryKeys: String, listener: Query.Listener) {
// No-op
}

override fun notifyListeners(queryKeys: Array<String>) {
override fun notifyListeners(vararg queryKeys: String) {
// No-op
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,11 +107,11 @@ class WalConcurrencyTest : BaseConcurrencyTest() {
}

override fun addListener(listener: Listener) {
driver.addListener(listener, arrayOf("test"))
driver.addListener("test", listener = listener)
}

override fun removeListener(listener: Listener) {
driver.removeListener(listener, arrayOf("test"))
driver.removeListener("test", listener = listener)
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,9 +84,9 @@ class R2dbcDriver(

override fun currentTransaction(): Transacter.Transaction? = transaction

override fun addListener(listener: Query.Listener, queryKeys: Array<String>) = Unit
override fun removeListener(listener: Query.Listener, queryKeys: Array<String>) = Unit
override fun notifyListeners(queryKeys: Array<String>) = Unit
override fun addListener(vararg queryKeys: String, listener: Query.Listener) = Unit
override fun removeListener(vararg queryKeys: String, listener: Query.Listener) = Unit
override fun notifyListeners(vararg queryKeys: String) = Unit

override fun close() {
// Normally, this is just a Mono, so it completes directly without onNext.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,23 +21,23 @@ class JdbcSqliteDriver constructor(
) : JdbcDriver(), ConnectionManager by connectionManager(url, properties) {
private val listeners = linkedMapOf<String, MutableSet<Query.Listener>>()

override fun addListener(listener: Query.Listener, queryKeys: Array<String>) {
override fun addListener(vararg queryKeys: String, listener: Query.Listener) {
synchronized(listeners) {
queryKeys.forEach {
listeners.getOrPut(it, { linkedSetOf() }).add(listener)
}
}
}

override fun removeListener(listener: Query.Listener, queryKeys: Array<String>) {
override fun removeListener(vararg queryKeys: String, listener: Query.Listener) {
synchronized(listeners) {
queryKeys.forEach {
listeners[it]?.remove(listener)
}
}
}

override fun notifyListeners(queryKeys: Array<String>) {
override fun notifyListeners(vararg queryKeys: String) {
val listenersToNotify = linkedSetOf<Query.Listener>()
synchronized(listeners) {
queryKeys.forEach { listeners[it]?.let(listenersToNotify::addAll) }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,19 +29,19 @@ class JsSqlDriver(private val db: Database) : SqlDriver {
private var transaction: Transacter.Transaction? = null
private val listeners = mutableMapOf<String, MutableSet<Query.Listener>>()

override fun addListener(listener: Query.Listener, queryKeys: Array<String>) {
override fun addListener(vararg queryKeys: String, listener: Query.Listener) {
queryKeys.forEach {
listeners.getOrPut(it, { mutableSetOf() }).add(listener)
}
}

override fun removeListener(listener: Query.Listener, queryKeys: Array<String>) {
override fun removeListener(vararg queryKeys: String, listener: Query.Listener) {
queryKeys.forEach {
listeners[it]?.remove(listener)
}
}

override fun notifyListeners(queryKeys: Array<String>) {
override fun notifyListeners(vararg queryKeys: String) {
queryKeys.flatMap { listeners[it].orEmpty() }
.distinct()
.forEach(Query.Listener::queryResultsChanged)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -135,32 +135,24 @@ class JsQueryTest {

val notifies = AtomicInt(0)
val query = driver.testDataQuery()
val listener = object : Query.Listener {
override fun queryResultsChanged() {
notifies.incrementAndGet()
}
}
val listener = Query.Listener { notifies.incrementAndGet() }

query.addListener(listener)
assertEquals(0, notifies.get())

driver.notifyListeners(arrayOf("test"))
driver.notifyListeners("test")
assertEquals(1, notifies.get())
}

@Test fun removeListenerActuallyRemovesListener() = testing { driver ->

val notifies = AtomicInt(0)
val query = driver.testDataQuery()
val listener = object : Query.Listener {
override fun queryResultsChanged() {
notifies.incrementAndGet()
}
}
val listener = Query.Listener { notifies.incrementAndGet() }

query.addListener(listener)
query.removeListener(listener)
driver.notifyListeners(arrayOf("test"))
driver.notifyListeners("test")
assertEquals(0, notifies.get())
}

Expand All @@ -178,11 +170,11 @@ class JsQueryTest {
}

override fun addListener(listener: Listener) {
addListener(listener, arrayOf("test"))
addListener("test", listener = listener)
}

override fun removeListener(listener: Listener) {
removeListener(listener, arrayOf("test"))
removeListener("test", listener = listener)
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,19 +65,19 @@ class WebWorkerDriver(private val worker: Worker) : SqlDriver {
}
}

override fun addListener(listener: Query.Listener, queryKeys: Array<String>) {
override fun addListener(vararg queryKeys: String, listener: Query.Listener) {
queryKeys.forEach {
listeners.getOrPut(it) { mutableSetOf() }.add(listener)
}
}

override fun removeListener(listener: Query.Listener, queryKeys: Array<String>) {
override fun removeListener(vararg queryKeys: String, listener: Query.Listener) {
queryKeys.forEach {
listeners[it]?.remove(listener)
}
}

override fun notifyListeners(queryKeys: Array<String>) {
override fun notifyListeners(vararg queryKeys: String) {
queryKeys.flatMap { listeners[it].orEmpty() }
.distinct()
.forEach(Query.Listener::queryResultsChanged)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -524,8 +524,8 @@ class OffsetQueryPagingSourceTest : DbTest {
bindLong(1, offset)
}

override fun addListener(listener: Listener) = driver.addListener(listener, arrayOf("TestItem"))
override fun removeListener(listener: Listener) = driver.removeListener(listener, arrayOf("TestItem"))
override fun addListener(listener: Listener) = driver.addListener("TestItem", listener = listener)
override fun removeListener(listener: Listener) = driver.removeListener("TestItem", listener = listener)
}

private fun countQuery() = Query(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,17 +38,17 @@ class TestDb(
}

override fun addListener(listener: Listener) {
db.addListener(listener, arrayOf(key))
db.addListener(key, listener = listener)
}

override fun removeListener(listener: Listener) {
db.removeListener(listener, arrayOf(key))
db.removeListener(key, listener = listener)
}
}
}

fun notify(key: String) {
db.notifyListeners(arrayOf(key))
db.notifyListeners(key)
}

fun close() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,17 +37,17 @@ class TestDb(
}

override fun addListener(listener: Listener) {
db.addListener(listener, arrayOf(key))
db.addListener(key, listener = listener)
}

override fun removeListener(listener: Listener) {
db.removeListener(listener, arrayOf(key))
db.removeListener(key, listener = listener)
}
}
}

fun notify(key: String) {
db.notifyListeners(arrayOf(key))
db.notifyListeners(key)
}

fun close() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,17 +36,17 @@ class TestDb(
}

override fun addListener(listener: Listener) {
db.addListener(listener, arrayOf(key))
db.addListener(key, listener = listener)
}

override fun removeListener(listener: Listener) {
db.removeListener(listener, arrayOf(key))
db.removeListener(key, listener = listener)
}
}
}

fun notify(key: String) {
db.notifyListeners(arrayOf(key))
db.notifyListeners(key)
}

fun close() {
Expand Down
8 changes: 4 additions & 4 deletions runtime/api/runtime.api
Original file line number Diff line number Diff line change
Expand Up @@ -185,13 +185,13 @@ public abstract interface class app/cash/sqldelight/db/SqlCursor {
}

public abstract interface class app/cash/sqldelight/db/SqlDriver : java/io/Closeable {
public abstract fun addListener (Lapp/cash/sqldelight/Query$Listener;[Ljava/lang/String;)V
public abstract fun addListener ([Ljava/lang/String;Lapp/cash/sqldelight/Query$Listener;)V
public abstract fun currentTransaction ()Lapp/cash/sqldelight/Transacter$Transaction;
public abstract fun execute (Ljava/lang/Integer;Ljava/lang/String;ILkotlin/jvm/functions/Function1;)Lapp/cash/sqldelight/db/QueryResult;
public abstract fun executeQuery (Ljava/lang/Integer;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/functions/Function1;)Lapp/cash/sqldelight/db/QueryResult;
public abstract fun newTransaction ()Lapp/cash/sqldelight/db/QueryResult;
public abstract fun notifyListeners ([Ljava/lang/String;)V
public abstract fun removeListener (Lapp/cash/sqldelight/Query$Listener;[Ljava/lang/String;)V
public abstract fun removeListener ([Ljava/lang/String;Lapp/cash/sqldelight/Query$Listener;)V
}

public final class app/cash/sqldelight/db/SqlDriver$DefaultImpls {
Expand All @@ -215,14 +215,14 @@ public abstract interface class app/cash/sqldelight/db/SqlSchema {

public final class app/cash/sqldelight/logs/LogSqliteDriver : app/cash/sqldelight/db/SqlDriver {
public fun <init> (Lapp/cash/sqldelight/db/SqlDriver;Lkotlin/jvm/functions/Function1;)V
public fun addListener (Lapp/cash/sqldelight/Query$Listener;[Ljava/lang/String;)V
public fun addListener ([Ljava/lang/String;Lapp/cash/sqldelight/Query$Listener;)V
public fun close ()V
public fun currentTransaction ()Lapp/cash/sqldelight/Transacter$Transaction;
public fun execute (Ljava/lang/Integer;Ljava/lang/String;ILkotlin/jvm/functions/Function1;)Lapp/cash/sqldelight/db/QueryResult;
public fun executeQuery (Ljava/lang/Integer;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/functions/Function1;)Lapp/cash/sqldelight/db/QueryResult;
public fun newTransaction ()Lapp/cash/sqldelight/db/QueryResult;
public fun notifyListeners ([Ljava/lang/String;)V
public fun removeListener (Lapp/cash/sqldelight/Query$Listener;[Ljava/lang/String;)V
public fun removeListener ([Ljava/lang/String;Lapp/cash/sqldelight/Query$Listener;)V
}

public final class app/cash/sqldelight/logs/StatementParameterInterceptor : app/cash/sqldelight/db/SqlPreparedStatement {
Expand Down
Loading

0 comments on commit 928427a

Please sign in to comment.