Skip to content

Commit 8710bc8

Browse files
authored
[F#/Oxpecker] Several improvements (#9170)
* [F#/Oxpecker] Change fortunes serialization to chunked * [F#/Oxpecker] Database query improvements * [F#/Oxpecker] Disabled config file changes
1 parent 647bd32 commit 8710bc8

File tree

4 files changed

+19
-9
lines changed

4 files changed

+19
-9
lines changed

frameworks/FSharp/oxpecker/oxpecker.dockerfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ RUN dotnet publish -c Release -o out
66
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS runtime
77

88
ENV DOTNET_ReadyToRun 0
9+
ENV ASPNETCORE_hostBuilder__reloadConfigOnChange false
910

1011
ENV URLS http://+:8080
1112

frameworks/FSharp/oxpecker/src/App/App.fsproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
<ItemGroup>
1515
<PackageReference Update="FSharp.Core" Version="8.0.300" />
16-
<PackageReference Include="Oxpecker" Version="0.10.1" />
16+
<PackageReference Include="Oxpecker" Version="0.13.0" />
1717
<PackageReference Include="Npgsql" Version="8.0.3" />
1818
</ItemGroup>
1919
</Project>

frameworks/FSharp/oxpecker/src/App/Db.fs

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,19 +21,19 @@ module Db =
2121
return result
2222
}
2323

24-
let private createReadCommand (connection: DbConnection) =
24+
let private createReadCommand (connection: NpgsqlConnection) =
2525
let cmd = connection.CreateCommand(
2626
CommandText = "SELECT id, randomnumber FROM world WHERE id = @Id"
2727
)
28-
let id = cmd.CreateParameter(
28+
let id = NpgsqlParameter<int>(
2929
ParameterName = "@Id",
3030
DbType = DbType.Int32,
31-
Value = Random.Shared.Next(1, 10001)
31+
TypedValue = Random.Shared.Next(1, 10001)
3232
)
3333
cmd.Parameters.Add(id) |> ignore
3434
cmd
3535

36-
let private readSingleRow (cmd: DbCommand) =
36+
let private readSingleRow (cmd: NpgsqlCommand) =
3737
task {
3838
use! rdr = cmd.ExecuteReaderAsync(CommandBehavior.SingleRow)
3939
let! _ = rdr.ReadAsync()
@@ -83,12 +83,21 @@ module Db =
8383
| q ->
8484
q
8585

86-
let private generateParameters (results: World[]) (command: DbCommand) =
86+
// fill cache
87+
let _ = [| 0..maxBatch |] |> Array.map batchUpdateString
88+
89+
let private paramNames =
90+
seq { 0..maxBatch*2 }
91+
|> Seq.map (fun i -> struct($"@Rn_{i}", $"@Id_{i}"))
92+
|> Seq.toArray
93+
94+
let private generateParameters (results: World[]) (command: NpgsqlCommand) =
8795
for i in 0..results.Length-1 do
8896
let randomNumber = Random.Shared.Next(1, 10001)
89-
let random = command.CreateParameter(ParameterName = $"@Rn_{i}", DbType = DbType.Int32, Value = randomNumber)
97+
let struct(rnParamName, idParamName) = paramNames[i]
98+
let random = NpgsqlParameter<int>(ParameterName = rnParamName, DbType = DbType.Int32, TypedValue = randomNumber)
9099
command.Parameters.Add(random) |> ignore
91-
let id = command.CreateParameter(ParameterName = $"@Id_{i}", DbType = DbType.Int32, Value = results[i].id)
100+
let id = NpgsqlParameter<int>(ParameterName = idParamName, DbType = DbType.Int32, TypedValue = results[i].id)
92101
command.Parameters.Add(id) |> ignore
93102
results[i] <- { results[i] with randomnumber = randomNumber }
94103

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ module HttpHandlers =
4949
let rec private renderFortunes (ctx: HttpContext) (data: ResizeArray<Fortune>) =
5050
data.Add extra
5151
data.Sort FortuneComparer
52-
data |> HtmlViews.fortunes |> ctx.WriteHtmlView
52+
data |> HtmlViews.fortunes |> ctx.WriteHtmlViewChunked
5353

5454
let fortunes : EndpointHandler =
5555
fun ctx ->

0 commit comments

Comments
 (0)