The really tough test cases do not lie in the integration tests, but in the
code generation sub-project.
I am currently trying to assemble a SQL statement of this kind for the
Postgres code generation extension:

create().select(
>      Columns.COLUMN_NAME,
>      Columns.ORDINAL_POSITION,
>      create().decode()
>          .value(Columns.DATA_TYPE)
>          .when("ARRAY", create().select(formatType(ATTTYPID, ATTTYPMOD))
>              .from(PG_ATTRIBUTE)
>              .where(ATTRELID.equal((Field)
> create().plainSQLField(Columns.COLUMN_NAME + "::regclass")))
>
> .and(PgAttribute.ATTNAME.equal(Columns.COLUMN_NAME)).asField())
>              .otherwise(Columns.DATA_TYPE),
>      Columns.UDT_NAME)
> .from(COLUMNS)
> .where(Columns.TABLE_SCHEMA.equal(getSchemaName()))
> .and(Columns.TABLE_NAME.equal(getName()))
> .orderBy(Columns.ORDINAL_POSITION)
> .fetch();
>

This statement revealed lots of flaws to me, that are going to be fixed in
1.5.4:

   1. The CASE clause with nested select is causing syntax errors:
   https://sourceforge.net/apps/trac/jooq/ticket/220

   2. The CASE field expression cannot be retrieved from the resulting
   record easily, except if it were refactored out of the SQL statement, into a
   dedicated Field<?> variable:
   https://sourceforge.net/apps/trac/jooq/ticket/156

   3. The ::regclass type cast must be expressed in a plainSQL. General
   casting support is clearly desirable:
   https://sourceforge.net/apps/trac/jooq/ticket/215

These are interesting news! The above query nicely depicts the power of jOOQ
in creating complex SQL, but also points out that there is still a lot to
do!

Looking forward to more insight into release 1.5.4
Cheers
Lukas Eder

Reply via email to