Java Code Examples for org.hibernate.sql.Delete#toStatementString()

The following examples show how to use org.hibernate.sql.Delete#toStatementString() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: BasicCollectionPersister.java    From lams with GNU General Public License v2.0 6 votes vote down vote up
/**
 * Generate the SQL DELETE that deletes all rows
 */
@Override
protected String generateDeleteString() {
	final Delete delete = new Delete()
			.setTableName( qualifiedTableName )
			.addPrimaryKeyColumns( keyColumnNames );

	if ( hasWhere ) {
		delete.setWhere( sqlWhereString );
	}

	if ( getFactory().getSessionFactoryOptions().isCommentsEnabled() ) {
		delete.setComment( "delete collection " + getRole() );
	}

	return delete.toStatementString();
}
 
Example 2
Source File: BasicCollectionPersister.java    From lams with GNU General Public License v2.0 6 votes vote down vote up
/**
 * Generate the SQL DELETE that deletes a particular row
 */
@Override
protected String generateDeleteRowString() {
	final Delete delete = new Delete().setTableName( qualifiedTableName );

	if ( hasIdentifier ) {
		delete.addPrimaryKeyColumns( new String[] {identifierColumnName} );
	}
	else if ( hasIndex && !indexContainsFormula ) {
		delete.addPrimaryKeyColumns( ArrayHelper.join( keyColumnNames, indexColumnNames ) );
	}
	else {
		delete.addPrimaryKeyColumns( keyColumnNames );
		delete.addPrimaryKeyColumns( elementColumnNames, elementColumnIsInPrimaryKey, elementColumnWriters );
	}

	if ( getFactory().getSessionFactoryOptions().isCommentsEnabled() ) {
		delete.setComment( "delete collection row " + getRole() );
	}

	return delete.toStatementString();
}
 
Example 3
Source File: BasicCollectionPersister.java    From cacheonix-core with GNU Lesser General Public License v2.1 6 votes vote down vote up
/**
 * Generate the SQL DELETE that deletes a particular row
 */
protected String generateDeleteRowString() {
	
	Delete delete = new Delete()
		.setTableName( qualifiedTableName );
	
	if ( hasIdentifier ) {
		delete.setPrimaryKeyColumnNames( new String[]{ identifierColumnName } );
	}
	else if ( hasIndex && !indexContainsFormula ) {
		delete.setPrimaryKeyColumnNames( ArrayHelper.join( keyColumnNames, indexColumnNames ) );
	}
	else {
		delete.setPrimaryKeyColumnNames( ArrayHelper.join( keyColumnNames, elementColumnNames, elementColumnIsInPrimaryKey ) );
	}
	
	if ( getFactory().getSettings().isCommentsEnabled() ) {
		delete.setComment( "delete collection row " + getRole() );
	}
	
	return delete.toStatementString();
}
 
Example 4
Source File: ReactiveAbstractEntityPersister.java    From hibernate-reactive with GNU Lesser General Public License v2.1 5 votes vote down vote up
default String[] generateSQLDeleteStrings(Object[] loadedState) {
	int span = delegate().getTableSpan();
	String[] deleteStrings = new String[span];
	for ( int j = span - 1; j >= 0; j-- ) {
		Delete delete = new Delete()
				.setTableName( delegate().getTableName( j ) )
				.addPrimaryKeyColumns( delegate().getKeyColumns( j ) );
		if ( delegate().getFactory().getSessionFactoryOptions().isCommentsEnabled() ) {
			delete.setComment( "delete " + delegate().getEntityName() + " [" + j + "]" );
		}

		boolean[] versionability = delegate().getPropertyVersionability();
		Type[] types = delegate().getPropertyTypes();
		for (int i = 0; i < delegate().getEntityMetamodel().getPropertySpan(); i++ ) {
			if ( delegate().isPropertyOfTable( i, j ) && versionability[i] ) {
				// this property belongs to the table and it is not specifically
				// excluded from optimistic locking by optimistic-lock="false"
				String[] propertyColumnNames = delegate().getPropertyColumnNames( i );
				boolean[] propertyNullness = types[i].toColumnNullness( loadedState[i], delegate().getFactory() );
				for ( int k = 0; k < propertyNullness.length; k++ ) {
					if ( propertyNullness[k] ) {
						delete.addWhereFragment( propertyColumnNames[k] + " = $" + ( k + 1 ) );
					}
					else {
						delete.addWhereFragment( propertyColumnNames[k] + " is null" );
					}
				}
			}
		}
		deleteStrings[j] = delete.toStatementString();
	}
	return deleteStrings;
}
 
Example 5
Source File: AbstractEntityPersister.java    From lams with GNU General Public License v2.0 5 votes vote down vote up
/**
 * Generate the SQL that deletes a row by id (and version)
 */
protected String generateDeleteString(int j) {
	final Delete delete = new Delete()
			.setTableName( getTableName( j ) )
			.addPrimaryKeyColumns( getKeyColumns( j ) );
	if ( j == 0 ) {
		delete.setVersionColumnName( getVersionColumnName() );
	}
	if ( getFactory().getSessionFactoryOptions().isCommentsEnabled() ) {
		delete.setComment( "delete " + getEntityName() );
	}
	return delete.toStatementString();
}
 
Example 6
Source File: AbstractEntityPersister.java    From lams with GNU General Public License v2.0 5 votes vote down vote up
private String[] generateSQLDeletStrings(Object[] loadedState) {
	int span = getTableSpan();
	String[] deleteStrings = new String[span];
	for ( int j = span - 1; j >= 0; j-- ) {
		Delete delete = new Delete()
				.setTableName( getTableName( j ) )
				.addPrimaryKeyColumns( getKeyColumns( j ) );
		if ( getFactory().getSessionFactoryOptions().isCommentsEnabled() ) {
			delete.setComment( "delete " + getEntityName() + " [" + j + "]" );
		}

		boolean[] versionability = getPropertyVersionability();
		Type[] types = getPropertyTypes();
		for ( int i = 0; i < entityMetamodel.getPropertySpan(); i++ ) {
			if ( isPropertyOfTable( i, j ) && versionability[i] ) {
				// this property belongs to the table and it is not specifically
				// excluded from optimistic locking by optimistic-lock="false"
				String[] propertyColumnNames = getPropertyColumnNames( i );
				boolean[] propertyNullness = types[i].toColumnNullness( loadedState[i], getFactory() );
				for ( int k = 0; k < propertyNullness.length; k++ ) {
					if ( propertyNullness[k] ) {
						delete.addWhereFragment( propertyColumnNames[k] + " = ?" );
					}
					else {
						delete.addWhereFragment( propertyColumnNames[k] + " is null" );
					}
				}
			}
		}
		deleteStrings[j] = delete.toStatementString();
	}
	return deleteStrings;
}
 
Example 7
Source File: CteValuesListDeleteHandlerImpl.java    From lams with GNU General Public License v2.0 5 votes vote down vote up
private String generateDelete(
		String tableName,
		String[] columnNames,
		String idSubselect,
		String comment) {
	final Delete delete = new Delete().setTableName( tableName ).setWhere(
			"(" + String.join( ", ", (CharSequence[]) columnNames ) + ") in ("
					+ idSubselect + ")" );
	if ( factory().getSessionFactoryOptions().isCommentsEnabled() ) {
		delete.setComment( comment );
	}
	return delete.toStatementString();
}
 
Example 8
Source File: TableBasedDeleteHandlerImpl.java    From lams with GNU General Public License v2.0 5 votes vote down vote up
private String generateDelete(String tableName, String[] columnNames, String idSubselect, String comment) {
	final Delete delete = new Delete()
			.setTableName( tableName )
			.setWhere( "(" + String.join( ", ", columnNames ) + ") IN (" + idSubselect + ")" );
	if ( factory().getSessionFactoryOptions().isCommentsEnabled() ) {
		delete.setComment( comment );
	}
	return delete.toStatementString();
}
 
Example 9
Source File: AbstractEntityPersister.java    From cacheonix-core with GNU Lesser General Public License v2.1 5 votes vote down vote up
/**
 * Generate the SQL that deletes a row by id (and version)
 */
protected String generateDeleteString(int j) {
	Delete delete = new Delete()
			.setTableName( getTableName( j ) )
			.setPrimaryKeyColumnNames( getKeyColumns( j ) );
	if ( j == 0 ) {
		delete.setVersionColumnName( getVersionColumnName() );
	}
	if ( getFactory().getSettings().isCommentsEnabled() ) {
		delete.setComment( "delete " + getEntityName() );
	}
	return delete.toStatementString();
}
 
Example 10
Source File: AbstractEntityPersister.java    From cacheonix-core with GNU Lesser General Public License v2.1 5 votes vote down vote up
private String[] generateSQLDeletStrings(Object[] loadedState) {
	int span = getTableSpan();
	String[] deleteStrings = new String[span];
	for ( int j = span - 1; j >= 0; j-- ) {
		Delete delete = new Delete()
				.setTableName( getTableName( j ) )
				.setPrimaryKeyColumnNames( getKeyColumns( j ) );
		if ( getFactory().getSettings().isCommentsEnabled() ) {
			delete.setComment( "delete " + getEntityName() + " [" + j + "]" );
		}

		boolean[] versionability = getPropertyVersionability();
		Type[] types = getPropertyTypes();
		for ( int i = 0; i < entityMetamodel.getPropertySpan(); i++ ) {
			if ( isPropertyOfTable( i, j ) && versionability[i] ) {
				// this property belongs to the table and it is not specifically
				// excluded from optimistic locking by optimistic-lock="false"
				String[] propertyColumnNames = getPropertyColumnNames( i );
				boolean[] propertyNullness = types[i].toColumnNullness( loadedState[i], getFactory() );
				for ( int k = 0; k < propertyNullness.length; k++ ) {
					if ( propertyNullness[k] ) {
						delete.addWhereFragment( propertyColumnNames[k] + " = ?" );
					}
					else {
						delete.addWhereFragment( propertyColumnNames[k] + " is null" );
					}
				}
			}
		}
		deleteStrings[j] = delete.toStatementString();
	}
	return deleteStrings;
}
 
Example 11
Source File: BasicCollectionPersister.java    From cacheonix-core with GNU Lesser General Public License v2.1 5 votes vote down vote up
/**
 * Generate the SQL DELETE that deletes all rows
 */
protected String generateDeleteString() {
	
	Delete delete = new Delete()
			.setTableName( qualifiedTableName )
			.setPrimaryKeyColumnNames( keyColumnNames );
	
	if ( hasWhere ) delete.setWhere( sqlWhereString );
	
	if ( getFactory().getSettings().isCommentsEnabled() ) {
		delete.setComment( "delete collection " + getRole() );
	}
	
	return delete.toStatementString();
}
 
Example 12
Source File: MultiTableDeleteExecutor.java    From cacheonix-core with GNU Lesser General Public License v2.1 5 votes vote down vote up
public MultiTableDeleteExecutor(HqlSqlWalker walker) {
	super( walker, log );

	if ( !walker.getSessionFactoryHelper().getFactory().getDialect().supportsTemporaryTables() ) {
		throw new HibernateException( "cannot perform multi-table deletes using dialect not supporting temp tables" );
	}

	DeleteStatement deleteStatement = ( DeleteStatement ) walker.getAST();
	FromElement fromElement = deleteStatement.getFromClause().getFromElement();
	String bulkTargetAlias = fromElement.getTableAlias();
	this.persister = fromElement.getQueryable();

	this.idInsertSelect = generateIdInsertSelect( persister, bulkTargetAlias, deleteStatement.getWhereClause() );
	log.trace( "Generated ID-INSERT-SELECT SQL (multi-table delete) : " +  idInsertSelect );

	String[] tableNames = persister.getConstraintOrderedTableNameClosure();
	String[][] columnNames = persister.getContraintOrderedTableKeyColumnClosure();
	String idSubselect = generateIdSubselect( persister );

	deletes = new String[tableNames.length];
	for ( int i = tableNames.length - 1; i >= 0; i-- ) {
		// TODO : an optimization here would be to consider cascade deletes and not gen those delete statements;
		//      the difficulty is the ordering of the tables here vs the cascade attributes on the persisters ->
		//          the table info gotten here should really be self-contained (i.e., a class representation
		//          defining all the needed attributes), then we could then get an array of those
		final Delete delete = new Delete()
				.setTableName( tableNames[i] )
				.setWhere( "(" + StringHelper.join( ", ", columnNames[i] ) + ") IN (" + idSubselect + ")" );
		if ( getFactory().getSettings().isCommentsEnabled() ) {
			delete.setComment( "bulk delete" );
		}

		deletes[i] = delete.toStatementString();
	}
}