Skip to content

Commit 174d695

Browse files
fixes to exposing Table type
* add a sample on how to refer to the table and row types in docs/contents/output.fsx * expose Row type as a inner type of Table type * changed SqlClient.Tests.fsproj to compile with
1 parent baf3dc5 commit 174d695

File tree

5 files changed

+27
-7
lines changed

5 files changed

+27
-7
lines changed

docs/content/output.fsx

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,14 @@ let table = (new QueryPersonInfoSingletoneDataTable()).AsyncExecute(PersonId = 2
113113
for row in table.Rows do
114114
printfn "Person info:Id - %i,FirstName - %O,LastName - %O" row.PersonID row.FirstName row.LastName
115115

116+
// you can refer to the table type
117+
let table2 : QueryPersonInfoSingletoneDataTable.Table = (new QueryPersonInfoSingletoneDataTable()).Execute(PersonId = 2)
118+
119+
// you can refer to the row type
120+
for row : QueryPersonInfoSingletoneDataTable.Table.Row in table2.Rows do
121+
printfn "Person info:Id - %i,FirstName - %O,LastName - %O" row.PersonID row.FirstName row.LastName
122+
123+
116124
(**
117125
118126
* Same as previous but using `SqlProgrammabilityProvider<...>`

src/SqlClient.Tests/DataTablesTests.fs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ open FSharp.Data
99
open FSharp.Data.SqlClient
1010
open Xunit
1111

12-
type AdventureWorks = SqlProgrammabilityProvider<ConnectionStrings.AdventureWorksNamed>
12+
open ProgrammabilityTest
13+
1314
//Tables types structured as: [TypeAlias].[Namespace].Tables.[TableName]
1415
type ShiftTable = AdventureWorks.HumanResources.Tables.Shift
1516
type ProductCostHistory = AdventureWorks.Production.Tables.ProductCostHistory
@@ -273,6 +274,8 @@ type DataTablesTests() =
273274
[<Fact>]
274275
member __.``Can use Table type when ResultType = ResultType.DataTable`` () =
275276
let t : GetArbitraryDataAsDataTable.Table = (new GetArbitraryDataAsDataTable()).Execute()
277+
for (r: GetArbitraryDataAsDataTable.Table.Row) in t.Rows do
278+
()
276279
Assert.NotNull(t)
277280
Assert.Equal(1, t.Rows.[0].a)
278281
Assert.Equal(2, t.Rows.[0].b)

src/SqlClient/DesignTime.fs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,10 @@ type DesignTime private() =
191191
then
192192
let dataRowType = DesignTime.GetDataRowType outputColumns
193193
let dataTableType = DesignTime.GetDataTableType dataRowType
194+
195+
// add .Row to .Table
196+
dataTableType.AddMember dataRowType
197+
194198
{
195199
ProvidedType = dataTableType
196200
ErasedToType = typeof<DataTable<DataRow>>

src/SqlClient/SqlClientProvider.fs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -540,7 +540,12 @@ type public SqlProgrammabilityProvider(config : TypeProviderConfig) as this =
540540
addRedirectToISqlCommandMethod typeof<string> "ToTraceString"
541541

542542
commands.AddMember cmdProvidedType
543-
output.ProvidedRowType |> Option.iter cmdProvidedType.AddMember
543+
if resultType = ResultType.DataTable then
544+
// if we don't do this, we get a compile error
545+
// Error The type provider 'FSharp.Data.SqlProgrammabilityProvider' reported an error: type 'Table' was not added as a member to a declaring type <type instanciation name>
546+
output.ProvidedType |> cmdProvidedType.AddMember
547+
else
548+
output.ProvidedRowType |> Option.iter cmdProvidedType.AddMember
544549

545550
let designTimeConfig =
546551
let expectedDataReaderColumns =

src/SqlClient/SqlCommandProvider.fs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -141,11 +141,11 @@ type public SqlCommandProvider(config : TypeProviderConfig) as this =
141141
do
142142
cmdProvidedType.AddMember(ProvidedProperty("ConnectionStringOrName", typeof<string>, [], IsStatic = true, GetterCode = fun _ -> <@@ connectionStringOrName @@>))
143143

144-
do
145-
//for ResultType.Record and ResultType.DataTable
146-
output.ProvidedRowType |> Option.iter cmdProvidedType.AddMember
147-
148-
if resultType = ResultType.DataTable then
144+
do
145+
if resultType = ResultType.Records then
146+
// Add .Record
147+
output.ProvidedRowType |> Option.iter cmdProvidedType.AddMember
148+
elif resultType = ResultType.DataTable then
149149
// add .Table
150150
output.ProvidedType |> cmdProvidedType.AddMember
151151

0 commit comments

Comments
 (0)