]> git.mxchange.org Git - fba.git/commitdiff
Continued:
authorRoland Häder <roland@mxchange.org>
Thu, 6 Feb 2025 17:14:34 +0000 (18:14 +0100)
committerRoland Häder <roland@mxchange.org>
Thu, 6 Feb 2025 17:14:34 +0000 (18:14 +0100)
- delete all solved obfuscation patterns at once
- only vacuum database if rows have been deleted

fba/commands.py

index 3aee14cd0ae514676c7c0f2511fba499d31e542a..5a1d960403a35f70f12f4ab27e2d58b22a76a2c5 100644 (file)
@@ -2050,32 +2050,40 @@ def check_obfuscations(args: argparse.Namespace) -> int:
     locking.acquire()
 
     # Init variables
-    deleted = 0
+    deleted = []
 
     database.cursor.execute("SELECT pattern FROM obfuscation ORDER BY pattern ASC")
     rows = database.cursor.fetchall()
 
     logger.info("Checking %d obfuscations ...", len(rows))
     for row in rows:
-        logger.debug("row[pattern]='%s'", row["pattern"])
+        logger.debug("row[pattern]='%s' - BEFORE!", row["pattern"])
         pattern = row["pattern"].replace("*", "_").replace("?", "_")
+        logger.debug("pattern='%s' - AFTER!", pattern)
 
         database.cursor.execute("SELECT domain FROM instances WHERE domain LIKE '" + pattern + "' LIMIT 1")
-        check = database.cursor.fetchone()
+        instance = database.cursor.fetchone()
 
-        logger.debug("check[]='%s'", type(check))
-        if check is not None:
-            logger.info("Deleting row[pattern]='%s', solved to check[domain]='%s' ...", row["pattern"], check["domain"])
-            database.cursor.execute("DELETE FROM instances WHERE domain=? LIMIT 1", [row["pattern"]])
-            deleted = deleted + 1
+        logger.debug("instance[]='%s'", type(instance))
+        if instance is not None:
+            logger.info("Deleting row[pattern]='%s', solved to instance[domain]='%s' ...", row["pattern"], instance["domain"])
+            deleted.append(row["pattern"])
 
-    logger.info("Deleted %d patterns ...", deleted)
+    logger.debug("deleted()=%d", len(deleted))
+    if len(deleted) > 0:
+        logger.info("Deleting %d pattern(s) ...", len(deleted))
+        delete_sql = ", ".join([f"\'{pattern}\'" for pattern in deleted])
 
-    logger.debug("Invoking commit() ...")
-    database.connection.commit()
+        logger.debug("delete_sql='%s'", delete_sql)
+        database.cursor.execute("DELETE FROM obfuscation WHERE pattern IN (%s)" % delete_sql)
 
-    logger.debug("Vaccum cleaning database ...")
-    database.cursor.execute("VACUUM")
+        logger.debug("Invoking commit() ...")
+        database.connection.commit()
+
+        logger.info("Vaccum cleaning database ...")
+        database.cursor.execute("VACUUM")
+    else:
+        logger.info("No pattern could be found as solved domain.")
 
     logger.debug("Success! - EXIT!")
     return 0