Skip to content

Commit e662a1d

Browse files
author
Sam Hanes
committed
TPs compile
1 parent fb8706f commit e662a1d

10 files changed

Lines changed: 142 additions & 158 deletions

paket.dependencies

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ generate_load_scripts: on
66
nuget FSharp.Core = 4.1.2
77
nuget Microsoft.SqlServer.TransactSql.ScriptDom
88

9-
github fsprojects/FSharp.TypeProviders.SDK:0a5fd0caa73df304062c8965e61850789d9f39e7 src/ProvidedTypes.fs
10-
github fsprojects/FSharp.TypeProviders.SDK:0a5fd0caa73df304062c8965e61850789d9f39e7 src/ProvidedTypes.fsi
11-
github fsprojects/FSharp.TypeProviders.SDK:0a5fd0caa73df304062c8965e61850789d9f39e7 src/ProvidedTypesTesting.fs
9+
github fsprojects/FSharp.TypeProviders.SDK:7d57cd409d7299592822713195924e42b2b7acde src/ProvidedTypes.fs
10+
github fsprojects/FSharp.TypeProviders.SDK:7d57cd409d7299592822713195924e42b2b7acde src/ProvidedTypes.fsi
11+
github fsprojects/FSharp.TypeProviders.SDK:7d57cd409d7299592822713195924e42b2b7acde src/ProvidedTypesTesting.fs
1212

1313
group Build
1414
source https://www.nuget.org/api/v2/

paket.lock

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,9 @@ NUGET
9595
System.Xml.ReaderWriter (4.3.1) - restriction: || (&& (>= net40) (< net45) (>= netstandard1.1) (< netstandard1.2)) (&& (>= net40) (< net45) (>= netstandard1.2) (< netstandard1.3)) (&& (>= net40) (< net45) (>= netstandard1.3) (< netstandard1.4)) (&& (>= net40) (< net45) (>= netstandard1.4) (< netstandard1.5)) (&& (>= net40) (< net45) (>= netstandard1.5) (< netstandard1.6)) (&& (>= net40) (>= netstandard1.0) (< portable-net45+win8+wpa81)) (&& (>= net40) (< netstandard1.5) (>= uap10.0)) (&& (>= net46) (< netstandard1.4))
9696
GITHUB
9797
remote: fsprojects/FSharp.TypeProviders.SDK
98-
src/ProvidedTypes.fs (0a5fd0caa73df304062c8965e61850789d9f39e7)
99-
src/ProvidedTypes.fsi (0a5fd0caa73df304062c8965e61850789d9f39e7)
100-
src/ProvidedTypesTesting.fs (0a5fd0caa73df304062c8965e61850789d9f39e7)
98+
src/ProvidedTypes.fs (7d57cd409d7299592822713195924e42b2b7acde)
99+
src/ProvidedTypes.fsi (7d57cd409d7299592822713195924e42b2b7acde)
100+
src/ProvidedTypesTesting.fs (7d57cd409d7299592822713195924e42b2b7acde)
101101
GROUP Build
102102
GENERATE-LOAD-SCRIPTS: ON
103103
REDIRECTS: FORCE

src/SqlClient/DebugProvidedTypes.fs

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,10 @@ module internal Debug =
2929
cfg?ReferencedAssemblies <- Array.zeroCreate<string> 0
3030

3131
let typeProviderForNamespaces = typeProviderForNamespacesConstructor cfg :> TypeProviderForNamespaces
32-
33-
let providedTypeDefinition = typeProviderForNamespaces.Namespaces |> Seq.last |> snd |> Seq.last
34-
32+
let ns = typeProviderForNamespaces.Namespaces |> Seq.last
33+
//let providedTypeDefinition = typeProviderForNamespaces.Namespaces |> Seq.last |> snd |> Seq.last
34+
let providedTypeDefinition = ns.GetTypes() |> Seq.last :?> ProvidedTypeDefinition
35+
3536
match args with
3637
| [||] -> providedTypeDefinition
3738
| args ->
@@ -41,7 +42,7 @@ module internal Debug =
4142
else
4243
// The type name ends up quite mangled in the dll output if we combine the name using static parameters, so for generated types we don't do that
4344
providedTypeDefinition.Name
44-
providedTypeDefinition.MakeParametricType(typeName, args)
45+
providedTypeDefinition.ApplyStaticArguments(typeName, args)
4546

4647
/// Returns a string representation of the signature (and optionally also the body) of all the
4748
/// types generated by the type provider up to a certain depth and width
@@ -412,15 +413,15 @@ module internal Debug =
412413
seq { if not m.IsStatic then yield (ProvidedTypeDefinition.EraseType m.DeclaringType)
413414
for param in m.GetParameters() do yield (ProvidedTypeDefinition.EraseType param.ParameterType) }
414415
|> Seq.map (fun typ -> Expr.Value(null, typ))
415-
|> Array.ofSeq
416-
|> m.GetInvokeCodeInternal false
416+
|> List.ofSeq
417+
|> (Option.get m.GetInvokeCode)
417418

418419
let getConstructorBody (c: ProvidedConstructor) =
419-
if c.IsImplicitCtor then Expr.Value(()) else
420+
if c.IsImplicitConstructor then Expr.Value(()) else
420421
seq { for param in c.GetParameters() do yield (ProvidedTypeDefinition.EraseType param.ParameterType) }
421422
|> Seq.map (fun typ -> Expr.Value(null, typ))
422-
|> Array.ofSeq
423-
|> c.GetInvokeCodeInternal false
423+
|> List.ofSeq
424+
|> c.GetInvokeCode
424425

425426
let printExpr x =
426427
if not ignoreOutput then
@@ -454,7 +455,7 @@ module internal Debug =
454455
if not signatureOnly then
455456
cons |> getConstructorBody |> printExpr
456457

457-
| :? ProvidedLiteralField as field ->
458+
| :? ProvidedField as field when field.IsLiteral = true ->
458459
let value =
459460
if signatureOnly then ""
460461
else field.GetRawConstantValue() |> printObj

src/SqlClient/DesignTime.fs

Lines changed: 36 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -141,9 +141,7 @@ type DesignTime private() =
141141
<@@ (%%Expr.Value(param.Name) : string), %%Expr.Coerce(value, typeof<obj>) @@>
142142
)
143143

144-
let m = ProvidedMethod(name, executeArgs, providedOutputType)
145-
146-
m.InvokeCode <- fun exprArgs ->
144+
let m = ProvidedMethod(name, executeArgs, providedOutputType, fun exprArgs ->
147145
let methodInfo = typeof<ISqlCommand>.GetMethod(name)
148146
let vals = mappedInputParamValues(exprArgs)
149147
let paramValues = Expr.NewArray( typeof<string * obj>, elements = vals)
@@ -180,7 +178,7 @@ type DesignTime private() =
180178
ps |> %%mapOutParamValues
181179
result
182180
@@>
183-
181+
)
184182
let xmlDoc =
185183
sqlParameters
186184
|> Seq.choose (fun p ->
@@ -206,7 +204,7 @@ type DesignTime private() =
206204
|> Seq.tryFind (fun (_, xs) -> Seq.length xs > 1)
207205
|> Option.iter (fun (name, _) -> failwithf "Non-unique column name %s is illegal for ResultType.Records." name)
208206

209-
let recordType = ProvidedTypeDefinition("Record", baseType = Some typeof<obj>, HideObjectMethods = true)
207+
let recordType = ProvidedTypeDefinition("Record", baseType = Some typeof<obj>, hideObjectMethods = true)
210208
let properties, ctorParameters =
211209
columns
212210
|> List.mapi ( fun i col ->
@@ -216,8 +214,7 @@ type DesignTime private() =
216214

217215
let propType = col.GetProvidedType(?unitsOfMeasurePerSchema = unitsOfMeasurePerSchema)
218216

219-
let property = ProvidedProperty(propertyName, propType)
220-
property.GetterCode <- fun args -> <@@ (unbox<DynamicRecord> %%args.[0]).[propertyName] @@>
217+
let property = ProvidedProperty(propertyName, propType, getterCode = fun args -> <@@ (unbox<DynamicRecord> %%args.[0]).[propertyName] @@>)
221218

222219
let ctorParameter = ProvidedParameter(propertyName, propType)
223220

@@ -227,15 +224,15 @@ type DesignTime private() =
227224

228225
recordType.AddMembers properties
229226

230-
let ctor = ProvidedConstructor(ctorParameters)
231-
ctor.InvokeCode <- fun args ->
227+
let ctor = ProvidedConstructor(ctorParameters, fun args ->
232228
let pairs = Seq.zip args properties //Because we need original names in dictionary
233229
|> Seq.map (fun (arg,p) -> <@@ (%%Expr.Value(p.Name):string), %%Expr.Coerce(arg, typeof<obj>) @@>)
234230
|> List.ofSeq
235231
<@@
236232
let pairs : (string * obj) [] = %%Expr.NewArray(typeof<string * obj>, pairs)
237233
DynamicRecord (dict pairs)
238-
@@>
234+
@@>
235+
)
239236
recordType.AddMember ctor
240237

241238
recordType
@@ -261,10 +258,10 @@ type DesignTime private() =
261258
let propertyType = col.GetProvidedType(?unitsOfMeasurePerSchema = unitsOfMeasurePerSchema)
262259

263260
let getter, setter = DesignTime.GetDataRowPropertyGetterAndSetterCode col
264-
let property = ProvidedProperty(col.Name, propertyType, GetterCode = getter)
265-
266-
if not col.ReadOnly then
267-
property.SetterCode <- setter
261+
let property = ProvidedProperty(col.Name, propertyType, getterCode = getter, ?setterCode =
262+
if not col.ReadOnly
263+
then Some setter
264+
else None)
268265

269266
property
270267
)
@@ -278,42 +275,31 @@ type DesignTime private() =
278275

279276
let columnsType = ProvidedTypeDefinition("Columns", Some typeof<DataColumnCollection>)
280277

281-
let columnsProperty = ProvidedProperty("Columns", columnsType)
282-
tableProvidedType.AddMember columnsType
283-
284-
columnsProperty.GetterCode <-
285-
fun args ->
278+
let columnsProperty = ProvidedProperty("Columns", columnsType, getterCode = fun args ->
286279
<@@
287280
let table : DataTable<DataRow> = %%args.[0]
288281
table.Columns
289-
@@>
290-
282+
@@>)
283+
tableProvidedType.AddMember columnsType
291284
tableProvidedType.AddMember columnsProperty
292285

293286
for column in outputColumns do
294287
let propertyType = ProvidedTypeDefinition(column.Name, Some typeof<DataColumn>)
295-
let property = ProvidedProperty(column.Name, propertyType)
296-
297-
property.GetterCode <- fun args ->
288+
let property = ProvidedProperty(column.Name, propertyType, fun args ->
298289
let columnName = column.Name
299290
<@@
300291
let columns: DataColumnCollection = %%args.[0]
301292
columns.[columnName]
302-
@@>
303-
293+
@@>)
294+
295+
let getter, setter = DesignTime.GetDataRowPropertyGetterAndSetterCode(column)
304296
let getValueMethod =
305297
ProvidedMethod(
306298
"GetValue"
307299
, [ProvidedParameter("row", dataRowType)]
308300
, column.ErasedToType
309-
)
310-
311-
let getter, setter = DesignTime.GetDataRowPropertyGetterAndSetterCode(column)
312-
313-
getValueMethod.InvokeCode <-
314-
fun args ->
315-
// we don't care of args.[0] (the DataColumn) because getter code is already made for that column
316-
getter args.Tail
301+
, fun args -> getter args.Tail // we don't care of args.[0] (the DataColumn) because getter code is already made for that column
302+
)
317303

318304
let setValueMethod =
319305
ProvidedMethod(
@@ -323,12 +309,8 @@ type DesignTime private() =
323309
ProvidedParameter("value", column.ErasedToType)
324310
]
325311
, typeof<unit>
312+
, fun args -> setter args.Tail // we don't care of args.[0] (the DataColumn) because setter code is already made for that column
326313
)
327-
328-
setValueMethod.InvokeCode <-
329-
fun args ->
330-
// we don't care of args.[0] (the DataColumn) because setter code is already made for that column
331-
setter args.Tail
332314

333315
propertyType.AddMember getValueMethod
334316
propertyType.AddMember setValueMethod
@@ -341,7 +323,7 @@ type DesignTime private() =
341323
ProvidedProperty(
342324
"Table"
343325
, tableProvidedType
344-
, GetterCode =
326+
, getterCode =
345327
fun args ->
346328
<@@
347329
let row : DataRow = %%args.[0]
@@ -384,7 +366,7 @@ type DesignTime private() =
384366
@@>
385367

386368

387-
ProvidedConstructor([], InvokeCode = ctorCode) |> tableProvidedType.AddMember
369+
ProvidedConstructor([], invokeCode = ctorCode) |> tableProvidedType.AddMember
388370

389371
tableProvidedType
390372

@@ -609,7 +591,7 @@ type DesignTime private() =
609591

610592
static member internal CreateUDTT(t: TypeInfo) =
611593
assert(t.TableType)
612-
let rowType = ProvidedTypeDefinition(t.UdttName, Some typeof<obj>, HideObjectMethods = true)
594+
let rowType = ProvidedTypeDefinition(t.UdttName, Some typeof<obj>, hideObjectMethods = true)
613595

614596
let parameters, sqlMetas =
615597
List.unzip [
@@ -627,8 +609,7 @@ type DesignTime private() =
627609
yield param, sqlMeta
628610
]
629611

630-
let ctor = ProvidedConstructor( parameters)
631-
ctor.InvokeCode <- fun args ->
612+
let ctor = ProvidedConstructor( parameters, fun args ->
632613
let optionsToNulls = QuotationsFactory.MapArrayNullableItems(List.ofArray t.TableTypeColumns.Value, "MapArrayOptionItemToObj")
633614

634615
<@@
@@ -644,7 +625,8 @@ type DesignTime private() =
644625
sqlDataRecordType.GetMethod("SetValues").Invoke(record, [| values |]) |> ignore
645626

646627
record
647-
@@>
628+
@@>)
629+
648630
rowType.AddMember ctor
649631
rowType.AddXmlDoc "User-Defined Table Type"
650632

@@ -705,11 +687,11 @@ type DesignTime private() =
705687
let body1 (args: _ list) =
706688
Expr.NewObject(ctorImpl, designTimeConfig :: <@@ Connection.Choice1Of3 %%args.Head @@> :: args.Tail)
707689

708-
yield ProvidedConstructor(parameters1, InvokeCode = body1) :> MemberInfo
690+
yield ProvidedConstructor(parameters1, invokeCode = body1) :> MemberInfo
709691

710692
if factoryMethodName.IsSome
711693
then
712-
yield upcast ProvidedMethod(factoryMethodName.Value, parameters1, returnType = cmdProvidedType, IsStaticMethod = true, InvokeCode = body1)
694+
yield upcast ProvidedMethod(factoryMethodName.Value, parameters1, returnType = cmdProvidedType, isStatic = true, invokeCode = body1)
713695

714696
let parameters2 =
715697
[
@@ -734,14 +716,14 @@ type DesignTime private() =
734716
@@>
735717
Expr.NewObject(ctorImpl, [ designTimeConfig ; connArg; args.[2] ])
736718

737-
yield upcast ProvidedConstructor(parameters2, InvokeCode = body2)
719+
yield upcast ProvidedConstructor(parameters2, invokeCode = body2)
738720
if factoryMethodName.IsSome
739721
then
740-
yield upcast ProvidedMethod(factoryMethodName.Value, parameters2, returnType = cmdProvidedType, IsStaticMethod = true, InvokeCode = body2)
722+
yield upcast ProvidedMethod(factoryMethodName.Value, parameters2, returnType = cmdProvidedType, isStatic = true, invokeCode = body2)
741723
]
742724

743725
static member private CreateTempTableRecord(name, cols) =
744-
let rowType = ProvidedTypeDefinition(name, Some typeof<obj>, HideObjectMethods = true)
726+
let rowType = ProvidedTypeDefinition(name, Some typeof<obj>, hideObjectMethods = true)
745727

746728
let parameters =
747729
[
@@ -751,13 +733,12 @@ type DesignTime private() =
751733
yield param
752734
]
753735

754-
let ctor = ProvidedConstructor( parameters)
755-
ctor.InvokeCode <- fun args ->
736+
let ctor = ProvidedConstructor( parameters, fun args ->
756737
let optionsToNulls = QuotationsFactory.MapArrayNullableItems(cols, "MapArrayOptionItemToObj")
757738

758739
<@@ let values: obj[] = %%Expr.NewArray(typeof<obj>, [ for a in args -> Expr.Coerce(a, typeof<obj>) ])
759740
(%%optionsToNulls) values
760-
values @@>
741+
values @@>)
761742

762743
rowType.AddMember ctor
763744
rowType.AddXmlDoc "Type Table Type"
@@ -815,10 +796,7 @@ type DesignTime private() =
815796
)
816797
|> List.fold (fun acc x -> Expr.Sequential(acc, x)) <@@ () @@>
817798

818-
let loadTempTablesMethod = ProvidedMethod("LoadTempTables", parameters, typeof<unit>)
819-
820-
loadTempTablesMethod.InvokeCode <- fun exprArgs ->
821-
799+
let loadTempTablesMethod = ProvidedMethod("LoadTempTables", parameters, typeof<unit>, fun exprArgs ->
822800
let command = Expr.Coerce(exprArgs.[0], typedefof<ISqlCommand>)
823801

824802
let connection =
@@ -830,7 +808,7 @@ type DesignTime private() =
830808
create.ExecuteNonQuery() |> ignore
831809

832810
(%%loadValues exprArgs connection)
833-
ignore() @@>
811+
ignore() @@>)
834812

835813
// Create the temp table(s) but as a global temp table with a unique name. This can be used later down stream on the open connection.
836814
use cmd = new SqlCommand(tempTableRegex.Replace(tempTableDefinitions, Prefixes.tempTable+connectionId+"$1"), connection)

src/SqlClient/SingleRootTypeProvider.fs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,15 +55,15 @@ type CacheWithMonitors (providerName) =
5555
[<AbstractClass>]
5656
[<CompilerMessageAttribute("This API supports the FSharp.Data.SqlClient infrastructure and is not intended to be used directly from your code.", 101, IsHidden = true)>]
5757
type SingleRootTypeProvider(config: TypeProviderConfig, providerName, parameters, ?isErased) as this =
58-
inherit TypeProviderForNamespaces()
58+
inherit TypeProviderForNamespaces(config, addDefaultProbingLocation = true)
5959

6060
let cache = new CacheWithMonitors(providerName)
6161
do
6262
let isErased = defaultArg isErased true
6363
let nameSpace = this.GetType().Namespace
6464
let assembly = Assembly.LoadFrom( config.RuntimeAssembly)
6565

66-
let providerType = ProvidedTypeDefinition(assembly, nameSpace, providerName, Some typeof<obj>, HideObjectMethods = true, IsErased = isErased)
66+
let providerType = ProvidedTypeDefinition(assembly, nameSpace, providerName, Some typeof<obj>, hideObjectMethods = true, isErased = isErased)
6767

6868
providerType.DefineStaticParameters(
6969
parameters = parameters,

src/SqlClient/SqlClientExtensions.fs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ type Column = {
6969
then
7070
assert(unitsOfMeasurePerSchema.IsSome)
7171
let uomType = unitsOfMeasurePerSchema.Value.[this.TypeInfo.Schema] |> List.find (fun x -> x.Name = this.TypeInfo.UnitOfMeasureName)
72-
ProviderImplementation.ProvidedTypes.ProvidedMeasureBuilder.Default.AnnotateType(this.TypeInfo.ClrType, [ uomType ])
72+
ProviderImplementation.ProvidedTypes.ProvidedMeasureBuilder.AnnotateType(this.TypeInfo.ClrType, [ uomType ])
7373
else
7474
this.TypeInfo.ClrType
7575

@@ -149,7 +149,7 @@ type Parameter = {
149149
then
150150
assert(unitsOfMeasurePerSchema.IsSome)
151151
let uomType = unitsOfMeasurePerSchema.Value.[this.TypeInfo.Schema] |> List.find (fun x -> x.Name = this.TypeInfo.UnitOfMeasureName)
152-
ProviderImplementation.ProvidedTypes.ProvidedMeasureBuilder.Default.AnnotateType(this.TypeInfo.ClrType, [ uomType ])
152+
ProviderImplementation.ProvidedTypes.ProvidedMeasureBuilder.AnnotateType(this.TypeInfo.ClrType, [ uomType ])
153153
else
154154
this.TypeInfo.ClrType
155155

0 commit comments

Comments
 (0)