.class public Lcom/google/firebase/database/android/SqlPersistenceStorageEngine; .super Ljava/lang/Object; .source "SqlPersistenceStorageEngine.java" # interfaces .implements Lcom/google/firebase/database/core/persistence/PersistenceStorageEngine; # annotations .annotation system Ldalvik/annotation/MemberClasses; value = { Lcom/google/firebase/database/android/SqlPersistenceStorageEngine$PersistentCacheOpenHelper; } .end annotation # static fields .field private static final CHILDREN_NODE_SPLIT_SIZE_THRESHOLD:I = 0x4000 .field private static final CREATE_SERVER_CACHE:Ljava/lang/String; = "CREATE TABLE serverCache (path TEXT PRIMARY KEY, value BLOB);" .field private static final CREATE_TRACKED_KEYS:Ljava/lang/String; = "CREATE TABLE trackedKeys (id INTEGER, key TEXT);" .field private static final CREATE_TRACKED_QUERIES:Ljava/lang/String; = "CREATE TABLE trackedQueries (id INTEGER PRIMARY KEY, path TEXT, queryParams TEXT, lastUse INTEGER, complete INTEGER, active INTEGER);" .field private static final CREATE_WRITES:Ljava/lang/String; = "CREATE TABLE writes (id INTEGER, path TEXT, type TEXT, part INTEGER, node BLOB, UNIQUE (id, part));" .field private static final FIRST_PART_KEY:Ljava/lang/String; = ".part-0000" .field private static final LOGGER_COMPONENT:Ljava/lang/String; = "Persistence" .field private static final PART_KEY_FORMAT:Ljava/lang/String; = ".part-%04d" .field private static final PART_KEY_PREFIX:Ljava/lang/String; = ".part-" .field private static final PATH_COLUMN_NAME:Ljava/lang/String; = "path" .field private static final ROW_ID_COLUMN_NAME:Ljava/lang/String; = "rowid" .field private static final ROW_SPLIT_SIZE:I = 0x40000 .field private static final SERVER_CACHE_TABLE:Ljava/lang/String; = "serverCache" .field private static final TRACKED_KEYS_ID_COLUMN_NAME:Ljava/lang/String; = "id" .field private static final TRACKED_KEYS_KEY_COLUMN_NAME:Ljava/lang/String; = "key" .field private static final TRACKED_KEYS_TABLE:Ljava/lang/String; = "trackedKeys" .field private static final TRACKED_QUERY_ACTIVE_COLUMN_NAME:Ljava/lang/String; = "active" .field private static final TRACKED_QUERY_COMPLETE_COLUMN_NAME:Ljava/lang/String; = "complete" .field private static final TRACKED_QUERY_ID_COLUMN_NAME:Ljava/lang/String; = "id" .field private static final TRACKED_QUERY_LAST_USE_COLUMN_NAME:Ljava/lang/String; = "lastUse" .field private static final TRACKED_QUERY_PARAMS_COLUMN_NAME:Ljava/lang/String; = "queryParams" .field private static final TRACKED_QUERY_PATH_COLUMN_NAME:Ljava/lang/String; = "path" .field private static final TRACKED_QUERY_TABLE:Ljava/lang/String; = "trackedQueries" .field private static final UTF8_CHARSET:Ljava/nio/charset/Charset; .field private static final VALUE_COLUMN_NAME:Ljava/lang/String; = "value" .field private static final WRITES_TABLE:Ljava/lang/String; = "writes" .field private static final WRITE_ID_COLUMN_NAME:Ljava/lang/String; = "id" .field private static final WRITE_NODE_COLUMN_NAME:Ljava/lang/String; = "node" .field private static final WRITE_PART_COLUMN_NAME:Ljava/lang/String; = "part" .field private static final WRITE_TYPE_COLUMN_NAME:Ljava/lang/String; = "type" .field private static final WRITE_TYPE_MERGE:Ljava/lang/String; = "m" .field private static final WRITE_TYPE_OVERWRITE:Ljava/lang/String; = "o" # instance fields .field private final database:Landroid/database/sqlite/SQLiteDatabase; .field private insideTransaction:Z .field private final logger:Lcom/google/firebase/database/logging/LogWrapper; .field private transactionStart:J # direct methods .method public static constructor ()V .locals 1 const-string v0, "UTF-8" .line 1 invoke-static {v0}, Ljava/nio/charset/Charset;->forName(Ljava/lang/String;)Ljava/nio/charset/Charset; move-result-object v0 sput-object v0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->UTF8_CHARSET:Ljava/nio/charset/Charset; return-void .end method .method public constructor (Landroid/content/Context;Lcom/google/firebase/database/core/Context;Ljava/lang/String;)V .locals 2 .line 1 invoke-direct {p0}, Ljava/lang/Object;->()V const-wide/16 v0, 0x0 .line 2 iput-wide v0, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->transactionStart:J :try_start_0 const-string v0, "utf-8" .line 3 invoke-static {p3, v0}, Ljava/net/URLEncoder;->encode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; move-result-object p3 :try_end_0 .catch Ljava/io/IOException; {:try_start_0 .. :try_end_0} :catch_0 const-string v0, "Persistence" .line 4 invoke-virtual {p2, v0}, Lcom/google/firebase/database/core/Context;->getLogger(Ljava/lang/String;)Lcom/google/firebase/database/logging/LogWrapper; move-result-object p2 iput-object p2, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->logger:Lcom/google/firebase/database/logging/LogWrapper; .line 5 invoke-direct {p0, p1, p3}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->openDatabase(Landroid/content/Context;Ljava/lang/String;)Landroid/database/sqlite/SQLiteDatabase; move-result-object p1 iput-object p1, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->database:Landroid/database/sqlite/SQLiteDatabase; return-void :catch_0 move-exception p1 .line 6 new-instance p2, Ljava/lang/RuntimeException; invoke-direct {p2, p1}, Ljava/lang/RuntimeException;->(Ljava/lang/Throwable;)V throw p2 .end method .method private static buildAncestorWhereClause(Lcom/google/firebase/database/core/Path;[Ljava/lang/String;)Ljava/lang/String; .locals 4 .line 1 array-length v0, p1 invoke-virtual {p0}, Lcom/google/firebase/database/core/Path;->size()I move-result v1 const/4 v2, 0x1 add-int/2addr v1, v2 const/4 v3, 0x0 if-lt v0, v1, :cond_0 goto :goto_0 :cond_0 move v2, v3 :goto_0 invoke-static {v2}, Lcom/google/firebase/database/core/utilities/Utilities;->hardAssert(Z)V .line 2 new-instance v0, Ljava/lang/StringBuilder; const-string v1, "(" invoke-direct {v0, v1}, Ljava/lang/StringBuilder;->(Ljava/lang/String;)V .line 3 :goto_1 invoke-virtual {p0}, Lcom/google/firebase/database/core/Path;->isEmpty()Z move-result v1 const-string v2, "path" if-nez v1, :cond_1 .line 4 invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; const-string v1, " = ? OR " .line 5 invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; .line 6 invoke-static {p0}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->pathToKey(Lcom/google/firebase/database/core/Path;)Ljava/lang/String; move-result-object v1 aput-object v1, p1, v3 .line 7 invoke-virtual {p0}, Lcom/google/firebase/database/core/Path;->getParent()Lcom/google/firebase/database/core/Path; move-result-object p0 add-int/lit8 v3, v3, 0x1 goto :goto_1 .line 8 :cond_1 invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; const-string p0, " = ?)" .line 9 invoke-virtual {v0, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; .line 10 invoke-static {}, Lcom/google/firebase/database/core/Path;->getEmptyPath()Lcom/google/firebase/database/core/Path; move-result-object p0 invoke-static {p0}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->pathToKey(Lcom/google/firebase/database/core/Path;)Ljava/lang/String; move-result-object p0 aput-object p0, p1, v3 .line 11 invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object p0 return-object p0 .end method .method private commaSeparatedList(Ljava/util/Collection;)Ljava/lang/String; .locals 4 .annotation system Ldalvik/annotation/Signature; value = { "(", "Ljava/util/Collection<", "Ljava/lang/Long;", ">;)", "Ljava/lang/String;" } .end annotation .line 1 new-instance v0, Ljava/lang/StringBuilder; invoke-direct {v0}, Ljava/lang/StringBuilder;->()V .line 2 invoke-interface {p1}, Ljava/util/Collection;->iterator()Ljava/util/Iterator; move-result-object p1 const/4 v1, 0x1 :goto_0 invoke-interface {p1}, Ljava/util/Iterator;->hasNext()Z move-result v2 if-eqz v2, :cond_1 invoke-interface {p1}, Ljava/util/Iterator;->next()Ljava/lang/Object; move-result-object v2 check-cast v2, Ljava/lang/Long; invoke-virtual {v2}, Ljava/lang/Long;->longValue()J move-result-wide v2 if-nez v1, :cond_0 const-string v1, "," .line 3 invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; :cond_0 const/4 v1, 0x0 .line 4 invoke-virtual {v0, v2, v3}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder; goto :goto_0 .line 5 :cond_1 invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object p1 return-object p1 .end method .method private deserializeNode([B)Lcom/google/firebase/database/snapshot/Node; .locals 3 .line 1 :try_start_0 new-instance v0, Ljava/lang/String; sget-object v1, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->UTF8_CHARSET:Ljava/nio/charset/Charset; invoke-direct {v0, p1, v1}, Ljava/lang/String;->([BLjava/nio/charset/Charset;)V invoke-static {v0}, Lcom/google/firebase/database/util/JsonMapper;->parseJsonValue(Ljava/lang/String;)Ljava/lang/Object; move-result-object v0 .line 2 invoke-static {v0}, Lcom/google/firebase/database/snapshot/NodeUtilities;->NodeFromJSON(Ljava/lang/Object;)Lcom/google/firebase/database/snapshot/Node; move-result-object p1 :try_end_0 .catch Ljava/io/IOException; {:try_start_0 .. :try_end_0} :catch_0 return-object p1 :catch_0 move-exception v0 .line 3 new-instance v1, Ljava/lang/String; sget-object v2, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->UTF8_CHARSET:Ljava/nio/charset/Charset; invoke-direct {v1, p1, v2}, Ljava/lang/String;->([BLjava/nio/charset/Charset;)V .line 4 new-instance p1, Ljava/lang/RuntimeException; const-string v2, "Could not deserialize node: " invoke-static {v2, v1}, Lc/g;->a(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; move-result-object v1 invoke-direct {p1, v1, v0}, Ljava/lang/RuntimeException;->(Ljava/lang/String;Ljava/lang/Throwable;)V throw p1 .end method .method private joinBytes(Ljava/util/List;)[B .locals 5 .annotation system Ldalvik/annotation/Signature; value = { "(", "Ljava/util/List<", "[B>;)[B" } .end annotation .line 1 invoke-interface {p1}, Ljava/util/List;->iterator()Ljava/util/Iterator; move-result-object v0 const/4 v1, 0x0 move v2, v1 :goto_0 invoke-interface {v0}, Ljava/util/Iterator;->hasNext()Z move-result v3 if-eqz v3, :cond_0 invoke-interface {v0}, Ljava/util/Iterator;->next()Ljava/lang/Object; move-result-object v3 check-cast v3, [B .line 2 array-length v3, v3 add-int/2addr v2, v3 goto :goto_0 .line 3 :cond_0 new-array v0, v2, [B .line 4 invoke-interface {p1}, Ljava/util/List;->iterator()Ljava/util/Iterator; move-result-object p1 move v2, v1 :goto_1 invoke-interface {p1}, Ljava/util/Iterator;->hasNext()Z move-result v3 if-eqz v3, :cond_1 invoke-interface {p1}, Ljava/util/Iterator;->next()Ljava/lang/Object; move-result-object v3 check-cast v3, [B .line 5 array-length v4, v3 invoke-static {v3, v1, v0, v2, v4}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V .line 6 array-length v3, v3 add-int/2addr v2, v3 goto :goto_1 :cond_1 return-object v0 .end method .method private loadNested(Lcom/google/firebase/database/core/Path;)Lcom/google/firebase/database/snapshot/Node; .locals 21 move-object/from16 v1, p0 move-object/from16 v0, p1 .line 1 new-instance v2, Ljava/util/ArrayList; invoke-direct {v2}, Ljava/util/ArrayList;->()V .line 2 new-instance v3, Ljava/util/ArrayList; invoke-direct {v3}, Ljava/util/ArrayList;->()V .line 3 invoke-static {}, Ljava/lang/System;->currentTimeMillis()J move-result-wide v4 const-string v6, "path" const-string v7, "value" .line 4 filled-new-array {v6, v7}, [Ljava/lang/String; move-result-object v6 invoke-direct {v1, v0, v6}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->loadNestedQuery(Lcom/google/firebase/database/core/Path;[Ljava/lang/String;)Landroid/database/Cursor; move-result-object v6 .line 5 invoke-static {}, Ljava/lang/System;->currentTimeMillis()J move-result-wide v7 sub-long/2addr v7, v4 .line 6 invoke-static {}, Ljava/lang/System;->currentTimeMillis()J move-result-wide v9 .line 7 :goto_0 :try_start_0 invoke-interface {v6}, Landroid/database/Cursor;->moveToNext()Z move-result v11 const/4 v12, 0x1 const/4 v13, 0x0 if-eqz v11, :cond_0 .line 8 invoke-interface {v6, v13}, Landroid/database/Cursor;->getString(I)Ljava/lang/String; move-result-object v11 invoke-virtual {v2, v11}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z .line 9 invoke-interface {v6, v12}, Landroid/database/Cursor;->getBlob(I)[B move-result-object v11 invoke-virtual {v3, v11}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z :try_end_0 .catchall {:try_start_0 .. :try_end_0} :catchall_0 goto :goto_0 .line 10 :cond_0 invoke-interface {v6}, Landroid/database/Cursor;->close()V .line 11 invoke-static {}, Ljava/lang/System;->currentTimeMillis()J move-result-wide v11 sub-long/2addr v11, v9 .line 12 invoke-static {}, Ljava/lang/System;->currentTimeMillis()J move-result-wide v9 .line 13 invoke-static {}, Lcom/google/firebase/database/snapshot/EmptyNode;->Empty()Lcom/google/firebase/database/snapshot/EmptyNode; move-result-object v6 .line 14 new-instance v14, Ljava/util/HashMap; invoke-direct {v14}, Ljava/util/HashMap;->()V move-wide/from16 v16, v11 move v15, v13 .line 15 :goto_1 invoke-virtual {v3}, Ljava/util/ArrayList;->size()I move-result v11 if-ge v13, v11, :cond_6 .line 16 invoke-virtual {v2, v13}, Ljava/util/ArrayList;->get(I)Ljava/lang/Object; move-result-object v11 check-cast v11, Ljava/lang/String; const-string v12, ".part-0000" invoke-virtual {v11, v12}, Ljava/lang/String;->endsWith(Ljava/lang/String;)Z move-result v11 if-eqz v11, :cond_2 .line 17 invoke-virtual {v2, v13}, Ljava/util/ArrayList;->get(I)Ljava/lang/Object; move-result-object v11 check-cast v11, Ljava/lang/String; .line 18 new-instance v12, Lcom/google/firebase/database/core/Path; .line 19 invoke-virtual {v11}, Ljava/lang/String;->length()I move-result v18 move-wide/from16 v19, v7 add-int/lit8 v7, v18, -0xa const/4 v8, 0x0 invoke-virtual {v11, v8, v7}, Ljava/lang/String;->substring(II)Ljava/lang/String; move-result-object v7 invoke-direct {v12, v7}, Lcom/google/firebase/database/core/Path;->(Ljava/lang/String;)V .line 20 invoke-direct {v1, v12, v2, v13}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->splitNodeRunLength(Lcom/google/firebase/database/core/Path;Ljava/util/List;I)I move-result v7 .line 21 iget-object v8, v1, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->logger:Lcom/google/firebase/database/logging/LogWrapper; invoke-virtual {v8}, Lcom/google/firebase/database/logging/LogWrapper;->logsDebug()Z move-result v8 if-eqz v8, :cond_1 .line 22 iget-object v8, v1, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->logger:Lcom/google/firebase/database/logging/LogWrapper; const-string v11, "Loading split node with " move-object/from16 v18, v12 const-string v12, " parts." invoke-static {v11, v7, v12}, Landroidx/camera/core/impl/utils/f;->a(Ljava/lang/String;ILjava/lang/String;)Ljava/lang/String; move-result-object v11 const/4 v12, 0x0 new-array v12, v12, [Ljava/lang/Object; invoke-virtual {v8, v11, v12}, Lcom/google/firebase/database/logging/LogWrapper;->debug(Ljava/lang/String;[Ljava/lang/Object;)V goto :goto_2 :cond_1 move-object/from16 v18, v12 :goto_2 add-int/2addr v7, v13 .line 23 invoke-virtual {v3, v13, v7}, Ljava/util/ArrayList;->subList(II)Ljava/util/List; move-result-object v8 invoke-direct {v1, v8}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->joinBytes(Ljava/util/List;)[B move-result-object v8 invoke-direct {v1, v8}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->deserializeNode([B)Lcom/google/firebase/database/snapshot/Node; move-result-object v8 add-int/lit8 v13, v7, -0x1 move-object/from16 v12, v18 goto :goto_3 :cond_2 move-wide/from16 v19, v7 .line 24 invoke-virtual {v3, v13}, Ljava/util/ArrayList;->get(I)Ljava/lang/Object; move-result-object v7 check-cast v7, [B invoke-direct {v1, v7}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->deserializeNode([B)Lcom/google/firebase/database/snapshot/Node; move-result-object v8 .line 25 new-instance v12, Lcom/google/firebase/database/core/Path; invoke-virtual {v2, v13}, Ljava/util/ArrayList;->get(I)Ljava/lang/Object; move-result-object v7 check-cast v7, Ljava/lang/String; invoke-direct {v12, v7}, Lcom/google/firebase/database/core/Path;->(Ljava/lang/String;)V .line 26 :goto_3 invoke-virtual {v12}, Lcom/google/firebase/database/core/Path;->getBack()Lcom/google/firebase/database/snapshot/ChildKey; move-result-object v7 if-eqz v7, :cond_3 invoke-virtual {v12}, Lcom/google/firebase/database/core/Path;->getBack()Lcom/google/firebase/database/snapshot/ChildKey; move-result-object v7 invoke-virtual {v7}, Lcom/google/firebase/database/snapshot/ChildKey;->isPriorityChildName()Z move-result v7 if-eqz v7, :cond_3 .line 27 invoke-virtual {v14, v12, v8}, Ljava/util/HashMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; goto :goto_4 .line 28 :cond_3 invoke-virtual {v12, v0}, Lcom/google/firebase/database/core/Path;->contains(Lcom/google/firebase/database/core/Path;)Z move-result v7 if-eqz v7, :cond_4 xor-int/lit8 v6, v15, 0x1 const-string v7, "Descendants of path must come after ancestors." .line 29 invoke-static {v6, v7}, Lcom/google/firebase/database/core/utilities/Utilities;->hardAssert(ZLjava/lang/String;)V .line 30 invoke-static {v12, v0}, Lcom/google/firebase/database/core/Path;->getRelative(Lcom/google/firebase/database/core/Path;Lcom/google/firebase/database/core/Path;)Lcom/google/firebase/database/core/Path; move-result-object v6 invoke-interface {v8, v6}, Lcom/google/firebase/database/snapshot/Node;->getChild(Lcom/google/firebase/database/core/Path;)Lcom/google/firebase/database/snapshot/Node; move-result-object v6 :goto_4 const/4 v7, 0x1 goto :goto_5 .line 31 :cond_4 invoke-virtual {v0, v12}, Lcom/google/firebase/database/core/Path;->contains(Lcom/google/firebase/database/core/Path;)Z move-result v7 if-eqz v7, :cond_5 .line 32 invoke-static {v0, v12}, Lcom/google/firebase/database/core/Path;->getRelative(Lcom/google/firebase/database/core/Path;Lcom/google/firebase/database/core/Path;)Lcom/google/firebase/database/core/Path; move-result-object v7 .line 33 invoke-interface {v6, v7, v8}, Lcom/google/firebase/database/snapshot/Node;->updateChild(Lcom/google/firebase/database/core/Path;Lcom/google/firebase/database/snapshot/Node;)Lcom/google/firebase/database/snapshot/Node; move-result-object v6 const/4 v7, 0x1 const/4 v8, 0x1 move v15, v8 :goto_5 add-int/2addr v13, v7 move-wide/from16 v7, v19 goto/16 :goto_1 :cond_5 const/4 v2, 0x1 .line 34 new-instance v3, Ljava/lang/IllegalStateException; const/4 v4, 0x2 new-array v4, v4, [Ljava/lang/Object; const/4 v5, 0x0 aput-object v12, v4, v5 aput-object v0, v4, v2 const-string v0, "Loading an unrelated row with path %s for %s" .line 35 invoke-static {v0, v4}, Ljava/lang/String;->format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String; move-result-object v0 invoke-direct {v3, v0}, Ljava/lang/IllegalStateException;->(Ljava/lang/String;)V throw v3 :cond_6 move-wide/from16 v19, v7 .line 36 invoke-virtual {v14}, Ljava/util/HashMap;->entrySet()Ljava/util/Set; move-result-object v2 invoke-interface {v2}, Ljava/util/Set;->iterator()Ljava/util/Iterator; move-result-object v2 :goto_6 invoke-interface {v2}, Ljava/util/Iterator;->hasNext()Z move-result v7 if-eqz v7, :cond_7 invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object; move-result-object v7 check-cast v7, Ljava/util/Map$Entry; .line 37 invoke-interface {v7}, Ljava/util/Map$Entry;->getKey()Ljava/lang/Object; move-result-object v8 check-cast v8, Lcom/google/firebase/database/core/Path; .line 38 invoke-static {v0, v8}, Lcom/google/firebase/database/core/Path;->getRelative(Lcom/google/firebase/database/core/Path;Lcom/google/firebase/database/core/Path;)Lcom/google/firebase/database/core/Path; move-result-object v8 invoke-interface {v7}, Ljava/util/Map$Entry;->getValue()Ljava/lang/Object; move-result-object v7 check-cast v7, Lcom/google/firebase/database/snapshot/Node; invoke-interface {v6, v8, v7}, Lcom/google/firebase/database/snapshot/Node;->updateChild(Lcom/google/firebase/database/core/Path;Lcom/google/firebase/database/snapshot/Node;)Lcom/google/firebase/database/snapshot/Node; move-result-object v6 goto :goto_6 .line 39 :cond_7 invoke-static {}, Ljava/lang/System;->currentTimeMillis()J move-result-wide v7 sub-long/2addr v7, v9 .line 40 invoke-static {}, Ljava/lang/System;->currentTimeMillis()J move-result-wide v9 sub-long/2addr v9, v4 .line 41 iget-object v2, v1, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->logger:Lcom/google/firebase/database/logging/LogWrapper; invoke-virtual {v2}, Lcom/google/firebase/database/logging/LogWrapper;->logsDebug()Z move-result v2 if-eqz v2, :cond_8 .line 42 iget-object v2, v1, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->logger:Lcom/google/firebase/database/logging/LogWrapper; sget-object v4, Ljava/util/Locale;->US:Ljava/util/Locale; const/4 v5, 0x7 new-array v5, v5, [Ljava/lang/Object; .line 43 invoke-virtual {v3}, Ljava/util/ArrayList;->size()I move-result v3 invoke-static {v3}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer; move-result-object v3 const/4 v11, 0x0 aput-object v3, v5, v11 .line 44 invoke-static {v6}, Lcom/google/firebase/database/core/utilities/NodeSizeEstimator;->nodeCount(Lcom/google/firebase/database/snapshot/Node;)I move-result v3 invoke-static {v3}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer; move-result-object v3 const/4 v11, 0x1 aput-object v3, v5, v11 const/4 v3, 0x2 aput-object v0, v5, v3 const/4 v0, 0x3 .line 45 invoke-static {v9, v10}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long; move-result-object v3 aput-object v3, v5, v0 const/4 v0, 0x4 .line 46 invoke-static/range {v19 .. v20}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long; move-result-object v3 aput-object v3, v5, v0 const/4 v0, 0x5 .line 47 invoke-static/range {v16 .. v17}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long; move-result-object v3 aput-object v3, v5, v0 const/4 v0, 0x6 .line 48 invoke-static {v7, v8}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long; move-result-object v3 aput-object v3, v5, v0 const-string v0, "Loaded a total of %d rows for a total of %d nodes at %s in %dms (Query: %dms, Loading: %dms, Serializing: %dms)" .line 49 invoke-static {v4, v0, v5}, Ljava/lang/String;->format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String; move-result-object v0 const/4 v3, 0x0 new-array v3, v3, [Ljava/lang/Object; .line 50 invoke-virtual {v2, v0, v3}, Lcom/google/firebase/database/logging/LogWrapper;->debug(Ljava/lang/String;[Ljava/lang/Object;)V :cond_8 return-object v6 :catchall_0 move-exception v0 .line 51 invoke-interface {v6}, Landroid/database/Cursor;->close()V .line 52 throw v0 .end method .method private loadNestedQuery(Lcom/google/firebase/database/core/Path;[Ljava/lang/String;)Landroid/database/Cursor; .locals 11 .line 1 invoke-static {p1}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->pathToKey(Lcom/google/firebase/database/core/Path;)Ljava/lang/String; move-result-object v0 .line 2 invoke-static {v0}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->pathPrefixStartToPrefixEnd(Ljava/lang/String;)Ljava/lang/String; move-result-object v1 .line 3 invoke-virtual {p1}, Lcom/google/firebase/database/core/Path;->size()I move-result v2 add-int/lit8 v2, v2, 0x3 new-array v7, v2, [Ljava/lang/String; .line 4 invoke-static {p1, v7}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->buildAncestorWhereClause(Lcom/google/firebase/database/core/Path;[Ljava/lang/String;)Ljava/lang/String; move-result-object v2 const-string v3, " OR (path > ? AND path < ?)" .line 5 invoke-static {v2, v3}, Lc/g;->a(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; move-result-object v6 .line 6 invoke-virtual {p1}, Lcom/google/firebase/database/core/Path;->size()I move-result v2 add-int/lit8 v2, v2, 0x1 aput-object v0, v7, v2 .line 7 invoke-virtual {p1}, Lcom/google/firebase/database/core/Path;->size()I move-result p1 add-int/lit8 p1, p1, 0x2 aput-object v1, v7, p1 .line 8 iget-object v3, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->database:Landroid/database/sqlite/SQLiteDatabase; const-string v4, "serverCache" const/4 v8, 0x0 const/4 v9, 0x0 const-string v10, "path" move-object v5, p2 invoke-virtual/range {v3 .. v10}, Landroid/database/sqlite/SQLiteDatabase;->query(Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor; move-result-object p1 return-object p1 .end method .method private openDatabase(Landroid/content/Context;Ljava/lang/String;)Landroid/database/sqlite/SQLiteDatabase; .locals 1 .line 1 new-instance v0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine$PersistentCacheOpenHelper; invoke-direct {v0, p1, p2}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine$PersistentCacheOpenHelper;->(Landroid/content/Context;Ljava/lang/String;)V .line 2 :try_start_0 invoke-virtual {v0}, Landroid/database/sqlite/SQLiteOpenHelper;->getWritableDatabase()Landroid/database/sqlite/SQLiteDatabase; move-result-object p1 const-string p2, "PRAGMA locking_mode = EXCLUSIVE" const/4 v0, 0x0 .line 3 invoke-virtual {p1, p2, v0}, Landroid/database/sqlite/SQLiteDatabase;->rawQuery(Ljava/lang/String;[Ljava/lang/String;)Landroid/database/Cursor; move-result-object p2 invoke-interface {p2}, Landroid/database/Cursor;->close()V .line 4 invoke-virtual {p1}, Landroid/database/sqlite/SQLiteDatabase;->beginTransaction()V .line 5 invoke-virtual {p1}, Landroid/database/sqlite/SQLiteDatabase;->endTransaction()V :try_end_0 .catch Landroid/database/sqlite/SQLiteException; {:try_start_0 .. :try_end_0} :catch_0 return-object p1 :catch_0 move-exception p1 .line 6 instance-of p2, p1, Landroid/database/sqlite/SQLiteDatabaseLockedException; if-eqz p2, :cond_0 .line 7 new-instance p2, Lcom/google/firebase/database/DatabaseException; const-string v0, "Failed to gain exclusive lock to Firebase Database\'s offline persistence. This generally means you are using Firebase Database from multiple processes in your app. Keep in mind that multi-process Android apps execute the code in your Application class in all processes, so you may need to avoid initializing FirebaseDatabase in your Application class. If you are intentionally using Firebase Database from multiple processes, you can only enable offline persistence (i.e. call setPersistenceEnabled(true)) in one of them." invoke-direct {p2, v0, p1}, Lcom/google/firebase/database/DatabaseException;->(Ljava/lang/String;Ljava/lang/Throwable;)V throw p2 .line 8 :cond_0 throw p1 .end method .method private partKey(Lcom/google/firebase/database/core/Path;I)Ljava/lang/String; .locals 3 .line 1 new-instance v0, Ljava/lang/StringBuilder; invoke-direct {v0}, Ljava/lang/StringBuilder;->()V invoke-static {p1}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->pathToKey(Lcom/google/firebase/database/core/Path;)Ljava/lang/String; move-result-object p1 invoke-virtual {v0, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; sget-object p1, Ljava/util/Locale;->US:Ljava/util/Locale; const/4 v1, 0x1 new-array v1, v1, [Ljava/lang/Object; invoke-static {p2}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer; move-result-object p2 const/4 v2, 0x0 aput-object p2, v1, v2 const-string p2, ".part-%04d" invoke-static {p1, p2, v1}, Ljava/lang/String;->format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String; move-result-object p1 invoke-virtual {v0, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object p1 return-object p1 .end method .method private static pathPrefixStartToPrefixEnd(Ljava/lang/String;)Ljava/lang/String; .locals 3 const-string v0, "/" .line 1 invoke-virtual {p0, v0}, Ljava/lang/String;->endsWith(Ljava/lang/String;)Z move-result v0 const-string v1, "Path keys must end with a \'/\'" invoke-static {v0, v1}, Lcom/google/firebase/database/core/utilities/Utilities;->hardAssert(ZLjava/lang/String;)V .line 2 new-instance v0, Ljava/lang/StringBuilder; invoke-direct {v0}, Ljava/lang/StringBuilder;->()V invoke-virtual {p0}, Ljava/lang/String;->length()I move-result v1 add-int/lit8 v1, v1, -0x1 const/4 v2, 0x0 invoke-virtual {p0, v2, v1}, Ljava/lang/String;->substring(II)Ljava/lang/String; move-result-object p0 invoke-virtual {v0, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; const/16 p0, 0x30 invoke-virtual {v0, p0}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder; invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object p0 return-object p0 .end method .method private static pathToKey(Lcom/google/firebase/database/core/Path;)Ljava/lang/String; .locals 2 .line 1 invoke-virtual {p0}, Lcom/google/firebase/database/core/Path;->isEmpty()Z move-result v0 const-string v1, "/" if-eqz v0, :cond_0 return-object v1 .line 2 :cond_0 new-instance v0, Ljava/lang/StringBuilder; invoke-direct {v0}, Ljava/lang/StringBuilder;->()V invoke-virtual {p0}, Lcom/google/firebase/database/core/Path;->toString()Ljava/lang/String; move-result-object p0 invoke-virtual {v0, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object p0 return-object p0 .end method .method private pruneTreeRecursive(Lcom/google/firebase/database/core/Path;Lcom/google/firebase/database/core/Path;Lcom/google/firebase/database/core/utilities/ImmutableTree;Lcom/google/firebase/database/core/utilities/ImmutableTree;Lcom/google/firebase/database/core/persistence/PruneForest;Ljava/util/List;)V .locals 12 .annotation system Ldalvik/annotation/Signature; value = { "(", "Lcom/google/firebase/database/core/Path;", "Lcom/google/firebase/database/core/Path;", "Lcom/google/firebase/database/core/utilities/ImmutableTree<", "Ljava/lang/Long;", ">;", "Lcom/google/firebase/database/core/utilities/ImmutableTree<", "Ljava/lang/Long;", ">;", "Lcom/google/firebase/database/core/persistence/PruneForest;", "Ljava/util/List<", "Lcom/google/firebase/database/core/utilities/Pair<", "Lcom/google/firebase/database/core/Path;", "Lcom/google/firebase/database/snapshot/Node;", ">;>;)V" } .end annotation move-object v7, p0 move-object/from16 v8, p4 move-object/from16 v9, p5 .line 1 invoke-virtual {p3}, Lcom/google/firebase/database/core/utilities/ImmutableTree;->getValue()Ljava/lang/Object; move-result-object v0 if-eqz v0, :cond_1 const/4 v0, 0x0 .line 2 invoke-static {v0}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer; move-result-object v1 new-instance v2, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine$1; invoke-direct {v2, p0, v8}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine$1;->(Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;Lcom/google/firebase/database/core/utilities/ImmutableTree;)V .line 3 invoke-virtual {v9, v1, v2}, Lcom/google/firebase/database/core/persistence/PruneForest;->foldKeptNodes(Ljava/lang/Object;Lcom/google/firebase/database/core/utilities/ImmutableTree$TreeVisitor;)Ljava/lang/Object; move-result-object v1 check-cast v1, Ljava/lang/Integer; invoke-virtual {v1}, Ljava/lang/Integer;->intValue()I move-result v1 if-lez v1, :cond_2 .line 4 invoke-virtual {p1, p2}, Lcom/google/firebase/database/core/Path;->child(Lcom/google/firebase/database/core/Path;)Lcom/google/firebase/database/core/Path; move-result-object v2 .line 5 iget-object v3, v7, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->logger:Lcom/google/firebase/database/logging/LogWrapper; invoke-virtual {v3}, Lcom/google/firebase/database/logging/LogWrapper;->logsDebug()Z move-result v3 if-eqz v3, :cond_0 .line 6 iget-object v3, v7, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->logger:Lcom/google/firebase/database/logging/LogWrapper; sget-object v4, Ljava/util/Locale;->US:Ljava/util/Locale; const/4 v5, 0x2 new-array v5, v5, [Ljava/lang/Object; .line 7 invoke-static {v1}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer; move-result-object v1 aput-object v1, v5, v0 const/4 v1, 0x1 aput-object v2, v5, v1 const-string v1, "Need to rewrite %d nodes below path %s" .line 8 invoke-static {v4, v1, v5}, Ljava/lang/String;->format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String; move-result-object v1 new-array v0, v0, [Ljava/lang/Object; .line 9 invoke-virtual {v3, v1, v0}, Lcom/google/firebase/database/logging/LogWrapper;->debug(Ljava/lang/String;[Ljava/lang/Object;)V .line 10 :cond_0 invoke-direct {p0, v2}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->loadNested(Lcom/google/firebase/database/core/Path;)Lcom/google/firebase/database/snapshot/Node; move-result-object v5 const/4 v6, 0x0 .line 11 new-instance v10, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine$2; move-object v0, v10 move-object v1, p0 move-object/from16 v2, p4 move-object/from16 v3, p6 move-object v4, p2 invoke-direct/range {v0 .. v5}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine$2;->(Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;Lcom/google/firebase/database/core/utilities/ImmutableTree;Ljava/util/List;Lcom/google/firebase/database/core/Path;Lcom/google/firebase/database/snapshot/Node;)V invoke-virtual {v9, v6, v10}, Lcom/google/firebase/database/core/persistence/PruneForest;->foldKeptNodes(Ljava/lang/Object;Lcom/google/firebase/database/core/utilities/ImmutableTree$TreeVisitor;)Ljava/lang/Object; goto :goto_1 .line 12 :cond_1 invoke-virtual {p3}, Lcom/google/firebase/database/core/utilities/ImmutableTree;->getChildren()Lcom/google/firebase/database/collection/ImmutableSortedMap; move-result-object v0 invoke-virtual {v0}, Lcom/google/firebase/database/collection/ImmutableSortedMap;->iterator()Ljava/util/Iterator; move-result-object v10 :goto_0 invoke-interface {v10}, Ljava/util/Iterator;->hasNext()Z move-result v0 if-eqz v0, :cond_2 invoke-interface {v10}, Ljava/util/Iterator;->next()Ljava/lang/Object; move-result-object v0 check-cast v0, Ljava/util/Map$Entry; .line 13 invoke-interface {v0}, Ljava/util/Map$Entry;->getKey()Ljava/lang/Object; move-result-object v1 check-cast v1, Lcom/google/firebase/database/snapshot/ChildKey; .line 14 invoke-interface {v0}, Ljava/util/Map$Entry;->getKey()Ljava/lang/Object; move-result-object v2 check-cast v2, Lcom/google/firebase/database/snapshot/ChildKey; invoke-virtual {v9, v2}, Lcom/google/firebase/database/core/persistence/PruneForest;->child(Lcom/google/firebase/database/snapshot/ChildKey;)Lcom/google/firebase/database/core/persistence/PruneForest; move-result-object v5 move-object v11, p2 .line 15 invoke-virtual {p2, v1}, Lcom/google/firebase/database/core/Path;->child(Lcom/google/firebase/database/snapshot/ChildKey;)Lcom/google/firebase/database/core/Path; move-result-object v2 .line 16 invoke-interface {v0}, Ljava/util/Map$Entry;->getValue()Ljava/lang/Object; move-result-object v0 move-object v3, v0 check-cast v3, Lcom/google/firebase/database/core/utilities/ImmutableTree; .line 17 invoke-virtual {v8, v1}, Lcom/google/firebase/database/core/utilities/ImmutableTree;->getChild(Lcom/google/firebase/database/snapshot/ChildKey;)Lcom/google/firebase/database/core/utilities/ImmutableTree; move-result-object v4 move-object v0, p0 move-object v1, p1 move-object/from16 v6, p6 .line 18 invoke-direct/range {v0 .. v6}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->pruneTreeRecursive(Lcom/google/firebase/database/core/Path;Lcom/google/firebase/database/core/Path;Lcom/google/firebase/database/core/utilities/ImmutableTree;Lcom/google/firebase/database/core/utilities/ImmutableTree;Lcom/google/firebase/database/core/persistence/PruneForest;Ljava/util/List;)V goto :goto_0 :cond_2 :goto_1 return-void .end method .method private removeNested(Ljava/lang/String;Lcom/google/firebase/database/core/Path;)I .locals 4 .line 1 invoke-static {p2}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->pathToKey(Lcom/google/firebase/database/core/Path;)Ljava/lang/String; move-result-object p2 .line 2 invoke-static {p2}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->pathPrefixStartToPrefixEnd(Ljava/lang/String;)Ljava/lang/String; move-result-object v0 .line 3 iget-object v1, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->database:Landroid/database/sqlite/SQLiteDatabase; const/4 v2, 0x2 new-array v2, v2, [Ljava/lang/String; const/4 v3, 0x0 aput-object p2, v2, v3 const/4 p2, 0x1 aput-object v0, v2, p2 const-string p2, "path >= ? AND path < ?" invoke-virtual {v1, p1, p2, v2}, Landroid/database/sqlite/SQLiteDatabase;->delete(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)I move-result p1 return p1 .end method .method private saveNested(Lcom/google/firebase/database/core/Path;Lcom/google/firebase/database/snapshot/Node;)I .locals 7 .line 1 invoke-static {p2}, Lcom/google/firebase/database/core/utilities/NodeSizeEstimator;->estimateSerializedNodeSize(Lcom/google/firebase/database/snapshot/Node;)J move-result-wide v0 .line 2 instance-of v2, p2, Lcom/google/firebase/database/snapshot/ChildrenNode; const/4 v3, 0x1 if-eqz v2, :cond_3 const-wide/16 v4, 0x4000 cmp-long v2, v0, v4 if-lez v2, :cond_3 .line 3 iget-object v2, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->logger:Lcom/google/firebase/database/logging/LogWrapper; invoke-virtual {v2}, Lcom/google/firebase/database/logging/LogWrapper;->logsDebug()Z move-result v2 const/4 v4, 0x0 if-eqz v2, :cond_0 .line 4 iget-object v2, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->logger:Lcom/google/firebase/database/logging/LogWrapper; sget-object v5, Ljava/util/Locale;->US:Ljava/util/Locale; const/4 v6, 0x3 new-array v6, v6, [Ljava/lang/Object; aput-object p1, v6, v4 .line 5 invoke-static {v0, v1}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long; move-result-object v0 aput-object v0, v6, v3 const/4 v0, 0x2 const/16 v1, 0x4000 .line 6 invoke-static {v1}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer; move-result-object v1 aput-object v1, v6, v0 const-string v0, "Node estimated serialized size at path %s of %d bytes exceeds limit of %d bytes. Splitting up." .line 7 invoke-static {v5, v0, v6}, Ljava/lang/String;->format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String; move-result-object v0 new-array v1, v4, [Ljava/lang/Object; .line 8 invoke-virtual {v2, v0, v1}, Lcom/google/firebase/database/logging/LogWrapper;->debug(Ljava/lang/String;[Ljava/lang/Object;)V .line 9 :cond_0 invoke-interface {p2}, Ljava/lang/Iterable;->iterator()Ljava/util/Iterator; move-result-object v0 :goto_0 invoke-interface {v0}, Ljava/util/Iterator;->hasNext()Z move-result v1 if-eqz v1, :cond_1 invoke-interface {v0}, Ljava/util/Iterator;->next()Ljava/lang/Object; move-result-object v1 check-cast v1, Lcom/google/firebase/database/snapshot/NamedNode; .line 10 invoke-virtual {v1}, Lcom/google/firebase/database/snapshot/NamedNode;->getName()Lcom/google/firebase/database/snapshot/ChildKey; move-result-object v2 invoke-virtual {p1, v2}, Lcom/google/firebase/database/core/Path;->child(Lcom/google/firebase/database/snapshot/ChildKey;)Lcom/google/firebase/database/core/Path; move-result-object v2 invoke-virtual {v1}, Lcom/google/firebase/database/snapshot/NamedNode;->getNode()Lcom/google/firebase/database/snapshot/Node; move-result-object v1 invoke-direct {p0, v2, v1}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->saveNested(Lcom/google/firebase/database/core/Path;Lcom/google/firebase/database/snapshot/Node;)I move-result v1 add-int/2addr v4, v1 goto :goto_0 .line 11 :cond_1 invoke-interface {p2}, Lcom/google/firebase/database/snapshot/Node;->getPriority()Lcom/google/firebase/database/snapshot/Node; move-result-object v0 invoke-interface {v0}, Lcom/google/firebase/database/snapshot/Node;->isEmpty()Z move-result v0 if-nez v0, :cond_2 .line 12 invoke-static {}, Lcom/google/firebase/database/snapshot/ChildKey;->getPriorityKey()Lcom/google/firebase/database/snapshot/ChildKey; move-result-object v0 invoke-virtual {p1, v0}, Lcom/google/firebase/database/core/Path;->child(Lcom/google/firebase/database/snapshot/ChildKey;)Lcom/google/firebase/database/core/Path; move-result-object v0 invoke-interface {p2}, Lcom/google/firebase/database/snapshot/Node;->getPriority()Lcom/google/firebase/database/snapshot/Node; move-result-object p2 invoke-direct {p0, v0, p2}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->saveNode(Lcom/google/firebase/database/core/Path;Lcom/google/firebase/database/snapshot/Node;)V add-int/lit8 v4, v4, 0x1 .line 13 :cond_2 invoke-static {}, Lcom/google/firebase/database/snapshot/EmptyNode;->Empty()Lcom/google/firebase/database/snapshot/EmptyNode; move-result-object p2 invoke-direct {p0, p1, p2}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->saveNode(Lcom/google/firebase/database/core/Path;Lcom/google/firebase/database/snapshot/Node;)V add-int/2addr v4, v3 return v4 .line 14 :cond_3 invoke-direct {p0, p1, p2}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->saveNode(Lcom/google/firebase/database/core/Path;Lcom/google/firebase/database/snapshot/Node;)V return v3 .end method .method private saveNode(Lcom/google/firebase/database/core/Path;Lcom/google/firebase/database/snapshot/Node;)V .locals 9 const/4 v0, 0x1 .line 1 invoke-interface {p2, v0}, Lcom/google/firebase/database/snapshot/Node;->getValue(Z)Ljava/lang/Object; move-result-object p2 invoke-direct {p0, p2}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->serializeObject(Ljava/lang/Object;)[B move-result-object p2 .line 2 array-length v0, p2 const/4 v1, 0x5 const/4 v2, 0x0 const-string v3, "serverCache" const-string v4, "value" const-string v5, "path" const/high16 v6, 0x40000 if-lt v0, v6, :cond_1 .line 3 invoke-static {p2, v6}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->splitBytes([BI)Ljava/util/List; move-result-object p2 .line 4 iget-object v0, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->logger:Lcom/google/firebase/database/logging/LogWrapper; invoke-virtual {v0}, Lcom/google/firebase/database/logging/LogWrapper;->logsDebug()Z move-result v0 const/4 v6, 0x0 if-eqz v0, :cond_0 .line 5 iget-object v0, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->logger:Lcom/google/firebase/database/logging/LogWrapper; const-string v7, "Saving huge leaf node with " invoke-static {v7}, Landroid/support/v4/media/d;->a(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v7 invoke-interface {p2}, Ljava/util/List;->size()I move-result v8 invoke-virtual {v7, v8}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; const-string v8, " parts." invoke-virtual {v7, v8}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {v7}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v7 new-array v8, v6, [Ljava/lang/Object; invoke-virtual {v0, v7, v8}, Lcom/google/firebase/database/logging/LogWrapper;->debug(Ljava/lang/String;[Ljava/lang/Object;)V .line 6 :cond_0 :goto_0 invoke-interface {p2}, Ljava/util/List;->size()I move-result v0 if-ge v6, v0, :cond_2 .line 7 new-instance v0, Landroid/content/ContentValues; invoke-direct {v0}, Landroid/content/ContentValues;->()V .line 8 invoke-direct {p0, p1, v6}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->partKey(Lcom/google/firebase/database/core/Path;I)Ljava/lang/String; move-result-object v7 invoke-virtual {v0, v5, v7}, Landroid/content/ContentValues;->put(Ljava/lang/String;Ljava/lang/String;)V .line 9 invoke-interface {p2, v6}, Ljava/util/List;->get(I)Ljava/lang/Object; move-result-object v7 check-cast v7, [B invoke-virtual {v0, v4, v7}, Landroid/content/ContentValues;->put(Ljava/lang/String;[B)V .line 10 iget-object v7, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->database:Landroid/database/sqlite/SQLiteDatabase; invoke-virtual {v7, v3, v2, v0, v1}, Landroid/database/sqlite/SQLiteDatabase;->insertWithOnConflict(Ljava/lang/String;Ljava/lang/String;Landroid/content/ContentValues;I)J add-int/lit8 v6, v6, 0x1 goto :goto_0 .line 11 :cond_1 new-instance v0, Landroid/content/ContentValues; invoke-direct {v0}, Landroid/content/ContentValues;->()V .line 12 invoke-static {p1}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->pathToKey(Lcom/google/firebase/database/core/Path;)Ljava/lang/String; move-result-object p1 invoke-virtual {v0, v5, p1}, Landroid/content/ContentValues;->put(Ljava/lang/String;Ljava/lang/String;)V .line 13 invoke-virtual {v0, v4, p2}, Landroid/content/ContentValues;->put(Ljava/lang/String;[B)V .line 14 iget-object p1, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->database:Landroid/database/sqlite/SQLiteDatabase; invoke-virtual {p1, v3, v2, v0, v1}, Landroid/database/sqlite/SQLiteDatabase;->insertWithOnConflict(Ljava/lang/String;Ljava/lang/String;Landroid/content/ContentValues;I)J :cond_2 return-void .end method .method private saveWrite(Lcom/google/firebase/database/core/Path;JLjava/lang/String;[B)V .locals 14 move-object v0, p0 move-object/from16 v1, p4 move-object/from16 v2, p5 .line 1 invoke-direct {p0}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->verifyInsideTransaction()V .line 2 iget-object v3, v0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->database:Landroid/database/sqlite/SQLiteDatabase; const/4 v4, 0x1 new-array v4, v4, [Ljava/lang/String; .line 3 invoke-static/range {p2 .. p3}, Ljava/lang/String;->valueOf(J)Ljava/lang/String; move-result-object v5 const/4 v6, 0x0 aput-object v5, v4, v6 const-string v5, "writes" const-string v7, "id = ?" .line 4 invoke-virtual {v3, v5, v7, v4}, Landroid/database/sqlite/SQLiteDatabase;->delete(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)I .line 5 array-length v3, v2 const/4 v4, 0x5 const-string v7, "node" const-string v8, "part" const-string v9, "type" const-string v10, "path" const-string v11, "id" const/high16 v12, 0x40000 const/4 v13, 0x0 if-lt v3, v12, :cond_0 .line 6 invoke-static {v2, v12}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->splitBytes([BI)Ljava/util/List; move-result-object v2 .line 7 :goto_0 invoke-interface {v2}, Ljava/util/List;->size()I move-result v3 if-ge v6, v3, :cond_1 .line 8 new-instance v3, Landroid/content/ContentValues; invoke-direct {v3}, Landroid/content/ContentValues;->()V .line 9 invoke-static/range {p2 .. p3}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long; move-result-object v12 invoke-virtual {v3, v11, v12}, Landroid/content/ContentValues;->put(Ljava/lang/String;Ljava/lang/Long;)V .line 10 invoke-static {p1}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->pathToKey(Lcom/google/firebase/database/core/Path;)Ljava/lang/String; move-result-object v12 invoke-virtual {v3, v10, v12}, Landroid/content/ContentValues;->put(Ljava/lang/String;Ljava/lang/String;)V .line 11 invoke-virtual {v3, v9, v1}, Landroid/content/ContentValues;->put(Ljava/lang/String;Ljava/lang/String;)V .line 12 invoke-static {v6}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer; move-result-object v12 invoke-virtual {v3, v8, v12}, Landroid/content/ContentValues;->put(Ljava/lang/String;Ljava/lang/Integer;)V .line 13 invoke-interface {v2, v6}, Ljava/util/List;->get(I)Ljava/lang/Object; move-result-object v12 check-cast v12, [B invoke-virtual {v3, v7, v12}, Landroid/content/ContentValues;->put(Ljava/lang/String;[B)V .line 14 iget-object v12, v0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->database:Landroid/database/sqlite/SQLiteDatabase; invoke-virtual {v12, v5, v13, v3, v4}, Landroid/database/sqlite/SQLiteDatabase;->insertWithOnConflict(Ljava/lang/String;Ljava/lang/String;Landroid/content/ContentValues;I)J add-int/lit8 v6, v6, 0x1 goto :goto_0 .line 15 :cond_0 new-instance v3, Landroid/content/ContentValues; invoke-direct {v3}, Landroid/content/ContentValues;->()V .line 16 invoke-static/range {p2 .. p3}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long; move-result-object v6 invoke-virtual {v3, v11, v6}, Landroid/content/ContentValues;->put(Ljava/lang/String;Ljava/lang/Long;)V .line 17 invoke-static {p1}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->pathToKey(Lcom/google/firebase/database/core/Path;)Ljava/lang/String; move-result-object v6 invoke-virtual {v3, v10, v6}, Landroid/content/ContentValues;->put(Ljava/lang/String;Ljava/lang/String;)V .line 18 invoke-virtual {v3, v9, v1}, Landroid/content/ContentValues;->put(Ljava/lang/String;Ljava/lang/String;)V .line 19 invoke-virtual {v3, v8, v13}, Landroid/content/ContentValues;->put(Ljava/lang/String;Ljava/lang/Integer;)V .line 20 invoke-virtual {v3, v7, v2}, Landroid/content/ContentValues;->put(Ljava/lang/String;[B)V .line 21 iget-object v1, v0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->database:Landroid/database/sqlite/SQLiteDatabase; invoke-virtual {v1, v5, v13, v3, v4}, Landroid/database/sqlite/SQLiteDatabase;->insertWithOnConflict(Ljava/lang/String;Ljava/lang/String;Landroid/content/ContentValues;I)J :cond_1 return-void .end method .method private serializeObject(Ljava/lang/Object;)[B .locals 2 .line 1 :try_start_0 invoke-static {p1}, Lcom/google/firebase/database/util/JsonMapper;->serializeJsonValue(Ljava/lang/Object;)Ljava/lang/String; move-result-object p1 sget-object v0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->UTF8_CHARSET:Ljava/nio/charset/Charset; invoke-virtual {p1, v0}, Ljava/lang/String;->getBytes(Ljava/nio/charset/Charset;)[B move-result-object p1 :try_end_0 .catch Ljava/io/IOException; {:try_start_0 .. :try_end_0} :catch_0 return-object p1 :catch_0 move-exception p1 .line 2 new-instance v0, Ljava/lang/RuntimeException; const-string v1, "Could not serialize leaf node" invoke-direct {v0, v1, p1}, Ljava/lang/RuntimeException;->(Ljava/lang/String;Ljava/lang/Throwable;)V throw v0 .end method .method private static splitBytes([BI)Ljava/util/List; .locals 7 .annotation system Ldalvik/annotation/Signature; value = { "([BI)", "Ljava/util/List<", "[B>;" } .end annotation .line 1 array-length v0, p0 add-int/lit8 v0, v0, -0x1 div-int/2addr v0, p1 add-int/lit8 v0, v0, 0x1 .line 2 new-instance v1, Ljava/util/ArrayList; invoke-direct {v1, v0}, Ljava/util/ArrayList;->(I)V const/4 v2, 0x0 move v3, v2 :goto_0 if-ge v3, v0, :cond_0 .line 3 array-length v4, p0 mul-int v5, v3, p1 sub-int/2addr v4, v5 invoke-static {p1, v4}, Ljava/lang/Math;->min(II)I move-result v4 .line 4 new-array v6, v4, [B .line 5 invoke-static {p0, v5, v6, v2, v4}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V .line 6 invoke-virtual {v1, v6}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z add-int/lit8 v3, v3, 0x1 goto :goto_0 :cond_0 return-object v1 .end method .method private splitNodeRunLength(Lcom/google/firebase/database/core/Path;Ljava/util/List;I)I .locals 4 .annotation system Ldalvik/annotation/Signature; value = { "(", "Lcom/google/firebase/database/core/Path;", "Ljava/util/List<", "Ljava/lang/String;", ">;I)I" } .end annotation add-int/lit8 v0, p3, 0x1 .line 1 invoke-static {p1}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->pathToKey(Lcom/google/firebase/database/core/Path;)Ljava/lang/String; move-result-object v1 .line 2 invoke-interface {p2, p3}, Ljava/util/List;->get(I)Ljava/lang/Object; move-result-object v2 check-cast v2, Ljava/lang/String; invoke-virtual {v2, v1}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z move-result v2 if-eqz v2, :cond_3 .line 3 :goto_0 invoke-interface {p2}, Ljava/util/List;->size()I move-result v2 if-ge v0, v2, :cond_0 .line 4 invoke-interface {p2, v0}, Ljava/util/List;->get(I)Ljava/lang/Object; move-result-object v2 check-cast v2, Ljava/lang/String; sub-int v3, v0, p3 invoke-direct {p0, p1, v3}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->partKey(Lcom/google/firebase/database/core/Path;I)Ljava/lang/String; move-result-object v3 invoke-virtual {v2, v3}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z move-result v2 if-eqz v2, :cond_0 add-int/lit8 v0, v0, 0x1 goto :goto_0 .line 5 :cond_0 invoke-interface {p2}, Ljava/util/List;->size()I move-result p1 if-ge v0, p1, :cond_2 .line 6 invoke-interface {p2, v0}, Ljava/util/List;->get(I)Ljava/lang/Object; move-result-object p1 check-cast p1, Ljava/lang/String; new-instance p2, Ljava/lang/StringBuilder; invoke-direct {p2}, Ljava/lang/StringBuilder;->()V invoke-virtual {p2, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; const-string v1, ".part-" invoke-virtual {p2, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {p2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object p2 invoke-virtual {p1, p2}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z move-result p1 if-nez p1, :cond_1 goto :goto_1 .line 7 :cond_1 new-instance p1, Ljava/lang/IllegalStateException; const-string p2, "Run did not finish with all parts" invoke-direct {p1, p2}, Ljava/lang/IllegalStateException;->(Ljava/lang/String;)V throw p1 :cond_2 :goto_1 sub-int/2addr v0, p3 return v0 .line 8 :cond_3 new-instance p1, Ljava/lang/IllegalStateException; const-string p2, "Extracting split nodes needs to start with path prefix" invoke-direct {p1, p2}, Ljava/lang/IllegalStateException;->(Ljava/lang/String;)V throw p1 .end method .method private updateServerCache(Lcom/google/firebase/database/core/Path;Lcom/google/firebase/database/snapshot/Node;Z)V .locals 7 .line 1 invoke-static {}, Ljava/lang/System;->currentTimeMillis()J move-result-wide v0 const-string v2, "serverCache" const/4 v3, 0x0 if-nez p3, :cond_0 .line 2 invoke-direct {p0, v2, p1}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->removeNested(Ljava/lang/String;Lcom/google/firebase/database/core/Path;)I move-result p3 .line 3 invoke-direct {p0, p1, p2}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->saveNested(Lcom/google/firebase/database/core/Path;Lcom/google/firebase/database/snapshot/Node;)I move-result p2 goto :goto_1 .line 4 :cond_0 invoke-interface {p2}, Ljava/lang/Iterable;->iterator()Ljava/util/Iterator; move-result-object p2 move p3, v3 move v4, p3 :goto_0 invoke-interface {p2}, Ljava/util/Iterator;->hasNext()Z move-result v5 if-eqz v5, :cond_1 invoke-interface {p2}, Ljava/util/Iterator;->next()Ljava/lang/Object; move-result-object v5 check-cast v5, Lcom/google/firebase/database/snapshot/NamedNode; .line 5 invoke-virtual {v5}, Lcom/google/firebase/database/snapshot/NamedNode;->getName()Lcom/google/firebase/database/snapshot/ChildKey; move-result-object v6 invoke-virtual {p1, v6}, Lcom/google/firebase/database/core/Path;->child(Lcom/google/firebase/database/snapshot/ChildKey;)Lcom/google/firebase/database/core/Path; move-result-object v6 invoke-direct {p0, v2, v6}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->removeNested(Ljava/lang/String;Lcom/google/firebase/database/core/Path;)I move-result v6 add-int/2addr v4, v6 .line 6 invoke-virtual {v5}, Lcom/google/firebase/database/snapshot/NamedNode;->getName()Lcom/google/firebase/database/snapshot/ChildKey; move-result-object v6 invoke-virtual {p1, v6}, Lcom/google/firebase/database/core/Path;->child(Lcom/google/firebase/database/snapshot/ChildKey;)Lcom/google/firebase/database/core/Path; move-result-object v6 invoke-virtual {v5}, Lcom/google/firebase/database/snapshot/NamedNode;->getNode()Lcom/google/firebase/database/snapshot/Node; move-result-object v5 invoke-direct {p0, v6, v5}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->saveNested(Lcom/google/firebase/database/core/Path;Lcom/google/firebase/database/snapshot/Node;)I move-result v5 add-int/2addr p3, v5 goto :goto_0 :cond_1 move p2, p3 move p3, v4 .line 7 :goto_1 invoke-static {}, Ljava/lang/System;->currentTimeMillis()J move-result-wide v4 sub-long/2addr v4, v0 .line 8 iget-object v0, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->logger:Lcom/google/firebase/database/logging/LogWrapper; invoke-virtual {v0}, Lcom/google/firebase/database/logging/LogWrapper;->logsDebug()Z move-result v0 if-eqz v0, :cond_2 .line 9 iget-object v0, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->logger:Lcom/google/firebase/database/logging/LogWrapper; sget-object v1, Ljava/util/Locale;->US:Ljava/util/Locale; const/4 v2, 0x4 new-array v2, v2, [Ljava/lang/Object; .line 10 invoke-static {p2}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer; move-result-object p2 aput-object p2, v2, v3 const/4 p2, 0x1 .line 11 invoke-static {p3}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer; move-result-object p3 aput-object p3, v2, p2 const/4 p2, 0x2 .line 12 invoke-virtual {p1}, Lcom/google/firebase/database/core/Path;->toString()Ljava/lang/String; move-result-object p1 aput-object p1, v2, p2 const/4 p1, 0x3 .line 13 invoke-static {v4, v5}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long; move-result-object p2 aput-object p2, v2, p1 const-string p1, "Persisted a total of %d rows and deleted %d rows for a set at %s in %dms" .line 14 invoke-static {v1, p1, v2}, Ljava/lang/String;->format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String; move-result-object p1 new-array p2, v3, [Ljava/lang/Object; .line 15 invoke-virtual {v0, p1, p2}, Lcom/google/firebase/database/logging/LogWrapper;->debug(Ljava/lang/String;[Ljava/lang/Object;)V :cond_2 return-void .end method .method private verifyInsideTransaction()V .locals 2 .line 1 iget-boolean v0, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->insideTransaction:Z const-string v1, "Transaction expected to already be in progress." invoke-static {v0, v1}, Lcom/google/firebase/database/core/utilities/Utilities;->hardAssert(ZLjava/lang/String;)V return-void .end method # virtual methods .method public beginTransaction()V .locals 4 .line 1 iget-boolean v0, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->insideTransaction:Z const/4 v1, 0x1 xor-int/2addr v0, v1 const-string v2, "runInTransaction called when an existing transaction is already in progress." invoke-static {v0, v2}, Lcom/google/firebase/database/core/utilities/Utilities;->hardAssert(ZLjava/lang/String;)V .line 2 iget-object v0, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->logger:Lcom/google/firebase/database/logging/LogWrapper; invoke-virtual {v0}, Lcom/google/firebase/database/logging/LogWrapper;->logsDebug()Z move-result v0 if-eqz v0, :cond_0 .line 3 iget-object v0, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->logger:Lcom/google/firebase/database/logging/LogWrapper; const/4 v2, 0x0 new-array v2, v2, [Ljava/lang/Object; const-string v3, "Starting transaction." invoke-virtual {v0, v3, v2}, Lcom/google/firebase/database/logging/LogWrapper;->debug(Ljava/lang/String;[Ljava/lang/Object;)V .line 4 :cond_0 iget-object v0, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->database:Landroid/database/sqlite/SQLiteDatabase; invoke-virtual {v0}, Landroid/database/sqlite/SQLiteDatabase;->beginTransaction()V .line 5 iput-boolean v1, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->insideTransaction:Z .line 6 invoke-static {}, Ljava/lang/System;->currentTimeMillis()J move-result-wide v0 iput-wide v0, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->transactionStart:J return-void .end method .method public close()V .locals 1 .line 1 iget-object v0, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->database:Landroid/database/sqlite/SQLiteDatabase; invoke-virtual {v0}, Landroid/database/sqlite/SQLiteDatabase;->close()V return-void .end method .method public deleteTrackedQuery(J)V .locals 5 .line 1 invoke-direct {p0}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->verifyInsideTransaction()V .line 2 invoke-static {p1, p2}, Ljava/lang/String;->valueOf(J)Ljava/lang/String; move-result-object p1 .line 3 iget-object p2, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->database:Landroid/database/sqlite/SQLiteDatabase; const/4 v0, 0x1 new-array v1, v0, [Ljava/lang/String; const/4 v2, 0x0 aput-object p1, v1, v2 const-string v3, "trackedQueries" const-string v4, "id = ?" invoke-virtual {p2, v3, v4, v1}, Landroid/database/sqlite/SQLiteDatabase;->delete(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)I .line 4 iget-object p2, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->database:Landroid/database/sqlite/SQLiteDatabase; new-array v0, v0, [Ljava/lang/String; aput-object p1, v0, v2 const-string p1, "trackedKeys" invoke-virtual {p2, p1, v4, v0}, Landroid/database/sqlite/SQLiteDatabase;->delete(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)I return-void .end method .method public endTransaction()V .locals 6 .line 1 iget-object v0, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->database:Landroid/database/sqlite/SQLiteDatabase; invoke-virtual {v0}, Landroid/database/sqlite/SQLiteDatabase;->endTransaction()V const/4 v0, 0x0 .line 2 iput-boolean v0, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->insideTransaction:Z .line 3 invoke-static {}, Ljava/lang/System;->currentTimeMillis()J move-result-wide v1 iget-wide v3, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->transactionStart:J sub-long/2addr v1, v3 .line 4 iget-object v3, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->logger:Lcom/google/firebase/database/logging/LogWrapper; invoke-virtual {v3}, Lcom/google/firebase/database/logging/LogWrapper;->logsDebug()Z move-result v3 if-eqz v3, :cond_0 .line 5 iget-object v3, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->logger:Lcom/google/firebase/database/logging/LogWrapper; sget-object v4, Ljava/util/Locale;->US:Ljava/util/Locale; const/4 v5, 0x1 new-array v5, v5, [Ljava/lang/Object; invoke-static {v1, v2}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long; move-result-object v1 aput-object v1, v5, v0 const-string v1, "Transaction completed. Elapsed: %dms" invoke-static {v4, v1, v5}, Ljava/lang/String;->format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String; move-result-object v1 new-array v0, v0, [Ljava/lang/Object; invoke-virtual {v3, v1, v0}, Lcom/google/firebase/database/logging/LogWrapper;->debug(Ljava/lang/String;[Ljava/lang/Object;)V :cond_0 return-void .end method .method public loadTrackedQueries()Ljava/util/List; .locals 17 .annotation system Ldalvik/annotation/Signature; value = { "()", "Ljava/util/List<", "Lcom/google/firebase/database/core/persistence/TrackedQuery;", ">;" } .end annotation move-object/from16 v1, p0 const-string v2, "id" const-string v3, "path" const-string v4, "queryParams" const-string v5, "lastUse" const-string v6, "complete" const-string v7, "active" .line 1 filled-new-array/range {v2 .. v7}, [Ljava/lang/String; move-result-object v10 .line 2 invoke-static {}, Ljava/lang/System;->currentTimeMillis()J move-result-wide v2 .line 3 iget-object v8, v1, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->database:Landroid/database/sqlite/SQLiteDatabase; const-string v9, "trackedQueries" const/4 v11, 0x0 const/4 v12, 0x0 const/4 v13, 0x0 const/4 v14, 0x0 const-string v15, "id" .line 4 invoke-virtual/range {v8 .. v15}, Landroid/database/sqlite/SQLiteDatabase;->query(Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor; move-result-object v4 .line 5 new-instance v0, Ljava/util/ArrayList; invoke-direct {v0}, Ljava/util/ArrayList;->()V .line 6 :goto_0 :try_start_0 invoke-interface {v4}, Landroid/database/Cursor;->moveToNext()Z move-result v5 const/4 v6, 0x2 const/4 v7, 0x1 const/4 v8, 0x0 if-eqz v5, :cond_2 .line 7 invoke-interface {v4, v8}, Landroid/database/Cursor;->getLong(I)J move-result-wide v10 .line 8 new-instance v5, Lcom/google/firebase/database/core/Path; invoke-interface {v4, v7}, Landroid/database/Cursor;->getString(I)Ljava/lang/String; move-result-object v9 invoke-direct {v5, v9}, Lcom/google/firebase/database/core/Path;->(Ljava/lang/String;)V .line 9 invoke-interface {v4, v6}, Landroid/database/Cursor;->getString(I)Ljava/lang/String; move-result-object v6 :try_end_0 .catchall {:try_start_0 .. :try_end_0} :catchall_0 .line 10 :try_start_1 invoke-static {v6}, Lcom/google/firebase/database/util/JsonMapper;->parseJson(Ljava/lang/String;)Ljava/util/Map; move-result-object v6 :try_end_1 .catch Ljava/io/IOException; {:try_start_1 .. :try_end_1} :catch_0 .catchall {:try_start_1 .. :try_end_1} :catchall_0 .line 11 :try_start_2 invoke-static {v5, v6}, Lcom/google/firebase/database/core/view/QuerySpec;->fromPathAndQueryObject(Lcom/google/firebase/database/core/Path;Ljava/util/Map;)Lcom/google/firebase/database/core/view/QuerySpec; move-result-object v12 const/4 v5, 0x3 .line 12 invoke-interface {v4, v5}, Landroid/database/Cursor;->getLong(I)J move-result-wide v13 const/4 v5, 0x4 .line 13 invoke-interface {v4, v5}, Landroid/database/Cursor;->getInt(I)I move-result v5 if-eqz v5, :cond_0 move v15, v7 goto :goto_1 :cond_0 move v15, v8 :goto_1 const/4 v5, 0x5 .line 14 invoke-interface {v4, v5}, Landroid/database/Cursor;->getInt(I)I move-result v5 if-eqz v5, :cond_1 move/from16 v16, v7 goto :goto_2 :cond_1 move/from16 v16, v8 .line 15 :goto_2 new-instance v5, Lcom/google/firebase/database/core/persistence/TrackedQuery; move-object v9, v5 invoke-direct/range {v9 .. v16}, Lcom/google/firebase/database/core/persistence/TrackedQuery;->(JLcom/google/firebase/database/core/view/QuerySpec;JZZ)V .line 16 invoke-virtual {v0, v5}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z goto :goto_0 :catch_0 move-exception v0 move-object v2, v0 .line 17 new-instance v0, Ljava/lang/RuntimeException; invoke-direct {v0, v2}, Ljava/lang/RuntimeException;->(Ljava/lang/Throwable;)V throw v0 .line 18 :cond_2 invoke-static {}, Ljava/lang/System;->currentTimeMillis()J move-result-wide v9 sub-long/2addr v9, v2 .line 19 iget-object v2, v1, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->logger:Lcom/google/firebase/database/logging/LogWrapper; invoke-virtual {v2}, Lcom/google/firebase/database/logging/LogWrapper;->logsDebug()Z move-result v2 if-eqz v2, :cond_3 .line 20 iget-object v2, v1, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->logger:Lcom/google/firebase/database/logging/LogWrapper; sget-object v3, Ljava/util/Locale;->US:Ljava/util/Locale; const-string v5, "Loaded %d tracked queries in %dms" new-array v6, v6, [Ljava/lang/Object; .line 21 invoke-virtual {v0}, Ljava/util/ArrayList;->size()I move-result v11 invoke-static {v11}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer; move-result-object v11 aput-object v11, v6, v8 invoke-static {v9, v10}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long; move-result-object v9 aput-object v9, v6, v7 .line 22 invoke-static {v3, v5, v6}, Ljava/lang/String;->format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String; move-result-object v3 new-array v5, v8, [Ljava/lang/Object; .line 23 invoke-virtual {v2, v3, v5}, Lcom/google/firebase/database/logging/LogWrapper;->debug(Ljava/lang/String;[Ljava/lang/Object;)V :try_end_2 .catchall {:try_start_2 .. :try_end_2} :catchall_0 .line 24 :cond_3 invoke-interface {v4}, Landroid/database/Cursor;->close()V return-object v0 :catchall_0 move-exception v0 invoke-interface {v4}, Landroid/database/Cursor;->close()V .line 25 throw v0 .end method .method public loadTrackedQueryKeys(J)Ljava/util/Set; .locals 0 .annotation system Ldalvik/annotation/Signature; value = { "(J)", "Ljava/util/Set<", "Lcom/google/firebase/database/snapshot/ChildKey;", ">;" } .end annotation .line 1 invoke-static {p1, p2}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long; move-result-object p1 invoke-static {p1}, Ljava/util/Collections;->singleton(Ljava/lang/Object;)Ljava/util/Set; move-result-object p1 invoke-virtual {p0, p1}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->loadTrackedQueryKeys(Ljava/util/Set;)Ljava/util/Set; move-result-object p1 return-object p1 .end method .method public loadTrackedQueryKeys(Ljava/util/Set;)Ljava/util/Set; .locals 13 .annotation system Ldalvik/annotation/Signature; value = { "(", "Ljava/util/Set<", "Ljava/lang/Long;", ">;)", "Ljava/util/Set<", "Lcom/google/firebase/database/snapshot/ChildKey;", ">;" } .end annotation const-string v0, "key" .line 2 filled-new-array {v0}, [Ljava/lang/String; move-result-object v4 .line 3 invoke-static {}, Ljava/lang/System;->currentTimeMillis()J move-result-wide v11 const-string v0, "id IN (" .line 4 invoke-static {v0}, Landroid/support/v4/media/d;->a(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v0 .line 5 invoke-direct {p0, p1}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->commaSeparatedList(Ljava/util/Collection;)Ljava/lang/String; move-result-object v1 const-string v2, ")" invoke-static {v0, v1, v2}, Landroidx/camera/camera2/internal/b;->a(Ljava/lang/StringBuilder;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; move-result-object v5 .line 6 iget-object v1, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->database:Landroid/database/sqlite/SQLiteDatabase; const/4 v2, 0x1 const-string v3, "trackedKeys" const/4 v6, 0x0 const/4 v7, 0x0 const/4 v8, 0x0 const/4 v9, 0x0 const/4 v10, 0x0 .line 7 invoke-virtual/range {v1 .. v10}, Landroid/database/sqlite/SQLiteDatabase;->query(ZLjava/lang/String;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor; move-result-object v0 .line 8 new-instance v1, Ljava/util/HashSet; invoke-direct {v1}, Ljava/util/HashSet;->()V .line 9 :goto_0 :try_start_0 invoke-interface {v0}, Landroid/database/Cursor;->moveToNext()Z move-result v2 const/4 v3, 0x0 if-eqz v2, :cond_0 .line 10 invoke-interface {v0, v3}, Landroid/database/Cursor;->getString(I)Ljava/lang/String; move-result-object v2 .line 11 invoke-static {v2}, Lcom/google/firebase/database/snapshot/ChildKey;->fromString(Ljava/lang/String;)Lcom/google/firebase/database/snapshot/ChildKey; move-result-object v2 invoke-virtual {v1, v2}, Ljava/util/HashSet;->add(Ljava/lang/Object;)Z goto :goto_0 .line 12 :cond_0 invoke-static {}, Ljava/lang/System;->currentTimeMillis()J move-result-wide v4 sub-long/2addr v4, v11 .line 13 iget-object v2, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->logger:Lcom/google/firebase/database/logging/LogWrapper; invoke-virtual {v2}, Lcom/google/firebase/database/logging/LogWrapper;->logsDebug()Z move-result v2 if-eqz v2, :cond_1 .line 14 iget-object v2, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->logger:Lcom/google/firebase/database/logging/LogWrapper; sget-object v6, Ljava/util/Locale;->US:Ljava/util/Locale; const-string v7, "Loaded %d tracked queries keys for tracked queries %s in %dms" const/4 v8, 0x3 new-array v8, v8, [Ljava/lang/Object; .line 15 invoke-virtual {v1}, Ljava/util/HashSet;->size()I move-result v9 invoke-static {v9}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer; move-result-object v9 aput-object v9, v8, v3 const/4 v9, 0x1 .line 16 invoke-virtual {p1}, Ljava/lang/Object;->toString()Ljava/lang/String; move-result-object p1 aput-object p1, v8, v9 const/4 p1, 0x2 .line 17 invoke-static {v4, v5}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long; move-result-object v4 aput-object v4, v8, p1 .line 18 invoke-static {v6, v7, v8}, Ljava/lang/String;->format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String; move-result-object p1 new-array v3, v3, [Ljava/lang/Object; .line 19 invoke-virtual {v2, p1, v3}, Lcom/google/firebase/database/logging/LogWrapper;->debug(Ljava/lang/String;[Ljava/lang/Object;)V :try_end_0 .catchall {:try_start_0 .. :try_end_0} :catchall_0 .line 20 :cond_1 invoke-interface {v0}, Landroid/database/Cursor;->close()V return-object v1 :catchall_0 move-exception p1 invoke-interface {v0}, Landroid/database/Cursor;->close()V .line 21 throw p1 .end method .method public loadUserWrites()Ljava/util/List; .locals 14 .annotation system Ldalvik/annotation/Signature; value = { "()", "Ljava/util/List<", "Lcom/google/firebase/database/core/UserWriteRecord;", ">;" } .end annotation const-string v0, "id" const-string v1, "path" const-string v2, "type" const-string v3, "part" const-string v4, "node" .line 1 filled-new-array {v0, v1, v2, v3, v4}, [Ljava/lang/String; move-result-object v7 .line 2 invoke-static {}, Ljava/lang/System;->currentTimeMillis()J move-result-wide v0 .line 3 iget-object v5, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->database:Landroid/database/sqlite/SQLiteDatabase; const-string v6, "writes" const/4 v8, 0x0 const/4 v9, 0x0 const/4 v10, 0x0 const/4 v11, 0x0 const-string v12, "id, part" .line 4 invoke-virtual/range {v5 .. v12}, Landroid/database/sqlite/SQLiteDatabase;->query(Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor; move-result-object v2 .line 5 new-instance v3, Ljava/util/ArrayList; invoke-direct {v3}, Ljava/util/ArrayList;->()V .line 6 :goto_0 :try_start_0 invoke-interface {v2}, Landroid/database/Cursor;->moveToNext()Z move-result v4 const/4 v5, 0x2 const/4 v6, 0x1 const/4 v7, 0x0 if-eqz v4, :cond_5 .line 7 invoke-interface {v2, v7}, Landroid/database/Cursor;->getLong(I)J move-result-wide v9 .line 8 new-instance v11, Lcom/google/firebase/database/core/Path; invoke-interface {v2, v6}, Landroid/database/Cursor;->getString(I)Ljava/lang/String; move-result-object v4 invoke-direct {v11, v4}, Lcom/google/firebase/database/core/Path;->(Ljava/lang/String;)V .line 9 invoke-interface {v2, v5}, Landroid/database/Cursor;->getString(I)Ljava/lang/String; move-result-object v4 const/4 v5, 0x3 .line 10 invoke-interface {v2, v5}, Landroid/database/Cursor;->isNull(I)Z move-result v5 const/4 v6, 0x4 if-eqz v5, :cond_0 .line 11 invoke-interface {v2, v6}, Landroid/database/Cursor;->getBlob(I)[B move-result-object v5 goto :goto_1 .line 12 :cond_0 new-instance v5, Ljava/util/ArrayList; invoke-direct {v5}, Ljava/util/ArrayList;->()V .line 13 :cond_1 invoke-interface {v2, v6}, Landroid/database/Cursor;->getBlob(I)[B move-result-object v8 invoke-virtual {v5, v8}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z .line 14 invoke-interface {v2}, Landroid/database/Cursor;->moveToNext()Z move-result v8 if-eqz v8, :cond_2 invoke-interface {v2, v7}, Landroid/database/Cursor;->getLong(I)J move-result-wide v12 cmp-long v8, v12, v9 if-eqz v8, :cond_1 .line 15 :cond_2 invoke-interface {v2}, Landroid/database/Cursor;->moveToPrevious()Z .line 16 invoke-direct {p0, v5}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->joinBytes(Ljava/util/List;)[B move-result-object v5 .line 17 :goto_1 new-instance v6, Ljava/lang/String; sget-object v7, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->UTF8_CHARSET:Ljava/nio/charset/Charset; invoke-direct {v6, v5, v7}, Ljava/lang/String;->([BLjava/nio/charset/Charset;)V .line 18 invoke-static {v6}, Lcom/google/firebase/database/util/JsonMapper;->parseJsonValue(Ljava/lang/String;)Ljava/lang/Object; move-result-object v5 const-string v6, "o" .line 19 invoke-virtual {v6, v4}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z move-result v6 if-eqz v6, :cond_3 .line 20 invoke-static {v5}, Lcom/google/firebase/database/snapshot/NodeUtilities;->NodeFromJSON(Ljava/lang/Object;)Lcom/google/firebase/database/snapshot/Node; move-result-object v12 .line 21 new-instance v4, Lcom/google/firebase/database/core/UserWriteRecord; const/4 v13, 0x1 move-object v8, v4 invoke-direct/range {v8 .. v13}, Lcom/google/firebase/database/core/UserWriteRecord;->(JLcom/google/firebase/database/core/Path;Lcom/google/firebase/database/snapshot/Node;Z)V goto :goto_2 :cond_3 const-string v6, "m" .line 22 invoke-virtual {v6, v4}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z move-result v6 if-eqz v6, :cond_4 .line 23 check-cast v5, Ljava/util/Map; invoke-static {v5}, Lcom/google/firebase/database/core/CompoundWrite;->fromValue(Ljava/util/Map;)Lcom/google/firebase/database/core/CompoundWrite; move-result-object v4 .line 24 new-instance v5, Lcom/google/firebase/database/core/UserWriteRecord; invoke-direct {v5, v9, v10, v11, v4}, Lcom/google/firebase/database/core/UserWriteRecord;->(JLcom/google/firebase/database/core/Path;Lcom/google/firebase/database/core/CompoundWrite;)V move-object v4, v5 .line 25 :goto_2 invoke-virtual {v3, v4}, Ljava/util/ArrayList;->add(Ljava/lang/Object;)Z goto :goto_0 .line 26 :cond_4 new-instance v0, Ljava/lang/IllegalStateException; new-instance v1, Ljava/lang/StringBuilder; invoke-direct {v1}, Ljava/lang/StringBuilder;->()V const-string v3, "Got invalid write type: " invoke-virtual {v1, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {v1, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v1 invoke-direct {v0, v1}, Ljava/lang/IllegalStateException;->(Ljava/lang/String;)V throw v0 .line 27 :cond_5 invoke-static {}, Ljava/lang/System;->currentTimeMillis()J move-result-wide v8 sub-long/2addr v8, v0 .line 28 iget-object v0, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->logger:Lcom/google/firebase/database/logging/LogWrapper; invoke-virtual {v0}, Lcom/google/firebase/database/logging/LogWrapper;->logsDebug()Z move-result v0 if-eqz v0, :cond_6 .line 29 iget-object v0, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->logger:Lcom/google/firebase/database/logging/LogWrapper; sget-object v1, Ljava/util/Locale;->US:Ljava/util/Locale; const-string v4, "Loaded %d writes in %dms" new-array v5, v5, [Ljava/lang/Object; invoke-virtual {v3}, Ljava/util/ArrayList;->size()I move-result v10 invoke-static {v10}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer; move-result-object v10 aput-object v10, v5, v7 invoke-static {v8, v9}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long; move-result-object v8 aput-object v8, v5, v6 invoke-static {v1, v4, v5}, Ljava/lang/String;->format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String; move-result-object v1 new-array v4, v7, [Ljava/lang/Object; invoke-virtual {v0, v1, v4}, Lcom/google/firebase/database/logging/LogWrapper;->debug(Ljava/lang/String;[Ljava/lang/Object;)V :try_end_0 .catch Ljava/io/IOException; {:try_start_0 .. :try_end_0} :catch_0 .catchall {:try_start_0 .. :try_end_0} :catchall_0 .line 30 :cond_6 invoke-interface {v2}, Landroid/database/Cursor;->close()V return-object v3 :catchall_0 move-exception v0 goto :goto_3 :catch_0 move-exception v0 .line 31 :try_start_1 new-instance v1, Ljava/lang/RuntimeException; const-string v3, "Failed to load writes" invoke-direct {v1, v3, v0}, Ljava/lang/RuntimeException;->(Ljava/lang/String;Ljava/lang/Throwable;)V throw v1 :try_end_1 .catchall {:try_start_1 .. :try_end_1} :catchall_0 .line 32 :goto_3 invoke-interface {v2}, Landroid/database/Cursor;->close()V .line 33 throw v0 .end method .method public mergeIntoServerCache(Lcom/google/firebase/database/core/Path;Lcom/google/firebase/database/core/CompoundWrite;)V .locals 8 .line 3 invoke-direct {p0}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->verifyInsideTransaction()V .line 4 invoke-static {}, Ljava/lang/System;->currentTimeMillis()J move-result-wide v0 .line 5 invoke-virtual {p2}, Lcom/google/firebase/database/core/CompoundWrite;->iterator()Ljava/util/Iterator; move-result-object p2 const/4 v2, 0x0 move v3, v2 move v4, v3 :goto_0 invoke-interface {p2}, Ljava/util/Iterator;->hasNext()Z move-result v5 if-eqz v5, :cond_0 invoke-interface {p2}, Ljava/util/Iterator;->next()Ljava/lang/Object; move-result-object v5 check-cast v5, Ljava/util/Map$Entry; .line 6 invoke-interface {v5}, Ljava/util/Map$Entry;->getKey()Ljava/lang/Object; move-result-object v6 check-cast v6, Lcom/google/firebase/database/core/Path; invoke-virtual {p1, v6}, Lcom/google/firebase/database/core/Path;->child(Lcom/google/firebase/database/core/Path;)Lcom/google/firebase/database/core/Path; move-result-object v6 const-string v7, "serverCache" invoke-direct {p0, v7, v6}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->removeNested(Ljava/lang/String;Lcom/google/firebase/database/core/Path;)I move-result v6 add-int/2addr v3, v6 .line 7 invoke-interface {v5}, Ljava/util/Map$Entry;->getKey()Ljava/lang/Object; move-result-object v6 check-cast v6, Lcom/google/firebase/database/core/Path; invoke-virtual {p1, v6}, Lcom/google/firebase/database/core/Path;->child(Lcom/google/firebase/database/core/Path;)Lcom/google/firebase/database/core/Path; move-result-object v6 invoke-interface {v5}, Ljava/util/Map$Entry;->getValue()Ljava/lang/Object; move-result-object v5 check-cast v5, Lcom/google/firebase/database/snapshot/Node; invoke-direct {p0, v6, v5}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->saveNested(Lcom/google/firebase/database/core/Path;Lcom/google/firebase/database/snapshot/Node;)I move-result v5 add-int/2addr v4, v5 goto :goto_0 .line 8 :cond_0 invoke-static {}, Ljava/lang/System;->currentTimeMillis()J move-result-wide v5 sub-long/2addr v5, v0 .line 9 iget-object p2, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->logger:Lcom/google/firebase/database/logging/LogWrapper; invoke-virtual {p2}, Lcom/google/firebase/database/logging/LogWrapper;->logsDebug()Z move-result p2 if-eqz p2, :cond_1 .line 10 iget-object p2, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->logger:Lcom/google/firebase/database/logging/LogWrapper; sget-object v0, Ljava/util/Locale;->US:Ljava/util/Locale; const/4 v1, 0x4 new-array v1, v1, [Ljava/lang/Object; .line 11 invoke-static {v4}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer; move-result-object v4 aput-object v4, v1, v2 const/4 v4, 0x1 .line 12 invoke-static {v3}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer; move-result-object v3 aput-object v3, v1, v4 const/4 v3, 0x2 .line 13 invoke-virtual {p1}, Lcom/google/firebase/database/core/Path;->toString()Ljava/lang/String; move-result-object p1 aput-object p1, v1, v3 const/4 p1, 0x3 .line 14 invoke-static {v5, v6}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long; move-result-object v3 aput-object v3, v1, p1 const-string p1, "Persisted a total of %d rows and deleted %d rows for a merge at %s in %dms" .line 15 invoke-static {v0, p1, v1}, Ljava/lang/String;->format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String; move-result-object p1 new-array v0, v2, [Ljava/lang/Object; .line 16 invoke-virtual {p2, p1, v0}, Lcom/google/firebase/database/logging/LogWrapper;->debug(Ljava/lang/String;[Ljava/lang/Object;)V :cond_1 return-void .end method .method public mergeIntoServerCache(Lcom/google/firebase/database/core/Path;Lcom/google/firebase/database/snapshot/Node;)V .locals 1 .line 1 invoke-direct {p0}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->verifyInsideTransaction()V const/4 v0, 0x1 .line 2 invoke-direct {p0, p1, p2, v0}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->updateServerCache(Lcom/google/firebase/database/core/Path;Lcom/google/firebase/database/snapshot/Node;Z)V return-void .end method .method public overwriteServerCache(Lcom/google/firebase/database/core/Path;Lcom/google/firebase/database/snapshot/Node;)V .locals 1 .line 1 invoke-direct {p0}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->verifyInsideTransaction()V const/4 v0, 0x0 .line 2 invoke-direct {p0, p1, p2, v0}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->updateServerCache(Lcom/google/firebase/database/core/Path;Lcom/google/firebase/database/snapshot/Node;Z)V return-void .end method .method public pruneCache(Lcom/google/firebase/database/core/Path;Lcom/google/firebase/database/core/persistence/PruneForest;)V .locals 16 move-object/from16 v7, p0 move-object/from16 v8, p1 move-object/from16 v5, p2 .line 1 invoke-virtual/range {p2 .. p2}, Lcom/google/firebase/database/core/persistence/PruneForest;->prunesAnything()Z move-result v0 if-nez v0, :cond_0 return-void .line 2 :cond_0 invoke-direct/range {p0 .. p0}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->verifyInsideTransaction()V .line 3 invoke-static {}, Ljava/lang/System;->currentTimeMillis()J move-result-wide v9 const-string v0, "rowid" const-string v1, "path" .line 4 filled-new-array {v0, v1}, [Ljava/lang/String; move-result-object v0 invoke-direct {v7, v8, v0}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->loadNestedQuery(Lcom/google/firebase/database/core/Path;[Ljava/lang/String;)Landroid/database/Cursor; move-result-object v0 .line 5 new-instance v1, Lcom/google/firebase/database/core/utilities/ImmutableTree; const/4 v11, 0x0 invoke-direct {v1, v11}, Lcom/google/firebase/database/core/utilities/ImmutableTree;->(Ljava/lang/Object;)V .line 6 new-instance v2, Lcom/google/firebase/database/core/utilities/ImmutableTree; invoke-direct {v2, v11}, Lcom/google/firebase/database/core/utilities/ImmutableTree;->(Ljava/lang/Object;)V move-object v12, v1 move-object v4, v2 .line 7 :goto_0 invoke-interface {v0}, Landroid/database/Cursor;->moveToNext()Z move-result v1 const/4 v13, 0x1 const/4 v14, 0x0 if-eqz v1, :cond_4 .line 8 invoke-interface {v0, v14}, Landroid/database/Cursor;->getLong(I)J move-result-wide v1 .line 9 new-instance v3, Lcom/google/firebase/database/core/Path; invoke-interface {v0, v13}, Landroid/database/Cursor;->getString(I)Ljava/lang/String; move-result-object v6 invoke-direct {v3, v6}, Lcom/google/firebase/database/core/Path;->(Ljava/lang/String;)V .line 10 invoke-virtual {v8, v3}, Lcom/google/firebase/database/core/Path;->contains(Lcom/google/firebase/database/core/Path;)Z move-result v6 const-string v13, "We are pruning at " if-nez v6, :cond_1 .line 11 iget-object v1, v7, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->logger:Lcom/google/firebase/database/logging/LogWrapper; new-instance v2, Ljava/lang/StringBuilder; invoke-direct {v2}, Ljava/lang/StringBuilder;->()V invoke-virtual {v2, v13}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {v2, v8}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; const-string v6, " but we have data stored higher up at " invoke-virtual {v2, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; const-string v3, ". Ignoring." invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v2 invoke-virtual {v1, v2}, Lcom/google/firebase/database/logging/LogWrapper;->warn(Ljava/lang/String;)V goto :goto_0 .line 12 :cond_1 invoke-static {v8, v3}, Lcom/google/firebase/database/core/Path;->getRelative(Lcom/google/firebase/database/core/Path;Lcom/google/firebase/database/core/Path;)Lcom/google/firebase/database/core/Path; move-result-object v6 .line 13 invoke-virtual {v5, v6}, Lcom/google/firebase/database/core/persistence/PruneForest;->shouldPruneUnkeptDescendants(Lcom/google/firebase/database/core/Path;)Z move-result v14 if-eqz v14, :cond_2 .line 14 invoke-static {v1, v2}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long; move-result-object v1 invoke-virtual {v12, v6, v1}, Lcom/google/firebase/database/core/utilities/ImmutableTree;->set(Lcom/google/firebase/database/core/Path;Ljava/lang/Object;)Lcom/google/firebase/database/core/utilities/ImmutableTree; move-result-object v12 goto :goto_0 .line 15 :cond_2 invoke-virtual {v5, v6}, Lcom/google/firebase/database/core/persistence/PruneForest;->shouldKeep(Lcom/google/firebase/database/core/Path;)Z move-result v14 if-eqz v14, :cond_3 .line 16 invoke-static {v1, v2}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long; move-result-object v1 invoke-virtual {v4, v6, v1}, Lcom/google/firebase/database/core/utilities/ImmutableTree;->set(Lcom/google/firebase/database/core/Path;Ljava/lang/Object;)Lcom/google/firebase/database/core/utilities/ImmutableTree; move-result-object v4 goto :goto_0 .line 17 :cond_3 iget-object v1, v7, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->logger:Lcom/google/firebase/database/logging/LogWrapper; new-instance v2, Ljava/lang/StringBuilder; invoke-direct {v2}, Ljava/lang/StringBuilder;->()V invoke-virtual {v2, v13}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {v2, v8}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; const-string v6, " and have data at " invoke-virtual {v2, v6}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; const-string v3, " that isn\'t marked for pruning or keeping. Ignoring." invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v2 invoke-virtual {v1, v2}, Lcom/google/firebase/database/logging/LogWrapper;->warn(Ljava/lang/String;)V goto/16 :goto_0 .line 18 :cond_4 invoke-virtual {v12}, Lcom/google/firebase/database/core/utilities/ImmutableTree;->isEmpty()Z move-result v0 if-nez v0, :cond_6 .line 19 new-instance v15, Ljava/util/ArrayList; invoke-direct {v15}, Ljava/util/ArrayList;->()V .line 20 invoke-static {}, Lcom/google/firebase/database/core/Path;->getEmptyPath()Lcom/google/firebase/database/core/Path; move-result-object v2 move-object/from16 v0, p0 move-object/from16 v1, p1 move-object v3, v12 move-object/from16 v5, p2 move-object v6, v15 .line 21 invoke-direct/range {v0 .. v6}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->pruneTreeRecursive(Lcom/google/firebase/database/core/Path;Lcom/google/firebase/database/core/Path;Lcom/google/firebase/database/core/utilities/ImmutableTree;Lcom/google/firebase/database/core/utilities/ImmutableTree;Lcom/google/firebase/database/core/persistence/PruneForest;Ljava/util/List;)V .line 22 invoke-virtual {v12}, Lcom/google/firebase/database/core/utilities/ImmutableTree;->values()Ljava/util/Collection; move-result-object v0 const-string v1, "rowid IN (" .line 23 invoke-static {v1}, Landroid/support/v4/media/d;->a(Ljava/lang/String;)Ljava/lang/StringBuilder; move-result-object v1 invoke-direct {v7, v0}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->commaSeparatedList(Ljava/util/Collection;)Ljava/lang/String; move-result-object v2 const-string v3, ")" invoke-static {v1, v2, v3}, Landroidx/camera/camera2/internal/b;->a(Ljava/lang/StringBuilder;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; move-result-object v1 .line 24 iget-object v2, v7, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->database:Landroid/database/sqlite/SQLiteDatabase; const-string v3, "serverCache" invoke-virtual {v2, v3, v1, v11}, Landroid/database/sqlite/SQLiteDatabase;->delete(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)I .line 25 invoke-virtual {v15}, Ljava/util/ArrayList;->iterator()Ljava/util/Iterator; move-result-object v1 :goto_1 invoke-interface {v1}, Ljava/util/Iterator;->hasNext()Z move-result v2 if-eqz v2, :cond_5 invoke-interface {v1}, Ljava/util/Iterator;->next()Ljava/lang/Object; move-result-object v2 check-cast v2, Lcom/google/firebase/database/core/utilities/Pair; .line 26 invoke-virtual {v2}, Lcom/google/firebase/database/core/utilities/Pair;->getFirst()Ljava/lang/Object; move-result-object v3 check-cast v3, Lcom/google/firebase/database/core/Path; invoke-virtual {v8, v3}, Lcom/google/firebase/database/core/Path;->child(Lcom/google/firebase/database/core/Path;)Lcom/google/firebase/database/core/Path; move-result-object v3 invoke-virtual {v2}, Lcom/google/firebase/database/core/utilities/Pair;->getSecond()Ljava/lang/Object; move-result-object v2 check-cast v2, Lcom/google/firebase/database/snapshot/Node; invoke-direct {v7, v3, v2}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->saveNested(Lcom/google/firebase/database/core/Path;Lcom/google/firebase/database/snapshot/Node;)I goto :goto_1 .line 27 :cond_5 invoke-interface {v0}, Ljava/util/Collection;->size()I move-result v0 .line 28 invoke-virtual {v15}, Ljava/util/ArrayList;->size()I move-result v1 goto :goto_2 :cond_6 move v0, v14 move v1, v0 .line 29 :goto_2 invoke-static {}, Ljava/lang/System;->currentTimeMillis()J move-result-wide v2 sub-long/2addr v2, v9 .line 30 iget-object v4, v7, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->logger:Lcom/google/firebase/database/logging/LogWrapper; invoke-virtual {v4}, Lcom/google/firebase/database/logging/LogWrapper;->logsDebug()Z move-result v4 if-eqz v4, :cond_7 .line 31 iget-object v4, v7, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->logger:Lcom/google/firebase/database/logging/LogWrapper; sget-object v5, Ljava/util/Locale;->US:Ljava/util/Locale; const/4 v6, 0x3 new-array v6, v6, [Ljava/lang/Object; .line 32 invoke-static {v0}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer; move-result-object v0 aput-object v0, v6, v14 .line 33 invoke-static {v1}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer; move-result-object v0 aput-object v0, v6, v13 const/4 v0, 0x2 .line 34 invoke-static {v2, v3}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long; move-result-object v1 aput-object v1, v6, v0 const-string v0, "Pruned %d rows with %d nodes resaved in %dms" .line 35 invoke-static {v5, v0, v6}, Ljava/lang/String;->format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String; move-result-object v0 new-array v1, v14, [Ljava/lang/Object; .line 36 invoke-virtual {v4, v0, v1}, Lcom/google/firebase/database/logging/LogWrapper;->debug(Ljava/lang/String;[Ljava/lang/Object;)V :cond_7 return-void .end method .method public purgeCache()V .locals 3 .line 1 invoke-direct {p0}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->verifyInsideTransaction()V .line 2 iget-object v0, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->database:Landroid/database/sqlite/SQLiteDatabase; const-string v1, "serverCache" const/4 v2, 0x0 invoke-virtual {v0, v1, v2, v2}, Landroid/database/sqlite/SQLiteDatabase;->delete(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)I .line 3 iget-object v0, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->database:Landroid/database/sqlite/SQLiteDatabase; const-string v1, "writes" invoke-virtual {v0, v1, v2, v2}, Landroid/database/sqlite/SQLiteDatabase;->delete(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)I .line 4 iget-object v0, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->database:Landroid/database/sqlite/SQLiteDatabase; const-string v1, "trackedQueries" invoke-virtual {v0, v1, v2, v2}, Landroid/database/sqlite/SQLiteDatabase;->delete(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)I .line 5 iget-object v0, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->database:Landroid/database/sqlite/SQLiteDatabase; const-string v1, "trackedKeys" invoke-virtual {v0, v1, v2, v2}, Landroid/database/sqlite/SQLiteDatabase;->delete(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)I return-void .end method .method public removeAllUserWrites()V .locals 7 .line 1 invoke-direct {p0}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->verifyInsideTransaction()V .line 2 invoke-static {}, Ljava/lang/System;->currentTimeMillis()J move-result-wide v0 .line 3 iget-object v2, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->database:Landroid/database/sqlite/SQLiteDatabase; const-string v3, "writes" const/4 v4, 0x0 invoke-virtual {v2, v3, v4, v4}, Landroid/database/sqlite/SQLiteDatabase;->delete(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)I move-result v2 .line 4 invoke-static {}, Ljava/lang/System;->currentTimeMillis()J move-result-wide v3 sub-long/2addr v3, v0 .line 5 iget-object v0, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->logger:Lcom/google/firebase/database/logging/LogWrapper; invoke-virtual {v0}, Lcom/google/firebase/database/logging/LogWrapper;->logsDebug()Z move-result v0 if-eqz v0, :cond_0 .line 6 iget-object v0, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->logger:Lcom/google/firebase/database/logging/LogWrapper; sget-object v1, Ljava/util/Locale;->US:Ljava/util/Locale; const/4 v5, 0x2 new-array v5, v5, [Ljava/lang/Object; invoke-static {v2}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer; move-result-object v2 const/4 v6, 0x0 aput-object v2, v5, v6 const/4 v2, 0x1 invoke-static {v3, v4}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long; move-result-object v3 aput-object v3, v5, v2 const-string v2, "Deleted %d (all) write(s) in %dms" invoke-static {v1, v2, v5}, Ljava/lang/String;->format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String; move-result-object v1 new-array v2, v6, [Ljava/lang/Object; invoke-virtual {v0, v1, v2}, Lcom/google/firebase/database/logging/LogWrapper;->debug(Ljava/lang/String;[Ljava/lang/Object;)V :cond_0 return-void .end method .method public removeUserWrite(J)V .locals 8 .line 1 invoke-direct {p0}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->verifyInsideTransaction()V .line 2 invoke-static {}, Ljava/lang/System;->currentTimeMillis()J move-result-wide v0 .line 3 iget-object v2, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->database:Landroid/database/sqlite/SQLiteDatabase; const/4 v3, 0x1 new-array v4, v3, [Ljava/lang/String; invoke-static {p1, p2}, Ljava/lang/String;->valueOf(J)Ljava/lang/String; move-result-object v5 const/4 v6, 0x0 aput-object v5, v4, v6 const-string v5, "writes" const-string v7, "id = ?" invoke-virtual {v2, v5, v7, v4}, Landroid/database/sqlite/SQLiteDatabase;->delete(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)I move-result v2 .line 4 invoke-static {}, Ljava/lang/System;->currentTimeMillis()J move-result-wide v4 sub-long/2addr v4, v0 .line 5 iget-object v0, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->logger:Lcom/google/firebase/database/logging/LogWrapper; invoke-virtual {v0}, Lcom/google/firebase/database/logging/LogWrapper;->logsDebug()Z move-result v0 if-eqz v0, :cond_0 .line 6 iget-object v0, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->logger:Lcom/google/firebase/database/logging/LogWrapper; sget-object v1, Ljava/util/Locale;->US:Ljava/util/Locale; const/4 v7, 0x3 new-array v7, v7, [Ljava/lang/Object; .line 7 invoke-static {v2}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer; move-result-object v2 aput-object v2, v7, v6 invoke-static {p1, p2}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long; move-result-object p1 aput-object p1, v7, v3 const/4 p1, 0x2 invoke-static {v4, v5}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long; move-result-object p2 aput-object p2, v7, p1 const-string p1, "Deleted %d write(s) with writeId %d in %dms" .line 8 invoke-static {v1, p1, v7}, Ljava/lang/String;->format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String; move-result-object p1 new-array p2, v6, [Ljava/lang/Object; .line 9 invoke-virtual {v0, p1, p2}, Lcom/google/firebase/database/logging/LogWrapper;->debug(Ljava/lang/String;[Ljava/lang/Object;)V :cond_0 return-void .end method .method public resetPreviouslyActiveTrackedQueries(J)V .locals 8 .line 1 invoke-direct {p0}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->verifyInsideTransaction()V .line 2 invoke-static {}, Ljava/lang/System;->currentTimeMillis()J move-result-wide v0 .line 3 new-instance v4, Landroid/content/ContentValues; invoke-direct {v4}, Landroid/content/ContentValues;->()V .line 4 sget-object v2, Ljava/lang/Boolean;->FALSE:Ljava/lang/Boolean; const-string v3, "active" invoke-virtual {v4, v3, v2}, Landroid/content/ContentValues;->put(Ljava/lang/String;Ljava/lang/Boolean;)V .line 5 invoke-static {p1, p2}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long; move-result-object p1 const-string p2, "lastUse" invoke-virtual {v4, p2, p1}, Landroid/content/ContentValues;->put(Ljava/lang/String;Ljava/lang/Long;)V .line 6 iget-object v2, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->database:Landroid/database/sqlite/SQLiteDatabase; const/4 p1, 0x0 new-array v6, p1, [Ljava/lang/String; const-string v3, "trackedQueries" const-string v5, "active = 1" const/4 v7, 0x5 invoke-virtual/range {v2 .. v7}, Landroid/database/sqlite/SQLiteDatabase;->updateWithOnConflict(Ljava/lang/String;Landroid/content/ContentValues;Ljava/lang/String;[Ljava/lang/String;I)I .line 7 invoke-static {}, Ljava/lang/System;->currentTimeMillis()J move-result-wide v2 sub-long/2addr v2, v0 .line 8 iget-object p2, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->logger:Lcom/google/firebase/database/logging/LogWrapper; invoke-virtual {p2}, Lcom/google/firebase/database/logging/LogWrapper;->logsDebug()Z move-result p2 if-eqz p2, :cond_0 .line 9 iget-object p2, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->logger:Lcom/google/firebase/database/logging/LogWrapper; sget-object v0, Ljava/util/Locale;->US:Ljava/util/Locale; const/4 v1, 0x1 new-array v1, v1, [Ljava/lang/Object; invoke-static {v2, v3}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long; move-result-object v2 aput-object v2, v1, p1 const-string v2, "Reset active tracked queries in %dms" invoke-static {v0, v2, v1}, Ljava/lang/String;->format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String; move-result-object v0 new-array p1, p1, [Ljava/lang/Object; invoke-virtual {p2, v0, p1}, Lcom/google/firebase/database/logging/LogWrapper;->debug(Ljava/lang/String;[Ljava/lang/Object;)V :cond_0 return-void .end method .method public saveTrackedQuery(Lcom/google/firebase/database/core/persistence/TrackedQuery;)V .locals 6 .line 1 invoke-direct {p0}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->verifyInsideTransaction()V .line 2 invoke-static {}, Ljava/lang/System;->currentTimeMillis()J move-result-wide v0 .line 3 new-instance v2, Landroid/content/ContentValues; invoke-direct {v2}, Landroid/content/ContentValues;->()V .line 4 iget-wide v3, p1, Lcom/google/firebase/database/core/persistence/TrackedQuery;->id:J invoke-static {v3, v4}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long; move-result-object v3 const-string v4, "id" invoke-virtual {v2, v4, v3}, Landroid/content/ContentValues;->put(Ljava/lang/String;Ljava/lang/Long;)V .line 5 iget-object v3, p1, Lcom/google/firebase/database/core/persistence/TrackedQuery;->querySpec:Lcom/google/firebase/database/core/view/QuerySpec; invoke-virtual {v3}, Lcom/google/firebase/database/core/view/QuerySpec;->getPath()Lcom/google/firebase/database/core/Path; move-result-object v3 invoke-static {v3}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->pathToKey(Lcom/google/firebase/database/core/Path;)Ljava/lang/String; move-result-object v3 const-string v4, "path" invoke-virtual {v2, v4, v3}, Landroid/content/ContentValues;->put(Ljava/lang/String;Ljava/lang/String;)V .line 6 iget-object v3, p1, Lcom/google/firebase/database/core/persistence/TrackedQuery;->querySpec:Lcom/google/firebase/database/core/view/QuerySpec; invoke-virtual {v3}, Lcom/google/firebase/database/core/view/QuerySpec;->getParams()Lcom/google/firebase/database/core/view/QueryParams; move-result-object v3 invoke-virtual {v3}, Lcom/google/firebase/database/core/view/QueryParams;->toJSON()Ljava/lang/String; move-result-object v3 const-string v4, "queryParams" invoke-virtual {v2, v4, v3}, Landroid/content/ContentValues;->put(Ljava/lang/String;Ljava/lang/String;)V .line 7 iget-wide v3, p1, Lcom/google/firebase/database/core/persistence/TrackedQuery;->lastUse:J invoke-static {v3, v4}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long; move-result-object v3 const-string v4, "lastUse" invoke-virtual {v2, v4, v3}, Landroid/content/ContentValues;->put(Ljava/lang/String;Ljava/lang/Long;)V .line 8 iget-boolean v3, p1, Lcom/google/firebase/database/core/persistence/TrackedQuery;->complete:Z invoke-static {v3}, Ljava/lang/Boolean;->valueOf(Z)Ljava/lang/Boolean; move-result-object v3 const-string v4, "complete" invoke-virtual {v2, v4, v3}, Landroid/content/ContentValues;->put(Ljava/lang/String;Ljava/lang/Boolean;)V .line 9 iget-boolean p1, p1, Lcom/google/firebase/database/core/persistence/TrackedQuery;->active:Z invoke-static {p1}, Ljava/lang/Boolean;->valueOf(Z)Ljava/lang/Boolean; move-result-object p1 const-string v3, "active" invoke-virtual {v2, v3, p1}, Landroid/content/ContentValues;->put(Ljava/lang/String;Ljava/lang/Boolean;)V .line 10 iget-object p1, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->database:Landroid/database/sqlite/SQLiteDatabase; const-string v3, "trackedQueries" const/4 v4, 0x0 const/4 v5, 0x5 invoke-virtual {p1, v3, v4, v2, v5}, Landroid/database/sqlite/SQLiteDatabase;->insertWithOnConflict(Ljava/lang/String;Ljava/lang/String;Landroid/content/ContentValues;I)J .line 11 invoke-static {}, Ljava/lang/System;->currentTimeMillis()J move-result-wide v2 sub-long/2addr v2, v0 .line 12 iget-object p1, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->logger:Lcom/google/firebase/database/logging/LogWrapper; invoke-virtual {p1}, Lcom/google/firebase/database/logging/LogWrapper;->logsDebug()Z move-result p1 if-eqz p1, :cond_0 .line 13 iget-object p1, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->logger:Lcom/google/firebase/database/logging/LogWrapper; sget-object v0, Ljava/util/Locale;->US:Ljava/util/Locale; const/4 v1, 0x1 new-array v1, v1, [Ljava/lang/Object; invoke-static {v2, v3}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long; move-result-object v2 const/4 v3, 0x0 aput-object v2, v1, v3 const-string v2, "Saved new tracked query in %dms" invoke-static {v0, v2, v1}, Ljava/lang/String;->format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String; move-result-object v0 new-array v1, v3, [Ljava/lang/Object; invoke-virtual {p1, v0, v1}, Lcom/google/firebase/database/logging/LogWrapper;->debug(Ljava/lang/String;[Ljava/lang/Object;)V :cond_0 return-void .end method .method public saveTrackedQueryKeys(JLjava/util/Set;)V .locals 10 .annotation system Ldalvik/annotation/Signature; value = { "(J", "Ljava/util/Set<", "Lcom/google/firebase/database/snapshot/ChildKey;", ">;)V" } .end annotation .line 1 invoke-direct {p0}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->verifyInsideTransaction()V .line 2 invoke-static {}, Ljava/lang/System;->currentTimeMillis()J move-result-wide v0 .line 3 invoke-static {p1, p2}, Ljava/lang/String;->valueOf(J)Ljava/lang/String; move-result-object v2 .line 4 iget-object v3, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->database:Landroid/database/sqlite/SQLiteDatabase; const/4 v4, 0x1 new-array v5, v4, [Ljava/lang/String; const/4 v6, 0x0 aput-object v2, v5, v6 const-string v2, "trackedKeys" const-string v7, "id = ?" invoke-virtual {v3, v2, v7, v5}, Landroid/database/sqlite/SQLiteDatabase;->delete(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)I .line 5 invoke-interface {p3}, Ljava/util/Set;->iterator()Ljava/util/Iterator; move-result-object v3 :goto_0 invoke-interface {v3}, Ljava/util/Iterator;->hasNext()Z move-result v5 if-eqz v5, :cond_0 invoke-interface {v3}, Ljava/util/Iterator;->next()Ljava/lang/Object; move-result-object v5 check-cast v5, Lcom/google/firebase/database/snapshot/ChildKey; .line 6 new-instance v7, Landroid/content/ContentValues; invoke-direct {v7}, Landroid/content/ContentValues;->()V .line 7 invoke-static {p1, p2}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long; move-result-object v8 const-string v9, "id" invoke-virtual {v7, v9, v8}, Landroid/content/ContentValues;->put(Ljava/lang/String;Ljava/lang/Long;)V .line 8 invoke-virtual {v5}, Lcom/google/firebase/database/snapshot/ChildKey;->asString()Ljava/lang/String; move-result-object v5 const-string v8, "key" invoke-virtual {v7, v8, v5}, Landroid/content/ContentValues;->put(Ljava/lang/String;Ljava/lang/String;)V .line 9 iget-object v5, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->database:Landroid/database/sqlite/SQLiteDatabase; const/4 v8, 0x0 const/4 v9, 0x5 invoke-virtual {v5, v2, v8, v7, v9}, Landroid/database/sqlite/SQLiteDatabase;->insertWithOnConflict(Ljava/lang/String;Ljava/lang/String;Landroid/content/ContentValues;I)J goto :goto_0 .line 10 :cond_0 invoke-static {}, Ljava/lang/System;->currentTimeMillis()J move-result-wide v2 sub-long/2addr v2, v0 .line 11 iget-object v0, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->logger:Lcom/google/firebase/database/logging/LogWrapper; invoke-virtual {v0}, Lcom/google/firebase/database/logging/LogWrapper;->logsDebug()Z move-result v0 if-eqz v0, :cond_1 .line 12 iget-object v0, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->logger:Lcom/google/firebase/database/logging/LogWrapper; sget-object v1, Ljava/util/Locale;->US:Ljava/util/Locale; const/4 v5, 0x3 new-array v5, v5, [Ljava/lang/Object; .line 13 invoke-interface {p3}, Ljava/util/Set;->size()I move-result p3 invoke-static {p3}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer; move-result-object p3 aput-object p3, v5, v6 .line 14 invoke-static {p1, p2}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long; move-result-object p1 aput-object p1, v5, v4 const/4 p1, 0x2 .line 15 invoke-static {v2, v3}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long; move-result-object p2 aput-object p2, v5, p1 const-string p1, "Set %d tracked query keys for tracked query %d in %dms" .line 16 invoke-static {v1, p1, v5}, Ljava/lang/String;->format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String; move-result-object p1 new-array p2, v6, [Ljava/lang/Object; .line 17 invoke-virtual {v0, p1, p2}, Lcom/google/firebase/database/logging/LogWrapper;->debug(Ljava/lang/String;[Ljava/lang/Object;)V :cond_1 return-void .end method .method public saveUserMerge(Lcom/google/firebase/database/core/Path;Lcom/google/firebase/database/core/CompoundWrite;J)V .locals 9 .line 1 invoke-direct {p0}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->verifyInsideTransaction()V .line 2 invoke-static {}, Ljava/lang/System;->currentTimeMillis()J move-result-wide v0 const/4 v2, 0x1 .line 3 invoke-virtual {p2, v2}, Lcom/google/firebase/database/core/CompoundWrite;->getValue(Z)Ljava/util/Map; move-result-object p2 invoke-direct {p0, p2}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->serializeObject(Ljava/lang/Object;)[B move-result-object v8 const-string v7, "m" move-object v3, p0 move-object v4, p1 move-wide v5, p3 .line 4 invoke-direct/range {v3 .. v8}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->saveWrite(Lcom/google/firebase/database/core/Path;JLjava/lang/String;[B)V .line 5 invoke-static {}, Ljava/lang/System;->currentTimeMillis()J move-result-wide p1 sub-long/2addr p1, v0 .line 6 iget-object p3, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->logger:Lcom/google/firebase/database/logging/LogWrapper; invoke-virtual {p3}, Lcom/google/firebase/database/logging/LogWrapper;->logsDebug()Z move-result p3 if-eqz p3, :cond_0 .line 7 iget-object p3, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->logger:Lcom/google/firebase/database/logging/LogWrapper; sget-object p4, Ljava/util/Locale;->US:Ljava/util/Locale; new-array v0, v2, [Ljava/lang/Object; invoke-static {p1, p2}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long; move-result-object p1 const/4 p2, 0x0 aput-object p1, v0, p2 const-string p1, "Persisted user merge in %dms" invoke-static {p4, p1, v0}, Ljava/lang/String;->format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String; move-result-object p1 new-array p2, p2, [Ljava/lang/Object; invoke-virtual {p3, p1, p2}, Lcom/google/firebase/database/logging/LogWrapper;->debug(Ljava/lang/String;[Ljava/lang/Object;)V :cond_0 return-void .end method .method public saveUserOverwrite(Lcom/google/firebase/database/core/Path;Lcom/google/firebase/database/snapshot/Node;J)V .locals 9 .line 1 invoke-direct {p0}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->verifyInsideTransaction()V .line 2 invoke-static {}, Ljava/lang/System;->currentTimeMillis()J move-result-wide v0 const/4 v2, 0x1 .line 3 invoke-interface {p2, v2}, Lcom/google/firebase/database/snapshot/Node;->getValue(Z)Ljava/lang/Object; move-result-object p2 invoke-direct {p0, p2}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->serializeObject(Ljava/lang/Object;)[B move-result-object v8 const-string v7, "o" move-object v3, p0 move-object v4, p1 move-wide v5, p3 .line 4 invoke-direct/range {v3 .. v8}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->saveWrite(Lcom/google/firebase/database/core/Path;JLjava/lang/String;[B)V .line 5 invoke-static {}, Ljava/lang/System;->currentTimeMillis()J move-result-wide p1 sub-long/2addr p1, v0 .line 6 iget-object p3, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->logger:Lcom/google/firebase/database/logging/LogWrapper; invoke-virtual {p3}, Lcom/google/firebase/database/logging/LogWrapper;->logsDebug()Z move-result p3 if-eqz p3, :cond_0 .line 7 iget-object p3, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->logger:Lcom/google/firebase/database/logging/LogWrapper; sget-object p4, Ljava/util/Locale;->US:Ljava/util/Locale; new-array v0, v2, [Ljava/lang/Object; invoke-static {p1, p2}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long; move-result-object p1 const/4 p2, 0x0 aput-object p1, v0, p2 const-string p1, "Persisted user overwrite in %dms" invoke-static {p4, p1, v0}, Ljava/lang/String;->format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String; move-result-object p1 new-array p2, p2, [Ljava/lang/Object; invoke-virtual {p3, p1, p2}, Lcom/google/firebase/database/logging/LogWrapper;->debug(Ljava/lang/String;[Ljava/lang/Object;)V :cond_0 return-void .end method .method public serverCache(Lcom/google/firebase/database/core/Path;)Lcom/google/firebase/database/snapshot/Node; .locals 0 .line 1 invoke-direct {p0, p1}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->loadNested(Lcom/google/firebase/database/core/Path;)Lcom/google/firebase/database/snapshot/Node; move-result-object p1 return-object p1 .end method .method public serverCacheEstimatedSizeInBytes()J .locals 4 const/4 v0, 0x3 new-array v0, v0, [Ljava/lang/Object; const-string v1, "value" const/4 v2, 0x0 aput-object v1, v0, v2 const/4 v1, 0x1 const-string v3, "path" aput-object v3, v0, v1 const/4 v1, 0x2 const-string v3, "serverCache" aput-object v3, v0, v1 const-string v1, "SELECT sum(length(%s) + length(%s)) FROM %s" .line 1 invoke-static {v1, v0}, Ljava/lang/String;->format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String; move-result-object v0 .line 2 iget-object v1, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->database:Landroid/database/sqlite/SQLiteDatabase; const/4 v3, 0x0 invoke-virtual {v1, v0, v3}, Landroid/database/sqlite/SQLiteDatabase;->rawQuery(Ljava/lang/String;[Ljava/lang/String;)Landroid/database/Cursor; move-result-object v0 .line 3 :try_start_0 invoke-interface {v0}, Landroid/database/Cursor;->moveToFirst()Z move-result v1 if-eqz v1, :cond_0 .line 4 invoke-interface {v0, v2}, Landroid/database/Cursor;->getLong(I)J move-result-wide v1 :try_end_0 .catchall {:try_start_0 .. :try_end_0} :catchall_0 .line 5 invoke-interface {v0}, Landroid/database/Cursor;->close()V return-wide v1 .line 6 :cond_0 :try_start_1 new-instance v1, Ljava/lang/IllegalStateException; const-string v2, "Couldn\'t read database result!" invoke-direct {v1, v2}, Ljava/lang/IllegalStateException;->(Ljava/lang/String;)V throw v1 :try_end_1 .catchall {:try_start_1 .. :try_end_1} :catchall_0 :catchall_0 move-exception v1 .line 7 invoke-interface {v0}, Landroid/database/Cursor;->close()V .line 8 throw v1 .end method .method public setTransactionSuccessful()V .locals 1 .line 1 iget-object v0, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->database:Landroid/database/sqlite/SQLiteDatabase; invoke-virtual {v0}, Landroid/database/sqlite/SQLiteDatabase;->setTransactionSuccessful()V return-void .end method .method public updateTrackedQueryKeys(JLjava/util/Set;Ljava/util/Set;)V .locals 11 .annotation system Ldalvik/annotation/Signature; value = { "(J", "Ljava/util/Set<", "Lcom/google/firebase/database/snapshot/ChildKey;", ">;", "Ljava/util/Set<", "Lcom/google/firebase/database/snapshot/ChildKey;", ">;)V" } .end annotation .line 1 invoke-direct {p0}, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->verifyInsideTransaction()V .line 2 invoke-static {}, Ljava/lang/System;->currentTimeMillis()J move-result-wide v0 .line 3 invoke-static {p1, p2}, Ljava/lang/String;->valueOf(J)Ljava/lang/String; move-result-object v2 .line 4 invoke-interface {p4}, Ljava/util/Set;->iterator()Ljava/util/Iterator; move-result-object v3 :goto_0 invoke-interface {v3}, Ljava/util/Iterator;->hasNext()Z move-result v4 const/4 v5, 0x1 const/4 v6, 0x2 const-string v7, "trackedKeys" const/4 v8, 0x0 if-eqz v4, :cond_0 invoke-interface {v3}, Ljava/util/Iterator;->next()Ljava/lang/Object; move-result-object v4 check-cast v4, Lcom/google/firebase/database/snapshot/ChildKey; .line 5 iget-object v9, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->database:Landroid/database/sqlite/SQLiteDatabase; new-array v6, v6, [Ljava/lang/String; aput-object v2, v6, v8 .line 6 invoke-virtual {v4}, Lcom/google/firebase/database/snapshot/ChildKey;->asString()Ljava/lang/String; move-result-object v4 aput-object v4, v6, v5 const-string v4, "id = ? AND key = ?" .line 7 invoke-virtual {v9, v7, v4, v6}, Landroid/database/sqlite/SQLiteDatabase;->delete(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)I goto :goto_0 .line 8 :cond_0 invoke-interface {p3}, Ljava/util/Set;->iterator()Ljava/util/Iterator; move-result-object v2 :goto_1 invoke-interface {v2}, Ljava/util/Iterator;->hasNext()Z move-result v3 if-eqz v3, :cond_1 invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object; move-result-object v3 check-cast v3, Lcom/google/firebase/database/snapshot/ChildKey; .line 9 new-instance v4, Landroid/content/ContentValues; invoke-direct {v4}, Landroid/content/ContentValues;->()V .line 10 invoke-static {p1, p2}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long; move-result-object v9 const-string v10, "id" invoke-virtual {v4, v10, v9}, Landroid/content/ContentValues;->put(Ljava/lang/String;Ljava/lang/Long;)V .line 11 invoke-virtual {v3}, Lcom/google/firebase/database/snapshot/ChildKey;->asString()Ljava/lang/String; move-result-object v3 const-string v9, "key" invoke-virtual {v4, v9, v3}, Landroid/content/ContentValues;->put(Ljava/lang/String;Ljava/lang/String;)V .line 12 iget-object v3, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->database:Landroid/database/sqlite/SQLiteDatabase; const/4 v9, 0x0 const/4 v10, 0x5 invoke-virtual {v3, v7, v9, v4, v10}, Landroid/database/sqlite/SQLiteDatabase;->insertWithOnConflict(Ljava/lang/String;Ljava/lang/String;Landroid/content/ContentValues;I)J goto :goto_1 .line 13 :cond_1 invoke-static {}, Ljava/lang/System;->currentTimeMillis()J move-result-wide v2 sub-long/2addr v2, v0 .line 14 iget-object v0, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->logger:Lcom/google/firebase/database/logging/LogWrapper; invoke-virtual {v0}, Lcom/google/firebase/database/logging/LogWrapper;->logsDebug()Z move-result v0 if-eqz v0, :cond_2 .line 15 iget-object v0, p0, Lcom/google/firebase/database/android/SqlPersistenceStorageEngine;->logger:Lcom/google/firebase/database/logging/LogWrapper; sget-object v1, Ljava/util/Locale;->US:Ljava/util/Locale; const/4 v4, 0x4 new-array v4, v4, [Ljava/lang/Object; .line 16 invoke-interface {p3}, Ljava/util/Set;->size()I move-result p3 invoke-static {p3}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer; move-result-object p3 aput-object p3, v4, v8 .line 17 invoke-interface {p4}, Ljava/util/Set;->size()I move-result p3 invoke-static {p3}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer; move-result-object p3 aput-object p3, v4, v5 .line 18 invoke-static {p1, p2}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long; move-result-object p1 aput-object p1, v4, v6 const/4 p1, 0x3 .line 19 invoke-static {v2, v3}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long; move-result-object p2 aput-object p2, v4, p1 const-string p1, "Updated tracked query keys (%d added, %d removed) for tracked query id %d in %dms" .line 20 invoke-static {v1, p1, v4}, Ljava/lang/String;->format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String; move-result-object p1 new-array p2, v8, [Ljava/lang/Object; .line 21 invoke-virtual {v0, p1, p2}, Lcom/google/firebase/database/logging/LogWrapper;->debug(Ljava/lang/String;[Ljava/lang/Object;)V :cond_2 return-void .end method