From 24d1b421ae1ff42408492c4200fc55e4715e6f3e Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Fri, 11 Apr 2014 14:07:39 +0200 Subject: [PATCH] [#454] Fixed CTE and aliasing with derived column lists --- .../org/jooq/test/_/testcases/CTETests.java | 33 +++++++++++++++++-- .../src/org/jooq/test/jOOQAbstractTest.java | 14 ++++++-- .../org.eclipse.core.resources.prefs | 1 + jOOQ/src/main/java/org/jooq/impl/Alias.java | 10 +++--- 4 files changed, 49 insertions(+), 9 deletions(-) diff --git a/jOOQ-test/src/org/jooq/test/_/testcases/CTETests.java b/jOOQ-test/src/org/jooq/test/_/testcases/CTETests.java index 6575cf8af8..deb2e2b61e 100644 --- a/jOOQ-test/src/org/jooq/test/_/testcases/CTETests.java +++ b/jOOQ-test/src/org/jooq/test/_/testcases/CTETests.java @@ -94,7 +94,7 @@ extends BaseTest> t1 = name("t1").fields("f1", "f2").as(select(val(1), val("a"))); CommonTableExpression> t2 = name("t2").fields("f3", "f4").as(select(val(2), val("b"))); @@ -150,8 +152,14 @@ extends BaseTest> t1 = name("t1").fields("f1", "f2").as(select(val(1), val("a"))); + CommonTableExpression> t2 = name("t2").fields("f3", "f4").as(select(val(2), val("b"))); + // Try renaming the CTEs when referencing them Table> a1 = t1.as("a1"); Table> a2 = t2.as("a2"); @@ -174,9 +182,28 @@ extends BaseTest> b1 = t1.as("a1", "i1", "s1"); + Table> b2 = t2.as("a2", "i2", "s2"); + Result result4 = + create().with(t1) + .with(t2) + .select( + b1.field("i1").add(b2.field("i2")).as("add"), + b1.field("s1").concat(b2.field("s2")).as("concat")) + .from(b1, b2) + .fetch(); + + assertEquals(1, result4.size()); + assertEquals(2, result4.fields().length); + assertEquals("add", result4.field(0).getName()); + assertEquals("concat", result4.field(1).getName()); + assertEquals(Integer.class, result4.field(0).getType()); + assertEquals(String.class, result4.field(1).getType()); + assertEquals(3, result4.getValue(0, 0)); + assertEquals("ab", result4.getValue(0, 1)); - // TODO: Test aliasing CTE with derived column lists : a1(x1, x2) // TODO: Test CTE with no explicit column lists // TODO: Test recursive CTE // TODO: Test CTE with UNIONs (may not work due to #1658) diff --git a/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java b/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java index 94f06b0ec7..db418255e6 100644 --- a/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java +++ b/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java @@ -2023,8 +2023,18 @@ public abstract class jOOQAbstractTest< } @Test - public void testCTE() throws Exception { - new CTETests(this).testCTE(); + public void testCTESimple() throws Exception { + new CTETests(this).testCTESimple(); + } + + @Test + public void testCTEMultiple() throws Exception { + new CTETests(this).testCTEMultiple(); + } + + @Test + public void testCTEAliasing() throws Exception { + new CTETests(this).testCTEAliasing(); } @Test diff --git a/jOOQ/.settings/org.eclipse.core.resources.prefs b/jOOQ/.settings/org.eclipse.core.resources.prefs index 839d647eef..a37cfca45c 100644 --- a/jOOQ/.settings/org.eclipse.core.resources.prefs +++ b/jOOQ/.settings/org.eclipse.core.resources.prefs @@ -2,4 +2,5 @@ eclipse.preferences.version=1 encoding//src/main/java=UTF-8 encoding//src/main/resources=UTF-8 encoding//src/test/java=UTF-8 +encoding//target/generated-sources/xjc=UTF-8 encoding/=UTF-8 diff --git a/jOOQ/src/main/java/org/jooq/impl/Alias.java b/jOOQ/src/main/java/org/jooq/impl/Alias.java index f0dd051c3e..30dd818958 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Alias.java +++ b/jOOQ/src/main/java/org/jooq/impl/Alias.java @@ -122,10 +122,12 @@ class Alias extends AbstractQueryPart { SQLDialect dialect = context.configuration().dialect(); boolean simulateDerivedColumnList = false; - // [#1801] Some databases don't allow "derived column names" in - // "simple class specifications". Hence, wrap the table reference in - // a subselect - if (fieldAliases != null && asList(CUBRID, FIREBIRD).contains(dialect.family()) && wrapped instanceof TableImpl) { + // [#454] [#1801] Some databases don't allow "derived column names" in + // "simple class specifications", or "common table expression references". + // Hence, wrap the table reference in a subselect + if (fieldAliases != null + && asList(CUBRID, FIREBIRD).contains(dialect.family()) + && (wrapped instanceof TableImpl || wrapped instanceof CommonTableExpressionImpl)) { @SuppressWarnings("unchecked") Select select =