@@ -188,6 +188,11 @@ class LogViewerViewModel @Inject constructor(
188188 }
189189
190190 fun addFilter(column: String, operator: String, value: String) {
191+ addFilterInternal(column, operator, value)
192+ refresh()
193+ }
194+
195+ private fun addFilterInternal(column: String, operator: String, value: String) {
191196 if (operator !in ALLOWED_OPERATORS) return
192197 val safeColumn = escapeIdentifier(column)
193198 val safeValue = escapeSql(value)
@@ -208,7 +213,6 @@ class LogViewerViewModel @Inject constructor(
208213 ),
209214 )
210215 }
211− refresh()
212216 }
213217
214218 fun removeFilter(display: String) {
@@ -280,7 +284,7 @@ class LogViewerViewModel @Inject constructor(
280284 if (searchableColumns.isEmpty()) return null
281285 val safeSearch = escapeSql(searchQuery)
282286 return searchableColumns.joinToString(" OR ") {
283− "\"${escapeIdentifier(it)}\" ILIKE '%$safeSearch%'"
287+ "CAST(\"${escapeIdentifier(it)}\" AS VARCHAR) ILIKE '%$safeSearch%'"
284288 }
285289 }
286290
@@ -439,7 +443,7 @@ class LogViewerViewModel @Inject constructor(
439443 if (current.filters.searchQuery.isNotBlank()) {
440444 val searchClause = buildSearchClause(current.searchableColumns, current.filters.searchQuery)
441445 if (searchClause != null) {
442− clauses.add(searchClause)
446+ clauses.add("($searchClause)")
443447 }
444448 }
445449
@@ -640,7 +644,7 @@ class LogViewerViewModel @Inject constructor(
640644 for (group in builder.rules) {
641645 for (rule in group.rules) {
642646 if (rule.field.isNotBlank()) {
643− addFilter(rule.field, rule.operator, rule.value)
647+ addFilterInternal(rule.field, rule.operator, rule.value)
644648 }
645649 }
646650 }