Skip to content

Commit 40b97c5

Browse files
SIRHAMYHAMY
andauthored
[FSharp] Fix: Improve FSharp Falco benchmarks by moving to Dapper (#9766)
Co-authored-by: HAMY <[email protected]>
1 parent cfe9dc9 commit 40b97c5

File tree

2 files changed

+8
-29
lines changed

2 files changed

+8
-29
lines changed

frameworks/FSharp/falco/src/App/App.fsproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
</ItemGroup>
1616

1717
<ItemGroup>
18+
<PackageReference Include="dapper" Version="2.1.66" />
1819
<PackageReference Include="Falco" Version="5.*" />
1920
<PackageReference Include="Npgsql" Version="9.*" />
2021
</ItemGroup>

frameworks/FSharp/falco/src/App/Program.fs

Lines changed: 7 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
module Program
22

33
open System.Data
4+
open Dapper
45
open Falco
56
open Falco.Markup
67
open Falco.Routing
@@ -26,38 +27,15 @@ type Fortune =
2627
message = "Additional fortune added at request time." }
2728

2829
let handleFortunes (connStr : string) : HttpHandler = fun ctx -> task {
29-
use conn = new NpgsqlConnection(connStr)
30-
31-
use comd = conn.CreateCommand()
32-
comd.CommandText <- "SELECT id, message FROM fortune"
33-
34-
do! conn.OpenAsync()
35-
use! redr = comd.ExecuteReaderAsync(CommandBehavior.SequentialAccess)
36-
37-
let! dbFortunes =
38-
task {
39-
let mutable shouldContinue = true
40-
let fortunes = ResizeArray<Fortune>()
4130

42-
while shouldContinue do
43-
let! fortunesRead = redr.ReadAsync()
44-
45-
if not fortunesRead then
46-
shouldContinue <- false
47-
else
48-
fortunes.Add { id = redr.GetInt32(0)
49-
message = redr.GetString(1) }
50-
return fortunes |> List.ofSeq
51-
}
52-
53-
redr.Dispose()
54-
comd.Dispose()
55-
conn.Dispose()
31+
use conn = new NpgsqlConnection(connStr)
32+
let! data = conn.QueryAsync<Fortune>("SELECT id, message FROM fortune")
33+
let fortunes = data.AsList()
34+
fortunes.Add(Fortune.Default)
5635

5736
let sortedFortunes =
58-
Fortune.Default ::
59-
dbFortunes
60-
|> List.sortBy (fun f -> f.message)
37+
fortunes
38+
|> Seq.sortBy (fun f -> f.message)
6139

6240
let html =
6341
Elem.html [] [

0 commit comments

Comments
 (0)