Hi Aurélien,

Good question(s) :-)
It's clear that the VisitListener SPI will need lots of documentation. Its
current state is "experimental". Although I don't expect significant
changes to the contracts, there might be some helpers added in future
releases, to make interaction simpler. AST transformation is not a trivial
problem in any language.

Anyway, the feedback from your experiments will be highly valuable to this
group. So thanks in advance for doing this :-)

Further comments inline:

2013/12/3 Aurélien Manteaux <[email protected]>

> Hi Lukas,
>
> I need a confirmation to be sure I am not going in the wrong direction.
>
> In order to get all the tables referenced in a query (from, sub query
> from, inner join, outer join, other join ?), I do :
> - in the configuration, I combine a VisitListenerProvider to the
> VisitListenerProvider[],
> - my VisitListenerProvider returns a custom VisitListener,
> - the custom VisitListener uses only visitStart() (I had to choose one of
> the 4 methods :),
> - in visitStart(), if context.clause() equals Clause.TABLE_REFERENCE,
> context.queryPart() is added to the query tables set.
>

This looks good to me. Beware that you will not capture plain SQL tables
and CustomTables like this, though. For this, you'd also have to listen to
Clause.TEMPLATE (plain SQL) and Clause.CUSTOM (CustomTables), and then do a
type-check:

    (context.queryPart() instanceof org.jooq.Table)


> Does the condition "if context.clause() equals Clause.TABLE_REFERENCE"
> returns true only and for all the tables referenced in a query ?
>

Tables in general are identified by Clause.TABLE. Physical table references
are identified by Clause.TABLE_REFERENCE (excluding, for instance, derived
tables). So, yes, that's the right clause for your purpose.


> It works fine on "SELECT a,b,c FROM table WHERE d=e" or on "SELECT a,b,c
> FROM table1 t1 JOIN table2 t2 ON t1.a=t2.a WHERE d=e", but :
> - will it always work ? (cf org.jooq.Clause : "Disclaimer, This SPI is
> still experimental!")
>

I can informally guarantee (whatever that means) that there is no intention
of changing this semantics of Clause.TABLE_REFERENCE again. But as this is
an experimental SPI, there may be quite a few edge-cases that are not yet
properly covered. So you will run a slight risk by implementing this SPI.

Rest assured that all potential incompatible changes to this SPI will be
clearly indicated in the release notes and only performed between minor
releases, not patch releases. We'll try to keep incompatible changes at a
minimum and stick with semantic versioning whenever possible.


> - will it still works in all other cases where tables are referenced ?
>

If by "other cases" you mean UPDATE, INSERT statements, etc, then yes,
that's the intention.

Cheers
Lukas

-- 
You received this message because you are subscribed to the Google Groups "jOOQ 
User Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to