From 5cc7164c76f53c3333b202feb6932372bc42ec40 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Thu, 7 May 2020 10:47:18 +0200 Subject: [PATCH] [jOOQ/jOOQ#7262] Improve formatting of dual emulations --- jOOQ/src/main/java/org/jooq/impl/Dual.java | 38 +++++++++++++++------ jOOQ/src/main/java/org/jooq/impl/Names.java | 1 + 2 files changed, 28 insertions(+), 11 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/Dual.java b/jOOQ/src/main/java/org/jooq/impl/Dual.java index a20e157e3a..bf452aed9b 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Dual.java +++ b/jOOQ/src/main/java/org/jooq/impl/Dual.java @@ -40,7 +40,14 @@ package org.jooq.impl; import static org.jooq.impl.DSL.inline; import static org.jooq.impl.DSL.select; +import static org.jooq.impl.Keywords.K_AS; +import static org.jooq.impl.Keywords.K_FROM; +import static org.jooq.impl.Keywords.K_LIMIT; +import static org.jooq.impl.Keywords.K_SELECT; +import static org.jooq.impl.Keywords.K_WHERE; +import static org.jooq.impl.Names.N_COUNT; import static org.jooq.impl.Names.N_DUAL; +import static org.jooq.impl.SQLDataType.INTEGER; import org.jooq.Context; import org.jooq.Field; @@ -66,17 +73,13 @@ final class Dual extends AbstractTable { - static final String DUAL_HSQLDB = "select 1 as dual from information_schema.system_users limit 1"; - - - - - static final Name DUAL_FIREBIRD = DSL.unquotedName("RDB$DATABASE"); - static final Name DUAL_CUBRID = DSL.unquotedName("db_root"); - static final Name DUAL_DERBY = DSL.unquotedName("SYSIBM", "SYSDUMMY1"); + private static final Name DUAL_FIREBIRD = DSL.unquotedName("RDB$DATABASE"); + private static final Name DUAL_CUBRID = DSL.unquotedName("db_root"); + private static final Name DUAL_DERBY = DSL.unquotedName("SYSIBM", "SYSDUMMY1"); + private static final Name DUAL_HSQLDB = DSL.unquotedName("INFORMATION_SCHEMA", "SYSTEM_USERS"); private final boolean force; @@ -142,7 +145,12 @@ final class Dual extends AbstractTable { break; case HSQLDB: - ctx.sql('(').sql(DUAL_HSQLDB).sql(") as dual"); + ctx.sql('(').formatIndentStart().formatNewLine() + .visit(K_SELECT).sql(" 1 ").visit(K_AS).sql(' ').visit(N_DUAL).formatSeparator() + .visit(K_FROM).sql(' ').visit(DUAL_HSQLDB).formatSeparator() + .visit(K_LIMIT).sql(" 1").formatIndentEnd().formatNewLine() + .sql(") ").visit(K_AS).sql(' ').visit(N_DUAL); + break; case CUBRID: @@ -168,6 +176,15 @@ final class Dual extends AbstractTable { + + + + + + + + + @@ -191,8 +208,7 @@ final class Dual extends AbstractTable { default: - // [#7421] must not use N_DUAL as quoting doesn't work in e.g. MySQL - ctx.sql("dual"); + ctx.visit(N_DUAL); break; } } diff --git a/jOOQ/src/main/java/org/jooq/impl/Names.java b/jOOQ/src/main/java/org/jooq/impl/Names.java index 7329cc8241..9864e37eac 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Names.java +++ b/jOOQ/src/main/java/org/jooq/impl/Names.java @@ -78,6 +78,7 @@ final class Names { static final Name N_CONVERT = unquotedName("convert"); static final Name N_COSH = unquotedName("cosh"); static final Name N_COT = unquotedName("cot"); + static final Name N_COUNT = unquotedName("count"); static final Name N_COUNTSET = unquotedName("countset"); static final Name N_CURRENT_BIGDATETIME = unquotedName("current_bigdatetime"); static final Name N_CURRENT_DATE = unquotedName("current_date");