public void TestBooleanExpressionLike() { //Initialize var table = new ResultTable(); var col = new ResultColumnHeader("TextColumn", typeof(string)); col.Expression = new ColumnRef("TextColumn"); table.Columns.Add(col); var like = new BooleanLike(); var row1 = table.NewRow(); row1.Add(new object[] { "%%ABCDEFG" }); //Escape character test like = new BooleanLike(new ColumnRef("TextColumn"), new StringConstant("!%!%%"), '!'); Assert.Equal(true, like.Eval(row1)); //Leading percent test like = new BooleanLike(new ColumnRef("TextColumn"), new StringConstant("%EFG")); Assert.Equal(true, like.Eval(row1)); //Trailing percent test like = new BooleanLike(new ColumnRef("TextColumn"), new StringConstant("!%!%ABC%"), '!'); Assert.Equal(true, like.Eval(row1)); //Middle percent test like = new BooleanLike(new ColumnRef("TextColumn"), new StringConstant("!%!%ABC%EFG"), '!'); Assert.Equal(true, like.Eval(row1)); //Leading underscore test like = new BooleanLike(new ColumnRef("TextColumn"), new StringConstant("_!%ABCDEFG"), '!'); Assert.Equal(true, like.Eval(row1)); //Trailing underscore test like = new BooleanLike(new ColumnRef("TextColumn"), new StringConstant("!%!%ABCDEF_"), '!'); Assert.Equal(true, like.Eval(row1)); //Middle underscore test like = new BooleanLike(new ColumnRef("TextColumn"), new StringConstant("!%!%ABC_EFG"), '!'); Assert.Equal(true, like.Eval(row1)); //Mixed wild card test like = new BooleanLike(new ColumnRef("TextColumn"), new StringConstant("__ABCD%_")); Assert.Equal(true, like.Eval(row1)); //Case insensitive test like = new BooleanLike(new ColumnRef("TextColumn"), new StringConstant("___bcd%_")); Assert.Equal(true, like.Eval(row1)); //Invalid escape character test like = new BooleanLike(new ColumnRef("TextColumn"), new StringConstant("!%!%!ABCDEF!G!")); Assert.Equal(false, like.Eval(row1)); //Null escape character test like = new BooleanLike(new ColumnRef("TextColumn"), new StringConstant("\\%\\%ABCDEFG"), null); Assert.Equal(true, like.Eval(row1)); }
public override object VisitLikePredicate([NotNull] PostgresParser.LikePredicateContext context) { var res = new BooleanLike(); res.Column = (ColumnRef)Visit(context.predicate()[0]); res.SearchValue = (ConstantContainer)Visit(context.predicate()[1]); if (context.NOT() != null) res.NOT = true; if (context.stringLiteral() != null) res.EscapeChar = ((StringConstant)Visit(context.stringLiteral())).strvalue[0]; return res; }