A very refreshing point of view about language design

Have fun: http://joshondesign.com/2012/03/09/open-letter-language-designers

Which database are you using jOOQ with?

I'd like to "feel" the needs of my users. That's why it's interesting to know for which databases I should add features next. Which database are you using jOOQ with?

Blog has “moved”

The jOOQ blog has moved to a new domain: https://blog.jooq.org/ The old wordpress domain will still be active, though

The Visitor Pattern Re-visited

The visitor pattern is one of the most overrated and yet underestimated patterns in object-oriented design. Overrated, because it is often chosen too quickly (possibly by an architecture astronaut), and then bloats an otherwise very simple design, when added in the wrong way. Underestimated, because it can be very powerful, if you don't follow the … Continue reading The Visitor Pattern Re-visited

CROSS JOIN, a nice example for a rarely used operation

In 95% of the cases, cartesian products originate from accidental cross join operations and cause unnecessary high load on a database. Maybe the results aren't even wrong, as someone may have applied a UNION or a DISTINCT keyword, to remove unwanted duplicates. But there are those 5% of SQL queries, where the cartesian product is … Continue reading CROSS JOIN, a nice example for a rarely used operation

Advanced SQL: Relational division in jOOQ

Relational algebra has its treats. One of the most academic features is the relational division. It is hardly ever used, but comes in handy every now and then. And when you need it, you'll probably hate yourself for having slept during the relevant classes at the university. What is relational division? Relational division is the … Continue reading Advanced SQL: Relational division in jOOQ

jOOQ compared to iBatis

Nice feedback from a jOOQ user comparing it with iBATIS: jOOQ rocks! We implemented a large scale ETL service with it, and couldn't be happier. I've used iBATIS, and jOOQ gives all the same advantages of low level SQL without the reams of XML and lack of type safety. [...] one of the best features … Continue reading jOOQ compared to iBatis

Subtle SQL differences: IDENTITY columns

As I'm mostly using Oracle, IDENTITY columns were not so important to me up until I started to support them in jOOQ. Then, I found that yet again, there are many differences between various databases in how they handle IDENTITY columns in DDL and in DML. In SQL, there are essentially three orthogonal concepts of … Continue reading Subtle SQL differences: IDENTITY columns

Binary data in SQL, more trivia

Yesterday, I blogged about inlining boolean literals in SQL. This goes on with other data types. Let's look at BLOBs and BINARY data in general. This is also defined in SQL standards, not in SQL 1992, though: <binary string literal> ::=   X <quote> [ <space>... ]   [ { <hexit> [ <space>... ] <hexit> … Continue reading Binary data in SQL, more trivia

SQL and booleans, some trivia

Some trivia about SQL and booleans: SQL 1992 defines three values for a boolean: <truth value> ::= TRUE | FALSE | UNKNOWN True booleans aren't always supported, though. Here's the truth table of boolean support: SQL DialectSupports booleansDB20 (use 1/0 instead)Derbytrue (you can safely use true/false)H2trueHSQLDBtrueIngrestrueMySQLtrueOracle0PostgrestrueSQL Server0SQLite0Sybase ASE0Sybase SQL Anywhere0 Trivia... but nice to know.