@@ -171,14 +171,34 @@ class Repository
|
||||
|
||||
public function searchLogEntries(string $query, int $limit = 200, int $offset = 0): array
|
||||
{
|
||||
try {
|
||||
$stmt = $this->db->pdo()->prepare(
|
||||
"SELECT e.* FROM log_entries e
|
||||
JOIN log_entries_fts fts ON e.id = fts.rowid
|
||||
WHERE log_entries_fts MATCH ?
|
||||
ORDER BY rank
|
||||
LIMIT ? OFFSET ?"
|
||||
);
|
||||
$stmt->execute([$query, $limit, $offset]);
|
||||
return $stmt->fetchAll();
|
||||
} catch (\PDOException $e) {
|
||||
if (str_contains($e->getMessage(), 'fts5: syntax error')) {
|
||||
return $this->searchLogEntriesLike($query, $limit, $offset);
|
||||
}
|
||||
throw $e;
|
||||
}
|
||||
}
|
||||
|
||||
private function searchLogEntriesLike(string $query, int $limit = 200, int $offset = 0): array
|
||||
{
|
||||
$like = '%' . str_replace(['%', '_'], ['\\%', '\\_'], $query) . '%';
|
||||
$stmt = $this->db->pdo()->prepare(
|
||||
"SELECT e.* FROM log_entries e
|
||||
JOIN log_entries_fts fts ON e.id = fts.rowid
|
||||
WHERE log_entries_fts MATCH ?
|
||||
ORDER BY rank
|
||||
WHERE e.line LIKE ?
|
||||
ORDER BY e.created_at DESC
|
||||
LIMIT ? OFFSET ?"
|
||||
);
|
||||
$stmt->execute([$query, $limit, $offset]);
|
||||
$stmt->execute([$like, $limit, $offset]);
|
||||
return $stmt->fetchAll();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user