@@ -39,11 +39,11 @@ internal sealed class CachedProcedure
3939 object o => Encoding . UTF8 . GetString ( ( byte [ ] ) o ) ,
4040 } ;
4141
42- var parsedParameters = ParseParameters ( parametersSql ) ;
42+ var parsedParameters = ParseParameters ( parametersSql , connection . GuidFormat ) ;
4343 if ( returnsSql . Length != 0 )
4444 {
4545 var returnDataType = ParseDataType ( returnsSql , out var unsigned , out var length ) ;
46- parsedParameters . Insert ( 0 , CreateCachedParameter ( 0 , null , "" , returnDataType , unsigned , length , returnsSql ) ) ;
46+ parsedParameters . Insert ( 0 , CreateCachedParameter ( 0 , null , "" , returnDataType , unsigned , length , connection . GuidFormat , returnsSql ) ) ;
4747 }
4848
4949 return new CachedProcedure ( schema , component , parsedParameters ) ;
@@ -91,7 +91,8 @@ FROM information_schema.parameters
9191 ! reader . IsDBNull ( 2 ) ? reader . GetString ( 2 ) : "" ,
9292 dataType ,
9393 unsigned ,
94- length
94+ length ,
95+ connection . GuidFormat
9596 ) ) ;
9697 }
9798 }
@@ -132,14 +133,18 @@ internal MySqlParameterCollection AlignParamsWithDb(MySqlParameterCollection? pa
132133 if ( ! alignParam . HasSetDbType )
133134 alignParam . MySqlDbType = cachedParam . MySqlDbType ;
134135
136+ // for a GUID column, pass along the length so the out parameter can be cast to the right size
137+ if ( alignParam . MySqlDbType == MySqlDbType . Guid && cachedParam . Direction is ParameterDirection . Output or ParameterDirection . InputOutput )
138+ alignParam . Size = cachedParam . Length ;
139+
135140 // cached parameters are ordered by ordinal position
136141 alignedParams . Add ( alignParam ) ;
137142 }
138143
139144 return alignedParams ;
140145 }
141146
142- internal static List < CachedParameter > ParseParameters ( string parametersSql )
147+ internal static List < CachedParameter > ParseParameters ( string parametersSql , MySqlGuidFormat guidFormat )
143148 {
144149 // strip comments
145150 parametersSql = s_cStyleComments . Replace ( parametersSql , "" ) ;
@@ -184,7 +189,7 @@ internal static List<CachedParameter> ParseParameters(string parametersSql)
184189 var name = parts . Groups [ 1 ] . Success ? parts . Groups [ 1 ] . Value . Replace ( "``" , "`" ) : parts . Groups [ 2 ] . Value ;
185190
186191 var dataType = ParseDataType ( parts . Groups [ 3 ] . Value , out var unsigned , out var length ) ;
187- cachedParameters . Add ( CreateCachedParameter ( i + 1 , direction , name , dataType , unsigned , length , originalString ) ) ;
192+ cachedParameters . Add ( CreateCachedParameter ( i + 1 , direction , name , dataType , unsigned , length , guidFormat , originalString ) ) ;
188193 }
189194
190195 return cachedParameters ;
@@ -222,11 +227,11 @@ internal static string ParseDataType(string sql, out bool unsigned, out int leng
222227 return type ?? list [ 0 ] ;
223228 }
224229
225- private static CachedParameter CreateCachedParameter ( int ordinal , string ? direction , string name , string dataType , bool unsigned , int length , string originalSql )
230+ private static CachedParameter CreateCachedParameter ( int ordinal , string ? direction , string name , string dataType , bool unsigned , int length , MySqlGuidFormat guidFormat , string originalSql )
226231 {
227232 try
228233 {
229- return new CachedParameter ( ordinal , direction , name , dataType , unsigned , length ) ;
234+ return new CachedParameter ( ordinal , direction , name , dataType , unsigned , length , guidFormat ) ;
230235 }
231236 catch ( NullReferenceException ex )
232237 {
0 commit comments