[#1502] Avoid replacing table expressions in the absence of join graphs

This commit is contained in:
lukaseder 2018-02-09 16:18:56 +01:00
parent 47b5551982
commit 724739ca88
2 changed files with 15 additions and 13 deletions

View File

@ -61,11 +61,11 @@ import static org.jooq.SQLDialect.POSTGRES;
import static org.jooq.SQLDialect.SQLITE;
// ...
// ...
import static org.jooq.impl.DSL.asterisk;
import static org.jooq.impl.DSL.falseCondition;
import static org.jooq.impl.DSL.field;
import static org.jooq.impl.DSL.select;
import static org.jooq.impl.Keywords.K_AS;
import static org.jooq.impl.Tools.list;
import static org.jooq.impl.Tools.DataKey.DATA_UNALIAS_ALIASES_IN_ORDER_BY;
import java.util.EnumSet;
@ -145,7 +145,7 @@ final class Alias<Q extends QueryPart> extends AbstractQueryPart {
&& (wrapped instanceof TableImpl || wrapped instanceof CommonTableExpressionImpl)) {
Select<Record> select =
select(list(field("*"))).from(((Table<?>) wrapped).as(alias));
select(asterisk()).from(((Table<?>) wrapped).as(alias));
context.sql('(').formatIndentStart().formatNewLine()
.visit(select).formatIndentEnd().formatNewLine()
@ -187,7 +187,7 @@ final class Alias<Q extends QueryPart> extends AbstractQueryPart {
? (Select<?>) wrapped
: wrapped instanceof DerivedTable
? ((DerivedTable<?>) wrapped).query()
: select(field("*")).from(((Table<?>) wrapped).as(alias))
: select(asterisk()).from(((Table<?>) wrapped).as(alias))
);

View File

@ -224,19 +224,21 @@ class DefaultRenderContext extends AbstractContext<RenderContext> implements Ren
if (e1.positions == null || e1.joinNode == null)
continue outer;
String replaced = "(" + DSL.using(configuration).renderContext().declareTables(true).render(e1.joinNode.joinTree()) + ")";
sql.replace(e1.positions[0], e1.positions[1], replaced);
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);
int shift = replaced.length() - (e1.positions[1] - e1.positions[0]);
int shift = replaced.length() - (e1.positions[1] - e1.positions[0]);
inner:
for (ScopeStackElement e2 : scopeStack) {
if (e2.positions == null)
continue inner;
inner:
for (ScopeStackElement e2 : scopeStack) {
if (e2.positions == null)
continue inner;
if (e2.positions[0] > e1.positions[0]) {
e2.positions[0] = e2.positions[0] + shift;
e2.positions[1] = e2.positions[1] + shift;
if (e2.positions[0] > e1.positions[0]) {
e2.positions[0] = e2.positions[0] + shift;
e2.positions[1] = e2.positions[1] + shift;
}
}
}
}