Un principiante en las Artes Gráficas Una experiencia en un sector que nos envuelve… El blog personal de David Pinelo.

8Jun/090

Bug en AbanQ: Filtrado de campos double, int o uint desde FLTableDB

Creo haber descubierto un bug en AbanQ. La manera de reproducirlo es la siguiente:

Desde un FLTableDB, pinchamos en la opción Ver/Ocultar filtro. Escogemos ahora cualquier campo del tipo "double", "int" o "uint", modificamos la operación a Igual a (cualquier otra también vale para reproducirlo) e introducimos un valor. Al intentar ejecutar el filtro, si tenéis una base de datos PostgreSQL os dará un error, indicando que no se puede ejecutar la función "upper" sobre el campo.

El lugar donde se produce el bug en el código está situado en FLTableDB.cpp, en las líneas 1132 hasta 1137, dentro del método tdbFilterBuildWhere, y es fácil de ver: (código correspondiente al fuente del build 15245 disponible en la web de AbanQ)

case QVariant::UInt:
case QVariant::Int:
case QVariant::Double:
case QVariant::String:
case QVariant::StringList: {
        fieldArg = "upper(" + fieldName + ")";

Si os fijáis se aplica la función de base de datos "upper" a todos los campos. Esta función sirve para poner en mayúsculas una cadena de texto (AbanQ la utiliza para garantizar la comparación de cadenas de caracteres independientemente de que el usuario la introduzca en mayúsculas o minúsculas: se compara siempre en mayúsculas). El error está en que PostgreSQL se queja cuando a una columna integer o double precision se le hace un upper.

Así no es posible aplicar un filtro a este tipo de campos. ¿Solución? Super sencilla. Cambiad ese código por este, y recompilad

case QVariant::String:
case QVariant::StringList: {
        fieldArg = "upper(" + fieldName + ")";
case QVariant::UInt:
case QVariant::Int:
case QVariant::Double:

Así, el upper sólo se aplica a las cadenas.

Comentarios (0) Trackbacks (0)

Sin comentarios por ahora.


Deja un comentario

Debes iniciar sesión para dejar un comentario.

Sin trackbacks por el momento.