@@ -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