public DbColumnBuilder(String name,int typeCode,int length,boolean nullable) { this.name = name; this.typeCode = typeCode; this.typeName = JdbcTypes.forTypeCode(typeCode).getName(); this.length = length; this.nullable = nullable; }
public DbColumnBuilder setTypeName(String typeName) { Args.notNull(typeName); this.typeName = typeName; this.typeCode = JdbcTypes.forTypeName(typeName).getCode(); return this; }
@Override public String toSqlDefaultValue(int typeCode, Object value) { if (Types.BOOLEAN == typeCode || Types.BIT == typeCode) { Boolean bool = Converts.toBoolean(value); return bool ? getBooleanTrueString() : getBooleanFalseString(); } JdbcType type = JdbcTypes.forTypeCode(typeCode); if (type.getKind().isNumeric()) { return Converts.toString(value); } else { String s = Converts.toString(value); if (s.endsWith(")")) { return s; } else if (s.startsWith("'") && s.endsWith("'")) { return s; } else if (typeCode == Types.VARCHAR || typeCode == Types.CHAR) { return "'" + Converts.toString(value) + "'"; } else { return s; } } }
protected DbColumnType getColumnType(DbColumn column) { JdbcType jdbcType = JdbcTypes.forTypeCode(column.getTypeCode()); DbColumnType columnType = columnTypes.get(jdbcType.getCode(), column.getLength()); if (null == columnType) { throw new DbException(Strings.format( "Unsupported column type '{0}' defined in column '{1}'", jdbcType.getName(), column.getName())); } if (!columnType.matchesLength(column.getLength())) { throw new DbException("Length must in range " + columnType.getRangeString() + " in column '" + column.getName() + "'"); } return columnType; }
column.setTypeName(jdbcType.getName()); if(jdbcType.supportsLength()) { readColumnSizeString(column, rs.getString(COLUMN_SIZE)); }else if(jdbcType.supportsPrecisionAndScale()){ Object precision = rs.getObject(COLUMN_PRECISION); if (precision != null) {
throw new DomainConfigException("Jdbc type '" + typeName + "' not supported, check the xml : " + reader.getCurrentLocation()); column.setTypeCode(type.getCode()); field.setJavaType(type.getDefaultReadType()); field.setNullable(nullable); field.setMaxLength(length);
protected Object readColumnValueForMap(DbDialect dialect,ResultSet rs,ResultColumnMapping cm,FieldMapping fm, int index) throws SQLException{ Object value = dialect.getColumnValue(rs, index, cm.getColumnType()); if(null != value){ if(null == fm) { Class<?> targetType = JdbcTypes.forTypeCode(cm.getColumnType()).getDefaultReadType(); value = Converts.convert(value, targetType); }else{ if(null != fm.getSerializer()) { value = fm.getSerializer().deserialize(fm, value); } } } return value; }
private static void register(int typeCode,String typeName,JdbcTypeKind kind,Class<?> defaultReadType,Class<?> defaultSaveType, boolean supportsLength,boolean supportsPrecisionAndScale, String... aliases){ JdbcType type = new JdbcType(typeCode, typeName, kind , defaultReadType, defaultSaveType,supportsLength,supportsPrecisionAndScale); if(typeCodeToJdbcTypeMappings.containsKey(typeCode)) { throw new IllegalStateException("Type code '" + typeCode + "' already registered!"); } if(typeNameToJdbcTypeMappings.containsKey(typeName)) { throw new IllegalStateException("Type name '" + typeName + "' already registered!"); } typeCodeToJdbcTypeMappings.put(typeCode, type); typeNameToJdbcTypeMappings.put(typeName, type); if(null != aliases) { for(String alias : aliases) { if(typeNameToJdbcTypeMappings.containsKey(alias)) { throw new IllegalStateException("Type name '" + alias + "' already registered!"); } type = new JdbcType(typeCode, alias, kind , defaultReadType, defaultSaveType,supportsLength,supportsPrecisionAndScale); typeNameToJdbcTypeMappings.put(alias, type); } } }
f.trySetFieldType(d.getType().getDefaultReadType()); c.trySetTypeCode(d.getType().getCode());
@Override public FieldMappingBuilder createFieldMappingByColumn(MetadataContext context, EntityMappingBuilder emb, DbColumn column) { DbColumnBuilder cb = new DbColumnBuilder(column); FieldMappingBuilder fmb = new FieldMappingBuilder(); fmb.setColumn(cb); fmb.setFieldName(context.getNamingStrategy().columnToFieldName(column.getName())); fmb.setJavaType(JdbcTypes.forTypeCode(column.getTypeCode()).getDefaultReadType()); Domain domain = context.getMetadata().domains().autoMapping(emb.getEntityName(), fmb.getFieldName()); if(null != domain){ configFieldMappingByDomain(emb, fmb, domain); } preMappingField(context, emb, fmb); postMappingField(context, emb, fmb); return fmb; }
public DbColumnBuilder setTypeCode(Integer typeCode) { this.typeCode = typeCode; if(null != typeCode){ this.typeName = JdbcTypes.forTypeCode(typeCode).getName(); }else{ this.typeName = null; } return this; }
@Override public FieldMapping build() { if(null == javaType){ javaType = null != beanProperty ? beanProperty.getType() : JdbcTypes.forTypeCode(column.getTypeCode()).getDefaultReadType();
JdbcTypeKind kind = jdbcType.getKind();
private static boolean parseType(String name, String value, MetaField field) { //is type name ? varchar(100) JdbcType type = JdbcTypes.tryForTypeName(name.toLowerCase()); if(null != type) { field.setType(type.getName()); String[] numbers = Strings.split(value, ','); if(numbers.length == 2) { field.setPrecision(Integer.parseInt(numbers[0])); field.setScale(Integer.parseInt(numbers[1])); return true; } if(numbers.length == 1) { field.setLength(Integer.parseInt(numbers[0])); return true; } } return false; }
protected Object readColumnValue(DbDialect dialect,ResultSet rs,ResultColumnMapping cm,FieldMapping fm, int index) throws SQLException{ Object value = dialect.getColumnValue(rs, index, cm.getColumnType()); if(null != value){ if(null == fm) { Class<?> targetType = JdbcTypes.forTypeCode(cm.getColumnType()).getDefaultReadType(); value = Converts.convert(value, targetType); }else{ BeanProperty bp = fm.getBeanProperty(); if(null != bp) { if(null != fm.getSerializer()) { value = fm.getSerializer().deserialize(fm, value, bp.getType(), bp.getGenericType()); }else{ value = Converts.convert(value, bp.getType(), bp.getGenericType()); } }else { if(null != fm.getSerializer()){ value = fm.getSerializer().deserialize(fm, value); } } } } return value; }
if(type.getJdbcType().getKind().equals(JdbcTypeKind.Temporal)) { Date date = Converts.convert(string, Date.class); entry.setValue(date);
void mappingBeanProperty(MetaField f, BeanProperty bp) { if(null == bp) { return; } if(null != bp && !Strings.isEmpty(f.getType())) { MType mtype = MTypes.getMType(bp.getType(), bp.getGenericType()); if(mtype.isSimpleType()) { f.setType(mtype.asSimpleType().getJdbcType().getName()); if(MSimpleTypes.STRING.equals(mtype) && null == f.getLength()) { f.setLength(255); } } } }
p.setType(f.getResolvedType()); }else { p.setType(MTypes.getMType(JdbcTypes.forTypeName(f.getType()).getDefaultReadType()));
field.setType(type.getName()); continue;