package nebula.data.db;
import java.util.HashMap;
import java.util.Map;
import nebula.lang.RawTypes;
import nebula.lang.RawTypes;
import com.google.common.base.Preconditions;
/*
* 根据内部类型构建实际DB类型的字段说明
*/
public class RealDBTypeDefineBuilder {
// 普通类型
private Map<RawTypes, String> normalTypes = new HashMap<RawTypes, String>();
// 带精度类型
// private Map<RawTypes, Map<Integer, String>> weightedTypes = new
// HashMap<RawTypes, Map<Integer, String>>();
// 生成用于构建实际类型的说明字符串
public String build(RawTypes typecode) {
return Preconditions.checkNotNull(normalTypes.get(typecode));
}
// 生成用于构建实际类型的说明字符串
public String buildName(RawTypes typeCode, Integer size, int precision, int scale) {
// Map<Integer, String> map = weightedTypes.get(typeCode);
// if (map == null) return replace(normalTypes.get(typeCode), size,
// precision, scale);
// // iterate entries ordered by capacity to find first fit
// for (Map.Entry<Integer, String> entry : map.entrySet()) {
// if (size <= entry.getKey()) {
// return replace(entry.getValue(), size, precision, scale);
// }
// }
return replace(normalTypes.get(typeCode), size, precision, scale);
}
/**
* 把参数替换为实际值
*/
private static String replace(String type, int size, int precision, int scale) {
type = type.replace("$s", Integer.toString(scale));
type = type.replace("$l", Integer.toString(size));
return type.replace("$p", Integer.toString(precision));
}
// /**
// * 可以根据原始类型长度的不同,选择映射到不同的类型
// */
// @Deprecated
// public void register(RawTypes typecode, int capacity, String value) {
// Map<Integer, String> map = weightedTypes.get(typecode);
// if (map == null) {// add new ordered map
// map = new TreeMap<Integer, String>();
// weightedTypes.put(typecode, map);
// }
// map.put(capacity, value);
// }
public void register(RawTypes typecode, String value) {
normalTypes.put(typecode, value);
}
}