From cb70397099dfbb58dd9cfcd0a223e03ff09f6fc8 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Mon, 9 Dec 2013 14:11:33 +0100 Subject: [PATCH] [#845] [#846] Add support for the T-SQL and Oracle 12c CROSS / OUTER APPLY clauses --- .../org/jooq/test/_/testcases/JoinTests.java | 93 ++++++++++++ .../src/org/jooq/test/jOOQAbstractTest.java | 5 + jOOQ/src/main/java/org/jooq/Clause.java | 2 + jOOQ/src/main/java/org/jooq/JoinType.java | 32 +++- .../main/java/org/jooq/SelectJoinStep.java | 109 ++++++++++++++ jOOQ/src/main/java/org/jooq/Table.java | 138 ++++++++++++++++++ .../java/org/jooq/impl/AbstractTable.java | 70 ++++++++- .../main/java/org/jooq/impl/JoinTable.java | 10 +- .../main/java/org/jooq/impl/SelectImpl.java | 49 ++++++- .../java/org/jooq/impl/SelectQueryImpl.java | 9 ++ 10 files changed, 499 insertions(+), 18 deletions(-) diff --git a/jOOQ-test/src/org/jooq/test/_/testcases/JoinTests.java b/jOOQ-test/src/org/jooq/test/_/testcases/JoinTests.java index bcc3f4776e..f3fa26a2da 100644 --- a/jOOQ-test/src/org/jooq/test/_/testcases/JoinTests.java +++ b/jOOQ-test/src/org/jooq/test/_/testcases/JoinTests.java @@ -307,6 +307,99 @@ extends BaseTestINNER JOIN two tables + * INNER JOIN two tables. */ @Support JOIN("join"), /** - * CROSS JOIN two tables + * CROSS JOIN two tables. */ @Support CROSS_JOIN("cross join"), /** - * LEFT OUTER JOIN two tables + * LEFT OUTER JOIN two tables. */ @Support LEFT_OUTER_JOIN("left outer join"), /** - * RIGHT OUTER JOIN two tables + * RIGHT OUTER JOIN two tables. */ @Support RIGHT_OUTER_JOIN("right outer join"), /** - * FULL OUTER JOIN two tables + * FULL OUTER JOIN two tables. */ @Support FULL_OUTER_JOIN("full outer join"), /** - * NATURAL INNER JOIN two tables + * NATURAL INNER JOIN two tables. */ @Support NATURAL_JOIN("natural join"), /** - * NATURAL LEFT OUTER JOIN two tables + * NATURAL LEFT OUTER JOIN two tables. */ @Support NATURAL_LEFT_OUTER_JOIN("natural left outer join"), /** - * NATURAL RIGHT OUTER JOIN two tables + * NATURAL RIGHT OUTER JOIN two tables. */ @Support NATURAL_RIGHT_OUTER_JOIN("natural right outer join"), + /** + * CROSS APPLY two tables. + */ + @Support({}) + CROSS_APPLY("cross apply"), + + /** + * OUTER APPLY two tables. + */ + @Support({}) + OUTER_APPLY("outer apply"), + ; private final String sql; diff --git a/jOOQ/src/main/java/org/jooq/SelectJoinStep.java b/jOOQ/src/main/java/org/jooq/SelectJoinStep.java index 49497d6e1b..0353137fc2 100644 --- a/jOOQ/src/main/java/org/jooq/SelectJoinStep.java +++ b/jOOQ/src/main/java/org/jooq/SelectJoinStep.java @@ -52,6 +52,7 @@ import static org.jooq.SQLDialect.HSQLDB; import static org.jooq.SQLDialect.MARIADB; import static org.jooq.SQLDialect.MYSQL; // ... +// ... import static org.jooq.SQLDialect.POSTGRES; // ... // ... @@ -658,4 +659,112 @@ public interface SelectJoinStep extends SelectWhereStep { @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES }) SelectJoinStep naturalRightOuterJoin(String sql, QueryPart... parts); + // ------------------------------------------------------------------------- + // XXX: APPLY clauses on tables + // ------------------------------------------------------------------------- + + /* [pro] xx + + xxx + x xxxxxxxxxxx xxxxxxxxxxxx x xxxxx xx xxxx xxxxxx + x + x xxxx xxxxxxxxxxxxxxxxxxxxxxxxxxx + xx + xxxxxxxxxx xxxxxxxxxx xxxxxxxxxx xxxxxx xx + xxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxx xxxxxxx + + xxx + x xxxxxxxxxxx xxxxxxxxxxxx x xxxxx xx xxxx xxxxxx + x xxx + x xxxxxxxxxxxx xxxx xxxxxxxxx xxxxx xxx xxxx xxxx xxxxxxxx xxx xxxx + x xxxxxxxxx xxxxxx xxxxxxxxxx xxx xxx xxxx xxxxxx xxx xxxxxxxxxxx xx + x xxxxxxxxx xxx xxxxxxxxxx xx xxxx xx xxxxxxxx xxx xxxx xxxxxxxxx xxxxxx + x xxxxxx xxxxxxxx xxxx xxxxxxxxxxxx xxxx xxx xxxxxxxx + x + x xxxx xxxxxxxxxxxxxxxxx + x xxxx xxxxxxxxxxxxxxxxxxxxxxxx + xx + xxxxxxxxxx xxxxxxxxxx xxxxxxxxxx xxxxxx xx + xxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxx xxxxx + + xxx + x xxxxxxxxxxx xxxxxxxxxxxx x xxxxx xx xxxx xxxxxx + x xxx + x xxxxxxxxxxxx xxxx xxxxxxxxx xxxxx xxx xxxx xxxx xxxxxxxx xxx xxxx + x xxxxxxxxx xxxxxx xxxxxxxxxx xxx xxx xxxx xxxxxx xxx xxxxxxxxxxx xx + x xxxxxxxxx xxx xxxxxxxxxx xx xxxx xx xxxxxxxx xxx xxxx xxxxxxxxx xxxxxx + x xxxxxx xxxxxxxx xxxx xxxxxxxxxxxx xxxx xxx xxxxxxxx + x + x xxxx xxxxxxxxxxxxxxxxx xxxxxxxxxx + x xxxx xxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxx + xx + xxxxxxxxxx xxxxxxxxxx xxxxxxxxxx xxxxxx xx + xxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxx xxxx xxxxxxxxx xxxxxxxxxx + + xxx + x xxxxxxxxxxx xxxxxxxxxxxx x xxxxx xx xxxx xxxxxx + x xxx + x xxxxxxxxxxxx xxxx xxxxxxxxx xxxxx xxx xxxx xxxx xxxxxxxx xxx xxxx + x xxxxxxxxx xxxxxx xxxxxxxxxx xxx xxx xxxx xxxxxx xxx xxxxxxxxxxx xx + x xxxxxxxxx xxx xxxxxxxxxx xx xxxx xx xxxxxxxx xxx xxxx xxxxxxxxx xxxxxx + x xxxxxx xxxxxxxx xxxx xxxxxxxxxxxx xxxx xxx xxxxxxxx + x + x xxxx xxxxxxxxxxxxxxxxx xxxxxxxxxxxxx + x xxxx xxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxx + xx + xxxxxxxxxx xxxxxxxxxx xxxxxxxxxx xxxxxx xx + xxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxx xxxx xxxxxxxxxxxx xxxxxxx + + xxx + x xxxxxxxxxxx xxxxxxxxxxxx x xxxxx xx xxxx xxxxxx + x + x xxxx xxxxxxxxxxxxxxxxxxxxxxxxxxx + xx + xxxxxxxxxx xxxxxxxxxx xxxxxxxxxx xxxxxx xx + xxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxx xxxxxxx + + xxx + x xxxxxxxxxxx xxxxxxxxxxxx x xxxxx xx xxxx xxxxxx + x xxx + x xxxxxxxxxxxx xxxx xxxxxxxxx xxxxx xxx xxxx xxxx xxxxxxxx xxx xxxx + x xxxxxxxxx xxxxxx xxxxxxxxxx xxx xxx xxxx xxxxxx xxx xxxxxxxxxxx xx + x xxxxxxxxx xxx xxxxxxxxxx xx xxxx xx xxxxxxxx xxx xxxx xxxxxxxxx xxxxxx + x xxxxxx xxxxxxxx xxxx xxxxxxxxxxxx xxxx xxx xxxxxxxx + x + x xxxx xxxxxxxxxxxxxxxxx + x xxxx xxxxxxxxxxxxxxxxxxxxxxxx + xx + xxxxxxxxxx xxxxxxxxxx xxxxxxxxxx xxxxxx xx + xxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxx xxxxx + + xxx + x xxxxxxxxxxx xxxxxxxxxxxx x xxxxx xx xxxx xxxxxx + x xxx + x xxxxxxxxxxxx xxxx xxxxxxxxx xxxxx xxx xxxx xxxx xxxxxxxx xxx xxxx + x xxxxxxxxx xxxxxx xxxxxxxxxx xxx xxx xxxx xxxxxx xxx xxxxxxxxxxx xx + x xxxxxxxxx xxx xxxxxxxxxx xx xxxx xx xxxxxxxx xxx xxxx xxxxxxxxx xxxxxx + x xxxxxx xxxxxxxx xxxx xxxxxxxxxxxx xxxx xxx xxxxxxxx + x + x xxxx xxxxxxxxxxxxxxxxx xxxxxxxxxx + x xxxx xxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxx + xx + xxxxxxxxxx xxxxxxxxxx xxxxxxxxxx xxxxxx xx + xxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxx xxxx xxxxxxxxx xxxxxxxxxx + + xxx + x xxxxxxxxxxx xxxxxxxxxxxx x xxxxx xx xxxx xxxxxx + x xxx + x xxxxxxxxxxxx xxxx xxxxxxxxx xxxxx xxx xxxx xxxx xxxxxxxx xxx xxxx + x xxxxxxxxx xxxxxx xxxxxxxxxx xxx xxx xxxx xxxxxx xxx xxxxxxxxxxx xx + x xxxxxxxxx xxx xxxxxxxxxx xx xxxx xx xxxxxxxx xxx xxxx xxxxxxxxx xxxxxx + x xxxxxx xxxxxxxx xxxx xxxxxxxxxxxx xxxx xxx xxxxxxxx + x + x xxxx xxxxxxxxxxxxxxxxx xxxxxxxxxxxxx + x xxxx xxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxx + xx + xxxxxxxxxx xxxxxxxxxx xxxxxxxxxx xxxxxx xx + xxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxx xxxx xxxxxxxxxxxx xxxxxxx + + xx [/pro] */ + } diff --git a/jOOQ/src/main/java/org/jooq/Table.java b/jOOQ/src/main/java/org/jooq/Table.java index 6cb43dcab5..66cdd7a96c 100644 --- a/jOOQ/src/main/java/org/jooq/Table.java +++ b/jOOQ/src/main/java/org/jooq/Table.java @@ -909,6 +909,144 @@ public interface Table extends TableLike { ) Table naturalRightOuterJoin(String sql, QueryPart... parts); + // ------------------------------------------------------------------------- + // XXX: APPLY clauses on tables + // ------------------------------------------------------------------------- + + /* [pro] xx + + xxx + x xxxxxxxxxxx xxxxxxxxxxxx x xxxxx xx xxxx xxxxxx + xx + xxxxxxxxxx xxxxxxxxxx xxxxxxxxxx xxxxxx xx + xxxxxxxxxxxx + xxxx x xxxxxx xxxxxxx + xxxx x xxxxxxxx + xx x xxxxxxxxxxxxx + x + xxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxx xxxxxxx + + xxx + x xxxxxxxxxxx xxxxxxxxxxxx x xxxxx xx xxxx xxxxxx + x xxx + x xxxxxxxxxxxx xxxx xxxxxxxxx xxxxx xxx xxxx xxxx xxxxxxxx xxx xxxx + x xxxxxxxxx xxxxxx xxxxxxxxxx xxx xxx xxxx xxxxxx xxx xxxxxxxxxxx xx + x xxxxxxxxx xxx xxxxxxxxxx xx xxxx xx xxxxxxxx xxx xxxx xxxxxxxxx xxxxxx + x xxxxxx xxxxxxxx xxxx xxxxxxxxxxxx xxxx xxx xxxxxxxx + x + x xxxx xxxxxxxxxxxxxxxxx + xx + xxxxxxxxxx xxxxxxxxxx xxxxxxxxxx xxxxxx xx + xxxxxxxxxxxx + xxxx x xxxxxx xxxxxxx + xxxx x xxxxxxxx + xx x xxxxxxxxxxxxx + x + xxxxxxxxxxxxx xxxxxxxxxxxxxxxxx xxxxx + + xxx + x xxxxxxxxxxx xxxxxxxxxxxx x xxxxx xx xxxx xxxxxx + x xxx + x xxxxxxxxxxxx xxxx xxxxxxxxx xxxxx xxx xxxx xxxx xxxxxxxx xxx xxxx + x xxxxxxxxx xxxxxx xxxxxxxxxx xxx xxx xxxx xxxxxx xxx xxxxxxxxxxx xx + x xxxxxxxxx xxx xxxxxxxxxx xx xxxx xx xxxxxxxx xxx xxxx xxxxxxxxx xxxxxx + x xxxxxx xxxxxxxx xxxx xxxxxxxxxxxx xxxx xxx xxxxxxxx + x + x xxxx xxxxxxxxxxxxxxxxx xxxxxxxxxx + xx + xxxxxxxxxx xxxxxxxxxx xxxxxxxxxx xxxxxx xx + xxxxxxxxxxxx + xxxx x xxxxxx xxxxxxx + xxxx x xxxxxxxx + xx x xxxxxxxxxxxxx + x + xxxxxxxxxxxxx xxxxxxxxxxxxxxxxx xxxx xxxxxxxxx xxxxxxxxxx + + xxx + x xxxxxxxxxxx xxxxxxxxxxxx x xxxxx xx xxxx xxxxxx + x xxx + x xxxxxxxxxxxx xxxx xxxxxxxxx xxxxx xxx xxxx xxxx xxxxxxxx xxx xxxx + x xxxxxxxxx xxxxxx xxxxxxxxxx xxx xxx xxxx xxxxxx xxx xxxxxxxxxxx xx + x xxxxxxxxx xxx xxxxxxxxxx xx xxxx xx xxxxxxxx xxx xxxx xxxxxxxxx xxxxxx + x xxxxxx xxxxxxxx xxxx xxxxxxxxxxxx xxxx xxx xxxxxxxx + x + x xxxx xxxxxxxxxxxxxxxxx xxxxxxxxxxxxx + xx + xxxxxxxxxx xxxxxxxxxx xxxxxxxxxx xxxxxx xx + xxxxxxxxxxxx + xxxx x xxxxxx xxxxxxx + xxxx x xxxxxxxx + xx x xxxxxxxxxxxxx + x + xxxxxxxxxxxxx xxxxxxxxxxxxxxxxx xxxx xxxxxxxxxxxx xxxxxxx + + xxx + x xxxxxxxxxxx xxxxxxxxxxxx x xxxxx xx xxxx xxxxxx + xx + xxxxxxxxxx xxxxxxxxxx xxxxxxxxxx xxxxxx xx + xxxxxxxxxxxx + xxxx x xxxxxx xxxxxxx + xxxx x xxxxxxxx + xx x xxxxxxxxxxxxx + x + xxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxx xxxxxxx + + xxx + x xxxxxxxxxxx xxxxxxxxxxxx x xxxxx xx xxxx xxxxxx + x xxx + x xxxxxxxxxxxx xxxx xxxxxxxxx xxxxx xxx xxxx xxxx xxxxxxxx xxx xxxx + x xxxxxxxxx xxxxxx xxxxxxxxxx xxx xxx xxxx xxxxxx xxx xxxxxxxxxxx xx + x xxxxxxxxx xxx xxxxxxxxxx xx xxxx xx xxxxxxxx xxx xxxx xxxxxxxxx xxxxxx + x xxxxxx xxxxxxxx xxxx xxxxxxxxxxxx xxxx xxx xxxxxxxx + x + x xxxx xxxxxxxxxxxxxxxxx + xx + xxxxxxxxxx xxxxxxxxxx xxxxxxxxxx xxxxxx xx + xxxxxxxxxxxx + xxxx x xxxxxx xxxxxxx + xxxx x xxxxxxxx + xx x xxxxxxxxxxxxx + x + xxxxxxxxxxxxx xxxxxxxxxxxxxxxxx xxxxx + + xxx + x xxxxxxxxxxx xxxxxxxxxxxx x xxxxx xx xxxx xxxxxx + x xxx + x xxxxxxxxxxxx xxxx xxxxxxxxx xxxxx xxx xxxx xxxx xxxxxxxx xxx xxxx + x xxxxxxxxx xxxxxx xxxxxxxxxx xxx xxx xxxx xxxxxx xxx xxxxxxxxxxx xx + x xxxxxxxxx xxx xxxxxxxxxx xx xxxx xx xxxxxxxx xxx xxxx xxxxxxxxx xxxxxx + x xxxxxx xxxxxxxx xxxx xxxxxxxxxxxx xxxx xxx xxxxxxxx + x + x xxxx xxxxxxxxxxxxxxxxx xxxxxxxxxx + xx + xxxxxxxxxx xxxxxxxxxx xxxxxxxxxx xxxxxx xx + xxxxxxxxxxxx + xxxx x xxxxxx xxxxxxx + xxxx x xxxxxxxx + xx x xxxxxxxxxxxxx + x + xxxxxxxxxxxxx xxxxxxxxxxxxxxxxx xxxx xxxxxxxxx xxxxxxxxxx + + xxx + x xxxxxxxxxxx xxxxxxxxxxxx x xxxxx xx xxxx xxxxxx + x xxx + x xxxxxxxxxxxx xxxx xxxxxxxxx xxxxx xxx xxxx xxxx xxxxxxxx xxx xxxx + x xxxxxxxxx xxxxxx xxxxxxxxxx xxx xxx xxxx xxxxxx xxx xxxxxxxxxxx xx + x xxxxxxxxx xxx xxxxxxxxxx xx xxxx xx xxxxxxxx xxx xxxx xxxxxxxxx xxxxxx + x xxxxxx xxxxxxxx xxxx xxxxxxxxxxxx xxxx xxx xxxxxxxx + x + x xxxx xxxxxxxxxxxxxxxxx xxxxxxxxxxxxx + xx + xxxxxxxxxx xxxxxxxxxx xxxxxxxxxx xxxxxx xx + xxxxxxxxxxxx + xxxx x xxxxxx xxxxxxx + xxxx x xxxxxxxx + xx x xxxxxxxxxxxxx + x + xxxxxxxxxxxxx xxxxxxxxxxxxxxxxx xxxx xxxxxxxxxxxx xxxxxxx + + xx [/pro] */ + // ------------------------------------------------------------------------- // XXX: Exotic and vendor-specific clauses on tables // ------------------------------------------------------------------------- diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractTable.java b/jOOQ/src/main/java/org/jooq/impl/AbstractTable.java index b88288a370..b7ab5f9d66 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractTable.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractTable.java @@ -41,6 +41,16 @@ package org.jooq.impl; import static org.jooq.Clause.TABLE; +import static org.jooq.JoinType.CROSS_APPLY; +import static org.jooq.JoinType.CROSS_JOIN; +import static org.jooq.JoinType.FULL_OUTER_JOIN; +import static org.jooq.JoinType.JOIN; +import static org.jooq.JoinType.LEFT_OUTER_JOIN; +import static org.jooq.JoinType.NATURAL_JOIN; +import static org.jooq.JoinType.NATURAL_LEFT_OUTER_JOIN; +import static org.jooq.JoinType.NATURAL_RIGHT_OUTER_JOIN; +import static org.jooq.JoinType.OUTER_APPLY; +import static org.jooq.JoinType.RIGHT_OUTER_JOIN; import static org.jooq.impl.DSL.table; import static org.jooq.impl.DSL.val; @@ -402,7 +412,7 @@ abstract class AbstractTable extends AbstractQueryPart impleme @Override public final TableOnStep join(TableLike table) { - return join(table, JoinType.JOIN); + return join(table, JOIN); } @Override @@ -422,7 +432,7 @@ abstract class AbstractTable extends AbstractQueryPart impleme @Override public final TablePartitionByStep leftOuterJoin(TableLike table) { - return join(table, JoinType.LEFT_OUTER_JOIN); + return join(table, LEFT_OUTER_JOIN); } @Override @@ -442,7 +452,7 @@ abstract class AbstractTable extends AbstractQueryPart impleme @Override public final TablePartitionByStep rightOuterJoin(TableLike table) { - return join(table, JoinType.RIGHT_OUTER_JOIN); + return join(table, RIGHT_OUTER_JOIN); } @Override @@ -462,7 +472,7 @@ abstract class AbstractTable extends AbstractQueryPart impleme @Override public final TableOnStep fullOuterJoin(TableLike table) { - return join(table, JoinType.FULL_OUTER_JOIN); + return join(table, FULL_OUTER_JOIN); } @Override @@ -482,7 +492,7 @@ abstract class AbstractTable extends AbstractQueryPart impleme @Override public final Table crossJoin(TableLike table) { - return join(table, JoinType.CROSS_JOIN); + return join(table, CROSS_JOIN); } @Override @@ -502,7 +512,7 @@ abstract class AbstractTable extends AbstractQueryPart impleme @Override public final Table naturalJoin(TableLike table) { - return join(table, JoinType.NATURAL_JOIN); + return join(table, NATURAL_JOIN); } @Override @@ -522,7 +532,7 @@ abstract class AbstractTable extends AbstractQueryPart impleme @Override public final Table naturalLeftOuterJoin(TableLike table) { - return join(table, JoinType.NATURAL_LEFT_OUTER_JOIN); + return join(table, NATURAL_LEFT_OUTER_JOIN); } @Override @@ -542,7 +552,7 @@ abstract class AbstractTable extends AbstractQueryPart impleme @Override public final Table naturalRightOuterJoin(TableLike table) { - return join(table, JoinType.NATURAL_RIGHT_OUTER_JOIN); + return join(table, NATURAL_RIGHT_OUTER_JOIN); } @Override @@ -560,6 +570,50 @@ abstract class AbstractTable extends AbstractQueryPart impleme return naturalRightOuterJoin(table(sql, parts)); } + /* [pro] xx + + xxxxxxxxx + xxxxxx xxxxx xxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxx xxxxxx x + xxxxxx xxxxxxxxxxx xxxxxxxxxxxxx + x + + xxxxxxxxx + xxxxxx xxxxx xxxxxxxxxxxxx xxxxxxxxxxxxxxxxx xxxx x + xxxxxx xxxxxxxxxxxxxxxxxxxxxxx + x + + xxxxxxxxx + xxxxxx xxxxx xxxxxxxxxxxxx xxxxxxxxxxxxxxxxx xxxx xxxxxxxxx xxxxxxxxx x + xxxxxx xxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxx + x + + xxxxxxxxx + xxxxxx xxxxx xxxxxxxxxxxxx xxxxxxxxxxxxxxxxx xxxx xxxxxxxxxxxx xxxxxx x + xxxxxx xxxxxxxxxxxxxxxxxxxxx xxxxxxxx + x + + xxxxxxxxx + xxxxxx xxxxx xxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxx xxxxxx x + xxxxxx xxxxxxxxxxx xxxxxxxxxxxxx + x + + xxxxxxxxx + xxxxxx xxxxx xxxxxxxxxxxxx xxxxxxxxxxxxxxxxx xxxx x + xxxxxx xxxxxxxxxxxxxxxxxxxxxxx + x + + xxxxxxxxx + xxxxxx xxxxx xxxxxxxxxxxxx xxxxxxxxxxxxxxxxx xxxx xxxxxxxxx xxxxxxxxx x + xxxxxx xxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxx + x + + xxxxxxxxx + xxxxxx xxxxx xxxxxxxxxxxxx xxxxxxxxxxxxxxxxx xxxx xxxxxxxxxxxx xxxxxx x + xxxxxx xxxxxxxxxxxxxxxxxxxxx xxxxxxxx + x + + xx [/pro] */ + // ------------------------------------------------------------------------ // XXX: Object API // ------------------------------------------------------------------------ diff --git a/jOOQ/src/main/java/org/jooq/impl/JoinTable.java b/jOOQ/src/main/java/org/jooq/impl/JoinTable.java index 173d0ce383..da6720dcc4 100644 --- a/jOOQ/src/main/java/org/jooq/impl/JoinTable.java +++ b/jOOQ/src/main/java/org/jooq/impl/JoinTable.java @@ -44,22 +44,26 @@ import static java.util.Arrays.asList; import static org.jooq.Clause.TABLE; import static org.jooq.Clause.TABLE_JOIN; import static org.jooq.Clause.TABLE_JOIN_CROSS; +import static org.jooq.Clause.TABLE_JOIN_CROSS_APPLY; import static org.jooq.Clause.TABLE_JOIN_INNER; import static org.jooq.Clause.TABLE_JOIN_NATURAL; import static org.jooq.Clause.TABLE_JOIN_NATURAL_OUTER_LEFT; import static org.jooq.Clause.TABLE_JOIN_NATURAL_OUTER_RIGHT; import static org.jooq.Clause.TABLE_JOIN_ON; +import static org.jooq.Clause.TABLE_JOIN_OUTER_APPLY; import static org.jooq.Clause.TABLE_JOIN_OUTER_FULL; import static org.jooq.Clause.TABLE_JOIN_OUTER_LEFT; import static org.jooq.Clause.TABLE_JOIN_OUTER_RIGHT; import static org.jooq.Clause.TABLE_JOIN_PARTITION_BY; import static org.jooq.Clause.TABLE_JOIN_USING; +import static org.jooq.JoinType.CROSS_APPLY; import static org.jooq.JoinType.CROSS_JOIN; import static org.jooq.JoinType.JOIN; import static org.jooq.JoinType.LEFT_OUTER_JOIN; import static org.jooq.JoinType.NATURAL_JOIN; import static org.jooq.JoinType.NATURAL_LEFT_OUTER_JOIN; import static org.jooq.JoinType.NATURAL_RIGHT_OUTER_JOIN; +import static org.jooq.JoinType.OUTER_APPLY; import static org.jooq.JoinType.RIGHT_OUTER_JOIN; // ... // ... @@ -198,7 +202,9 @@ class JoinTable extends AbstractTable implements TableOptionalOnStep, Ta if (!asList(CROSS_JOIN, NATURAL_JOIN, NATURAL_LEFT_OUTER_JOIN, - NATURAL_RIGHT_OUTER_JOIN).contains(translatedType)) { + NATURAL_RIGHT_OUTER_JOIN, + CROSS_APPLY, + OUTER_APPLY).contains(translatedType)) { toSQLJoinCondition(context); } @@ -219,6 +225,8 @@ class JoinTable extends AbstractTable implements TableOptionalOnStep, Ta case FULL_OUTER_JOIN: return TABLE_JOIN_OUTER_FULL; case NATURAL_LEFT_OUTER_JOIN: return TABLE_JOIN_NATURAL_OUTER_LEFT; case NATURAL_RIGHT_OUTER_JOIN: return TABLE_JOIN_NATURAL_OUTER_RIGHT; + case CROSS_APPLY: return TABLE_JOIN_CROSS_APPLY; + case OUTER_APPLY: return TABLE_JOIN_OUTER_APPLY; default: throw new IllegalArgumentException("Bad join type: " + translatedType); } } diff --git a/jOOQ/src/main/java/org/jooq/impl/SelectImpl.java b/jOOQ/src/main/java/org/jooq/impl/SelectImpl.java index ede7bc1b79..f33f18556a 100644 --- a/jOOQ/src/main/java/org/jooq/impl/SelectImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/SelectImpl.java @@ -1975,7 +1975,9 @@ class SelectImpl extends AbstractSelect implements Sel case NATURAL_RIGHT_OUTER_JOIN: joined = getFrom().get(index).naturalRightOuterJoin(table); break; + + /* [pro] xx + xxxx xxxxxxxxxxxx + xxxxxx x xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxx + xxxx xxxxxxxxxxxx + xxxxxx x xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + xxxxxx + xx [/pro] */ } getFrom().set(index, joined);