From 649e7aa87173c997bd07d9393c886336fdbdfb7d Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Mon, 28 Nov 2022 09:42:49 +0100 Subject: [PATCH] [jOOQ/jOOQ#6116] [jOOQ/jOOQ#11687] Fixed partition by clauses --- jOOQ/src/main/java/org/jooq/impl/FullJoin.java | 9 +++++++-- jOOQ/src/main/java/org/jooq/impl/JoinTable.java | 17 ++++++++--------- jOOQ/src/main/java/org/jooq/impl/LeftJoin.java | 9 +++++++-- .../java/org/jooq/impl/NaturalFullJoin.java | 7 +++++-- .../java/org/jooq/impl/NaturalLeftJoin.java | 7 +++++-- .../java/org/jooq/impl/NaturalRightJoin.java | 7 +++++-- jOOQ/src/main/java/org/jooq/impl/RightJoin.java | 9 +++++++-- 7 files changed, 44 insertions(+), 21 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/FullJoin.java b/jOOQ/src/main/java/org/jooq/impl/FullJoin.java index 605b400faf..902406e4e9 100644 --- a/jOOQ/src/main/java/org/jooq/impl/FullJoin.java +++ b/jOOQ/src/main/java/org/jooq/impl/FullJoin.java @@ -60,6 +60,10 @@ implements super(lhs, rhs, JoinType.FULL_OUTER_JOIN); } + FullJoin(TableLike lhs, TableLike rhs, Collection> lhsPartitionBy) { + super(lhs, rhs, JoinType.FULL_OUTER_JOIN, lhsPartitionBy); + } + // ------------------------------------------------------------------------- // XXX: Query Object Model // ------------------------------------------------------------------------- @@ -73,7 +77,8 @@ implements Condition o, Collection> u ) { - // [#6116] [#11687] TODO: Partition by clauses - return o != null ? new FullJoin(table1, table2).on(o) : new FullJoin(table1, table2).using(u); + return o != null + ? new FullJoin(table1, table2, partitionBy1).partitionBy(partitionBy2).on(o) + : new FullJoin(table1, table2, partitionBy1).partitionBy(partitionBy2).using(u); } } diff --git a/jOOQ/src/main/java/org/jooq/impl/JoinTable.java b/jOOQ/src/main/java/org/jooq/impl/JoinTable.java index 727f72c7db..47a1d7b606 100755 --- a/jOOQ/src/main/java/org/jooq/impl/JoinTable.java +++ b/jOOQ/src/main/java/org/jooq/impl/JoinTable.java @@ -114,7 +114,6 @@ import static org.jooq.impl.Tools.SimpleDataKey.DATA_COLLECTED_SEMI_ANTI_JOIN; import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; import java.util.List; import java.util.Set; @@ -655,18 +654,18 @@ implements + public final J partitionBy(Field... fields) { + return partitionBy(Tools.list(fields)); + } - - - - - - - - + @SuppressWarnings("unchecked") + public final J partitionBy(Collection> fields) { + rhsPartitionBy.addAll(fields); + return (J) this; + } @SuppressWarnings("unchecked") @Override diff --git a/jOOQ/src/main/java/org/jooq/impl/LeftJoin.java b/jOOQ/src/main/java/org/jooq/impl/LeftJoin.java index 904e22b71d..cce59ac8bd 100644 --- a/jOOQ/src/main/java/org/jooq/impl/LeftJoin.java +++ b/jOOQ/src/main/java/org/jooq/impl/LeftJoin.java @@ -60,6 +60,10 @@ implements super(lhs, rhs, JoinType.LEFT_OUTER_JOIN); } + LeftJoin(TableLike lhs, TableLike rhs, Collection> lhsPartitionBy) { + super(lhs, rhs, JoinType.LEFT_OUTER_JOIN, lhsPartitionBy); + } + // ------------------------------------------------------------------------- // XXX: Query Object Model // ------------------------------------------------------------------------- @@ -73,7 +77,8 @@ implements Condition o, Collection> u ) { - // [#6116] [#11687] TODO: Partition by clauses - return o != null ? new LeftJoin(table1, table2).on(o) : new LeftJoin(table1, table2).using(u); + return o != null + ? new LeftJoin(table1, table2, partitionBy1).partitionBy(partitionBy2).on(o) + : new LeftJoin(table1, table2, partitionBy1).partitionBy(partitionBy2).using(u); } } diff --git a/jOOQ/src/main/java/org/jooq/impl/NaturalFullJoin.java b/jOOQ/src/main/java/org/jooq/impl/NaturalFullJoin.java index 16c90e3295..6a0a8eaee3 100644 --- a/jOOQ/src/main/java/org/jooq/impl/NaturalFullJoin.java +++ b/jOOQ/src/main/java/org/jooq/impl/NaturalFullJoin.java @@ -62,6 +62,10 @@ implements super(lhs, rhs, JoinType.NATURAL_FULL_OUTER_JOIN, emptyList()); } + NaturalFullJoin(TableLike lhs, TableLike rhs, Collection> lhsPartitionBy) { + super(lhs, rhs, JoinType.NATURAL_FULL_OUTER_JOIN, lhsPartitionBy); + } + // ------------------------------------------------------------------------- // XXX: Query Object Model // ------------------------------------------------------------------------- @@ -75,7 +79,6 @@ implements Condition o, Collection> u ) { - // [#6116] [#11687] TODO: Partition by clauses - return new NaturalFullJoin(table1, table2); + return new NaturalFullJoin(table1, table2, partitionBy1).partitionBy(partitionBy2); } } diff --git a/jOOQ/src/main/java/org/jooq/impl/NaturalLeftJoin.java b/jOOQ/src/main/java/org/jooq/impl/NaturalLeftJoin.java index cc49b94b4d..31df236486 100644 --- a/jOOQ/src/main/java/org/jooq/impl/NaturalLeftJoin.java +++ b/jOOQ/src/main/java/org/jooq/impl/NaturalLeftJoin.java @@ -62,6 +62,10 @@ implements super(lhs, rhs, JoinType.NATURAL_LEFT_OUTER_JOIN, emptyList()); } + NaturalLeftJoin(TableLike lhs, TableLike rhs, Collection> lhsPartitionBy) { + super(lhs, rhs, JoinType.NATURAL_LEFT_OUTER_JOIN, lhsPartitionBy); + } + // ------------------------------------------------------------------------- // XXX: Query Object Model // ------------------------------------------------------------------------- @@ -75,7 +79,6 @@ implements Condition o, Collection> u ) { - // [#6116] [#11687] TODO: Partition by clauses - return new NaturalLeftJoin(table1, table2); + return new NaturalLeftJoin(table1, table2, partitionBy1).partitionBy(partitionBy2); } } diff --git a/jOOQ/src/main/java/org/jooq/impl/NaturalRightJoin.java b/jOOQ/src/main/java/org/jooq/impl/NaturalRightJoin.java index 7344296425..1111829dca 100644 --- a/jOOQ/src/main/java/org/jooq/impl/NaturalRightJoin.java +++ b/jOOQ/src/main/java/org/jooq/impl/NaturalRightJoin.java @@ -62,6 +62,10 @@ implements super(lhs, rhs, JoinType.NATURAL_RIGHT_OUTER_JOIN, emptyList()); } + NaturalRightJoin(TableLike lhs, TableLike rhs, Collection> lhsPartitionBy) { + super(lhs, rhs, JoinType.NATURAL_RIGHT_OUTER_JOIN, lhsPartitionBy); + } + // ------------------------------------------------------------------------- // XXX: Query Object Model // ------------------------------------------------------------------------- @@ -75,7 +79,6 @@ implements Condition o, Collection> u ) { - // [#6116] [#11687] TODO: Partition by clauses - return new NaturalRightJoin(table1, table2); + return new NaturalRightJoin(table1, table2, partitionBy1).partitionBy(partitionBy2); } } diff --git a/jOOQ/src/main/java/org/jooq/impl/RightJoin.java b/jOOQ/src/main/java/org/jooq/impl/RightJoin.java index 13129bf7cb..7437a762ae 100644 --- a/jOOQ/src/main/java/org/jooq/impl/RightJoin.java +++ b/jOOQ/src/main/java/org/jooq/impl/RightJoin.java @@ -60,6 +60,10 @@ implements super(lhs, rhs, JoinType.RIGHT_OUTER_JOIN); } + RightJoin(TableLike lhs, TableLike rhs, Collection> lhsPartitionBy) { + super(lhs, rhs, JoinType.RIGHT_OUTER_JOIN, lhsPartitionBy); + } + // ------------------------------------------------------------------------- // XXX: Query Object Model // ------------------------------------------------------------------------- @@ -73,7 +77,8 @@ implements Condition o, Collection> u ) { - // [#6116] [#11687] TODO: Partition by clauses - return o != null ? new RightJoin(table1, table2).on(o) : new RightJoin(table1, table2).using(u); + return o != null + ? new RightJoin(table1, table2, partitionBy1).partitionBy(partitionBy2).on(o) + : new RightJoin(table1, table2, partitionBy1).partitionBy(partitionBy2).using(u); } }