WIP on InArray comparison
This commit is contained in:
@@ -100,7 +100,9 @@ module Parameters =
|
||||
|> Seq.mapi (fun idx v ->
|
||||
let paramName = $"{p}_{idx}"
|
||||
paramName, Sql.parameter (NpgsqlParameter(paramName, v)))
|
||||
| Contains _ -> () // TODO
|
||||
| InArray (_, values) ->
|
||||
let p = name.Derive it.ParameterName
|
||||
yield (p, Sql.stringArray (values |> Seq.map string |> Array.ofSeq))
|
||||
| Equal v | Greater v | GreaterOrEqual v | Less v | LessOrEqual v | NotEqual v ->
|
||||
let p = name.Derive it.ParameterName
|
||||
yield (p, parameterFor v (fun l -> Sql.parameter (NpgsqlParameter(p, l)))) })
|
||||
@@ -137,7 +139,8 @@ module Query =
|
||||
fields
|
||||
|> Seq.map (fun it ->
|
||||
match it.Comparison with
|
||||
| Exists | NotExists -> $"{it.Path PostgreSQL} {it.Comparison.OpSql}"
|
||||
| Exists | NotExists -> $"{it.Path PostgreSQL AsSql} {it.Comparison.OpSql}"
|
||||
| InArray _ -> $"{it.Path PostgreSQL AsJson} {it.Comparison.OpSql} {name.Derive it.ParameterName}"
|
||||
| _ ->
|
||||
let p = name.Derive it.ParameterName
|
||||
let param, value =
|
||||
@@ -146,12 +149,11 @@ module Query =
|
||||
| In values ->
|
||||
let paramNames = values |> Seq.mapi (fun idx _ -> $"{p}_{idx}") |> String.concat ", "
|
||||
$"({paramNames})", defaultArg (Seq.tryHead values) (obj ())
|
||||
| Contains _ -> p, "" // TODO: may need to use -> vs ->> in field SQL
|
||||
| Equal v | Greater v | GreaterOrEqual v | Less v | LessOrEqual v | NotEqual v -> p, v
|
||||
| _ -> p, ""
|
||||
if isNumeric value then
|
||||
$"({it.Path PostgreSQL})::numeric {it.Comparison.OpSql} {param}"
|
||||
else $"{it.Path PostgreSQL} {it.Comparison.OpSql} {param}")
|
||||
$"({it.Path PostgreSQL AsSql})::numeric {it.Comparison.OpSql} {param}"
|
||||
else $"{it.Path PostgreSQL AsSql} {it.Comparison.OpSql} {param}")
|
||||
|> String.concat $" {howMatched} "
|
||||
|
||||
/// Create a WHERE clause fragment to implement an ID-based query
|
||||
|
||||
Reference in New Issue
Block a user