From 3546388af14c3f87bb42587639716aa845089532 Mon Sep 17 00:00:00 2001 From: lukaseder Date: Mon, 12 Feb 2018 10:33:23 +0100 Subject: [PATCH] [#1502] Proper formatting of generated implicit JOIN --- .../main/java/org/jooq/impl/AbstractContext.java | 1 + .../java/org/jooq/impl/DefaultRenderContext.java | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractContext.java b/jOOQ/src/main/java/org/jooq/impl/AbstractContext.java index 10d0c33025..6d8c36c880 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractContext.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractContext.java @@ -749,6 +749,7 @@ abstract class AbstractContext> extends AbstractScope imple static class ScopeStackElement { int[] positions; + int indent; JoinNode joinNode; } diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultRenderContext.java b/jOOQ/src/main/java/org/jooq/impl/DefaultRenderContext.java index 0ea49cf9c1..0db91ce780 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultRenderContext.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultRenderContext.java @@ -170,6 +170,7 @@ class DefaultRenderContext extends AbstractContext implements Ren void scopeMarkStart0(QueryPart part) { ScopeStackElement e = scopeStack.get(part); e.positions = new int[] { sql.length(), -1 }; + e.indent = indent; } @Override @@ -225,9 +226,20 @@ class DefaultRenderContext extends AbstractContext implements Ren continue outer; if (!e1.joinNode.children.isEmpty()) { - String replaced = "(" + DSL.using(configuration).renderContext().declareTables(true).render(e1.joinNode.joinTree()) + ")"; - sql.replace(e1.positions[0], e1.positions[1], replaced); + String replaced = configuration + .dsl() + .renderContext() + .declareTables(true) + .sql('(') + .formatIndentStart(e1.indent) + .formatIndentStart() + .formatNewLine() + .visit(e1.joinNode.joinTree()) + .formatNewLine() + .sql(')') + .render(); + sql.replace(e1.positions[0], e1.positions[1], replaced); int shift = replaced.length() - (e1.positions[1] - e1.positions[0]); inner: