1 /*
2 * Tentackle - https://tentackle.org
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 */
18
19 package org.tentackle.dbms.dsl;
20
21 import org.tentackle.sql.JoinType;
22
23 import java.util.Objects;
24
25 /**
26 * The pending join of a {@link Select}.<br>
27 * Enforces the join condition to be provided before the select can be continued.
28 *
29 * @author harald
30 */
31 public class JoinStep {
32
33 private final Select select; // the select being built
34 private final JoinType joinType; // the kind of join
35 private final Table table; // the joined table
36
37
38 /**
39 * Creates a join step.
40 *
41 * @param select the select being built
42 * @param joinType the kind of join
43 * @param table the joined table
44 */
45 JoinStep(Select select, JoinType joinType, Table table) {
46 this.select = select;
47 this.joinType = joinType;
48 this.table = Objects.requireNonNull(table, "table must be provided");
49 }
50
51
52 /**
53 * Sets the join condition.
54 *
55 * @param condition the join condition
56 * @return the select
57 */
58 public Select on(Condition condition) {
59 return select.addJoin(new Join(joinType, table, condition));
60 }
61
62 }