1+ module FSharp.Data.TempTableTests
2+
3+ open FSharp.Data
4+ open Xunit
5+ open System.Data .SqlClient
6+
7+ type TempTable =
8+ SqlCommandProvider<
9+ TempTableDefinitions = "
10+ CREATE TABLE #Temp (
11+ Id INT NOT NULL,
12+ Name NVARCHAR(100) NULL)" ,
13+ CommandText = "
14+ SELECT Id, Name FROM #Temp" ,
15+ ConnectionStringOrName =
16+ ConnectionStrings.AdventureWorksLiteral>
17+
18+ [<Fact>]
19+ let usingTempTable () =
20+ use conn = new SqlConnection( ConnectionStrings.AdventureWorksLiteral)
21+ conn.Open()
22+
23+ use cmd = new TempTable( conn)
24+
25+ cmd.LoadTempTables(
26+ Temp =
27+ [ TempTable.Temp( Id = 1 , Name = Some " monkey" )
28+ TempTable.Temp( Id = 2 , Name = Some " donkey" ) ])
29+
30+ let actual =
31+ cmd.Execute()
32+ |> Seq.map( fun x -> x.Id, x.Name)
33+ |> Seq.toList
34+
35+ let expected = [
36+ 1 , Some " monkey"
37+ 2 , Some " donkey"
38+ ]
39+
40+ Assert.Equal<_ list>( expected, actual)
41+
42+ [<Fact>]
43+ let queryWithHash () =
44+ // We shouldn't mangle the statement when it's run
45+ use cmd =
46+ new SqlCommandProvider<
47+ CommandText = "
48+ SELECT Id, Name
49+ FROM
50+ (
51+ SELECT 1 AS Id, '#name' AS Name UNION
52+ SELECT 2, 'some other value'
53+ ) AS a
54+ WHERE Name = '#name'" ,
55+ ConnectionStringOrName =
56+ ConnectionStrings.AdventureWorksLiteral>( ConnectionStrings.AdventureWorksLiteral)
57+
58+ let actual =
59+ cmd.Execute()
60+ |> Seq.map( fun x -> x.Id, x.Name)
61+ |> Seq.toList
62+
63+ let expected = [
64+ 1 , " #name"
65+ ]
66+
67+ Assert.Equal<_ list>( expected, actual)
68+
69+ type TempTableHash =
70+ SqlCommandProvider<
71+ TempTableDefinitions = "
72+ CREATE TABLE #Temp (
73+ Id INT NOT NULL)" ,
74+ CommandText = "
75+ SELECT a.Id, a.Name
76+ FROM
77+ (
78+ SELECT 1 AS Id, '#Temp' AS Name UNION
79+ SELECT 2, 'some other value'
80+ ) AS a
81+ INNER JOIN #Temp t ON t.Id = a.Id" ,
82+ ConnectionStringOrName =
83+ ConnectionStrings.AdventureWorksLiteral>
84+
85+ [<Fact>]
86+ let queryWithHashAndTempTable () =
87+ // We shouldn't mangle the statement when it's run
88+ use conn = new SqlConnection( ConnectionStrings.AdventureWorksLiteral)
89+ conn.Open()
90+
91+ use cmd = new TempTableHash( conn)
92+
93+ cmd.LoadTempTables(
94+ Temp =
95+ [ TempTableHash.Temp( Id = 1 ) ])
96+
97+ let actual =
98+ cmd.Execute()
99+ |> Seq.map( fun x -> x.Id, x.Name)
100+ |> Seq.toList
101+
102+ let expected = [
103+ 1 , " #Temp"
104+ ]
105+
106+ Assert.Equal<_ list>( expected, actual)
0 commit comments