jOOQ 3.15 shipped with a ton of new features, the most important ones being: MULTISET support (type safe, nested collections)Reactive SQL support via R2DBC A very useful, lesser known new feature is "ad-hoc data type conversion". Data type converters and bindings have been around in jOOQ for a long time. Their goal is to allow … Continue reading Ad-hoc Data Type Conversion with jOOQ 3.15
Reactive SQL with jOOQ 3.15 and R2DBC
One of the biggest new features of the recently released jOOQ 3.15 is its new support for reactive querying via R2DBC. This has been a highly popular feature request, and we finally delivered on it. You can continue using jOOQ the way you were used to, providing you with type safe, embedded SQL in Java, … Continue reading Reactive SQL with jOOQ 3.15 and R2DBC
3.15.0 Release with Support for R2DBC, Nested ROW, ARRAY, and MULTISET types, 5 new SQL dialects, CREATE PROCEDURE, FUNCTION, and TRIGGER support and Much More
R2DBC What a lot of users have been waiting for: jOOQ 3.15 is reactive, thanks to the new native R2DBC integration. Recent versions already implemented the reactive streams Publisher SPI, but now we're not cheating anymore. We're not longer blocking. Just wrap your R2DBC ConnectionFactory configured jOOQ query in a Flux (or any reactive streams … Continue reading 3.15.0 Release with Support for R2DBC, Nested ROW, ARRAY, and MULTISET types, 5 new SQL dialects, CREATE PROCEDURE, FUNCTION, and TRIGGER support and Much More
jOOQ 3.15’s New Multiset Operator Will Change How You Think About SQL
This is how SQL should have been used all along. They called it The Third Manifesto, ORDBMS, or other things. Regrettably, it never really took off. Because most vendors didn't adopt it. And those who did, didn't agree on syntax. But this is about to change. Thanks to the now ubiquitous SQL/JSON support (which jOOQ … Continue reading jOOQ 3.15’s New Multiset Operator Will Change How You Think About SQL
Quickly Trying out jOOQ with Jbang!
jbang is a relatively new utility that ... ... lets students, educators and professional developers create, edit and run self-contained source-only Java programs with unprecedented ease. Sounds exciting. How does it work with jOOQ? Very easy! Set it up like this (other installation options here): curl -Ls https://sh.jbang.dev | bash -s - app setup And … Continue reading Quickly Trying out jOOQ with Jbang!
How to Prevent Execution Plan Troubles when Querying Skewed Data, with jOOQ
One of the biggest advantages of using jOOQ is that you can change all of your complex application's generated SQL with just a few lines of code. In this article, we'll look into how to solve some common bind peeking issues just like that, without touching your application code, without the need to explain this … Continue reading How to Prevent Execution Plan Troubles when Querying Skewed Data, with jOOQ
Use ResultQuery.collect() to Implement Powerful Mappings
In our opinion, any Iterable<T> should offer a <R> collect(Collector<T, ?, R>) method to allow for transforming the the content to something else using standard JDK collectors, jOOλ collectors from org.jooq.lambda.Agg or your own. When using jOOQ, you don't have to wait for the JDK to finally add these useful utilities to the Iterable API. … Continue reading Use ResultQuery.collect() to Implement Powerful Mappings
How to Get an RDBMS Server Version with SQL
Do you need to know what RDBMS Server version you're on, and you only have SQL at your disposal? No problem. Most RDBMS provide you with that information in some form of meta data table. Here's how: -- ClickHouse select version(); -- CockroachDB select version(); -- Db2 select service_level from table (sysproc.env_get_inst_info()) t -- Derby … Continue reading How to Get an RDBMS Server Version with SQL
Use IN List Padding to Your JDBC Application to Avoid Cursor Cache Contention Problems
A problem few developers are aware of is the possibility of running into "cursor cache contention" or "execution plan cache contention" problems when using IN lists in SQL. The problem that is described in lengths in previous articles, can be summarised as this. All of these are distinct SQL queries and need to be parsed … Continue reading Use IN List Padding to Your JDBC Application to Avoid Cursor Cache Contention Problems
Never Again Forget to Call .execute() in jOOQ
jOOQ's DSL, like any fluent API, has one big caveat. It's very easy to forget to call .execute(). And when you do, chances are, you're going to be staring at your code for minutes, because everything looks perfect: ctx.insertInto(T) .columns(T.A, T.B) .values(1, 2); Staring... staring... staring... Why is it not inserting that row? "Aaaah, not … Continue reading Never Again Forget to Call .execute() in jOOQ
