Най-накрая намерих отговор на собствения си въпрос, след като разрових изходния код на hsqldb в sourceforge.
Версия 2.3.3 на HSQLDB НЕ поддържа NOWAIT.
Зададох този въпрос в техния дискусионен форум и повдигнах проблема, но не е като GitHub, където можете да създадете проблем, така че да не се отваря официален проблем/заявка.
Разбирам се с лош хак за сега модифицирането на HSQLDB
кодирам сам org.hsqldb.ParserDQL
клас, за да игнорирате NOWAIT в SQL за избор за актуализиране.
Ако някой има по-добър отговор, ще приема неговия отговор.
АКТУАЛИЗАЦИЯ:(24 август 2015 г.)
Получи потвърждение от форума на HSQLDB, че NOWAIT ще бъде игнорирано. Междувременно публикувам кодовия фрагмент за игнориране на NOWAIT, който получих от форума на HSQLDB sourceforge. Може да искате да изчакате следващата версия на HSQLDB, отколкото да добавите това към вашата кодова база (като хак).
if (Tokens.T_NOWAIT.equals(token.tokenString)) {
read();
}
АКТУАЛИЗИРАН, за да покаже пълния контекст за това къде да добавите горния фрагмент в ParserDQL.java
/**
* Retrieves a SELECT or other query expression Statement from this parse context.
*/
StatementQuery compileCursorSpecification(RangeGroup[] rangeGroups,
int props, boolean isRoutine) {
OrderedHashSet colNames = null;
QueryExpression queryExpression = XreadQueryExpression();
if (token.tokenType == Tokens.FOR) {
read();
if (token.tokenType == Tokens.READ
|| token.tokenType == Tokens.FETCH) {
read();
readThis(Tokens.ONLY);
props = ResultProperties.addUpdatable(props, false);
} else {
readThis(Tokens.UPDATE);
props = ResultProperties.addUpdatable(props, true);
if (token.tokenType == Tokens.OF) {
readThis(Tokens.OF);
colNames = new OrderedHashSet();
readColumnNameList(colNames, null, false);
}
if (Tokens.T_NOWAIT.equalsIgnoreCase(token.tokenString)) {
readIfThis(Tokens.X_IDENTIFIER);
}
}
}