/*
* 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 http://www.gnu.org/licenses/lgpl-2.1.html
*/
package org.hibernate.query.sqm.tree.select;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.hibernate.query.sqm.tree.expression.SqmExpression;
/**
* The semantic select clause. Defined as a list of individual selections.
*
* @author Steve Ebersole
*/
public class SqmSelectClause implements SqmAliasedExpressionContainer<SqmSelection> {
private final boolean distinct;
private List<SqmSelection> selections;
public SqmSelectClause(boolean distinct) {
this.distinct = distinct;
}
public SqmSelectClause(boolean distinct, List<SqmSelection> selections) {
this.distinct = distinct;
this.selections = selections;
}
public SqmSelectClause(boolean distinct, SqmSelection... selections) {
this( distinct, Arrays.asList( selections ) );
}
public boolean isDistinct() {
return distinct;
}
public List<SqmSelection> getSelections() {
if ( selections == null ) {
return Collections.emptyList();
}
else {
return Collections.unmodifiableList( selections );
}
}
public void addSelection(SqmSelection selection) {
if ( selections == null ) {
selections = new ArrayList<>();
}
selections.add( selection );
}
@Override
public SqmSelection add(SqmExpression expression, String alias) {
final SqmSelection selection = new SqmSelection( expression, alias );
addSelection( selection );
return selection;
}
@Override
public void add(SqmSelection aliasExpression) {
addSelection( aliasExpression );
}
}