public INodesCollection Transform(INodesCollection nodes) { var newNodes = new NodesCollection(); var boolType = typeof (bool); for (var i = 0; i < nodes.Count; i++) { var memberNode = nodes[i] as MemberNode; if(memberNode == null || memberNode.MemberType != boolType) { newNodes.AddNode(nodes[i]); continue; } var firstNextNode = nodes.GetItemOrNullByIndex(i + 1) as OperatorNode; var secondNextNode = nodes.GetItemOrNullByIndex(i + 2) as ValueNode; var memberNodeIsPartOfCompleteBoolExpression = firstNextNode != null && secondNextNode != null && secondNextNode.Value is bool; if (memberNodeIsPartOfCompleteBoolExpression) newNodes.AddNode(memberNode); else newNodes.AddNodes(memberNode, new OperatorNode(Operator.Equal()), new ValueNode(true)); } return newNodes; }
public virtual INode[] Transform(int maxIndex, ref int index, INode node, INodesCollection orgNodes) { var nullableNode = node as NullableMemberNode; if (nullableNode == null || !nullableNode.IsForHasValueCheck) { return new[] { node } } ; if (index == maxIndex) { return new INode[] { nullableNode, new OperatorNode(Operator.IsNot()), new NullNode() } } ; var rightOperator = orgNodes.GetItemOrNullByIndex(index + 1) as OperatorNode; var rightValue = orgNodes.GetItemOrNullByIndex(index + 2) as ValueNode; if (rightOperator == null || rightValue == null) { return new INode[] { nullableNode, new OperatorNode(Operator.IsNot()), new NullNode() } } ; var operatorType = rightOperator.Operator.OperatorType; var hasValueIs = (bool)rightValue.Value; var shouldBeIsNotNullNodes = (operatorType == Operator.Types.Equal && hasValueIs) || (operatorType == Operator.Types.NotEqual && hasValueIs == false); var shouldBeIsNullNodes = (operatorType == Operator.Types.Equal && hasValueIs == false) || (operatorType == Operator.Types.Equal && hasValueIs == false); if (shouldBeIsNotNullNodes) { index += 2; return(new INode[] { nullableNode, new OperatorNode(Operator.IsNot()), new NullNode() }); } if (shouldBeIsNullNodes) { index += 2; return(new INode[] { nullableNode, new OperatorNode(Operator.Is()), new NullNode() }); } return(new[] { node }); } } }
public virtual INode[] Transform(int maxIndex, ref int index, INode node, INodesCollection orgNodes) { var memberNode = node as MemberNode; if (memberNode == null || !memberNode.DataType.IsBoolType()) return new[] { node }; var firstNextNode = orgNodes.GetItemOrNullByIndex(index + 1) as OperatorNode; var secondNextNode = orgNodes.GetItemOrNullByIndex(index + 2) as ValueNode; var memberNodeIsPartOfCompleteBoolExpression = firstNextNode != null && secondNextNode != null && secondNextNode.Value is bool; return memberNodeIsPartOfCompleteBoolExpression ? new[] { memberNode } : new INode[] { memberNode, new OperatorNode(Operator.Equal()), new ValueNode(true) }; }
public virtual INode[] Transform(int maxIndex, ref int index, INode node, INodesCollection orgNodes) { var nullableNode = node as NullableMemberNode; if (nullableNode == null || !nullableNode.IsForHasValueCheck) return new[] { node }; if (index == maxIndex) return new INode[] { nullableNode, new OperatorNode(Operator.IsNot()), new NullNode() }; var rightOperator = orgNodes.GetItemOrNullByIndex(index + 1) as OperatorNode; var rightValue = orgNodes.GetItemOrNullByIndex(index + 2) as ValueNode; if (rightOperator == null || rightValue == null) return new INode[] { nullableNode, new OperatorNode(Operator.IsNot()), new NullNode() }; var operatorType = rightOperator.Operator.OperatorType; var hasValueIs = (bool)rightValue.Value; var shouldBeIsNotNullNodes = (operatorType == Operator.Types.Equal && hasValueIs) || (operatorType == Operator.Types.NotEqual && hasValueIs == false); var shouldBeIsNullNodes = (operatorType == Operator.Types.Equal && hasValueIs == false) || (operatorType == Operator.Types.Equal && hasValueIs == false); if (shouldBeIsNotNullNodes) { index += 2; return new INode[] { nullableNode, new OperatorNode(Operator.IsNot()), new NullNode() }; } if (shouldBeIsNullNodes) { index += 2; return new INode[] { nullableNode, new OperatorNode(Operator.Is()), new NullNode() }; } return new[] { node }; }
public virtual INode[] Transform(int maxIndex, ref int index, INode node, INodesCollection orgNodes) { var memberNode = node as MemberNode; if (memberNode == null || !memberNode.DataType.IsBoolType()) { return new[] { node } } ; var firstNextNode = orgNodes.GetItemOrNullByIndex(index + 1) as OperatorNode; var secondNextNode = orgNodes.GetItemOrNullByIndex(index + 2) as ValueNode; var memberNodeIsPartOfCompleteBoolExpression = firstNextNode != null && secondNextNode != null && secondNextNode.Value is bool; return(memberNodeIsPartOfCompleteBoolExpression ? new[] { memberNode } : new INode[] { memberNode, new OperatorNode(Operator.Equal()), new ValueNode(true) }); } }