gvSIG bugs #4240

Error de persistencia del tipo NUMERIC de PostgreSQL

Added by Francisco Puga almost 8 years ago. Updated over 7 years ago.

Status:Closed% Done:

100%

Priority:NormalSpent 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

Revision 1426
Added by Daniel Martinez almost 8 years ago

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

Peciciones relacionadas: #2858 #1631

#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.

Also available in: Atom PDF