From 50bcf05986e0e77aebd1cfb11e06f8864b1af741 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Tue, 26 Apr 2022 14:01:13 +0200 Subject: [PATCH] [jOOQ/jOOQ#13485] Add a QOM.UOpaque marker interface for non-traversable QueryPart types --- .../java/org/jooq/impl/CustomCondition.java | 9 ++++++++- .../main/java/org/jooq/impl/CustomField.java | 9 ++++++++- .../java/org/jooq/impl/CustomQueryPart.java | 3 ++- .../java/org/jooq/impl/CustomStatement.java | 7 +++++++ .../main/java/org/jooq/impl/CustomTable.java | 8 +++++++- jOOQ/src/main/java/org/jooq/impl/QOM.java | 18 ++++++++++++++++++ 6 files changed, 50 insertions(+), 4 deletions(-) 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.