Thank you, that helps somewhat. You're basically saying that me specifying a column (fetchOne(state)) just fetches the first index instead, yes? I verified this behavior by mocking a bad result where two columns switched places (select(id, state) returns result "state,id").
I am still a bit unsure about the correct approach to writing a test that verifies that the query is selecting the correct column name (ignoring the topic of whether there is any real point to doing this in the first place). Maybe it's more effort than it's actually worth? It's not a huge deal really, but as a jOOQ-rookie I figured I should try to figure out if it is doable! onsdag 29. november 2017 12.41.29 UTC+1 skrev Lukas Eder følgende: > > Hello > > 2017-11-29 12:21 GMT+01:00 <[email protected] <javascript:>>: > >> Also works fine for some reason, even though the mock returns a record >> containing a state-field? Maybe I'm doing something wrong or have the wrong >> expectations about how mocking works, but it looks like the >> fetchOne-function doesn't care about the field name? >> > > The fetchOne() method doesn't influence how the query is executed in any > way, it simply specifies how the result should be processed, once it is > available (i.e. it fetches at most one record and in your case, only one > column from that record). > > So, the interesting part is the select() clause, which tells jOOQ that the > query expects exactly one column of a given type. Now that the row type is > known to jOOQ (and jOOQ expects JDBC drivers to produce something > reasonable, and this includes your MockDataProvider), jOOQ doesn't have to > rely on any column name but can access the result values by index - which > is much faster in most JDBC drivers. > > If you didn't provide any columns in the select() clause and the from() > clause also didn't provide the entirety of all columns (e.g. because there > is plain SQL involved), then jOOQ would detect reported column names from > the JDBC driver through ResultSetMetaData. > > >> Like I said, the test can prove that the query itself is written wrong >> (selecting state but fetching id), but it can't prove that you aren't >> trying to correctly access a completely different column (selecting and >> fetching id-column when mock returns state-column). >> > > You got the "wrong" part wrong. The query isn't written wrong. It's just > that your MockDataProvider will always return that particular 1x1 result > and since jOOQ already knows the resulting rowtype in advance (you provided > it), it doesn't check ResultSetMetaData for what the *actual* column names > and types might be. > > I 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.
