public virtual DbTypeInfo GetDbTypeInfo(DataRow columnRow)
 {
     var charSize = columnRow.GetAsLong("CHARACTER_MAXIMUM_LENGTH");
       var byteSize = columnRow.GetAsLong("CHARACTER_OCTET_LENGTH");
       var dataTypeString = columnRow.GetAsString("DATA_TYPE").ToLowerInvariant();
       var prec = columnRow.GetAsByte("NUMERIC_PRECISION");
       var scale = columnRow.GetAsByte("NUMERIC_SCALE");
       var isNullable = (columnRow.GetAsString("IS_NULLABLE") == "YES");
       bool isMemo = (charSize < 0 || byteSize < 0);
       var typeDef = Driver.TypeRegistry.FindVendorDbTypeInfo(dataTypeString);
       if(typeDef == null)
     typeDef = Driver.TypeRegistry.Types.FirstOrDefault(td => td.Aliases.Contains(dataTypeString));
       if(typeDef == null)
     return null;
       var isAutoMemo = Driver.TypeRegistry.AutoMemoTypes.Contains(dataTypeString);
       var size = isAutoMemo? -1 : (charSize != 0 ? charSize : byteSize);
       var typeSpec = typeDef.FormatTypeSpec(size, prec, scale, isMemo);
       var typeInfo = new DbTypeInfo(typeDef, typeSpec, isNullable, size, prec, scale, typeDef.DefaultColumnInit);
       // AssignValueConverters(typeInfo); - no need for value converters
       return typeInfo;
 }
Beispiel #2
0
 public override DbTypeInfo GetDbTypeInfo(DataRow columnRow)
 {
     // For 'unsigned' types, Data_type column does not show this attribute, but Column_type does.
       // We search matching by data_type column (and we register names with 'unsigned' included, like 'int unsigned').
       // So we just append the unsigned to data_type value, so lookup works.
       var columnType = columnRow.GetAsString("COLUMN_TYPE").ToLowerInvariant();
       if(columnType.EndsWith(" unsigned")) {
     columnRow["DATA_TYPE"] += " unsigned";
       }
       //auto-set memo
       var dbType = base.GetDbTypeInfo(columnRow);
       if(dbType.VendorDbType.ClrTypes.Contains(typeof(string)) && dbType.Size > 100 * 1000)
     dbType.Size = -1;
       return dbType;
 }