fix: Void functions return null instead of empty body (#1795)
* Change empty body reponse to null for scalar functions returning void or null values * Add test for functions returning an integer with null value Co-authored-by: Laurence Isla <lau.isla.c@gmail.com>
This commit is contained in:
co-authored by
Laurence Isla
parent
9c79a4174c
commit
7f11c1a991
@@ -98,7 +98,7 @@ asJsonF returnsScalar
|
|||||||
|
|
||||||
asJsonSingleF :: Bool -> SqlFragment --TODO! unsafe when the query actually returns multiple rows, used only on inserting and returning single element
|
asJsonSingleF :: Bool -> SqlFragment --TODO! unsafe when the query actually returns multiple rows, used only on inserting and returning single element
|
||||||
asJsonSingleF returnsScalar
|
asJsonSingleF returnsScalar
|
||||||
| returnsScalar = "coalesce(string_agg(to_json(_postgrest_t.pgrst_scalar)::text, ','), '')::character varying"
|
| returnsScalar = "coalesce(string_agg(to_json(_postgrest_t.pgrst_scalar)::text, ','), 'null')::character varying"
|
||||||
| otherwise = "coalesce(string_agg(to_json(_postgrest_t)::text, ','), '')::character varying"
|
| otherwise = "coalesce(string_agg(to_json(_postgrest_t)::text, ','), '')::character varying"
|
||||||
|
|
||||||
asBinaryF :: FieldName -> SqlFragment
|
asBinaryF :: FieldName -> SqlFragment
|
||||||
|
|||||||
+10
-3
@@ -282,11 +282,18 @@ spec actualPgVersion =
|
|||||||
`shouldRespondWith`
|
`shouldRespondWith`
|
||||||
[json|{"id": 2}|]
|
[json|{"id": 2}|]
|
||||||
|
|
||||||
it "returns nothing for void" $
|
it "returns null for void" $
|
||||||
post "/rpc/ret_void"
|
post "/rpc/ret_void"
|
||||||
[json|{}|]
|
[json|{}|]
|
||||||
`shouldRespondWith`
|
`shouldRespondWith`
|
||||||
""
|
"null"
|
||||||
|
{ matchHeaders = [matchContentTypeJson] }
|
||||||
|
|
||||||
|
it "returns null for an integer with null value" $
|
||||||
|
post "/rpc/ret_null"
|
||||||
|
[json|{}|]
|
||||||
|
`shouldRespondWith`
|
||||||
|
"null"
|
||||||
{ matchHeaders = [matchContentTypeJson] }
|
{ matchHeaders = [matchContentTypeJson] }
|
||||||
|
|
||||||
context "different types when overloaded" $ do
|
context "different types when overloaded" $ do
|
||||||
@@ -919,7 +926,7 @@ spec actualPgVersion =
|
|||||||
it "can set the same http header twice" $
|
it "can set the same http header twice" $
|
||||||
get "/rpc/set_cookie_twice"
|
get "/rpc/set_cookie_twice"
|
||||||
`shouldRespondWith`
|
`shouldRespondWith`
|
||||||
""
|
"null"
|
||||||
{ matchHeaders = [ matchContentTypeJson
|
{ matchHeaders = [ matchContentTypeJson
|
||||||
, "Set-Cookie" <:> "sessionid=38afes7a8; HttpOnly; Path=/"
|
, "Set-Cookie" <:> "sessionid=38afes7a8; HttpOnly; Path=/"
|
||||||
, "Set-Cookie" <:> "id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly" ]}
|
, "Set-Cookie" <:> "id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly" ]}
|
||||||
|
|||||||
Vendored
+4
@@ -1051,6 +1051,10 @@ $$ language sql;
|
|||||||
|
|
||||||
create function test.ret_void() returns void as '' language sql;
|
create function test.ret_void() returns void as '' language sql;
|
||||||
|
|
||||||
|
create or replace function test.ret_null() returns int as $$
|
||||||
|
select null::int;
|
||||||
|
$$ language sql;
|
||||||
|
|
||||||
create function test.ret_base64_bin() returns text as $$
|
create function test.ret_base64_bin() returns text as $$
|
||||||
select i.img from test.images_base64 i where i.name = 'A.png';
|
select i.img from test.images_base64 i where i.name = 'A.png';
|
||||||
$$ language sql;
|
$$ language sql;
|
||||||
|
|||||||
Reference in New Issue
Block a user