W końcu znalazłem odpowiedź na moje własne pytanie po wykopaniu kodu źródłowego hsqldb na sourceforge.
Wersja 2.3.3 HSQLDB NIE obsługuje NOWAIT.
Zadałem to pytanie na ich forum dyskusyjnym i podniosłem ten problem, ale nie jest to podobne do GitHub, w którym można utworzyć problem, więc nie jest otwarty żaden formalny problem/żądanie.
Na razie dogaduję się ze złym hackiem, modyfikując HSQLDB
kod sam org.hsqldb.ParserDQL
klasy, aby po prostu zignorować NOWAIT w SQL-u wyboru do aktualizacji.
Jeśli ktoś ma lepszą odpowiedź, zaakceptuję jego odpowiedź.
AKTUALIZACJA:(24 sierpnia 2015)
Otrzymałem potwierdzenie z forum HSQLDB, że NOWAIT zostanie zignorowany. W międzyczasie zamieszczam fragment kodu, aby zignorować NOWAIT, który otrzymałem z forum Sourceforge HSQLDB. Możesz poczekać na następną wersję HSQLDB, niż dodać ją do swojej bazy kodu (jako hack).
if (Tokens.T_NOWAIT.equals(token.tokenString)) {
read();
}
AKTUALIZACJA, aby pokazać pełny kontekst, gdzie dodać powyższy fragment kodu w 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);
}
}
}