public static QueryGroupNode operator |(QueryNode node1, QueryNode node2) { QueryGroupNode res = new QueryGroupNode(GroupType.Or); res.Nodes.Add(node1); res.Nodes.Add(node2); return res; }
public static QueryGroupNode operator &(QueryGroupNode node1, QueryNode node2) { if (node1.Group == GroupType.And) { node1.Nodes.Add(node2); return node1; } QueryGroupNode res = new QueryGroupNode(GroupType.And); res.Nodes.Add(node1); res.Nodes.Add(node2); return res; }
private QueryNode SetQueryResult(QueryNode qn) { if (qn is QueryConditionNode) { var resultData = LocalStorage.Get(new Query { Condition = qn }); if (resultData != null) { resultData = resultData.Select(r => new OverlayData(r) { ResponsibleNode = Node }).ToArray(); } else { resultData = new OverlayData[0]; } return new QueryConditionNodeResult(qn) { ResultData = resultData, IsExecutedByResponsibleNode = (Node.Equals((qn as QueryConditionNode).ResponsibleNode)) }; } else if (qn is QueryGroupNode) { var qng = qn as QueryGroupNode; QueryGroupNode result = new QueryGroupNode(qng.Group); foreach (var innerQn in qng.Nodes) { result.Nodes.Add(SetQueryResult(innerQn)); } return result; } else { throw new NotImplementedException(); } }
protected QueryGroupNode ComposeGroupNode(QueryNode node1, QueryNode node2, GroupType groupType) { QueryGroupNode group1 = node1 as QueryGroupNode, group2 = node2 as QueryGroupNode; if (group1 != null && group1.Group != groupType) group1 = null; if (group2 != null && group2.Group != groupType) group2 = null; // don't corrupt named groups //if (group1 != null && group1.Name != null || group2 != null && group2.Name != null) // group1 = group2 = null; if (group1 == null) { if (group2 == null) { QueryGroupNode group = new QueryGroupNode(groupType); group.Nodes.Add(node1); group.Nodes.Add(node2); return group; } else { group2.Nodes.Insert(0, node1); return group2; } } else { if (group2 == null) group1.Nodes.Add(node2); else foreach (QueryNode qn in group2.Nodes) group1.Nodes.Add(qn); return group1; } }