@Override public JDBCException convert(SQLException e, String message) { return sharedSessionContract.getJdbcServices().getSqlExceptionHelper().convert( e, message ); }
@Override public String renderCallableStatement( String procedureName, ParameterStrategy parameterStrategy, List<ParameterRegistrationImplementor<?>> parameterRegistrations, SharedSessionContractImplementor session) { final StringBuilder buffer = new StringBuilder().append( "{call " ) .append( procedureName ) .append( "(" ); String sep = ""; for ( ParameterRegistrationImplementor parameter : parameterRegistrations ) { if ( parameter == null ) { throw new QueryException( "Parameter registrations had gaps" ); } if ( parameter.getMode() == ParameterMode.REF_CURSOR ) { verifyRefCursorSupport( session.getJdbcServices().getJdbcEnvironment().getDialect() ); buffer.append( sep ).append( "?" ); sep = ","; } else { for ( int i = 0; i < parameter.getSqlTypes().length; i++ ) { buffer.append( sep ).append( "?" ); sep = ","; } } } return buffer.append( ")}" ).toString(); }
@Override protected NClob getReplacement(NClob original, NClob target, SharedSessionContractImplementor session) { return session.getJdbcServices().getJdbcEnvironment().getDialect().getLobMergeStrategy().mergeNClob( original, target, session ); } }
@Override protected Clob getReplacement(Clob original, Clob target, SharedSessionContractImplementor session) { return session.getJdbcServices().getJdbcEnvironment().getDialect().getLobMergeStrategy().mergeClob( (Clob) original, (Clob) target, session ); } }
protected JDBCException convert(SQLException e, String message) { return context.getSession().getJdbcServices().getSqlExceptionHelper().convert( e, message, context.getSql() ); }
@Override protected Blob getReplacement(Blob original, Blob target, SharedSessionContractImplementor session) { return session.getJdbcServices().getJdbcEnvironment().getDialect().getLobMergeStrategy().mergeBlob( original, target, session ); }
@Override protected Serializable getResult( SharedSessionContractImplementor session, ResultSet rs, Object object) throws SQLException { return IdentifierGeneratorHelper.getGeneratedIdentity( rs, persister.getRootTableKeyColumnNames()[0], persister.getIdentifierType(), session.getJdbcServices().getJdbcEnvironment().getDialect() ); } }
@Override public ScrollableResultsImplementor scroll() { return scroll( getProducer().getJdbcServices().getJdbcEnvironment().getDialect().defaultScrollMode() ); }
private Date getCurrentTimestamp(SharedSessionContractImplementor session) { Dialect dialect = session.getJdbcServices().getJdbcEnvironment().getDialect(); String timestampSelectString = dialect.getCurrentTimestampSelectString(); if ( dialect.isCurrentTimestampSelectStringCallable() ) { return useCallableStatement( timestampSelectString, session ); } return usePreparedStatement( timestampSelectString, session ); }
@Override public int execute(QueryParameters parameters, SharedSessionContractImplementor session) throws HibernateException { return doExecute( parameters, session, session.getJdbcServices().getDialect() .addSqlHintOrComment( sql, parameters, session.getFactory().getSessionFactoryOptions().isCommentsEnabled() ), parameterSpecifications ); }
@Override protected Serializable executeAndExtract(PreparedStatement insert, SharedSessionContractImplementor session) throws SQLException { session.getJdbcCoordinator().getResultSetReturn().executeUpdate( insert ); return IdentifierGeneratorHelper.getGeneratedIdentity( insert.getGeneratedKeys(), getPersister().getRootTableKeyColumnNames()[0], getPersister().getIdentifierType(), session.getJdbcServices().getJdbcEnvironment().getDialect() ); } }
@Override public void registerParameters( String procedureName, CallableStatement statement, ParameterStrategy parameterStrategy, List<ParameterRegistrationImplementor<?>> parameterRegistrations, SharedSessionContractImplementor session) { // prepare parameters int i = 1; try { for ( ParameterRegistrationImplementor parameter : parameterRegistrations ) { parameter.prepare( statement, i ); if ( parameter.getMode() == ParameterMode.REF_CURSOR ) { i++; } else { i += parameter.getSqlTypes().length; } } } catch (SQLException e) { throw session.getJdbcServices().getSqlExceptionHelper().convert( e, "Error registering CallableStatement parameters", procedureName ); } } }
@Override public Date seed(SharedSessionContractImplementor session) { if ( session == null ) { LOG.trace( "Incoming session was null; using current jvm time" ); return super.seed( null ); } else if ( !session.getJdbcServices().getJdbcEnvironment().getDialect().supportsCurrentTimestampSelection() ) { LOG.debug( "Falling back to vm-based timestamp, as dialect does not support current timestamp selection" ); return super.seed( session ); } else { return getCurrentTimestamp( session ); } }
@Override public void accept(QueryParameter queryParameter) { try { final ParameterRegistrationImplementor registration = (ParameterRegistrationImplementor) queryParameter; registration.prepare( statement, i ); if ( registration.getMode() == ParameterMode.REF_CURSOR ) { i++; } else { i += registration.getSqlTypes().length; } } catch (SQLException e) { throw getSession().getJdbcServices().getSqlExceptionHelper().convert( e, "Error preparing registered callable parameter", getProcedureName() ); } } }
@Override public final Serializable performInsert( String insertSQL, SharedSessionContractImplementor session, Binder binder) { try { // prepare and execute the insert PreparedStatement insert = prepare( insertSQL, session ); try { binder.bindValues( insert ); return executeAndExtract( insert, session ); } finally { releaseStatement( insert, session ); } } catch (SQLException sqle) { throw session.getJdbcServices().getSqlExceptionHelper().convert( sqle, "could not insert: " + MessageHelper.infoString( persister ), insertSQL ); } }
@Override public Serializable executeAndExtract(PreparedStatement insert, SharedSessionContractImplementor session) throws SQLException { session.getJdbcCoordinator().getResultSetReturn().executeUpdate( insert ); ResultSet rs = null; try { rs = insert.getGeneratedKeys(); return IdentifierGeneratorHelper.getGeneratedIdentity( rs, persister.getRootTableKeyColumnNames()[0], persister.getIdentifierType(), session.getJdbcServices().getJdbcEnvironment().getDialect() ); } finally { if ( rs != null ) { session.getJdbcCoordinator().getLogicalConnection().getResourceRegistry().release( rs, insert ); } } } }
protected Object doBatchLoad( Serializable id, Loader loaderToUse, SharedSessionContractImplementor session, Serializable[] ids, Object optionalObject, LockOptions lockOptions) { if ( log.isDebugEnabled() ) { log.debugf( "Batch loading entity: %s", MessageHelper.infoString( persister, ids, session.getFactory() ) ); } QueryParameters qp = buildQueryParameters( id, ids, optionalObject, lockOptions ); try { final List results = loaderToUse.doQueryAndInitializeNonLazyCollections( session, qp, false ); log.debug( "Done entity batch load" ); return getObjectFromList(results, id, session); } catch ( SQLException sqle ) { throw session.getJdbcServices().getSqlExceptionHelper().convert( sqle, "could not load an entity batch: " + MessageHelper.infoString( persister(), ids, session.getFactory() ), loaderToUse.getSQLString() ); } }
@Override public Serializable executeAndExtract(PreparedStatement insert, SharedSessionContractImplementor session) throws SQLException { ResultSet rs = session.getJdbcCoordinator().getResultSetReturn().execute( insert ); try { return IdentifierGeneratorHelper.getGeneratedIdentity( rs, persister.getRootTableKeyColumnNames()[0], persister.getIdentifierType(), session.getJdbcServices().getJdbcEnvironment().getDialect() ); } finally { session.getJdbcCoordinator().getLogicalConnection().getResourceRegistry().release( rs, insert ); } }
public void cleanUpRows(String tableName, SharedSessionContractImplementor session) { final String sql = "delete from " + tableName + " where " + SESSION_ID_COLUMN_NAME + "=?"; try { PreparedStatement ps = null; try { ps = session.getJdbcCoordinator().getStatementPreparer().prepareStatement( sql, false ); bindSessionIdentifier( ps, session, 1 ); session.getJdbcCoordinator().getResultSetReturn().executeUpdate( ps ); } finally { if ( ps != null ) { try { session.getJdbcCoordinator().getLogicalConnection().getResourceRegistry().release( ps ); } catch( Throwable ignore ) { // ignore } } } } catch (SQLException e) { throw session.getJdbcServices().getSqlExceptionHelper().convert( e, "Unable to clean up id table [" + tableName + "]", sql ); } } }
protected SqlStatementWrapper executeQueryStatement( String sqlStatement, QueryParameters queryParameters, boolean scroll, List<AfterLoadAction> afterLoadActions, SharedSessionContractImplementor session) throws SQLException { // Processing query filters. queryParameters.processFilters( sqlStatement, session ); // Applying LIMIT clause. final LimitHandler limitHandler = getLimitHandler( queryParameters.getRowSelection() ); String sql = limitHandler.processSql( queryParameters.getFilteredSQL(), queryParameters.getRowSelection() ); // Adding locks and comments. sql = session.getJdbcServices().getJdbcEnvironment().getDialect() .addSqlHintOrComment( sql, queryParameters, session.getFactory().getSessionFactoryOptions().isCommentsEnabled() ); final PreparedStatement st = prepareQueryStatement( sql, queryParameters, limitHandler, scroll, session ); return new SqlStatementWrapper( st, getResultSet( st, queryParameters.getRowSelection(), limitHandler, queryParameters.hasAutoDiscoverScalarTypes(), session ) ); }