diff --git a/jOOQ-manual/src/main/resources/org/jooq/web/grammar-3.12.txt b/jOOQ-manual/src/main/resources/org/jooq/web/grammar-3.12.txt index f5675976be..ad0615f7cd 100644 --- a/jOOQ-manual/src/main/resources/org/jooq/web/grammar-3.12.txt +++ b/jOOQ-manual/src/main/resources/org/jooq/web/grammar-3.12.txt @@ -666,7 +666,7 @@ predicate = | 'IN' '(' ( select | fields ) ')' | 'BETWEEN' [ 'SYMMETRIC' ] concat 'AND' concat | ( 'REGEXP' | 'RLIKE' | 'LIKE_REGEX' ) concat - | 'LIKE' concat [ 'ESCAPE' characterLiteral ] + | ( 'LIKE' | 'ILIKE' ) concat [ 'ESCAPE' characterLiteral ] | 'SIMILAR' 'TO' concat [ 'ESCAPE' characterLiteral ] ) | '@>' concat diff --git a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java index 6b0a07a894..8cca34b587 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java @@ -4338,6 +4338,18 @@ final class ParserImpl implements Parser { ? ((Field) left).notLike(right) : ((Field) left).like(right); } + else if (left instanceof Field && parseKeywordIf(ctx, "ILIKE")) { + Field right = toField(ctx, parseConcat(ctx, null)); + boolean escape = parseKeywordIf(ctx, "ESCAPE"); + char character = escape ? parseCharacterLiteral(ctx) : ' '; + return escape + ? not + ? ((Field) left).notLikeIgnoreCase(right, character) + : ((Field) left).likeIgnoreCase(right, character) + : not + ? ((Field) left).notLikeIgnoreCase(right) + : ((Field) left).likeIgnoreCase(right); + } else if (left instanceof Field && (parseKeywordIf(ctx, "REGEXP") || parseKeywordIf(ctx, "RLIKE") || parseKeywordIf(ctx, "LIKE_REGEX"))) {