.
Deploy / deploy (push) Successful in 8s

This commit is contained in:
2026-05-06 12:59:55 +02:00
parent a9df8baf97
commit daf95349d2
2 changed files with 26 additions and 14 deletions
+25 -13
View File
@@ -176,24 +176,15 @@ class Repository
return [];
}
try {
if ($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
LIMIT ? OFFSET ?"
"SELECT * FROM log_entries ORDER BY created_at DESC LIMIT ? OFFSET ?"
);
$stmt->execute([$query, $limit, $offset]);
$stmt->execute([$limit, $offset]);
return $stmt->fetchAll();
} catch (\PDOException $e) {
return $this->searchLogEntriesLike($query, $limit, $offset);
}
}
private function searchLogEntriesLike(string $query, int $limit = 200, int $offset = 0): array
{
$like = '%' . str_replace(['%', '_'], ['\\%', '\\_'], $query) . '%';
$like = $this->toLikePattern($query);
$stmt = $this->db->pdo()->prepare(
"SELECT e.* FROM log_entries e
WHERE e.line LIKE ?
@@ -204,6 +195,27 @@ class Repository
return $stmt->fetchAll();
}
private function toLikePattern(string $query): string
{
$parts = preg_split('/\s+/', $query);
$likeParts = [];
foreach ($parts as $part) {
$escaped = '';
for ($i = 0; $i < strlen($part); $i++) {
$ch = $part[$i];
if ($ch === '*') {
$escaped .= '%';
} elseif ($ch === '%' || $ch === '_') {
$escaped .= '\\' . $ch;
} else {
$escaped .= $ch;
}
}
$likeParts[] = '%' . $escaped . '%';
}
return implode('%', $likeParts);
}
// --- Config ---
public function getAllowedUserTokens(): array