/* * 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.hql.spi.id.inline; import java.util.List; import org.hibernate.dialect.Dialect; import org.hibernate.type.Type; import org.hibernate.type.TypeResolver; /** * Builds the where SELECT FROM VALUES clause that wraps the identifiers to be updated/deleted. * * @author Vlad Mihalcea */ public class InlineIdsSubSelectValuesListBuilder extends IdsClauseBuilder { public InlineIdsSubSelectValuesListBuilder( Dialect dialect, Type identifierType, TypeResolver typeResolver, String[] columns, List<Object[]> ids) { super( dialect, identifierType, typeResolver, columns, ids ); } @Override public String toStatement() { StringBuilder buffer = new StringBuilder(); String columnNames = String.join( ",", (CharSequence[]) getColumns() ); buffer.append( "select " ).append( columnNames ).append( " from ( values " ); for ( int i = 0; i < getIds().size(); i++ ) { Object[] idTokens = getIds().get( i ); if ( i > 0 ) { buffer.append( "," ); } buffer.append( "(" ); buffer.append( quoteIdentifier( idTokens ) ); buffer.append( ")" ); } buffer.append( ") as HT (" ).append( columnNames ).append( ") " ); return buffer.toString(); } }