[Gvsig_desarrolladores] Importante, Posible error en public class XTypes

agirrearri agirrearri en hotmail.com
Vie Jul 16 10:03:42 CEST 2010


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.

-- 
View this message in context: http://osgeo-org.1803224.n2.nabble.com/Importante-Posible-error-en-public-class-XTypes-tp5300902p5300902.html
Sent from the gvSIG desarrolladores mailing list archive at Nabble.com.


Más información sobre la lista de distribución gvSIG_desarrolladores