gvSIG bugs #4240
Error de persistencia del tipo NUMERIC de PostgreSQL
Status: | Closed | % Done: | 100% | |
---|---|---|---|---|
Priority: | Normal | Spent time: | - | |
Assignee: | Daniel Martinez | |||
Category: | - | |||
Target version: | 2.3.0-2434 (rev. org.gvsig.desktop-2.0.140) | |||
Severity: | Minor | Add-on version: | ||
gvSIG version: | 2.2.0 | Add-on build: | ||
gvSIG build: | Add-on resolve version: | |||
Operative System: | Add-on resolve build: | |||
Keywords: | postgresql numeric persistence | Proyecto: | ||
Has patch: | No | Hito: | ||
Add-on name: | Unknown |
Description
Tengo una capa de postgresql con tipo de datos NUMERIC, que gvSIG reconoce como Double aunque en tamaño del campo pone 131089.
Si hago una simbología que incluye ese campo NUMERIC y luego guardo la simbología de la capa o bien guardo el proyecto, al intentar recuperarlos (la simbología o la capa se produce un error). Viendo la línea del xml donde se produce el error aparece lo siguiente:
[...] <gvsig:Persistence__VectorialUniqueValueLegend id="126"> <nullValueSymbol type="null"></nullValueSymbol> <symbols type="map"> <mapitem> <key type="bigdecimal">15.0000000000</key> <value type="reference"> <reference id_state="387" xlink:type="simple" xlink:href="states#id('387')" /> </value>Ve </mapitem> <mapitem> <key type="bigdecimal">36.0000000000</key> <value type="reference"> <reference id_state="390" xlink:type="simple" xlink:href="states#id('390')" /> </value> </mapitem> </symbols> <useDefaultSymbol type="boolean">false</useDefaultSymbol> <keys type="list"> <item type="null"></item> <item type="null"></item> </keys> <fieldNames type="list"> <item type="string">cdprov</item> </fieldNames> [...]
En concreto el error se produce en la línea de
<key type="bigdecimal">15.0000000000</key>
Por lo que he llegado a ver en el código, cuando se crea la Feature a partir de la base de datos, en JDBCHelper.createAttributeFromJDBC se asigna el tipo java.sql.Types.NUMERIC a un DataTypes.DOUBLE (7) y en el set
del DefaultFeatureProvider
se hace un rs.getObject()
, el objeto devuelto es un BigDecimal
. Todo esto parece correcto.
El problema es que al parsear el xml en XMLPersistentStateReader.getValue
no aparece ninguna clave para "bigdecimal" y por tanto se produce un error.
Una posible solución es cambiar el TYPES_NUMBER para incluír bigdecimal, y el getValueNumber para devolver parsear adecuadamente el valor y devolver un BigDecimal. Si creéis que esta aproximación es válida puedo preparar un parche.
Associated revisions
refs #4240 Error de persistencia del tipo NUMERIC de PostgreSQL: Añadido al XMLPersistentStateReader para que identifique el tipo BigDecimal, y se añade a los data types
History
#1 Updated by Francisco Puga almost 8 years ago
#2 Updated by Joaquín del Cerro Murciano almost 8 years ago
- Target version set to 2.3.0-2447-final (rev. org.gvsig.desktop-2.0.153)
#3 Updated by Joaquín del Cerro Murciano almost 8 years ago
- Assignee set to Daniel Martinez
#4 Updated by Daniel Martinez almost 8 years ago
- Status changed from New to In progress
#5 Updated by Daniel Martinez almost 8 years ago
- % Done changed from 0 to 100
- Target version changed from 2.3.0-2447-final (rev. org.gvsig.desktop-2.0.153) to 2.3.0-2434 (rev. org.gvsig.desktop-2.0.140)
- Status changed from In progress to Fixed
Añadido al XMLPersistentStateReader para que identifique el tipo BigDecimal. Se añade también el tipo BigDecimal a los Data Types disponibles
#6 Updated by Álvaro Anguix almost 8 years ago
- Status changed from Fixed to Closed
#7 Updated by Francisco Puga over 7 years ago
En la 2.3 RC2 está funcionando correctamente. Gracias.