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
Pinned
Me, when I started making jOOQ vs me today
Could be worse
January 27, 2026 at 10:23 AM
Reposted by Lukas Eder
LEAD(x) IGNORE NULLS OVER(ORDER BY n)

Not very often, but when I need IGNORE NULLS, then I really miss it in PostgreSQL.

modern-sql.com/caniuse/T616
T616, “Null treatment option for LEAD and LAG functions”
T616, “Null treatment option for LEAD and LAG functions” in SQL
modern-sql.com
January 22, 2026 at 12:47 PM
Reposted by Lukas Eder
The love/hate Hibernate topic hasn't lost it's relevance: the video sparkled a nice conversation on Reddit www.reddit.com/r/java/comme...

What is your stance, friends? What do you prefer, ORM or JDBC/jOOQ?
👾New on CyberJAR: Hibernate, Ditch or Double Down?

What Hibernate does under the hood, in which scenarios it shines, how you can fall into a trap, and when SQL-first approach is better?
And can you have the best of two worlds in one #Java app?
Watch and find out ->

www.youtube.com/watch?v=J12v...
Hibernate: Ditch or Double Down? When ORM Isn't Enough
YouTube video by CyberJAR
www.youtube.com
January 14, 2026 at 1:22 PM
This little API change allows for omitting some syntactic ceremony when working with EXISTS subqueries in jOOQ:
github.com/jOOQ/jOOQ/is...

E.g. you can now write:

ctx. select(AUTHOR, exists(AUTHOR. book()))
.from(AUTHOR)

Instead of spelling out the complete correlated subquery.
Change exists(Select<?>) to exists(TableLike<?>) for convenience · Issue #19568 · jOOQ/jOOQ
When checking for existence of records in a table, it could be convenient to be able to write exists(MY_TABLE) instead of exists(selectOne().from(MY_TABLE)). This is especially true when working wi...
github.com
January 7, 2026 at 4:13 PM
Reposted by Lukas Eder
“There are only two tragedies in life: one is not getting what one wants, and the other is getting it.”
― Oscar Wilde
December 15, 2025 at 9:39 AM
My disappointment when SQL dialects choose this kind of name resolution strategy is very very deep
November 25, 2025 at 12:28 PM
Man, I've been doing jOOQ for 15+ years now and I still write flaky tests due to missing ORDER BY clauses, and thus non-deterministic result set ordering 🫠
November 25, 2025 at 12:03 PM
Reposted by Lukas Eder
November 20, 2025 at 8:02 AM
Huh, has Oracle stopped publishing commits to the MySQL github repo?

github.com/mysql/mysql-...
github.com/mysql/mysql-...
Commits · mysql/mysql-server
MySQL Server, the world's most popular open source database, and MySQL Cluster, a real-time, open source transactional database. - Commits · mysql/mysql-server
github.com
November 24, 2025 at 7:34 AM
🤯
Coming in Oracle AI Database

#SQL assertions

These enable you to create cross row, cross table constraints with SQL standard syntax

CREATE ASSERTION … CHECK (
[ NOT ] EXISTS ( )
)

@toonkoppelaars.bsky.social explains at #DOAG2025
November 19, 2025 at 1:20 PM
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
Due to the Liquibase license change to the FSL, I've deprecated the LiquibaseDatabase, which is used for jOOQ code generation:
github.com/jOOQ/jOOQ/is...

Going forward, the recommended way to integrate Liquibase with jOOQ is by using testcontainers: blog.jooq.org/using-testco...
Deprecate LiquibaseDatabase · Issue #19353 · jOOQ/jOOQ
The LiquibaseDatabase includes a liquibase dependency on version 4.x of Liquibase: https://www.jooq.org/doc/latest/manual/code-generation/codegen-meta-sources/codegen-liquibase/ This issue has show...
github.com
November 10, 2025 at 1:31 PM
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
What do you folks think? Is this a good email footer?

“The bureaucracy is expanding to meet the needs of the expanding bureaucracy.”
― Oscar Wilde
October 29, 2025 at 12:53 PM
What on earth is AWS Clean Rooms SQL??
docs.aws.amazon.com/clean-rooms/...
Overview of SQL in AWS Clean Rooms - AWS Clean Rooms
Learn about the types of SQL functions you can use in AWS Clean Rooms.
docs.aws.amazon.com
October 29, 2025 at 8:49 AM
Recursive generics are so tricky to grasp because they rely on grasping recursive generics.
October 23, 2025 at 12:18 PM
Did we as an industry just collectively agree that "bouncy castle" is a very secure sounding term for a "security provider," yes?

downloads.bouncycastle.org/java/docs/bc...
BouncyCastleProvider (Bouncy Castle Library 1.81 API Specification)
downloads.bouncycastle.org
October 20, 2025 at 1:11 PM
So, we now have:

- BigQuery
- ClickHouse
- Databricks
- DuckDB
- Exasol
- H2
- Snowflake
- Teradata (the inventor, I think?)

And now also:

- Oracle!

I'm assuming MySQL will follow suit, soon? PostgreSQL, when!?
Apply the Oct 2025 Release Update and Oracle Database 23ai becomes Oracle AI Database 26ai

This adds the QUALIFY clause

QUALIFY filters window functions after grouping
Like the HAVING clause does for aggregate functions

SELECT ... FROM ...
QUALIFY fn OVER ( ... ) > ...
October 20, 2025 at 12:13 PM
Reposted by Lukas Eder
Apply the Oct 2025 Release Update and Oracle Database 23ai becomes Oracle AI Database 26ai

This adds the QUALIFY clause

QUALIFY filters window functions after grouping
Like the HAVING clause does for aggregate functions

SELECT ... FROM ...
QUALIFY fn OVER ( ... ) > ...
October 20, 2025 at 11:02 AM
Well, that's something! The Derby Database is unsupported ("retired"). It has been around forever, I'm kinda feeling nostalgic about this...

issues.apache.org/jira/browse/...
[DERBY-7177] Retire Derby - ASF JIRA
issues.apache.org
October 16, 2025 at 8:52 AM
Q: Does your RDBMS use zero-based or one-based indexing?
A: Yes
October 10, 2025 at 12:31 PM
Reposted by Lukas Eder
Are you making any of these common #SQL mistakes?

Forgetting about NULL
Processing data in Java memory
Using JDBC Pagination to paginate large results
Using aggregate instead of window functions

@lukaseder.bsky.social explains what to do instead & lists 7 more
10 Common Mistakes Java Developers Make when Writing SQL
This article is part of a series. You might also like: 10 More Common Mistakes Java Developers Make when Writing SQLYet Another 10 Common Mistakes Java Developers Make When Writing SQL Java develop…
buff.ly
October 8, 2025 at 11:02 AM