sourceforgeでhsqldbソースコードを掘り下げた後、ついに私自身の質問に対する答えが見つかりました。
HSQLDBのバージョン2.3.3はNOWAITをサポートしていません。
私は彼らのディスカッションフォーラムでこの質問をし、問題を提起しましたが、問題を作成できるGitHubとは異なり、正式な問題/リクエストは開かれていません。
HSQLDB
を変更するための悪いハックとうまくやっています 自分でコーディングするorg.hsqldb.ParserDQL
select-for-updateSQLのNOWAITを無視するクラス。
誰かがより良い答えを持っているなら、私は彼らの答えを受け入れます。
更新:(2015年8月24日)
NOWAITが無視されるというHSQLDBフォーラムからの確認を受け取りました。その間、HSQLDBsourceforgeフォーラムから受け取ったNOWAITを無視するコードスニペットを投稿しています。これをコードベースに追加するよりも、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);
}
}
}