diff --git a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java index 05d14f547f..5983f4add1 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java @@ -11860,7 +11860,7 @@ final class DefaultParseContext extends AbstractScope implements ParseContext { return null; } - private final Field parseBooleanValueExpressionIf() { + private final Field parseBooleanValueExpressionIf() { TruthValue truth = parseTruthValueIf(); if (truth != null) { @@ -11869,8 +11869,10 @@ final class DefaultParseContext extends AbstractScope implements ParseContext { return inline(true); case T_FALSE: return inline(false); + + // [#16368] We cannot decide the data type at this point case T_NULL: - return inline((Boolean) null); + return inline(null, OTHER); default: throw exception("Truth value not supported: " + truth); } diff --git a/jOOQ/src/main/java/org/jooq/impl/Patterns.java b/jOOQ/src/main/java/org/jooq/impl/Patterns.java index c489fb7801..a89f3f59c2 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Patterns.java +++ b/jOOQ/src/main/java/org/jooq/impl/Patterns.java @@ -2692,24 +2692,6 @@ package org.jooq.impl; - - - - - - - - - - - - - - - - - - diff --git a/jOOQ/src/main/java/org/jooq/impl/Tools.java b/jOOQ/src/main/java/org/jooq/impl/Tools.java index 0bdc59bf34..60f80f6eb4 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Tools.java +++ b/jOOQ/src/main/java/org/jooq/impl/Tools.java @@ -3979,6 +3979,28 @@ final class Tools { || field instanceof ConvertedVal && ((ConvertedVal) field).delegate instanceof Val; } + static final boolean isVal(QueryPart p, Predicate> predicate) { + if (p instanceof Val v) { + return predicate.test(v); + } + else if (p instanceof ConvertedVal v) { + return isVal(v.delegate, predicate); + } + else + return false; + } + + static final boolean isVal0(Field p, Predicate> predicate) { + if (p instanceof Val v) { + return predicate.test(v); + } + else if (p instanceof ConvertedVal v) { + return isVal0((Field) v.delegate, predicate); + } + else + return false; + } + static final boolean isWindow(QueryPart part) { return part instanceof AbstractWindowFunction && ((AbstractWindowFunction) part).isWindow(); }