Using SQL Server FOR XML and FOR JSON Syntax on Other RDBMS With jOOQ
SQL Server supports transforming flat tabular SQL result sets into hierarchical structures by convention using the convenient FOR XML or FOR JSON syntaxes. This is really convenient and less verbose...
View ArticleCould we Have a Language That Hides Collections From Us?
I just fixed a bug. The fix required me to initialise an Object[] array with the init values for each type, instead of just null, i.e. false for boolean, 0 for int, 0.0 for double, etc. So, instead of...
View ArticleUse NATURAL FULL JOIN to compare two tables in SQL
There are a few ways to compare two similar tables in SQL. Assuming PostgreSQL syntax, we might have this schema: CREATE TABLE t1 (a INT, b INT, c INT); CREATE TABLE t2 (a INT, b INT, c INT); INSERT...
View ArticleHaving “constant” columns in foreign keys
I was asked a very interesting question on Twitter just now: @lukaseder quick q: in pg can I have a composite foreign key where one value is a constant… or do I have to store the constant in the table?...
View ArticleNesting Collections With jOOQ 3.14’s SQL/XML or SQL/JSON support
One of the main features of ORMs is M as in Mapping. Libraries like jOOQ help auto-mapping flat or nested database records onto Java classes that have the same structure as the SQL result set. The...
View ArticleUsing jOOQ 3.14 Synthetic Foreign Keys to Write Implicit Joins on Views
jOOQ has supported one of JPQL’s most cool features for a while now: implicit joins. Using jOOQ, you can navigate your to-one relationships in a type safe way, generating LEFT JOIN operations...
View ArticlejOOQ 3.14 Released With SQL/XML and SQL/JSON Support
jOOQ 3.14 has been released with support for SQL/XML, SQL/JSON, Kotlin code generation, embeddable types, and domain types, synthetic constraints, better MERGE support, and more SQL transformations. In...
View ArticleAutomatically Transform Oracle Style Implicit Joins to ANSI JOIN using jOOQ
While jOOQ is mostly being used as an internal SQL DSL for embedded, dynamic SQL in Java, where it offers the best solution on the market, jOOQ is increasingly also used for one of its secondary...
View ArticlejOOQ Internals: Pushing up SQL fragments
Over the past 13 years, jOOQ has accrued quite some internal features, which you, the user, are not exposed to. One very interesting feature is the capability for any arbitrary jOOQ expression tree...
View ArticleImplementing a generic REDUCE aggregate function with SQL
So, @rotnroll666 nerd sniped me again. Apparently, the Neo4j Cypher query language supports arbitrary reductions, just like any functional collection API, oh say, the JDK Stream API: Stream.of(2, 4,...
View ArticleTranslating Stored Procedures Between Dialects
In the past years, we’ve invested a lot of effort into improving our procedural language capabilities in jOOQ. What started with a simple internal API to support the emulations of DDL clauses like...
View ArticleSimulating Latency with SQL / JDBC
I’ve run across a fun little trick to simulate latency in your development environments when testing some SQL queries. Possible use-cases including to validate that backend latency won’t bring down...
View ArticleCalculating Pagination Metadata Without Extra Roundtrips in SQL
When paginating results in SQL, we use standard SQL OFFSET .. FETCH or a vendor specific version of it, such as LIMIT .. OFFSET. For example: SELECT first_name, last_name FROM actor ORDER BY actor_id...
View ArticleNever 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...
View ArticleUse IN List Padding to Your JDBC Application to Avoid Cursor Cache Contention...
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...
View ArticleHow 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:...
View ArticleUse 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λ...
View ArticleHow 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...
View ArticleQuickly 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....
View ArticlejOOQ 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...
View Article