Oracle
 sql >> Datenbank >  >> RDS >> Oracle

hsqldb Oracle-Modus für Update NOWAIT auswählen

Ich habe endlich eine Antwort auf meine eigene Frage gefunden, nachdem ich den hsqldb-Quellcode auf Sourceforge ausgegraben habe.

Version 2.3.3 von HSQLDB unterstützt NOWAIT NICHT.

Ich habe diese Frage in ihrem Diskussionsforum gestellt und das Problem angesprochen, aber es ist nicht wie GitHub, wo Sie ein Problem erstellen können, sodass kein formelles Problem/Anfrage geöffnet wird.

Ich komme mit einem schlechten Hack aus, weil ich jetzt HSQLDB modifiziere Code selbst org.hsqldb.ParserDQL Klasse, NOWAIT in der Select-for-Update-SQL einfach zu ignorieren.

Wenn jemand eine bessere Antwort hat, werde ich ihre Antwort akzeptieren.

UPDATE:(24. August 2015)

Bestätigung vom HSQLDB-Forum erhalten, dass NOWAIT ignoriert wird. In der Zwischenzeit poste ich das Code-Snippet zum Ignorieren von NOWAIT, das ich vom HSQLDB-Sourceforge-Forum erhalten habe. Vielleicht möchten Sie auf die nächste Version von HSQLDB warten, bevor Sie diese (als Hack) zu Ihrer Codebasis hinzufügen.

 if (Tokens.T_NOWAIT.equals(token.tokenString)) {
        read();
 }

AKTUALISIERT, um den vollständigen Kontext anzuzeigen, wo das obige Snippet in ParserDQL.java hinzuzufügen ist

    /**
 * 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);
            }
        }
    }