@Override public Serializable generate(SharedSessionContractImplementor session, Object object) throws HibernateException { return optimizer.generate( databaseStructure.buildCallback( session ) ); }
/** * Does the given optimizer name represent a pooled strategy? * * @param optimizerName The name of the optimizer * * @return {@code true} indicates the optimizer is a pooled strategy. */ public static boolean isPooledOptimizer(String optimizerName) { final StandardOptimizerDescriptor standardDescriptor = StandardOptimizerDescriptor.fromExternalName( optimizerName ); return standardDescriptor != null && standardDescriptor.isPooled(); }
/** * Getter for property 'upperLimit'. * <p/> * Exposure intended for testing purposes. * * @return Value for property 'upperLimit'. */ public synchronized IntegralDataTypeHolder getHiValue() { return noTenantGenerationState().upperLimit; } }
@Override public boolean supportsBulkInsertionIdentifierGeneration() { // it does, as long as // 1) there is no (non-noop) optimizer in use // 2) the underlying structure is a sequence return NoopOptimizer.class.isInstance( getOptimizer() ) && getDatabaseStructure().isPhysicalSequence(); }
private static Optimizer buildOptimizer( StandardOptimizerDescriptor descriptor, long initial, int increment) { return OptimizerFactory.buildOptimizer( descriptor.getExternalName(), Long.class, increment, initial ); }
@Override public String determineBulkInsertionIdentifierGenerationSelectFragment(Dialect dialect) { return dialect.getSelectSequenceNextValString( getDatabaseStructure().getName() ); }
@SuppressWarnings("WeakerAccess") protected DatabaseStructure buildTableStructure( Type type, Properties params, JdbcEnvironment jdbcEnvironment, QualifiedName sequenceName, int initialValue, int incrementSize) { final Identifier valueColumnName = determineValueColumnName( params, jdbcEnvironment ); return new TableStructure( jdbcEnvironment, sequenceName, valueColumnName, initialValue, incrementSize, type.getReturnedClass() ); }
@Override public synchronized Serializable generate(AccessCallback callback) { final GenerationState generationState = locateGenerationState( callback.getTenantIdentifier() ); if ( generationState.lo > generationState.maxLo ) { generationState.lastSourceValue = callback.getNextValue(); generationState.lo = generationState.lastSourceValue.eq( 0 ) ? 1 : 0; generationState.hi = generationState.lastSourceValue.copy().multiplyBy( generationState.maxLo + 1 ); } generationState.value = generationState.hi.copy().add( generationState.lo++ ); return generationState.value.makeValue(); }
@Override public void prepare(Optimizer optimizer) { applyIncrementSizeToSourceValues = optimizer.applyIncrementSizeToSourceValues(); }
@Override public String[] sqlCreateStrings(Dialect dialect) throws HibernateException { return databaseStructure.sqlCreateStrings( dialect ); }
@Override public String[] sqlDropStrings(Dialect dialect) throws HibernateException { return databaseStructure.sqlDropStrings( dialect ); }
private GenerationState createGenerationState() { final GenerationState state = new GenerationState(); state.maxLo = initialMaxLo; state.lo = initialMaxLo + 1; return state; }
/** * Getter for property 'lastValue'. * <p/> * Exposure intended for testing purposes. * * @return Value for property 'lastValue'. */ @SuppressWarnings( {"UnusedDeclaration"}) public synchronized IntegralDataTypeHolder getLastValue() { return noTenantGenerationState().value; } }
@Override public boolean applyIncrementSizeToSourceValues() { // We allow the increment size to be 0 for backward-compatibility with legacy // ID generators; we don't apply a value of 0, so the default will be used instead. // We don't apply an increment size of 1, since it is already the default. return getIncrementSize() != 0 && getIncrementSize() != 1; } }
@Override public IntegralDataTypeHolder getLastSourceValue() { return noTenantGenerationState().lastSourceValue; }
@Override public IntegralDataTypeHolder getLastSourceValue() { return noTenantGenerationState().hiValue; }
@Override public IntegralDataTypeHolder getLastSourceValue() { return noTenantGenerationState().lastSourceValue; }
private static Optimizer buildPooledLoOptimizer(long initial, int increment) { return buildOptimizer( StandardOptimizerDescriptor.POOLED_LO, initial, increment ); }
@Override public void prepare(Optimizer optimizer) { applyIncrementSizeToSourceValues = optimizer.applyIncrementSizeToSourceValues(); }
private static Optimizer buildPooledThreadLocalLoOptimizer(long initial, int increment) { return buildOptimizer( StandardOptimizerDescriptor.POOLED_LOTL, initial, increment ); }