Skip to content

Commit 30c7c79

Browse files
committed
Store MySqlDbType for cached parameters.
Switch to the new MySqlDbType mapping code that was added after this code was created; this should be more accurate than mapping to DbType.
1 parent 63a6368 commit 30c7c79

File tree

3 files changed

+16
-24
lines changed

3 files changed

+16
-24
lines changed
Lines changed: 13 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1+
using System;
12
using System.Data;
2-
using System.Linq;
3+
using MySql.Data.MySqlClient;
34

45
namespace MySqlConnector.Core
56
{
@@ -9,31 +10,20 @@ public CachedParameter(int ordinalPosition, string mode, string name, string dat
910
{
1011
Position = ordinalPosition;
1112
if (Position == 0)
12-
{
1313
Direction = ParameterDirection.ReturnValue;
14-
}
15-
else
16-
{
17-
switch (mode.ToLowerInvariant())
18-
{
19-
case "in":
20-
Direction = ParameterDirection.Input;
21-
break;
22-
case "inout":
23-
Direction = ParameterDirection.InputOutput;
24-
break;
25-
case "out":
26-
Direction = ParameterDirection.Output;
27-
break;
28-
}
29-
}
14+
else if (string.Equals(mode, "in", StringComparison.OrdinalIgnoreCase))
15+
Direction = ParameterDirection.Input;
16+
else if (string.Equals(mode, "inout", StringComparison.OrdinalIgnoreCase))
17+
Direction = ParameterDirection.InputOutput;
18+
else if (string.Equals(mode, "out", StringComparison.OrdinalIgnoreCase))
19+
Direction = ParameterDirection.Output;
3020
Name = name;
31-
DbType = TypeMapper.Instance.GetDbTypeMapping(dataType, unsigned).DbTypes?.First() ?? DbType.Object;
21+
MySqlDbType = TypeMapper.Instance.GetMySqlDbType(dataType, unsigned);
3222
}
3323

34-
internal readonly int Position;
35-
internal readonly ParameterDirection Direction;
36-
internal readonly string Name;
37-
internal readonly DbType DbType;
24+
public int Position { get; }
25+
public ParameterDirection Direction { get; }
26+
public string Name { get; }
27+
public MySqlDbType MySqlDbType { get; }
3828
}
3929
}

src/MySqlConnector/Core/CachedProcedure.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ internal MySqlParameterCollection AlignParamsWithDb(MySqlParameterCollection par
7979
if (!alignParam.HasSetDirection)
8080
alignParam.Direction = cachedParam.Direction;
8181
if (!alignParam.HasSetDbType)
82-
alignParam.DbType = cachedParam.DbType;
82+
alignParam.MySqlDbType = cachedParam.MySqlDbType;
8383

8484
// cached parameters are oredered by ordinal position
8585
alignedParams.Add(alignParam);

src/MySqlConnector/Core/TypeMapper.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,8 @@ public DbTypeMapping GetDbTypeMapping(string columnTypeName, bool unsigned = fal
164164
return GetColumnTypeMetadata(columnTypeName, unsigned, length)?.DbTypeMapping;
165165
}
166166

167+
public MySqlDbType GetMySqlDbType(string typeName, bool unsigned) => GetColumnTypeMetadata(typeName, unsigned, 0).MySqlDbType;
168+
167169
private ColumnTypeMetadata GetColumnTypeMetadata(string columnTypeName, bool unsigned, int length)
168170
{
169171
if (!m_columnTypeMetadataLookup.TryGetValue(ColumnTypeMetadata.CreateLookupKey(columnTypeName, unsigned, length), out var columnTypeMetadata) && length != 0)

0 commit comments

Comments
 (0)