Example #1
0
        protected override void BuildLikePredicate(SqlPredicate.Like predicate)
        {
            if (predicate.Expr2 is SqlValue)
            {
                var value = ((SqlValue)predicate.Expr2).Value;

                if (value != null)
                {
                    var text  = ((SqlValue)predicate.Expr2).Value.ToString();
                    var ntext = predicate.IsSqlLike ? text :  DataTools.EscapeUnterminatedBracket(text);

                    if (text != ntext)
                    {
                        predicate = new SqlPredicate.Like(predicate.Expr1, predicate.IsNot, new SqlValue(ntext), predicate.Escape, predicate.IsSqlLike);
                    }
                }
            }
            else if (predicate.Expr2 is SqlParameter)
            {
                var p = ((SqlParameter)predicate.Expr2);
                p.ReplaceLike = predicate.IsSqlLike != true;
            }

            base.BuildLikePredicate(predicate);
        }
Example #2
0
        protected override void BuildLikePredicate(SqlPredicate.Like predicate)
        {
            if (predicate.Expr2 is SqlValue sqlValue)
            {
                var value = sqlValue.Value;

                if (value != null)
                {
                    var text = value.ToString() !;

                    var ntext = predicate.IsSqlLike ? text : DataTools.EscapeUnterminatedBracket(text);

                    if (text != ntext)
                    {
                        predicate = new SqlPredicate.Like(predicate.Expr1, predicate.IsNot, new SqlValue(ntext), predicate.Escape, predicate.IsSqlLike);
                    }
                }
            }
            else if (predicate.Expr2 is SqlParameter p)
            {
                p.ReplaceLike = predicate.IsSqlLike != true;
            }

            if (predicate.Escape != null)
            {
                if (predicate.Expr2 is SqlValue escSqlValue && predicate.Escape is SqlValue escapeValue)
                {
                    var value = escSqlValue.Value;

                    if (value != null)
                    {
                        var text = value.ToString() !;
                        var val  = new SqlValue(ReescapeLikeText(text, (char)escapeValue.Value !));

                        predicate = new SqlPredicate.Like(predicate.Expr1, predicate.IsNot, val, null, predicate.IsSqlLike);
                    }
                }
                else if (predicate.Expr2 is SqlParameter p)
                {
                    if (p.LikeStart != null)
                    {
                        var value = (string?)p.Value;

                        if (value != null)
                        {
                            value = (predicate.IsSqlLike ? value : DataTools.EscapeUnterminatedBracket(value) !)
                                    .Replace("~%", "[%]").Replace("~_", "[_]").Replace("~~", "[~]");
                            p = new SqlParameter(p.Type, p.Name, value)
                            {
                                IsQueryParameter = p.IsQueryParameter
                            };
                            predicate = new SqlPredicate.Like(predicate.Expr1, predicate.IsNot, p, null, predicate.IsSqlLike);
                        }
                    }
                }
            }
Example #3
0
        protected override string EscapeLikePattern(string str)
        {
            var newStr = DataTools.EscapeUnterminatedBracket(str);

            if (newStr == str)
            {
                newStr = newStr.Replace("[", "[[]");
            }

            foreach (var s in LikeCharactersToEscape)
            {
                newStr = newStr.Replace(s, "[" + s + "]");
            }

            return(newStr);
        }
Example #4
0
 public void EscapeUnterminatedBracket(string testString, string expectedResult)
 {
     Assert.AreEqual(expectedResult, DataTools.EscapeUnterminatedBracket(testString));
 }
Example #5
0
        protected override void BuildLikePredicate(SqlPredicate.Like predicate)
        {
            if (predicate.Expr2 is SqlValue)
            {
                var value = ((SqlValue)predicate.Expr2).Value;

                if (value != null)
                {
                    var text = ((SqlValue)predicate.Expr2).Value.ToString();

                    var ntext = predicate.IsSqlLike ? text : DataTools.EscapeUnterminatedBracket(text);

                    if (text != ntext)
                    {
                        predicate = new SqlPredicate.Like(predicate.Expr1, predicate.IsNot, new SqlValue(ntext), predicate.Escape, predicate.IsSqlLike);
                    }
                }
            }
            else if (predicate.Expr2 is SqlParameter)
            {
                var p = ((SqlParameter)predicate.Expr2);
                p.ReplaceLike = predicate.IsSqlLike != true;
            }

            if (predicate.Escape != null)
            {
                if (predicate.Expr2 is SqlValue && predicate.Escape is SqlValue)
                {
                    var value = ((SqlValue)predicate.Expr2).Value;

                    if (value != null)
                    {
                        var text = ((SqlValue)predicate.Expr2).Value.ToString();
                        var val  = new SqlValue(ReescapeLikeText(text, (char)((SqlValue)predicate.Escape).Value));

                        predicate = new SqlPredicate.Like(predicate.Expr1, predicate.IsNot, val, null, predicate.IsSqlLike);
                    }
                }
                else if (predicate.Expr2 is SqlParameter)
                {
                    var p = (SqlParameter)predicate.Expr2;

                    if (p.LikeStart != null)
                    {
                        var value = (string)p.Value;

                        if (value != null)
                        {
                            value = (predicate.IsSqlLike ? value : DataTools.EscapeUnterminatedBracket(value))
                                    .Replace("~%", "[%]").Replace("~_", "[_]").Replace("~~", "[~]");
                            p = new SqlParameter(p.SystemType, p.Name, value)
                            {
                                DbSize = p.DbSize, DataType = p.DataType, IsQueryParameter = p.IsQueryParameter, DbType = p.DbType
                            };
                            predicate = new SqlPredicate.Like(predicate.Expr1, predicate.IsNot, p, null, predicate.IsSqlLike);
                        }
                    }
                }
            }

            base.BuildLikePredicate(predicate);
        }