private void ImplicitlyAndJoinsOnSameField() { object[] nodes = _nodes.ToArray(); for (int i = 0; i < nodes.Length; i++) { object node = nodes[i]; if (node is OrIndexedLeaf) { OrIndexedLeaf current = (OrIndexedLeaf)node; OrIndexedLeaf other = FindJoinOnSameFieldAtSameLevel(current); if (null != other) { nodes[Arrays4.IndexOfIdentity(nodes, other)] = null; CollectImplicitAnd(current.GetConstraint(), current, other); } } } }
private OrIndexedLeaf FindJoinOnSameFieldAtSameLevel(OrIndexedLeaf join) { IEnumerator i = _nodes.GetEnumerator(); while (i.MoveNext()) { if (i.Current == join) { continue; } if (i.Current is OrIndexedLeaf) { OrIndexedLeaf current = (OrIndexedLeaf)i.Current; if (current.GetIndex() == join.GetIndex() && ParentConstraint(current) == ParentConstraint (join)) { return current; } } } return null; }
private OrIndexedLeaf FindJoinOnSameFieldAtSameLevel(OrIndexedLeaf join) { IEnumerator i = _nodes.GetEnumerator(); while (i.MoveNext()) { if (i.Current == join) { continue; } if (i.Current is OrIndexedLeaf) { OrIndexedLeaf current = (OrIndexedLeaf)i.Current; if (current.GetIndex() == join.GetIndex() && ParentConstraint(current) == ParentConstraint (join)) { return(current); } } } return(null); }
private object ParentConstraint(OrIndexedLeaf node) { return(node.GetConstraint().Parent()); }
private object ParentConstraint(OrIndexedLeaf node) { return node.GetConstraint().Parent(); }