Search in sources :

Example 6 with SqlStatementLogger

use of org.hibernate.engine.jdbc.spi.SqlStatementLogger in project hibernate-orm by hibernate.

the class TableStructure method buildCallback.

@Override
public AccessCallback buildCallback(final SharedSessionContractImplementor session) {
    final SqlStatementLogger statementLogger = session.getFactory().getServiceRegistry().getService(JdbcServices.class).getSqlStatementLogger();
    if (selectQuery == null || updateQuery == null) {
        throw new AssertionFailure("SequenceStyleGenerator's TableStructure was not properly initialized");
    }
    final SessionEventListenerManager statsCollector = session.getEventListenerManager();
    return new AccessCallback() {

        @Override
        public IntegralDataTypeHolder getNextValue() {
            return session.getTransactionCoordinator().createIsolationDelegate().delegateWork(new AbstractReturningWork<IntegralDataTypeHolder>() {

                @Override
                public IntegralDataTypeHolder execute(Connection connection) throws SQLException {
                    final IntegralDataTypeHolder value = makeValue();
                    int rows;
                    do {
                        try (PreparedStatement selectStatement = prepareStatement(connection, selectQuery, statementLogger, statsCollector)) {
                            final ResultSet selectRS = executeQuery(selectStatement, statsCollector);
                            if (!selectRS.next()) {
                                final String err = "could not read a hi value - you need to populate the table: " + tableNameText;
                                LOG.error(err);
                                throw new IdentifierGenerationException(err);
                            }
                            value.initialize(selectRS, 1);
                            selectRS.close();
                        } catch (SQLException sqle) {
                            LOG.error("could not read a hi value", sqle);
                            throw sqle;
                        }
                        try (PreparedStatement updatePS = prepareStatement(connection, updateQuery, statementLogger, statsCollector)) {
                            final int increment = applyIncrementSizeToSourceValues ? incrementSize : 1;
                            final IntegralDataTypeHolder updateValue = value.copy().add(increment);
                            updateValue.bind(updatePS, 1);
                            value.bind(updatePS, 2);
                            rows = executeUpdate(updatePS, statsCollector);
                        } catch (SQLException e) {
                            LOG.unableToUpdateQueryHiValue(tableNameText, e);
                            throw e;
                        }
                    } while (rows == 0);
                    accessCounter++;
                    return value;
                }
            }, true);
        }

        @Override
        public String getTenantIdentifier() {
            return session.getTenantIdentifier();
        }
    };
}
Also used : AssertionFailure(org.hibernate.AssertionFailure) SQLException(java.sql.SQLException) Connection(java.sql.Connection) IdentifierGenerationException(org.hibernate.id.IdentifierGenerationException) JdbcServices(org.hibernate.engine.jdbc.spi.JdbcServices) PreparedStatement(java.sql.PreparedStatement) ResultSet(java.sql.ResultSet) SqlStatementLogger(org.hibernate.engine.jdbc.spi.SqlStatementLogger) SessionEventListenerManager(org.hibernate.engine.spi.SessionEventListenerManager) IntegralDataTypeHolder(org.hibernate.id.IntegralDataTypeHolder)

Aggregations

SqlStatementLogger (org.hibernate.engine.jdbc.spi.SqlStatementLogger)6 Connection (java.sql.Connection)4 SQLException (java.sql.SQLException)4 JdbcServices (org.hibernate.engine.jdbc.spi.JdbcServices)4 PreparedStatement (java.sql.PreparedStatement)3 ResultSet (java.sql.ResultSet)3 SessionEventListenerManager (org.hibernate.engine.spi.SessionEventListenerManager)3 IntegralDataTypeHolder (org.hibernate.id.IntegralDataTypeHolder)2 AbstractReturningWork (org.hibernate.jdbc.AbstractReturningWork)2 AssertionFailure (org.hibernate.AssertionFailure)1 JdbcEnvironmentImpl (org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentImpl)1 JdbcEnvironment (org.hibernate.engine.jdbc.env.spi.JdbcEnvironment)1 IdentifierGenerationException (org.hibernate.id.IdentifierGenerationException)1 AccessCallback (org.hibernate.id.enhanced.AccessCallback)1