示例#1
0
        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 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 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));
 }
示例#10
0
        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);
        }
示例#11
0
 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));
 }
示例#12
0
 protected virtual void OnProccessWhereToUpperMemberNode(ISqlWhereCriteriaBuilder builder, ToUpperMemberNode memberNode, int memberIndex)
 {
     builder.AddMember(memberNode, memberIndex, "upper({0})");
 }
示例#13
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, "%")));
 }
示例#14
0
 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("%%", "%")));
 }
示例#15
0
 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));
 }
示例#16
0
 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));
 }