I had a question.. Why do I have repeat what I have selected in the fetch method.
Date minDate = getDSLContext()
.select(CON_CAL_INSTANCE.DATE.min())
.from(CON_CAL_INSTANCE)
.join(CON_CAL_TEMPLATES)
.on(CON_CAL_INSTANCE.TEMPLATE_ID.eq(CON_CAL_TEMPLATES.ID))
.where(CON_CAL_TEMPLATES.ENTRY_TYPE.in("REPT", "HRPT"))
.fetchOne(CON_CAL_INSTANCE.DATE.min());
So I have provided CON_CAL_INSTANCE.DATE.min()
in my select clause, why do I have to repeat it in fetchOne(CON_CAL_INSTANCE.DATE.min())
?
Or am I not doing this right?
You're doing it right. The way the jOOQ DSL is constructed with Java generics, your
ResultQuery<Record1<Date>>
doesn't "know" it is selecting only a single value, even if theResultQuery
usesRecord1
as a row type.Apart from repeating the column, you have some other options:
See also the
DSLContext.fetchValue()
Javadoc.Using a more LINQ-style syntax
On a side-note, there had been discussions in the past about using a more LINQ-style syntax in the jOOQ API:
What may look like a good idea at first is raising new questions:
ORDER BY
,FOR UPDATE
clauses, which should still be placed afterSELECT
. (See this post for details).UNION
,INTERSECT
andEXCEPT
.I've also written about the difference between lexical and logical order of operations in SQL, here
These open issues made us stick with the standard SQL syntax.