Skip to content

Commit 8046bcc

Browse files
author
Sam Hanes
committed
Fixed sqlenumprovider tryparse/parse issues
1 parent 138fcc8 commit 8046bcc

File tree

1 file changed

+22
-47
lines changed

1 file changed

+22
-47
lines changed

src/SqlClient/SqlEnumProvider.fs

Lines changed: 22 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@ open System.Collections.Generic
55
open System.Data
66
open System.Data.Common
77
open System
8-
open System.IO
9-
open System.Configuration
108
open System.Runtime.Caching
119

1210
open Microsoft.FSharp.Core.CompilerServices
@@ -208,39 +206,27 @@ type SqlEnumProvider(config : TypeProviderConfig) as this =
208206
)
209207
providedEnumType.AddMember typeInit
210208

211-
do //TryParse
212-
let tryParse2Arg =
213-
ProvidedMethod(
214-
methodName = "TryParse",
215-
parameters = [
216-
ProvidedParameter("value", typeof<string>)
217-
ProvidedParameter("ignoreCase", typeof<bool>) // optional=false
218-
],
219-
returnType = typedefof<_ option>.MakeGenericType( valueType),
220-
isStatic = true,
221-
invokeCode = fun _ ->
222-
this.GetType()
223-
.GetMethod( "GetTryParseImpl", BindingFlags.NonPublic ||| BindingFlags.Static)
224-
.MakeGenericMethod( valueType)
225-
.Invoke( null, [| itemsExpr |])
226-
|> unbox
227-
)
228-
229-
providedEnumType.AddMember tryParse2Arg
209+
let tryParseImpl =
210+
this.GetType()
211+
.GetMethod( "GetTryParseImpl", BindingFlags.NonPublic ||| BindingFlags.Static)
212+
.MakeGenericMethod( valueType)
213+
.Invoke( null, [| itemsExpr |])
214+
|> unbox
230215

231-
let tryParse1Arg =
216+
do //TryParse
217+
let tryParse =
232218
ProvidedMethod(
233219
methodName = "TryParse",
234220
parameters = [
235221
ProvidedParameter("value", typeof<string>)
222+
ProvidedParameter("ignoreCase", typeof<bool>, optionalValue = false) // optional=false
236223
],
237224
returnType = typedefof<_ option>.MakeGenericType( valueType),
238225
isStatic = true,
239-
invokeCode = fun args -> Expr.Call(tryParse2Arg, [args.[0]; Expr.Value false])
240-
226+
invokeCode = tryParseImpl
241227
)
242228

243-
providedEnumType.AddMember tryParse1Arg
229+
providedEnumType.AddMember tryParse
244230

245231
do //Parse
246232
let parseImpl =
@@ -250,45 +236,34 @@ type SqlEnumProvider(config : TypeProviderConfig) as this =
250236
.Invoke( null, [| itemsExpr; providedEnumType.FullName |])
251237
|> unbox
252238

253-
let parse2Arg =
239+
let parse =
254240
ProvidedMethod(
255241
methodName = "Parse",
256242
parameters = [
257243
ProvidedParameter("value", typeof<string>)
258-
ProvidedParameter("ignoreCase", typeof<bool>)
244+
ProvidedParameter("ignoreCase", typeof<bool>, optionalValue = false)
259245
],
260246
returnType = valueType,
261247
isStatic = true,
262248
invokeCode = parseImpl
263249
)
264250

265-
providedEnumType.AddMember parse2Arg
266-
267-
let parse1Arg =
268-
ProvidedMethod(
269-
methodName = "Parse",
270-
parameters = [
271-
ProvidedParameter("value", typeof<string>)
272-
],
273-
returnType = valueType,
274-
isStatic = true,
275-
invokeCode = fun args -> Expr.Call(parse2Arg, [args.[0]; Expr.Value false])
276-
)
277-
278-
providedEnumType.AddMember parse1Arg
251+
providedEnumType.AddMember parse
279252

280253
do //TryFindName
254+
let findNameImpl =
255+
this.GetType()
256+
.GetMethod( "GetTryFindName", BindingFlags.NonPublic ||| BindingFlags.Static)
257+
.MakeGenericMethod( valueType)
258+
.Invoke( null, [| itemsExpr |])
259+
|> unbox
260+
281261
let tryGetName =
282262
ProvidedMethod( methodName = "TryFindName",
283263
parameters = [ ProvidedParameter("value", valueType) ],
284264
returnType = typeof<string option>,
285265
isStatic = true,
286-
invokeCode = fun _ ->
287-
this.GetType()
288-
.GetMethod( "GetTryFindName", BindingFlags.NonPublic ||| BindingFlags.Static)
289-
.MakeGenericMethod( valueType)
290-
.Invoke( null, [| itemsExpr |])
291-
|> unbox
266+
invokeCode = findNameImpl
292267
)
293268

294269
providedEnumType.AddMember tryGetName

0 commit comments

Comments
 (0)