WIP on IN operator

This commit is contained in:
2024-09-04 16:14:22 -04:00
parent 3bc662c984
commit fb2b397663
5 changed files with 45 additions and 0 deletions

View File

@@ -96,6 +96,13 @@ module Parameters =
parameterFor (List.head values) (fun v -> Sql.parameter (NpgsqlParameter($"{p}min", v))))
yield ($"{p}max",
parameterFor (List.last values) (fun v -> Sql.parameter (NpgsqlParameter($"{p}max", v))))
| IN ->
let p = name.Derive it.ParameterName
yield!
it.Value :?> obj seq
|> Seq.mapi (fun idx v ->
let paramName = $"{p}_{idx}"
paramName, Sql.parameter (NpgsqlParameter(paramName, v)))
| _ ->
let p = name.Derive it.ParameterName
yield (p, parameterFor it.Value (fun v -> Sql.parameter (NpgsqlParameter(p, v)))) })
@@ -138,6 +145,10 @@ module Query =
let param, value =
match it.Op with
| BT -> $"{p}min AND {p}max", (it.Value :?> obj list)[0]
| IN ->
let values = it.Value :?> obj seq
let paramNames = values |> Seq.mapi (fun idx _ -> $"{p}_{idx}") |> String.concat ", "
$"({paramNames})", defaultArg (Seq.tryHead values) (obj ())
| _ -> p, it.Value
if isNumeric value then
$"({it.Path PostgreSQL})::numeric {it.Op} {param}"