[
https://issues.apache.org/jira/browse/OPENJPA-2390?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Di Wu Lau updated OPENJPA-2390:
-------------------------------
Attachment: OPENJPA-2390.patch
Problem is fixed by adding LIMIT 1 to the nextSequenceQuery String in
HSQLDictionary. This force the sequence to hand back only 1 value at a time.
Any version that is lower than 2.1.0 does not need to add LIMIT 1. The older
versions do not have the skipping problem.
To make the code more compatible, I added some conditions in HSQLDictionary to
check the HSQL versions so that only version 2.1.0 and beyond will add LIMIT 1
to the nextSequenceQuery.
Uploadded is my patch file. In this file, I added two test cases that use
allocationSize=1 and allocationSize=2 to demonstrate the problem.
Thanks.
> HSQLDB SELECT NEXT VALUE FOR Sequence will skip 1 sequence value if
> allocation size is 1
> ----------------------------------------------------------------------------------------
>
> Key: OPENJPA-2390
> URL: https://issues.apache.org/jira/browse/OPENJPA-2390
> Project: OpenJPA
> Issue Type: Bug
> Components: jdbc
> Affects Versions: 2.2.1
> Reporter: René Link
> Attachments: HSQLSequenceTest.java, OPENJPA-2390.patch
>
>
> The HSQLDictionary sets the DBDictionary.nextSequenceQuery to "SELECT NEXT
> VALUE FOR {0} FROM INFORMATION_SCHEMA.SYSTEM_SEQUENCES" when the
> HSQLDictionary is initialized.
> The NativeJDBCSeq uses
> _select = MessageFormat.format(format, new Object[]{name,
> String.valueOf(_allocate * _increment)});
> to build the select next value sql. The format is pased 2 arguments "name"
> and "_allocate * _increment"
> but the second is not honored by the nextSequenceQuery.
> So when the allocation size is set to 1 the hsqldb nextSequenceQuery
> statement will return 2 next values
> anyway. That is why always one next value will be skipped... 1, 3, 5, 7, and
> so on.
> The nextSequenceQuery should be set with an limit. E.g.
> "SELECT NEXT VALUE FOR {0} FROM INFORMATION_SCHEMA.SYSTEM_SEQUENCES LIMIT {1}"
> I will attatch an unit test that uses in memory hsqldb to show the problem
> soon.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira