This commit is contained in:
2026-04-27 15:56:25 +02:00
parent 7fb709811c
commit b23a1de6f3
2 changed files with 88 additions and 12 deletions

View File

@@ -245,21 +245,34 @@ def add_memory(content, kind="note", subject="", client_name="", project_name=""
def search_memory(query="", limit=12):
query = clean_text(query)
like = f"%{query}%"
search_long_text = int(len(query) > 4)
with connect() as db:
if query:
clients = db.execute(
"SELECT * FROM clients WHERE name LIKE ? OR notes LIKE ? ORDER BY updated_at DESC LIMIT ?",
(like, like, limit),
"""
SELECT * FROM clients
WHERE name LIKE ? OR (? = 1 AND notes LIKE ?)
ORDER BY
CASE WHEN name = ? COLLATE NOCASE THEN 0 ELSE 1 END,
updated_at DESC
LIMIT ?
""",
(like, search_long_text, like, query, limit),
).fetchall()
projects = db.execute(
"""
SELECT p.*, c.name AS client_name
FROM projects p
LEFT JOIN clients c ON c.id = p.client_id
WHERE p.name LIKE ? OR p.summary LIKE ? OR p.next_action LIKE ? OR c.name LIKE ?
ORDER BY p.updated_at DESC LIMIT ?
WHERE p.name LIKE ?
OR c.name LIKE ?
OR (? = 1 AND (p.summary LIKE ? OR p.next_action LIKE ?))
ORDER BY
CASE WHEN p.name = ? COLLATE NOCASE OR c.name = ? COLLATE NOCASE THEN 0 ELSE 1 END,
p.updated_at DESC
LIMIT ?
""",
(like, like, like, like, limit),
(like, like, search_long_text, like, like, query, query, limit),
).fetchall()
tasks = db.execute(
"""
@@ -268,9 +281,12 @@ def search_memory(query="", limit=12):
LEFT JOIN clients c ON c.id = t.client_id
LEFT JOIN projects p ON p.id = t.project_id
WHERE t.done = 0 AND (t.title LIKE ? OR t.details LIKE ? OR c.name LIKE ? OR p.name LIKE ?)
ORDER BY t.created_at DESC LIMIT ?
ORDER BY
CASE WHEN c.name = ? COLLATE NOCASE OR p.name = ? COLLATE NOCASE THEN 0 ELSE 1 END,
t.created_at DESC
LIMIT ?
""",
(like, like, like, like, limit),
(like, like, like, like, query, query, limit),
).fetchall()
repos = db.execute(
"""
@@ -278,9 +294,12 @@ def search_memory(query="", limit=12):
FROM repositories r
LEFT JOIN projects p ON p.id = r.project_id
WHERE r.name LIKE ? OR r.local_path LIKE ? OR r.remote_url LIKE ? OR p.name LIKE ?
ORDER BY r.updated_at DESC LIMIT ?
ORDER BY
CASE WHEN r.name = ? COLLATE NOCASE OR p.name = ? COLLATE NOCASE THEN 0 ELSE 1 END,
r.updated_at DESC
LIMIT ?
""",
(like, like, like, like, limit),
(like, like, like, like, query, query, limit),
).fetchall()
notes = db.execute(
"""
@@ -288,10 +307,12 @@ def search_memory(query="", limit=12):
FROM memories m
LEFT JOIN clients c ON c.id = m.client_id
LEFT JOIN projects p ON p.id = m.project_id
WHERE m.subject LIKE ? OR m.content LIKE ? OR c.name LIKE ? OR p.name LIKE ?
WHERE c.name LIKE ?
OR p.name LIKE ?
OR (? = 1 AND (m.subject LIKE ? OR m.content LIKE ?))
ORDER BY m.created_at DESC LIMIT ?
""",
(like, like, like, like, limit),
(like, like, search_long_text, like, like, limit),
).fetchall()
else:
clients = db.execute("SELECT * FROM clients ORDER BY updated_at DESC LIMIT ?", (limit,)).fetchall()