diff --git a/jOOQ/src/main/java/org/jooq/impl/GenerateSeries.java b/jOOQ/src/main/java/org/jooq/impl/GenerateSeries.java index 4d34697163..aa3887cec3 100644 --- a/jOOQ/src/main/java/org/jooq/impl/GenerateSeries.java +++ b/jOOQ/src/main/java/org/jooq/impl/GenerateSeries.java @@ -85,28 +85,44 @@ final class GenerateSeries extends AbstractTable> implements Au private final Field from; private final Field to; private final Field step; + private final Name name; GenerateSeries(Field from, Field to) { this(from, to, null); } GenerateSeries(Field from, Field to, Field step) { - super(TableOptions.expression(), N_GENERATE_SERIES); + this(from, to, step, N_GENERATE_SERIES); + } + + GenerateSeries(Field from, Field to, Field step, Name name) { + super(TableOptions.expression(), name); this.from = from; this.to = to; this.step = step; + this.name = name; + } + + @Override + public Table> as(Name alias) { + return new TableAlias<>(new GenerateSeries(from, to, step, alias), alias); + } + + @Override + public Table> as(Name alias, Name... fieldAliases) { + return new TableAlias<>(new GenerateSeries(from, to, step, alias), alias, fieldAliases); } @Override public final void accept(Context ctx) { if (EMULATE_WITH_RECURSIVE.contains(ctx.dialect())) { - Field f = DSL.field(N_GENERATE_SERIES, INTEGER); + Field f = DSL.field(name, INTEGER); visitSubquery( ctx, - withRecursive(N_GENERATE_SERIES, N_GENERATE_SERIES) - .as(select(from).unionAll(select(iadd(f, step == null ? inline(1) : step)).from(N_GENERATE_SERIES).where(f.lt(to)))) - .select(f).from(N_GENERATE_SERIES) + withRecursive(name, name) + .as(select(from).unionAll(select(iadd(f, step == null ? inline(1) : step)).from(name).where(f.lt(to)))) + .select(f).from(name) ); } else if (EMULATE_SYSTEM_RANGE.contains(ctx.dialect())) { @@ -163,9 +179,9 @@ final class GenerateSeries extends AbstractTable> implements Au @Override public final Table> autoAlias(Context ctx) { if (EMULATE_WITH_RECURSIVE.contains(ctx.dialect())) - return as(N_GENERATE_SERIES); + return as(name); else if (EMULATE_SYSTEM_RANGE.contains(ctx.dialect())) - return as(N_GENERATE_SERIES, N_GENERATE_SERIES); + return as(name, name); else return null; } diff --git a/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java b/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java index a15fb43379..5166938d5d 100644 --- a/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java @@ -169,6 +169,7 @@ import static org.jooq.impl.Keywords.K_WITH_CHECK_OPTION; import static org.jooq.impl.Keywords.K_WITH_READ_ONLY; import static org.jooq.impl.Names.N_DUAL; import static org.jooq.impl.Names.N_LEVEL; +import static org.jooq.impl.Names.N_ROWNUM; import static org.jooq.impl.QueryPartCollectionView.wrap; import static org.jooq.impl.SQLDataType.JSON; import static org.jooq.impl.SQLDataType.JSONB; @@ -1485,6 +1486,13 @@ final class SelectQueryImpl extends AbstractResultQuery imp + + + + + + +