[Gvsig_desarrolladores] Importante, Posible error en public class XTypes
Cèsar Ordiñana
cordinyana en gvsig.com
Vie Jul 16 10:25:10 CEST 2010
Hola Eñaut,
Parece que has enviado el email en formato de texto y no se ve la negrita.
En cualquier caso, te invito a dar de alta un bug con parche siguiendo
las instrucciones del siguiente enlace:
http://www.gvsig.org/web/projects/gvsig-desktop/docs/devel/gvsig-devel-guide/2.0.0/anexos/contribuciones-y-parches-al-codigo-de-gvsig/contribuciones-y-parches-al-codigo-de-gvsig
Saludos,
--
Cèsar Ordiñana Navarro
gvSIG software architect
DiSiD Technologies (http://www.disid.com)
agirrearri escribió:
> Hola , creo que he encontrado un error en el código fuente de XTypes. No se
> si es un fallo, pero aviso para que alquien lo pueda rebisar, el trozo de
> código del supuesto fallo está en negrita.
>
> package com.iver.cit.gvsig.fmap.drivers;
>
> import java.nio.ByteBuffer;
> import java.sql.ResultSet;
> import java.sql.ResultSetMetaData;
> import java.sql.SQLException;
> import java.sql.Types;
>
> import com.hardcode.gdbms.engine.values.BooleanValue;
> import com.hardcode.gdbms.engine.values.DateValue;
> import com.hardcode.gdbms.engine.values.DoubleValue;
> import com.hardcode.gdbms.engine.values.FloatValue;
> import com.hardcode.gdbms.engine.values.IntValue;
> import com.hardcode.gdbms.engine.values.LongValue;
> import com.hardcode.gdbms.engine.values.NullValue;
> import com.hardcode.gdbms.engine.values.ShortValue;
> import com.hardcode.gdbms.engine.values.StringValue;
> import com.hardcode.gdbms.engine.values.TimeValue;
> import com.hardcode.gdbms.engine.values.TimestampValue;
> import com.hardcode.gdbms.engine.values.Value;
> import com.hardcode.gdbms.engine.values.ValueFactory;
>
> public class XTypes {
> public final static double NUM_msSecs2000 = 9.466776E11;
> public final static int POINT2D = 100;
>
> public final static int LINE2D = 101;
>
> public final static int POLYGON2D = 102;
>
> public final static int MULTI2D = 103;
>
> public final static int MULTIPOINT = 104;
>
> public static String fieldTypeToString(int fieldType) {
> String aux = "text"; // Por defecto.
> switch (fieldType) {
> case Types.SMALLINT:
> aux = "integer";
> break;
> case Types.INTEGER:
> aux = "integer";
> break;
> case Types.BIGINT:
> aux = "integer";
> break;
> case Types.BOOLEAN:
> aux = "boolean";
> break;
> case Types.DECIMAL:
> aux = "numeric";
> break;
> case Types.DOUBLE:
> aux = "float8";
> break;
> case Types.FLOAT:
> aux = "float";
> break;
> case Types.CHAR:
> aux = "char";
> break;
> case Types.VARCHAR:
> aux = "text";
> break;
> case Types.LONGVARCHAR:
> aux = "text";
> break;
>
> case POINT2D:
> aux = "POINT";
> break;
> case LINE2D:
> aux = "MULTILINESTRING";
> break;
> case POLYGON2D:
> aux = "MULTIPOLYGON";
> break;
> case MULTI2D:
> aux = "GEOMETRY";
> break;
> case MULTIPOINT:
> aux = "MULTIPOINT";
> break;
>
> }
>
> return aux;
> }
>
> /**
> * @param fieldId
> * @throws SQLException
> */
> public static Value getValue(ResultSet rs, int fieldId) throws SQLException
> {
> byte[] data;
> data = rs.getBytes(fieldId);
> Value val = null;
> ResultSetMetaData metaData = rs.getMetaData();
> if (data == null)
> val = ValueFactory.createNullValue();
> else {
> ByteBuffer buf = ByteBuffer.wrap(data);
> if (metaData.getColumnType(fieldId) == Types.VARCHAR) {
> val = ValueFactory.createValue(rs.getString(fieldId));
> }else if (metaData.getColumnType(fieldId) == Types.FLOAT) {
> val = ValueFactory.createValue(buf.getFloat());
> }else if (metaData.getColumnType(fieldId) == Types.DOUBLE) {
> val = ValueFactory.createValue(buf.getDouble());
> }else if (metaData.getColumnType(fieldId) == Types.INTEGER){
> val = ValueFactory.createValue(buf.getInt());
> }else if (metaData.getColumnType(fieldId) == Types.SMALLINT){
> val = ValueFactory.createValue(buf.getShort());
> }else if (metaData.getColumnType(fieldId) == Types.TINYINT){
> val = ValueFactory.createValue(buf.getShort());
> }else if (metaData.getColumnType(fieldId) == Types.BIGINT){
> val = ValueFactory.createValue(buf.getLong());
> }else if (metaData.getColumnType(fieldId) == Types.BIT ||
> metaData.getColumnType(fieldId) == Types.BOOLEAN ){
> val = ValueFactory.createValue(rs.getBoolean(fieldId));
> }else if (metaData.getColumnType(fieldId) == Types.DATE){
> val = ValueFactory.createValue(rs.getDate(fieldId));
> }else if (metaData.getColumnType(fieldId) == Types.TIME){
> val = ValueFactory.createValue(rs.getTime(fieldId));
> }else if (metaData.getColumnType(fieldId) == Types.TIMESTAMP){
> val = ValueFactory.createValue(rs.getTimestamp(fieldId));
> }
>
> }
> return val;
> }
>
> public static void updateValue(ResultSet rs, int fieldId_ceroBased,
> Value val) throws SQLException {
> if (val instanceof NullValue)
> return;
> // byte[] data;
> ResultSetMetaData metaData = rs.getMetaData();
> int fieldId = fieldId_ceroBased + 1;
> // System.out.println("EScritrua: " + metaData.isDefinitelyWritable(1));
> switch (val.getSQLType()) {
> case Types.VARCHAR:
> case Types.LONGVARCHAR:
> // Para evitar escribir en el campo geometria:
> if (metaData.getColumnType(fieldId) == Types.OTHER)
> return;
> StringValue valStr = (StringValue) val;
> rs.updateString(fieldId, valStr.getValue());
> // System.out.println("Field " + fieldId + " :" +
> // metaData.getColumnTypeName(fieldId));
> break;
> case Types.FLOAT:
> FloatValue vFloat = (FloatValue) val;
> rs.updateFloat(fieldId, vFloat.getValue());
> break;
> case Types.DOUBLE:
> DoubleValue vDouble = (DoubleValue) val;
> rs.updateDouble(fieldId, vDouble.getValue());
> break;
> case Types.INTEGER:
> IntValue vInt = (IntValue) val;
> rs.updateInt(fieldId, vInt.getValue());no faltaría aqui el break?
> case Types.SMALLINT:
> ShortValue vShort = (ShortValue) val;
> rs.updateShort(fieldId, vShort.shortValue());
> break;
> case Types.BIGINT:
> LongValue vLong = (LongValue) val;
> rs.updateLong(fieldId, vLong.getValue());
> break;
> case Types.BIT:
> case Types.BOOLEAN:
> BooleanValue vBool = (BooleanValue) val;
> rs.updateBoolean(fieldId, vBool.getValue());
> break;
> case Types.DATE:
> DateValue vDate = (DateValue) val;
> rs.updateDate(fieldId, vDate.getValue());
> break;
> case Types.TIME:
> TimeValue vTime = (TimeValue) val;
> rs.updateTime(fieldId, vTime.getValue());
> break;
> case Types.TIMESTAMP:
> TimestampValue vTimeStamp = (TimestampValue) val;
> rs.updateTimestamp(fieldId, vTimeStamp.getValue());
> break;
>
> default:
> System.err.println("Tipo no soportado:"
> + metaData.getColumnType(fieldId) + ". Field:" + fieldId
> + ": " + metaData.getColumnName(fieldId));
> // throw new UnsupportedOperationException();
>
> }
> }
>
> }
>
> Atentamente Eñaut.
>
Más información sobre la lista de distribución gvSIG_desarrolladores