Quote identifier names in RPC function arguments (#1153)
This commit is contained in:
@@ -18,6 +18,7 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
|||||||
- #945, Fix slow start-up time on big schemas - @steve-chavez
|
- #945, Fix slow start-up time on big schemas - @steve-chavez
|
||||||
- #1129, Fix view embedding when table is capitalized - @steve-chavez
|
- #1129, Fix view embedding when table is capitalized - @steve-chavez
|
||||||
- #1149, OpenAPI: Change `GET` response type to array - @laughedelic
|
- #1149, OpenAPI: Change `GET` response type to array - @laughedelic
|
||||||
|
- #1152, Fix RPC failing when having arguments with reserved or uppercase keywords - @mdr1384
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
|
|||||||
@@ -173,9 +173,9 @@ callProc qi pgArgs returnsScalar selectQuery countQuery countTotal isSingle para
|
|||||||
unwords [
|
unwords [
|
||||||
"_args_record AS (",
|
"_args_record AS (",
|
||||||
"SELECT * FROM " <> (if isObject then "json_to_record" else "json_to_recordset") <> "($1)",
|
"SELECT * FROM " <> (if isObject then "json_to_record" else "json_to_recordset") <> "($1)",
|
||||||
"AS _(" <> intercalate ", " ((\a -> pgaName a <> " " <> pgaType a) <$> pgArgs) <> ")",
|
"AS _(" <> intercalate ", " ((\a -> pgFmtIdent (pgaName a) <> " " <> pgaType a) <$> pgArgs) <> ")",
|
||||||
")"]
|
")"]
|
||||||
, intercalate ", " ((\a -> pgaName a <> " := (SELECT " <> pgaName a <> " FROM _args_record)") <$> pgArgs))
|
, intercalate ", " ((\a -> pgFmtIdent (pgaName a) <> " := (SELECT " <> pgFmtIdent (pgaName a) <> " FROM _args_record)") <$> pgArgs))
|
||||||
countResultF = if countTotal then "( "<> countQuery <> ")" else "null::bigint" :: Text
|
countResultF = if countTotal then "( "<> countQuery <> ")" else "null::bigint" :: Text
|
||||||
_procName = qiName qi
|
_procName = qiName qi
|
||||||
responseHeaders =
|
responseHeaders =
|
||||||
|
|||||||
@@ -78,6 +78,16 @@ spec =
|
|||||||
get "/rpc/sayhello" `shouldRespondWith` 404
|
get "/rpc/sayhello" `shouldRespondWith` 404
|
||||||
get "/rpc/sayhello?any_arg=value" `shouldRespondWith` 404
|
get "/rpc/sayhello?any_arg=value" `shouldRespondWith` 404
|
||||||
|
|
||||||
|
it "works when having uppercase identifiers" $ do
|
||||||
|
get "/rpc/quotedFunction?user=mscott&fullName=Michael Scott&SSN=401-32-XXXX" `shouldRespondWith`
|
||||||
|
[json|{"user": "mscott", "fullName": "Michael Scott", "SSN": "401-32-XXXX"}|]
|
||||||
|
{ matchHeaders = [matchContentTypeJson] }
|
||||||
|
post "/rpc/quotedFunction"
|
||||||
|
[json|{"user": "dschrute", "fullName": "Dwight Schrute", "SSN": "030-18-XXXX"}|]
|
||||||
|
`shouldRespondWith`
|
||||||
|
[json|{"user": "dschrute", "fullName": "Dwight Schrute", "SSN": "030-18-XXXX"}|]
|
||||||
|
{ matchHeaders = [matchContentTypeJson] }
|
||||||
|
|
||||||
context "shaping the response returned by a proc" $ do
|
context "shaping the response returned by a proc" $ do
|
||||||
it "returns a project" $ do
|
it "returns a project" $ do
|
||||||
post "/rpc/getproject" [json| { "id": 1} |] `shouldRespondWith`
|
post "/rpc/getproject" [json| { "id": 1} |] `shouldRespondWith`
|
||||||
|
|||||||
Vendored
+5
@@ -1570,3 +1570,8 @@ comment on materialized view materialized_projects is
|
|||||||
$$A materialized view for projects
|
$$A materialized view for projects
|
||||||
|
|
||||||
Just a test for materialized views$$;
|
Just a test for materialized views$$;
|
||||||
|
|
||||||
|
create or replace function test."quotedFunction"("user" text, "fullName" text, "SSN" text)
|
||||||
|
returns jsonb AS $$
|
||||||
|
select format('{"user": "%s", "fullName": "%s", "SSN": "%s"}', "user", "fullName", "SSN")::jsonb;
|
||||||
|
$$ language sql;
|
||||||
|
|||||||
Reference in New Issue
Block a user