2222import org .apache .paimon .data .GenericRow ;
2323import org .apache .paimon .format .SimpleColStats ;
2424import org .apache .paimon .types .CharType ;
25+ import org .apache .paimon .types .DataTypes ;
2526import org .apache .paimon .types .IntType ;
2627import org .apache .paimon .types .RowType ;
2728import org .apache .paimon .types .VarCharType ;
3132import java .util .ArrayList ;
3233import java .util .Arrays ;
3334import java .util .List ;
35+ import java .util .concurrent .ThreadLocalRandom ;
3436
3537import static org .apache .paimon .data .BinaryString .fromString ;
3638import static org .apache .paimon .predicate .SimpleColStatsTestUtils .test ;
@@ -522,25 +524,27 @@ public void testLargeNotInNull() {
522524 }
523525
524526 @ Test
525- public void testLike () {
527+ public void executeLike () {
526528 // test eval
527- assertThat (testLike ("abc" , "a.c" )).isEqualTo (false );
528- assertThat (testLike ("a.c" , "a.c" )).isEqualTo (true );
529- assertThat (testLike ("abcd" , "a.*d" )).isEqualTo (false );
530- assertThat (testLike ("abcde" , "%c.e" )).isEqualTo (false );
531- assertThat (testLike ("a-c" , "a\\ _c" )).isEqualTo (false );
532- assertThat (testLike ("a_c" , "a\\ _c" )).isEqualTo (true );
533- assertThat (testLike ("startX" , "start%" )).isEqualTo (true );
534- assertThat (testLike ("not_startX" , "start%" )).isEqualTo (false );
535- assertThat (testLike ("xxmiddleyy" , "%middle%" )).isEqualTo (true );
536- assertThat (testLike ("xxmidxdleyy" , "%middle%" )).isEqualTo (false );
537- assertThat (testLike ("xxend" , "%end" )).isEqualTo (true );
538- assertThat (testLike ("xxendyy" , "%end" )).isEqualTo (false );
539- assertThat (testLike ("equal" , "equal" )).isEqualTo (true );
540- assertThat (testLike ("equalxx" , "equal" )).isEqualTo (false );
541- assertThat (testLike ("startxx" , "st_rt%" )).isEqualTo (true );
542- assertThat (testLike ("stbrtxx" , "st_rt%" )).isEqualTo (true );
543- assertThat (testLike ("xxstbrtxx" , "st_rt%" )).isEqualTo (false );
529+ assertThat (executeLike ("abc" , "a.c" )).isEqualTo (false );
530+ assertThat (executeLike ("a.c" , "a.c" )).isEqualTo (true );
531+ assertThat (executeLike ("abcd" , "a.*d" )).isEqualTo (false );
532+ assertThat (executeLike ("abcde" , "%c.e" )).isEqualTo (false );
533+ assertThat (executeLike ("a-c" , "a\\ _c" )).isEqualTo (false );
534+ assertThat (executeLike ("a_c" , "a\\ _c" )).isEqualTo (true );
535+ assertThat (executeLike ("startX" , "start%" )).isEqualTo (true );
536+ assertThat (executeLike ("not_startX" , "start%" )).isEqualTo (false );
537+ assertThat (executeLike ("xxmiddleyy" , "%middle%" )).isEqualTo (true );
538+ assertThat (executeLike ("xxmidxdleyy" , "%middle%" )).isEqualTo (false );
539+ assertThat (executeLike ("xxend" , "%end" )).isEqualTo (true );
540+ assertThat (executeLike ("xxendyy" , "%end" )).isEqualTo (false );
541+ assertThat (executeLike ("equal" , "equal" )).isEqualTo (true );
542+ assertThat (executeLike ("equalxx" , "equal" )).isEqualTo (false );
543+ assertThat (executeLike ("startxx" , "st_rt%" )).isEqualTo (true );
544+ assertThat (executeLike ("stbrtxx" , "st_rt%" )).isEqualTo (true );
545+ assertThat (executeLike ("xxstbrtxx" , "st_rt%" )).isEqualTo (false );
546+ assertThat (executeLike ("abchahadefxx" , "abc%def%" )).isEqualTo (true );
547+ assertThat (executeLike ("abchahadafxx" , "abc%def%" )).isEqualTo (false );
544548
545549 // test instance
546550 assertThat (getLikeFunc ("equal" )).isEqualTo (Equal .INSTANCE );
@@ -550,10 +554,15 @@ public void testLike() {
550554 assertThat (getLikeFunc ("a_c" )).isEqualTo (Like .INSTANCE );
551555 }
552556
553- private boolean testLike (String s , String pattern ) {
554- PredicateBuilder builder = new PredicateBuilder (RowType .of (new VarCharType ()));
555- Predicate predicate = builder .like (0 , fromString (pattern ));
556- return predicate .test (GenericRow .of (fromString (s )));
557+ private boolean executeLike (String s , String pattern ) {
558+ ThreadLocalRandom rnd = ThreadLocalRandom .current ();
559+ if (rnd .nextBoolean ()) {
560+ PredicateBuilder builder = new PredicateBuilder (RowType .of (new VarCharType ()));
561+ Predicate predicate = builder .like (0 , fromString (pattern ));
562+ return predicate .test (GenericRow .of (fromString (s )));
563+ } else {
564+ return Like .INSTANCE .test (DataTypes .STRING (), fromString (s ), fromString (pattern ));
565+ }
557566 }
558567
559568 private LeafFunction getLikeFunc (String pattern ) {
0 commit comments