- All Implemented Interfaces:
- Serializable,- QueryPart,- QueryPartInternal
QueryPart implementations in client code.
 
 Client code may provide proper Condition implementations extending
 this useful base class. All necessary parts of the Condition
 interface are already implemented. Only this method needs further
 implementation: accept(Context).
 
Refer to that methods' Javadoc for further details about their expected behaviour.
 Such custom QueryPart implementations can be useful in any of
 these scenarios:
 
- When reusing a custom QueryPartin other customQueryParts, e.g. inCustomCondition,CustomField,CustomTable, etc.
- When inlining a custom QueryPartin plain SQL methods, such asDSL.condition(String, QueryPart...),DSL.field(String, QueryPart...),DSL.table(String, QueryPart...)
- Author:
- Lukas Eder
- See Also:
- 
Constructor SummaryConstructors
- 
Method SummaryModifier and TypeMethodDescriptiondefault QueryPartTraverse aQueryParthierarchy and recursively replace its elements by alternatives.default <R> Rabstract voidSubclasses must implement this method.final Clause[]TheClauses that are represented by this query part.protected final DSLContextcreate()Deprecated.protected final DSLContextcreate(Configuration configuration) Deprecated.- 3.11.0 - [#6722] - UseAttachable.configuration()andConfiguration.dsl()instead.protected final DSLContextDeprecated.- 3.11.0 - [#6722] - UseAttachable.configuration()andConfiguration.dsl()instead.booleanSubclasses may override thisfinal booleanSubclasses may override thisbooleanSubclasses may override thisfinal booleanSubclasses may override thisbooleanSubclasses may override thisbooleanCheck whether thisQueryPartcan be considered equal to anotherQueryPart.booleanSubclasses may override thisinthashCode()Generate a hash code from thisQueryPart.static final CustomQueryPartCreate aCustomQueryPartfrom a lambda expression.booleanrendersContent(Context<?> ctx) Subclasses may override thistoString()Render a SQL string representation of thisQueryPart.protected final DataAccessExceptiontranslate(String sql, SQLException e) Internal convenience method
- 
Constructor Details- 
CustomQueryPartprotected CustomQueryPart()
 
- 
- 
Method Details- 
ofCreate aCustomQueryPartfrom a lambda expression.
- 
acceptSubclasses must implement this method.
 ThisQueryPartcanacceptaContextobject in order to render a SQL string or to bind its variables.- Specified by:
- acceptin interface- QueryPartInternal
 
- 
clausesDescription copied from interface:QueryPartInternalTheClauses that are represented by this query part.QueryParts can specify severalClauses for which an event will be emittedbefore(in forward order) andafter(in reverse order) visiting the the query part throughContext.visit(QueryPart)This method is for JOOQ INTERNAL USE only. Do not reference directly - Specified by:
- clausesin interface- QueryPartInternal
- Returns:
- The Clauses represented by this query part ornullor an empty array if this query part does not represent a clause.
 
- 
declaresFieldspublic final boolean declaresFields()Subclasses may override this- Specified by:
- declaresFieldsin interface- QueryPartInternal
 
- 
declaresTablespublic final boolean declaresTables()Subclasses may override this- Specified by:
- declaresTablesin interface- QueryPartInternal
 
- 
$traverseDescription copied from interface:QueryPartTraverser thisQueryPartexpression tree using a composableTraverser, producing a result.This offers a generic way to traverse expression trees to translate the tree to arbitrary other data structures. The simplest traversal would just count all the tree elements: int count = CUSTOMER.NAME.eq(1).$traverse(0, (i, p) -> i + 1);The same can be achieved by translating the JDK CollectorAPI to theTraverserAPI usingTraversers.collecting(Collector).CUSTOMER.NAME.eq(1).$traverse(Traversers.collecting(Collectors.counting()));Unlike a Collector, aTraverseris optimised for tree traversal, not stream traversal:- Is not designed for parallelism
- It can Traverser.abort()traversal early when the result can be produced early (e.g. when runningTraversers.containing(QueryPart), and a result has been found).
- It can decide whether to Traverser.recurse()into aQueryPartsubtree, or whether that is not necessary or even undesirable, e.g. to prevent entering new subquery scopes.
- Unlike a Collector, which can use its Collector.accumulator()to accumulate each element only once, in tree traversal, it's desirable to be able to distinguish between accumulating an itemTraverser.before()orTraverser.after()recursing into it. This is useful e.g. to wrap each tree node in XML opening and closing tags.
 This is a commercial jOOQ edition only feature. 
- 
$replaceDescription copied from interface:QueryPartTraverse aQueryParthierarchy and recursively replace its elements by alternatives.This is a commercial jOOQ edition only feature. 
- 
rendersContentSubclasses may override this- Specified by:
- rendersContentin interface- QueryPartInternal
 
- 
declaresWindowspublic boolean declaresWindows()Subclasses may override this- Specified by:
- declaresWindowsin interface- QueryPartInternal
 
- 
declaresCTEpublic boolean declaresCTE()Subclasses may override this- Specified by:
- declaresCTEin interface- QueryPartInternal
 
- 
declaresParametersSubclasses may override this- Specified by:
- declaresParametersin interface- QueryPartInternal
 
- 
generatesCastpublic boolean generatesCast()Subclasses may override this- Specified by:
- generatesCastin interface- QueryPartInternal
 
- 
equalsDescription copied from interface:QueryPartCheck whether thisQueryPartcan be considered equal to anotherQueryPart.In general, QueryPartequality is defined in terms ofQueryPart.toString()equality. In other words, two query parts are considered equal if their rendered SQL (with inlined bind variables) is equal. This means that the two query parts do not necessarily have to be of the same type.Some QueryPartimplementations may choose to override this behaviour for improved performance, asQueryPart.toString()is an expensive operation, if called many times.
- 
hashCodepublic int hashCode()Description copied from interface:QueryPartGenerate a hash code from thisQueryPart.In general, QueryParthash codes are the same as the hash codes generated fromQueryPart.toString(). This guarantees consistent behaviour withQueryPart.equals(Object)Some QueryPartimplementations may choose to override this behaviour for improved performance, asQueryPart.toString()is an expensive operation, if called many times.
- 
toStringDescription copied from interface:QueryPartRender a SQL string representation of thisQueryPart.For improved debugging, this renders a SQL string of this QueryPartwith inlined bind variables. If thisQueryPartisAttachable, then the attachedConfigurationmay be used for rendering the SQL string, includingSQLDialectandSettings. Do note that mostQueryPartinstances are not attached to aConfiguration, and thus there is no guarantee that the SQL string will make sense in the context of a specific database.
- 
createDeprecated.- 3.11.0 - [#6722] - UseAttachable.configuration()andConfiguration.dsl()instead.Internal convenience method
- 
createDeprecated.- 3.11.0 - [#6722] - UseAttachable.configuration()andConfiguration.dsl()instead.Internal convenience method
- 
createDeprecated.- 3.11.0 - [#6722] - UseAttachable.configuration()andConfiguration.dsl()instead.Internal convenience method
- 
translateInternal convenience method
 
- 
Attachable.configuration()andConfiguration.dsl()instead.