diff --git a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/batch/internal/BatchBuilderImpl.java b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/batch/internal/BatchBuilderImpl.java index 9a5996fd7477..278bf7d3ecf5 100644 --- a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/batch/internal/BatchBuilderImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/batch/internal/BatchBuilderImpl.java @@ -48,32 +48,28 @@ public int getJdbcBatchSize() { return globalBatchSize; } + private int batchSize(Integer explicitBatchSize) { + return explicitBatchSize == null + ? globalBatchSize + : explicitBatchSize; + } + @Override public Batch buildBatch( BatchKey key, Integer explicitBatchSize, Supplier statementGroupSupplier, JdbcCoordinator jdbcCoordinator) { - final int batchSize = - explicitBatchSize == null - ? globalBatchSize - : explicitBatchSize; + final int batchSize = batchSize( explicitBatchSize ); assert batchSize > 1; return new BatchImpl( key, statementGroupSupplier.get(), batchSize, jdbcCoordinator ); } - /** * Intended for use from tests */ @Internal public BatchImpl buildBatch(BatchKey batchKey, Integer sizeOverride, String table, SessionImplementor session, String sql) { - final JdbcCoordinator jdbcCoordinator = session.getJdbcCoordinator(); - - final int batchSize = sizeOverride == null - ? globalBatchSize - : sizeOverride; - return new BatchImpl( batchKey, new PreparedStatementGroupSingleTable( @@ -137,8 +133,8 @@ public MutationDetails getDeleteDetails() { ), session ), - batchSize, - jdbcCoordinator + batchSize( sizeOverride ), + session.getJdbcCoordinator() ); } } diff --git a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/batch/internal/BatchBuilderInitiator.java b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/batch/internal/BatchBuilderInitiator.java index 91137ef897ba..12ae27c604ab 100644 --- a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/batch/internal/BatchBuilderInitiator.java +++ b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/batch/internal/BatchBuilderInitiator.java @@ -51,10 +51,11 @@ public BatchBuilder initiateService(Map configurationValues, Ser final String builderClassName = builder.toString(); try { - return (BatchBuilder) registry.requireService( ClassLoaderService.class ) - .classForName( builderClassName ) - .getConstructor() - .newInstance(); + return (BatchBuilder) + registry.requireService( ClassLoaderService.class ) + .classForName( builderClassName ) + .getConstructor() + .newInstance(); } catch (Exception e) { throw new ServiceException( "Could not build explicit BatchBuilder [" + builderClassName + "]", e ); diff --git a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/batch/internal/BatchImpl.java b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/batch/internal/BatchImpl.java index 8f3563512705..83bf0084cf32 100644 --- a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/batch/internal/BatchImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/batch/internal/BatchImpl.java @@ -4,7 +4,6 @@ */ package org.hibernate.engine.jdbc.batch.internal; -import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.LinkedHashSet; @@ -21,10 +20,6 @@ import org.hibernate.engine.jdbc.spi.JdbcServices; import org.hibernate.engine.jdbc.spi.SqlExceptionHelper; import org.hibernate.engine.jdbc.spi.SqlStatementLogger; -import org.hibernate.event.monitor.spi.EventMonitor; -import org.hibernate.event.monitor.spi.DiagnosticEvent; -import org.hibernate.resource.jdbc.spi.JdbcEventHandler; -import org.hibernate.resource.jdbc.spi.JdbcSessionOwner; import static java.util.Objects.requireNonNull; import static org.hibernate.engine.jdbc.JdbcLogging.JDBC_MESSAGE_LOGGER; @@ -131,7 +126,7 @@ public void addToBatch(JdbcValueBindings jdbcValueBindings, TableInclusionChecke } else { //noinspection resource - final PreparedStatement statement = statementDetails.resolveStatement(); + final var statement = statementDetails.resolveStatement(); final String sqlString = statementDetails.getSqlString(); sqlStatementLogger.logStatement( sqlString ); jdbcValueBindings.beforeStatement( statementDetails ); @@ -169,7 +164,7 @@ protected void releaseStatements() { } protected void clearBatch(PreparedStatementDetails statementDetails) { - final PreparedStatement statement = statementDetails.getStatement(); + final var statement = statementDetails.getStatement(); assert statement != null; try { @@ -192,7 +187,7 @@ protected void clearBatch(PreparedStatementDetails statementDetails) { * Convenience method to notify registered observers of an explicit execution of this batch. */ protected final void notifyObserversExplicitExecution() { - for ( BatchObserver observer : observers ) { + for ( var observer : observers ) { observer.batchExplicitlyExecuted(); } } @@ -201,7 +196,7 @@ protected final void notifyObserversExplicitExecution() { * Convenience method to notify registered observers of an implicit execution of this batch. */ protected final void notifyObserversImplicitExecution() { - for ( BatchObserver observer : observers ) { + for ( var observer : observers ) { observer.batchImplicitlyExecuted(); } } @@ -247,18 +242,18 @@ protected void performExecution() { ); } - final JdbcSessionOwner jdbcSessionOwner = jdbcCoordinator.getJdbcSessionOwner(); - final JdbcEventHandler eventHandler = jdbcSessionOwner.getJdbcSessionContext().getEventHandler(); + final var jdbcSessionOwner = jdbcCoordinator.getJdbcSessionOwner(); + final var eventHandler = jdbcSessionOwner.getJdbcSessionContext().getEventHandler(); try { getStatementGroup().forEachStatement( (tableName, statementDetails) -> { final String sql = statementDetails.getSqlString(); - final PreparedStatement statement = statementDetails.getStatement(); + final var statement = statementDetails.getStatement(); if ( statement != null ) { try { if ( statementDetails.getMutatingTableDetails().isIdentifierTable() ) { + final var eventMonitor = jdbcSessionOwner.getEventMonitor(); + final var executionEvent = eventMonitor.beginJdbcBatchExecutionEvent(); final int[] rowCounts; - final EventMonitor eventMonitor = jdbcSessionOwner.getEventMonitor(); - final DiagnosticEvent executionEvent = eventMonitor.beginJdbcBatchExecutionEvent(); try { eventHandler.jdbcExecuteBatchStart(); rowCounts = statement.executeBatch(); @@ -319,7 +314,7 @@ private void checkRowCounts(int[] rowCounts, PreparedStatementDetails statementD @Override public void release() { if ( BATCH_MESSAGE_LOGGER.isInfoEnabled() ) { - final PreparedStatementGroup statementGroup = getStatementGroup(); + final var statementGroup = getStatementGroup(); if ( statementGroup.getNumberOfStatements() != 0 && statementGroup.hasMatching( statementDetails -> statementDetails.getStatement() != null ) ) { BATCH_MESSAGE_LOGGER.batchContainedStatementsOnRelease(); diff --git a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/env/internal/LobCreationHelper.java b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/env/internal/LobCreationHelper.java index 2ede0b53f9bc..f1e89491c3db 100644 --- a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/env/internal/LobCreationHelper.java +++ b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/env/internal/LobCreationHelper.java @@ -4,19 +4,17 @@ */ package org.hibernate.engine.jdbc.env.internal; -import java.sql.Clob; import java.sql.Connection; -import java.sql.DatabaseMetaData; import java.sql.SQLException; import java.util.EnumSet; import java.util.Map; import org.hibernate.cfg.Environment; import org.hibernate.dialect.Dialect; -import org.hibernate.internal.util.config.ConfigurationHelper; import static org.hibernate.engine.jdbc.env.internal.LobCreationLogging.LOB_LOGGER; import static org.hibernate.engine.jdbc.env.internal.LobCreationLogging.LOB_MESSAGE_LOGGER; +import static org.hibernate.internal.util.config.ConfigurationHelper.getBoolean; /** * Utilities for LOB creation @@ -37,7 +35,7 @@ public class LobCreationHelper { * @param jdbcConnection The connection which can be used in level-of-support testing. */ public static EnumSet getSupportedContextualLobTypes(Dialect dialect, Map configValues, Connection jdbcConnection) { - if ( ConfigurationHelper.getBoolean( Environment.NON_CONTEXTUAL_LOB_CREATION, configValues ) ) { + if ( getBoolean( Environment.NON_CONTEXTUAL_LOB_CREATION, configValues ) ) { LOB_MESSAGE_LOGGER.disablingContextualLOBCreation( Environment.NON_CONTEXTUAL_LOB_CREATION ); return NONE; } @@ -48,14 +46,14 @@ public static EnumSet getSupportedContextualLobTypes(Dialect dialect, } try { - final DatabaseMetaData meta = jdbcConnection.getMetaData(); + final var databaseMetaData = jdbcConnection.getMetaData(); // if the jdbc driver version is less than 4, it shouldn't have createClob - if ( meta.getJDBCMajorVersion() < 4 ) { - LOB_MESSAGE_LOGGER.nonContextualLobCreationJdbcVersion( meta.getJDBCMajorVersion() ); + if ( databaseMetaData.getJDBCMajorVersion() < 4 ) { + LOB_MESSAGE_LOGGER.nonContextualLobCreationJdbcVersion( databaseMetaData.getJDBCMajorVersion() ); return NONE; } - if ( !dialect.supportsJdbcConnectionLobCreation( meta ) ) { + if ( !dialect.supportsJdbcConnectionLobCreation( databaseMetaData ) ) { LOB_MESSAGE_LOGGER.nonContextualLobCreationDialect(); return NONE; } @@ -64,15 +62,12 @@ public static EnumSet getSupportedContextualLobTypes(Dialect dialect, // ignore exception and continue } - // NOTE : for the time being we assume that the ability to call - // `createClob` implies the ability to call `#createBlob` + // NOTE: for the time being, we assume that the ability to call + // createClob() implies the ability to call createBlob() if ( canCreateClob( jdbcConnection ) ) { - if ( canCreateNClob( jdbcConnection ) ) { - return EnumSet.of( LobTypes.BLOB, LobTypes.CLOB, LobTypes.NCLOB ); - } - else { - return EnumSet.of( LobTypes.BLOB, LobTypes.CLOB ); - } + return canCreateNClob( jdbcConnection ) + ? EnumSet.of( LobTypes.BLOB, LobTypes.CLOB, LobTypes.NCLOB ) + : EnumSet.of( LobTypes.BLOB, LobTypes.CLOB ); } return NONE; @@ -80,9 +75,10 @@ public static EnumSet getSupportedContextualLobTypes(Dialect dialect, private static boolean canCreateClob(Connection jdbcConnection) { try { - // we just want to see if the driver can create one. we can immediately free it. - final Clob clob = jdbcConnection.createClob(); + // We just want to see if the driver can create one + final var clob = jdbcConnection.createClob(); try { + // We can immediately free it clob.free(); } catch (Throwable e) { @@ -98,9 +94,10 @@ private static boolean canCreateClob(Connection jdbcConnection) { private static boolean canCreateNClob(Connection jdbcConnection) { try { - // we just want to see if the driver can create one. we can immediately free it. - final Clob clob = jdbcConnection.createNClob(); + // We just want to see if the driver can create one + final var clob = jdbcConnection.createNClob(); try { + // We can immediately free it clob.free(); } catch (Throwable e) { diff --git a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/env/internal/LobCreatorBuilderImpl.java b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/env/internal/LobCreatorBuilderImpl.java index 93457f225d84..f7e847ee9306 100644 --- a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/env/internal/LobCreatorBuilderImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/env/internal/LobCreatorBuilderImpl.java @@ -74,12 +74,9 @@ public LobCreator buildLobCreator(LobCreationContext lobCreationContext) { } else if ( supportedContextualLobTypes.contains( LobTypes.BLOB ) && supportedContextualLobTypes.contains( LobTypes.CLOB ) ){ - if ( !supportedContextualLobTypes.contains( LobTypes.NCLOB ) ) { - return new BlobAndClobCreator( lobCreationContext, useConnectionToCreateLob ); - } - else { - return new StandardLobCreator( lobCreationContext, useConnectionToCreateLob ); - } + return !supportedContextualLobTypes.contains( LobTypes.NCLOB ) + ? new BlobAndClobCreator( lobCreationContext, useConnectionToCreateLob ) + : new StandardLobCreator( lobCreationContext, useConnectionToCreateLob ); } else { LOB_LOGGER.debug( "Unexpected condition resolving type of LobCreator to use. Falling back to NonContextualLobCreator" ); diff --git a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/env/internal/NormalizingIdentifierHelperImpl.java b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/env/internal/NormalizingIdentifierHelperImpl.java index 6a4f56ec9c13..f4c683fbfeb0 100644 --- a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/env/internal/NormalizingIdentifierHelperImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/env/internal/NormalizingIdentifierHelperImpl.java @@ -72,10 +72,11 @@ else if ( mustQuote( identifier ) ) { } private boolean mustQuote(Identifier identifier) { + final String identifierText = identifier.getText(); return globallyQuoteIdentifiers - || autoQuoteKeywords && isReservedWord( identifier.getText() ) - || autoQuoteInitialUnderscore && identifier.getText().startsWith( "_" ) - || autoQuoteDollar && identifier.getText().contains( "$" ); + || autoQuoteKeywords && isReservedWord( identifierText ) + || autoQuoteInitialUnderscore && identifierText.startsWith( "_" ) + || autoQuoteDollar && identifierText.contains( "$" ); } @Override @@ -107,15 +108,13 @@ public String toMetaDataCatalogName(Identifier identifier) { // null is used to tell DatabaseMetaData to not limit results based on catalog. return null; } - - if ( identifier == null ) { - if ( jdbcEnvironment.getCurrentCatalog() == null ) { - return ""; - } - identifier = jdbcEnvironment.getCurrentCatalog(); + else { + final var id = + identifier == null + ? jdbcEnvironment.getCurrentCatalog() + : identifier; + return id == null ? "" : toMetaDataText( id ); } - - return toMetaDataText( identifier ); } private String toMetaDataText(Identifier identifier) { @@ -149,15 +148,14 @@ public String toMetaDataSchemaName(Identifier identifier) { // null is used to tell DatabaseMetaData to not limit results based on schema. return null; } - - if ( identifier == null ) { - if ( jdbcEnvironment.getCurrentSchema() == null ) { - return ""; - } - identifier = jdbcEnvironment.getCurrentSchema(); + else { + final var id = + identifier == null + ? jdbcEnvironment.getCurrentSchema() + : identifier; + return id == null ? "" : toMetaDataText( id ); } - return toMetaDataText( identifier ); } @Override diff --git a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/env/internal/QualifiedObjectNameFormatterStandardImpl.java b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/env/internal/QualifiedObjectNameFormatterStandardImpl.java index a4424cfdca2d..3c133b25beee 100644 --- a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/env/internal/QualifiedObjectNameFormatterStandardImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/env/internal/QualifiedObjectNameFormatterStandardImpl.java @@ -35,24 +35,16 @@ private Format buildFormat( NameQualifierSupport nameQualifierSupport, String catalogSeparator, boolean catalogAtEnd) { - switch ( nameQualifierSupport ) { - case NONE: { - return NoQualifierSupportFormat.INSTANCE; - } - case CATALOG: { - return catalogAtEnd - ? new NameCatalogFormat( catalogSeparator ) - : new CatalogNameFormat( catalogSeparator ); - } - case SCHEMA: { - return SchemaNameFormat.INSTANCE; - } - default: { - return catalogAtEnd - ? new SchemaNameCatalogFormat( catalogSeparator ) - : new CatalogSchemaNameFormat( catalogSeparator ); - } - } + return switch ( nameQualifierSupport ) { + case NONE -> NoQualifierSupportFormat.INSTANCE; + case CATALOG -> catalogAtEnd + ? new NameCatalogFormat( catalogSeparator ) + : new CatalogNameFormat( catalogSeparator ); + case SCHEMA -> SchemaNameFormat.INSTANCE; + default -> catalogAtEnd + ? new SchemaNameCatalogFormat( catalogSeparator ) + : new CatalogSchemaNameFormat( catalogSeparator ); + }; } public QualifiedObjectNameFormatterStandardImpl(NameQualifierSupport nameQualifierSupport, String catalogSeparator) { @@ -112,126 +104,82 @@ private interface Format { String format(Identifier catalog, Identifier schema, Identifier name, Dialect dialect); } - private static class NoQualifierSupportFormat implements Format { - /** - * Singleton access - */ + private record NoQualifierSupportFormat() implements Format { public static final NoQualifierSupportFormat INSTANCE = new NoQualifierSupportFormat(); - @Override public String format(Identifier catalog, Identifier schema, Identifier name, Dialect dialect) { return render( name, dialect ); } } - private static class SchemaNameCatalogFormat implements Format { - private final String catalogSeparator; - - public SchemaNameCatalogFormat(String catalogSeparator) { - this.catalogSeparator = catalogSeparator; - } - + private record SchemaNameCatalogFormat(String catalogSeparator) implements Format { @Override public String format(Identifier catalog, Identifier schema, Identifier name, Dialect dialect) { - StringBuilder buff = new StringBuilder(); + final var formatted = new StringBuilder(); if ( schema != null ) { - buff.append( render( schema, dialect ) ).append( '.' ); + formatted.append( render( schema, dialect ) ).append( '.' ); } - - buff.append( render( name, dialect ) ); - + formatted.append( render( name, dialect ) ); if ( catalog != null ) { - buff.append( catalogSeparator ).append( render( catalog, dialect ) ); + formatted.append( catalogSeparator ).append( render( catalog, dialect ) ); } - - return buff.toString(); + return formatted.toString(); } } - private static class CatalogSchemaNameFormat implements Format { - private final String catalogSeparator; - - public CatalogSchemaNameFormat(String catalogSeparator) { - this.catalogSeparator = catalogSeparator; - } + private record CatalogSchemaNameFormat(String catalogSeparator) implements Format { @Override public String format(Identifier catalog, Identifier schema, Identifier name, Dialect dialect) { - StringBuilder buff = new StringBuilder(); - + final var formatted = new StringBuilder(); if ( catalog != null ) { - buff.append( render( catalog, dialect ) ).append( catalogSeparator ); + formatted.append( render( catalog, dialect ) ).append( catalogSeparator ); } - if ( schema != null ) { - buff.append( render( schema, dialect ) ).append( '.' ); + formatted.append( render( schema, dialect ) ).append( '.' ); } - - buff.append( render( name, dialect ) ); - - return buff.toString(); + formatted.append( render( name, dialect ) ); + return formatted.toString(); } } - private static class NameCatalogFormat implements Format { - private final String catalogSeparator; - - public NameCatalogFormat(String catalogSeparator) { - this.catalogSeparator = catalogSeparator; - } - + private record NameCatalogFormat(String catalogSeparator) implements Format { @Override public String format(Identifier catalog, Identifier schema, Identifier name, Dialect dialect) { - StringBuilder buff = new StringBuilder(); - - buff.append( render( name, dialect ) ); - + final var formatted = new StringBuilder(); + formatted.append( render( name, dialect ) ); if ( catalog != null ) { - buff.append( catalogSeparator ).append( render( catalog, dialect ) ); + formatted.append( catalogSeparator ).append( render( catalog, dialect ) ); } - - return buff.toString(); + return formatted.toString(); } } - private static class CatalogNameFormat implements Format { - private final String catalogSeparator; - - public CatalogNameFormat(String catalogSeparator) { - this.catalogSeparator = catalogSeparator; - } - + private record CatalogNameFormat(String catalogSeparator) implements Format { @Override - public String format(Identifier catalog, Identifier schema, Identifier name, Dialect dialect) { - StringBuilder buff = new StringBuilder(); - - if ( catalog != null ) { - buff.append( render( catalog, dialect ) ).append( catalogSeparator ); + public String format(Identifier catalog, Identifier schema, Identifier name, Dialect dialect) { + final var formatted = new StringBuilder(); + if ( catalog != null ) { + formatted.append( render( catalog, dialect ) ).append( catalogSeparator ); + } + formatted.append( render( name, dialect ) ); + return formatted.toString(); } - - buff.append( render( name, dialect ) ); - - return buff.toString(); } - } - private static class SchemaNameFormat implements Format { + private record SchemaNameFormat() implements Format { /** * Singleton access */ public static final SchemaNameFormat INSTANCE = new SchemaNameFormat(); - @Override public String format(Identifier catalog, Identifier schema, Identifier name, Dialect dialect) { - StringBuilder buff = new StringBuilder(); - + final var formatted = new StringBuilder(); if ( schema != null ) { - buff.append( render( schema, dialect ) ).append( '.' ); + formatted.append( render( schema, dialect ) ).append( '.' ); } - - buff.append( render( name, dialect ) ); - - return buff.toString(); + formatted.append( render( name, dialect ) ); + return formatted.toString(); } } } diff --git a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/internal/JdbcCoordinatorImpl.java b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/internal/JdbcCoordinatorImpl.java index 851d8fa77a21..eddbe1d517e7 100644 --- a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/internal/JdbcCoordinatorImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/internal/JdbcCoordinatorImpl.java @@ -19,7 +19,6 @@ import org.hibernate.engine.jdbc.spi.StatementPreparer; import org.hibernate.jdbc.WorkExecutor; import org.hibernate.jdbc.WorkExecutorVisitable; -import org.hibernate.resource.jdbc.ResourceRegistry; import org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl; import org.hibernate.resource.jdbc.internal.LogicalConnectionProvidedImpl; import org.hibernate.resource.jdbc.internal.ResourceRegistryStandardImpl; @@ -87,7 +86,7 @@ public JdbcCoordinatorImpl( private static LogicalConnectionImplementor createLogicalConnection( Connection userSuppliedConnection, JdbcSessionOwner owner) { - final ResourceRegistry resourceRegistry = + final var resourceRegistry = new ResourceRegistryStandardImpl( owner.getJdbcSessionContext().getEventHandler() ); return userSuppliedConnection == null ? new LogicalConnectionManagedImpl( owner, resourceRegistry ) @@ -149,7 +148,7 @@ public Connection close() { if ( TRACE_ENABLED ) { JDBC_MESSAGE_LOGGER.closingJdbcCoordinator( hashCode() ); } - Connection connection; + final Connection connection; try { if ( currentBatch != null ) { JDBC_MESSAGE_LOGGER.closingUnreleasedBatch( hashCode() ); @@ -178,9 +177,9 @@ public Batch getBatch(BatchKey key, Integer batchSize, Supplier T coordinateWork(WorkExecutorVisitable work) { - final Connection connection = getLogicalConnection().getPhysicalConnection(); + final var connection = getLogicalConnection().getPhysicalConnection(); try { final T result = work.accept( new WorkExecutor<>(), connection ); afterStatementExecution(); @@ -334,7 +333,7 @@ public void registerLastQuery(Statement statement) { // LOG.tracef( "Registering last query statement [%s] @%s", statement, hashCode() ); // } if ( statement instanceof JdbcWrapper ) { - final JdbcWrapper wrapper = (JdbcWrapper) statement; + final var wrapper = (JdbcWrapper) statement; registerLastQuery( wrapper.getWrappedObject() ); } else { @@ -358,7 +357,7 @@ public void cancelLastQuery() { } private SqlExceptionHelper safeSqlExceptionHelper() { - final SqlExceptionHelper sqlExceptionHelper = sqlExceptionHelper(); + final var sqlExceptionHelper = sqlExceptionHelper(); //Should always be non-null, but to make sure as the implementation is lazy: return sqlExceptionHelper == null ? new SqlExceptionHelper( false ) : sqlExceptionHelper; } diff --git a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/internal/JdbcServicesImpl.java b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/internal/JdbcServicesImpl.java index cdf495f00b72..0f557ec07ec3 100644 --- a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/internal/JdbcServicesImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/internal/JdbcServicesImpl.java @@ -64,10 +64,7 @@ public JdbcConnectionAccess getBootstrapJdbcConnectionAccess() { @Override public Dialect getDialect() { - if ( jdbcEnvironment != null ) { - return jdbcEnvironment.getDialect(); - } - return null; + return jdbcEnvironment != null ? jdbcEnvironment.getDialect() : null; } @Override diff --git a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/internal/MutationStatementPreparerImpl.java b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/internal/MutationStatementPreparerImpl.java index 59c8837ccf0d..00157e228403 100644 --- a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/internal/MutationStatementPreparerImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/internal/MutationStatementPreparerImpl.java @@ -12,11 +12,7 @@ import org.hibernate.engine.jdbc.spi.JdbcServices; import org.hibernate.engine.jdbc.spi.MutationStatementPreparer; import org.hibernate.engine.jdbc.spi.SqlExceptionHelper; -import org.hibernate.event.monitor.spi.EventMonitor; -import org.hibernate.event.monitor.spi.DiagnosticEvent; -import org.hibernate.resource.jdbc.spi.JdbcEventHandler; import org.hibernate.resource.jdbc.spi.JdbcSessionContext; -import org.hibernate.resource.jdbc.spi.JdbcSessionOwner; import org.hibernate.resource.jdbc.spi.LogicalConnectionImplementor; /** @@ -82,20 +78,19 @@ private abstract class StatementPreparationTemplate { protected final String sql; protected StatementPreparationTemplate(String incomingSql) { - final String inspectedSql = jdbcCoordinator.getJdbcSessionOwner() - .getJdbcSessionContext() - .getStatementInspector() - .inspect( incomingSql ); - this.sql = inspectedSql == null ? incomingSql : inspectedSql; + final String inspectedSql = + jdbcCoordinator.getJdbcSessionOwner().getJdbcSessionContext() + .getStatementInspector().inspect( incomingSql ); + sql = inspectedSql == null ? incomingSql : inspectedSql; } public PreparedStatement prepareStatement() { try { + final var jdbcSessionOwner = jdbcCoordinator.getJdbcSessionOwner(); + final var jdbcEventHandler = jdbcSessionOwner.getJdbcSessionContext().getEventHandler(); + final var eventMonitor = jdbcSessionOwner.getEventMonitor(); + final var jdbcPreparedStatementCreation = eventMonitor.beginJdbcPreparedStatementCreationEvent(); final PreparedStatement preparedStatement; - final JdbcSessionOwner jdbcSessionOwner = jdbcCoordinator.getJdbcSessionOwner(); - final JdbcEventHandler jdbcEventHandler = jdbcSessionOwner.getJdbcSessionContext().getEventHandler(); - final EventMonitor eventMonitor = jdbcSessionOwner.getEventMonitor(); - final DiagnosticEvent jdbcPreparedStatementCreation = eventMonitor.beginJdbcPreparedStatementCreationEvent(); try { jdbcEventHandler.jdbcPrepareStatementStart(); preparedStatement = doPrepare(); diff --git a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/internal/ResultSetReturnImpl.java b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/internal/ResultSetReturnImpl.java index fec6a32a57a5..e37887a7805c 100644 --- a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/internal/ResultSetReturnImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/internal/ResultSetReturnImpl.java @@ -15,7 +15,6 @@ import org.hibernate.engine.jdbc.spi.SqlExceptionHelper; import org.hibernate.engine.jdbc.spi.SqlStatementLogger; import org.hibernate.event.monitor.spi.EventMonitor; -import org.hibernate.event.monitor.spi.DiagnosticEvent; import org.hibernate.resource.jdbc.spi.JdbcEventHandler; import org.hibernate.resource.jdbc.spi.JdbcSessionContext; @@ -43,27 +42,23 @@ public ResultSetReturnImpl(JdbcCoordinator jdbcCoordinator, JdbcServices jdbcSer @Override public ResultSet extract(PreparedStatement statement, String sql) { - // IMPL NOTE : SQL logged by caller - long executeStartNanos = 0; - if ( this.sqlStatementLogger.getLogSlowQuery() > 0 ) { - executeStartNanos = System.nanoTime(); - } + // IMPL NOTE: SQL logged by caller + final long executeStartNanos = beginSlowQueryLogging(); try { - final ResultSet rs; - final EventMonitor eventMonitor = getEventManager(); - final DiagnosticEvent executionEvent = - eventMonitor.beginJdbcPreparedStatementExecutionEvent(); + final var eventMonitor = getEventManager(); + final var executionEvent = eventMonitor.beginJdbcPreparedStatementExecutionEvent(); + final ResultSet resultSet; try { jdbcExecuteStatementStart(); - rs = statement.executeQuery(); + resultSet = statement.executeQuery(); } finally { eventMonitor.completeJdbcPreparedStatementExecutionEvent( executionEvent, sql ); jdbcExecuteStatementEnd(); endSlowQueryLogging(sql, executeStartNanos); } - postExtract( rs, statement ); - return rs; + postExtract( resultSet, statement ); + return resultSet; } catch (SQLException e) { throw sqlExceptionHelper.convert( e, "could not extract ResultSet", sql ); @@ -95,21 +90,20 @@ public ResultSet extract(Statement statement, String sql) { sqlStatementLogger.logStatement( sql ); long executeStartNanos = beginSlowQueryLogging(); try { - final ResultSet rs; - final EventMonitor eventMonitor = getEventManager(); - final DiagnosticEvent executionEvent = - eventMonitor.beginJdbcPreparedStatementExecutionEvent(); + final var eventMonitor = getEventManager(); + final var executionEvent = eventMonitor.beginJdbcPreparedStatementExecutionEvent(); + final ResultSet resultSet; try { jdbcExecuteStatementStart(); - rs = statement.executeQuery( sql ); + resultSet = statement.executeQuery( sql ); } finally { eventMonitor.completeJdbcPreparedStatementExecutionEvent( executionEvent, sql ); jdbcExecuteStatementEnd(); endSlowQueryLogging( sql, executeStartNanos ); } - postExtract( rs, statement ); - return rs; + postExtract( resultSet, statement ); + return resultSet; } catch (SQLException e) { throw sqlExceptionHelper.convert( e, "could not extract ResultSet", sql ); @@ -121,10 +115,9 @@ public ResultSet execute(PreparedStatement statement, String sql) { // sql logged by StatementPreparerImpl long executeStartNanos = beginSlowQueryLogging(); try { - final ResultSet rs; - final EventMonitor eventMonitor = getEventManager(); - final DiagnosticEvent executionEvent = - eventMonitor.beginJdbcPreparedStatementExecutionEvent(); + final var eventMonitor = getEventManager(); + final var executionEvent = eventMonitor.beginJdbcPreparedStatementExecutionEvent(); + final ResultSet resultSet; try { jdbcExecuteStatementStart(); if ( !statement.execute() ) { @@ -132,15 +125,15 @@ public ResultSet execute(PreparedStatement statement, String sql) { // do nothing until we hit the resultset } } - rs = statement.getResultSet(); + resultSet = statement.getResultSet(); } finally { eventMonitor.completeJdbcPreparedStatementExecutionEvent( executionEvent, sql ); jdbcExecuteStatementEnd(); endSlowQueryLogging( sql, executeStartNanos ); } - postExtract( rs, statement ); - return rs; + postExtract( resultSet, statement ); + return resultSet; } catch (SQLException e) { throw sqlExceptionHelper.convert( e, "could not execute statement", sql ); @@ -152,10 +145,9 @@ public ResultSet execute(Statement statement, String sql) { sqlStatementLogger.logStatement( sql ); long executeStartNanos = beginSlowQueryLogging(); try { - final ResultSet rs; - final EventMonitor eventMonitor = getEventManager(); - final DiagnosticEvent executionEvent = - eventMonitor.beginJdbcPreparedStatementExecutionEvent(); + final var eventMonitor = getEventManager(); + final var executionEvent = eventMonitor.beginJdbcPreparedStatementExecutionEvent(); + final ResultSet resultSet; try { jdbcExecuteStatementStart(); if ( !statement.execute( sql ) ) { @@ -163,15 +155,15 @@ public ResultSet execute(Statement statement, String sql) { // do nothing until we hit the resultset } } - rs = statement.getResultSet(); + resultSet = statement.getResultSet(); } finally { eventMonitor.completeJdbcPreparedStatementExecutionEvent( executionEvent, sql ); jdbcExecuteStatementEnd(); endSlowQueryLogging( sql, executeStartNanos ); } - postExtract( rs, statement ); - return rs; + postExtract( resultSet, statement ); + return resultSet; } catch (SQLException e) { throw sqlExceptionHelper.convert( e, "could not execute statement", sql ); @@ -181,10 +173,9 @@ public ResultSet execute(Statement statement, String sql) { @Override public int executeUpdate(PreparedStatement statement, String sql) { assert statement != null; - long executeStartNanos = beginSlowQueryLogging(); - final EventMonitor eventMonitor = getEventManager(); - final DiagnosticEvent executionEvent = - eventMonitor.beginJdbcPreparedStatementExecutionEvent(); + final long executeStartNanos = beginSlowQueryLogging(); + final var eventMonitor = getEventManager(); + final var executionEvent = eventMonitor.beginJdbcPreparedStatementExecutionEvent(); try { jdbcExecuteStatementStart(); return statement.executeUpdate(); @@ -203,9 +194,8 @@ public int executeUpdate(PreparedStatement statement, String sql) { public int executeUpdate(Statement statement, String sql) { sqlStatementLogger.logStatement( sql ); long executeStartNanos = beginSlowQueryLogging(); - final EventMonitor eventMonitor = getEventManager(); - final DiagnosticEvent executionEvent = - eventMonitor.beginJdbcPreparedStatementExecutionEvent(); + final var eventMonitor = getEventManager(); + final var executionEvent = eventMonitor.beginJdbcPreparedStatementExecutionEvent(); try { jdbcExecuteStatementStart(); return statement.executeUpdate( sql ); @@ -228,9 +218,10 @@ private long beginSlowQueryLogging() { return sqlStatementLogger.getLogSlowQuery() > 0 ? System.nanoTime() : 0; } - private void postExtract(ResultSet rs, Statement st) { - if ( rs != null ) { - jdbcCoordinator.getLogicalConnection().getResourceRegistry().register( rs, st ); + private void postExtract(ResultSet resultSet, Statement statement) { + if ( resultSet != null ) { + jdbcCoordinator.getLogicalConnection().getResourceRegistry() + .register( resultSet, statement ); } } diff --git a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/internal/StatementPreparerImpl.java b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/internal/StatementPreparerImpl.java index 093d88c5b7fa..12b82f1c370f 100644 --- a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/internal/StatementPreparerImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/internal/StatementPreparerImpl.java @@ -16,11 +16,7 @@ import org.hibernate.engine.jdbc.spi.JdbcServices; import org.hibernate.engine.jdbc.spi.SqlExceptionHelper; import org.hibernate.engine.jdbc.spi.StatementPreparer; -import org.hibernate.event.monitor.spi.EventMonitor; -import org.hibernate.event.monitor.spi.DiagnosticEvent; -import org.hibernate.resource.jdbc.spi.JdbcEventHandler; import org.hibernate.resource.jdbc.spi.JdbcSessionContext; -import org.hibernate.resource.jdbc.spi.JdbcSessionOwner; import org.hibernate.resource.jdbc.spi.LogicalConnectionImplementor; import org.checkerframework.checker.nullness.qual.Nullable; @@ -68,7 +64,7 @@ protected final SqlExceptionHelper sqlExceptionHelper() { @Override public Statement createStatement() { try { - final Statement statement = connection().createStatement(); + final var statement = connection().createStatement(); jdbcCoordinator.getLogicalConnection().getResourceRegistry().register( statement, true ); return statement; } @@ -151,37 +147,37 @@ public PreparedStatement prepareQueryStatement( resultSetType = ResultSet.TYPE_FORWARD_ONLY; } - final PreparedStatement ps = new QueryStatementPreparationTemplate( sql ) { - public PreparedStatement doPrepare() throws SQLException { - return isCallable - ? connection().prepareCall( sql, resultSetType, ResultSet.CONCUR_READ_ONLY ) - : connection().prepareStatement( sql, resultSetType, ResultSet.CONCUR_READ_ONLY ); - } - }.prepareStatement(); - jdbcCoordinator.registerLastQuery( ps ); - return ps; + final var preparedStatement = + new QueryStatementPreparationTemplate( sql ) { + public PreparedStatement doPrepare() throws SQLException { + return isCallable + ? connection().prepareCall( sql, resultSetType, ResultSet.CONCUR_READ_ONLY ) + : connection().prepareStatement( sql, resultSetType, ResultSet.CONCUR_READ_ONLY ); + } + }.prepareStatement(); + jdbcCoordinator.registerLastQuery( preparedStatement ); + return preparedStatement; } private abstract class StatementPreparationTemplate { protected final String sql; protected StatementPreparationTemplate(String incomingSql) { - final String inspectedSql = jdbcCoordinator.getJdbcSessionOwner() - .getJdbcSessionContext() - .getStatementInspector() - .inspect( incomingSql ); - this.sql = inspectedSql == null ? incomingSql : inspectedSql; + final String inspectedSql = + jdbcCoordinator.getJdbcSessionOwner().getJdbcSessionContext() + .getStatementInspector().inspect( incomingSql ); + sql = inspectedSql == null ? incomingSql : inspectedSql; } public PreparedStatement prepareStatement() { try { jdbcServices.getSqlStatementLogger().logStatement( sql ); + final var jdbcSessionOwner = jdbcCoordinator.getJdbcSessionOwner(); + final var observer = jdbcSessionOwner.getJdbcSessionContext().getEventHandler(); + final var eventMonitor = jdbcSessionOwner.getEventMonitor(); + final var jdbcPreparedStatementCreation = eventMonitor.beginJdbcPreparedStatementCreationEvent(); final PreparedStatement preparedStatement; - final JdbcSessionOwner jdbcSessionOwner = jdbcCoordinator.getJdbcSessionOwner(); - final JdbcEventHandler observer = jdbcSessionOwner.getJdbcSessionContext().getEventHandler(); - final EventMonitor eventMonitor = jdbcSessionOwner.getEventMonitor(); - final DiagnosticEvent jdbcPreparedStatementCreation = eventMonitor.beginJdbcPreparedStatementCreationEvent(); try { observer.jdbcPrepareStatementStart(); preparedStatement = doPrepare();