Skip to content
This repository was archived by the owner on Aug 17, 2020. It is now read-only.

Commit 8bc1876

Browse files
Alec StrongAlec Strong
authored andcommitted
Merge pull request #85 from square/jw/check-on-subscribe
Check for enclosing transaction on actual subscribe, not initial emission.
2 parents 1eccc98 + daa96e2 commit 8bc1876

2 files changed

Lines changed: 20 additions & 5 deletions

File tree

sqlbrite/src/androidTest/java/com/squareup/sqlbrite/BriteDatabaseTest.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -546,6 +546,16 @@ public final class BriteDatabaseTest {
546546
o.assertErrorContains("Cannot subscribe to observable query in a transaction.");
547547
}
548548

549+
@Test public void querySubscribedToDuringTransactionThrowsWithBackpressure() {
550+
o.doRequest(0);
551+
552+
Observable<Query> query = db.createQuery(TABLE_EMPLOYEE, SELECT_EMPLOYEES);
553+
554+
db.newTransaction();
555+
query.subscribe(o);
556+
o.assertErrorContains("Cannot subscribe to observable query in a transaction.");
557+
}
558+
549559
@Test public void callingEndMultipleTimesThrows() {
550560
Transaction transaction = db.newTransaction();
551561
transaction.end();

sqlbrite/src/main/java/com/squareup/sqlbrite/BriteDatabase.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import java.util.Set;
3434
import java.util.concurrent.TimeUnit;
3535
import rx.Observable;
36+
import rx.functions.Action0;
3637
import rx.functions.Func1;
3738
import rx.subjects.PublishSubject;
3839

@@ -297,18 +298,22 @@ private QueryObservable createQuery(final Func1<Set<String>, Boolean> tableFilte
297298
.startWith(INITIAL_TRIGGER) // Immediately execute the query for initial value.
298299
.map(new Func1<Set<String>, Query>() {
299300
@Override public Query call(Set<String> trigger) {
300-
if (transactions.get() != null) {
301-
throw new IllegalStateException(
302-
"Cannot subscribe to observable query in a transaction.");
303-
}
304301
if (logging) {
305302
log("QUERY\n trigger: %s\n tables: %s\n sql: %s\n args: %s", trigger, tableFilter,
306303
sql, Arrays.toString(args));
307304
}
308305
return query;
309306
}
310307
}) //
311-
.onBackpressureLatest();
308+
.onBackpressureLatest() //
309+
.doOnSubscribe(new Action0() {
310+
@Override public void call() {
311+
if (transactions.get() != null) {
312+
throw new IllegalStateException(
313+
"Cannot subscribe to observable query in a transaction.");
314+
}
315+
}
316+
});
312317
return new QueryObservable(queryObservable);
313318
}
314319

0 commit comments

Comments
 (0)