View Javadoc
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  }