コード例 #1
0
        private ICriterion CreateLikeCriterion(Expression projectionExpression, Expression literalExpression, MatchMode matchMode)
        {
            var projection = ProjectionVisitor.CreateProjection(projectionExpression);
            var value      = LiteralUtil.CoerceString((LiteralExpression)literalExpression);

            return(_context.CaseSensitiveLike ? Restrictions.Like(projection, value, matchMode) : Restrictions.InsensitiveLike(projection, value, matchMode));
        }
コード例 #2
0
        public Expression ConcatMethod(ConcatMethod method, LiteralExpression[] arguments)
        {
            if (arguments.Length == 1)
            {
                return(arguments[0]);
            }
            else if (arguments[0].LiteralType == LiteralType.Null)
            {
                if (arguments[1].LiteralType == LiteralType.Null)
                {
                    return(new LiteralExpression(null, LiteralType.Null));
                }
                else
                {
                    return(arguments[1]);
                }
            }
            else if (arguments[1].LiteralType == LiteralType.Null)
            {
                return(arguments[0]);
            }
            else
            {
                string result =
                    LiteralUtil.CoerceString(arguments[0]) +
                    LiteralUtil.CoerceString(arguments[1]);

                return(new LiteralExpression(result, LiteralType.String));
            }
        }
コード例 #3
0
        public Expression IndexOfMethod(IndexOfMethod method, LiteralExpression[] arguments)
        {
            int result;

            if (LiteralUtil.IsAnyNull(arguments))
            {
                result = -1;
            }
            else
            {
                result = LiteralUtil.CoerceString(arguments[0]).IndexOf(
                    LiteralUtil.CoerceString(arguments[1]),
                    StringComparison.InvariantCultureIgnoreCase
                    );
            }

            if (result == -1)
            {
                return(new LiteralExpression(null, LiteralType.Null));
            }
            else
            {
                return(new LiteralExpression(result + 1, LiteralType.Int));
            }
        }
コード例 #4
0
        public Expression SubStringOfMethod(SubStringOfMethod method, LiteralExpression[] arguments)
        {
            if (arguments.Length == 1)
            {
                return(arguments[0]);
            }
            else
            {
                bool result;

                if (LiteralUtil.IsAnyNull(arguments))
                {
                    result = false;
                }
                else
                {
                    result = LiteralUtil.CoerceString(arguments[1]).IndexOf(
                        LiteralUtil.CoerceString(arguments[0]),
                        StringComparison.InvariantCultureIgnoreCase
                        ) != -1;
                }

                return(new LiteralExpression(result, LiteralType.Boolean));
            }
        }
コード例 #5
0
        public Expression LengthMethod(LengthMethod method, LiteralExpression[] arguments)
        {
            if (LiteralUtil.IsAnyNull(arguments))
            {
                return(new LiteralExpression(null, LiteralType.Null));
            }
            else
            {
                int result = LiteralUtil.CoerceString(arguments[0]).Length;

                return(new LiteralExpression(result, LiteralType.Int));
            }
        }
コード例 #6
0
        public Expression TrimMethod(TrimMethod method, LiteralExpression[] arguments)
        {
            if (LiteralUtil.IsAnyNull(arguments))
            {
                return(new LiteralExpression(null, LiteralType.Null));
            }
            else
            {
                string result = LiteralUtil.CoerceString(arguments[0]).Trim();

                return(new LiteralExpression(result, LiteralType.String));
            }
        }
コード例 #7
0
        public Expression ReplaceMethod(ReplaceMethod method, LiteralExpression[] arguments)
        {
            if (LiteralUtil.IsAnyNull(arguments))
            {
                return(new LiteralExpression(null, LiteralType.Null));
            }
            else
            {
                string result = LiteralUtil.CoerceString(arguments[0]).Replace(
                    LiteralUtil.CoerceString(arguments[1]),
                    LiteralUtil.CoerceString(arguments[2])
                    );

                return(new LiteralExpression(result, LiteralType.String));
            }
        }
コード例 #8
0
        public Expression EndsWithMethod(EndsWithMethod method, LiteralExpression[] arguments)
        {
            bool result;

            if (LiteralUtil.IsAnyNull(arguments))
            {
                result = false;
            }
            else
            {
                result = LiteralUtil.CoerceString(arguments[0]).EndsWith(
                    LiteralUtil.CoerceString(arguments[1]),
                    StringComparison.InvariantCultureIgnoreCase
                    );
            }

            return(new LiteralExpression(result, LiteralType.Boolean));
        }
コード例 #9
0
        public override IProjection CastMethod(CastMethod method, Expression[] arguments)
        {
            var projection = ProjectionVisitor.CreateProjection(arguments[0]);

            switch (LiteralUtil.CoerceString((LiteralExpression)arguments[1]))
            {
            case "Edm.Byte":
            case "Edm.SByte":
            case "Edm.Int16":
            case "Edm.Int32":
                return(new SqlFunctionProjection("round", NHibernateUtil.Int32, projection));

            case "Edm.Int64":
                return(new SqlFunctionProjection("round", NHibernateUtil.Int64, projection));

            default:
                return(projection);
            }
        }
コード例 #10
0
        public Expression SubStringMethod(SubStringMethod method, LiteralExpression[] arguments)
        {
            if (arguments[0].LiteralType == LiteralType.Null)
            {
                return(arguments[0]);
            }
            else
            {
                int    startIndex;
                int    length;
                string result;

                if (!LiteralUtil.TryCoerceInt(arguments[1], out startIndex))
                {
                    throw new ODataException(String.Format(
                                                 ErrorMessages.Method_InvalidArgumentType,
                                                 method.MethodType, 2, "Edm.Int32"
                                                 ));
                }

                if (arguments.Length == 3)
                {
                    if (!LiteralUtil.TryCoerceInt(arguments[2], out length))
                    {
                        throw new ODataException(String.Format(
                                                     ErrorMessages.Method_InvalidArgumentType,
                                                     method.MethodType, 3, "Edm.Int32"
                                                     ));
                    }

                    result = LiteralUtil.CoerceString(arguments[0]).Substring(startIndex - 1, length);
                }
                else
                {
                    result = LiteralUtil.CoerceString(arguments[0]).Substring(startIndex - 1);
                }

                return(new LiteralExpression(result, LiteralType.String));
            }
        }