[hibernate-dev] SchemaCreatorImpl always creating a poolable sequence
Mark Rotteveel
mark at lawinegevaar.nl
Thu Jul 28 06:57:49 EDT 2016
On 28-7-2016 12:22, Vlad Mihalcea wrote:
> Hi Mark,
>
> I've just run the PooledHiLoSequenceIdentifierTest test after modifying
> the TABLE to SEQUENCE to see how it works and this is what I found:
>
> 1. SchemaCreatorImpl calls String[] getCreateSequenceStrings(String
> sequenceName, int initialValue, int incrementSize)
> 2. The String getCreateSequenceString(String sequenceName, int
> initialValue, int incrementSize) is then called which does this:
>
> if ( supportsPooledSequences() ) {
> return getCreateSequenceString( sequenceName ) + " start with " + initialValue + " increment by " + incrementSize;
> }
> throw new MappingException( getClass().getName() + " does not support pooled sequences" );
Yes, and the above exception is my problem, however this default
implementation suggests that this method should only be called if pooled
sequences are supported (quod non), but in the current code it is called
always in org.hibernate.tool.schema.internal.SchemaCreatorImpl.
> Now, this method is overridden in PostgreSQL and HSQLDB dialects.
Yes, but both support pooled sequences.
> I think we should create the sequence generator as indicated in this
> Firebird documentation:
>
> http://firebirdsql.org/manual/generatorguide-sqlsyntax.html
The current dialect already does that, but it isn't working because of
above code. Providing the following override does seem to work, but this
seems at odds with the exception thrown in the default implementation.
@Override
protected String getCreateSequenceString(String sequenceName, int
initialValue, int incrementSize) throws MappingException {
// Ignore initialValue and incrementSize
return getCreateSequenceString( sequenceName );
}
For Firebird 2.5,
http://www.firebirdsql.org/file/documentation/reference_manuals/fblangref25-en/html/fblangref25-ddl-sequence.html
is more up-to-date.
I'm currently creating a new Firebird 2.5 specific dialect, and then I'm
going to add a Firebird 3.0 dialect.
I might clean up the old InterbaseDialect and FirebirdDialect, but I
don't want to touch those too much (especially since Firebird and
Interbase should now be considered two distinct databases).
> Shouldn't we use GEN_ID for the pooled optimizers?
Yes GEN_ID could be used for that, but as far as I can tell the current
support for pooled sequences seems to require specifying the increment
size in the sequence DDL, which is not supported by Firebird.
Is there a specific extension point to override this, is it the
getDefaultMultiTableBulkIdStrategy()?
Mark
--
Mark Rotteveel
More information about the hibernate-dev
mailing list