From 17c9ece191f0591fb7aee69ac5e44efdaff5bdd2 Mon Sep 17 00:00:00 2001 From: vishnu r kumar Date: Sat, 21 Feb 2026 14:02:27 +0530 Subject: [PATCH 1/2] fix: make odata search case insensitive --- .../server/plugins/datasource/datasource/odata_parser.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/wavefront/server/plugins/datasource/datasource/odata_parser.py b/wavefront/server/plugins/datasource/datasource/odata_parser.py index 6a911ee9..25500820 100644 --- a/wavefront/server/plugins/datasource/datasource/odata_parser.py +++ b/wavefront/server/plugins/datasource/datasource/odata_parser.py @@ -353,9 +353,9 @@ def build_comparison(self, field: str, operator: str, value: str) -> str: return f'{field} {sql_op} {self.dynamic_var_char}{param_key}' elif operator == 'in': - # Parse array values + # Parse array values, lowercase for case-insensitive matching items = value.strip('[]').split(',') - parsed_values = [v.strip().strip('\'"') for v in items] + parsed_values = [v.strip().strip('\'"').lower() for v in items] placeholder_keys = [] for idx, val in enumerate(parsed_values): @@ -363,7 +363,7 @@ def build_comparison(self, field: str, operator: str, value: str) -> str: self.params[item_key] = val placeholder_keys.append(f'{self.dynamic_var_char}{item_key}') - return f"{field} IN ({', '.join(placeholder_keys)})" + return f"LOWER({field}) IN ({', '.join(placeholder_keys)})" else: parsed_value = self.parse_value(value) From 9794c7bb3448d46dde5a0b0c6addd6694cc7c5cb Mon Sep 17 00:00:00 2001 From: vishnu r kumar Date: Sat, 21 Feb 2026 14:47:08 +0530 Subject: [PATCH 2/2] fix: update odata contains operator to be case insensitive --- .../server/plugins/datasource/datasource/odata_parser.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/wavefront/server/plugins/datasource/datasource/odata_parser.py b/wavefront/server/plugins/datasource/datasource/odata_parser.py index 25500820..fedaeb72 100644 --- a/wavefront/server/plugins/datasource/datasource/odata_parser.py +++ b/wavefront/server/plugins/datasource/datasource/odata_parser.py @@ -350,12 +350,12 @@ def build_comparison(self, field: str, operator: str, value: str) -> str: if operator == 'contains': parsed_value = self.parse_value(value) self.params[param_key] = f'%{parsed_value}%' - return f'{field} {sql_op} {self.dynamic_var_char}{param_key}' + return f'LOWER({field}) {sql_op} LOWER({self.dynamic_var_char}{param_key})' elif operator == 'in': - # Parse array values, lowercase for case-insensitive matching + # Parse array values items = value.strip('[]').split(',') - parsed_values = [v.strip().strip('\'"').lower() for v in items] + parsed_values = [v.strip().strip('\'"') for v in items] placeholder_keys = [] for idx, val in enumerate(parsed_values): @@ -363,7 +363,7 @@ def build_comparison(self, field: str, operator: str, value: str) -> str: self.params[item_key] = val placeholder_keys.append(f'{self.dynamic_var_char}{item_key}') - return f"LOWER({field}) IN ({', '.join(placeholder_keys)})" + return f"{field} IN ({', '.join(placeholder_keys)})" else: parsed_value = self.parse_value(value)