SQL: Tool to cleanup unused tag slugs.
authorElrond <elrond+mediagoblin.org@samba-tng.org>
Tue, 24 Jan 2012 22:03:33 +0000 (23:03 +0100)
committerElrond <elrond+mediagoblin.org@samba-tng.org>
Mon, 5 Mar 2012 20:30:39 +0000 (21:30 +0100)
The current SQL layout/sqlalchemy strucuture can't detect
whether a slug isn't needed any more and delete it. So
provide a tool function to cleanup unused slugs.

It's currently not hooked to any gmg function!

mediagoblin/db/sql/util.py

index 13bc97e1b45b4a94ef212a7399eeffc325aeb327..737e4e59f3ff212bc33454b6845afed32c59b886 100644 (file)
@@ -17,6 +17,7 @@
 
 import sys
 from mediagoblin.db.sql.base import Session
+from mediagoblin.db.sql.models import Tag, MediaTag
 
 
 def _simple_printer(string):
@@ -282,3 +283,24 @@ def atomic_update(table, query_dict, update_values):
     table.find(query_dict).update(update_values,
        synchronize_session=False)
     Session.commit()
+
+
+def clean_orphan_tags():
+    q1 = Session.query(Tag).outerjoin(MediaTag).filter(MediaTag.id==None)
+    for t in q1:
+        Session.delete(t)
+
+    # The "let the db do all the work" version:
+    # q1 = Session.query(Tag.id).outerjoin(MediaTag).filter(MediaTag.id==None)
+    # q2 = Session.query(Tag).filter(Tag.id.in_(q1))
+    # q2.delete(synchronize_session = False)
+
+    Session.commit()
+
+
+if __name__ == '__main__':
+    from mediagoblin.db.sql.open import setup_connection_and_db_from_config
+
+    conn,db = setup_connection_and_db_from_config({'sql_engine':'sqlite:///mediagoblin.db'})
+
+    clean_orphan_tags()