fsprojects/SQLProvider

Simple group by query with postgresql causes doubling up of double quotes when using double quoted declared fields

kgday opened this issue · 3 comments

kgday commented

In PostGreSq with a table where the fields are declared double quotedl, I have the following query:

                let! costs =
                    query {
                        for pol in ctx.Public.PurchaseOrderLine do
                            where (pol.JobId.Value = prodOrderID)
                            groupBy (pol.JobId, pol.ChargeAccount) into g
                            select 
                                {
                                    JobID = g.Key |> fst |> Option.defaultValue 0L
                                    ChargeAccount = g.Key |> snd
                                    TotalCost = g.Sum(fun o -> o.TotalCost)
                                }
                    }
                    |> Seq.executeQueryAsync   

The following sql is emitted:

SELECT "pol"."JobID" as ""pol"."JobID"", "pol"."ChargeAccount" as ""pol"."ChargeAccount"", SUM("pol"."TotalCost") as "pol.SUM_TotalCost" FROM "public"."PurchaseOrderLine" as "pol" WHERE (("pol"."JobID" = @param1)) GROUP BY "pol"."JobID", "pol"."ChargeAccount">, Parameters<@param1=12482>

Note the as parts have been double quoted twice. This causes postgresql to return an error:

zero-length delimited identifier at or near """"

In fairness, groupby is discouraged in the docs.

The work arround obviously for me at present is to create a view or do the grouping in the client. But I would have thought this was a simple enough group by.

This does work in MSSQL so probably wouldn't be too hard to fix in Postgres

I don't have Postgres so I can't test if it works in the latest version after this tiny fix. I'd expect it might do the query properly but may struggle to bring the results back to executing code.

I think the proper fix should be implementing selection of quote-characters like FireBird here: https://github.com/fsprojects/SQLProvider/pull/453/files