Package org.jooq

Interface VisitListener

  • All Superinterfaces:
    java.util.EventListener
    All Known Implementing Classes:
    DefaultVisitListener

    public interface VisitListener
    extends java.util.EventListener
    A listener for 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:

    • Clauses may "surround" a query part. See an example below.
    • Not every query part is "surrounded" by a clause

    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.

    A remark about performance

    Implementors of this SPI should be wary of performance implications of their implementations. The below methods are called for every AST element of every query, which produces a lot of calls throughout an application. What would otherwise be premature optimisations may have great effect inside the VisitListener. For more details, please refer to this article: http://blog.jooq.org/2015/02/05/top-10-easy-performance-optimisations-in- java/.

    Author:
    Lukas Eder