Hi Alok,

I just found that this old mail still lacks an answer to your question at
the bottom...

2015-06-23 18:53 GMT+02:00 Alok Menghrajani <[email protected]>:

> Hi,
>
> I just wanted to point out that when using fetchInto(FOO), you'll
> usually want to also do select(FOO.fields()) and avoid fetching all
> the columns.
>
> For example:
> jooqContext.select()
>     .from(AUTHOR)
>     .join(BOOK).on(AUTHOR.ID.eq(BOOK.AUTHOR))
>     .where(BOOK.TITLE.eq("nightfall"))
>     .fetchInto(AUTHOR);
>
> Will result in:
> select author.id, author.first_name, author.last_name, book.id,
> book.author, book.title from author join book on author.id =
> book.author where book.title = ?
>
> However:
> jooqContext.select(AUTHOR.fields())
>     .from(AUTHOR)
>     .join(BOOK).on(AUTHOR.ID.eq(BOOK.AUTHOR))
>     .where(BOOK.TITLE.eq("nightfall"))
>     .fetchInto(AUTHOR);
>
> Results in the more efficient:
> select author.id, author.first_name, author.last_name from author join
> book on author.id = book.author where book.title = ?
>
> I'm guessing jooq could be improved to detect when too much data is
> being fetched and thrown away from the database (in development, the
> framework could keep track of which fields were eventually used and
> log some kind of warning?).


I think that such an approach is a bit too "clever". Think about it this
way:

1. fetchInto(AUTHOR) is just short for fetch().into(AUTHOR), so the fetch()
action is decoupled from the mapping action into(AUTHOR). You could even
map the same Result<?> several times, e.g. once into(AUTHOR) and once
into(BOOK)
2. You should be the one completely defining your SQL statement, not some
internal rule inside of jOOQ. For instance, the semantics of SELECT
DISTINCT T1.A, T1.B, T2.X, T2.Y FROM ... is very different from the similar
statement SELECT DISTINCT T1.A, T1.B FROM ...

Hope this helps,
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/d/optout.

Reply via email to