All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.hibernate.sql.ANSIJoinFragment Maven / Gradle / Ivy

There is a newer version: 7.0.0.Alpha1
Show newest version
/*
 * Hibernate, Relational Persistence for Idiomatic Java
 *
 * License: GNU Lesser General Public License (LGPL), version 2.1 or later.
 * See the lgpl.txt file in the root directory or .
 */
package org.hibernate.sql;

import org.hibernate.AssertionFailure;

/**
 * An ANSI-style join.
 *
 * @author Gavin King
 */
public class ANSIJoinFragment extends JoinFragment {
	private StringBuilder buffer = new StringBuilder();
	private StringBuilder conditions = new StringBuilder();

	/**
	 * Adds a join, represented by the given information, to the fragment.
	 *
	 * @param tableName The name of the table being joined.
	 * @param alias The alias applied to the table being joined.
	 * @param fkColumns The columns (from the table being joined) used to define the join-restriction (the ON)
	 * @param pkColumns The columns (from the table being joined to) used to define the join-restriction (the ON)
	 * @param joinType The type of join to produce (INNER, etc).
	 */
	public void addJoin(String tableName, String alias, String[] fkColumns, String[] pkColumns, JoinType joinType) {
		addJoin( tableName, alias, fkColumns, pkColumns, joinType, null );
	}

	/**
	 * Adds a join, represented by the given information, to the fragment.
	 *
	 * @param rhsTableName The name of the table being joined (the RHS table).
	 * @param rhsAlias The alias applied to the table being joined (the alias for the RHS table).
	 * @param lhsColumns The columns (from the table being joined) used to define the join-restriction (the ON).  These
	 * are the LHS columns, and are expected to be qualified.
	 * @param rhsColumns The columns (from the table being joined to) used to define the join-restriction (the ON).  These
	 * are the RHS columns and are expected to *not* be qualified.
	 * @param joinType The type of join to produce (INNER, etc).
	 * @param on Any extra join restrictions
	 */
	public void addJoin(
			String rhsTableName,
			String rhsAlias,
			String[] lhsColumns,
			String[] rhsColumns,
			JoinType joinType,
			String on) {
		final String joinString;
		switch (joinType) {
			case INNER_JOIN:
				joinString = " inner join ";
				break;
			case LEFT_OUTER_JOIN:
				joinString = " left outer join ";
				break;
			case RIGHT_OUTER_JOIN:
				joinString = " right outer join ";
				break;
			case FULL_JOIN:
				joinString = " full outer join ";
				break;
			default:
				throw new AssertionFailure("undefined join type");
		}

		this.buffer.append(joinString)
			.append(rhsTableName)
			.append(' ')
			.append(rhsAlias)
			.append(" on ");


		for ( int j=0; j




© 2015 - 2024 Weber Informatics LLC | Privacy Policy