Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

hsqldb modo Oracle selecione para atualização NOWAIT


Encontrei a resposta para minha própria pergunta finalmente depois de cavar o código-fonte do hsqldb no sourceforge.

A versão 2.3.3 do HSQLDB NÃO suporta NOWAIT.

Eu fiz essa pergunta em seu fórum de discussão e levantei o problema, mas não é como o GitHub, onde você pode criar um problema para que nenhum problema/solicitação formal seja aberto.

Estou me dando bem com um hack ruim por agora modificar o HSQLDB codifique eu mesmo org.hsqldb.ParserDQL class para simplesmente ignorar o NOWAIT no SQL de seleção para atualização.

Se alguém tiver uma resposta melhor, aceitarei a resposta.

ATUALIZAÇÃO:(24 de agosto de 2015)

Recebida a confirmação do fórum HSQLDB de que NOWAIT será ignorado. Enquanto isso estou postando o trecho de código para ignorar NOWAIT que recebi do fórum do HSQLDB sourceforge. Você pode querer esperar pela próxima versão do HSQLDB do que adicionar isso à sua base de código (como um hack).
 if (Tokens.T_NOWAIT.equals(token.tokenString)) {
        read();
 }

ATUALIZADO para mostrar o contexto completo de onde adicionar o snippet acima no 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);
            }
        }
    }