Skip to content

Commit a27e700

Browse files
ntrdmitry-a-morozov
authored andcommitted
#195 - Make connection parameter mandatory when literal connection string used at design time (#209)
* #195 - fixed * small improvment
1 parent 299fa78 commit a27e700

File tree

5 files changed

+23
-13
lines changed

5 files changed

+23
-13
lines changed
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11

22
open FSharp.Data
33

4-
let get42 = new SqlCommandProvider<"SELECT 42", "Server=.;Integrated Security=True">()
4+
let get42 = new SqlCommandProvider<"SELECT 42", "Server=.;Integrated Security=True">("Server=.;Integrated Security=True")
55
get42.Execute() |> Seq.toArray |> printfn "%A"
66

src/SqlClient/Configuration.fs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,8 @@ type internal DesignTimeConnectionString =
7979
else section.ConnectionString
8080
@@>
8181

82+
member this.IsDefinedByLiteral = match this with | Literal _ -> true | _ -> false
83+
8284
//this is mess. Clean up later.
8385
type Configuration = {
8486
ResultsetRuntimeVerification: bool

src/SqlClient/DesignTime.fs

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -454,7 +454,7 @@ type DesignTime private() =
454454

455455
]
456456

457-
static member GetCommandCtors(cmdProvidedType: ProvidedTypeDefinition, designTimeConfig, designTimeConnectionString, ?factoryMethodName) =
457+
static member internal GetCommandCtors(cmdProvidedType: ProvidedTypeDefinition, designTimeConfig, (designTimeConnectionString:DesignTimeConnectionString), isHostedExecution, ?factoryMethodName) =
458458
[
459459
let ctorImpl = typeof<``ISqlCommand Implementation``>.GetConstructor [| typeof<DesignTimeConfig>; typeof<Connection>; typeof<int> |]
460460

@@ -472,20 +472,26 @@ type DesignTime private() =
472472
then
473473
yield upcast ProvidedMethod(factoryMethodName.Value, parameters1, returnType = cmdProvidedType, IsStaticMethod = true, InvokeCode = body1)
474474

475-
let parameters2 = [
476-
ProvidedParameter("connection", typeof<SqlConnection>, optionalValue = null)
477-
ProvidedParameter("transaction", typeof<SqlTransaction>, optionalValue = null)
478-
ProvidedParameter("commandTimeout", typeof<int>, optionalValue = SqlCommand.DefaultTimeout)
479-
]
480-
475+
let parameters2 =
476+
[
477+
ProvidedParameter(
478+
"connection",
479+
typeof<SqlConnection>,
480+
?optionalValue = if designTimeConnectionString.IsDefinedByLiteral then None else Some null
481+
)
482+
ProvidedParameter("transaction", typeof<SqlTransaction>, optionalValue = null)
483+
ProvidedParameter("commandTimeout", typeof<int>, optionalValue = SqlCommand.DefaultTimeout)
484+
]
485+
486+
let connectionStringExpr = designTimeConnectionString.RunTimeValueExpr(isHostedExecution)
481487
let body2 (args: _ list) =
482488
let connArg =
483489
<@@
484490
if box (%%args.[1]: SqlTransaction) <> null
485491
then Connection.Choice3Of3 %%args.[1]
486492
elif box (%%args.[0]: SqlConnection) <> null
487493
then Connection.Choice2Of3 %%args.Head
488-
else Connection.Choice1Of3( %%designTimeConnectionString)
494+
else Connection.Choice1Of3( %%connectionStringExpr)
489495
@@>
490496
Expr.NewObject(ctorImpl, [ designTimeConfig ; connArg; args.[2] ])
491497

src/SqlClient/SqlClientProvider.fs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ open System.IO
99
open System.Reflection
1010
open System.Runtime.Caching
1111
open System.Data.SqlTypes
12-
1312
open Microsoft.FSharp.Core.CompilerServices
1413
open Microsoft.FSharp.Quotations
1514

@@ -201,7 +200,8 @@ type public SqlProgrammabilityProvider(config : TypeProviderConfig) as this =
201200
yield! DesignTime.GetCommandCtors(
202201
cmdProvidedType,
203202
designTimeConfig,
204-
designTimeConnectionString.RunTimeValueExpr(config.IsHostedExecution)
203+
designTimeConnectionString,
204+
config.IsHostedExecution
205205
)
206206

207207
let executeArgs = DesignTime.GetExecuteArgs(cmdProvidedType, parameters, uddtsPerSchema)
@@ -565,7 +565,8 @@ type public SqlProgrammabilityProvider(config : TypeProviderConfig) as this =
565565
DesignTime.GetCommandCtors(
566566
cmdProvidedType,
567567
designTimeConfig,
568-
designTimeConnectionString.RunTimeValueExpr(config.IsHostedExecution),
568+
designTimeConnectionString,
569+
config.IsHostedExecution,
569570
factoryMethodName = methodName
570571
)
571572
assert (ctorsAndFactories.Length = 4)

src/SqlClient/SqlCommandProvider.fs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,8 @@ type public SqlCommandProvider(config : TypeProviderConfig) as this =
167167
DesignTime.GetCommandCtors(
168168
cmdProvidedType,
169169
designTimeConfig,
170-
designTimeConnectionString.RunTimeValueExpr(config.IsHostedExecution),
170+
designTimeConnectionString,
171+
config.IsHostedExecution,
171172
factoryMethodName = "Create"
172173
)
173174
|> cmdProvidedType.AddMembers

0 commit comments

Comments
 (0)