From 63dcbd56a4635682afb3536d211f8e854d5a618c Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Tue, 17 Jan 2012 19:31:05 +0000 Subject: [PATCH] [#582] Simulate JOIN USING syntax, where this is unavailable --- .../src/org/jooq/test/jOOQAbstractTest.java | 12 ------- .../main/java/org/jooq/impl/JoinTable.java | 33 +++++++++++++++++-- 2 files changed, 30 insertions(+), 15 deletions(-) diff --git a/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java b/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java index afab1a90b2..6211360ab6 100644 --- a/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java +++ b/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java @@ -5850,18 +5850,6 @@ public abstract class jOOQAbstractTest< @Test public void testJoinUsing() throws Exception { - // TODO [#582] Simulate this - - switch (getDialect()) { - case ASE: - case DB2: - case H2: - case SQLSERVER: - case SYBASE: - log.info("SKIPPING", "JOIN USING tests"); - return; - } - Result result = create().select(TAuthor_LAST_NAME(), TBook_TITLE()) .from(TAuthor()) diff --git a/jOOQ/src/main/java/org/jooq/impl/JoinTable.java b/jOOQ/src/main/java/org/jooq/impl/JoinTable.java index 68a2e74387..12c21b54a0 100644 --- a/jOOQ/src/main/java/org/jooq/impl/JoinTable.java +++ b/jOOQ/src/main/java/org/jooq/impl/JoinTable.java @@ -151,9 +151,36 @@ class JoinTable extends AbstractTable implements TableOnStep, TableOnCon private void toSQLJoinCondition(RenderContext context) { if (!using.isEmpty()) { - context.sql(" using ("); - Util.toSQLNames(context, using); - context.sql(")"); + + switch (context.getDialect()) { + // [#582] Some dialects don't explicitly support a JOIN .. USING + // syntax. This can be simulated with JOIN .. ON + case ASE: + case DB2: + case H2: + case SQLSERVER: + case SYBASE: { + context.sql(" on "); + String glue = ""; + + for (Field field : using) { + context.sql(glue) + .sql(lhs.getField(field)) + .sql(" = ") + .sql(rhs.getField(field)); + + glue = " and "; + } + + break; + } + + default: { + context.sql(" using ("); + Util.toSQLNames(context, using); + context.sql(")"); + } + } } else { context.sql(" on ").sql(condition);