@Override public Serializable generate(SharedSessionContractImplementor session, Object object) throws HibernateException { return optimizer.generate( databaseStructure.buildCallback( session ) ); }
@Override public void prepare(Optimizer optimizer) { applyIncrementSizeToSourceValues = optimizer.applyIncrementSizeToSourceValues(); }
assertEquals( expectedId, entities[i].getId().longValue() ); assertEquals( expectedId, generator.getDatabaseStructure().getTimesAccessed() ); assertEquals( expectedId, ( (BasicHolder) generator.getOptimizer().getLastSourceValue() ).getActualLongValue() );
final SessionEventListenerManager statsCollector = session.getEventListenerManager(); return optimizer.generate( new AccessCallback() { @Override
@Override public void prepare(Optimizer optimizer) { applyIncrementSizeToSourceValues = optimizer.applyIncrementSizeToSourceValues(); }
@Test public void testBasicPooledOptimizerUsage() { Long next; // test historic sequence behavior, where the initial values start at 1... SourceMock sequence = new SourceMock( 1, 10 ); Optimizer optimizer = buildPooledOptimizer( -1, 10 ); for ( int i = 1; i <= 11; i++ ) { next = ( Long ) optimizer.generate( sequence ); assertEquals( i, next.intValue() ); } assertEquals( 2, sequence.getTimesCalled() ); // twice to initialize state assertEquals( 11, sequence.getCurrentValue() ); // force a "clock over" next = ( Long ) optimizer.generate( sequence ); assertEquals( 12, next.intValue() ); assertEquals( 3, sequence.getTimesCalled() ); assertEquals( 21, sequence.getCurrentValue() ); }
@Override public void prepare(Optimizer optimizer) { applyIncrementSizeToSourceValues = optimizer.applyIncrementSizeToSourceValues(); }
@Test public void testBasicPooledLoOptimizerUsage() { final SourceMock sequence = new SourceMock( 1, 3 ); final Optimizer optimizer = buildPooledLoOptimizer( 1, 3 ); assertEquals( 0, sequence.getTimesCalled() ); assertEquals( -1, sequence.getCurrentValue() ); Long next = ( Long ) optimizer.generate( sequence ); assertEquals( 1, next.intValue() ); assertEquals( 1, sequence.getTimesCalled() ); assertEquals( 1, sequence.getCurrentValue() ); next = ( Long ) optimizer.generate( sequence ); assertEquals( 2, next.intValue() ); assertEquals( 1, sequence.getTimesCalled() ); assertEquals( 1, sequence.getCurrentValue() ); next = ( Long ) optimizer.generate( sequence ); assertEquals( 3, next.intValue() ); assertEquals( 1, sequence.getTimesCalled() ); assertEquals( 1, sequence.getCurrentValue() ); // // force a "clock over" next = ( Long ) optimizer.generate( sequence ); assertEquals( 4, next.intValue() ); assertEquals( 2, sequence.getTimesCalled() ); assertEquals( (1+3), sequence.getCurrentValue() ); }
@Override public void prepare(Optimizer optimizer) { applyIncrementSizeToSourceValues = optimizer.applyIncrementSizeToSourceValues(); }
Long next = ( Long ) optimizer.generate( sequence ); assertEquals( (1001+3), next.intValue() ); assertEquals( (5+1), sequence.getTimesCalled() ); assertEquals( (1001+3), sequence.getCurrentValue() ); next = ( Long ) optimizer.generate( sequence ); assertEquals( (1001+4), next.intValue() ); assertEquals( (5+1), sequence.getTimesCalled() ); assertEquals( (1001+3), sequence.getCurrentValue() ); next = ( Long ) optimizer.generate( sequence ); assertEquals( (1001+5), next.intValue() ); assertEquals( (5+1), sequence.getTimesCalled() ); next = ( Long ) optimizer.generate( sequence ); assertEquals( (1001+6), next.intValue() ); assertEquals( (5+2), sequence.getTimesCalled() );
@Override public void prepare(Optimizer optimizer) { applyIncrementSizeToSourceValues = optimizer.applyIncrementSizeToSourceValues(); }
@Test public void testBasicNoOptimizerUsageWithNegativeValues() { // test historic sequence behavior, where the initial values start at 1... SourceMock sequence = new SourceMock( -1, -1 ); Optimizer optimizer = buildNoneOptimizer( -1, -1 ); for ( int i = 1; i < 11; i++ ) { final Long next = ( Long ) optimizer.generate( sequence ); assertEquals( -i, next.intValue() ); } assertEquals( 10, sequence.getTimesCalled() ); assertEquals( -10, sequence.getCurrentValue() ); // As of HHH-11709 being fixed, Hibernate will use the value retrieved from the sequence, // rather than incrementing 1. sequence = new SourceMock( 0 ); optimizer = buildNoneOptimizer( -1, 1 ); for ( int i = 1; i < 11; i++ ) { final Long next = ( Long ) optimizer.generate( sequence ); assertEquals( i-1, next.intValue() ); } assertEquals( 10, sequence.getTimesCalled() ); // an extra time to get to 1 initially assertEquals( 9, sequence.getCurrentValue() ); }
@Override public void prepare(Optimizer optimizer) { applyIncrementSizeToSourceValues = optimizer.applyIncrementSizeToSourceValues(); }
@Test public void testBasicNoOptimizerUsage() { // test historic sequence behavior, where the initial values start at 1... SourceMock sequence = new SourceMock( 1 ); Optimizer optimizer = buildNoneOptimizer( -1, 1 ); for ( int i = 1; i < 11; i++ ) { final Long next = ( Long ) optimizer.generate( sequence ); assertEquals( i, next.intValue() ); } assertEquals( 10, sequence.getTimesCalled() ); assertEquals( 10, sequence.getCurrentValue() ); // As of HHH-11709 being fixed, Hibernate will use the value retrieved from the sequence, // rather than incrementing 1. sequence = new SourceMock( 0 ); optimizer = buildNoneOptimizer( -1, 1 ); for ( int i = 1; i < 11; i++ ) { final Long next = ( Long ) optimizer.generate( sequence ); assertEquals( i-1, next.intValue() ); } assertEquals( 10, sequence.getTimesCalled() ); // an extra time to get to 1 initially assertEquals( 9, sequence.getCurrentValue() ); } @Test
@Override public void prepare(Optimizer optimizer) { applyIncrementSizeToSourceValues = optimizer.applyIncrementSizeToSourceValues(); }
@Test public void testBasicPooledThreadLocalLoOptimizerUsage() { final SourceMock sequence = new SourceMock( 1, 50 ); // pass 5000 to match default for PooledThreadLocalLoOptimizer.THREAD_LOCAL_BLOCK_SIZE final Optimizer optimizer = buildPooledThreadLocalLoOptimizer( 1, 50 ); assertEquals( 0, sequence.getTimesCalled() ); assertEquals( -1, sequence.getCurrentValue() ); Long next = ( Long ) optimizer.generate( sequence ); assertEquals( 1, next.intValue() ); assertEquals( 1, sequence.getTimesCalled() ); assertEquals( 1, sequence.getCurrentValue() ); next = ( Long ) optimizer.generate( sequence ); assertEquals( 2, next.intValue() ); assertEquals( 1, sequence.getTimesCalled() ); assertEquals( 1, sequence.getCurrentValue() ); next = ( Long ) optimizer.generate( sequence ); assertEquals( 3, next.intValue() ); assertEquals( 1, sequence.getTimesCalled() ); assertEquals( 1, sequence.getCurrentValue() ); for( int looper = 0; looper < 51; looper++) { next = ( Long ) optimizer.generate( sequence ); } assertEquals( 3 + 51, next.intValue() ); assertEquals( 2, sequence.getTimesCalled() ); assertEquals( 51, sequence.getCurrentValue() ); }
@Override public void prepare(Optimizer optimizer) { applyIncrementSizeToSourceValues = optimizer.applyIncrementSizeToSourceValues(); }
@Test public void testSubsequentPooledOptimizerUsage() { // test the pooled optimizer in situation where the sequence is already beyond its initial value on init. // cheat by telling the sequence to start with 1000 final SourceMock sequence = new SourceMock( 1001, 3, 5 ); // but tell the optimizer the start-with is 1 final Optimizer optimizer = buildPooledOptimizer( 1, 3 ); assertEquals( 5, sequence.getTimesCalled() ); assertEquals( 1001, sequence.getCurrentValue() ); Long next = (Long) optimizer.generate( sequence ); assertEquals( 1001 +1 , next.intValue() ); assertEquals( (5+1), sequence.getTimesCalled() ); assertEquals( (1001+3), sequence.getCurrentValue() ); next = (Long) optimizer.generate( sequence ); assertEquals( (1001+2), next.intValue() ); assertEquals( (5+1), sequence.getTimesCalled() ); assertEquals( (1001+3), sequence.getCurrentValue() ); next = (Long) optimizer.generate( sequence ); assertEquals( (1001+3), next.intValue() ); assertEquals( (5+1), sequence.getTimesCalled() ); assertEquals( (1001+3), sequence.getCurrentValue() ); // force a "clock over" next = (Long) optimizer.generate( sequence ); assertEquals( (1001+4), next.intValue() ); assertEquals( (5+2), sequence.getTimesCalled() ); assertEquals( (1001+6), sequence.getCurrentValue() ); }
private IntegralDataTypeHolder doWorkInCurrentTransactionIfAny(SharedSessionContractImplementor session) { IdSourceKey key = getGeneratorKey( session ); Number nextValue = gridDialect.nextValue( new NextValueRequest( key, optimizer.applyIncrementSizeToSourceValues() ? incrementSize : 1, initialValue ) ); IntegralDataTypeHolder value = IdentifierGeneratorHelper.getIntegralDataTypeHolder( identifierType.getReturnedClass() ); value.initialize( nextValue.longValue() ); return value; }
Optimizer optimizer = buildHiloOptimizer( -1, increment ); for ( int i = 1; i <= increment; i++ ) { next = ( Long ) optimizer.generate( sequence ); assertEquals( i, next.intValue() ); assertEquals( 1, sequence.getCurrentValue() ); next = ( Long ) optimizer.generate( sequence ); assertEquals( 11, next.intValue() ); assertEquals( 2, sequence.getTimesCalled() ); optimizer = buildHiloOptimizer( -1, increment ); for ( int i = 1; i <= increment; i++ ) { next = ( Long ) optimizer.generate( sequence ); assertEquals( i, next.intValue() ); assertEquals( 1, sequence.getCurrentValue() ); next = ( Long ) optimizer.generate( sequence ); assertEquals( 11, next.intValue() ); assertEquals( 3, sequence.getTimesCalled() );