From b95cc5fde8fadbb872c788d9c0b3ce0e7779160f Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Thu, 27 Feb 2020 12:42:00 +0100 Subject: [PATCH] [jOOQ/jOOQ#9889] Add support for native ILIKE in H2 --- .../java/org/jooq/impl/CompareCondition.java | 29 +++++++++++++------ 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/CompareCondition.java b/jOOQ/src/main/java/org/jooq/impl/CompareCondition.java index 3aa7d459c8..09e3d5ab28 100644 --- a/jOOQ/src/main/java/org/jooq/impl/CompareCondition.java +++ b/jOOQ/src/main/java/org/jooq/impl/CompareCondition.java @@ -50,10 +50,27 @@ import static org.jooq.Comparator.SIMILAR_TO; // ... // ... // ... +// ... +import static org.jooq.SQLDialect.CUBRID; +// ... import static org.jooq.SQLDialect.DERBY; +import static org.jooq.SQLDialect.FIREBIRD; +// ... +import static org.jooq.SQLDialect.HSQLDB; +// ... +// ... +import static org.jooq.SQLDialect.MARIADB; +// ... +import static org.jooq.SQLDialect.MYSQL; // ... import static org.jooq.SQLDialect.POSTGRES; // ... +// ... +import static org.jooq.SQLDialect.SQLITE; +// ... +// ... +// ... +// ... import static org.jooq.conf.ParamType.INLINED; import static org.jooq.impl.DSL.inline; import static org.jooq.impl.DSL.row; @@ -84,6 +101,7 @@ final class CompareCondition extends AbstractCondition implements LikeEscapeStep private static final long serialVersionUID = -747240442279619486L; private static final Clause[] CLAUSES = { CONDITION, CONDITION_COMPARISON }; private static final Set REQUIRES_CAST_ON_LIKE = SQLDialect.supportedBy(DERBY, POSTGRES); + private static final Set NO_SUPPORT_ILIKE = SQLDialect.supportedBy(CUBRID, DERBY, FIREBIRD, HSQLDB, MARIADB, MYSQL, SQLITE); final Field field1; final Field field2; @@ -129,16 +147,9 @@ final class CompareCondition extends AbstractCondition implements LikeEscapeStep lhs = castIfNeeded(lhs, String.class); } - // [#1423] Only Postgres knows a true ILIKE operator. Other dialects + // [#1423] [#9889] PostgreSQL and H2 support ILIKE natively. Other dialects // need to emulate this as LOWER(lhs) LIKE LOWER(rhs) - else if ((op == LIKE_IGNORE_CASE || op == NOT_LIKE_IGNORE_CASE) - - - - - - && POSTGRES != family) { - + else if ((op == LIKE_IGNORE_CASE || op == NOT_LIKE_IGNORE_CASE) && NO_SUPPORT_ILIKE.contains(family)) { lhs = lhs.lower(); rhs = rhs.lower(); op = (op == LIKE_IGNORE_CASE ? LIKE : NOT_LIKE);