Sign in

Lukas Eder

@lukaseder.bsky.social
1.1K followers 35 following 602 posts

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 blog.jooq.org

PostsRepliesMedia
Lukas Eder @lukaseder.bsky.social · 24/09/2026
I have no idea how to make Eclipse plugins. I just made one using Claude, to syntax highlight and type check jOOQ's internal preprocessor tag syntax. It was a single prompt and it already works! This is otherworldly 🤯
141
Lukas Eder @lukaseder.bsky.social · 21/09/2026
Some weeks ago, a "harmless" DuckDB upgrade required a Ubuntu upgrade, which broke Testcontainers, Docker, and SQL Server on Ubuntu. I'm now upgrading 50 other things. We as an "engineering" field really suck at backwards compatibility, don't we?
190
Lukas Eder @lukaseder.bsky.social · 18/09/2026
I keep seeing people online who think that they have to write *all* SQL using the jOOQ DSL, once they're using jOOQ. This couldn't be further from the truth. Views are a wonderful tool in all SQL databases, allowing to create libraries of common SQL queries.
150
Lukas Eder @lukaseder.bsky.social · 10/09/2026
Man, I just asked Claude if it can find some unknown bugs in a class, and it found several just by looking at the code, e.g. github.com/jOOQ/jOOQ/is... This is really mind blowing technology! 🤯
230
Lukas Eder @lukaseder.bsky.social · 08/09/2026
SQL pro tip: Sprinkle a few extra zero width spaces across your database schema to make a coworker's day.
030
Lukas Eder @lukaseder.bsky.social · 07/09/2026
Say you like assignment expressions without saying you like assigment expressions. I'll go first
110
Lukas Eder @lukaseder.bsky.social · 26/08/2026
@sivalabs.in Hey there, I found your tweet here: x.com/sivalabs/sta... Can't reply there anymore, because I don't have an account. But what was the issue with the jOOQ Gradle plugin?
x.com
Siva (@sivalabs) on X
Started adding support jOOQ and got it done with Maven quickly. Then started exploring how to integrate with Gradle that should work with different databases and Flyway/Liquibase using Testcontainers. Then I went into rabbit hole of exploring various plugins and none of them
000
Lukas Eder @lukaseder.bsky.social · 04/08/2026
My wife came to the office today and saw my console compiling stuff and didn't believe I actually do this matrix shit other than just to impress her 😅
070
Lukas Eder @lukaseder.bsky.social · 02/07/2026
Do you prefer working with casts over UDT constructors? Starting with jOOQ 3.22, type safe UDT casts will be available
020
Reposted by Lukas Eder
SQLDaily @sqldaily.bsky.social · 17/06/2026
You can join tables with common column names with t1 JOIN t2 USING ( col ) But this leads to a trap! With t1 JOIN t2 USING ( c1 ) JOIN t3 USING ( c2 ) With c2 in just t2 and t3 this works But add c2 to t1 in the future it breaks 😖 @lukaseder.bsky.social demos
buff.ly
Avoiding SQL Ambiguities caused by JOIN USING and NATURAL JOIN
Discover the pitfalls of using SQL's NATURAL JOIN and JOIN USING syntax. Learn best practices for joining tables in production queries.
001
Lukas Eder @lukaseder.bsky.social · 10/06/2026
Fun fact: it is legal for a switch statement to have no cases at all
230
Lukas Eder @lukaseder.bsky.social · 04/06/2026
It's funny how some customers explicitly forbid using their logos on the jOOQ website, only for their engineers to tell just about anyone that they're using jOOQ at every occasion as well as talk to me about it in public 😅
090
Reposted by Lukas Eder
SQLDaily @sqldaily.bsky.social · 21/05/2026
There are joins that can only return rows from the left table Semi join => rows matching the right (IN or EXISTS) Anti join => rows not matching the right (NOT IN or NOT EXISTS) @lukaseder.bsky.social makes the case these should have their own #SQL syntax
buff.ly
Semi Join and Anti Join Should Have Their Own Syntax in SQL
Relational algebra nicely describes the various operations that we know in SQL as well from a more abstract, formal perspective. One of the most common relational JOIN operations is the “equi…
021
Lukas Eder @lukaseder.bsky.social · 19/05/2026
Good news for PostgreSQL / pgjdbc users! There's work on binary UDT serialisation support via JDBC's SQLData API: github.com/pgjdbc/pgjdb... I'm adding experimental support for it in jOOQ: github.com/jOOQ/jOOQ/is... This should speed up UDT support quite a bit!
github.com
feat: type cache rework, codec API, and composite-type round-trip by vlsi · Pull Request #3062 · pgjdbc/pgjdbc
The original goal was to fix TypeInfoCache: many Maps for navigating between oids, names, and other information — hard to maintain, hard to invalidate no support for identifier quoting or search_p...
060
Lukas Eder @lukaseder.bsky.social · 18/05/2026
Hey @vladmihalcea.bsky.social, do you have the source code for these benchmarks somewhere for reproduction? I want to check if the jOOQ single query case has some mapping related bottleneck (e.g. allocation) within jOOQ: www.youtube.com/watch?v=nrNY...
youtube.com
The best way to fetch multiple to-many relationships with Java by Vlad Mihalcea
YouTube video by v JUG
100
Lukas Eder @lukaseder.bsky.social · 07/05/2026
Just had a support case today where the solution was to use jOOQ's powerful anti join convenience: ctx .select(AUTHOR.ID) .from(AUTHOR) .where(notExists(AUTHOR .book())) That's something I often wish SQL had natively blog.jooq.org/simplifying-...
blog.jooq.org
Mastering ANTI JOIN in SQL with jOOQ: A Complete Guide
Discover the power of ANTI JOIN in SQL with jOOQ. Learn how to simplify complex queries and optimize your database interactions.
072
Lukas Eder @lukaseder.bsky.social · 04/05/2026
SQL's JOIN .. USING seems to be a really cool syntax to save time, but regrettably, it's not a good idea to use it in production queries: blog.jooq.org/why-join-usi...
blog.jooq.org
Avoiding SQL Ambiguities caused by JOIN USING and NATURAL JOIN
Discover the pitfalls of using SQL's NATURAL JOIN and JOIN USING syntax. Learn best practices for joining tables in production queries.
120
Reposted by Lukas Eder
beetle moses @beetlemoses.bsky.social · 03/05/2026
Classic
Two panel comic. Panel 1: a chameleon accusingly points and ask, “were you out with the boys again?” Panel 2: the other chameleon replies, “of course not.” Its skin pattern clearly depicts the boys in question, out partying.
28112511806
Lukas Eder @lukaseder.bsky.social · 06/04/2026
That looks like a fun session at @springio.net, wish I could be there :) 2026.springio.net/sessions/the...
2026.springio.net
Spring I/O • 13-15 • April • Barcelona 2026
010
Reposted by Lukas Eder
jOOQ @jooq.org · 27/03/2026
A small but cool new feature of jOOQ 3.21's commercial editions: redacted columns, which do not expose their contents to DEBUG logs and other text output: blog.jooq.org/managing-sen...
blog.jooq.org
Enhancing jOOQ Debug Logging for Safer Production Use
Discover jOOQ's powerful debug logging feature, perfect for developers, while ensuring sensitive data remains secure in production.
001
Lukas Eder @lukaseder.bsky.social · 26/03/2026
After 18 years of maknig jOOQ, I'm still discovering such subtle differences where trying to insert a long string into a VARCHAR(n) column will raise an error if too long, but casting it to VARCHAR(n) will silently truncate it, e.g. in PostgreSQL: github.com/jOOQ/jOOQ/is... SQL is full of surprises
github.com
Bind variable casts truncate VARCHAR(n) ARRAY contents instead of letting the target INSERT raise an error · Issue #19814 · jOOQ/jOOQ
A recently added integration test creates this table: create table "t" ( "dummy" int, "s0" varchar[], "s3" varchar(3)[], primary key ("dummy") ) And asserts that if inserting array['abcd'] into s3,...
231
Lukas Eder @lukaseder.bsky.social · 23/03/2026
Just work with Java, folks, because, you know... 😏
090
Lukas Eder @lukaseder.bsky.social · 19/03/2026
How many time zone bugs go undetected if developers are located in London (UTC)? and not some time zone where the offset produces tons of problems already at dev time?
210
Lukas Eder @lukaseder.bsky.social · 13/03/2026
Oh no, here goes my free time
140
Reposted by Lukas Eder
Catherine Edelveis @edelveis.dev · 10/03/2026
👾New on CyberJAR: A jOOQ Deep Dive ORM makes you suffer? Let's explore a SQL-first approach to persistence with jOOQ! This video covers type-safe SQL in Java for complex queries, CTE pipelines, nested result mappings, and dynamic query composition: www.youtube.com/watch?v=J47i...
youtube.com
jOOQ Deep Dive: CTE, MULTISET, and SQL Pipelines
YouTube video by CyberJAR
062
Lukas Eder @lukaseder.bsky.social · 10/03/2026
Man, I just love my job. Interesting problems, happy customers, the joys of a great product market fit, flexible work hours (and not too many anymore). Thanks to all you jOOQ customers out there, making this dream-come-true possible!
2130
Lukas Eder @lukaseder.bsky.social · 25/02/2026
Huh, interesting. It appears that PostgreSQL decided to go against the SQL standard here ISO/IEC 9075-2:2023(E) 6.34 <JSON value constructor> GR 4) b) i) says that empty tables should produce a JSON array with no elements (intuitively), not NULL. Why this behaviour in PG?
141
Lukas Eder @lukaseder.bsky.social · 23/02/2026
A View Is Not a Table: It Is a Controlled Integration Contract martinelli.ch/a-view-is-no...
martinelli.ch
A View Is Not a Table: It Is a Controlled Integration Contract - Martinelli
The recent article “Your Database Table is an awful API” claims that exposing database tables (or database-derived structures) as integration boundaries between systems is a bad idea. It warns about t...
030
Lukas Eder @lukaseder.bsky.social · 19/02/2026
Why Vaadin and jOOQ Are a Natural Fit for AI Driven Development martinelli.ch/why-vaadin-a...
martinelli.ch
Why Vaadin and jOOQ Are a Natural Fit for AI Driven Development - Martinelli
Over the last two years, I have been working heavily with AI-assisted and agent-based development. One observation keeps coming back: the choice of technology stack matters far more than most people t...
010
Lukas Eder @lukaseder.bsky.social · 27/01/2026
Could be worse
1120
Reposted by Lukas Eder
Markus Winand @winand.at · 22/01/2026
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
modern-sql.com
T616, “Null treatment option for LEAD and LAG functions”
T616, “Null treatment option for LEAD and LAG functions” in SQL
173
Reposted by Lukas Eder
Catherine Edelveis @edelveis.dev · 14/01/2026
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?
022
Lukas Eder @lukaseder.bsky.social · 07/01/2026
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.
github.com
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...
020
Reposted by Lukas Eder
jOOQ @jooq.org · 05/01/2026
One Query, Complete Object Graphs: Nested DTOs with jOOQ MULTISET martinelli.ch/one-query-co... by @martinelli.ch
martinelli.ch
One Query, Complete Object Graphs: Nested DTOs with jOOQ MULTISET - Martinelli
In my previous post about Open Session in View, I explored how this default Spring Boot setting can hide serious performance problems. The N+1 query problem sits behind a system that looks correct in ...
043
Lukas Eder @lukaseder.bsky.social · 15/12/2025
“There are only two tragedies in life: one is not getting what one wants, and the other is getting it.” ― Oscar Wilde
080
Lukas Eder @lukaseder.bsky.social · 25/11/2025
My disappointment when SQL dialects choose this kind of name resolution strategy is very very deep
120
Lukas Eder @lukaseder.bsky.social · 25/11/2025
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 🫠
281
Reposted by Lukas Eder
Jérémy DECOOL @jdecool.bsky.social · 20/11/2025
🇫🇷 jOOQ et le code legacy: 1/ shodo.io/jooq-et-le-code-legacy-1 2/ shodo.io/jooq-et-le-code-legacy-2
112
Lukas Eder @lukaseder.bsky.social · 24/11/2025
Huh, has Oracle stopped publishing commits to the MySQL github repo? github.com/mysql/mysql-... github.com/mysql/mysql-...
github.com
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
183
Lukas Eder @lukaseder.bsky.social · 19/11/2025
🤯
050
Lukas Eder @lukaseder.bsky.social · 18/11/2025
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...
010
Lukas Eder @lukaseder.bsky.social · 10/11/2025
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...
github.com
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...
0103
Lukas Eder @lukaseder.bsky.social · 06/11/2025
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
020
Reposted by Lukas Eder
Gerald Venzl @gvenzl.bsky.social · 04/11/2025
gvenzl/oracle-free images are now available for #Oracle AI #Database 23.26.0!
geraldonit.com
Oracle AI Database 23.26.0 Free multi-platform images now available on gvenzl/oracle-free
Oracle AI Database 23.26.0 Free multi-platform images are now available on container registries docker.io/gvenzl/oracle-free and ghcr.io/gvenzl/oracle-free. With this release, 23.8 images have now gone into Unsupported. See the support matrix for more information.
31411
Lukas Eder @lukaseder.bsky.social · 30/10/2025
This is... something: aws.amazon.com/de/blogs/big...
aws.amazon.com
Amazon Redshift Python user-defined functions will reach end of support after June 30, 2026 | Amazon Web Services
The Amazon Redshift integration with AWS Lambda provides the capability to create Amazon Redshift Lambda user-defined functions (UDFs). Because Lambda UDFs provide these significant advantages in inte...
000
Lukas Eder @lukaseder.bsky.social · 29/10/2025
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
150
Lukas Eder @lukaseder.bsky.social · 29/10/2025
What on earth is AWS Clean Rooms SQL?? docs.aws.amazon.com/clean-rooms/...
docs.aws.amazon.com
Overview of SQL in AWS Clean Rooms - AWS Clean Rooms
Learn about the types of SQL functions you can use in AWS Clean Rooms.
000
Lukas Eder @lukaseder.bsky.social · 23/10/2025
Recursive generics are so tricky to grasp because they rely on grasping recursive generics.
070
Lukas Eder @lukaseder.bsky.social · 20/10/2025
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...
downloads.bouncycastle.org
BouncyCastleProvider (Bouncy Castle Library 1.81 API Specification)
030
Lukas Eder @lukaseder.bsky.social · 20/10/2025
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!?
171