diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractParam.java b/jOOQ/src/main/java/org/jooq/impl/AbstractParam.java index 3a79620fe7..1dac746741 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractParam.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractParam.java @@ -57,6 +57,8 @@ import org.jooq.Param; import org.jooq.ParamMode; import org.jooq.QualifiedRecord; import org.jooq.conf.ParamType; +// ... +// ... import org.jooq.tools.StringUtils; /** @@ -196,6 +198,12 @@ abstract class AbstractParam extends AbstractParamX implements SimpleQuery return value; } + @Override + public /* non-final */ MParam $value(T newValue) { + // TODO [#12425] Only Val implements this, so far. + throw new UNotYetImplementedException(); + } + // ------------------------------------------------------------------------ // XXX: Object API // ------------------------------------------------------------------------ diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractParamX.java b/jOOQ/src/main/java/org/jooq/impl/AbstractParamX.java index 562855a099..65194f3c3d 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractParamX.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractParamX.java @@ -49,7 +49,8 @@ import org.jooq.tools.JooqLogger; * @author Lukas Eder */ abstract class AbstractParamX extends AbstractField implements Param { - private static final JooqLogger log = JooqLogger.getLogger(AbstractParam.class); + + private static final JooqLogger log = JooqLogger.getLogger(AbstractParam.class); AbstractParamX(Name name, DataType type) { super(name, type); diff --git a/jOOQ/src/main/java/org/jooq/impl/ConditionProviderImpl.java b/jOOQ/src/main/java/org/jooq/impl/ConditionProviderImpl.java index e320004ceb..80142e7e03 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ConditionProviderImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ConditionProviderImpl.java @@ -102,9 +102,11 @@ final class ConditionProviderImpl extends AbstractQueryPart implements Condition @Override public final void addConditions(Operator operator, Condition conditions) { if (hasWhere()) - condition = DSL.condition(operator, getWhere(), conditions); + setWhere(DSL.condition(operator, getWhere(), conditions)); + else if (conditions instanceof ConditionProviderImpl) + setWhere(((ConditionProviderImpl) conditions).getWhere()); else - condition = conditions; + setWhere(conditions); } @Override diff --git a/jOOQ/src/main/java/org/jooq/impl/ConvertedVal.java b/jOOQ/src/main/java/org/jooq/impl/ConvertedVal.java index 85a9ffaa79..717e818c1a 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ConvertedVal.java +++ b/jOOQ/src/main/java/org/jooq/impl/ConvertedVal.java @@ -43,6 +43,7 @@ import org.jooq.Param; import org.jooq.ParamMode; import org.jooq.conf.ParamType; // ... +// ... /** * A {@link Param} wrapper object that allows for lazily initialising the value @@ -123,6 +124,11 @@ final class ConvertedVal extends AbstractParamX implements UNotYetImplemen return getValue(); } + @Override + public final MParam $value(T value) { + return ((AbstractParamX) delegate).$value(delegate.getDataType().convert(value)); + } + // ------------------------------------------------------------------------- // The Object API // ------------------------------------------------------------------------- diff --git a/jOOQ/src/main/java/org/jooq/impl/LazyVal.java b/jOOQ/src/main/java/org/jooq/impl/LazyVal.java index 3d37758a21..c5b5ebfcf9 100644 --- a/jOOQ/src/main/java/org/jooq/impl/LazyVal.java +++ b/jOOQ/src/main/java/org/jooq/impl/LazyVal.java @@ -154,6 +154,11 @@ final class LazyVal extends AbstractParamX implements MVal { return delegate.$value(); } + @Override + public final MParam $value(T value) { + return delegate.$value(value); + } + @Override public final R traverse( R init, diff --git a/jOOQ/src/main/java/org/jooq/impl/QOM.java b/jOOQ/src/main/java/org/jooq/impl/QOM.java index 7346913203..60a6ab59f1 100644 --- a/jOOQ/src/main/java/org/jooq/impl/QOM.java +++ b/jOOQ/src/main/java/org/jooq/impl/QOM.java @@ -675,6 +675,7 @@ public final class QOM { public interface MParam extends MField, UEmpty { T $value(); + MParam $value(T value); } public interface MInline extends MParam {} public interface MVal extends MParam {} @@ -2889,11 +2890,22 @@ public final class QOM { * A marker interface for {@link QueryPart} implementations whose * {@link MQueryPart} semantics has not yet been implemented. * - * @deprecated - [#12425] - 3.16.0 - Missing implementations should be added as soon as possible! + * @deprecated - [#12425] - 3.16.0 - Missing implementations should be added + * as soon as possible! */ @Deprecated(forRemoval = true) interface UNotYetImplemented extends UEmpty {} + /** + * A marker interface for {@link MQueryPart} methods that have not yet been + * implemented. + * + * @deprecated - [#12425] - 3.16.0 - Missing implementations should be added + * as soon as possible! + */ + @Deprecated(forRemoval = true) + static class UNotYetImplementedException extends RuntimeException {} + interface UProxy extends MQueryPart { Q $delegate(); @@ -2932,7 +2944,7 @@ public final class QOM { @Override default MQueryPart replace(Function1 replacement) { - return this; + return replacement.apply(this); } @Override diff --git a/jOOQ/src/main/java/org/jooq/impl/Val.java b/jOOQ/src/main/java/org/jooq/impl/Val.java index e29ad2dcc5..e0e670bf52 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Val.java +++ b/jOOQ/src/main/java/org/jooq/impl/Val.java @@ -76,6 +76,7 @@ import org.jooq.JSONB; import org.jooq.RenderContext; import org.jooq.conf.ParamType; import org.jooq.exception.DataAccessException; +// ... import org.jooq.tools.JooqLogger; import org.jooq.tools.StringUtils; import org.jooq.types.DayToSecond; @@ -339,4 +340,13 @@ final class Val extends AbstractParam { return "?"; } } + + // ------------------------------------------------------------------------- + // XXX: Query Object Model + // ------------------------------------------------------------------------- + + @Override + public final MParam $value(T newValue) { + return copy(newValue); + } }