@@ -188,6 +188,11 @@ class LogViewerViewModel @Inject constructor(
190 fun addFilter(column: String, operator: String, value: String) {
190 fun addFilter(column: String, operator: String, value: String) {
191+ addFilterInternal(column, operator, value)
195+ private fun addFilterInternal(column: String, operator: String, value: String) {
191 if (operator !in ALLOWED_OPERATORS) return
196 if (operator !in ALLOWED_OPERATORS) return
192 val safeColumn = escapeIdentifier(column)
197 val safeColumn = escapeIdentifier(column)
193 val safeValue = escapeSql(value)
198 val safeValue = escapeSql(value)
@@ -208,7 +213,6 @@ class LogViewerViewModel @Inject constructor(
214 fun removeFilter(display: String) {
218 fun removeFilter(display: String) {
@@ -280,7 +284,7 @@ class LogViewerViewModel @Inject constructor(
280 if (searchableColumns.isEmpty()) return null
284 if (searchableColumns.isEmpty()) return null
281 val safeSearch = escapeSql(searchQuery)
285 val safeSearch = escapeSql(searchQuery)
282 return searchableColumns.joinToString(" OR ") {
286 return searchableColumns.joinToString(" OR ") {
283− "\"${escapeIdentifier(it)}\" ILIKE '%$safeSearch%'"
287+ "CAST(\"${escapeIdentifier(it)}\" AS VARCHAR) ILIKE '%$safeSearch%'"
@@ -439,7 +443,7 @@ class LogViewerViewModel @Inject constructor(
439 if (current.filters.searchQuery.isNotBlank()) {
443 if (current.filters.searchQuery.isNotBlank()) {
440 val searchClause = buildSearchClause(current.searchableColumns, current.filters.searchQuery)
444 val searchClause = buildSearchClause(current.searchableColumns, current.filters.searchQuery)
441 if (searchClause != null) {
445 if (searchClause != null) {
442− clauses.add(searchClause)
446+ clauses.add("($searchClause)")
@@ -640,7 +644,7 @@ class LogViewerViewModel @Inject constructor(
640 for (group in builder.rules) {
644 for (group in builder.rules) {
641 for (rule in group.rules) {
645 for (rule in group.rules) {
642 if (rule.field.isNotBlank()) {
646 if (rule.field.isNotBlank()) {
643− addFilter(rule.field, rule.operator, rule.value)
647+ addFilterInternal(rule.field, rule.operator, rule.value)