From d190cc7b6017528fc3ed9098b910c0f3edf843ca Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Sun, 31 Jul 2011 20:32:04 +0000 Subject: [PATCH] [#579] SQL syntax error when using Factory.selectOne() in a subquery - first implementation attempt --- jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java | 2 +- jOOQ/src/main/java/org/jooq/RenderContext.java | 12 ++++++++++++ .../java/org/jooq/impl/DefaultRenderContext.java | 11 +++++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java b/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java index d5d0bfefef..b01540d71c 100644 --- a/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java +++ b/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java @@ -3544,7 +3544,7 @@ public abstract class jOOQAbstractTest< assertEquals(Arrays.asList(1, 2, 3, 4), books.getValues(b_ID)); } - // @Test TODO [#579] re-enable this test when fixing this bug + // @Test // TODO [#579] re-enable this test when fixing this bug public void testUnaliasedSubqueryProjections() throws Exception { // Test whether unaliased literals in subquery projections are correctly // handled diff --git a/jOOQ/src/main/java/org/jooq/RenderContext.java b/jOOQ/src/main/java/org/jooq/RenderContext.java index eeb1e233d2..514128f9fe 100644 --- a/jOOQ/src/main/java/org/jooq/RenderContext.java +++ b/jOOQ/src/main/java/org/jooq/RenderContext.java @@ -47,6 +47,18 @@ package org.jooq; */ public interface RenderContext extends Context { + /** + * Peek the next alias that will be generated by {@link #nextAlias()} + */ + String peekAlias(); + + /** + * Return a new alias that is unique for the scope of one query. These + * aliases are sometimes needed when unaliased projections are defined in + * subqueries, which can lead to syntax errors. + */ + String nextAlias(); + /** * Render the context's underlying SQL statement */ diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultRenderContext.java b/jOOQ/src/main/java/org/jooq/impl/DefaultRenderContext.java index 0fd640bb27..ba05eb2542 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultRenderContext.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultRenderContext.java @@ -52,6 +52,7 @@ class DefaultRenderContext extends AbstractContext implements Ren private final StringBuilder sql; private boolean inline; + private int alias; DefaultRenderContext(Configuration configuration) { super(configuration); @@ -71,6 +72,16 @@ class DefaultRenderContext extends AbstractContext implements Ren // RenderContext API // ------------------------------------------------------------------------ + @Override + public final String peekAlias() { + return "alias_" + (alias + 1); + } + + @Override + public final String nextAlias() { + return "alias_" + (++alias); + } + @Override public final String render() { return sql.toString();