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); }
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); } } } }
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); }
public void EscapeUnterminatedBracket(string testString, string expectedResult) { Assert.AreEqual(expectedResult, DataTools.EscapeUnterminatedBracket(testString)); }
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); }