sql >> Base de Datos >  >> RDS >> Oracle

hsqldb Modo Oracle seleccionado para actualizar AHORA

Encontré la respuesta a mi propia pregunta finalmente después de buscar el código fuente de hsqldb en sourceforge.

La versión 2.3.3 de HSQLDB NO es compatible con NOWAIT.

Hice esta pregunta en su foro de discusión y planteé el problema; sin embargo, no es como GitHub, donde puede crear un problema, por lo que no se abre ningún problema/solicitud formal.

Me llevo bien con un mal truco para ahora modificar HSQLDB código yo mismo org.hsqldb.ParserDQL class para simplemente ignorar NOWAIT en el SQL seleccionado para actualizar.

Si alguien tiene una respuesta mejor, aceptaré su respuesta.

ACTUALIZACIÓN:(24 de agosto de 2015)

Se recibió la confirmación del foro HSQLDB de que se ignorará NOWAIT. Mientras tanto, estoy publicando el fragmento de código para ignorar NOWAIT que recibí del foro HSQLDB sourceforge. Es posible que desee esperar a la próxima versión de HSQLDB en lugar de agregar esto a su base de código (como un truco).

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

ACTUALIZADO para mostrar el contexto completo sobre dónde agregar el fragmento anterior en 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);
            }
        }
    }