protected virtual void OnProcessWhereStringExactMemberNode(ISqlWhereCriteriaBuilder builder, StringExactMemberNode memberNode, int memberIndex) { builder.AddRaw("("); builder.AddMember(memberNode, memberIndex); builder.AddOp(new OperatorNode(Operator.Equal())); builder.AddValue(new ValueNode(memberNode.Value)); builder.Flush(); builder.AddRaw(" and "); const string castAsVarbinary = "cast({0} as varbinary(300))"; builder.AddMember(memberNode, memberIndex, castAsVarbinary); builder.AddOp(new OperatorNode(Operator.Equal())); builder.AddLastValueAgain(castAsVarbinary); builder.Flush(); builder.AddRaw(")"); }
protected virtual void OnProcessWhereMemberNode(IParsedLambda lambda, SqlExpression expression, ISqlWhereCriteriaBuilder builder, int nodeIndex, MemberNode memberNode) { var memberIndex = expression.GetExistingOrNewMemberIndexFor(memberNode.Path); if (!expression.ContainsWhereMemberFor(memberNode.Path)) expression.AddWhereMember(new SqlWhereMember( memberIndex, memberNode.Path, memberNode.DataType, memberNode.DataTypeCode)); if (memberNode is InSetMemberNode) { OnProcessWhereInSetMemberNode(builder, (InSetMemberNode)memberNode, memberIndex); return; } if (memberNode is LikeMemberNode) { OnProcessWhereLikeMemberNode(builder, (LikeMemberNode)memberNode, memberIndex); return; } if (memberNode is StringContainsMemberNode) { OnProcessWhereStringContainsMemberNode(builder, (StringContainsMemberNode)memberNode, memberIndex); return; } if (memberNode is StringExactMemberNode) { OnProcessWhereStringExactMemberNode(builder, (StringExactMemberNode)memberNode, memberIndex); return; } if (memberNode is StringEndsWithMemberNode) { OnProcessWhereStringEndsWithMemberNode(builder, (StringEndsWithMemberNode)memberNode, memberIndex); return; } if(memberNode is StringStartsWithMemberNode) { OnProccessWhereStringStartsWithMemberNode(builder, (StringStartsWithMemberNode)memberNode, memberIndex); return; } if(memberNode is ToLowerMemberNode) { OnProccessWhereToLowerMemberNode(builder, (ToLowerMemberNode)memberNode, memberIndex); return; } if (memberNode is ToUpperMemberNode) { OnProccessWhereToUpperMemberNode(builder, (ToUpperMemberNode)memberNode, memberIndex); return; } if (memberNode.DataType.IsAnyBoolType()) { var leftNode = lambda.Nodes.PeekLeft(nodeIndex); var rightNode = lambda.Nodes.PeekRight(nodeIndex); var isImplicitBoolNode = !(leftNode is OperatorNode) && !(rightNode is OperatorNode); if (isImplicitBoolNode) { OnProcessWhereImplicitBoolMemberNode(builder, memberNode, memberIndex); return; } } builder.AddMember(memberNode, memberIndex); }
protected virtual void OnProcessWhereImplicitBoolMemberNode(ISqlWhereCriteriaBuilder builder, MemberNode memberNode, int memberIndex) { builder.AddMember(memberNode, memberIndex); builder.AddOp(new OperatorNode(Operator.Equal())); builder.AddValue(new ValueNode(true)); }
protected virtual void OnProccessWhereToUpperMemberNode(ISqlWhereCriteriaBuilder builder, ToUpperMemberNode memberNode, int memberIndex) { builder.AddMember(memberNode, memberIndex, "upper({0})"); }
protected virtual void OnProccessWhereStringStartsWithMemberNode(ISqlWhereCriteriaBuilder builder, StringStartsWithMemberNode memberNode, int memberIndex) { builder.AddMember(memberNode, memberIndex); builder.AddOp(new OperatorNode(Operator.Like())); builder.AddValue(new ValueNode(string.Concat(memberNode.Value, "%"))); }
protected virtual void OnProcessWhereStringContainsMemberNode(ISqlWhereCriteriaBuilder builder, StringContainsMemberNode memberNode, int memberIndex) { builder.AddMember(memberNode, memberIndex); builder.AddOp(new OperatorNode(Operator.Like())); builder.AddValue(new ValueNode(string.Concat("%", memberNode.Value, "%").Replace("%%", "%"))); }
protected virtual void OnProcessWhereLikeMemberNode(ISqlWhereCriteriaBuilder builder, LikeMemberNode memberNode, int memberIndex) { builder.AddMember(memberNode, memberIndex); builder.AddOp(new OperatorNode(Operator.Like())); builder.AddValue(new ValueNode(memberNode.Value)); }
protected virtual void OnProcessWhereInSetMemberNode(ISqlWhereCriteriaBuilder builder, InSetMemberNode memberNode, int memberIndex) { builder.AddMember(memberNode, memberIndex); builder.AddOp(new OperatorNode(Operator.InSet())); builder.AddSetOfValues(new ArrayValueNode(memberNode.DataType, memberNode.DataTypeCode, memberNode.Values)); }
protected virtual void OnProcessWhereMemberNode(IParsedLambda lambda, SqlExpression expression, ISqlWhereCriteriaBuilder builder, int nodeIndex, MemberNode memberNode) { var memberIndex = expression.GetExistingOrNewMemberIndexFor(memberNode.Path); if (!expression.ContainsWhereMemberFor(memberNode.Path)) { expression.AddWhereMember(new SqlWhereMember( memberIndex, memberNode.Path, memberNode.DataType, memberNode.DataTypeCode)); } if (memberNode is InSetMemberNode) { OnProcessWhereInSetMemberNode(builder, (InSetMemberNode)memberNode, memberIndex); return; } if (memberNode is NotInSetMemberNode) { OnProcessWhereNotInSetMemberNode(builder, (NotInSetMemberNode)memberNode, memberIndex); return; } if (memberNode is LikeMemberNode) { OnProcessWhereLikeMemberNode(builder, (LikeMemberNode)memberNode, memberIndex); return; } if (memberNode is StringContainsMemberNode) { OnProcessWhereStringContainsMemberNode(builder, (StringContainsMemberNode)memberNode, memberIndex); return; } if (memberNode is StringExactMemberNode) { OnProcessWhereStringExactMemberNode(builder, (StringExactMemberNode)memberNode, memberIndex); return; } if (memberNode is StringEndsWithMemberNode) { OnProcessWhereStringEndsWithMemberNode(builder, (StringEndsWithMemberNode)memberNode, memberIndex); return; } if (memberNode is StringStartsWithMemberNode) { OnProccessWhereStringStartsWithMemberNode(builder, (StringStartsWithMemberNode)memberNode, memberIndex); return; } if (memberNode is ToLowerMemberNode) { OnProccessWhereToLowerMemberNode(builder, (ToLowerMemberNode)memberNode, memberIndex); return; } if (memberNode is ToUpperMemberNode) { OnProccessWhereToUpperMemberNode(builder, (ToUpperMemberNode)memberNode, memberIndex); return; } if (memberNode.DataType.IsAnyBoolType()) { var leftNode = lambda.Nodes.PeekLeft(nodeIndex); var rightNode = lambda.Nodes.PeekRight(nodeIndex); var isImplicitBoolNode = !(leftNode is OperatorNode) && !(rightNode is OperatorNode); if (isImplicitBoolNode) { OnProcessWhereImplicitBoolMemberNode(builder, memberNode, memberIndex); return; } } builder.AddMember(memberNode, memberIndex); }
protected virtual void OnProcessWhereNotInSetMemberNode(ISqlWhereCriteriaBuilder builder, NotInSetMemberNode memberNode, int memberIndex) { builder.AddMember(memberNode, memberIndex); builder.AddOp(new OperatorNode(Operator.NotInSet())); builder.AddSetOfValues(new ArrayValueNode(memberNode.DataType, memberNode.DataTypeCode, memberNode.Values)); }