public interface VisitListener
extends java.util.EventListener
QueryPart traversal events.
Users may want to centrally inject custom behaviour when rendering their
QueryPart objects or when binding values to PreparedStatement
s. This service provider allows to hook in callback method implementations
before or after these events:
The following rules apply to visiting clauses and query parts:
An example is given here:
SELECT 1 FROM [A CROSS JOIN B]
The above example will create the following set of events:
Clause.SELECT+-Clause.SELECT_SELECT| +-Clause.FIELD| +-val(1) +-Clause.SELECT_FROM+-Clause.TABLE_JOIN+-Clause.TABLE| +-table("A") +-Clause.TABLE_JOIN_CROSS+-Clause.TABLE+-table("B")
Whatever is not a Clause in the above example is a QueryPart.
Note: [#2694] [#2695] As of jOOQ 3.2, VisitListener receive events
only in the context of a RenderContext, not of a BindContext.
| Modifier and Type | Method and Description |
|---|---|
void |
clauseEnd(VisitContext context)
Called after leaving a
Clause. |
void |
clauseStart(VisitContext context)
Called before entering a
Clause. |
void |
visitEnd(VisitContext context)
Called after visiting a
QueryPart. |
void |
visitStart(VisitContext context)
Called before visiting a
QueryPart. |
void clauseStart(VisitContext context)
Clause.Context.start(Clause)void clauseEnd(VisitContext context)
Clause.Context.end(Clause)void visitStart(VisitContext context)
QueryPart.
Certain VisitListener implementations may chose to replace
the QueryPart contained in the argument VisitContext
through VisitContext.queryPart(QueryPart). This can be used for
many use-cases, for example to add a CHECK OPTION to an
Oracle INSERT statement: The above SQL transformation allows to prevent inserting
new books for authors other than those with
-- Original query
INSERT INTO book (id, author_id, title)
VALUES (10, 15, '1984')
-- Transformed query
INSERT INTO (
SELECT * FROM book
WHERE author_id IN (1, 2, 3)
WITH CHECK OPTION
) (id, author_id, title)
VALUES (10, 15, '1984')
author_id IN (1, 2, 3)
Context.visit(QueryPart)void visitEnd(VisitContext context)
QueryPart.Context.visit(QueryPart)Copyright © 2015. All Rights Reserved.