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)); }
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)); } }
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)); } }
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)); } }
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)); } }
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)); } }
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)); } }
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)); }
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); } }
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)); } }