@@ -12,13 +12,15 @@ open FSharp.Data
1212
1313type internal ResultTypes = {
1414 ProvidedType : Type
15+ ErasedToType : Type
1516 ProvidedRowType : ProvidedTypeDefinition option
16- ErasedToRowType : Type
17+ ErasedToRowType : Type
1718 RowMapping : Expr
1819} with
1920
20- static member SingleTypeResult ( provided ) = {
21+ static member SingleTypeResult ( provided , ? erasedTo ) = {
2122 ProvidedType = provided
23+ ErasedToType = defaultArg erasedTo provided
2224 ProvidedRowType = None
2325 ErasedToRowType = typeof< Void>
2426 RowMapping = Expr.Value Unchecked.defaultof< RowMapping>
@@ -173,11 +175,6 @@ type DesignTime private() =
173175
174176 rowType
175177
176- static member internal GetDataTableType dataRowType =
177- let tableType = ProvidedTypeBuilder.MakeGenericType( typedefof<_ DataTable>, [ dataRowType ])
178- let tableProvidedType = ProvidedTypeDefinition( " Table" , Some tableType)
179- tableProvidedType
180-
181178 static member internal GetOutputTypes ( outputColumns : Column list , resultType , rank : ResultRank , hasOutputParameters ) =
182179 if resultType = ResultType.DataReader
183180 then
@@ -188,13 +185,10 @@ type DesignTime private() =
188185 elif resultType = ResultType.DataTable
189186 then
190187 let dataRowType = DesignTime.GetDataRowType outputColumns
191- let dataTableType = DesignTime.GetDataTableType dataRowType
192-
193- // add .Row to .Table
194- dataTableType.AddMember dataRowType
195188
196189 {
197- ProvidedType = dataTableType
190+ ProvidedType = ProvidedTypeBuilder.MakeGenericType( typedefof<_ DataTable>, [ dataRowType ])
191+ ErasedToType = typeof< DataTable< DataRow>>
198192 ProvidedRowType = Some dataRowType
199193 ErasedToRowType = typeof< Void>
200194 RowMapping = Expr.Value Unchecked.defaultof< RowMapping>
@@ -232,6 +226,7 @@ type DesignTime private() =
232226
233227 let tupleTypeName = tupleType.PartialAssemblyQualifiedName
234228 None, tupleType, <@@ Microsoft.FSharp.Reflection.FSharpValue.PreComputeTupleConstructor ( Type.GetType ( tupleTypeName)) @@>
229+ //None, tupleType, <@@ fun values -> Type.GetType(tupleTypeName, throwOnError = true).GetConstructors().[0].Invoke(values) @@>
235230
236231 let nullsToOptions = QuotationsFactory.MapArrayNullableItems( outputColumns, " MapArrayObjItemToOption" )
237232 let combineWithNullsToOptions = typeof< QuotationsFactory>. GetMethod( " GetMapperWithNullsToOptions" )
@@ -246,12 +241,13 @@ type DesignTime private() =
246241 Some( typedefof<_ option>), typedefof<_ option>. MakeGenericType([| erasedToRowType |])
247242 else //ResultRank.ScalarValue
248243 None, erasedToRowType
249-
244+
250245 {
251246 ProvidedType =
252247 if providedRowType.IsSome && genericOutputType.IsSome
253248 then ProvidedTypeBuilder.MakeGenericType( genericOutputType.Value, [ providedRowType.Value ])
254249 else erasedToType
250+ ErasedToType = erasedToType
255251 ProvidedRowType = providedRowType
256252 ErasedToRowType = erasedToRowType
257253 RowMapping = Expr.Call( combineWithNullsToOptions, [ nullsToOptions; rowMapping ])
@@ -503,4 +499,4 @@ type DesignTime private() =
503499 if factoryMethodName.IsSome
504500 then
505501 yield upcast ProvidedMethod( factoryMethodName.Value, parameters2, returnType = cmdProvidedType, IsStaticMethod = true , InvokeCode = body2)
506- ]
502+ ]
0 commit comments