44import static org .openmetadata .service .Entity .INGESTION_PIPELINE ;
55
66import com .google .gson .Gson ;
7+ import com .google .gson .JsonArray ;
8+ import com .google .gson .JsonObject ;
9+ import com .google .gson .JsonParser ;
710import java .io .IOException ;
811import java .util .ArrayList ;
912import java .util .HashMap ;
@@ -675,6 +678,43 @@ public void storeRelationships(DataInsightCustomChart entity) {
675678 // No relationships to store beyond what is stored in the super class
676679 }
677680
681+ static String combineFilters (String existingFilter , String userFilter ) {
682+ if (existingFilter == null || existingFilter .isEmpty () || existingFilter .equals ("{}" )) {
683+ return userFilter ;
684+ }
685+ if (userFilter == null || userFilter .isEmpty () || userFilter .equals ("{}" )) {
686+ return existingFilter ;
687+ }
688+ try {
689+ JsonObject existingJson = JsonParser .parseString (existingFilter ).getAsJsonObject ();
690+ JsonObject userJson = JsonParser .parseString (userFilter ).getAsJsonObject ();
691+
692+ JsonObject existingQuery = existingJson .getAsJsonObject ("query" );
693+ JsonObject userQuery = userJson .getAsJsonObject ("query" );
694+
695+ if (existingQuery == null ) return userFilter ;
696+ if (userQuery == null ) return existingFilter ;
697+
698+ JsonArray mustArray = new JsonArray ();
699+ mustArray .add (existingQuery );
700+ mustArray .add (userQuery );
701+
702+ JsonObject boolObj = new JsonObject ();
703+ boolObj .add ("must" , mustArray );
704+
705+ JsonObject combinedQuery = new JsonObject ();
706+ combinedQuery .add ("bool" , boolObj );
707+
708+ JsonObject result = new JsonObject ();
709+ result .add ("query" , combinedQuery );
710+
711+ return result .toString ();
712+ } catch (Exception e ) {
713+ LOG .warn ("Failed to combine filters, using user filter as fallback: {}" , e .getMessage ());
714+ return userFilter ;
715+ }
716+ }
717+
678718 public DataInsightCustomChartResultList getPreviewData (
679719 DataInsightCustomChart chart , long startTimestamp , long endTimestamp , String filter )
680720 throws IOException {
@@ -683,7 +723,8 @@ public DataInsightCustomChartResultList getPreviewData(
683723 if (chartDetails .get ("metrics" ) != null ) {
684724 for (LinkedHashMap <String , Object > metrics :
685725 (List <LinkedHashMap <String , Object >>) chartDetails .get ("metrics" )) {
686- metrics .put ("filter" , filter );
726+ String existingFilter = (String ) metrics .get ("filter" );
727+ metrics .put ("filter" , combineFilters (existingFilter , filter ));
687728 }
688729 }
689730 }
@@ -718,7 +759,8 @@ public Map<String, DataInsightCustomChartResultList> listChartData(
718759 if (chartDetails .get ("metrics" ) != null ) {
719760 for (LinkedHashMap <String , Object > metrics :
720761 (List <LinkedHashMap <String , Object >>) chartDetails .get ("metrics" )) {
721- metrics .put ("filter" , filter );
762+ String existingFilter = (String ) metrics .get ("filter" );
763+ metrics .put ("filter" , combineFilters (existingFilter , filter ));
722764 }
723765 }
724766 }
0 commit comments