package org.test4j.module.database.environment.typesmap;
import java.io.InputStream;
import java.math.BigDecimal;
import java.sql.Types;
import java.util.HashMap;
import java.util.Map;
import org.test4j.module.database.environment.typesmap.TypeMap.JavaSQLType;
@SuppressWarnings({ "rawtypes", "serial" })
public class MySQLTypeMap extends AbstractTypeMap {
private static TypeMap maps = new TypeMap() {
private static final long serialVersionUID = -2101070752077610108L;
{
this.put("VARCHAR", String.class, Types.VARCHAR);
this.put("CHAR", String.class, Types.VARCHAR);
this.put("TEXT", String.class, Types.VARCHAR);
this.put("TINYTEXT", String.class, Types.BLOB);
this.put("MEDIUMTEXT", String.class, Types.BLOB);
this.put("LONGTEXT", String.class, Types.BLOB);
this.put("TINYINT", Integer.class, Types.INTEGER);
this.put("TINYINT UNSIGNED", Integer.class, Types.INTEGER);
this.put("SMALLINT", Integer.class, Types.INTEGER);
this.put("SMALLINT UNSIGNED", Integer.class, Types.INTEGER);
this.put("MEDIUMINT", Integer.class, Types.INTEGER);
this.put("MEDIUMINT UNSIGNED", Integer.class, Types.INTEGER);
this.put("INT", Integer.class, Types.INTEGER);
this.put("INT UNSIGNED", Integer.class, Types.INTEGER);
this.put("INTEGER", Integer.class, Types.INTEGER);
this.put("INTEGER UNSIGNED", Integer.class, Types.INTEGER);
this.put("BIGINT", Long.class, Types.BIGINT);
this.put("BIGINT UNSIGNED", Long.class, Types.BIGINT);
this.put("FLOAT", Float.class, Types.FLOAT);
this.put("FLOAT UNSIGNED", Float.class, Types.FLOAT);
this.put("DOUBLE", Double.class, Types.DOUBLE);
this.put("DOUBLE UNSIGNED", Double.class, Types.DOUBLE);
this.put("DECIMAL", BigDecimal.class, Types.NUMERIC);
this.put("DECIMAL UNSIGNED", BigDecimal.class, Types.NUMERIC);
this.put("DEC", BigDecimal.class, Types.NUMERIC);
this.put("DEC UNSIGNED", BigDecimal.class, Types.NUMERIC);
this.put("DATE", java.sql.Date.class, Types.DATE);
this.put("TIMESTAMP", java.sql.Timestamp.class, Types.TIMESTAMP);
this.put("DATETIME", java.sql.Timestamp.class, Types.TIMESTAMP);
this.put("YEAR", Integer.class, Types.INTEGER);
this.put("BIT", Boolean.class, Types.BOOLEAN);
// cobar extended
this.put("CHARACTER VARYING", String.class, Types.VARCHAR);
this.put("NUMERIC", Double.class, Types.NUMERIC);
this.put("DOUBLE PRECISION", Double.class, Types.DOUBLE);
this.put("CHARACTER", String.class, Types.CHAR);
this.put("TIME", java.sql.Time.class, Types.TIME);
this.put("BOOLEAN", Boolean.class, Types.BIT);
this.put("TIMESTAMP WITH TIME ZONE", java.sql.Date.class, Types.DATE);
this.put("TIMESTAMP WITHOUT TIME ZONE", java.sql.Date.class, Types.DATE);
this.put("TIME WITH TIME ZONE", java.sql.Time.class, Types.TIME);
this.put("TIME WITHOUT TIME ZONE", java.sql.Time.class, Types.TIME);
this.put("ENUM", String.class, Types.VARCHAR);
this.put("SET", String.class, Types.VARCHAR);
this.put("BLOB", String.class, Types.BLOB);
this.put("LONGBLOB", String.class, Types.BLOB);
this.put("MEDIUMBLOB", String.class, Types.BLOB);
this.put("TINYBLOB", String.class, Types.BLOB);
this.put("BINARY", InputStream.class, Types.BINARY);
this.put("VARBINARY", InputStream.class, Types.BINARY);
}
};
public static Class getJavaType(String type) {
JavaSQLType map = maps.get(type);
return map == null ? null : map.getJavaType();
}
public static Integer getSQLType(String type) {
JavaSQLType map = maps.get(type);
return map == null ? null : map.getSqlType();
}
private static Map<String, Class> types = new HashMap<String, Class>() {
{
// TODO
}
};
@Override
protected Class getJavaTypeByName(String typeName) {
Class type = types.get(typeName);
return type == null ? String.class : type;
}
@Override
protected Object toObjectByType(String input, Class javaType) {
return input;
}
@Override
protected Object getDefaultValue(Class javaType) {
return null;
}
}