Skip to content

Commit 4a9dcd1

Browse files
committed
Use sqlite transaction listeners (rather than doing so manually)
Using sqlite's version allows us to not worry about getting the transaction semantics correct in the face of exceptions.
1 parent 8ead372 commit 4a9dcd1

File tree

2 files changed

+18
-7
lines changed

2 files changed

+18
-7
lines changed

firebase-firestore/src/main/java/com/google/firebase/firestore/local/SQLiteLruReferenceDelegate.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,16 @@
1616

1717
import static com.google.firebase.firestore.util.Assert.hardAssert;
1818

19+
import android.database.sqlite.SQLiteTransactionListener;
1920
import android.util.SparseArray;
2021
import com.google.firebase.firestore.core.ListenSequence;
2122
import com.google.firebase.firestore.model.DocumentKey;
2223
import com.google.firebase.firestore.model.ResourcePath;
2324
import com.google.firebase.firestore.util.Consumer;
2425

2526
/** Provides LRU functionality for SQLite persistence. */
26-
class SQLiteLruReferenceDelegate implements ReferenceDelegate, LruDelegate {
27+
class SQLiteLruReferenceDelegate
28+
implements ReferenceDelegate, LruDelegate, SQLiteTransactionListener {
2729
private final SQLitePersistence persistence;
2830
private ListenSequence listenSequence;
2931
private long currentSequenceNumber;
@@ -40,6 +42,19 @@ void start(long highestSequenceNumber) {
4042
listenSequence = new ListenSequence(highestSequenceNumber);
4143
}
4244

45+
@Override
46+
public void onBegin() {
47+
onTransactionStarted();
48+
}
49+
50+
@Override
51+
public void onCommit() {
52+
onTransactionCommitted();
53+
}
54+
55+
@Override
56+
public void onRollback() {}
57+
4358
@Override
4459
public void onTransactionStarted() {
4560
hardAssert(

firebase-firestore/src/main/java/com/google/firebase/firestore/local/SQLitePersistence.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -144,8 +144,7 @@ RemoteDocumentCache getRemoteDocumentCache() {
144144
@Override
145145
void runTransaction(String action, Runnable operation) {
146146
Logger.debug(TAG, "Starting transaction: %s", action);
147-
referenceDelegate.onTransactionStarted();
148-
db.beginTransaction();
147+
db.beginTransactionWithListener(referenceDelegate);
149148
try {
150149
operation.run();
151150

@@ -154,15 +153,13 @@ void runTransaction(String action, Runnable operation) {
154153
} finally {
155154
db.endTransaction();
156155
}
157-
referenceDelegate.onTransactionCommitted();
158156
}
159157

160158
@Override
161159
<T> T runTransaction(String action, Supplier<T> operation) {
162160
Logger.debug(TAG, "Starting transaction: %s", action);
163161
T value = null;
164-
referenceDelegate.onTransactionStarted();
165-
db.beginTransaction();
162+
db.beginTransactionWithListener(referenceDelegate);
166163
try {
167164
value = operation.get();
168165

@@ -171,7 +168,6 @@ <T> T runTransaction(String action, Supplier<T> operation) {
171168
} finally {
172169
db.endTransaction();
173170
}
174-
referenceDelegate.onTransactionCommitted();
175171
return value;
176172
}
177173

0 commit comments

Comments
 (0)