[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