Oracle
 sql >> Base de données >  >> RDS >> Oracle

mode hsqldb Oracle sélectionné pour la mise à jour NOWAIT

J'ai finalement trouvé la réponse à ma propre question après avoir creusé le code source de hsqldb sur sourceforge.

La version 2.3.3 de HSQLDB ne prend PAS en charge NOWAIT.

J'ai posé cette question dans leur forum de discussion et soulevé le problème, mais ce n'est pas comme GitHub où vous pouvez créer un problème afin qu'aucun problème/demande formel ne soit ouvert.

Je m'entends avec un mauvais hack pour modifier maintenant HSQLDB code moi-même org.hsqldb.ParserDQL classe pour ignorer simplement NOWAIT dans le SQL select-for-update.

Si quelqu'un a une meilleure réponse, j'accepterai sa réponse.

MISE À JOUR :(24 août 2015)

A reçu la confirmation du forum HSQLDB que NOWAIT sera ignoré. Pendant ce temps, je poste l'extrait de code pour ignorer NOWAIT que j'ai reçu du forum HSQLDB sourceforge. Vous voudrez peut-être attendre la prochaine version de HSQLDB plutôt que de l'ajouter à votre base de code (comme un hack).

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

MISE À JOUR pour montrer le contexte complet quant à l'endroit où ajouter l'extrait ci-dessus dans le 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);
            }
        }
    }