Oracle
 sql >> Database >  >> RDS >> Oracle

hsqldb Modalità Oracle seleziona per l'aggiornamento ADESSO

Ho finalmente trovato la risposta alla mia domanda dopo aver scavato il codice sorgente hsqldb su sourceforge.

La versione 2.3.3 di HSQLDB NON supporta NOWAIT.

Ho posto questa domanda nel loro forum di discussione e ho sollevato il problema, tuttavia non è come GitHub in cui è possibile creare un problema, quindi non è stato aperto alcun problema/richiesta formale.

Sto andando d'accordo con un brutto hack per ora modificando HSQLDB codificare me stesso org.hsqldb.ParserDQL classe per ignorare semplicemente NOWAIT nell'SQL di selezione per l'aggiornamento.

Se qualcuno ha una risposta migliore accetterò la sua risposta.

AGGIORNAMENTO:(24-ago-2015)

Ricevuta conferma dal forum HSQLDB che NOWAIT verrà ignorato. Nel frattempo sto pubblicando lo snippet di codice per ignorare NOWAIT che ho ricevuto dal forum di HSQLDB di sourceforge. Potresti voler aspettare la prossima versione di HSQLDB piuttosto che aggiungerla alla tua base di codice (come un hack).

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

AGGIORNATO per mostrare il contesto completo su dove aggiungere lo snippet sopra nel 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);
            }
        }
    }