[hamster-applet] escaping apostrophe and updating index upon category change of activities



commit 75ca7bff78e988affafb308564bd45418820d454
Author: Toms Bauģis <toms baugis gmail com>
Date:   Thu Jul 22 13:30:57 2010 +0100

    escaping apostrophe and updating index upon category change of activities

 src/hamster/db.py |   35 ++++++++++++++++++++---------------
 1 files changed, 20 insertions(+), 15 deletions(-)
---
diff --git a/src/hamster/db.py b/src/hamster/db.py
index d13dc65..ce41cc3 100644
--- a/src/hamster/db.py
+++ b/src/hamster/db.py
@@ -164,6 +164,20 @@ class Storage(storage.Storage):
     def __get_categories(self):
         return self.fetchall("SELECT id, name FROM categories ORDER BY lower(name)")
 
+    def __update_activity(self, id, name, category_id):
+        query = """
+                   UPDATE activities
+                       SET name = ?,
+                           search_name = ?,
+                           category_id = ?
+                     WHERE id = ?
+        """
+        self.execute(query, (name, name.lower(), category_id, id))
+
+        affected_ids = [res[0] for res in self.fetchall("select id from facts where activity_id = ?", (id,))]
+        self.__remove_index(affected_ids)
+
+
     def __change_category(self, id, category_id):
         # first check if we don't have an activity with same name before us
         activity = self.fetchone("select name from activities where id = ?", (id, ))
@@ -194,6 +208,11 @@ class Storage(storage.Storage):
 
             self.execute(statement, (category_id, id))
 
+        affected_ids = [res[0] for res in self.fetchall("select id from facts where activity_id = ?", (id,))]
+        if existing_activity:
+            affected_ids.extend([res[0] for res in self.fetchall("select id from facts where activity_id = ?", (existing_activity['id'],))])
+        self.__remove_index(affected_ids)
+
         return True
 
     def __add_category(self, name):
@@ -624,7 +643,7 @@ class Storage(storage.Storage):
             # check if we need changes to the index
             self.__check_index(datetime_from, datetime_to)
 
-            search_terms = search_terms.replace('\\', '\\\\').replace('%', '\\%').replace('_', '\\_')
+            search_terms = search_terms.replace('\\', '\\\\').replace('%', '\\%').replace('_', '\\_').replace("'", "''")
             query += """ AND a.id in (SELECT id
                                         FROM fact_index
                                        WHERE fact_index MATCH '%s')""" % search_terms
@@ -779,20 +798,6 @@ class Storage(storage.Storage):
         self.execute(query, (name, name.lower(), category_id, deleted))
         return self.__last_insert_rowid()
 
-    def __update_activity(self, id, name, category_id):
-        query = """
-                   UPDATE activities
-                       SET name = ?,
-                           search_name = ?,
-                           category_id = ?
-                     WHERE id = ?
-        """
-        self.execute(query, (name, name.lower(), category_id, id))
-
-        affected_ids = [res[0] for res in self.fetchall("select id from facts where activity_id = ?", (id,))]
-        self.__remove_index(affected_ids)
-
-
     def __remove_index(self, ids):
         """remove affected ids from the index"""
         if not ids:



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]