diff --git a/jOOQ/src/main/java/org/jooq/impl/QOM.java b/jOOQ/src/main/java/org/jooq/impl/QOM.java index e6b632ec68..3c2ac4bd50 100644 --- a/jOOQ/src/main/java/org/jooq/impl/QOM.java +++ b/jOOQ/src/main/java/org/jooq/impl/QOM.java @@ -134,39 +134,29 @@ import org.jetbrains.annotations.Nullable; *

* This class provides a single namespace for jOOQ's query object model API. * Every {@link QueryPart} from the DSL API has a matching {@link QueryPart} - * representation in this API, and an internal implementation in the - * org.jooq.impl package, that covers both the DSL and model API - * functionality. + * representation in this query object model API, and a shared internal + * implementation in the org.jooq.impl package, that covers both + * the DSL and model API functionality. *

* The goal of this model API is to allow for expression tree transformations - * that are independent of the DSL API that would otherwise be too noisy for - * this task. + * via {@link QueryPart#$replace(Function1)} as well as via per-querypart + * methods, such as for example {@link Substring#$startingPosition(Field)}, and + * traversals via {@link QueryPart#$traverse(Traverser)} that are independent of + * the DSL API that would otherwise be too noisy for this task. *

*

Design

*

* In order to avoid conflicts between the model API and the DSL API, all model * API in this class follows these naming conventions: *

- *

- * Furthermore, the current draft design lets each {@link QueryPart} publicly - * extend its matching {@link QueryPart}. This may not be the case in - * the future, as long as this API is experimental, a backwards incompatible - * change may revert this. Alternative possible designs include: - *

*

*

Limitations

@@ -174,10 +164,17 @@ import org.jetbrains.annotations.Nullable; * The API offers public access to jOOQ's internal representation, and as such, * is prone to incompatible changes between minor releases, in addition to the * incompatible changes that may arise due to this API being experimental. In - * this experimental stage, not all {@link QueryPart} implementations have a - * corresponding public {@link QueryPart} type, but may just implement the API - * via a {@link UEmpty} or {@link UNotYetImplemented} subtype, and may not - * provide access to contents via accessor methods. + * this experimental stage, the following limitations are accepted: + * *

*

Mutability

*

@@ -190,11 +187,10 @@ import org.jetbrains.annotations.Nullable; *

*

Notes

*

- * The Java 17 distribution of jOOQ will make use of sealed types to improve the - * usability of the model API in pattern matching expressions etc. The - * implementations currently can't be made publicly available - * {@link java.lang.Record} types, because of the existing internal type - * hierarchy. + * A future Java 17 distribution of jOOQ might make use of sealed types to + * improve the usability of the model API in pattern matching expressions etc. + * Other Java language features that benefit pattern matching expression trees + * might be adopted in the future in this area of the jOOQ API. * * @author Lukas Eder */