what-the-bank/sources/com/google/firebase/firestore/local/SQLiteTargetCache.java

297 lines
13 KiB
Java
Raw Permalink Normal View History

2024-07-27 18:17:47 +07:00
package com.google.firebase.firestore.local;
import android.database.Cursor;
import android.database.sqlite.SQLiteStatement;
import android.util.SparseArray;
import com.google.firebase.Timestamp;
import com.google.firebase.database.collection.ImmutableSortedSet;
import com.google.firebase.firestore.local.SQLiteTargetCache;
import com.google.firebase.firestore.model.DocumentKey;
import com.google.firebase.firestore.model.SnapshotVersion;
import com.google.firebase.firestore.proto.Target;
import com.google.firebase.firestore.util.Assert;
import com.google.firebase.firestore.util.Consumer;
import com.google.protobuf.InvalidProtocolBufferException;
import java.util.Iterator;
/* JADX INFO: Access modifiers changed from: package-private */
/* loaded from: classes2.dex */
public final class SQLiteTargetCache implements TargetCache {
private final SQLitePersistence db;
private int highestTargetId;
private long lastListenSequenceNumber;
private SnapshotVersion lastRemoteSnapshotVersion = SnapshotVersion.NONE;
private final LocalSerializer localSerializer;
private long targetCount;
/* JADX INFO: Access modifiers changed from: package-private */
public SQLiteTargetCache(SQLitePersistence sQLitePersistence, LocalSerializer localSerializer) {
this.db = sQLitePersistence;
this.localSerializer = localSerializer;
}
/* JADX INFO: Access modifiers changed from: package-private */
public final void start() {
Assert.hardAssert(this.db.query("SELECT highest_target_id, highest_listen_sequence_number, last_remote_snapshot_version_seconds, last_remote_snapshot_version_nanos, target_count FROM target_globals LIMIT 1").first(new Consumer(this) { // from class: com.google.firebase.firestore.local.SQLiteTargetCache$$ExternalSyntheticLambda1
public final SQLiteTargetCache f$0;
@Override // com.google.firebase.firestore.util.Consumer
public final void accept(Object obj) {
this.f$0.m233x4f660810((Cursor) obj);
}
{
this.f$0 = this;
}
}) == 1, "Missing target_globals entry", new Object[0]);
}
/* JADX INFO: Access modifiers changed from: package-private */
/* renamed from: lambda$start$0$com-google-firebase-firestore-local-SQLiteTargetCache, reason: not valid java name */
public final /* synthetic */ void m233x4f660810(Cursor cursor) {
this.highestTargetId = cursor.getInt(0);
this.lastListenSequenceNumber = cursor.getInt(1);
this.lastRemoteSnapshotVersion = new SnapshotVersion(new Timestamp(cursor.getLong(2), cursor.getInt(3)));
this.targetCount = cursor.getLong(4);
}
public final void forEachTarget(final Consumer<TargetData> consumer) {
this.db.query("SELECT target_proto FROM targets").forEach(new Consumer(this, consumer) { // from class: com.google.firebase.firestore.local.SQLiteTargetCache$$ExternalSyntheticLambda3
public final SQLiteTargetCache f$0;
public final Consumer f$1;
@Override // com.google.firebase.firestore.util.Consumer
public final void accept(Object obj) {
this.f$0.m230x1515438a(this.f$1, (Cursor) obj);
}
{
this.f$0 = this;
this.f$1 = consumer;
}
});
}
/* JADX INFO: Access modifiers changed from: package-private */
/* renamed from: lambda$forEachTarget$1$com-google-firebase-firestore-local-SQLiteTargetCache, reason: not valid java name */
public final /* synthetic */ void m230x1515438a(Consumer consumer, Cursor cursor) {
consumer.accept(decodeTargetData(cursor.getBlob(0)));
}
@Override // com.google.firebase.firestore.local.TargetCache
public final void setLastRemoteSnapshotVersion(SnapshotVersion snapshotVersion) {
this.lastRemoteSnapshotVersion = snapshotVersion;
writeMetadata();
}
private void saveTargetData(TargetData targetData) {
int targetId = targetData.getTargetId();
String canonicalId = targetData.getTarget().getCanonicalId();
Timestamp timestamp = targetData.getSnapshotVersion().getTimestamp();
Target encodeTargetData = this.localSerializer.encodeTargetData(targetData);
SQLitePersistence sQLitePersistence = this.db;
long seconds = timestamp.getSeconds();
int nanoseconds = timestamp.getNanoseconds();
byte[] j = targetData.getResumeToken().j();
long sequenceNumber = targetData.getSequenceNumber();
sQLitePersistence.execute("INSERT OR REPLACE INTO targets (target_id, canonical_id, snapshot_version_seconds, snapshot_version_nanos, resume_token, last_listen_sequence_number, target_proto) VALUES (?, ?, ?, ?, ?, ?, ?)", Integer.valueOf(targetId), canonicalId, Long.valueOf(seconds), Integer.valueOf(nanoseconds), j, Long.valueOf(sequenceNumber), encodeTargetData.toByteArray());
}
private boolean updateMetadata(TargetData targetData) {
boolean z;
if (targetData.getTargetId() > this.highestTargetId) {
this.highestTargetId = targetData.getTargetId();
z = true;
} else {
z = false;
}
if (targetData.getSequenceNumber() <= this.lastListenSequenceNumber) {
return z;
}
this.lastListenSequenceNumber = targetData.getSequenceNumber();
return true;
}
@Override // com.google.firebase.firestore.local.TargetCache
public final void addTargetData(TargetData targetData) {
saveTargetData(targetData);
updateMetadata(targetData);
this.targetCount++;
writeMetadata();
}
@Override // com.google.firebase.firestore.local.TargetCache
public final void updateTargetData(TargetData targetData) {
saveTargetData(targetData);
if (updateMetadata(targetData)) {
writeMetadata();
}
}
private void writeMetadata() {
this.db.execute("UPDATE target_globals SET highest_target_id = ?, highest_listen_sequence_number = ?, last_remote_snapshot_version_seconds = ?, last_remote_snapshot_version_nanos = ?, target_count = ?", Integer.valueOf(this.highestTargetId), Long.valueOf(this.lastListenSequenceNumber), Long.valueOf(this.lastRemoteSnapshotVersion.getTimestamp().getSeconds()), Integer.valueOf(this.lastRemoteSnapshotVersion.getTimestamp().getNanoseconds()), Long.valueOf(this.targetCount));
}
private void removeTarget(int i) {
removeMatchingKeysForTargetId(i);
this.db.execute("DELETE FROM targets WHERE target_id = ?", Integer.valueOf(i));
this.targetCount--;
}
/* JADX INFO: Access modifiers changed from: package-private */
public final int removeQueries(long j, final SparseArray<?> sparseArray) {
final int[] iArr = new int[1];
this.db.query("SELECT target_id FROM targets WHERE last_listen_sequence_number <= ?").binding(Long.valueOf(j)).forEach(new Consumer(this, sparseArray, iArr) { // from class: com.google.firebase.firestore.local.SQLiteTargetCache$$ExternalSyntheticLambda2
public final SQLiteTargetCache f$0;
public final SparseArray f$1;
public final int[] f$2;
@Override // com.google.firebase.firestore.util.Consumer
public final void accept(Object obj) {
this.f$0.m232x1041d572(this.f$1, this.f$2, (Cursor) obj);
}
{
this.f$0 = this;
this.f$1 = sparseArray;
this.f$2 = iArr;
}
});
writeMetadata();
return iArr[0];
}
/* JADX INFO: Access modifiers changed from: package-private */
/* renamed from: lambda$removeQueries$2$com-google-firebase-firestore-local-SQLiteTargetCache, reason: not valid java name */
public final /* synthetic */ void m232x1041d572(SparseArray sparseArray, int[] iArr, Cursor cursor) {
int i = cursor.getInt(0);
if (sparseArray.get(i) == null) {
removeTarget(i);
iArr[0] = iArr[0] + 1;
}
}
@Override // com.google.firebase.firestore.local.TargetCache
public final TargetData getTargetData(final com.google.firebase.firestore.core.Target target) {
String canonicalId = target.getCanonicalId();
final TargetDataHolder targetDataHolder = new TargetDataHolder();
this.db.query("SELECT target_proto FROM targets WHERE canonical_id = ?").binding(canonicalId).forEach(new Consumer(this, target, targetDataHolder) { // from class: com.google.firebase.firestore.local.SQLiteTargetCache$$ExternalSyntheticLambda0
public final SQLiteTargetCache f$0;
public final com.google.firebase.firestore.core.Target f$1;
public final SQLiteTargetCache.TargetDataHolder f$2;
@Override // com.google.firebase.firestore.util.Consumer
public final void accept(Object obj) {
this.f$0.m231x4f05f442(this.f$1, this.f$2, (Cursor) obj);
}
{
this.f$0 = this;
this.f$1 = target;
this.f$2 = targetDataHolder;
}
});
return targetDataHolder.targetData;
}
/* JADX INFO: Access modifiers changed from: package-private */
/* renamed from: lambda$getTargetData$3$com-google-firebase-firestore-local-SQLiteTargetCache, reason: not valid java name */
public final /* synthetic */ void m231x4f05f442(com.google.firebase.firestore.core.Target target, TargetDataHolder targetDataHolder, Cursor cursor) {
TargetData decodeTargetData = decodeTargetData(cursor.getBlob(0));
if (target.equals(decodeTargetData.getTarget())) {
targetDataHolder.targetData = decodeTargetData;
}
}
/* JADX INFO: Access modifiers changed from: package-private */
/* loaded from: classes2.dex */
public static class TargetDataHolder {
TargetData targetData;
private TargetDataHolder() {
}
}
private TargetData decodeTargetData(byte[] bArr) {
try {
return this.localSerializer.decodeTargetData(Target.parseFrom(bArr));
} catch (InvalidProtocolBufferException e) {
throw Assert.fail("TargetData failed to parse: %s", e);
}
}
@Override // com.google.firebase.firestore.local.TargetCache
public final void addMatchingKeys(ImmutableSortedSet<DocumentKey> immutableSortedSet, int i) {
SQLiteStatement prepare = this.db.prepare("INSERT OR IGNORE INTO target_documents (target_id, path) VALUES (?, ?)");
SQLiteLruReferenceDelegate referenceDelegate = this.db.getReferenceDelegate();
Iterator<DocumentKey> it = immutableSortedSet.iterator();
while (it.hasNext()) {
DocumentKey next = it.next();
this.db.execute(prepare, Integer.valueOf(i), EncodedPath.encode(next.getPath()));
referenceDelegate.addReference(next);
}
}
@Override // com.google.firebase.firestore.local.TargetCache
public final void removeMatchingKeys(ImmutableSortedSet<DocumentKey> immutableSortedSet, int i) {
SQLiteStatement prepare = this.db.prepare("DELETE FROM target_documents WHERE target_id = ? AND path = ?");
SQLiteLruReferenceDelegate referenceDelegate = this.db.getReferenceDelegate();
Iterator<DocumentKey> it = immutableSortedSet.iterator();
while (it.hasNext()) {
DocumentKey next = it.next();
this.db.execute(prepare, Integer.valueOf(i), EncodedPath.encode(next.getPath()));
referenceDelegate.removeReference(next);
}
}
public final void removeMatchingKeysForTargetId(int i) {
this.db.execute("DELETE FROM target_documents WHERE target_id = ?", Integer.valueOf(i));
}
@Override // com.google.firebase.firestore.local.TargetCache
public final ImmutableSortedSet<DocumentKey> getMatchingKeysForTargetId(int i) {
final DocumentKeysHolder documentKeysHolder = new DocumentKeysHolder();
this.db.query("SELECT path FROM target_documents WHERE target_id = ?").binding(Integer.valueOf(i)).forEach(new Consumer(documentKeysHolder) { // from class: com.google.firebase.firestore.local.SQLiteTargetCache$$ExternalSyntheticLambda4
public final SQLiteTargetCache.DocumentKeysHolder f$0;
@Override // com.google.firebase.firestore.util.Consumer
public final void accept(Object obj) {
this.f$0.keys = r0.keys.insert(DocumentKey.fromPath(EncodedPath.decodeResourcePath(((Cursor) obj).getString(0))));
}
{
this.f$0 = documentKeysHolder;
}
});
return documentKeysHolder.keys;
}
/* JADX INFO: Access modifiers changed from: package-private */
/* loaded from: classes2.dex */
public static class DocumentKeysHolder {
ImmutableSortedSet<DocumentKey> keys;
private DocumentKeysHolder() {
this.keys = DocumentKey.emptyKeySet();
}
}
public final long getTargetCount() {
return this.targetCount;
}
@Override // com.google.firebase.firestore.local.TargetCache
public final SnapshotVersion getLastRemoteSnapshotVersion() {
return this.lastRemoteSnapshotVersion;
}
@Override // com.google.firebase.firestore.local.TargetCache
public final int getHighestTargetId() {
return this.highestTargetId;
}
public final long getHighestListenSequenceNumber() {
return this.lastListenSequenceNumber;
}
}