Skip to content

Commit a2955d0

Browse files
committed
Set ProviderType in GetColumnSchema.
1 parent d31d152 commit a2955d0

File tree

4 files changed

+136
-118
lines changed

4 files changed

+136
-118
lines changed

src/MySqlConnector/MySqlClient/MySqlDataReader.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ public override void Close()
241241
public ReadOnlyCollection<DbColumn> GetColumnSchema()
242242
{
243243
return GetResultSet().ColumnDefinitions
244-
.Select((c, n) => (DbColumn) new MySqlDbColumn(n, c, GetFieldType(n), GetDataTypeName(n)))
244+
.Select((c, n) => (DbColumn) new MySqlDbColumn(n, c, GetResultSet().ColumnTypes[n]))
245245
.ToList().AsReadOnly();
246246
}
247247

src/MySqlConnector/MySqlClient/MySqlDbColumn.cs

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
using System;
2+
using System.Globalization;
3+
using MySql.Data.MySqlClient.Types;
24
using MySql.Data.Serialization;
35

46
#if !NETSTANDARD1_3 && !NETSTANDARD2_0
@@ -38,8 +40,11 @@ namespace MySql.Data.MySqlClient
3840
{
3941
public sealed class MySqlDbColumn : System.Data.Common.DbColumn
4042
{
41-
internal MySqlDbColumn(int ordinal, ColumnDefinitionPayload column, Type type, string dataTypeName)
43+
internal MySqlDbColumn(int ordinal, ColumnDefinitionPayload column, MySqlDbType mySqlDbType)
4244
{
45+
var columnTypeMapping = TypeMapper.Mapper.GetColumnMapping(mySqlDbType);
46+
47+
var type = columnTypeMapping.DbTypeMapping.ClrType;
4348
var columnSize = type == typeof(string) || type == typeof(Guid) ?
4449
column.ColumnLength / SerializationUtility.GetBytesPerCharacter(column.CharacterSet) :
4550
column.ColumnLength;
@@ -53,7 +58,9 @@ internal MySqlDbColumn(int ordinal, ColumnDefinitionPayload column, Type type, s
5358
ColumnOrdinal = ordinal;
5459
ColumnSize = columnSize > int.MaxValue ? int.MaxValue : unchecked((int) columnSize);
5560
DataType = type;
56-
DataTypeName = dataTypeName;
61+
DataTypeName = columnTypeMapping.SimpleDataTypeName;
62+
if (mySqlDbType == MySqlDbType.String)
63+
DataTypeName += string.Format(CultureInfo.InvariantCulture, "({0})", columnSize);
5764
IsAliased = column.PhysicalName != column.Name;
5865
IsAutoIncrement = (column.ColumnFlags & ColumnFlags.AutoIncrement) != 0;
5966
IsExpression = false;
@@ -72,9 +79,9 @@ internal MySqlDbColumn(int ordinal, ColumnDefinitionPayload column, Type type, s
7279
NumericPrecision--;
7380
}
7481
NumericScale = column.Decimals;
75-
ProviderType = (int) column.ColumnType;
82+
ProviderType = mySqlDbType;
7683
}
7784

78-
public int ProviderType { get; }
85+
public MySqlDbType ProviderType { get; }
7986
}
8087
}

src/MySqlConnector/MySqlClient/Types/TypeMapper.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,8 @@ private TypeMapper()
4747
var typeDecimal = AddDbTypeMapping(new DbTypeMapping(typeof(decimal), new[] { DbType.Decimal }, convert: o => Convert.ToDecimal(o)));
4848
var typeDouble = AddDbTypeMapping(new DbTypeMapping(typeof(double), new[] { DbType.Double }, convert: o => Convert.ToDouble(o)));
4949
var typeFloat = AddDbTypeMapping(new DbTypeMapping(typeof(float), new[] { DbType.Single }, convert: o => Convert.ToSingle(o)));
50-
AddMySqlDbTypeMapping(new ColumnTypeMapping("DECIMAL", typeDecimal, MySqlDbType.Decimal));
5150
AddMySqlDbTypeMapping(new ColumnTypeMapping("DECIMAL", typeDecimal, MySqlDbType.NewDecimal));
51+
AddMySqlDbTypeMapping(new ColumnTypeMapping("DECIMAL", typeDecimal, MySqlDbType.Decimal));
5252
AddMySqlDbTypeMapping(new ColumnTypeMapping("DOUBLE", typeDouble, MySqlDbType.Double));
5353
AddMySqlDbTypeMapping(new ColumnTypeMapping("FLOAT", typeFloat, MySqlDbType.Float));
5454

@@ -197,7 +197,7 @@ public static MySqlDbType ConvertToMySqlDbType(ColumnDefinitionPayload columnDef
197197
MySqlDbType.LongBlob;
198198
}
199199
return type == ColumnType.String ? MySqlDbType.String :
200-
type == ColumnType.VarString ? MySqlDbType.VarString :
200+
type == ColumnType.VarString ? MySqlDbType.VarChar :
201201
type == ColumnType.TinyBlob ? MySqlDbType.TinyText :
202202
type == ColumnType.Blob ? MySqlDbType.Text:
203203
type == ColumnType.MediumBlob ? MySqlDbType.MediumText :

0 commit comments

Comments
 (0)