diff --git a/jOOQ/src/main/java/org/jooq/impl/Expression.java b/jOOQ/src/main/java/org/jooq/impl/Expression.java index 8dcaaf4b64..7c4b2e9304 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Expression.java +++ b/jOOQ/src/main/java/org/jooq/impl/Expression.java @@ -171,10 +171,13 @@ class Expression extends AbstractFunction { // Many dialects don't support shifts. Use multiplication/division instead else if (SHL == operator && asList(H2, HSQLDB).contains(family)) { - return lhs.mul(DSL.power(two(), rhsAsNumber())); + return lhs.mul((Field) DSL.power(two(), rhsAsNumber()).cast(lhs)); } + + // [#3962] This emulation is expensive. If this is emulated, BitCount should + // use division instead of SHR directly else if (SHR == operator && asList(H2, HSQLDB).contains(family)) { - return lhs.div(DSL.power(two(), rhsAsNumber())); + return lhs.div((Field) DSL.power(two(), rhsAsNumber()).cast(lhs)); } // Some dialects support shifts as functions