diff --git a/jOOQ/src/main/java/org/jooq/impl/CustomCondition.java b/jOOQ/src/main/java/org/jooq/impl/CustomCondition.java index d930e4fefb..8b3b314e46 100644 --- a/jOOQ/src/main/java/org/jooq/impl/CustomCondition.java +++ b/jOOQ/src/main/java/org/jooq/impl/CustomCondition.java @@ -45,6 +45,7 @@ import org.jooq.Clause; import org.jooq.Condition; import org.jooq.Context; import org.jooq.impl.QOM.UEmptyCondition; +import org.jooq.impl.QOM.UOpaque; /** * A base class for custom {@link Condition} implementations in client code. @@ -59,7 +60,13 @@ import org.jooq.impl.QOM.UEmptyCondition; * * @author Lukas Eder */ -public abstract class CustomCondition extends AbstractCondition implements UEmptyCondition { +public non-sealed abstract class CustomCondition +extends + AbstractCondition +implements + UEmptyCondition, + UOpaque +{ private static final Clause[] CLAUSES = { CUSTOM }; diff --git a/jOOQ/src/main/java/org/jooq/impl/CustomField.java b/jOOQ/src/main/java/org/jooq/impl/CustomField.java index 9f55e09d81..4f83823ab9 100644 --- a/jOOQ/src/main/java/org/jooq/impl/CustomField.java +++ b/jOOQ/src/main/java/org/jooq/impl/CustomField.java @@ -48,6 +48,7 @@ import org.jooq.DataType; import org.jooq.Field; import org.jooq.Name; import org.jooq.impl.QOM.UEmptyField; +import org.jooq.impl.QOM.UOpaque; /** * A base class for custom {@link Field} implementations in client code. @@ -62,7 +63,13 @@ import org.jooq.impl.QOM.UEmptyField; * * @author Lukas Eder */ -public abstract class CustomField extends AbstractField implements UEmptyField { +public non-sealed abstract class CustomField +extends + AbstractField +implements + UEmptyField, + UOpaque +{ private static final Clause[] CLAUSES = { CUSTOM }; diff --git a/jOOQ/src/main/java/org/jooq/impl/CustomQueryPart.java b/jOOQ/src/main/java/org/jooq/impl/CustomQueryPart.java index c0a8249001..2796944a90 100644 --- a/jOOQ/src/main/java/org/jooq/impl/CustomQueryPart.java +++ b/jOOQ/src/main/java/org/jooq/impl/CustomQueryPart.java @@ -46,6 +46,7 @@ import org.jooq.Condition; import org.jooq.Context; import org.jooq.QueryPart; import org.jooq.impl.QOM.UEmpty; +import org.jooq.impl.QOM.UOpaque; /** * A base class for custom {@link QueryPart} implementations in client code. @@ -72,7 +73,7 @@ import org.jooq.impl.QOM.UEmpty; * * @author Lukas Eder */ -public abstract class CustomQueryPart extends AbstractQueryPart implements UEmpty { +public non-sealed abstract class CustomQueryPart extends AbstractQueryPart implements UOpaque { private static final Clause[] CLAUSES = { CUSTOM }; diff --git a/jOOQ/src/main/java/org/jooq/impl/CustomStatement.java b/jOOQ/src/main/java/org/jooq/impl/CustomStatement.java index 31ef6d5a9e..d856dc4531 100644 --- a/jOOQ/src/main/java/org/jooq/impl/CustomStatement.java +++ b/jOOQ/src/main/java/org/jooq/impl/CustomStatement.java @@ -105,6 +105,13 @@ package org.jooq.impl; + + + + + + + diff --git a/jOOQ/src/main/java/org/jooq/impl/CustomTable.java b/jOOQ/src/main/java/org/jooq/impl/CustomTable.java index 32e48d5942..5aff6e57e9 100644 --- a/jOOQ/src/main/java/org/jooq/impl/CustomTable.java +++ b/jOOQ/src/main/java/org/jooq/impl/CustomTable.java @@ -50,6 +50,7 @@ import org.jooq.Schema; import org.jooq.Table; import org.jooq.TableRecord; import org.jooq.UniqueKey; +import org.jooq.impl.QOM.UOpaque; /** * A base class for custom {@link Table} implementations in client code. @@ -74,7 +75,12 @@ import org.jooq.UniqueKey; * * @author Lukas Eder */ -public abstract class CustomTable> extends TableImpl { +public non-sealed abstract class CustomTable> +extends + TableImpl +implements + UOpaque +{ protected CustomTable(Name name) { super(name); diff --git a/jOOQ/src/main/java/org/jooq/impl/QOM.java b/jOOQ/src/main/java/org/jooq/impl/QOM.java index 33f739c3c9..8c25942ea6 100644 --- a/jOOQ/src/main/java/org/jooq/impl/QOM.java +++ b/jOOQ/src/main/java/org/jooq/impl/QOM.java @@ -6265,6 +6265,24 @@ public final class QOM { */ interface UTransient extends UEmpty {} + /** + * A marker interface for {@link QueryPart} implementations that are mainly + * used to render SQL, but unlike {@link UTransient} parts, can also appear + * in user expression trees. + */ + /* sealed */ interface UOpaque + extends + UEmpty + /* permits + + + + CustomField, + CustomTable, + CustomCondition, + CustomQueryPart */ + {} + /** * A marker interface for {@link QueryPart} implementations whose * {@link QueryPart} semantics has not yet been implemented.