X-Git-Url: https://git.openstreetmap.org./osqa.git/blobdiff_plain/b3db8513b5d79ecc2b870c8dfaacb44aba3e1083..cbe73973da74989e11e3bb3a75f6c14cbabb3064:/forum_modules/pgfulltext/handlers.py?ds=sidebyside diff --git a/forum_modules/pgfulltext/handlers.py b/forum_modules/pgfulltext/handlers.py index 18a23e3..780bfa9 100644 --- a/forum_modules/pgfulltext/handlers.py +++ b/forum_modules/pgfulltext/handlers.py @@ -1,17 +1,18 @@ import re +from django.db import connection, transaction from django.db.models import Q from forum.models.question import Question, QuestionManager -from forum.modules.decorators import decorate +from forum.models.node import Node +from forum.modules import decorate -repl_re = re.compile(r"^'|[^\'\-_\s\w]|'$", re.UNICODE) -sing_quote_re = re.compile(r"\'+") +word_re = re.compile(r'\w+', re.UNICODE) @decorate(QuestionManager.search, needs_origin=False) def question_search(self, keywords): - tsquery = " | ".join([k for k in repl_re.sub('', sing_quote_re.sub("'", keywords.strip())).split(' ') if k]) + tsquery = " | ".join(word_re.findall(keywords)) ilike = keywords + u"%%" - return self.extra( + return True, self.extra( tables = ['forum_rootnode_doc'], select={ 'ranking': """ @@ -24,6 +25,14 @@ def question_search(self, keywords): """], params=[tsquery, ilike], select_params=[tsquery], - order_by=['-ranking'] ) + +@decorate(Node.delete) +def delete(origin, self, *args, **kwargs): + cursor = connection.cursor() + cursor.execute("DELETE FROM forum_rootnode_doc WHERE node_id = %s" % (self.id)) + transaction.commit_unless_managed() + return origin(self, *args, **kwargs) + +