Skip to content

Commit 8c98baf

Browse files
committed
// commit
1 parent ac638e3 commit 8c98baf

1 file changed

Lines changed: 54 additions & 37 deletions

File tree

Xml/Processor/XmlScriptProcessor.cs

Lines changed: 54 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -885,56 +885,73 @@ private static void GenerateSelections_QueryGroup(queryGroup queryGroup, ref Dic
885885
return;
886886

887887
var prefix = string.IsNullOrEmpty(queryGroup.prefix) ? string.Empty : queryGroup.prefix;
888+
var qs = new List<query>(queryGroup.query);
888889

889890
// Erzeuge erste Abfrage
890-
var qs = new List<query>(queryGroup.query);
891-
var selections = GenerateSelections_Compile(all, $"{prefix}{qs[0].Text.CleanXmlValue()}", qs[0].name);
892-
var merged = selections == null ? new Dictionary<Guid, HashSet<Guid>>() : selections.JoinToDictionary();
891+
Dictionary<Guid, HashSet<Guid>> merged;
892+
Selection[] selections;
893+
894+
try
895+
{
896+
selections = GenerateSelections_Compile(all, $"{prefix}{qs[0].Text.CleanXmlValue()}", qs[0].name);
897+
merged = selections == null ? new Dictionary<Guid, HashSet<Guid>>() : selections.JoinToDictionary();
898+
}
899+
catch
900+
{
901+
merged = new Dictionary<Guid, HashSet<Guid>>();
902+
}
893903

894904
qs.RemoveAt(0); // Entferne erste Abfrage aus der Liste
895905

896906
// Führe alle Folgeabfragen aus.
897907
foreach (var query in qs)
898908
{
899-
selections = GenerateSelections_Compile(all, $"{prefix}{query.Text.CleanXmlValue()}", "");
900-
var temp = selections == null ? new Dictionary<Guid, HashSet<Guid>>() : selections.JoinToDictionary();
901-
902-
switch (queryGroup.@operator)
909+
try
903910
{
904-
default:
905-
// ReSharper disable once RedundantCaseLabel
906-
case "and": // Ergebnisse müssen mit allen Abfragen übereinstimmen
907-
if (temp.Count == 0)
908-
{
909-
merged.Clear();
910-
break;
911-
}
912-
var csels = merged.Keys.ToArray();
913-
foreach (var csel in csels)
914-
{
915-
if (!temp.ContainsKey(csel))
911+
selections = GenerateSelections_Compile(all, $"{prefix}{query.Text.CleanXmlValue()}", "");
912+
var temp = selections == null ? new Dictionary<Guid, HashSet<Guid>>() : selections.JoinToDictionary();
913+
914+
switch (queryGroup.@operator)
915+
{
916+
default: // "and": // Ergebnisse müssen mit allen Abfragen übereinstimmen
917+
if (temp.Count == 0)
916918
{
917-
merged.Remove(csel);
918-
continue;
919+
merged.Clear();
920+
break;
919921
}
922+
var csels = merged.Keys.ToArray();
923+
foreach (var csel in csels)
924+
{
925+
if (!temp.ContainsKey(csel))
926+
{
927+
merged.Remove(csel);
928+
continue;
929+
}
920930

921-
var dsels = merged[csel];
922-
foreach (var dsel in dsels.Where(dsel => !temp.ContainsKey(dsel)))
923-
merged[csel].Remove(dsel);
924-
}
925-
926-
break;
927-
case "or": // Ergebnis trifft auf die erste oder eine Folgeabfrage zu
928-
foreach (var csel in temp)
929-
{
930-
if (!merged.ContainsKey(csel.Key))
931-
merged.Add(csel.Key, new HashSet<Guid>());
932-
foreach (var dsel in csel.Value)
933-
if (!merged[csel.Key].Contains(dsel))
934-
merged[csel.Key].Add(dsel);
935-
}
931+
var dsels = merged[csel];
932+
foreach (var dsel in dsels.Where(dsel => !temp.ContainsKey(dsel)))
933+
merged[csel].Remove(dsel);
934+
}
935+
break;
936+
case "or": // Ergebnis trifft auf die erste oder eine Folgeabfrage zu
937+
foreach (var csel in temp)
938+
{
939+
if (!merged.ContainsKey(csel.Key))
940+
merged.Add(csel.Key, new HashSet<Guid>());
941+
foreach (var dsel in csel.Value)
942+
if (!merged[csel.Key].Contains(dsel))
943+
merged[csel.Key].Add(dsel);
944+
}
945+
break;
946+
}
947+
}
948+
catch
949+
{
950+
if (queryGroup.@operator != "and")
951+
continue;
936952

937-
break;
953+
merged.Clear();
954+
break;
938955
}
939956
}
940957

0 commit comments

Comments
 (0)