v4.1 #11

Merged
danieljsummers merged 22 commits from v4point1 into main 2025-04-19 19:50:17 +00:00
Showing only changes of commit 79ace3ea63 - Show all commits

View File

@ -634,6 +634,8 @@ module Query =
|> function it -> $" ORDER BY {it}" |> function it -> $" ORDER BY {it}"
#nowarn "FS3511" // "let rec" is not statically compilable
open System.IO.Pipelines open System.IO.Pipelines
/// <summary>Functions that manipulate <c>PipeWriter</c>s</summary> /// <summary>Functions that manipulate <c>PipeWriter</c>s</summary>
@ -648,8 +650,7 @@ module PipeWriter =
let writeString (writer: PipeWriter) (text: string) = backgroundTask { let writeString (writer: PipeWriter) (text: string) = backgroundTask {
try try
let! writeResult = writer.WriteAsync(Encoding.UTF8.GetBytes text) let! writeResult = writer.WriteAsync(Encoding.UTF8.GetBytes text)
let! flushResult = writer.FlushAsync() return not writeResult.IsCompleted
return not (writeResult.IsCompleted || flushResult.IsCompleted)
with :? System.ObjectDisposedException -> return false with :? System.ObjectDisposedException -> return false
} }
@ -659,19 +660,20 @@ module PipeWriter =
/// <returns><c>true</c> if the pipe is still open, <c>false</c> if not</returns> /// <returns><c>true</c> if the pipe is still open, <c>false</c> if not</returns>
[<CompiledName "WriteStrings">] [<CompiledName "WriteStrings">]
let writeStrings writer items = backgroundTask { let writeStrings writer items = backgroundTask {
let rec writeNext docs idx = backgroundTask { let theItems = Seq.cache items
match items |> Seq.tryItem idx with let rec writeNext idx = backgroundTask {
match theItems |> Seq.tryItem idx with
| Some item -> | Some item ->
if idx > 0 then if idx > 0 then
let! _ = writeString writer "," let! _ = writeString writer ","
() ()
match! writeString writer item with match! writeString writer item with
| true -> return! writeNext docs (idx + 1) | true -> return! writeNext (idx + 1)
| false -> return false | false -> return false
| None -> return true | None -> return true
} }
let! _ = writeString writer "[" let! _ = writeString writer "["
let! isCleanFinish = writeNext items 0 let! isCleanFinish = writeNext 0
if isCleanFinish then if isCleanFinish then
let! _ = writeString writer "]" let! _ = writeString writer "]"
() ()