Lukas Eder
banner
lukaseder.bsky.social
Lukas Eder
@lukaseder.bsky.social
Java Champion, creator of jOOQ, the best way to write SQL in Java.

Will mostly post about Java, SQL, jOOQ, programming humour, and write at https://blog.jooq.org
Fun discovery, the standard SQL aggregate FILTER clause can be emulated with Google SQL's (BigQuery, Spanner) aggregate HAVING clause.

This is especially useful when the default emulation using CASE doesn't work as NULL values should be preserved, e.g. in ARRAY_AGG()
github.com/jOOQ/jOOQ/is...
November 18, 2025 at 10:38 AM
Some RDBMS have a weird understanding of case sensitivity in identifiers.

Here's Google Spanner.
- Quoting doesn't affect case sensitivity
- DDL identifiers are case sensitive (though "duplicates" are not allowed)
- DML identifiers are not case sensitive
November 6, 2025 at 3:20 PM
OK found it. ARRAY_LOWER can help, I guess:
dbfiddle.uk/pxomTqPm
October 11, 2025 at 6:31 AM
But WITH ORDINALITY doesn't produce the indexes?
dbfiddle.uk/Ni0b2207

What does?
October 11, 2025 at 5:11 AM
Q: Does your RDBMS use zero-based or one-based indexing?
A: Yes
October 10, 2025 at 12:31 PM
This always struck me as one of the biggest cognitive dissonances in programming style guides
October 8, 2025 at 7:44 AM
Writing a CREATE TABLE statement in SQL be like
September 30, 2025 at 12:21 PM
Yeah, I've noticed that the Javadoc doesn't produce any actual content in the output .html files. IntelliJ warns about a dangling Javadoc comment. Eclipse 2025-03 (didn't check latest) pretends that it works as one would expect.
September 30, 2025 at 8:12 AM
Whaat, a Java record component cannot be deprecated by Javadoc, only by annotation? That looks like a bug in javac to me, no? The JLS doesn't mention Javadoc explicitly: docs.oracle.com/javase/specs...
September 29, 2025 at 11:49 AM
Every time I write new integration test for a jOOQ bug, I also write an integration test for an RDBMS bug
September 24, 2025 at 1:56 PM
Every. Time. Why. Does. It. Complain. 😬

Oooh, that's why. 😅
September 24, 2025 at 7:29 AM
"5 HoUrS oF TrIaL AnD ErRoR SaVeS YoU 10 MiNuTeS oF ReAdInG ThE DoCuMeNtAtIoN."

The documentation:
September 17, 2025 at 9:16 AM
Debugging jOOQ bugs be like
September 16, 2025 at 1:13 PM
PostgreSQL. Why do you betray me? Where are my nulls??
September 16, 2025 at 12:26 PM
Really? I'm assuming e.g. guava is formatted according to their rules, and it seems neat, though maybe a bit unusual for most Java devs (especially with the 2 space indentation)? But that's just taste.

I was thinking about dbeaver doing stuff like this
September 16, 2025 at 5:48 AM
For the *record*, u is a record type. Record types can be null, or have null values. In both cases they *are* null, but only one is *distinct* from null
September 16, 2025 at 5:43 AM
SQL can be so subtle, at times
September 15, 2025 at 4:17 PM
I mean, jOOQ isn't like that but many are, I think?
September 15, 2025 at 3:02 PM
It's so hard to be opinionated in programming
September 15, 2025 at 5:42 AM
My inbox before and after the CI/CD server noticed the short github outage.
September 11, 2025 at 1:29 PM
Those reviewers were just salty they didn't realise this is an optional area
September 10, 2025 at 7:29 AM
Finally 😬 @starbuxman.joshlong.com are you seeing this??
September 4, 2025 at 6:26 PM
Steam isn't responding, nooooo
September 4, 2025 at 2:01 PM
This is what I have in mind
September 3, 2025 at 9:39 AM
Apparently, the generated hashCode() implementation of Java 16 records is significantly slower in benchmarks than what could be hand-written, or e.g. Eclipse generated, probably due to additional stack frames and varargs allocation in Objects::hash

Details:
github.com/jOOQ/jOOQ/is...
August 27, 2025 at 1:35 PM